Loading src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -61,6 +62,8 @@ public class HibernationSwitchPreferenceControllerTest { @Mock private PackageManager mPackageManager; @Mock private AppHibernationManager mAppHibernationManager; @Mock private SwitchPreference mPreference; private HibernationSwitchPreferenceController mController; Loading @@ -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())) Loading Loading @@ -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( Loading Loading
src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading
tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -61,6 +62,8 @@ public class HibernationSwitchPreferenceControllerTest { @Mock private PackageManager mPackageManager; @Mock private AppHibernationManager mAppHibernationManager; @Mock private SwitchPreference mPreference; private HibernationSwitchPreferenceController mController; Loading @@ -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())) Loading Loading @@ -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( Loading