Unrestrict app if it been set as device admin app

Fix merge conlict in imports area

Bug: 110337989
Test: RunSettingsRoboTests
Change-Id: I8229bee97d970f8b16351193cfd99ca05ff041bf
This commit is contained in:
Lei Yu
2018-06-28 14:08:42 -07:00
committed by jackqdyulei
parent 636cc6caf9
commit 154af9a750
2 changed files with 51 additions and 0 deletions

View File

@@ -61,6 +61,8 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.EventLogTags; import com.android.settings.EventLogTags;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.users.UserDialogs; import com.android.settings.users.UserDialogs;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
@@ -427,6 +429,9 @@ public class DeviceAdminAdd extends Activity {
mDPM.setActiveAdmin(mDeviceAdmin.getComponent(), mRefreshing); mDPM.setActiveAdmin(mDeviceAdmin.getComponent(), mRefreshing);
EventLog.writeEvent(EventLogTags.EXP_DET_DEVICE_ADMIN_ACTIVATED_BY_USER, EventLog.writeEvent(EventLogTags.EXP_DET_DEVICE_ADMIN_ACTIVATED_BY_USER,
mDeviceAdmin.getActivityInfo().applicationInfo.uid); mDeviceAdmin.getActivityInfo().applicationInfo.uid);
unrestrictAppIfPossible(BatteryUtils.getInstance(this));
setResult(Activity.RESULT_OK); setResult(Activity.RESULT_OK);
} catch (RuntimeException e) { } catch (RuntimeException e) {
// Something bad happened... could be that it was // Something bad happened... could be that it was
@@ -448,6 +453,15 @@ public class DeviceAdminAdd extends Activity {
finish(); finish();
} }
void unrestrictAppIfPossible(BatteryUtils batteryUtils) {
// Unrestrict admin app if it is already been restricted
final String packageName = mDeviceAdmin.getComponent().getPackageName();
final int uid = batteryUtils.getPackageUid(packageName);
if (batteryUtils.isForceAppStandbyEnabled(uid, packageName)) {
batteryUtils.setForceAppStandby(uid, packageName, AppOpsManager.MODE_ALLOWED);
}
}
void continueRemoveAction(CharSequence msg) { void continueRemoveAction(CharSequence msg) {
if (!mWaitingForRemoveMsg) { if (!mWaitingForRemoveMsg) {
return; return;

View File

@@ -18,23 +18,37 @@ package com.android.settings.applications.specialaccess.deviceadmin;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq; import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
import android.app.admin.DeviceAdminInfo;
import android.content.Context; import android.content.Context;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric; import org.robolectric.Robolectric;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class DeviceAdminAddTest { public class DeviceAdminAddTest {
private static final int UID = 12345;
private static final String PACKAGE_NAME = "com.android.test.device.admin";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private DeviceAdminInfo mDeviceAdmin;
@Mock
private BatteryUtils mBatteryUtils;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private DeviceAdminAdd mDeviceAdminAdd; private DeviceAdminAdd mDeviceAdminAdd;
@@ -44,6 +58,10 @@ public class DeviceAdminAddTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mDeviceAdminAdd = Robolectric.buildActivity(DeviceAdminAdd.class).get(); mDeviceAdminAdd = Robolectric.buildActivity(DeviceAdminAdd.class).get();
doReturn(UID).when(mBatteryUtils).getPackageUid(PACKAGE_NAME);
when(mDeviceAdmin.getComponent().getPackageName()).thenReturn(PACKAGE_NAME);
mDeviceAdminAdd.mDeviceAdmin = mDeviceAdmin;
} }
@Test @Test
@@ -56,4 +74,23 @@ public class DeviceAdminAddTest {
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_ADMIN_DENY), eq("app")); eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_ADMIN_DENY), eq("app"));
} }
@Test
public void unrestrictAppIfPossible_appRestricted_unrestrictApp() {
doReturn(true).when(mBatteryUtils).isForceAppStandbyEnabled(UID, PACKAGE_NAME);
mDeviceAdminAdd.unrestrictAppIfPossible(mBatteryUtils);
verify(mBatteryUtils).setForceAppStandby(UID, PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
}
@Test
public void unrestrictAppIfPossible_appUnrestricted_doNothing() {
doReturn(false).when(mBatteryUtils).isForceAppStandbyEnabled(UID, PACKAGE_NAME);
mDeviceAdminAdd.unrestrictAppIfPossible(mBatteryUtils);
verify(mBatteryUtils, never()).setForceAppStandby(UID, PACKAGE_NAME,
AppOpsManager.MODE_ALLOWED);
}
} }