标签:info style proc not oca set lob enc new
Bluetooth
+++ b/frameworks/base/core/java/com/mediatek/cta/CtaUtils.java @@ -14,6 +14,7 @@ import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.IActivityManager; import android.content.Context; +import android.content.pm.ApplicationInfo;//mh.add bt import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -83,7 +84,7 @@ public class CtaUtils { new String[CtaPermissions.CTA_ADDED_PERMISSION_GROUPS.size()]); } - private static String getCallingPkgName(int pid, int uid) { + public static String getCallingPkgName(int pid, int uid) { IActivityManager am = ActivityManagerNative.getDefault(); List runningProcesses = null; try { @@ -104,6 +105,24 @@ public class CtaUtils { } return null; } + + public static boolean isSystemApp(Context context, String packageName) { + PackageManager pm = context.getPackageManager(); + boolean isSystemApp = false; + int uid = Binder.getCallingUid(); + int userId = UserHandle.getUserId(uid); + try { + ApplicationInfo applicationInfo + = pm.getApplicationInfoAsUser(packageName, 0 /* no flags */, userId); + if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0 + || (applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { + isSystemApp = true; + } + } catch (PackageManager.NameNotFoundException e) { + Slog.d(TAG, "isSystemApp is false for NameNotFoundException= " + e); + } + return isSystemApp; + }
+++ b/frameworks/base/services/core/java/com/android/server/BluetoothManagerService.java @@ -69,6 +69,7 @@ import java.util.NoSuchElementException; import android.os.SystemProperties; /// M: CTA requirement - permission control @{ +import android.content.ActivityNotFoundException; import com.mediatek.cta.CtaUtils; ///@} @@ -817,8 +818,19 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH ADMIN permission"); /// M: Permission check for CTA requirement @{ - CtaUtils.enforceCheckPermission(com.mediatek.Manifest.permission.CTA_ENABLE_BT, - "Enable bluetooth"); + /*CtaUtils.enforceCheckPermission(com.mediatek.Manifest.permission.CTA_ENABLE_BT, + "Enable bluetooth");*/ + int callingUid = Binder.getCallingUid(); + int callingPid = Binder.getCallingPid(); + final boolean callerSystem = UserHandle.getAppId(callingUid) == Process.SYSTEM_UID; + if (!callerSystem) { + String packageName = CtaUtils.getCallingPkgName(callingPid, callingUid); + if (!isEnabled() && CtaUtils.isCtaSupported() && !CtaUtils.isSystemApp(mContext, + packageName) && startConsentUiIfNeeded(packageName, callingUid, + BluetoothAdapter.ACTION_REQUEST_ENABLE)) { + return false; + } + } ///@} if (DBG) { Slog.d(TAG,"enable(): mBluetooth =" + mBluetooth + @@ -834,6 +846,24 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (DBG) Slog.d(TAG, "enable returning"); return true; } + + /// M: Permission check for CTA requirement + private boolean startConsentUiIfNeeded(String packageName, + int callingUid, String intentAction) { + Intent intent = new Intent(intentAction); + intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); + Slog.e(TAG, "menghua packageName:" + packageName); + intent.setFlags( + Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + try { + mContext.startActivity(intent); + } catch (ActivityNotFoundException e) { + // Shouldn‘t happen + Slog.e(TAG, "Intent to handle action " + intentAction + " missing"); + return false; + } + return true; + } public boolean disable(boolean persist) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, (END)
+++ b/packages/apps/Settings/src/com/android/settings/bluetooth/RequestPermissionActivity.java @@ -75,6 +75,8 @@ public class RequestPermissionActivity extends Activity implements private boolean mUserConfirmed; private AlertDialog mDialog;
+ private String pkgName;//mh.add private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @@ -132,6 +134,7 @@ public class RequestPermissionActivity extends Activity implements intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); if (mEnableOnly) { intent.setAction(RequestPermissionHelperActivity.ACTION_INTERNAL_REQUEST_BT_ON); + intent.putExtra(Intent.EXTRA_PACKAGE_NAME, pkgName);//mh.add } else { intent.setAction(RequestPermissionHelperActivity. ACTION_INTERNAL_REQUEST_BT_ON_AND_DISCOVERABLE); @@ -266,6 +269,8 @@ public class RequestPermissionActivity extends Activity implements private boolean parseIntent() { Intent intent = getIntent(); if (intent != null && intent.getAction().equals(BluetoothAdapter.ACTION_REQUEST_ENABLE)) { + pkgName = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME);//mh.add + Log.i(TAG,"menghua pkgName:"+pkgName); mEnableOnly = true; } else if (intent != null && intent.getAction().equals(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE)) {
+++ b/packages/apps/Settings/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java @@ -27,7 +27,11 @@ import com.android.internal.app.AlertController; import com.android.settings.R; import com.android.settingslib.bluetooth.LocalBluetoothAdapter; import com.android.settingslib.bluetooth.LocalBluetoothManager; - +//mh.add +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.text.TextUtils; +//mh.end private boolean mEnableOnly; + private CharSequence appName;//mh.add @Override protected void onCreate(Bundle savedInstanceState) { @@ -73,7 +79,12 @@ public class RequestPermissionHelperActivity extends AlertActivity implements final AlertController.AlertParams p = mAlertParams; if (mEnableOnly) { - p.mMessage = getString(R.string.bluetooth_ask_enablement); + if(appName == null){ + p.mMessage = getString(R.string.bluetooth_ask_enablement);//mh.modify + }else { + p.mMessage = appName + getString(R.string.bluetooth_ask_enablement_joya);//mh.modify + } } else { if (mTimeout == BluetoothDiscoverableEnabler.DISCOVERABLE_TIMEOUT_NEVER) { p.mMessage = getString(R.string.bluetooth_ask_enablement_and_lasting_discovery); @@ -133,6 +144,23 @@ public class RequestPermissionHelperActivity extends AlertActivity implements private boolean parseIntent() { Intent intent = getIntent(); if (intent != null && intent.getAction().equals(ACTION_INTERNAL_REQUEST_BT_ON)) { + //mh.add @{ + String pkgName = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME); + + if(pkgName != null){ + try { + ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(pkgName, 0); + appName = applicationInfo.loadSafeLabel(getPackageManager()); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Couldn‘t find app with package name " + pkgName); + finish(); + return false; + } + } + + Log.i(TAG,"menghua appName:"+appName); + //mh.end @} mEnableOnly = true; } else if (intent != null && intent.getAction().equals(ACTION_INTERNAL_REQUEST_BT_ON_AND_DISCOVERABLE)) {
+++ b/packages/apps/Settings/res/values/strings.xml @@ -268,6 +268,9 @@ <!-- This string asks the user whether or not to allow an app to enable bluetooth. [CHAR LIMIT=100] --> <string name="bluetooth_ask_enablement">An app wants to turn Bluetooth ON for this device.</string> + + <!-- mh --> + <string name="bluetooth_ask_enablement_joya">wants to turn Bluetooth ON for this device.</string>
Come on, China! Come on, Wuhan!
标签:info style proc not oca set lob enc new
原文地址:https://www.cnblogs.com/copyworker/p/12378301.html