AppOpsManager.java revision a06de0f29b58df9246779cc4bfd8f06f7205ddb6
1a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn/* 2a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * Copyright (C) 2012 The Android Open Source Project 3a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * 4a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * you may not use this file except in compliance with the License. 6a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * You may obtain a copy of the License at 7a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * 8a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * 10a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * See the License for the specific language governing permissions and 14a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * limitations under the License. 15a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn */ 16a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 17a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackbornpackage android.app; 18a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 19a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackbornimport com.android.internal.app.IAppOpsService; 20a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 21a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackbornimport android.content.Context; 22a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackbornimport android.os.Process; 23a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackbornimport android.os.RemoteException; 24a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 25a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn/** @hide */ 26a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackbornpublic class AppOpsManager { 27a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn final Context mContext; 28a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn final IAppOpsService mService; 29a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 30a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int MODE_ALLOWED = 0; 31a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int MODE_IGNORED = 1; 32a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int MODE_ERRORED = 2; 33a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 34a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int OP_LOCATION = 0; 35a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int OP_GPS = 1; 36a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int OP_VIBRATE = 2; 37a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 38a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static String opToString(int op) { 39a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn switch (op) { 40a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn case OP_LOCATION: return "LOCATION"; 41a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn case OP_GPS: return "GPS"; 42a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn case OP_VIBRATE: return "VIBRATE"; 43a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn default: return "Unknown(" + op + ")"; 44a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 45a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 46a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 47a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public AppOpsManager(Context context, IAppOpsService service) { 48a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn mContext = context; 49a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn mService = service; 50a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 51a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 52a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int noteOp(int op, int uid, String packageName) { 53a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 54a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn int mode = mService.noteOperation(op, uid, packageName); 55a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (mode == MODE_ERRORED) { 56a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throw new SecurityException("Operation not allowed"); 57a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 58a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return mode; 59a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 60a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 61a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return MODE_IGNORED; 62a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 63a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 64a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int noteOpNoThrow(int op, int uid, String packageName) { 65a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 66a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return mService.noteOperation(op, uid, packageName); 67a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 68a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 69a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return MODE_IGNORED; 70a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 71a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 72a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int noteOp(int op) { 73a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return noteOp(op, Process.myUid(), mContext.getPackageName()); 74a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 75a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 76a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int startOp(int op, int uid, String packageName) { 77a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 78a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn int mode = mService.startOperation(op, uid, packageName); 79a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (mode == MODE_ERRORED) { 80a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn throw new SecurityException("Operation not allowed"); 81a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 82a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return mode; 83a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 84a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 85a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return MODE_IGNORED; 86a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 87a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 88a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int startOpNoThrow(int op, int uid, String packageName) { 89a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 90a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return mService.startOperation(op, uid, packageName); 91a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 92a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 93a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return MODE_IGNORED; 94a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 95a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 96a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public int startOp(int op) { 97a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn return startOp(op, Process.myUid(), mContext.getPackageName()); 98a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 99a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 100a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public void finishOp(int op, int uid, String packageName) { 101a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn try { 102a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn mService.finishOperation(op, uid, packageName); 103a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } catch (RemoteException e) { 104a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 105a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 106a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 107a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public void finishOp(int op) { 108a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn finishOp(op, Process.myUid(), mContext.getPackageName()); 109a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 110a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn} 111