Merge "Unhibernate an app when a user exempts it" into sc-v2-dev am: 83a8b76ec2

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

Change-Id: Icacd93b1f5b0cfe950dd4e4ccc0f8081ad1d58c3
This commit is contained in:
Kevin Han
2021-11-18 21:58:23 +00:00
committed by Automerger Merge Worker
2 changed files with 23 additions and 1 deletions

View File

@@ -26,6 +26,7 @@ import static com.android.settings.Utils.PROPERTY_APP_HIBERNATION_ENABLED;
import static com.android.settings.Utils.PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS;
import android.app.AppOpsManager;
import android.apphibernation.AppHibernationManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.provider.DeviceConfig;
@@ -134,8 +135,15 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen
@Override
public boolean onPreferenceChange(Preference preference, Object isChecked) {
try {
final boolean checked = (boolean) isChecked;
mAppOpsManager.setUidMode(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, mPackageUid,
(boolean) isChecked ? MODE_ALLOWED : MODE_IGNORED);
checked ? MODE_ALLOWED : MODE_IGNORED);
if (!checked) {
final AppHibernationManager ahm =
mContext.getSystemService(AppHibernationManager.class);
ahm.setHibernatingForUser(mPackageName, false);
ahm.setHibernatingGlobally(mPackageName, false);
}
} catch (RuntimeException e) {
return false;
}

View File

@@ -34,6 +34,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
import android.apphibernation.AppHibernationManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.provider.DeviceConfig;
@@ -61,6 +62,8 @@ public class HibernationSwitchPreferenceControllerTest {
@Mock
private PackageManager mPackageManager;
@Mock
private AppHibernationManager mAppHibernationManager;
@Mock
private SwitchPreference mPreference;
private HibernationSwitchPreferenceController mController;
@@ -71,6 +74,8 @@ public class HibernationSwitchPreferenceControllerTest {
MockitoAnnotations.initMocks(this);
mContext = spy(ApplicationProvider.getApplicationContext());
when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
when(mContext.getSystemService(AppHibernationManager.class))
.thenReturn(mAppHibernationManager);
when(mPackageManager.getPackageUid(eq(VALID_PACKAGE_NAME), anyInt()))
.thenReturn(PACKAGE_UID);
when(mPackageManager.getPackageUid(eq(INVALID_PACKAGE_NAME), anyInt()))
@@ -109,6 +114,15 @@ public class HibernationSwitchPreferenceControllerTest {
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
public void onPreferenceChange_unhibernatesWhenExempted() {
mController.setPackage(VALID_PACKAGE_NAME);
mController.onPreferenceChange(mPreference, false);
verify(mAppHibernationManager).setHibernatingForUser(VALID_PACKAGE_NAME, false);
verify(mAppHibernationManager).setHibernatingGlobally(VALID_PACKAGE_NAME, false);
}
@Test
public void updateState_exemptedByDefaultPackage_shouldNotCheck() {
when(mAppOpsManager.unsafeCheckOpNoThrow(