If the list isn't visible, we shouldn't allow HUNs to be
Test: ZenModeNotifVisFragmentTest, manual
Fixes: 367222597
Flag: EXEMPT bugfix
Change-Id: I1dc72061dfb99aed8b644c703214b17d62b0532e
In addition to looking nicer, this fixes two accessibility issues ("no hint when text is entered" and "reason for disabled button is unclear").
This requires a bit of theme merging black magic, because TextInputLayout requires a Theme.AppCompat descendant, which the Settings theme isn't.
Fixes: 356398157
Fixes: 370654542
Fixes: 369942776
Test: atest ZenModeEditNamePreferenceControllerTest
Flag: android.app.modes_ui
Change-Id: I92d8ec044dabc6daed5d755e206120ec7abc143e
Content description (full day name) replaces TextOn/TextOff (day name initial), and the state description no longer has the day name. As a result:
* the initial readout changes from "Monday, off, M, Switch" to "Off, Monday, Switch"
* when toggling, the name of the day is no longer repeated, and just "On/Off" is announced.
Fixes: 370360007
Test: manual, with Talkback
Flag: android.app.modes_ui
Change-Id: I57bbd7034e1af2836582720a7f4871a79d6644ab
Modes sharing the same icon would also share the applied tint (e.g. all with the "active" tint even if only the last one of them is active).
(Although it should never happen, also removed a potential NPE for mode icons without ConstantState).
Fixes: 367131481
Test: manual
Flag: android.app.modes_ui
Change-Id: I56867783310ea57f2e92c866ff0b5b53ac86bf37
Passes the key for the ZenModesListAddModePreferenceController into the
constructor, to be supplied from the Fragment.
Flag: android.app.modes_ui
Bug: 361144180
Test: atest ZenModesListAddModePreferenceControllerTest
Change-Id: I23d5c11f8676b9ed2bde807e24f20346444e7963
Makes ZenModesListAddModePreferenceController extend
BasePreferenceController. This should fix warning statements, and has
the effect of adding "Create your own mode" to the Settings Search menu.
Test: build+flash
Bug: 361144180
Flag: android.app.modes_ui
Change-Id: Ic8675420b831818f658506f36938f38e803cc9aa
These aren't in scope for the modes_ui release
Test: N/A
Flag: android.app.modes_ui
Bug: 354141067
Change-Id: I28887d766cde2d6a4e18a66a99d1625f80aa0667
Test: chage languages in Settings, search for a mode by name
Bug: 354141067
Flag: android.app.modes_ui
Change-Id: If12d76d268134e415510304278441a53d76af36d
This can happen if the activity is recreated; our approach doesn't support this case very well. With this change, the dialog is not reshown when the activity is recreated, which is not optimal but better than crashing (as it does today). There is no lost work because it's the first choice, and the follow-on steps (icon picker, etc) can be recreated without problems.
Fixes: 359746551
Test: manual, with don't keep activities
Flag: android.app.modes_ui
Change-Id: I84bdeb0007e8c50ec9dd8af61991c7e55ddb8298
Whenever setInterruptionFilter() is called with NONE or ALARMS, the Do Not Disturb mode now shows the current policy (nothing allowed or alarms/media allowed), instead of the normal PRIORITY policy. This policy is read-only in the UI since it cannot be customized.
This should be, or at least become, pretty rare (with small exceptions, apps targeting V that call setInterruptionFilter() will use an implicit mode instead of changing the global zen mode, plus using these filters is quite nonstandard in itself).
Fixes: 361586248
Test: atest & manual (toggling DND via cmd shell)
Flag: android.app.modes_ui
Change-Id: If2439480235d30aa310ad8925341183b9761784c
Also moves the modes entrypoints out of the sub-pages it was previously in (notifications and sound settings).
Bug: 353700470
Test: manual by opening the homepage
Flag: android.app.modes_ui
Change-Id: I53124bfed25c43fc2dabaf9c43ce0513bbfc7377
In settings, reduce calls to getInstance(), and pass it to preferences and their controllers instead.
Bug: 360399800
Test: atest ZenModesListItemPreferenceTest ZenModesListPreferenceControllerTest
Flag: android.app.modes_ui
Change-Id: I318320575e3bd32b5d13a385fa644f8032484e1c
The ZenModesLinkPreferenceController is present in the Notifications and Sound screens, and although isAvailable() is false when MODES_UI is not enabled, it was still registering the listener for Settings changes, and calling updateState().
Thus, Settings would (likely) crash if Zen settings change while the user is in one of those screens, due to not finding the manual rule.
Fixes: 360498255
Test: atest ZenSettingsObserverTest
Flag: android.app.modes_ui
Change-Id: I7741809fd0028aace6ac58992be965701e64a2e3
Adds logging for button on confirmation dialog after enable/disable zen
mode toggle is clicked.
Bug: 356154473
Flag: android.app.modes_ui
Test: build and flash
Change-Id: Ie1dc1c14e1519541da641a69a217cf8a5dfa54f2
Adds metrics categories for driving and bedtime interstitial pages,
which we want to distinguish from other types of interstitial pages.
Bug: 332937635
Flag: android.app.modes_ui
Test: Build and flash
Change-Id: I49f2fd9f86f7d2737aebd9ef9d8675787421cc09
Test: long press on a not setup mode tile on a large screen device
Flag: android.app.modes_ui
Fixes: 360898235
Change-Id: I1d4128c6ee3469dceb00e8cffdd5da7f4b3732b4
Also use the OTHER image for calendar/time, instead of UNKNOWN.
Bug: 332730534
Test: manual
Flag: android.app.modes_ui
Change-Id: I85a36d2d409ad3e9f3d5f70f95d90512443971a7
Instead of "Limit what can notify you", title is now "Allow all notifications" and its behavior is reversed (switch ON hides people/apps/other).
Fixes: 360359116
Test: atest InterruptionFilterPreferenceControllerTest + manual
Flag: android.app.modes_ui
Change-Id: Ibb5334889662ec3aa778cd74c51506718ab0ebc7
* Sometimes would cause an unending stream of accessibility events (particularly if starting off-screen). This would break TalkBack and anything that depends on UiAutomator (although the system itself took it like a champ).
* Sometimes would not load images (because the ViewTreeObserver would never fire onGlobalLayout after being added because measured width was 0, even though a new width was calculated later).
* Would not recalculate the number of icons that fit if the width changes after the first layout.
Combining ViewHolders with waiting for measuring and/or ViewTreeObservers was always a wonky approach, even though it should've worked in theory. This should be more robust.
Also fixes the unwanted animation on mode screen load related to the absence of the header name being applied a tad too late.
Fixes: 359948417
Fixes: 360072876
Fixes: 360328804
Test: atest SettingsRoboTests + manual + adb shell uiautomator events
Flag: android.app.modes_ui
Change-Id: I7e5dfbdab220d1ebc1c68e5e87ce544ee86b6a65
Switching from Priority Apps to None would still show the icons of the priority apps. There were several minor things wrong:
* We were keeping the AppSession when a mode switches from "priority apps" to "none", and because onResume always fires the callback, we were loading the icons.
* Even when deactivating the session, its own onResume lifecycle listener was still firing one extra time, before we had a chance to deactivate it.
Also two minor improvements to CircularIconsPreference:
* Update mLoadedIcons when we early exit due to mIconSet having no items. Mostly for testing, since the icons wouldn't be visible anyway.
* Use notifyChanged() when we get a measured view, instead of holding a reference to the view. Technically the previous code violated the "shouldn't keep references to views outside of onBindViewHolder" (although I didn't see this having an effect in practice).
Fixes: 360077747
Test: atest ZenModeAppsLinkPreferenceControllerTest
Flag: android.app.modes_ui
Change-Id: I6d4b7a344542da46f5ebfcd0774f1af27ed113ac
Assigns metrics categories to all modes pages under
ZenModesListFragment. Includes new metrics categories where appropriate.
Bug: 332937635
Test: Build and flash
Flag: android.app.modes_ui
Change-Id: Ic19862ec194b40eae294d3c30240fe3f51304665
This change removes the custom rounding of corners, as the provided images already have rounded corners.
Bug: 332730534
Test: manual (light & dark mode, various font/display sizes)
Flag: android.app.modes_ui
Change-Id: I71d0707554e5bc638add6a2907874e18e833da08
Also, don't apply the layout params, etc on each call to updateState - once per displayPreference is enough.
Fixes: 356399449
Bug: 357861830
Test: manual
Flag: android.app.modes_ui
Change-Id: I6967ea1745377d0f514ca0f68101043f017a8fd7
Return after finish() when mode data is invalid; start intent before finish() so the transition is animated like going forward.
Bug: 332730534
Test: manual
Flag: android.app.modes_ui
Change-Id: I26522fdf468da7f2fdb8f75ac405d5f808f8828f