BatterySaverPolicy.java revision 85dd0852fe506bcf800bea99aeb7af401e1485c4
1455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei/* 2455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * Copyright (C) 2017 The Android Open Source Project 3455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 4455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * Licensed under the Apache License, Version 2.0 (the "License"); 5455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * you may not use this file except in compliance with the License. 6455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * You may obtain a copy of the License at 7455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 8455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * http://www.apache.org/licenses/LICENSE-2.0 9455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 10455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * Unless required by applicable law or agreed to in writing, software 11455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * distributed under the License is distributed on an "AS IS" BASIS, 12455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * See the License for the specific language governing permissions and 14455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * limitations under the License. 15455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 16455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleipackage com.android.server.power; 17455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 18455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.content.ContentResolver; 1966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport android.content.Context; 20455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.database.ContentObserver; 21455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.net.Uri; 22455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.os.Handler; 232eccd0262827259d15ceaa0fca975d3243c3a699Makoto Onukiimport android.os.PowerManager.ServiceType; 2466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport android.os.PowerSaveState; 25455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.provider.Settings; 2666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport android.provider.Settings.Global; 2766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport android.text.TextUtils; 2866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport android.util.ArrayMap; 29455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.util.KeyValueListParser; 30455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport android.util.Slog; 3166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 329be0140c1474dfd23d46121c51e636040a8080dfMakoto Onukiimport com.android.internal.R; 3366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport com.android.internal.annotations.GuardedBy; 34455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport com.android.internal.annotations.VisibleForTesting; 35ce643a309e8d414395ec36188523d10eb64d6618Makoto Onukiimport com.android.server.power.batterysaver.CpuFrequencies; 36455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 37455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleiimport java.io.PrintWriter; 3866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onukiimport java.util.ArrayList; 393aaed2912be642d306fa223edcb58278b0e45795Makoto Onukiimport java.util.List; 40455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 41455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei/** 42455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * Class to decide whether to turn on battery saver mode for specific service 4366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * 44ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki * Test: 45ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki atest ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/servicestests/src/com/android/server/power/BatterySaverPolicyTest.java 46455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 47455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyuleipublic class BatterySaverPolicy extends ContentObserver { 48455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String TAG = "BatterySaverPolicy"; 49455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 50ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki public static final boolean DEBUG = false; // DO NOT SUBMIT WITH TRUE. 51ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki 52455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei // Value of batterySaverGpsMode such that GPS isn't affected by battery saver mode. 53455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public static final int GPS_MODE_NO_CHANGE = 0; 54455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei // Value of batterySaverGpsMode such that GPS is disabled when battery saver mode 55455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei // is enabled and the screen is off. 56455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public static final int GPS_MODE_DISABLED_WHEN_SCREEN_OFF = 1; 57455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei // Secure setting for GPS behavior when battery saver mode is on. 58455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public static final String SECURE_KEY_GPS_MODE = "batterySaverGpsMode"; 59455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 60455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_GPS_MODE = "gps_mode"; 61455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_VIBRATION_DISABLED = "vibration_disabled"; 62455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_ANIMATION_DISABLED = "animation_disabled"; 63455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_SOUNDTRIGGER_DISABLED = "soundtrigger_disabled"; 64455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_FIREWALL_DISABLED = "firewall_disabled"; 65455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_ADJUST_BRIGHTNESS_DISABLED = "adjust_brightness_disabled"; 6629c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei private static final String KEY_DATASAVER_DISABLED = "datasaver_disabled"; 67a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki private static final String KEY_LAUNCH_BOOST_DISABLED = "launch_boost_disabled"; 68455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_ADJUST_BRIGHTNESS_FACTOR = "adjust_brightness_factor"; 69455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_FULLBACKUP_DEFERRED = "fullbackup_deferred"; 70455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private static final String KEY_KEYVALUE_DEFERRED = "keyvaluebackup_deferred"; 719be0140c1474dfd23d46121c51e636040a8080dfMakoto Onuki private static final String KEY_FORCE_ALL_APPS_STANDBY = "force_all_apps_standby"; 72e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki private static final String KEY_FORCE_BACKGROUND_CHECK = "force_background_check"; 73aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki private static final String KEY_OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled"; 74455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 75ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i"; 76ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n"; 7766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 78a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki private final Object mLock = new Object(); 79a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki 80a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 81a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki private String mSettings; 82a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki 83a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 84a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki private String mDeviceSpecificSettings; 85a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki 86a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 87a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki private String mDeviceSpecificSettingsSource; // For dump() only. 88455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 89455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 9085dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki * A short string describing which battery saver is now enabled, which we dump in the eventlog. 9185dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki */ 9285dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki @GuardedBy("mLock") 9385dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki private String mEventLogKeys; 9485dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 9585dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki /** 96455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if vibration is disabled in battery saver mode. 97455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 98455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 99455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_VIBRATION_DISABLED 100455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 101a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 102455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mVibrationDisabled; 103455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 104455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 105455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if animation is disabled in battery saver mode. 106455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 107455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 108455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_ANIMATION_DISABLED 109455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 110a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 111455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mAnimationDisabled; 112455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 113455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 114455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if sound trigger is disabled in battery saver mode 115455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * in battery saver mode. 116455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 117455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 118455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_SOUNDTRIGGER_DISABLED 119455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 120a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 121455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mSoundTriggerDisabled; 122455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 123455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 124455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if full backup is deferred in battery saver mode. 125455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 126455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 127455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_FULLBACKUP_DEFERRED 128455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 129a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 130455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mFullBackupDeferred; 131455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 132455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 133455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if key value backup is deferred in battery saver mode. 134455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 135455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 136455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_KEYVALUE_DEFERRED 137455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 138a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 139455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mKeyValueBackupDeferred; 140455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 141455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 142455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if network policy firewall is disabled in battery saver mode. 143455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 144455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 145455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_FIREWALL_DISABLED 146455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 147a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 148455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mFireWallDisabled; 149455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 150455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 151455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * {@code true} if adjust brightness is disabled in battery saver mode. 152455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 153455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 154455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_ADJUST_BRIGHTNESS_DISABLED 155455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 156a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 157455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private boolean mAdjustBrightnessDisabled; 158455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 159455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 16029c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei * {@code true} if data saver is disabled in battery saver mode. 16129c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei * 16229c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 16329c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei * @see #KEY_DATASAVER_DISABLED 16429c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei */ 165a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 16629c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei private boolean mDataSaverDisabled; 16729c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei 16829c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei /** 169a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki * {@code true} if launch boost should be disabled on battery saver. 170a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki */ 171a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 172a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki private boolean mLaunchBoostDisabled; 173a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki 174a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki /** 175455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * This is the flag to decide the gps mode in battery saver mode. 176455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 177455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 178455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_GPS_MODE 179455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 180a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 181455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private int mGpsMode; 182455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 183455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 184455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * This is the flag to decide the how much to adjust the screen brightness. This is 185455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * the float value from 0 to 1 where 1 means don't change brightness. 186455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 187455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see Settings.Global#BATTERY_SAVER_CONSTANTS 188455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @see #KEY_ADJUST_BRIGHTNESS_FACTOR 189455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 190a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 191455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private float mAdjustBrightnessFactor; 192455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 193aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki /** 1949be0140c1474dfd23d46121c51e636040a8080dfMakoto Onuki * Whether to put all apps in the stand-by mode. 195aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki */ 196a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 1979be0140c1474dfd23d46121c51e636040a8080dfMakoto Onuki private boolean mForceAllAppsStandby; 198aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki 199aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki /** 200e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki * Whether to put all apps in the stand-by mode. 201e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki */ 202e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki @GuardedBy("mLock") 203e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki private boolean mForceBackgroundCheck; 204e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki 205e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki /** 206aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki * Weather to show non-essential sensors (e.g. edge sensors) or not. 207aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki */ 208a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki @GuardedBy("mLock") 209aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki private boolean mOptionalSensorsDisabled; 210aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki 21166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @GuardedBy("mLock") 21266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki private Context mContext; 21366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 21466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @GuardedBy("mLock") 215455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei private ContentResolver mContentResolver; 216455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 21766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @GuardedBy("mLock") 2183aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki private final List<BatterySaverPolicyListener> mListeners = new ArrayList<>(); 21966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 22066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki /** 22166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * List of [Filename -> content] that should be written when battery saver is activated 2223aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki * and the device is interactive. 22366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * 22466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * We use this to change the max CPU frequencies. 22566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki */ 22666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @GuardedBy("mLock") 2273aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki private ArrayMap<String, String> mFilesForInteractive; 22866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 22966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki /** 23066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * List of [Filename -> content] that should be written when battery saver is activated 2313aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki * and the device is non-interactive. 23266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * 23366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki * We use this to change the max CPU frequencies. 23466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki */ 23566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @GuardedBy("mLock") 2363aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki private ArrayMap<String, String> mFilesForNoninteractive; 23766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 23866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki public interface BatterySaverPolicyListener { 23966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki void onBatterySaverPolicyChanged(BatterySaverPolicy policy); 24066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 24166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 242455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public BatterySaverPolicy(Handler handler) { 243455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei super(handler); 244455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 245455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 24666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki public void systemReady(Context context) { 24766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki synchronized (mLock) { 24866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mContext = context; 24966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mContentResolver = context.getContentResolver(); 25066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 25166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mContentResolver.registerContentObserver(Settings.Global.getUriFor( 25266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki Settings.Global.BATTERY_SAVER_CONSTANTS), false, this); 25366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mContentResolver.registerContentObserver(Settings.Global.getUriFor( 25466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS), false, this); 25566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 25666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki onChange(true, null); 25766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 25866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 25966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki public void addListener(BatterySaverPolicyListener listener) { 26066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki synchronized (mLock) { 26166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mListeners.add(listener); 26266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 26366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 26466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 26566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @VisibleForTesting 26666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki String getGlobalSetting(String key) { 267a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki final ContentResolver cr; 268a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki synchronized (mLock) { 269a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki cr = mContentResolver; 270a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki } 271a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki return Settings.Global.getString(cr, key); 27266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 27366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 27466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki @VisibleForTesting 27566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki int getDeviceSpecificConfigResId() { 27666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki return R.string.config_batterySaverDeviceSpecificConfig; 27766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 278455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 279455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei @Override 280455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public void onChange(boolean selfChange, Uri uri) { 28166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki final BatterySaverPolicyListener[] listeners; 28266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki synchronized (mLock) { 28366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Load the non-device-specific setting. 28466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki final String setting = getGlobalSetting(Settings.Global.BATTERY_SAVER_CONSTANTS); 28566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 28666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Load the device specific setting. 28766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // We first check the global setting, and if it's empty or the string "null" is set, 28866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // use the default value from config.xml. 28966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki String deviceSpecificSetting = getGlobalSetting( 29066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS); 29166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mDeviceSpecificSettingsSource = 29266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki Settings.Global.BATTERY_SAVER_DEVICE_SPECIFIC_CONSTANTS; 29366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 29466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki if (TextUtils.isEmpty(deviceSpecificSetting) || "null".equals(deviceSpecificSetting)) { 29566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki deviceSpecificSetting = 29666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mContext.getString(getDeviceSpecificConfigResId()); 29766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mDeviceSpecificSettingsSource = "(overlay)"; 29866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 29966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 30066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Update. 30166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki updateConstantsLocked(setting, deviceSpecificSetting); 30266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 30366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki listeners = mListeners.toArray(new BatterySaverPolicyListener[mListeners.size()]); 30466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 30566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 30666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Notify the listeners. 30766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki for (BatterySaverPolicyListener listener : listeners) { 30866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki listener.onBatterySaverPolicyChanged(this); 30966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 310455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 311455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 312455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei @VisibleForTesting 31366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki void updateConstantsLocked(final String setting, final String deviceSpecificSetting) { 31466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mSettings = setting; 31566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mDeviceSpecificSettings = deviceSpecificSetting; 31666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 317ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki if (DEBUG) { 318ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki Slog.i(TAG, "mSettings=" + mSettings); 319ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki Slog.i(TAG, "mDeviceSpecificSettings=" + mDeviceSpecificSettings); 320ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki } 321ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki 32266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki final KeyValueListParser parser = new KeyValueListParser(','); 32366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 32466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Non-device-specific parameters. 32566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki try { 32666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki parser.setString(setting); 32766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } catch (IllegalArgumentException e) { 32866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki Slog.wtf(TAG, "Bad battery saver constants: " + setting); 32966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 33066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 33166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mVibrationDisabled = parser.getBoolean(KEY_VIBRATION_DISABLED, true); 33266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mAnimationDisabled = parser.getBoolean(KEY_ANIMATION_DISABLED, true); 33366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mSoundTriggerDisabled = parser.getBoolean(KEY_SOUNDTRIGGER_DISABLED, true); 33466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mFullBackupDeferred = parser.getBoolean(KEY_FULLBACKUP_DEFERRED, true); 33566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mKeyValueBackupDeferred = parser.getBoolean(KEY_KEYVALUE_DEFERRED, true); 33666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mFireWallDisabled = parser.getBoolean(KEY_FIREWALL_DISABLED, false); 33766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mAdjustBrightnessDisabled = parser.getBoolean(KEY_ADJUST_BRIGHTNESS_DISABLED, false); 33866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mAdjustBrightnessFactor = parser.getFloat(KEY_ADJUST_BRIGHTNESS_FACTOR, 0.5f); 33966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mDataSaverDisabled = parser.getBoolean(KEY_DATASAVER_DISABLED, true); 340a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki mLaunchBoostDisabled = parser.getBoolean(KEY_LAUNCH_BOOST_DISABLED, true); 3419be0140c1474dfd23d46121c51e636040a8080dfMakoto Onuki mForceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY, true); 342e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki mForceBackgroundCheck = parser.getBoolean(KEY_FORCE_BACKGROUND_CHECK, true); 34366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mOptionalSensorsDisabled = parser.getBoolean(KEY_OPTIONAL_SENSORS_DISABLED, true); 34466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 34566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Get default value from Settings.Secure 34666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki final int defaultGpsMode = Settings.Secure.getInt(mContentResolver, SECURE_KEY_GPS_MODE, 34766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki GPS_MODE_NO_CHANGE); 34866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki mGpsMode = parser.getInt(KEY_GPS_MODE, defaultGpsMode); 34966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 35066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki // Non-device-specific parameters. 35166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki try { 35266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki parser.setString(deviceSpecificSetting); 35366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } catch (IllegalArgumentException e) { 35466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki Slog.wtf(TAG, "Bad device specific battery saver constants: " 35566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki + deviceSpecificSetting); 35666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 35766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 358ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki mFilesForInteractive = (new CpuFrequencies()).parseString( 359ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki parser.getString(KEY_CPU_FREQ_INTERACTIVE, "")).toSysFileMap(); 36066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 361ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki mFilesForNoninteractive = (new CpuFrequencies()).parseString( 362ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki parser.getString(KEY_CPU_FREQ_NONINTERACTIVE, "")).toSysFileMap(); 36385dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 36485dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki final StringBuilder sb = new StringBuilder(); 36585dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 36685dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mForceAllAppsStandby) sb.append("A"); 36785dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mForceBackgroundCheck) sb.append("B"); 36885dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 36985dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mVibrationDisabled) sb.append("v"); 37085dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mAnimationDisabled) sb.append("a"); 37185dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mSoundTriggerDisabled) sb.append("s"); 37285dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mFullBackupDeferred) sb.append("F"); 37385dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mKeyValueBackupDeferred) sb.append("K"); 37485dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (!mFireWallDisabled) sb.append("f"); 37585dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (!mDataSaverDisabled) sb.append("d"); 37685dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (!mAdjustBrightnessDisabled) sb.append("b"); 37785dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 37885dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mLaunchBoostDisabled) sb.append("l"); 37985dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki if (mOptionalSensorsDisabled) sb.append("S"); 38085dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 38185dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki sb.append(mGpsMode); 38285dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 38385dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki mEventLogKeys = sb.toString(); 384455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 385455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 386455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei /** 387455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * Get the {@link PowerSaveState} based on {@paramref type} and {@paramref realMode}. 388455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * The result will have {@link PowerSaveState#batterySaverEnabled} and some other 389455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * parameters when necessary. 390455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * 391455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @param type type of the service, one of {@link ServiceType} 392455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @param realMode whether the battery saver is on by default 393455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei * @return State data that contains battery saver data 394455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei */ 395455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public PowerSaveState getBatterySaverPolicy(@ServiceType int type, boolean realMode) { 39666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki synchronized (mLock) { 39729c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei final PowerSaveState.Builder builder = new PowerSaveState.Builder() 39829c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei .setGlobalBatterySaverEnabled(realMode); 399455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei if (!realMode) { 400455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(realMode) 401455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 402455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 403455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei switch (type) { 404455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.GPS: 405455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(realMode) 406455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .setGpsMode(mGpsMode) 407455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 408455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.ANIMATION: 409455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(mAnimationDisabled) 410455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 411455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.FULL_BACKUP: 412455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(mFullBackupDeferred) 413455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 414455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.KEYVALUE_BACKUP: 415455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(mKeyValueBackupDeferred) 416455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 417455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.NETWORK_FIREWALL: 418455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(!mFireWallDisabled) 419455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 420455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.SCREEN_BRIGHTNESS: 421455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(!mAdjustBrightnessDisabled) 422455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .setBrightnessFactor(mAdjustBrightnessFactor) 423455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 42429c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei case ServiceType.DATA_SAVER: 42529c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei return builder.setBatterySaverEnabled(!mDataSaverDisabled) 42629c82ab242d50000d22e593c27153751c8c6b44ajackqdyulei .build(); 427455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.SOUND: 428455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(mSoundTriggerDisabled) 429455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 430455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei case ServiceType.VIBRATION: 431455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(mVibrationDisabled) 432455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 433e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki case ServiceType.FORCE_ALL_APPS_STANDBY: 434e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki return builder.setBatterySaverEnabled(mForceAllAppsStandby) 435e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki .build(); 436e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki case ServiceType.FORCE_BACKGROUND_CHECK: 437e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki return builder.setBatterySaverEnabled(mForceBackgroundCheck) 438e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki .build(); 439aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki case ServiceType.OPTIONAL_SENSORS: 440aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki return builder.setBatterySaverEnabled(mOptionalSensorsDisabled) 441aae89531c0e8fce575d97fc887cd1fbd3055de19Makoto Onuki .build(); 442455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei default: 443455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei return builder.setBatterySaverEnabled(realMode) 444455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei .build(); 445455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 446455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 447455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 448455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei 4493aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki public ArrayMap<String, String> getFileValues(boolean interactive) { 45066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki synchronized (mLock) { 4513aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki return interactive ? mFilesForInteractive : mFilesForNoninteractive; 45266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 45366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 45466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 455a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki public boolean isLaunchBoostDisabled() { 456a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki synchronized (mLock) { 457a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki return mLaunchBoostDisabled; 458a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki } 459a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki } 460a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki 46185dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki public String toEventLogString() { 46285dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki synchronized (mLock) { 46385dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki return mEventLogKeys; 46485dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki } 46585dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki } 46685dd0852fe506bcf800bea99aeb7af401e1485c4Makoto Onuki 467455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei public void dump(PrintWriter pw) { 46866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki synchronized (mLock) { 46966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(); 47066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println("Battery saver policy"); 471ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki pw.println(" Settings: " + Settings.Global.BATTERY_SAVER_CONSTANTS); 472ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki pw.println(" value: " + mSettings); 473ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki pw.println(" Settings: " + mDeviceSpecificSettingsSource); 474ce643a309e8d414395ec36188523d10eb64d6618Makoto Onuki pw.println(" value: " + mDeviceSpecificSettings); 47566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 47666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(); 47766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_VIBRATION_DISABLED + "=" + mVibrationDisabled); 47866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_ANIMATION_DISABLED + "=" + mAnimationDisabled); 47966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_FULLBACKUP_DEFERRED + "=" + mFullBackupDeferred); 48066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_KEYVALUE_DEFERRED + "=" + mKeyValueBackupDeferred); 48166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_FIREWALL_DISABLED + "=" + mFireWallDisabled); 48266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_DATASAVER_DISABLED + "=" + mDataSaverDisabled); 483a7d8c4d9ca619c2565aa7994305cdd8aa52fefc1Makoto Onuki pw.println(" " + KEY_LAUNCH_BOOST_DISABLED + "=" + mLaunchBoostDisabled); 48466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_ADJUST_BRIGHTNESS_DISABLED + "=" + mAdjustBrightnessDisabled); 48566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_ADJUST_BRIGHTNESS_FACTOR + "=" + mAdjustBrightnessFactor); 48666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_GPS_MODE + "=" + mGpsMode); 4879be0140c1474dfd23d46121c51e636040a8080dfMakoto Onuki pw.println(" " + KEY_FORCE_ALL_APPS_STANDBY + "=" + mForceAllAppsStandby); 488e7ec72a5dfff1d199de5a77b5818478c3e29d825Makoto Onuki pw.println(" " + KEY_FORCE_BACKGROUND_CHECK + "=" + mForceBackgroundCheck); 48966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(" " + KEY_OPTIONAL_SENSORS_DISABLED + "=" + mOptionalSensorsDisabled); 49066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(); 49166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 4923aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki pw.print(" Interactive File values:\n"); 4933aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki dumpMap(pw, " ", mFilesForInteractive); 49466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(); 49566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 4963aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki pw.print(" Noninteractive File values:\n"); 4973aaed2912be642d306fa223edcb58278b0e45795Makoto Onuki dumpMap(pw, " ", mFilesForNoninteractive); 49866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println(); 49966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 50066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 50166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki 50266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki private void dumpMap(PrintWriter pw, String prefix, ArrayMap<String, String> map) { 50366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki if (map == null) { 50466a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki return; 50566a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 50666a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki final int size = map.size(); 50766a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki for (int i = 0; i < size; i++) { 50866a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.print(prefix); 50966a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.print(map.keyAt(i)); 51066a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.print(": '"); 51166a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.print(map.valueAt(i)); 51266a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki pw.println("'"); 51366a7812bc90b5be7702fe5743d257fddcdb48201Makoto Onuki } 514455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei } 515455e90add22835d0744fc0f5c2feb5fcaf03b28fjackqdyulei} 516