From ffb1601d496998ea4b387ad3e7289468a4ccebea Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 2 Apr 2021 07:41:19 -0400 Subject: [PATCH] Controls in QS 1. Migrate Android 11 users to a priority QS tile position 2. New Android 12 control users will see a tile appear at the end, with seeding already initiated. 3. Add a new method to QSTileHost to position a tile in the middle 4. Remove all Controls code from GlobalActionsDialog Bug: 172360102 Test: atest QSTileHostTest TileServicesTest QSFragmentTest GlobalActionsDialogTest DeviceControlsTileTest Change-Id: I1e52681b2cf7948b732808b1ff426d09b379ed93 --- packages/SystemUI/AndroidManifest.xml | 1 + .../res/layout/global_actions_grid_v2.xml | 6 - .../controller/ControlsControllerImpl.kt | 9 +- .../management/ControlsEditingActivity.kt | 24 +-- .../management/ControlsFavoritingActivity.kt | 35 +--- .../ControlsProviderSelectorActivity.kt | 23 +-- .../controls/ui/ControlActionCoordinator.kt | 2 +- .../ui/ControlActionCoordinatorImpl.kt | 9 +- .../systemui/controls/ui/ControlsActivity.kt | 16 +- .../controls/ui/ControlsUiController.kt | 3 +- .../controls/ui/ControlsUiControllerImpl.kt | 71 +++---- .../globalactions/GlobalActionsDialog.java | 192 +----------------- .../com/android/systemui/qs/QSTileHost.java | 46 ++++- .../android/systemui/qs/dagger/QSModule.java | 3 + .../systemui/qs/tiles/DeviceControlsTile.kt | 17 +- .../statusbar/phone/AutoTileManager.java | 20 ++ .../policy/DeviceControlsController.kt | 35 ++++ .../policy/DeviceControlsControllerImpl.kt | 173 ++++++++++++++++ .../policy/dagger/StatusBarPolicyModule.java | 9 +- .../GlobalActionsDialogTest.java | 37 +--- .../android/systemui/qs/QSFragmentTest.java | 4 +- .../android/systemui/qs/QSTileHostTest.java | 95 +++++++-- .../qs/external/TileServicesTest.java | 6 +- .../qs/tiles/DeviceControlsTileTest.kt | 29 +-- .../statusbar/phone/AutoTileManagerTest.java | 19 +- .../DeviceControlsControllerImplTest.kt | 151 ++++++++++++++ 26 files changed, 616 insertions(+), 419 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsController.kt create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt create mode 100644 packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 42d7e587b668c..85ecb1c7345da 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -757,6 +757,7 @@ android:excludeFromRecents="true" android:showWhenLocked="true" android:showForAllUsers="true" + android:finishOnTaskLaunch="true" android:launchMode="singleInstance" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden" android:visibleToInstantApps="true"> diff --git a/packages/SystemUI/res/layout/global_actions_grid_v2.xml b/packages/SystemUI/res/layout/global_actions_grid_v2.xml index 30ffc32ce1f84..f06a4be5f7b8a 100644 --- a/packages/SystemUI/res/layout/global_actions_grid_v2.xml +++ b/packages/SystemUI/res/layout/global_actions_grid_v2.xml @@ -30,12 +30,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content"/> - - diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt index 96f207215f716..8c3ef68f0bde4 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt @@ -44,8 +44,9 @@ import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dump.DumpManager -import com.android.systemui.globalactions.GlobalActionsDialog import com.android.systemui.settings.UserTracker +import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_FILE +import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED import com.android.systemui.util.concurrency.DelayableExecutor import java.io.FileDescriptor import java.io.PrintWriter @@ -198,11 +199,11 @@ class ControlsControllerImpl @Inject constructor ( // When a component is uninstalled, allow seeding to happen again if the user // reinstalls the app val prefs = userStructure.userContext.getSharedPreferences( - GlobalActionsDialog.PREFS_CONTROLS_FILE, Context.MODE_PRIVATE) + PREFS_CONTROLS_FILE, Context.MODE_PRIVATE) val completedSeedingPackageSet = prefs.getStringSet( - GlobalActionsDialog.PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf()) + PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf()) val servicePackageSet = serviceInfoSet.map { it.packageName } - prefs.edit().putStringSet(GlobalActionsDialog.PREFS_CONTROLS_SEEDING_COMPLETED, + prefs.edit().putStringSet(PREFS_CONTROLS_SEEDING_COMPLETED, completedSeedingPackageSet.intersect(servicePackageSet)).apply() var changed = false diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt index 7dd1d28170b2c..6f94943472b1f 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsEditingActivity.kt @@ -16,6 +16,7 @@ package com.android.systemui.controls.management +import android.app.ActivityOptions import android.content.ComponentName import android.content.Intent import android.os.Bundle @@ -34,7 +35,6 @@ import com.android.systemui.controls.controller.ControlsControllerImpl import com.android.systemui.controls.controller.StructureInfo import com.android.systemui.controls.ui.ControlsActivity import com.android.systemui.controls.ui.ControlsUiController -import com.android.systemui.globalactions.GlobalActionsComponent import com.android.systemui.settings.CurrentUserTracker import com.android.systemui.util.LifecycleActivity import javax.inject.Inject @@ -45,7 +45,6 @@ import javax.inject.Inject class ControlsEditingActivity @Inject constructor( private val controller: ControlsControllerImpl, private val broadcastDispatcher: BroadcastDispatcher, - private val globalActionsComponent: GlobalActionsComponent, private val customIconCache: CustomIconCache, private val uiController: ControlsUiController ) : LifecycleActivity() { @@ -62,7 +61,6 @@ class ControlsEditingActivity @Inject constructor( private lateinit var model: FavoritesModel private lateinit var subtitle: TextView private lateinit var saveButton: View - private var backToGlobalActions = true private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) { private val startingUser = controller.currentUserId @@ -86,11 +84,6 @@ class ControlsEditingActivity @Inject constructor( structure = it } ?: run(this::finish) - backToGlobalActions = intent.getBooleanExtra( - ControlsUiController.BACK_TO_GLOBAL_ACTIONS, - true - ) - bindViews() bindButtons() @@ -109,15 +102,6 @@ class ControlsEditingActivity @Inject constructor( } override fun onBackPressed() { - if (backToGlobalActions) { - globalActionsComponent.handleShowGlobalActionsMenu() - } else { - val i = Intent().apply { - component = ComponentName(applicationContext, ControlsActivity::class.java) - addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) - } - startActivity(i) - } animateExitAndFinish() } @@ -161,8 +145,12 @@ class ControlsEditingActivity @Inject constructor( setText(R.string.save) setOnClickListener { saveFavorites() + startActivity( + Intent(applicationContext, ControlsActivity::class.java), + ActivityOptions + .makeSceneTransitionAnimation(this@ControlsEditingActivity).toBundle() + ) animateExitAndFinish() - globalActionsComponent.handleShowGlobalActionsMenu() } } } diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt index 309901443393d..dca52a9678b95 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsFavoritingActivity.kt @@ -43,7 +43,6 @@ import com.android.systemui.controls.controller.StructureInfo import com.android.systemui.controls.ui.ControlsActivity import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.dagger.qualifiers.Main -import com.android.systemui.globalactions.GlobalActionsComponent import com.android.systemui.settings.CurrentUserTracker import com.android.systemui.util.LifecycleActivity import java.text.Collator @@ -56,7 +55,6 @@ class ControlsFavoritingActivity @Inject constructor( private val controller: ControlsControllerImpl, private val listingController: ControlsListingController, private val broadcastDispatcher: BroadcastDispatcher, - private val globalActionsComponent: GlobalActionsComponent, private val uiController: ControlsUiController ) : LifecycleActivity() { @@ -92,7 +90,6 @@ class ControlsFavoritingActivity @Inject constructor( private lateinit var comparator: Comparator private var cancelLoadRunnable: Runnable? = null private var isPagerLoaded = false - private var backToGlobalActions = true private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) { private val startingUser = controller.currentUserId @@ -133,11 +130,6 @@ class ControlsFavoritingActivity @Inject constructor( component = intent.getParcelableExtra(Intent.EXTRA_COMPONENT_NAME) fromProviderSelector = intent.getBooleanExtra(EXTRA_FROM_PROVIDER_SELECTOR, false) - backToGlobalActions = intent.getBooleanExtra( - ControlsUiController.BACK_TO_GLOBAL_ACTIONS, - true - ) - bindViews() } @@ -311,13 +303,6 @@ class ControlsFavoritingActivity @Inject constructor( private fun bindButtons() { otherAppsButton = requireViewById