Adding alarms and reminders activity

Adding a settings screen to control the permission SCHEDULE_EXACT_ALARM.
Apps can start this by starting a newly introduced API intent
REQUEST_SCHEDULE_EXACT_ALARM.

Test: make -j RunSettingsRoboTests
Manually by UI inspection:
Settings -> Apps -> Special App access -> Alarms and Reminders
or by running:
adb shell am start -a android.settings.REQUEST_SCHEDULE_EXACT_ALARM

Bug: 171306433
Bug: 171305516
Change-Id: I1293d38fc50a22b2af46f80ab24f676ed632f964
This commit is contained in:
Suprabh Shukla
2021-02-17 18:00:35 -08:00
parent beefb25b48
commit c8b9240535
14 changed files with 534 additions and 3 deletions

View File

@@ -25,10 +25,13 @@ import android.app.AppOpsManager;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.google.common.truth.Truth;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -60,6 +63,58 @@ public final class AppStateAppOpsBridgeTest {
// should not crash
}
@Test
public void permissionState_modeDefault_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_DEFAULT;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isTrue();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isFalse();
}
@Test
public void permissionState_modeErrored_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_ERRORED;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isFalse();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isFalse();
}
@Test
public void permissionState_modeAllowed_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_ALLOWED;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isTrue();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isTrue();
}
@Test
public void permissionState_modeIgnored_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_IGNORED;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isFalse();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isFalse();
}
private class TestAppStateAppOpsBridge extends AppStateAppOpsBridge {
private TestAppStateAppOpsBridge() {
super(mContext, null, null, AppOpsManager.OP_SYSTEM_ALERT_WINDOW,