diff options
| author | Eugene Susla <eugenesusla@google.com> | 2018-11-09 17:44:46 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-11-09 17:44:46 +0000 |
| commit | 72e8228fb8f903972e0903e0469619037006aa98 (patch) | |
| tree | 76de906b42d258d2a1ef449aeca5b5517f4259be /core/java | |
| parent | 368af0698ffcac84a3cbc177beeb25e0ac13b42d (diff) | |
| parent | 5520368070945145d4d493f3f495c8c316dda3f7 (diff) | |
Merge "Adjust default app op behavior based on feature state"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/AppOpsManager.java | 51 |
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. * |
