/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.wifi.util; import android.Manifest; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.admin.DevicePolicyManagerInternal; import android.content.Context; import android.os.RemoteException; import android.os.UserHandle; import com.android.server.LocalServices; import java.util.List; /** * A wifi permissions dependency class to wrap around external * calls to static methods that enable testing. */ public class WifiPermissionsWrapper { private static final String TAG = "WifiPermissionsWrapper"; private final Context mContext; public WifiPermissionsWrapper(Context context) { mContext = context; } public int getCurrentUser() { return ActivityManager.getCurrentUser(); } /** * Returns the user ID corresponding to the UID * @param uid Calling Uid * @return userid Corresponding user id */ public int getCallingUserId(int uid) { return UserHandle.getUserId(uid); } /** * Get the PackageName of the top running task * @return String corresponding to the package */ public String getTopPkgName() { ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); String topTaskPkg = " "; List tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { return tasks.get(0).topActivity.getPackageName(); } return topTaskPkg; } /** * API is wrap around ActivityManager class to * get location permissions for a certain UID * @param: Manifest permission string * @param: Uid to get permission for * @return: Permissions setting */ public int getUidPermission(String permissionType, int uid) { return ActivityManager.checkUidPermission(permissionType, uid); } /** * Gets the local service {link@ DevicePolicyManagerInternal}, can be null */ public DevicePolicyManagerInternal getDevicePolicyManagerInternal() { return LocalServices.getService(DevicePolicyManagerInternal.class); } /** * Determines if the caller has the override wifi config permission. * * @param uid to check the permission for * @return int representation of success or denied * @throws RemoteException */ public int getOverrideWifiConfigPermission(int uid) throws RemoteException { return AppGlobals.getPackageManager().checkUidPermission( android.Manifest.permission.OVERRIDE_WIFI_CONFIG, uid); } /** * Determines if the caller has the change wifi config permission. * * @param uid to check the permission for * @return int representation of success or denied * @throws RemoteException */ public int getChangeWifiConfigPermission(int uid) throws RemoteException { return AppGlobals.getPackageManager().checkUidPermission( Manifest.permission.CHANGE_WIFI_STATE, uid); } /** * Determines if the caller has the access wifi state permission. * * @param uid to check the permission for * @return int representation of success or denied * @throws RemoteException */ public int getAccessWifiStatePermission(int uid) throws RemoteException { return AppGlobals.getPackageManager().checkUidPermission( Manifest.permission.ACCESS_WIFI_STATE, uid); } /** * Determines if the caller has local mac address permission. * * @param uid to check the permission for * @return int representation of success or denied * @throws RemoteException */ public int getLocalMacAddressPermission(int uid) throws RemoteException { return AppGlobals.getPackageManager().checkUidPermission( Manifest.permission.LOCAL_MAC_ADDRESS, uid); } }