Remove Dependency.staticOnConfigurationChanged
ConfigurationChangedReceiver is removed. Classes that want to be
notified of configuration changes should implement
ConfigurationController.ConfigurationListener instead and register
themselves with the ConfigurationController.
Bug: 144782965
Test: atest SystemUITests
Change-Id: Id2c3fe5ae2729b181769fb31b8050da264299d72
diff --git a/packages/SystemUI/src/com/android/systemui/ConfigurationChangedReceiver.java b/packages/SystemUI/src/com/android/systemui/ConfigurationChangedReceiver.java
deleted file mode 100644
index 4fba640..0000000
--- a/packages/SystemUI/src/com/android/systemui/ConfigurationChangedReceiver.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2017 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;
-
-import android.content.res.Configuration;
-
-public interface ConfigurationChangedReceiver {
- void onConfigurationChanged(Configuration newConfiguration);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index a616484..c55b0d9 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -18,7 +18,6 @@
import android.app.AlarmManager;
import android.app.INotificationManager;
import android.app.IWallpaperManager;
-import android.content.res.Configuration;
import android.hardware.SensorPrivacyManager;
import android.hardware.display.NightDisplayListener;
import android.os.Handler;
@@ -555,15 +554,6 @@
.forEach(o -> ((Dumpable) o).dump(fd, pw, args));
}
- protected static void staticOnConfigurationChanged(Configuration newConfig) {
- sDependency.onConfigurationChanged(newConfig);
- }
-
- protected synchronized void onConfigurationChanged(Configuration newConfig) {
- mDependencies.values().stream().filter(obj -> obj instanceof ConfigurationChangedReceiver)
- .forEach(o -> ((ConfigurationChangedReceiver) o).onConfigurationChanged(newConfig));
- }
-
protected final <T> T getDependency(Class<T> cls) {
return getDependencyInner(cls);
}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index f0317b4..1b264e5 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -218,7 +218,11 @@
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (mServicesStarted) {
- Dependency.staticOnConfigurationChanged(newConfig);
+ SystemUIFactory
+ .getInstance()
+ .getRootComponent()
+ .getConfigurationController()
+ .onConfigurationChanged(newConfig);
int len = mServices.length;
for (int i = 0; i < len; i++) {
if (mServices[i] != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index dd00eee..256c5d5 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -41,11 +41,11 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.settingslib.applications.InterestingConfigChanges;
-import com.android.systemui.ConfigurationChangedReceiver;
import com.android.systemui.R;
import com.android.systemui.assist.ui.DefaultUiController;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import javax.inject.Inject;
@@ -55,7 +55,7 @@
* Class to manage everything related to assist in SystemUI.
*/
@Singleton
-public class AssistManager implements ConfigurationChangedReceiver {
+public class AssistManager {
/**
* Controls the UI for showing Assistant invocation progress.
@@ -154,6 +154,33 @@
}
};
+ private ConfigurationController.ConfigurationListener mConfigurationListener =
+ new ConfigurationController.ConfigurationListener() {
+ @Override
+ public void onConfigChanged(Configuration newConfig) {
+ if (!mInterestingConfigChanges.applyNewConfig(mContext.getResources())) {
+ return;
+ }
+ boolean visible = false;
+ if (mView != null) {
+ visible = mView.isShowing();
+ mWindowManager.removeView(mView);
+ }
+
+ mView = (AssistOrbContainer) LayoutInflater.from(mContext).inflate(
+ R.layout.assist_orb, null);
+ mView.setVisibility(View.GONE);
+ mView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
+ WindowManager.LayoutParams lp = getLayoutParams();
+ mWindowManager.addView(mView, lp);
+ if (visible) {
+ mView.show(true /* show */, false /* animate */);
+ }
+ }
+ };
+
@Inject
public AssistManager(
DeviceProvisionedController controller,
@@ -162,7 +189,8 @@
AssistHandleBehaviorController handleController,
CommandQueue commandQueue,
PhoneStateMonitor phoneStateMonitor,
- OverviewProxyService overviewProxyService) {
+ OverviewProxyService overviewProxyService,
+ ConfigurationController configurationController) {
mContext = context;
mDeviceProvisionedController = controller;
mCommandQueue = commandQueue;
@@ -172,11 +200,13 @@
mPhoneStateMonitor = phoneStateMonitor;
mHandleController = handleController;
+ configurationController.addCallback(mConfigurationListener);
+
registerVoiceInteractionSessionListener();
mInterestingConfigChanges = new InterestingConfigChanges(ActivityInfo.CONFIG_ORIENTATION
| ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE
| ActivityInfo.CONFIG_SCREEN_LAYOUT | ActivityInfo.CONFIG_ASSETS_PATHS);
- onConfigurationChanged(context.getResources().getConfiguration());
+ mConfigurationListener.onConfigChanged(context.getResources().getConfiguration());
mShouldEnableOrb = !ActivityManager.isLowRamDeviceStatic();
mUiController = new DefaultUiController(mContext);
@@ -225,29 +255,6 @@
});
}
- public void onConfigurationChanged(Configuration newConfiguration) {
- if (!mInterestingConfigChanges.applyNewConfig(mContext.getResources())) {
- return;
- }
- boolean visible = false;
- if (mView != null) {
- visible = mView.isShowing();
- mWindowManager.removeView(mView);
- }
-
- mView = (AssistOrbContainer) LayoutInflater.from(mContext).inflate(
- R.layout.assist_orb, null);
- mView.setVisibility(View.GONE);
- mView.setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
- WindowManager.LayoutParams lp = getLayoutParams();
- mWindowManager.addView(mView, lp);
- if (visible) {
- mView.show(true /* show */, false /* animate */);
- }
- }
-
protected boolean shouldShowOrb() {
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java
index 83d956c..3f00f41 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIRootComponent.java
@@ -25,6 +25,7 @@
import com.android.systemui.SystemUIFactory;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.statusbar.phone.StatusBar;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.util.InjectionInflationController;
import javax.inject.Named;
@@ -50,6 +51,12 @@
* Creates a ContextComponentHelper.
*/
@Singleton
+ ConfigurationController getConfigurationController();
+
+ /**
+ * Creates a ContextComponentHelper.
+ */
+ @Singleton
ContextComponentHelper getContextComponentHelper();
/**
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
index 1b4857e..ae20076 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
@@ -20,11 +20,11 @@
import android.util.ArrayMap;
import android.view.View;
-import com.android.systemui.ConfigurationChangedReceiver;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SystemUIRootComponent;
import com.android.systemui.qs.QSFragment;
import com.android.systemui.statusbar.phone.NavigationBarFragment;
+import com.android.systemui.statusbar.policy.ConfigurationController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -41,7 +41,7 @@
* Also dispatches the configuration changes to all current FragmentHostStates.
*/
@Singleton
-public class FragmentService implements ConfigurationChangedReceiver, Dumpable {
+public class FragmentService implements Dumpable {
private static final String TAG = "FragmentService";
@@ -50,10 +50,22 @@
private final Handler mHandler = new Handler();
private final FragmentCreator mFragmentCreator;
+ private ConfigurationController.ConfigurationListener mConfigurationListener =
+ new ConfigurationController.ConfigurationListener() {
+ @Override
+ public void onConfigChanged(Configuration newConfig) {
+ for (FragmentHostState state : mHosts.values()) {
+ state.sendConfigurationChange(newConfig);
+ }
+ }
+ };
+
@Inject
- public FragmentService(SystemUIRootComponent rootComponent) {
+ public FragmentService(SystemUIRootComponent rootComponent,
+ ConfigurationController configurationController) {
mFragmentCreator = rootComponent.createFragmentCreator();
initInjectionMap();
+ configurationController.addCallback(mConfigurationListener);
}
ArrayMap<String, Method> getInjectionMap() {
@@ -97,13 +109,6 @@
}
@Override
- public void onConfigurationChanged(Configuration newConfig) {
- for (FragmentHostState state : mHosts.values()) {
- state.sendConfigurationChange(newConfig);
- }
- }
-
- @Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("Dumping fragments:");
for (FragmentHostState state : mHosts.values()) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt
index 424acfd..54ef623 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt
@@ -18,14 +18,11 @@
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.os.LocaleList
-
-import com.android.systemui.ConfigurationChangedReceiver
import com.android.systemui.statusbar.policy.ConfigurationController
import java.util.ArrayList
-class ConfigurationControllerImpl(context: Context)
- : ConfigurationController, ConfigurationChangedReceiver {
+class ConfigurationControllerImpl(context: Context) : ConfigurationController {
private val listeners: MutableList<ConfigurationController.ConfigurationListener> = ArrayList()
private val lastConfig = Configuration()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java
index 0e5c8c1..0a6cf7b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java
@@ -24,7 +24,11 @@
*/
public interface ConfigurationController extends CallbackController<ConfigurationListener> {
- public void notifyThemeChanged();
+ /** Alert controller of a change in the configuration. */
+ void onConfigurationChanged(Configuration newConfiguration);
+
+ /** Alert controller of a change in between light and dark themes. */
+ void notifyThemeChanged();
interface ConfigurationListener {
default void onConfigChanged(Configuration newConfig) {}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 12d3577..05a4b29 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -60,7 +60,6 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.settingslib.net.DataUsageController;
-import com.android.systemui.ConfigurationChangedReceiver;
import com.android.systemui.DemoMode;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
@@ -87,8 +86,7 @@
/** Platform implementation of the network controller. **/
@Singleton
public class NetworkControllerImpl extends BroadcastReceiver
- implements NetworkController, DemoMode, DataUsageController.NetworkNameProvider,
- ConfigurationChangedReceiver, Dumpable {
+ implements NetworkController, DemoMode, DataUsageController.NetworkNameProvider, Dumpable {
// debug
static final String TAG = "NetworkController";
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -167,6 +165,14 @@
private boolean mUserSetup;
private boolean mSimDetected;
+ private ConfigurationController.ConfigurationListener mConfigurationListener =
+ new ConfigurationController.ConfigurationListener() {
+ @Override
+ public void onConfigChanged(Configuration newConfig) {
+ mConfig = Config.readConfig(mContext);
+ mReceiverHandler.post(() -> handleConfigurationChanged());
+ }
+ };
/**
* Construct this controller object and register for updates.
*/
@@ -562,16 +568,6 @@
}
}
- public void onConfigurationChanged(Configuration newConfig) {
- mConfig = Config.readConfig(mContext);
- mReceiverHandler.post(new Runnable() {
- @Override
- public void run() {
- handleConfigurationChanged();
- }
- });
- }
-
@VisibleForTesting
void handleConfigurationChanged() {
updateMobileControllers();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
index c020514..bf2d4cd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
@@ -37,8 +37,6 @@
public class DependencyTest extends SysuiTestCase {
public static final DependencyKey<Dumpable> DUMPABLE = new DependencyKey<>("dumpable");
- public static final DependencyKey<ConfigurationChangedReceiver> CONFIGURATION_CHANGED_RECEIVER
- = new DependencyKey<>("config_changed_receiver");
@Test
public void testClassDependency() {
@@ -66,15 +64,6 @@
}
@Test
- public void testConfigurationChanged() {
- ConfigurationChangedReceiver d = mock(ConfigurationChangedReceiver.class);
- mDependency.injectTestDependency(CONFIGURATION_CHANGED_RECEIVER, d);
- Dependency.get(CONFIGURATION_CHANGED_RECEIVER);
- mDependency.onConfigurationChanged(null);
- verify(d).onConfigurationChanged(eq(null));
- }
-
- @Test
public void testInitDependency() {
Dependency.clearDependencies();
Dependency dependency = new Dependency();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeConfigurationController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeConfigurationController.java
index 5ddf7a2..f5ccac3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeConfigurationController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeConfigurationController.java
@@ -14,6 +14,8 @@
package com.android.systemui.utils.leaks;
+import android.content.res.Configuration;
+
import com.android.systemui.statusbar.policy.ConfigurationController;
public class FakeConfigurationController
@@ -25,6 +27,10 @@
}
@Override
+ public void onConfigurationChanged(Configuration newConfiguration) {
+ }
+
+ @Override
public void notifyThemeChanged() {
}
}