summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorEugene Susla <eugenesusla@google.com>2018-11-09 17:44:46 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-11-09 17:44:46 +0000
commit72e8228fb8f903972e0903e0469619037006aa98 (patch)
tree76de906b42d258d2a1ef449aeca5b5517f4259be /core/java
parent368af0698ffcac84a3cbc177beeb25e0ac13b42d (diff)
parent5520368070945145d4d493f3f495c8c316dda3f7 (diff)
Merge "Adjust default app op behavior based on feature state"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/AppOpsManager.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 1e2244e11bd2..a9819fc6973f 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -28,7 +28,9 @@ import android.annotation.UnsupportedAppUsage;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.pm.ParceledListSlice;
+import android.database.ContentObserver;
import android.media.AudioAttributes.AttributeUsage;
+import android.net.Uri;
import android.os.Binder;
import android.os.IBinder;
import android.os.Parcel;
@@ -36,6 +38,7 @@ import android.os.Parcelable;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserManager;
+import android.provider.Settings;
import android.util.ArrayMap;
import com.android.internal.app.IAppOpsActiveCallback;
@@ -50,6 +53,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* API for interacting with "application operation" tracking.
@@ -1608,9 +1612,56 @@ public class AppOpsManager {
* @hide
*/
public static int opToDefaultMode(int op) {
+ // STOPSHIP b/118520006: Hardcode the default values once the feature is stable.
+ switch (op) {
+ // SMS permissions
+ case AppOpsManager.OP_SEND_SMS:
+ case AppOpsManager.OP_RECEIVE_SMS:
+ case AppOpsManager.OP_READ_SMS:
+ case AppOpsManager.OP_RECEIVE_WAP_PUSH:
+ case AppOpsManager.OP_RECEIVE_MMS:
+ case AppOpsManager.OP_READ_CELL_BROADCASTS:
+ // CallLog permissions
+ case AppOpsManager.OP_READ_CALL_LOG:
+ case AppOpsManager.OP_WRITE_CALL_LOG:
+ case AppOpsManager.OP_PROCESS_OUTGOING_CALLS: {
+ if (sSmsAndCallLogRestrictionEnabled.get() < 0) {
+ startWatchingSmsRestrictionEnabled();
+ }
+ if (sSmsAndCallLogRestrictionEnabled.get() == 1) {
+ return AppOpsManager.MODE_DEFAULT;
+ }
+ }
+ }
return sOpDefaultMode[op];
}
+ // STOPSHIP b/118520006: Hardcode the default values once the feature is stable.
+ private static final AtomicInteger sSmsAndCallLogRestrictionEnabled = new AtomicInteger(-1);
+
+ // STOPSHIP b/118520006: Hardcode the default values once the feature is stable.
+ private static void startWatchingSmsRestrictionEnabled() {
+ final Context context = ActivityThread.currentApplication();
+ if (context == null) {
+ // Should never happen
+ return;
+ }
+
+ sSmsAndCallLogRestrictionEnabled.set(ActivityThread.currentActivityThread()
+ .getIntCoreSetting(Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 0));
+
+ final Uri uri = Settings.Global.getUriFor(Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED);
+ context.getContentResolver().registerContentObserver(uri, false, new ContentObserver(
+ context.getMainThreadHandler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ sSmsAndCallLogRestrictionEnabled.set(Settings.Global.getInt(
+ context.getContentResolver(),
+ Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 0));
+ }
+ });
+ }
+
/**
* Retrieve the default mode for the app op.
*