From 12391f22dfe4697d55555ba94d0c5c1155dd546e Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Thu, 18 Jan 2018 21:44:28 +0000 Subject: Revert "Add setting/experiment for small battery devices to have" This reverts commit 9a60382be1d94e1143cdd16576db774126193798. Reason for revert: Broke battery saver Bug: 72168928 Bug: 69259147 Change-Id: I09664653686a51c297224c863c4fc6d1ff7e5caf Test: Manual test Test: atest CtsBatterySavingTestCases --- core/java/android/provider/Settings.java | 9 -- .../android/server/forceappstandbytracker.proto | 9 -- .../src/android/provider/SettingsBackupTest.java | 1 - .../com/android/server/ForceAppStandbyTracker.java | 164 ++++----------------- .../android/server/ForceAppStandbyTrackerTest.java | 49 +----- 5 files changed, 35 insertions(+), 197 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 85b31cb7b3b8..db32144b9c45 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -9840,15 +9840,6 @@ public final class Settings { */ public static final String FORCED_APP_STANDBY_ENABLED = "forced_app_standby_enabled"; - /** - * Whether or not to enable Forced App Standby on small battery devices. - * Type: int (0 for false, 1 for true) - * Default: 0 - * @hide - */ - public static final String FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED - = "forced_app_standby_for_small_battery_enabled"; - /** * Whether or not Network Watchlist feature is enabled. * Type: int (0 for false, 1 for true) diff --git a/core/proto/android/server/forceappstandbytracker.proto b/core/proto/android/server/forceappstandbytracker.proto index c9f7d52ae83f..8753bf768321 100644 --- a/core/proto/android/server/forceappstandbytracker.proto +++ b/core/proto/android/server/forceappstandbytracker.proto @@ -41,13 +41,4 @@ message ForceAppStandbyTrackerProto { // Packages that are disallowed OP_RUN_ANY_IN_BACKGROUND. repeated RunAnyInBackgroundRestrictedPackages run_any_in_background_restricted_packages = 5; - - // Whether device is a small battery device - optional bool is_small_battery_device = 6; - - // Whether force app standby for small battery device setting is enabled - optional bool force_all_apps_standby_for_small_battery = 7; - - // Whether device is charging - optional bool is_charging = 8; } diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index aa263cbe6976..4710595f175f 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -212,7 +212,6 @@ public class SettingsBackupTest { Settings.Global.FANCY_IME_ANIMATIONS, Settings.Global.FORCE_ALLOW_ON_EXTERNAL, Settings.Global.FORCED_APP_STANDBY_ENABLED, - Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED, Settings.Global.FSTRIM_MANDATORY_INTERVAL, Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST, Settings.Global.GLOBAL_HTTP_PROXY_HOST, diff --git a/services/core/java/com/android/server/ForceAppStandbyTracker.java b/services/core/java/com/android/server/ForceAppStandbyTracker.java index 782d4ddab12a..8776f3a9f6c8 100644 --- a/services/core/java/com/android/server/ForceAppStandbyTracker.java +++ b/services/core/java/com/android/server/ForceAppStandbyTracker.java @@ -26,8 +26,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; -import android.net.Uri; -import android.os.BatteryManager; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -91,9 +89,6 @@ public class ForceAppStandbyTracker { private final MyHandler mHandler; - @VisibleForTesting - FeatureFlagsObserver mFlagsObserver; - /** * Pair of (uid (not user-id), packageName) with OP_RUN_ANY_IN_BACKGROUND *not* allowed. */ @@ -116,32 +111,13 @@ public class ForceAppStandbyTracker { boolean mStarted; @GuardedBy("mLock") - boolean mIsCharging; + boolean mForceAllAppsStandby; // True if device is in extreme battery saver mode @GuardedBy("mLock") - boolean mBatterySaverEnabled; + boolean mForcedAppStandbyEnabled; // True if the forced app standby feature is enabled - /** - * True if the forced app standby is currently enabled - */ - @GuardedBy("mLock") - boolean mForceAllAppsStandby; - - /** - * True if the forced app standby for small battery devices feature is enabled in settings - */ - @GuardedBy("mLock") - boolean mForceAllAppStandbyForSmallBattery; - - /** - * True if the forced app standby feature is enabled in settings - */ - @GuardedBy("mLock") - boolean mForcedAppStandbyEnabled; - - @VisibleForTesting - class FeatureFlagsObserver extends ContentObserver { - FeatureFlagsObserver() { + private class FeatureFlagObserver extends ContentObserver { + FeatureFlagObserver() { super(null); } @@ -149,9 +125,6 @@ public class ForceAppStandbyTracker { mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.FORCED_APP_STANDBY_ENABLED), false, this); - - mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor( - Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED), false, this); } boolean isForcedAppStandbyEnabled() { @@ -159,43 +132,20 @@ public class ForceAppStandbyTracker { Settings.Global.FORCED_APP_STANDBY_ENABLED, 1) == 1; } - boolean isForcedAppStandbyForSmallBatteryEnabled() { - return Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED, 0) == 1; - } - @Override - public void onChange(boolean selfChange, Uri uri) { - if (Settings.Global.getUriFor(Settings.Global.FORCED_APP_STANDBY_ENABLED).equals(uri)) { - final boolean enabled = isForcedAppStandbyEnabled(); - synchronized (mLock) { - if (mForcedAppStandbyEnabled == enabled) { - return; - } - mForcedAppStandbyEnabled = enabled; - if (DEBUG) { - Slog.d(TAG, - "Forced app standby feature flag changed: " + mForcedAppStandbyEnabled); - } + public void onChange(boolean selfChange) { + final boolean enabled = isForcedAppStandbyEnabled(); + synchronized (mLock) { + if (mForcedAppStandbyEnabled == enabled) { + return; } - mHandler.notifyForcedAppStandbyFeatureFlagChanged(); - } else if (Settings.Global.getUriFor( - Settings.Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED).equals(uri)) { - final boolean enabled = isForcedAppStandbyForSmallBatteryEnabled(); - synchronized (mLock) { - if (mForceAllAppStandbyForSmallBattery == enabled) { - return; - } - mForceAllAppStandbyForSmallBattery = enabled; - if (DEBUG) { - Slog.d(TAG, "Forced app standby for small battery feature flag changed: " - + mForceAllAppStandbyForSmallBattery); - } - updateForceAllAppStandbyState(); + mForcedAppStandbyEnabled = enabled; + if (DEBUG) { + Slog.d(TAG, + "Forced app standby feature flag changed: " + mForcedAppStandbyEnabled); } - } else { - Slog.w(TAG, "Unexpected feature flag uri encountered: " + uri); } + mHandler.notifyFeatureFlagChanged(); } } @@ -336,11 +286,9 @@ public class ForceAppStandbyTracker { mAppOpsManager = Preconditions.checkNotNull(injectAppOpsManager()); mAppOpsService = Preconditions.checkNotNull(injectIAppOpsService()); mPowerManagerInternal = Preconditions.checkNotNull(injectPowerManagerInternal()); - mFlagsObserver = new FeatureFlagsObserver(); - mFlagsObserver.register(); - mForcedAppStandbyEnabled = mFlagsObserver.isForcedAppStandbyEnabled(); - mForceAllAppStandbyForSmallBattery = - mFlagsObserver.isForcedAppStandbyForSmallBatteryEnabled(); + final FeatureFlagObserver flagObserver = new FeatureFlagObserver(); + flagObserver.register(); + mForcedAppStandbyEnabled = flagObserver.isForcedAppStandbyEnabled(); try { mIActivityManager.registerUidObserver(new UidObserver(), @@ -355,24 +303,16 @@ public class ForceAppStandbyTracker { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_USER_REMOVED); - filter.addAction(Intent.ACTION_BATTERY_CHANGED); mContext.registerReceiver(new MyReceiver(), filter); refreshForcedAppStandbyUidPackagesLocked(); mPowerManagerInternal.registerLowPowerModeObserver( ServiceType.FORCE_ALL_APPS_STANDBY, - (state) -> { - synchronized (mLock) { - mBatterySaverEnabled = state.batterySaverEnabled; - updateForceAllAppStandbyState(); - } - }); + (state) -> updateForceAllAppsStandby(state.batterySaverEnabled)); - mBatterySaverEnabled = mPowerManagerInternal.getLowPowerState( - ServiceType.FORCE_ALL_APPS_STANDBY).batterySaverEnabled; - - updateForceAllAppStandbyState(); + updateForceAllAppsStandby(mPowerManagerInternal.getLowPowerState( + ServiceType.FORCE_ALL_APPS_STANDBY).batterySaverEnabled); } } @@ -397,11 +337,6 @@ public class ForceAppStandbyTracker { return LocalServices.getService(PowerManagerInternal.class); } - @VisibleForTesting - boolean isSmallBatteryDevice() { - return ActivityManager.isSmallBatteryDevice(); - } - /** * Update {@link #mRunAnyRestrictedPackages} with the current app ops state. */ @@ -431,29 +366,18 @@ public class ForceAppStandbyTracker { } } - private void updateForceAllAppStandbyState() { - synchronized (mLock) { - if (mIsCharging) { - toggleForceAllAppsStandbyLocked(false); - } else if (mForceAllAppStandbyForSmallBattery - && isSmallBatteryDevice()) { - toggleForceAllAppsStandbyLocked(true); - } else { - toggleForceAllAppsStandbyLocked(mBatterySaverEnabled); - } - } - } - /** * Update {@link #mForceAllAppsStandby} and notifies the listeners. */ - private void toggleForceAllAppsStandbyLocked(boolean enable) { - if (enable == mForceAllAppsStandby) { - return; - } - mForceAllAppsStandby = enable; + void updateForceAllAppsStandby(boolean enable) { + synchronized (mLock) { + if (enable == mForceAllAppsStandby) { + return; + } + mForceAllAppsStandby = enable; - mHandler.notifyForceAllAppsStandbyChanged(); + mHandler.notifyForceAllAppsStandbyChanged(); + } } private int findForcedAppStandbyUidPackageIndexLocked(int uid, @NonNull String packageName) { @@ -588,13 +512,6 @@ public class ForceAppStandbyTracker { if (userId > 0) { mHandler.doUserRemoved(userId); } - } else if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { - int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); - synchronized (mLock) { - mIsCharging = (status == BatteryManager.BATTERY_STATUS_CHARGING - || status == BatteryManager.BATTERY_STATUS_FULL); - } - updateForceAllAppStandbyState(); } } } @@ -613,7 +530,7 @@ public class ForceAppStandbyTracker { private static final int MSG_TEMP_WHITELIST_CHANGED = 5; private static final int MSG_FORCE_ALL_CHANGED = 6; private static final int MSG_USER_REMOVED = 7; - private static final int MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED = 8; + private static final int MSG_FEATURE_FLAG_CHANGED = 8; public MyHandler(Looper looper) { super(looper); @@ -643,8 +560,8 @@ public class ForceAppStandbyTracker { obtainMessage(MSG_FORCE_ALL_CHANGED).sendToTarget(); } - public void notifyForcedAppStandbyFeatureFlagChanged() { - obtainMessage(MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED).sendToTarget(); + public void notifyFeatureFlagChanged() { + obtainMessage(MSG_FEATURE_FLAG_CHANGED).sendToTarget(); } public void doUserRemoved(int userId) { @@ -698,7 +615,7 @@ public class ForceAppStandbyTracker { l.onForceAllAppsStandbyChanged(sender); } return; - case MSG_FORCE_APP_STANDBY_FEATURE_FLAG_CHANGED: + case MSG_FEATURE_FLAG_CHANGED: // Feature flag for forced app standby changed. final boolean unblockAlarms; synchronized (mLock) { @@ -921,18 +838,6 @@ public class ForceAppStandbyTracker { pw.print("Force all apps standby: "); pw.println(isForceAllAppsStandbyEnabled()); - pw.print(indent); - pw.print("Small Battery Device: "); - pw.println(isSmallBatteryDevice()); - - pw.print(indent); - pw.print("Force all apps standby for small battery device: "); - pw.println(mForceAllAppStandbyForSmallBattery); - - pw.print(indent); - pw.print("Charging: "); - pw.println(mIsCharging); - pw.print(indent); pw.print("Foreground uids: ["); @@ -972,11 +877,6 @@ public class ForceAppStandbyTracker { final long token = proto.start(fieldId); proto.write(ForceAppStandbyTrackerProto.FORCE_ALL_APPS_STANDBY, mForceAllAppsStandby); - proto.write(ForceAppStandbyTrackerProto.IS_SMALL_BATTERY_DEVICE, - isSmallBatteryDevice()); - proto.write(ForceAppStandbyTrackerProto.FORCE_ALL_APPS_STANDBY_FOR_SMALL_BATTERY, - mForceAllAppStandbyForSmallBattery); - proto.write(ForceAppStandbyTrackerProto.IS_CHARGING, mIsCharging); for (int i = 0; i < mForegroundUids.size(); i++) { if (mForegroundUids.valueAt(i)) { diff --git a/services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java b/services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java index 6a21931e0418..66d0da13fff1 100644 --- a/services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java +++ b/services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java @@ -42,7 +42,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.os.BatteryManager; import android.os.Handler; import android.os.Looper; import android.os.PowerManager.ServiceType; @@ -51,17 +50,13 @@ import android.os.PowerSaveState; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; -import android.provider.Settings; -import android.provider.Settings.Global; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; -import android.test.mock.MockContentResolver; import android.util.ArraySet; import android.util.Pair; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; -import com.android.internal.util.test.FakeSettingsProvider; import com.android.server.ForceAppStandbyTracker.Listener; import org.junit.Before; @@ -107,9 +102,6 @@ public class ForceAppStandbyTrackerTest { PowerManagerInternal injectPowerManagerInternal() { return mMockPowerManagerInternal; } - - @Override - boolean isSmallBatteryDevice() { return mIsSmallBatteryDevice; }; } private static final int UID_1 = Process.FIRST_APPLICATION_UID + 1; @@ -145,11 +137,7 @@ public class ForceAppStandbyTrackerTest { private Consumer mPowerSaveObserver; private BroadcastReceiver mReceiver; - private MockContentResolver mMockContentResolver; - private FakeSettingsProvider mFakeSettingsProvider; - private boolean mPowerSaveMode; - private boolean mIsSmallBatteryDevice; private final ArraySet> mRestrictedPackages = new ArraySet(); @@ -186,17 +174,13 @@ public class ForceAppStandbyTrackerTest { } private void callStart(ForceAppStandbyTrackerTestable instance) throws RemoteException { + // Set up functions that start() calls. when(mMockPowerManagerInternal.getLowPowerState(eq(ServiceType.FORCE_ALL_APPS_STANDBY))) .thenAnswer(inv -> getPowerSaveState()); when(mMockAppOpsManager.getPackagesForOps( any(int[].class) - )).thenAnswer(inv -> new ArrayList()); - - mMockContentResolver = new MockContentResolver(); - mFakeSettingsProvider = new FakeSettingsProvider(); - when(mMockContext.getContentResolver()).thenReturn(mMockContentResolver); - mMockContentResolver.addProvider(Settings.AUTHORITY, mFakeSettingsProvider); + )).thenAnswer(inv -> new ArrayList()); // Call start. instance.start(); @@ -224,6 +208,7 @@ public class ForceAppStandbyTrackerTest { verify(mMockPowerManagerInternal).registerLowPowerModeObserver( eq(ServiceType.FORCE_ALL_APPS_STANDBY), powerSaveObserverCaptor.capture()); + verify(mMockContext).registerReceiver( receiverCaptor.capture(), any(IntentFilter.class)); @@ -236,7 +221,6 @@ public class ForceAppStandbyTrackerTest { assertNotNull(mAppOpsCallback); assertNotNull(mPowerSaveObserver); assertNotNull(mReceiver); - assertNotNull(instance.mFlagsObserver); } private void setAppOps(int uid, String packageName, boolean restrict) throws RemoteException { @@ -838,33 +822,6 @@ public class ForceAppStandbyTrackerTest { assertTrue(instance.isRunAnyInBackgroundAppOpsAllowed(UID_10_2, PACKAGE_2)); } - @Test - public void testSmallBatteryAndCharging() throws Exception { - // This is a small battery device - mIsSmallBatteryDevice = true; - - final ForceAppStandbyTrackerTestable instance = newInstance(); - callStart(instance); - assertFalse(instance.isForceAllAppsStandbyEnabled()); - - // Setting/experiment for all app standby for small battery is enabled - Global.putInt(mMockContentResolver, Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED, 1); - instance.mFlagsObserver.onChange(true, - Global.getUriFor(Global.FORCED_APP_STANDBY_FOR_SMALL_BATTERY_ENABLED)); - assertTrue(instance.isForceAllAppsStandbyEnabled()); - - // When battery is charging, force app standby is disabled - Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED); - intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); - mReceiver.onReceive(mMockContext, intent); - assertFalse(instance.isForceAllAppsStandbyEnabled()); - - // When battery stops charging, force app standby is enabled - intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_DISCHARGING); - mReceiver.onReceive(mMockContext, intent); - assertTrue(instance.isForceAllAppsStandbyEnabled()); - } - static int[] array(int... appIds) { Arrays.sort(appIds); return appIds; -- cgit v1.2.3-59-g8ed1b