WM is making changes which allows apps to maintain
their orientation independent of the orientation of
the foreground app. This allows recents to always start
in portrait even when the app currently running is in
landscape. This means we have to give the illusion of
a landscape oriented overview when user swipes up in
gesterual nav when launcher is started in portrait
configuration.
PagedOrientationHandler abstracts all coordinate specific
logic from Paged/RecentsView primarily, but also all
other dynamic calculations throughout launcher.
PagedViewOrientationState is the single point of exposure
to other classes that depend on those changes. The goal
is to also minimize holding state to allow for default
implementations of PagedOrientationHandler for all the
3p/Fallback classes. PagedViewOrientationState also
holds other data around rotation that isn't
specifically tied to view logic.
The fake landscape overview can be toggled with:
adb shell settings put global forced_rotation [0/1]
Fixes: 146176182
Change-Id: I65d8d4e9f92b93931cbe0053ccaf0cda8d2ffd6c
Updating various static objects to use a standard pattern so that
it is easier to track and cleanup those objects
Bug: 141376165
Change-Id: Ia539cbfa338d544dddad771c5027b6748762768b
Existing clients now use the SingleAxisSwipeDetector subclass. A
followup CL will add BothAxesSwipeDetector, whose first client will be
the quick switch from home controller.
Bug: 126596417
Change-Id: I54c71088cfe99ff28cdc719a1eb7a7d06ac95d2d
It is now organized as follows:
- private constants
- public constants
- private final fields
- private variable fields
- constructors
- public methods
- private methods
- public interface/abstract class
This is intended to be a functional no-op.
Bug: 141939911
Change-Id: Iad5a9b3b73b35641f8a4f1d52ada6adef3825c47
Tested: Built and sanity checked manually.
Now that we only show dots instead of badges, we can simplify some logic
and remove a couple unused methods.
Change-Id: I72056eeb12e8968ec67b4c5b3a450d2ed5d4ee84
This will reduce confusion with the other "badging" concept we use for,
e.g. work profiles. It is also consistent with the external name
"notification dots".
Change-Id: I2a2c9d96dc0d6284eb0c48adc78a856271caad4d
> Items ids were already being typecasted to int when being bound on the UI
> Using a consistent type allow better use of platform data-structures
> Adding IntArray and IntSet as a replacement for various Collection classes
Change-Id: Id3c650ed2420c2bfca3bd7671d2b705b56112371
Static dependency does not work in the presence of multiple activities and
when the main activity is not Launcher (eg in fallback recents). Instead
creating FirstFrameAnimatorHelper on demand for individual animations.
Change-Id: I17bb69bbaaca92f0db994fb56fd784302c57d543
(This cl reverts change-Id: I455edcd17bda83ab51c2c04fa40e66097a4d6975)
Various animations were marked for cancellation when launcher activity is
destroyed. This this does not work with multiple activities (Launcher,
fallback recents, shortcut confirmation). Also since launcher activity
handles configuration changes, the activity is not destroyed often.
Instead associating a target with various animations which automatically
cancels the animations when that target goes away.
Change-Id: I64cd095a28075561a9e20c9dcdeb9f90c18e1047
Somethimes onSettingChanged can come after the connected has disconnected because
of posting message on the different thread.
Bug: 110929527
Change-Id: I09f503c2f2f437c8656d491a7fdec3ce4e82257b
We were requesting unbind in onCreate(), but the NotificationListenerService
documentation for requestUnbind() clearly states "The service should wait for the
{@link #onListenerConnected()} event before performing this operation. I know it's
tempting, but you must wait." I was tempted, and I did not wait. :(
The fact that the notification listener was binding even though the setting was off
was not only inefficient, but also had at least one user-visible bug: because
secure settings are set per user, the global badging setting actually only applies
canShowBadge = false for user 0; other users such as work profile still show badges.
Repro steps:
1. Have a work profile
2. Get a notification on work profile app and normal app
3. Turn off global badging setting ("Allow notification dots" from home settings)
4. Reboot the device
In this case, we get onCreate, call requestUnbind() which is ignored since we aren't
bound, then get onBind() and onListenerConnected() etc. Thus the work profile app has
a notification dot and other apps don't.
Bug: 71545493
Change-Id: I7f7dc219b25c28257f8b98fba7e362b99d3cba45
There seems to be an edge case where we can get a null notification in
onNotificationRemoved(); there's nothing actionable about that, so just
ignore it to prevent NPE. Also add null check to onNotificationPosted()
for good measure.
Bug: 69140873
Change-Id: I3586bf435d05aee38b99dffd3d01315b433e8476
Tested by running:
"runtest -x cts/tests/app/src/android/app/cts/NotificationManagerTest.java
-m testAutogrouping_autogroupStaysUntilAllNotificationsCanceled"
The test fails before this change, and passes afterwards.
Also manually verified that the original bug that introduced this
regression (b/65100024) remains fixed.
Bug: 68215987
Change-Id: I4af198fd5257ad1dfab5e052c11f58ea84b5095a
> Calculating extracted color during icon generation and storing it in model and DB
> Removing unused logic avoid various types of badge rendering
> Icons are badged with extracted colors, while folder is badged with theme color
Bug: 35428783
Change-Id: I93e30c52fbded7515c3ae1778422e84672eafb56
> Using a single linearLayout instead of multiple nested views
> Using clipToOutline for rounded corners instead of using canvas.saveLayer
> Removing nested view elevations and overdraw
> Using LayoutTransition for animating layout changes, instead of manually creating animators
Change-Id: I8e57092f52ca5a032a2756594fdd39788acc5a0d
It shouldn't be possible to have a null small icon, but apparently
there are cases where we get one anyway. Might as well handle it
gracefully instead of crashing.
Bug: 67156108
Change-Id: I01ad0251920f7f531a3019eb694946c3d295f9de
This requires maintaining notification group information by mapping
groupKey's to the summary key and child keys.
Bug: 65100024
Change-Id: Idd352ce5e243a0762bf30a9c79d36681456a1b17
- Reduce main notification height
- Increase header height and center "Notifications"
- Footer has short height when empty to serve as padding
Bug: 65215656
Change-Id: I691d176628b0b51e8d9af030084b8c29837778dc
- Added SettingsObserver as wrapper around ContentObserver
to observe Secure or System setting changes.
- NotificationListener and LauncherAppState observe changes
to the notification dots setting and unbind and rebind
the NotificationListener service, respectively.
Bug: 36815147
Change-Id: I2cc04ac816a8974969ad0ec759c5402e181fde24
> Refactoring SwipeDetector to both allow vertical and horizontal swipes
> Using SwipeDetector and common overscroll effect for notification swipes
instead of a separate logic
Change-Id: Ib706ee179811ade59ddb68184e1c202365d147c4
There was a potential race condition where we would try to do a full
refresh of notifications before the listener was connected. Now we
skip the full refresh if we aren't connected, which is fine because
we also do a full refresh in onListenerConnected() anyway.
Bug: 62107069
Change-Id: I2fe4f49eb8a840230d32034be11fe7765a366e75
- Don't remove elevation during animation (b/62905720)
- Other adjustments (b/35766387)
- Add "gutter" between notification and shortcuts
- Change shortcuts to always be primary color (e.g. white)
- Scale down shortcut icons when notifications present
- Apply icon extracted color to "Notifications" header
Change-Id: Idf791dc76d15d05d246000ad73810916d7cd1750