[roll] Roll fuchsia [carnelian] Support multiple views

This change allows Carnelian applications running directly on the
display controller to create and close additional views. A future
change will allow this to work with Scenic.

The reason for this change is to allow the recovery UI to use views to
better organize the increasing functionality of their application. For
example, bringing up a view with a text field and keyboard for entering
a WiFi password.

A key limitation of this new feature is that only one view per physical
display can be visible at a time.

The spinning square example was modified to demonstrate creating and
closing additional views.

The api for additional views is found in the application sender in a
method that takes a view creation options structure and returns the
view key that will be used for the new view. With this view key, the
application can, in the future, close that view.

In order to make this change more safely, ViewKey was turned into a
newtype, where before it was a type alias for u64.

Since the new view key needs to be available to return in the new
method in AppSender, modified the way IdGenerator works so that it can
be used globally. A side effect of this is that all users of
IdGenerator share one 64 bit space, but even at rate of thousands of
IDs per second this generator will take years to overflow and thus run
out of IDs. Modified facets and groups to use the modified generator.

In order to allow applications to create different sorts of views,
create_addition_view takes a Box<dyn Any> that it passed through to
ApplicationAssistant's create_view_assistant.

Added a ViewCreationParameters structure to bind together all the
parameters needed internally for view creation.

Since it is hard to predict the timing of messages referencing view
keys and the removal of the views identified by that key, made most
internal messages referencing keys ignore keys for non-existent views.

Added view tracking to the display direct view strategy so implement
trait methods to identify which view is focused and which views are
visible.

Previously, the view ID for the one and only one view on a display was
the same as the display ID. Since there can now be more than one view
per display, added some mechanism for tracking which views are on which
display.

Updated virtcon to not require particular ViewKey values.

Testing: manual plus unit tests.

Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/669892
Original-Revision: 4a8fb9f3e6fd99be43f6368e840e52837e7ee535
GitOrigin-RevId: 9e78606fb68235b23c066791c39319d3284ed028
Change-Id: I339ae3f25d0dfee075169f13adb3057c34d00a4e
1 file changed
tree: 4eec021727face02a3b898c402e1abb81f8e7cb9
  1. infra/
  2. third_party/
  3. cts
  4. firmware
  5. flower
  6. fortune-teller
  7. jiri.lock
  8. minimal
  9. prebuilts
  10. README.md
  11. stem
  12. test_durations
  13. toolchain
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.