Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0cc0222b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Really resolve merge conflicts of 903d6414 to nyc-mr2-dev-plus-aosp"...

Merge "Really resolve merge conflicts of 903d6414 to nyc-mr2-dev-plus-aosp" into nyc-mr2-dev-plus-aosp
parents 4418dbb2 d97e21c0
Loading
Loading
Loading
Loading
+50 −7
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.ServiceConnection;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.database.ContentObserver;
@@ -155,6 +156,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
    private final Map <Integer, ProfileServiceConnections> mProfileServices =
    private final Map <Integer, ProfileServiceConnections> mProfileServices =
            new HashMap <Integer, ProfileServiceConnections>();
            new HashMap <Integer, ProfileServiceConnections>();


    private final boolean mPermissionReviewRequired;

    private void registerForAirplaneMode(IntentFilter filter) {
    private void registerForAirplaneMode(IntentFilter filter) {
        final ContentResolver resolver = mContext.getContentResolver();
        final ContentResolver resolver = mContext.getContentResolver();
        final String airplaneModeRadios = Settings.Global.getString(resolver,
        final String airplaneModeRadios = Settings.Global.getString(resolver,
@@ -263,6 +266,11 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
        mHandler = new BluetoothHandler(IoThread.get().getLooper());
        mHandler = new BluetoothHandler(IoThread.get().getLooper());


        mContext = context;
        mContext = context;

        mPermissionReviewRequired = Build.PERMISSIONS_REVIEW_REQUIRED
                    || context.getResources().getBoolean(
                com.android.internal.R.bool.config_permissionReviewRequired);

        mBluetooth = null;
        mBluetooth = null;
        mBluetoothBinder = null;
        mBluetoothBinder = null;
        mBluetoothGatt = null;
        mBluetoothGatt = null;
@@ -717,16 +725,26 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
        return true;
        return true;
    }
    }


    public boolean disable(boolean persist) {
    public boolean disable(String packageName, boolean persist) throws RemoteException {
        mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
        final int callingUid = Binder.getCallingUid();
                                                "Need BLUETOOTH ADMIN permissicacheNameAndAddresson");
        final boolean callerSystem = UserHandle.getAppId(callingUid) == Process.SYSTEM_UID;


        if ((Binder.getCallingUid() != Process.SYSTEM_UID) &&
        if (!callerSystem) {
            (!checkIfCallerIsForegroundUser())) {
            if (!checkIfCallerIsForegroundUser()) {
                Slog.w(TAG, "disable(): not allowed for non-active and non system user");
                Slog.w(TAG, "disable(): not allowed for non-active and non system user");
                return false;
                return false;
            }
            }


            mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
                    "Need BLUETOOTH ADMIN permission");

            if (isEnabled() && mPermissionReviewRequired
                    && startConsentUiIfNeeded(packageName, callingUid,
                            BluetoothAdapter.ACTION_REQUEST_DISABLE)) {
                return false;
            }
        }

        if (DBG) {
        if (DBG) {
            Slog.d(TAG,"disable(): mBluetooth = " + mBluetooth +
            Slog.d(TAG,"disable(): mBluetooth = " + mBluetooth +
                " mBinding = " + mBinding);
                " mBinding = " + mBinding);
@@ -745,6 +763,31 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
        return true;
        return true;
    }
    }


    private boolean startConsentUiIfNeeded(String packageName,
            int callingUid, String intentAction) throws RemoteException {
        try {
            // Validate the package only if we are going to use it
            ApplicationInfo applicationInfo = mContext.getPackageManager()
                    .getApplicationInfoAsUser(packageName,
                            PackageManager.MATCH_DEBUG_TRIAGED_MISSING,
                            UserHandle.getUserId(callingUid));
            if (applicationInfo.uid != callingUid) {
                throw new SecurityException("Package " + callingUid
                        + " not in uid " + callingUid);
            }

            // Legacy apps in permission review mode trigger a user prompt
            if (applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) {
                Intent intent = new Intent(intentAction);
                mContext.startActivity(intent);
                return true;
            }
        } catch (PackageManager.NameNotFoundException e) {
            throw new RemoteException(e.getMessage());
        }
        return false;
    }

    public void unbindAndFinish() {
    public void unbindAndFinish() {
        if (DBG) {
        if (DBG) {
            Slog.d(TAG,"unbindAndFinish(): " + mBluetooth +
            Slog.d(TAG,"unbindAndFinish(): " + mBluetooth +