Merge "Optimize battery optimize page control flow" into sc-v2-dev am: c6a5bcc933

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16138630

Change-Id: Ic9d497517b6778c413909917d485575a054dc331
This commit is contained in:
TreeHugger Robot
2021-11-01 08:07:13 +00:00
committed by Automerger Merge Worker
11 changed files with 89 additions and 86 deletions

View File

@@ -282,6 +282,15 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
}
}
@Override
public void onPause() {
super.onPause();
if (mEnableTriState) {
Log.d(TAG, "Leave with mode: " + getSelectedPreference());
mBatteryOptimizeUtils.setAppUsageState(getSelectedPreference());
}
}
@Override
public void onDestroy() {
super.onDestroy();
@@ -490,6 +499,18 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
}
private int getSelectedPreference() {
if (mRestrictedPreference.isChecked()) {
return BatteryOptimizeUtils.MODE_RESTRICTED;
} else if (mUnrestrictedPreference.isChecked()) {
return BatteryOptimizeUtils.MODE_UNRESTRICTED;
} else if (mOptimizePreference.isChecked()) {
return BatteryOptimizeUtils.MODE_OPTIMIZED;
} else {
return BatteryOptimizeUtils.MODE_UNKNOWN;
}
}
private CharSequence getAppActiveTime(Bundle bundle) {
final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);

View File

@@ -29,8 +29,8 @@ import android.content.pm.ParceledListSlice;
import android.content.pm.UserInfo;
import android.os.Build;
import android.os.IDeviceIdleController;
import android.os.RemoteException;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
@@ -230,7 +230,7 @@ public final class BatteryBackupHelper implements BackupHelper {
mBatteryOptimizeUtils != null
? mBatteryOptimizeUtils /*testing only*/
: new BatteryOptimizeUtils(mContext, uid, packageName);
batteryOptimizeUtils.setAppOptimizationMode(mode);
batteryOptimizeUtils.setAppUsageState(mode);
Log.d(TAG, String.format("restore:%s mode=%d", packageName, mode));
}

View File

@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge;
import android.annotation.IntDef;
import android.app.AppOpsManager;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -89,36 +90,28 @@ public class BatteryOptimizeUtils {
return getAppOptimizationMode(mMode, mAllowListed);
}
public void setAppOptimizationMode(@OptimizationMode int mode) {
try {
setAppUsageStateInternal(mode);
} catch (Exception e) {
Log.e(TAG, "setAppUsageState() is failed for " + mPackageName, e);
}
}
/** Sets the {@link OptimizationMode} for associated app. */
public void setAppUsageStateInternal(@OptimizationMode int mode) {
public void setAppUsageState(@OptimizationMode int mode) {
if (getAppOptimizationMode(mMode, mAllowListed) == mode) {
Log.w(TAG, "set the same optimization mode for: " + mPackageName);
return;
}
switch (mode) {
case MODE_RESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
mPowerAllowListBackend.removeApp(mPackageName);
break;
case MODE_UNRESTRICTED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
mPowerAllowListBackend.addApp(mPackageName);
break;
case MODE_OPTIMIZED:
mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
mPowerAllowListBackend.removeApp(mPackageName);
break;
default:
Log.d(TAG, "set unknown app optimization mode.");
}
AsyncTask.execute(() -> {
switch (mode) {
case MODE_RESTRICTED:
setAppOptimizationMode(AppOpsManager.MODE_IGNORED, /* allowListed */ false);
break;
case MODE_UNRESTRICTED:
setAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ true);
break;
case MODE_OPTIMIZED:
setAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
break;
default:
Log.d(TAG, "set unknown app optimization mode.");
}
});
}
/**
@@ -142,6 +135,19 @@ public class BatteryOptimizeUtils {
return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
}
private void setAppOptimizationMode(int appStandbyMode, boolean allowListed) {
try {
mBatteryUtils.setForceAppStandby(mUid, mPackageName, appStandbyMode);
if (allowListed) {
mPowerAllowListBackend.addApp(mPackageName);
} else {
mPowerAllowListBackend.removeApp(mPackageName);
}
} catch (Exception e) {
Log.e(TAG, "set OPTIMIZED failed for " + mPackageName, e);
}
}
private void refreshState() {
mPowerAllowListBackend.refreshList();
mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);

View File

@@ -73,12 +73,6 @@ public class OptimizedPreferenceController extends AbstractPreferenceController
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!KEY_OPTIMIZED_PREF.equals(preference.getKey())) {
return false;
}
mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_OPTIMIZED);
Log.d(TAG, "Set optimized");
return true;
return getPreferenceKey().equals(preference.getKey());
}
}

View File

@@ -76,12 +76,6 @@ public class RestrictedPreferenceController extends AbstractPreferenceController
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!KEY_RESTRICTED_PREF.equals(preference.getKey())) {
return false;
}
mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_RESTRICTED);
Log.d(TAG, "Set restricted");
return true;
return getPreferenceKey().equals(preference.getKey());
}
}

View File

@@ -74,12 +74,6 @@ public class UnrestrictedPreferenceController extends AbstractPreferenceControll
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!KEY_UNRESTRICTED_PREF.equals(preference.getKey())) {
return false;
}
mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_UNRESTRICTED);
Log.d(TAG, "Set unrestricted");
return true;
return getPreferenceKey().equals(preference.getKey());
}
}