From a29528979cdd6a885869b7651f3b0f93f75843bb Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Fri, 26 May 2017 10:38:54 -0400 Subject: [PATCH] Make volume dialog pick up on theme changes Test: change theme, view volume Change-Id: I3f5b6ea7fd949e72624458a13b6c953629fcd1b5 Fixes: 38408033 --- .../statusbar/policy/ExtensionController.java | 8 +++++--- .../policy/ExtensionControllerImpl.java | 6 ++++++ .../systemui/volume/VolumeDialogComponent.java | 16 ++++++++++------ .../utils/leaks/FakeExtensionController.java | 5 +++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java index eaf89259ed592..78e0028bfa2aa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionController.java @@ -14,9 +14,6 @@ package com.android.systemui.statusbar.policy; -import com.android.systemui.Dependency; -import com.android.systemui.plugins.Plugin; - import java.util.Map; import java.util.function.Consumer; import java.util.function.Supplier; @@ -32,6 +29,11 @@ public interface ExtensionController { interface Extension { T get(); void destroy(); + /** + * Triggers the extension to cycle through each of the sources again because something + * (like configuration) may have changed. + */ + T reload(); } interface ExtensionBuilder { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java index fefbaa31af2ae..cfc1d56ce0f18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ExtensionControllerImpl.java @@ -126,6 +126,12 @@ public class ExtensionControllerImpl implements ExtensionController { } } + @Override + public T reload() { + notifyChanged(); + return get(); + } + private void notifyChanged() { for (int i = 0; i < mProducers.size(); i++) { final T item = mProducers.get(i).get(); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index 2f9bcff3f8b34..e86a34a56f170 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -18,26 +18,25 @@ package com.android.systemui.volume; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.media.AudioManager; import android.media.VolumePolicy; import android.os.Bundle; import android.os.Handler; -import android.view.WindowManager; import android.view.WindowManager.LayoutParams; +import com.android.settingslib.applications.InterestingConfigChanges; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.Dependency; import com.android.systemui.SystemUI; import com.android.systemui.keyguard.KeyguardViewMediator; -import com.android.systemui.plugins.PluginDependency; import com.android.systemui.plugins.PluginDependencyProvider; -import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.VolumeDialog; import com.android.systemui.plugins.VolumeDialogController; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.statusbar.policy.ExtensionController; -import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.statusbar.policy.ExtensionController.Extension; import com.android.systemui.tuner.TunerService; import java.io.FileDescriptor; @@ -60,6 +59,9 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna private final SystemUI mSysui; private final Context mContext; private final VolumeDialogControllerImpl mController; + private final InterestingConfigChanges mConfigChanges = new InterestingConfigChanges( + ActivityInfo.CONFIG_FONT_SCALE); + private final Extension mExtension; private VolumeDialog mDialog; private VolumePolicy mVolumePolicy = new VolumePolicy( DEFAULT_VOLUME_DOWN_TO_ENTER_SILENT, // volumeDownToEnterSilent @@ -76,7 +78,7 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna // Allow plugins to reference the VolumeDialogController. Dependency.get(PluginDependencyProvider.class) .allowPluginDependency(VolumeDialogController.class); - Dependency.get(ExtensionController.class).newExtension(VolumeDialog.class) + mExtension = Dependency.get(ExtensionController.class).newExtension(VolumeDialog.class) .withPlugin(VolumeDialog.class) .withDefault(this::createDefault) .withCallback(dialog -> { @@ -148,7 +150,9 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna @Override public void onConfigurationChanged(Configuration newConfig) { - // noop + if (mConfigChanges.applyNewConfig(mContext.getResources())) { + mExtension.reload(); + } } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java index b9d188a3871a3..00846dc05fbc4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java @@ -97,5 +97,10 @@ public class FakeExtensionController implements ExtensionController { public void destroy() { mTracker.getLeakInfo(mAllocation).clearAllocations(); } + + @Override + public T reload() { + return null; + } } }