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

Commit 596f14a1 authored by Shashank Mittal's avatar Shashank Mittal Committed by Linux Build Service Account
Browse files

AppOPs: add delete ops for some operations

Delete operation is required to be seprated from modify
operation. Add delete ops for sms, mms, contacts, and
call log.

Change-Id: I19ca4757884ba31a05b403a092796cc03042d31c
parent e91c9174
Loading
Loading
Loading
Loading
+61 −1
Original line number Diff line number Diff line
@@ -233,7 +233,15 @@ public class AppOpsManager {
    /** @hide */
    public static final int OP_NFC_CHANGE = 54;
    /** @hide */
    public static final int _NUM_OP = 55;
    public static final int OP_DELETE_SMS = 55;
    /** @hide */
    public static final int OP_DELETE_MMS = 56;
    /** @hide */
    public static final int OP_DELETE_CONTACTS = 57;
    /** @hide */
    public static final int OP_DELETE_CALL_LOG = 58;
    /** @hide */
    public static final int _NUM_OP = 59;

    /** Access to coarse location information. */
    public static final String OPSTR_COARSE_LOCATION =
@@ -352,6 +360,14 @@ public class AppOpsManager {
            "android:boot_completed";
    private static final String OPSTR_NFC_CHANGE =
            "android:nfc_change";
    private static final String OPSTR_DELETE_SMS =
            "android:delete_sms";
    private static final String OPSTR_DELETE_MMS =
            "android:delete_mms";
    private static final String OPSTR_DELETE_CONTACTS =
            "android:delete_contacts";
    private static final String OPSTR_DELETE_CALL_LOG =
            "android:delete_call_log";

    /**
     * This maps each operation to the operation that serves as the
@@ -417,6 +433,10 @@ public class AppOpsManager {
            OP_WRITE_MMS,
            OP_BOOT_COMPLETED,
            OP_NFC_CHANGE,
            OP_DELETE_SMS,
            OP_DELETE_MMS,
            OP_DELETE_CONTACTS,
            OP_DELETE_CALL_LOG,
    };

    /**
@@ -479,6 +499,10 @@ public class AppOpsManager {
            null,
            null,
            null,
            null,
            null,
            null,
            null,
    };

    /**
@@ -541,6 +565,10 @@ public class AppOpsManager {
        OPSTR_WRITE_MMS,
        OPSTR_BOOT_COMPLETED,
        OPSTR_NFC_CHANGE,
        OPSTR_DELETE_SMS,
        OPSTR_DELETE_MMS,
        OPSTR_DELETE_CONTACTS,
        OPSTR_DELETE_CALL_LOG,
    };

    /**
@@ -603,6 +631,10 @@ public class AppOpsManager {
            "WRITE_MMS",
            "BOOT_COMPLETED",
            "NFC_CHANGE",
            "DELETE_SMS",
            "DELETE_MMS",
            "DELETE_CONTACTS",
            "DELETE_CALL_LOG",
    };

    /**
@@ -665,6 +697,10 @@ public class AppOpsManager {
            android.Manifest.permission.WRITE_SMS,
            android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
            android.Manifest.permission.NFC,
            android.Manifest.permission.WRITE_SMS,
            android.Manifest.permission.WRITE_SMS,
            android.Manifest.permission.WRITE_CONTACTS,
            android.Manifest.permission.WRITE_CALL_LOG,
    };

    /**
@@ -728,6 +764,10 @@ public class AppOpsManager {
            null, //WRITE_MMS
            null, //BOOT_COMPLETED
            null, //NFC_CHANGE
            null, //DELETE_SMS
            null, //DELETE_MMS
            null, //DELETE_CONTACTS
            null, //DELETE_CALL_LOG
    };

    /**
@@ -790,6 +830,10 @@ public class AppOpsManager {
            false, // WRITE_MMS
            false, // BOOT_COMPLETED
            false, // NFC_CHANGE
            false, //DELETE_SMS
            false, //DELETE_MMS
            false, //DELETE_CONTACTS
            false, //DELETE_CALL_LOG
    };

    /**
@@ -851,6 +895,10 @@ public class AppOpsManager {
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
    };

    /**
@@ -913,6 +961,10 @@ public class AppOpsManager {
            AppOpsManager.MODE_ASK,     // OP_WRITE_MMS
            AppOpsManager.MODE_ALLOWED, // OP_BOOT_COMPLETED
            AppOpsManager.MODE_ASK,     // OP_NFC_CHANGE
            AppOpsManager.MODE_ASK,     // OP_DELETE_SMS
            AppOpsManager.MODE_ASK,     // OP_DELETE_MMS
            AppOpsManager.MODE_ASK,     // OP_DELETE_CONTACTS
            AppOpsManager.MODE_ASK,     // OP_DELETE_CALL_LOG
    };

    /**
@@ -974,6 +1026,10 @@ public class AppOpsManager {
        true,     // OP_WRITE_MMS
        false,    // OP_BOOT_COMPLETED
        true,     // OP_NFC_CHANGE
        true,     // OP_DELETE_SMS
        true,     // OP_DELETE_MMS
        true,     // OP_DELETE_CONTACTS
        true,     // OP_DELETE_CALL_LOG
    };

    /**
@@ -1039,6 +1095,10 @@ public class AppOpsManager {
            false,     // OP_WRITE_MMS
            false,     // OP_BOOT_COMPLETED
            false,     // OP_NFC_CHANGE
            false,     // OP_DELETE_SMS
            false,     // OP_DELETE_MMS
            false,     // OP_DELETE_CONTACTS
            false,     // OP_DELETE_CALL_LOG
    };

    private static HashMap<String, Integer> sOpStrToOp = new HashMap<String, Integer>();
+29 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
 * Not a Contribution.
 *
 * Copyright (C) 2006 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -301,7 +304,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
        public int delete(String callingPkg, Uri uri, String selection, String[] selectionArgs) {
            validateIncomingUri(uri);
            uri = getUriWithoutUserId(uri);
            if (enforceWritePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
            if (enforceDeletePermission(callingPkg, uri) != AppOpsManager.MODE_ALLOWED) {
                return 0;
            }
            final String original = setCallingPackage(callingPkg);
@@ -457,6 +460,31 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
            }
            return AppOpsManager.MODE_ALLOWED;
        }

        private int enforceDeletePermission(String callingPkg, Uri uri) throws SecurityException {
            enforceWritePermissionInner(uri);
            if (mWriteOp != AppOpsManager.OP_NONE) {
                int op = mWriteOp;
                switch (mWriteOp) {
                case AppOpsManager.OP_WRITE_SMS:
                    op = AppOpsManager.OP_DELETE_SMS;
                    break;
                case AppOpsManager.OP_WRITE_MMS:
                    op = AppOpsManager.OP_DELETE_MMS;
                    break;
                case AppOpsManager.OP_WRITE_CONTACTS:
                    op = AppOpsManager.OP_DELETE_CONTACTS;
                    break;
                case AppOpsManager.OP_WRITE_CALL_LOG:
                    op = AppOpsManager.OP_DELETE_CALL_LOG;
                    break;
                default:
                    break;
                }
               mAppOpsManager.noteOp(op, Binder.getCallingUid(), callingPkg);
            }
            return AppOpsManager.MODE_ALLOWED;
        }
    }

    boolean checkUser(int pid, int uid, Context context) {
+4 −0
Original line number Diff line number Diff line
@@ -1961,5 +1961,9 @@
        <item>Trying to write MMS</item>
        <item>Trying to start at bootup</item>
        <item>Trying to turn on/off NFC</item>
        <item>Trying to delete SMS</item>
        <item>Trying to delete MMS</item>
        <item>Trying to delete contacts</item>
        <item>Trying to delete call log</item>
    </string-array>
</resources>