Loading packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt +0 −6 Original line number Diff line number Diff line Loading @@ -172,12 +172,6 @@ interface ControlsController : UserAwareController { */ fun removeFavorites(componentName: ComponentName): Boolean /** * Checks if the favorites can be removed. You can't remove components from the preferred list. * @param componentName the name of the service that provides the [Control] */ fun canRemoveFavorites(componentName: ComponentName): Boolean /** * Replaces the favorites for the given structure. * Loading packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt +18 −17 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import com.android.systemui.controls.ControlStatus import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.SelectedItem import com.android.systemui.dagger.SysUISingleton Loading @@ -58,6 +59,7 @@ class ControlsControllerImpl @Inject constructor ( private val context: Context, @Background private val executor: DelayableExecutor, private val uiController: ControlsUiController, private val selectedComponentRepository: SelectedComponentRepository, private val bindingController: ControlsBindingController, private val listingController: ControlsListingController, private val userFileManager: UserFileManager, Loading Loading @@ -497,18 +499,15 @@ class ControlsControllerImpl @Inject constructor ( } } override fun canRemoveFavorites(componentName: ComponentName): Boolean = !authorizedPanelsRepository.getPreferredPackages().contains(componentName.packageName) override fun removeFavorites(componentName: ComponentName): Boolean { if (!confirmAvailability()) return false if (!canRemoveFavorites(componentName)) return false executor.execute { Favorites.removeStructures(componentName) authorizedPanelsRepository.removeAuthorizedPanels(setOf(componentName.packageName)) if (Favorites.removeStructures(componentName)) { persistenceWrapper.storeFavorites(Favorites.getAllStructures()) } authorizedPanelsRepository.removeAuthorizedPanels(setOf(componentName.packageName)) } return true } Loading Loading @@ -574,7 +573,9 @@ class ControlsControllerImpl @Inject constructor ( } override fun setPreferredSelection(selectedItem: SelectedItem) { uiController.updatePreferences(selectedItem) selectedComponentRepository.setSelectedComponent( SelectedComponentRepository.SelectedComponent(selectedItem) ) } override fun dump(pw: PrintWriter, args: Array<out String>) { Loading packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt +7 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import com.android.systemui.controls.management.ControlsProviderSelectorActivity import com.android.systemui.controls.management.ControlsRequestDialog import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.AuthorizedPanelsRepositoryImpl import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepositoryImpl import com.android.systemui.controls.settings.ControlsSettingsDialogManager import com.android.systemui.controls.settings.ControlsSettingsDialogManagerImpl import com.android.systemui.controls.ui.ControlActionCoordinator Loading Loading @@ -114,6 +116,11 @@ abstract class ControlsModule { repository: AuthorizedPanelsRepositoryImpl ): AuthorizedPanelsRepository @Binds abstract fun providePreferredPanelRepository( repository: SelectedComponentRepositoryImpl ): SelectedComponentRepository @BindsOptionalOf abstract fun optionalPersistenceWrapper(): ControlsFavoritePersistenceWrapper Loading packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImpl.kt +16 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ package com.android.systemui.controls.panels import android.content.Context import android.content.SharedPreferences import com.android.systemui.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl Loading @@ -30,7 +32,8 @@ class AuthorizedPanelsRepositoryImpl constructor( private val context: Context, private val userFileManager: UserFileManager, private val userTracker: UserTracker private val userTracker: UserTracker, private val featureFlags: FeatureFlags, ) : AuthorizedPanelsRepository { override fun getAuthorizedPanels(): Set<String> { Loading Loading @@ -71,8 +74,18 @@ constructor( userTracker.userId, ) // If we've never run this (i.e., the key doesn't exist), add the default packages if (sharedPref.getStringSet(KEY, null) == null) { // We should add default packages in two cases: // 1) We've never run this // 2) APP_PANELS_REMOVE_APPS_ALLOWED got disabled after user removed all apps val needToSetup = if (featureFlags.isEnabled(Flags.APP_PANELS_REMOVE_APPS_ALLOWED)) { sharedPref.getStringSet(KEY, null) == null } else { // There might be an empty set that need to be overridden after the feature has been // turned off after being turned on sharedPref.getStringSet(KEY, null).isNullOrEmpty() } if (needToSetup) { sharedPref.edit().putStringSet(KEY, getPreferredPackages()).apply() } return sharedPref Loading packages/SystemUI/src/com/android/systemui/controls/panels/SelectedComponentRepository.kt 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.controls.panels import android.content.ComponentName import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.SelectedItem import com.android.systemui.flags.Flags /** Stores user-selected preferred component. */ interface SelectedComponentRepository { /** * Returns currently set preferred component, or null when nothing is set. Consider using * [ControlsUiController.getPreferredSelectedItem] to get domain specific data */ fun getSelectedComponent(): SelectedComponent? /** Sets preferred component. Use [getSelectedComponent] to get current one */ fun setSelectedComponent(selectedComponent: SelectedComponent) /** Clears current preferred component. [getSelectedComponent] will return null afterwards */ fun removeSelectedComponent() /** * Return true when default preferred component should be set up and false the otherwise. This * is always true when [Flags.APP_PANELS_REMOVE_APPS_ALLOWED] is disabled */ fun shouldAddDefaultComponent(): Boolean /** * Sets if default component should be added. This is ignored when * [Flags.APP_PANELS_REMOVE_APPS_ALLOWED] is disabled */ fun setShouldAddDefaultComponent(shouldAdd: Boolean) data class SelectedComponent( val name: String, val componentName: ComponentName?, val isPanel: Boolean, ) { constructor( selectedItem: SelectedItem ) : this( name = selectedItem.name.toString(), componentName = selectedItem.componentName, isPanel = selectedItem is SelectedItem.PanelItem, ) } } Loading
packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt +0 −6 Original line number Diff line number Diff line Loading @@ -172,12 +172,6 @@ interface ControlsController : UserAwareController { */ fun removeFavorites(componentName: ComponentName): Boolean /** * Checks if the favorites can be removed. You can't remove components from the preferred list. * @param componentName the name of the service that provides the [Control] */ fun canRemoveFavorites(componentName: ComponentName): Boolean /** * Replaces the favorites for the given structure. * Loading
packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt +18 −17 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import com.android.systemui.controls.ControlStatus import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.SelectedItem import com.android.systemui.dagger.SysUISingleton Loading @@ -58,6 +59,7 @@ class ControlsControllerImpl @Inject constructor ( private val context: Context, @Background private val executor: DelayableExecutor, private val uiController: ControlsUiController, private val selectedComponentRepository: SelectedComponentRepository, private val bindingController: ControlsBindingController, private val listingController: ControlsListingController, private val userFileManager: UserFileManager, Loading Loading @@ -497,18 +499,15 @@ class ControlsControllerImpl @Inject constructor ( } } override fun canRemoveFavorites(componentName: ComponentName): Boolean = !authorizedPanelsRepository.getPreferredPackages().contains(componentName.packageName) override fun removeFavorites(componentName: ComponentName): Boolean { if (!confirmAvailability()) return false if (!canRemoveFavorites(componentName)) return false executor.execute { Favorites.removeStructures(componentName) authorizedPanelsRepository.removeAuthorizedPanels(setOf(componentName.packageName)) if (Favorites.removeStructures(componentName)) { persistenceWrapper.storeFavorites(Favorites.getAllStructures()) } authorizedPanelsRepository.removeAuthorizedPanels(setOf(componentName.packageName)) } return true } Loading Loading @@ -574,7 +573,9 @@ class ControlsControllerImpl @Inject constructor ( } override fun setPreferredSelection(selectedItem: SelectedItem) { uiController.updatePreferences(selectedItem) selectedComponentRepository.setSelectedComponent( SelectedComponentRepository.SelectedComponent(selectedItem) ) } override fun dump(pw: PrintWriter, args: Array<out String>) { Loading
packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsModule.kt +7 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ import com.android.systemui.controls.management.ControlsProviderSelectorActivity import com.android.systemui.controls.management.ControlsRequestDialog import com.android.systemui.controls.panels.AuthorizedPanelsRepository import com.android.systemui.controls.panels.AuthorizedPanelsRepositoryImpl import com.android.systemui.controls.panels.SelectedComponentRepository import com.android.systemui.controls.panels.SelectedComponentRepositoryImpl import com.android.systemui.controls.settings.ControlsSettingsDialogManager import com.android.systemui.controls.settings.ControlsSettingsDialogManagerImpl import com.android.systemui.controls.ui.ControlActionCoordinator Loading Loading @@ -114,6 +116,11 @@ abstract class ControlsModule { repository: AuthorizedPanelsRepositoryImpl ): AuthorizedPanelsRepository @Binds abstract fun providePreferredPanelRepository( repository: SelectedComponentRepositoryImpl ): SelectedComponentRepository @BindsOptionalOf abstract fun optionalPersistenceWrapper(): ControlsFavoritePersistenceWrapper Loading
packages/SystemUI/src/com/android/systemui/controls/panels/AuthorizedPanelsRepositoryImpl.kt +16 −3 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ package com.android.systemui.controls.panels import android.content.Context import android.content.SharedPreferences import com.android.systemui.R import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl Loading @@ -30,7 +32,8 @@ class AuthorizedPanelsRepositoryImpl constructor( private val context: Context, private val userFileManager: UserFileManager, private val userTracker: UserTracker private val userTracker: UserTracker, private val featureFlags: FeatureFlags, ) : AuthorizedPanelsRepository { override fun getAuthorizedPanels(): Set<String> { Loading Loading @@ -71,8 +74,18 @@ constructor( userTracker.userId, ) // If we've never run this (i.e., the key doesn't exist), add the default packages if (sharedPref.getStringSet(KEY, null) == null) { // We should add default packages in two cases: // 1) We've never run this // 2) APP_PANELS_REMOVE_APPS_ALLOWED got disabled after user removed all apps val needToSetup = if (featureFlags.isEnabled(Flags.APP_PANELS_REMOVE_APPS_ALLOWED)) { sharedPref.getStringSet(KEY, null) == null } else { // There might be an empty set that need to be overridden after the feature has been // turned off after being turned on sharedPref.getStringSet(KEY, null).isNullOrEmpty() } if (needToSetup) { sharedPref.edit().putStringSet(KEY, getPreferredPackages()).apply() } return sharedPref Loading
packages/SystemUI/src/com/android/systemui/controls/panels/SelectedComponentRepository.kt 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.controls.panels import android.content.ComponentName import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.SelectedItem import com.android.systemui.flags.Flags /** Stores user-selected preferred component. */ interface SelectedComponentRepository { /** * Returns currently set preferred component, or null when nothing is set. Consider using * [ControlsUiController.getPreferredSelectedItem] to get domain specific data */ fun getSelectedComponent(): SelectedComponent? /** Sets preferred component. Use [getSelectedComponent] to get current one */ fun setSelectedComponent(selectedComponent: SelectedComponent) /** Clears current preferred component. [getSelectedComponent] will return null afterwards */ fun removeSelectedComponent() /** * Return true when default preferred component should be set up and false the otherwise. This * is always true when [Flags.APP_PANELS_REMOVE_APPS_ALLOWED] is disabled */ fun shouldAddDefaultComponent(): Boolean /** * Sets if default component should be added. This is ignored when * [Flags.APP_PANELS_REMOVE_APPS_ALLOWED] is disabled */ fun setShouldAddDefaultComponent(shouldAdd: Boolean) data class SelectedComponent( val name: String, val componentName: ComponentName?, val isPanel: Boolean, ) { constructor( selectedItem: SelectedItem ) : this( name = selectedItem.name.toString(), componentName = selectedItem.componentName, isPanel = selectedItem is SelectedItem.PanelItem, ) } }