Merge "Ambient indicator text color" into oc-mr1-dev am: 88d75329ff
am: 5352d06b11
Change-Id: I7c2b395ef69ed2031834a2e93925e4136cb4c0d0
diff --git a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
index 810dd8c..01b4254 100644
--- a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
@@ -24,59 +24,50 @@
import android.view.View;
import android.widget.FrameLayout;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+
import java.util.ArrayList;
import java.util.List;
/**
* Custom {@link FrameLayout} that re-inflates when changes to {@link Configuration} happen.
- * Currently supports changes to density and locale.
+ * Currently supports changes to density, asset path, and locale.
*/
-public class AutoReinflateContainer extends FrameLayout {
+public class AutoReinflateContainer extends FrameLayout implements
+ ConfigurationController.ConfigurationListener {
private final List<InflateListener> mInflateListeners = new ArrayList<>();
private final int mLayout;
- private int mDensity;
- private LocaleList mLocaleList;
public AutoReinflateContainer(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
- mDensity = context.getResources().getConfiguration().densityDpi;
- mLocaleList = context.getResources().getConfiguration().getLocales();
-
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoReinflateContainer);
if (!a.hasValue(R.styleable.AutoReinflateContainer_android_layout)) {
throw new IllegalArgumentException("AutoReinflateContainer must contain a layout");
}
mLayout = a.getResourceId(R.styleable.AutoReinflateContainer_android_layout, 0);
+ a.recycle();
inflateLayout();
}
@Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- boolean shouldInflateLayout = false;
- final int density = newConfig.densityDpi;
- if (density != mDensity) {
- mDensity = density;
- shouldInflateLayout = true;
- }
- final LocaleList localeList = newConfig.getLocales();
- if (localeList != mLocaleList) {
- mLocaleList = localeList;
- shouldInflateLayout = true;
- }
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ Dependency.get(ConfigurationController.class).addCallback(this);
+ }
- if (shouldInflateLayout) {
- inflateLayout();
- }
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ Dependency.get(ConfigurationController.class).removeCallback(this);
}
protected void inflateLayoutImpl() {
LayoutInflater.from(getContext()).inflate(mLayout, this);
}
- protected void inflateLayout() {
+ public void inflateLayout() {
removeAllViews();
inflateLayoutImpl();
final int N = mInflateListeners.size();
@@ -90,6 +81,21 @@
listener.onInflated(getChildAt(0));
}
+ @Override
+ public void onDensityOrFontScaleChanged() {
+ inflateLayout();
+ }
+
+ @Override
+ public void onOverlayChanged() {
+ inflateLayout();
+ }
+
+ @Override
+ public void onLocaleListChanged() {
+ inflateLayout();
+ }
+
public interface InflateListener {
/**
* Called whenever a new view is inflated.
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeReceiver.java b/packages/SystemUI/src/com/android/systemui/doze/DozeReceiver.java
new file mode 100644
index 0000000..dcb3882
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeReceiver.java
@@ -0,0 +1,24 @@
+/*
+ * 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.doze;
+
+/**
+ * Interface for class that cares about doze states.
+ */
+public interface DozeReceiver {
+ void setDozing(boolean dozing);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java
index a2bbb03..6f53844 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.java
@@ -18,6 +18,7 @@
import android.content.om.IOverlayManager;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
+import android.os.LocaleList;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
@@ -38,6 +39,7 @@
private float mFontScale;
private boolean mInCarMode;
private int mUiMode;
+ private LocaleList mLocaleList;
public ConfigurationControllerImpl(Context context) {
Configuration currentConfig = context.getResources().getConfiguration();
@@ -46,6 +48,7 @@
mInCarMode = (currentConfig.uiMode & Configuration.UI_MODE_TYPE_MASK)
== Configuration.UI_MODE_TYPE_CAR;
mUiMode = currentConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
+ mLocaleList = currentConfig.getLocales();
}
@Override
@@ -73,6 +76,16 @@
mUiMode = uiMode;
}
+ final LocaleList localeList = newConfig.getLocales();
+ if (!localeList.equals(mLocaleList)) {
+ mLocaleList = localeList;
+ listeners.forEach(l -> {
+ if (mListeners.contains(l)) {
+ l.onLocaleListChanged();
+ }
+ });
+ }
+
if ((mLastConfig.updateFrom(newConfig) & ActivityInfo.CONFIG_ASSETS_PATHS) != 0) {
listeners.forEach(l -> {
if (mListeners.contains(l)) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 32a5abc..5033c40 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -156,6 +156,7 @@
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.ActivityStarterDelegate;
+import com.android.systemui.AutoReinflateContainer;
import com.android.systemui.DejankUtils;
import com.android.systemui.DemoMode;
import com.android.systemui.Dependency;
@@ -175,6 +176,7 @@
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.doze.DozeHost;
import com.android.systemui.doze.DozeLog;
+import com.android.systemui.doze.DozeReceiver;
import com.android.systemui.fragments.ExtensionFragmentListener;
import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -1330,6 +1332,9 @@
if (mStatusBarKeyguardViewManager != null) {
mStatusBarKeyguardViewManager.onOverlayChanged();
}
+ if (mAmbientIndicationContainer instanceof AutoReinflateContainer) {
+ ((AutoReinflateContainer) mAmbientIndicationContainer).inflateLayout();
+ }
}
protected void reevaluateStyles() {
@@ -5340,6 +5345,9 @@
}
mStatusBarWindowManager.setDozing(mDozing);
mStatusBarKeyguardViewManager.setDozing(mDozing);
+ if (mAmbientIndicationContainer instanceof DozeReceiver) {
+ ((DozeReceiver) mAmbientIndicationContainer).setDozing(mDozing);
+ }
updateDozingState();
Trace.endSection();
}
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 418c48e..3dca371 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java
@@ -28,5 +28,6 @@
default void onConfigChanged(Configuration newConfig) {}
default void onDensityOrFontScaleChanged() {}
default void onOverlayChanged() {}
+ default void onLocaleListChanged() {}
}
}