1 /* 2 * Copyright (C) 2016 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 com.android.server.wifi.util; 18 19 import android.Manifest; 20 import android.app.ActivityManager; 21 import android.app.AppGlobals; 22 import android.app.admin.DevicePolicyManagerInternal; 23 import android.content.Context; 24 import android.os.RemoteException; 25 import android.os.UserHandle; 26 27 import com.android.server.LocalServices; 28 29 import java.util.List; 30 31 /** 32 * A wifi permissions dependency class to wrap around external 33 * calls to static methods that enable testing. 34 */ 35 public class WifiPermissionsWrapper { 36 private static final String TAG = "WifiPermissionsWrapper"; 37 private final Context mContext; 38 WifiPermissionsWrapper(Context context)39 public WifiPermissionsWrapper(Context context) { 40 mContext = context; 41 } 42 getCurrentUser()43 public int getCurrentUser() { 44 return ActivityManager.getCurrentUser(); 45 } 46 47 /** 48 * Returns the user ID corresponding to the UID 49 * @param uid Calling Uid 50 * @return userid Corresponding user id 51 */ getCallingUserId(int uid)52 public int getCallingUserId(int uid) { 53 return UserHandle.getUserId(uid); 54 } 55 56 /** 57 * Get the PackageName of the top running task 58 * @return String corresponding to the package 59 */ getTopPkgName()60 public String getTopPkgName() { 61 ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); 62 String topTaskPkg = " "; 63 List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); 64 if (!tasks.isEmpty()) { 65 return tasks.get(0).topActivity.getPackageName(); 66 } 67 return topTaskPkg; 68 } 69 70 /** 71 * API is wrap around ActivityManager class to 72 * get location permissions for a certain UID 73 * @param: Manifest permission string 74 * @param: Uid to get permission for 75 * @return: Permissions setting 76 */ getUidPermission(String permissionType, int uid)77 public int getUidPermission(String permissionType, int uid) { 78 return ActivityManager.checkUidPermission(permissionType, uid); 79 } 80 81 /** 82 * Gets the local service {link@ DevicePolicyManagerInternal}, can be null 83 */ getDevicePolicyManagerInternal()84 public DevicePolicyManagerInternal getDevicePolicyManagerInternal() { 85 return LocalServices.getService(DevicePolicyManagerInternal.class); 86 } 87 88 /** 89 * Determines if the caller has the override wifi config permission. 90 * 91 * @param uid to check the permission for 92 * @return int representation of success or denied 93 * @throws RemoteException 94 */ getOverrideWifiConfigPermission(int uid)95 public int getOverrideWifiConfigPermission(int uid) throws RemoteException { 96 return AppGlobals.getPackageManager().checkUidPermission( 97 android.Manifest.permission.OVERRIDE_WIFI_CONFIG, uid); 98 } 99 100 /** 101 * Determines if the caller has the change wifi config permission. 102 * 103 * @param uid to check the permission for 104 * @return int representation of success or denied 105 * @throws RemoteException 106 */ getChangeWifiConfigPermission(int uid)107 public int getChangeWifiConfigPermission(int uid) throws RemoteException { 108 return AppGlobals.getPackageManager().checkUidPermission( 109 Manifest.permission.CHANGE_WIFI_STATE, uid); 110 } 111 112 /** 113 * Determines if the caller has the access wifi state permission. 114 * 115 * @param uid to check the permission for 116 * @return int representation of success or denied 117 * @throws RemoteException 118 */ getAccessWifiStatePermission(int uid)119 public int getAccessWifiStatePermission(int uid) throws RemoteException { 120 return AppGlobals.getPackageManager().checkUidPermission( 121 Manifest.permission.ACCESS_WIFI_STATE, uid); 122 } 123 124 /** 125 * Determines if the caller has local mac address permission. 126 * 127 * @param uid to check the permission for 128 * @return int representation of success or denied 129 * @throws RemoteException 130 */ getLocalMacAddressPermission(int uid)131 public int getLocalMacAddressPermission(int uid) throws RemoteException { 132 return AppGlobals.getPackageManager().checkUidPermission( 133 Manifest.permission.LOCAL_MAC_ADDRESS, uid); 134 } 135 } 136