• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app;
18 
19 import android.annotation.NonNull;
20 import android.util.SparseIntArray;
21 
22 import com.android.internal.util.function.QuadFunction;
23 import com.android.internal.util.function.TriFunction;
24 
25 /**
26  * App ops service local interface.
27  *
28  * @hide Only for use within the system server.
29  */
30 public abstract class AppOpsManagerInternal {
31     /** Interface to override app ops checks via composition */
32     public interface CheckOpsDelegate {
33         /**
34          * Allows overriding check operation behavior.
35          *
36          * @param code The op code to check.
37          * @param uid The UID for which to check.
38          * @param packageName The package for which to check.
39          * @param superImpl The super implementation.
40          * @param raw Whether to check the raw op i.e. not interpret the mode based on UID state.
41          * @return The app op check result.
42          */
checkOperation(int code, int uid, String packageName, boolean raw, QuadFunction<Integer, Integer, String, Boolean, Integer> superImpl)43         int checkOperation(int code, int uid, String packageName, boolean raw,
44                 QuadFunction<Integer, Integer, String, Boolean, Integer> superImpl);
45 
46         /**
47          * Allows overriding check audio operation behavior.
48          *
49          * @param code The op code to check.
50          * @param usage The audio op usage.
51          * @param uid The UID for which to check.
52          * @param packageName The package for which to check.
53          * @param superImpl The super implementation.
54          * @return The app op check result.
55          */
checkAudioOperation(int code, int usage, int uid, String packageName, QuadFunction<Integer, Integer, Integer, String, Integer> superImpl)56         int checkAudioOperation(int code, int usage, int uid, String packageName,
57                 QuadFunction<Integer, Integer, Integer, String, Integer> superImpl);
58 
59         /**
60          * Allows overriding note operation behavior.
61          *
62          * @param code The op code to note.
63          * @param uid The UID for which to note.
64          * @param packageName The package for which to note.
65          * @param superImpl The super implementation.
66          * @return The app op note result.
67          */
noteOperation(int code, int uid, String packageName, TriFunction<Integer, Integer, String, Integer> superImpl)68         int noteOperation(int code, int uid, String packageName,
69                 TriFunction<Integer, Integer, String, Integer> superImpl);
70     }
71 
72     /**
73      * Set the currently configured device and profile owners.  Specifies the package uid (value)
74      * that has been configured for each user (key) that has one.  These will be allowed privileged
75      * access to app ops for their user.
76      */
setDeviceAndProfileOwners(SparseIntArray owners)77     public abstract void setDeviceAndProfileOwners(SparseIntArray owners);
78 
79     /**
80      * Sets the app-ops mode for a certain app-op and uid.
81      *
82      * <p>Similar as {@link AppOpsManager#setUidMode} but does not require the package manager to be
83      * working. Hence this can be used very early during boot.
84      *
85      * <p>Only for internal callers. Does <u>not</u> verify that package name belongs to uid.
86      *
87      * @param code The op code to set.
88      * @param uid The UID for which to set.
89      * @param mode The new mode to set.
90      */
setUidMode(int code, int uid, int mode)91     public abstract void setUidMode(int code, int uid, int mode);
92 
93     /**
94      * Set all {@link #setMode (package) modes} for this uid to the default value.
95      *
96      * @param code The app-op
97      * @param uid The uid
98      */
setAllPkgModesToDefault(int code, int uid)99     public abstract void setAllPkgModesToDefault(int code, int uid);
100 
101     /**
102      * Get the (raw) mode of an app-op.
103      *
104      * <p>Does <u>not</u> verify that package belongs to uid. The caller needs to do that.
105      *
106      * @param code The code of the op
107      * @param uid The uid of the package the op belongs to
108      * @param packageName The package the op belongs to
109      *
110      * @return The mode of the op
111      */
checkOperationUnchecked(int code, int uid, @NonNull String packageName)112     public abstract @AppOpsManager.Mode int checkOperationUnchecked(int code, int uid,
113             @NonNull String packageName);
114 }
115