Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e936d19 authored by Pradeep Panigrahi's avatar Pradeep Panigrahi Committed by Steve Kondik
Browse files

app ops: New ops, features, and modes

AppOpsService: Add MODE_ASK support to AppOps.

Add support for new mode(MODE_ASK) in AppOpsService to show a permission
dialog box to user to confirm user permission before allowing or ignoring
that operation.

All strict operations (defined in AppOpsManager) are going to be in
MODE_ASK by default.

Operations will be moved to MODE_ALLOWED or MODE_IGNORED according to
user's choice.

Change-Id: I1314125a2b8be558e422e4a9eea0ff066c21bf94

AppOps: Add support for whitelist of packages.

By default AppOps gives MODE_ASK permission to all strict operations.
This can degrade user experience for pre-installed apps.

This change adds support for passing a whitelist XML file to AppOps.
Operations requested by packages listed in whitelist file will be set
to MODE_ALLOWED by default.

User can still go into settings and override permissions of these
operations.

Whitelist XML file should have following format:
Example: whitelist_appops.xml

<whitelist-pkgs>
    <pkg name="com.android.settings"/>
    <pkg name="com.android.systemui"/>
    .
    .
    .
</whitelist-pkgs>

Change-Id: I78bf5e7baa95f0e86f9856fb38bf1ca238691303

wifi: Confirm user permission before toggling wifi.

Check user permissions before enabling/disabling wifi.

Change-Id: I1ddae6e47f42b6d3fc831c2c135ece75cf9e935d

AppOps: Add Bluetooth enable control into AppOps

Check user permission before enabling bluetooth.

Change-Id: I9af341157df05104d3c5a52874538eefdbe14c4b

AppOps: Add data connect control into AppOps

Check user permission before enabling/disabling mobile data.

Change-Id: I6e1895b130788dfccbc0a8523dadf1559b698988

AppOps: Fix mms control in AppOps.

Add support to check user permission before sending MMS.
Also seperate out SMS operations from MMS operations.

CRs-Fixed: 549192
Change-Id: Ia5b73e6b6a2c48b608a0ef1d199429c6c0e21f75

AppOpsManager: set default mode for sms write operation to MODE_ALLOWED.

The default mode for sms write operation is set to
MODE_IGNORED, so this was not allowing Bluetooth Map application
to do any write operation of SMS. So set the default mode to
MODE_ALLOWED.

Change-Id: I9fe7144d73a3b8bff99d4ab1c663b69007c32b66
CRs-fixed: 556330

AppOps: Add null pointer check for USERAGENT parameter.

Fix the Java exception which is caused by null pointer issue in
AndroidHttpClient.

Change-Id: If7e36298f94ca164b87e1b0604f49156bdfd4513

AppOps: Add BOOT_COMPLETED operation.

Add BOOT_COMPLETED operation in AppOps.

This operation is used to allow user to control auto start of
applications and services at bootup.

Change-Id: Ie8488ec1b4683c8617ca569cfc858709f0d35ba2

AppOps: Add Chinese support for AppOps dialog.

Add Chinese string for AppOps Permission dialog.

Change-Id: I8d17262ea7ae564c7927be32e91742e1e5f93ce1

AppOps: Always remember user choice in ASK mode.

Remove 'always ask' option from AppOps. Remember user choice for
all operations.

Change-Id: If16a96eb95437ce54ee8d27b84ac6c284a110147

AppOps: Add Ops check for audio recording by AudioRecord API

Confirm user permission before audio recording by AudioRecord API

Change-Id: Ib534a2872d0743a8124b403a2f20465ceb467f64
parent c63b2a47
Loading
Loading
Loading
Loading
+155 −51
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
 * Not a Contribution.
 *
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,6 +21,7 @@ package android.app;

import android.os.Binder;
import android.os.IBinder;
import android.os.SystemProperties;
import android.util.ArrayMap;
import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IAppOpsCallback;
@@ -90,9 +94,15 @@ public class AppOpsManager {
     */
    public static final int MODE_ERRORED = 2;

    /** @hide This mode should never be returned to caller
     * Result from {@link #checkOp} the given caller is
     * not allowed to perform the given operation.
     */
    public static final int MODE_ASK = 3;

    // when adding one of these:
    //  - increment _NUM_OP
    //  - add rows to sOpToSwitch, sOpToString, sOpNames, sOpPerms, sOpDefaultMode
    //  - add rows to sOpToSwitch, sOpToString, sOpNames, sOpPerms, sOpDefaultMode, sOpDefaultStrictMode
    //  - add descriptive strings to Settings/res/values/arrays.xml
    //  - add the op to the appropriate template in AppOpsState.OpsTemplate (settings app)

@@ -193,9 +203,15 @@ public class AppOpsManager {
    /** @hide */
    public static final int OP_ALARM_WAKEUP = 46;
    /** @hide */
    public static final int OP_BOOT_COMPLETED = 47;
    public static final int OP_SEND_MMS = 47;
    /** @hide */
    public static final int OP_READ_MMS = 48;
    /** @hide */
    public static final int _NUM_OP = 48;
    public static final int OP_WRITE_MMS = 49;
    /** @hide */
    public static final int OP_BOOT_COMPLETED = 50;
    /** @hide */
    public static final int _NUM_OP = 51;

    /** Access to coarse location information. */
    public static final String OPSTR_COARSE_LOCATION =
@@ -266,6 +282,9 @@ public class AppOpsManager {
            OP_BLUETOOTH_CHANGE,
            OP_DATA_CONNECT_CHANGE,
            OP_ALARM_WAKEUP,
            OP_SEND_MMS,
            OP_READ_MMS,
            OP_WRITE_MMS,
            OP_BOOT_COMPLETED,
    };

@@ -322,6 +341,9 @@ public class AppOpsManager {
            null,
            null,
            null,
            null,
            null,
            null,
    };

    /**
@@ -376,6 +398,9 @@ public class AppOpsManager {
            "BLUETOOTH_CHANGE",
            "DATA_CONNECT_CHANGE",
            "ALARM_WAKEUP",
            "SEND_MMS",
            "READ_MMS",
            "WRITE_MMS",
            "BOOT_COMPLETED",
    };

@@ -431,6 +456,9 @@ public class AppOpsManager {
            android.Manifest.permission.BLUETOOTH,
            android.Manifest.permission.CHANGE_NETWORK_STATE,
            null, // OP_ALARM_WAKEUP
            android.Manifest.permission.SEND_SMS,
            android.Manifest.permission.READ_SMS,
            android.Manifest.permission.WRITE_SMS,
            android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
    };

@@ -438,56 +466,117 @@ public class AppOpsManager {
     * This specifies the default mode for each operation.
     */
    private static int[] sOpDefaultMode = new int[] {
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED, // OP_COARSE_LOCATION
            AppOpsManager.MODE_ALLOWED, // OP_FINE_LOCATION
            AppOpsManager.MODE_ALLOWED, // OP_GPS
            AppOpsManager.MODE_ALLOWED, // OP_VIBRATE
            AppOpsManager.MODE_ALLOWED, // OP_READ_CONTACTS
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_CONTACTS
            AppOpsManager.MODE_ALLOWED, // OP_READ_CALL_LOG
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_CALL_LOG
            AppOpsManager.MODE_ALLOWED, // OP_READ_CALENDAR
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_CALENDAR
            AppOpsManager.MODE_ALLOWED, // OP_WIFI_SCAN
            AppOpsManager.MODE_ALLOWED, // OP_POST_NOTIFICATION
            AppOpsManager.MODE_ALLOWED, // OP_NEIGHBORING_CELLS
            AppOpsManager.MODE_ALLOWED, // OP_CALL_PHONE
            AppOpsManager.MODE_ALLOWED, // OP_READ_SMS
            AppOpsManager.MODE_IGNORED, // OP_WRITE_SMS
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED, // OP_RECEIVE_SMS
            AppOpsManager.MODE_ALLOWED, // OP_RECEIVE_EMERGECY_SMS
            AppOpsManager.MODE_ALLOWED, // OP_RECEIVE_MMS
            AppOpsManager.MODE_ALLOWED, // OP_RECEIVE_WAP_PUSH
            AppOpsManager.MODE_ALLOWED, // OP_SEND_SMS
            AppOpsManager.MODE_ALLOWED, // OP_READ_ICC_SMS
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_ICC_SMS
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_SETTINGS
            AppOpsManager.MODE_ALLOWED, // OP_SYSTEM_ALERT_WINDOW
            AppOpsManager.MODE_ALLOWED, // OP_ACCESS_NOTIFICATIONS
            AppOpsManager.MODE_ALLOWED, // OP_CAMERA
            AppOpsManager.MODE_ALLOWED, // OP_RECORD_AUDIO
            AppOpsManager.MODE_ALLOWED, // OP_PLAY_AUDIO
            AppOpsManager.MODE_ALLOWED, // OP_READ_CLIPBOARD
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_CLIPBOARD
            AppOpsManager.MODE_ALLOWED, // OP_TAKE_MEDIA_BUTTONS
            AppOpsManager.MODE_ALLOWED, // OP_TAKE_AUDIO_FOCUS
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_MASTER_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_VOICE_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_RING_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_MEDIA_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_ALARM_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_NOTIFICATION_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_BLUETOOTH_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_WAKE_LOCK
            AppOpsManager.MODE_ALLOWED, // OP_MONITOR_LOCATION
            AppOpsManager.MODE_ALLOWED, // OP_MONITOR_HIGH_POWER_LOCATION
            AppOpsManager.MODE_ALLOWED, // OP_WIFI_CHANGE
            AppOpsManager.MODE_ALLOWED, // OP_BLUETOOTH_CHANGE
            AppOpsManager.MODE_ALLOWED, // OP_DATA_CHANGE
            AppOpsManager.MODE_ALLOWED, // OP_ALARM_WAKEUP
            AppOpsManager.MODE_ALLOWED, // OP_SEND_MMS
            AppOpsManager.MODE_ALLOWED, // OP_READ_MMS
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_MMS
            AppOpsManager.MODE_ALLOWED, // OP_BOOT_COMPLETED
    };

    /**
     * This specifies the default mode for each strict operation.
     */
    private static int[] sOpDefaultStrictMode = new int[] {
            AppOpsManager.MODE_ASK,     // OP_COARSE_LOCATION
            AppOpsManager.MODE_ASK,     // OP_FINE_LOCATION
            AppOpsManager.MODE_ASK,     // OP_GPS
            AppOpsManager.MODE_ALLOWED, // OP_VIBRATE
            AppOpsManager.MODE_ASK,     // OP_READ_CONTACTS
            AppOpsManager.MODE_ASK,     // OP_WRITE_CONTACTS
            AppOpsManager.MODE_ASK,     // OP_READ_CALL_LOG
            AppOpsManager.MODE_ASK,     // OP_WRITE_CALL_LOG
            AppOpsManager.MODE_ALLOWED, // OP_READ_CALENDAR
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_CALENDAR
            AppOpsManager.MODE_ASK,     // OP_WIFI_SCAN
            AppOpsManager.MODE_ALLOWED, // OP_POST_NOTIFICATION
            AppOpsManager.MODE_ALLOWED, // OP_NEIGHBORING_CELLS
            AppOpsManager.MODE_ASK,     // OP_CALL_PHONE
            AppOpsManager.MODE_ASK,     // OP_READ_SMS
            AppOpsManager.MODE_IGNORED, // OP_WRITE_SMS
            AppOpsManager.MODE_ASK,     // OP_RECEIVE_SMS
            AppOpsManager.MODE_ALLOWED, // OP_RECEIVE_EMERGECY_SMS
            AppOpsManager.MODE_ASK,     // OP_RECEIVE_MMS
            AppOpsManager.MODE_ALLOWED, // OP_RECEIVE_WAP_PUSH
            AppOpsManager.MODE_ASK,     // OP_SEND_SMS
            AppOpsManager.MODE_ALLOWED, // OP_READ_ICC_SMS
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_ICC_SMS
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_SETTINGS
            AppOpsManager.MODE_ALLOWED, // OP_SYSTEM_ALERT_WINDOW
            AppOpsManager.MODE_ALLOWED, // OP_ACCESS_NOTIFICATIONS
            AppOpsManager.MODE_ASK,     // OP_CAMERA
            AppOpsManager.MODE_ASK,     // OP_RECORD_AUDIO
            AppOpsManager.MODE_ALLOWED, // OP_PLAY_AUDIO
            AppOpsManager.MODE_ALLOWED, // OP_READ_CLIPBOARD
            AppOpsManager.MODE_ALLOWED, // OP_WRITE_CLIPBOARD
            AppOpsManager.MODE_ALLOWED, // OP_TAKE_MEDIA_BUTTONS
            AppOpsManager.MODE_ALLOWED, // OP_TAKE_AUDIO_FOCUS
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_MASTER_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_VOICE_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_RING_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_MEDIA_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_ALARM_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_NOTIFICATION_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_AUDIO_BLUETOOTH_VOLUME
            AppOpsManager.MODE_ALLOWED, // OP_WAKE_LOCK
            AppOpsManager.MODE_ALLOWED, // OP_MONITOR_LOCATION
            AppOpsManager.MODE_ASK,     // OP_MONITOR_HIGH_POWER_LOCATION
            AppOpsManager.MODE_ASK,     // OP_WIFI_CHANGE
            AppOpsManager.MODE_ASK,     // OP_BLUETOOTH_CHANGE
            AppOpsManager.MODE_ASK,     // OP_DATA_CHANGE
            AppOpsManager.MODE_ASK,     // OP_ALARM_WAKEUP
            AppOpsManager.MODE_ASK,     // OP_SEND_MMS
            AppOpsManager.MODE_ASK,     // OP_READ_MMS
            AppOpsManager.MODE_ASK,     // OP_WRITE_MMS
            AppOpsManager.MODE_ALLOWED, // OP_BOOT_COMPLETED
    };


    /**
     * This specifies whether each option is allowed to be reset
     * when resetting all app preferences.  Disable reset for
@@ -544,6 +633,9 @@ public class AppOpsManager {
            false,
            false,
            false,
            false,
            false,
            false,
    };

    private static HashMap<String, Integer> sOpStrToOp = new HashMap<String, Integer>();
@@ -571,6 +663,10 @@ public class AppOpsManager {
            throw new IllegalStateException("sOpDefaultMode length " + sOpDefaultMode.length
                    + " should be " + _NUM_OP);
        }
        if (sOpDefaultStrictMode.length != _NUM_OP) {
            throw new IllegalStateException("sOpDefaultStrictMode length " + sOpDefaultStrictMode.length
                    + " should be " + _NUM_OP);
        }
        if (sOpDisableReset.length != _NUM_OP) {
            throw new IllegalStateException("sOpDisableReset length " + sOpDisableReset.length
                    + " should be " + _NUM_OP);
@@ -623,7 +719,10 @@ public class AppOpsManager {
     * Retrieve the default mode for the operation.
     * @hide
     */
    public static int opToDefaultMode(int op) {
    public static int opToDefaultMode(int op, boolean strict) {
        if(strict)
            return sOpDefaultStrictMode[op];
        else
            return sOpDefaultMode[op];
    }

@@ -1230,4 +1329,9 @@ public class AppOpsManager {
        } catch (RemoteException e) {
        }
    }

    /** @hide */
    public static boolean isStrictEnable() {
        return SystemProperties.getBoolean("persist.sys.strict_op_enable", false);
    }
}
+65 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.RequestWrapper;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
@@ -49,10 +50,13 @@ import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.BasicHttpProcessor;
import org.apache.http.protocol.HttpContext;

import android.app.ActivityThread;
import android.app.AppOpsManager;
import android.content.ContentResolver;
import android.content.Context;
import android.net.SSLCertificateSocketFactory;
import android.net.SSLSessionCache;
import android.os.Binder;
import android.os.Looper;
import android.util.Base64;
import android.util.Log;
@@ -248,46 +252,107 @@ public final class AndroidHttpClient implements HttpClient {
        return delegate.getConnectionManager();
    }

    private boolean isMmsRequest()
    {
        if(delegate.getParams() == null ||
                delegate.getParams().getParameter(CoreProtocolPNames.USER_AGENT) == null) {
            return false;
        }

        if(delegate.getParams().getParameter(CoreProtocolPNames.USER_AGENT).toString().contains("Android-Mms"))
            return true;

        return false;
    }

    private boolean checkMmsOps()
    {
        AppOpsManager appOps = (AppOpsManager) ActivityThread.currentApplication().getSystemService(Context.APP_OPS_SERVICE);
        int callingUid = Binder.getCallingUid();
        String callingPackage= ActivityThread.currentPackageName();

        if (appOps.noteOp(AppOpsManager.OP_SEND_MMS, callingUid, callingPackage) !=
                AppOpsManager.MODE_ALLOWED)
                return false;

        return true;
    }

    private String getMethod(HttpUriRequest request) {
        if(request != null)
            return request.getMethod();
        return null;
    }

    private String getMethod(HttpRequest request) {
        if(request != null)
            if(request.getRequestLine() != null)
                return request.getRequestLine().getMethod();
        return null;
    }

    private boolean checkMmsSendPermission(String method) {
        if(isMmsRequest() && method.equals("POST"))
            return checkMmsOps();
        return true;
    }

    public HttpResponse execute(HttpUriRequest request) throws IOException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(request);
    }

    public HttpResponse execute(HttpUriRequest request, HttpContext context)
            throws IOException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(request, context);
    }

    public HttpResponse execute(HttpHost target, HttpRequest request)
            throws IOException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(target, request);
    }

    public HttpResponse execute(HttpHost target, HttpRequest request,
            HttpContext context) throws IOException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(target, request, context);
    }

    public <T> T execute(HttpUriRequest request,
            ResponseHandler<? extends T> responseHandler)
            throws IOException, ClientProtocolException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(request, responseHandler);
    }

    public <T> T execute(HttpUriRequest request,
            ResponseHandler<? extends T> responseHandler, HttpContext context)
            throws IOException, ClientProtocolException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(request, responseHandler, context);
    }

    public <T> T execute(HttpHost target, HttpRequest request,
            ResponseHandler<? extends T> responseHandler) throws IOException,
            ClientProtocolException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(target, request, responseHandler);
    }

    public <T> T execute(HttpHost target, HttpRequest request,
            ResponseHandler<? extends T> responseHandler, HttpContext context)
            throws IOException, ClientProtocolException {
        if(!checkMmsSendPermission(getMethod(request)))
            throw new IOException("Permission denied");
        return delegate.execute(target, request, responseHandler, context);
    }

+42 −0
Original line number Diff line number Diff line
@@ -1665,4 +1665,46 @@
  </plurals>
    <string name="restr_pin_try_later" msgid="973144472490532377">"稍后重试"</string>
    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"从顶部向下滑动即可退出全屏模式。"</string>

    <!-- App Ops -->
    <string name="permission">权限</string>
    <string-array name="app_ops_labels">
        <item>试图获取位置信息</item>
        <item>试图获取位置信息</item>
        <item>试图获取位置信息</item>
        <item>试图使用震动器</item>
        <item>试图读取联系人</item>
        <item>试图修改联系人</item>
        <item>试图读取通话记录</item>
        <item>试图修改通话记录</item>
        <item>试图读取日程表</item>
        <item>试图修改日程表</item>
        <item>试图获取位置信息</item>
        <item>试图发出通知</item>
        <item>试图获取位置信息</item>
        <item>试图拨打电话</item>
        <item>试图读取短信</item>
        <item>试图修改短信</item>
        <item>试图收取短信</item>
        <item>试图收取短信</item>
        <item>试图收取彩信</item>
        <item>试图收取短信</item>
        <item>试图发送短信</item>
        <item>试图读取短信</item>
        <item>试图修改短信</item>
        <item>试图修改设置</item>
        <item>试图在顶层绘图</item>
        <item>试图获取通知</item>
        <item>试图使用相机</item>
        <item>试图录音</item>
        <item>试图放音</item>
        <item>试图读取剪贴板</item>
        <item>试图修改剪贴板</item>
        <item>试图开关Wifi</item>
        <item>试图开关蓝牙</item>
        <item>试图开关移动数据</item>
        <item>试图发送彩信</item>
        <item>试图读取彩信</item>
        <item>试图修改彩信</item>
    </string-array>
</resources>
+53 −0
Original line number Diff line number Diff line
@@ -1489,4 +1489,57 @@
    <!-- Configuration to enable non-default PDP during IWLAN -->
    <bool name="config_feature_iwlan_enabled">false</bool>

    <!-- User display names for app ops codes -->
    <string-array name="app_ops_labels">
        <item>Trying to access location</item>
        <item>Trying to access location</item>
        <item>Trying to access location</item>
        <item>Trying to use vibrate</item>
        <item>Trying to read contacts</item>
        <item>Trying to modify contacts</item>
        <item>Trying to read call log</item>
        <item>Trying to modify call log</item>
        <item>Trying to read calendar</item>
        <item>Trying to modify calendar</item>
        <item>Trying to access location</item>
        <item>Trying to post notification</item>
        <item>Trying to access location</item>
        <item>Trying to make phone call</item>
        <item>Trying to read SMS</item>
        <item>Trying to write/modify SMS</item>
        <item>Trying to receive SMS</item>
        <item>Trying to receive SMS</item>
        <item>Trying to receive SMS</item>
        <item>Trying to receive SMS</item>
        <item>Trying to send SMS</item>
        <item>Trying to read SMS</item>
        <item>Trying to write/modify SMS</item>
        <item>Trying to modify settings</item>
        <item>Trying to draw on top</item>
        <item>Trying to access notifications</item>
        <item>Trying to access Camera</item>
        <item>Trying to record audio</item>
        <item>Trying to play audio</item>
        <item>Trying to read clipboard</item>
        <item>Trying to modify clipboard</item>
        <item>Trying to use media buttons</item>
        <item>Trying to use audio focus</item>
        <item>Trying to use master volume</item>
        <item>Trying to use voice volume</item>
        <item>Trying to use ring volume</item>
        <item>Trying to use media volume</item>
        <item>Trying to use alarm volume</item>
        <item>Trying to use notification volume</item>
        <item>Trying to use bluetooth volume</item>
        <item>Trying to Keep device awake</item>
        <item>Trying to access location</item>
        <item>Trying to access location</item>
        <item>Trying to turn on/off Wifi</item>
        <item>Trying to turn on/off bluetooth</item>
        <item>Trying to turn on/off mobile data</item>
        <item>Trying to send MMS</item>
        <item>Trying to read MMS</item>
        <item>Trying to write MMS</item>
        <item>Trying to start at bootup</item>
    </string-array>
</resources>
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,9 @@
<!--
/* //device/apps/common/assets/res/any/strings.xml
**
** Copyright (c) 2013, The Linux Foundation. All rights reserved.
** Not a Contribution.
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
@@ -4542,4 +4545,5 @@
    <string name="stk_cc_ss_to_ussd">SS request is modified to USSD request.</string>
    <string name="stk_cc_ss_to_ss">SS request is modified to new SS request.</string>

    <string name="permission">Permission</string>
</resources>
Loading