summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Makoto Onuki <omakoto@google.com> 2018-01-18 23:10:54 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-01-18 23:10:54 +0000
commit5cc9f721ce36d278df4b0f3fe0a685ba221e9360 (patch)
tree26fc80021e7520436f3f060c69b9853d161f5041
parent8f09d6ee8fe335ff026d77ea7e61d8d02efb19af (diff)
parent12391f22dfe4697d55555ba94d0c5c1155dd546e (diff)
Merge "Revert "Add setting/experiment for small battery devices to have""
-rw-r--r--core/java/android/provider/Settings.java9
-rw-r--r--core/proto/android/server/forceappstandbytracker.proto9
-rw-r--r--core/tests/coretests/src/android/provider/SettingsBackupTest.java1
-rw-r--r--services/core/java/com/android/server/ForceAppStandbyTracker.java164
-rw-r--r--services/tests/servicestests/src/com/android/server/ForceAppStandbyTrackerTest.java49
5 files changed, 35 insertions, 197 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 396c897c7047..956e8f624b17 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -9861,15 +9861,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)
* Default: 0
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 c2ae7760c80e..8da7cedd7ea1 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -213,7 +213,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 45516115b629..a75a3675f7f9 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.
*/
@@ -119,32 +114,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);
}
@@ -152,9 +128,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() {
@@ -162,43 +135,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();
}
}
@@ -339,11 +289,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(),
@@ -358,24 +306,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);
}
}
@@ -400,11 +340,6 @@ public class ForceAppStandbyTracker {
return LocalServices.getService(PowerManagerInternal.class);
}
- @VisibleForTesting
- boolean isSmallBatteryDevice() {
- return ActivityManager.isSmallBatteryDevice();
- }
-
/**
* Update {@link #mRunAnyRestrictedPackages} with the current app ops state.
*/
@@ -434,29 +369,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) {
@@ -591,13 +515,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();
}
}
}
@@ -616,7 +533,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);
@@ -646,8 +563,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) {
@@ -701,7 +618,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) {
@@ -925,18 +842,6 @@ public class ForceAppStandbyTracker {
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: [");
String sep = "";
@@ -975,11 +880,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<PowerSaveState> mPowerSaveObserver;
private BroadcastReceiver mReceiver;
- private MockContentResolver mMockContentResolver;
- private FakeSettingsProvider mFakeSettingsProvider;
-
private boolean mPowerSaveMode;
- private boolean mIsSmallBatteryDevice;
private final ArraySet<Pair<Integer, String>> 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<AppOpsManager.PackageOps>());
-
- mMockContentResolver = new MockContentResolver();
- mFakeSettingsProvider = new FakeSettingsProvider();
- when(mMockContext.getContentResolver()).thenReturn(mMockContentResolver);
- mMockContentResolver.addProvider(Settings.AUTHORITY, mFakeSettingsProvider);
+ )).thenAnswer(inv -> new ArrayList<AppOpsManager.PackageOps>());
// 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;