summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2017-08-11 21:19:04 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-08-11 21:19:04 +0000
commit84626a4e3d5e64e5b04c4c1fbd4ef5d93caf32f9 (patch)
tree00d83e3037c2b46da6ebb1efe02346e2cd6b2dc0
parentf12502468821bd3d2aaaf7ebab63100145127955 (diff)
parentd819c31050ea88960ec380994b9d982f28c67026 (diff)
downloadbase-84626a4e3d5e64e5b04c4c1fbd4ef5d93caf32f9.tar.gz
Merge "Change default temp threshold to use shutdown temp" into oc-dr1-dev
-rw-r--r--packages/SystemUI/res/values/config.xml6
-rw-r--r--packages/SystemUI/src/com/android/systemui/Dependency.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/PowerUI.java19
-rw-r--r--packages/SystemUI/tests/AndroidManifest.xml1
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java149
7 files changed, 173 insertions, 15 deletions
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 30b169262b7a..a077fdb6a5ec 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -328,9 +328,13 @@
<integer name="config_showTemperatureWarning">0</integer>
<!-- Temp at which to show a warning notification if config_showTemperatureWarning is true.
- If < 0, uses the value from HardwarePropertiesManager#getDeviceTemperatures. -->
+ If < 0, uses the value from
+ HardwarePropertiesManager#getDeviceTemperatures - config_warningTemperatureTolerance. -->
<integer name="config_warningTemperature">-1</integer>
+ <!-- Fudge factor for how much below the shutdown temp to show the warning. -->
+ <integer name="config_warningTemperatureTolerance">2</integer>
+
<!-- Accessibility actions -->
<item type="id" name="action_split_task_to_left" />
<item type="id" name="action_split_task_to_right" />
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 9c1cb4ef8c81..ecc211136667 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -39,6 +39,8 @@ import com.android.systemui.plugins.PluginDependencyProvider;
import com.android.systemui.plugins.PluginManager;
import com.android.systemui.plugins.PluginManagerImpl;
import com.android.systemui.plugins.VolumeDialogController;
+import com.android.systemui.power.PowerNotificationWarnings;
+import com.android.systemui.power.PowerUI;
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl;
import com.android.systemui.statusbar.phone.ManagedProfileController;
@@ -296,6 +298,8 @@ public class Dependency extends SystemUI {
mProviders.put(PluginActivityManager.class,
() -> new PluginActivityManager(mContext, getDependency(PluginManager.class)));
+ mProviders.put(PowerUI.WarningsUI.class, () -> new PowerNotificationWarnings(mContext));
+
// Put all dependencies above here so the factory can override them if it wants.
SystemUIFactory.getInstance().injectDependencies(mProviders, mContext);
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index 6b3daa306103..b007f9224064 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -104,10 +104,9 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
private SystemUIDialog mHighTempDialog;
private SystemUIDialog mThermalShutdownDialog;
- public PowerNotificationWarnings(Context context, NotificationManager notificationManager,
- StatusBar statusBar) {
+ public PowerNotificationWarnings(Context context) {
mContext = context;
- mNoMan = notificationManager;
+ mNoMan = mContext.getSystemService(NotificationManager.class);
mPowerMan = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mReceiver.init();
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index a9139993c137..beb7712c35f7 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -16,7 +16,6 @@
package com.android.systemui.power;
-import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -33,14 +32,17 @@ import android.os.PowerManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
-import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
import android.util.Slog;
+
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
+import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.SystemUI;
import com.android.systemui.statusbar.phone.StatusBar;
+
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Arrays;
@@ -84,10 +86,7 @@ public class PowerUI extends SystemUI {
mHardwarePropertiesManager = (HardwarePropertiesManager)
mContext.getSystemService(Context.HARDWARE_PROPERTIES_SERVICE);
mScreenOffTime = mPowerManager.isScreenOn() ? -1 : SystemClock.elapsedRealtime();
- mWarnings = new PowerNotificationWarnings(
- mContext,
- (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE),
- getComponent(StatusBar.class));
+ mWarnings = Dependency.get(WarningsUI.class);
mLastConfiguration.setTo(mContext.getResources().getConfiguration());
ContentObserver obs = new ContentObserver(mHandler) {
@@ -266,13 +265,14 @@ public class PowerUI extends SystemUI {
// Get the throttling temperature. No need to check if we're not throttling.
float[] throttlingTemps = mHardwarePropertiesManager.getDeviceTemperatures(
HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN,
- HardwarePropertiesManager.TEMPERATURE_THROTTLING);
+ HardwarePropertiesManager.TEMPERATURE_SHUTDOWN);
if (throttlingTemps == null
|| throttlingTemps.length == 0
|| throttlingTemps[0] == HardwarePropertiesManager.UNDEFINED_TEMPERATURE) {
return;
}
- mThresholdTemp = throttlingTemps[0];
+ mThresholdTemp = throttlingTemps[0] -
+ resources.getInteger(R.integer.config_warningTemperatureTolerance);
}
setNextLogTime();
@@ -293,7 +293,8 @@ public class PowerUI extends SystemUI {
}
}
- private void updateTemperatureWarning() {
+ @VisibleForTesting
+ protected void updateTemperatureWarning() {
float[] temps = mHardwarePropertiesManager.getDeviceTemperatures(
HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN,
HardwarePropertiesManager.TEMPERATURE_CURRENT);
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index 03f3c56aab73..adb3baf40bb3 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -41,6 +41,7 @@
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.TRUST_LISTENER" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
+ <uses-permission android:name="android.permission.DEVICE_POWER" />
<application>
<uses-library android:name="android.test.runner" />
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index eb59a341ef0f..1b74ebbd861e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -51,8 +51,8 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
@Before
public void setUp() throws Exception {
// Test Instance.
- mPowerNotificationWarnings = new PowerNotificationWarnings(
- mContext, mMockNotificationManager, null);
+ mContext.addMockSystemService(NotificationManager.class, mMockNotificationManager);
+ mPowerNotificationWarnings = new PowerNotificationWarnings(mContext);
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
new file mode 100644
index 000000000000..e4734a474b62
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java
@@ -0,0 +1,149 @@
+/*
+ * 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.power;
+
+import static android.os.HardwarePropertiesManager.DEVICE_TEMPERATURE_SKIN;
+import static android.os.HardwarePropertiesManager.TEMPERATURE_CURRENT;
+import static android.os.HardwarePropertiesManager.TEMPERATURE_SHUTDOWN;
+import static android.provider.Settings.Global.SHOW_TEMPERATURE_WARNING;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.HardwarePropertiesManager;
+import android.provider.Settings;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+import android.testing.TestableResources;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.power.PowerUI.WarningsUI;
+import com.android.systemui.statusbar.phone.StatusBar;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+public class PowerUITest extends SysuiTestCase {
+
+ private HardwarePropertiesManager mHardProps;
+ private WarningsUI mMockWarnings;
+ private PowerUI mPowerUI;
+
+ @Before
+ public void setup() {
+ mMockWarnings = mDependency.injectMockDependency(WarningsUI.class);
+ mHardProps = mock(HardwarePropertiesManager.class);
+ mContext.putComponent(StatusBar.class, mock(StatusBar.class));
+ mContext.addMockSystemService(Context.HARDWARE_PROPERTIES_SERVICE, mHardProps);
+
+ createPowerUi();
+ }
+
+ @Test
+ public void testNoConfig_NoWarnings() {
+ setOverThreshold();
+ Settings.Global.putString(mContext.getContentResolver(), SHOW_TEMPERATURE_WARNING, null);
+ TestableResources resources = mContext.getOrCreateTestableResources();
+ resources.addOverride(R.integer.config_showTemperatureWarning, 0);
+ resources.addOverride(R.integer.config_warningTemperature, 55);
+
+ mPowerUI.start();
+ verify(mMockWarnings, never()).showHighTemperatureWarning();
+ }
+
+ @Test
+ public void testConfig_NoWarnings() {
+ setUnderThreshold();
+ Settings.Global.putString(mContext.getContentResolver(), SHOW_TEMPERATURE_WARNING, null);
+ TestableResources resources = mContext.getOrCreateTestableResources();
+ resources.addOverride(R.integer.config_showTemperatureWarning, 1);
+ resources.addOverride(R.integer.config_warningTemperature, 55);
+
+ mPowerUI.start();
+ verify(mMockWarnings, never()).showHighTemperatureWarning();
+ }
+
+ @Test
+ public void testConfig_Warnings() {
+ setOverThreshold();
+ Settings.Global.putString(mContext.getContentResolver(), SHOW_TEMPERATURE_WARNING, null);
+ TestableResources resources = mContext.getOrCreateTestableResources();
+ resources.addOverride(R.integer.config_showTemperatureWarning, 1);
+ resources.addOverride(R.integer.config_warningTemperature, 55);
+
+ mPowerUI.start();
+ verify(mMockWarnings).showHighTemperatureWarning();
+ }
+
+ @Test
+ public void testSettingOverrideConfig() {
+ setOverThreshold();
+ Settings.Global.putInt(mContext.getContentResolver(), SHOW_TEMPERATURE_WARNING, 1);
+ TestableResources resources = mContext.getOrCreateTestableResources();
+ resources.addOverride(R.integer.config_showTemperatureWarning, 0);
+ resources.addOverride(R.integer.config_warningTemperature, 55);
+
+ mPowerUI.start();
+ verify(mMockWarnings).showHighTemperatureWarning();
+ }
+
+ @Test
+ public void testShutdownBasedThreshold() {
+ int tolerance = 2;
+ Settings.Global.putString(mContext.getContentResolver(), SHOW_TEMPERATURE_WARNING, null);
+ TestableResources resources = mContext.getOrCreateTestableResources();
+ resources.addOverride(R.integer.config_showTemperatureWarning, 1);
+ resources.addOverride(R.integer.config_warningTemperature, -1);
+ resources.addOverride(R.integer.config_warningTemperatureTolerance, tolerance);
+ when(mHardProps.getDeviceTemperatures(DEVICE_TEMPERATURE_SKIN, TEMPERATURE_SHUTDOWN))
+ .thenReturn(new float[] { 55 + tolerance });
+
+ setCurrentTemp(54); // Below threshold.
+ mPowerUI.start();
+ verify(mMockWarnings, never()).showHighTemperatureWarning();
+
+ setCurrentTemp(56); // Above threshold.
+ mPowerUI.updateTemperatureWarning();
+ verify(mMockWarnings).showHighTemperatureWarning();
+ }
+
+ private void setCurrentTemp(float temp) {
+ when(mHardProps.getDeviceTemperatures(DEVICE_TEMPERATURE_SKIN, TEMPERATURE_CURRENT))
+ .thenReturn(new float[] { temp });
+ }
+
+ private void setOverThreshold() {
+ setCurrentTemp(50000);
+ }
+
+ private void setUnderThreshold() {
+ setCurrentTemp(5);
+ }
+
+ private void createPowerUi() {
+ mPowerUI = new PowerUI();
+ mPowerUI.mContext = mContext;
+ mPowerUI.mComponents = mContext.getComponents();
+ }
+}