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

Commit 2e552331 authored by My Name's avatar My Name Committed by Hieu Dang
Browse files

Show Bluetooth dialog in a specific case

If the application that initiate the bonding with
BluetoothDevice#createBond is in foreground, then should dialog only
instead of showing the notification & dialog

Bug: 175931562
Tag: #refactor
Test: manual
Change-Id: I3673a0b58cbf9caabf62c951b84b49e17cfb13b8
parent b0ddc183
Loading
Loading
Loading
Loading
+1 −3
Original line number Original line Diff line number Diff line
@@ -50,10 +50,8 @@ public final class BluetoothPairingRequest extends BroadcastReceiver {
            PowerManager powerManager = context.getSystemService(PowerManager.class);
            PowerManager powerManager = context.getSystemService(PowerManager.class);
            int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
            int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
                    BluetoothDevice.ERROR);
                    BluetoothDevice.ERROR);
            String deviceAddress = device != null ? device.getAddress() : null;
            String deviceName = device != null ? device.getName() : null;
            boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
            boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
                    context, deviceAddress, deviceName);
                    context, device);


            // Skips consent pairing dialog if the device was recently associated with CDM
            // Skips consent pairing dialog if the device was recently associated with CDM
            if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
            if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
+1 −3
Original line number Original line Diff line number Diff line
@@ -108,8 +108,6 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
                                            mRequestType);
                                            mRequestType);
            connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
            connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);


            String deviceAddress = mDevice != null ? mDevice.getAddress() : null;
            String deviceName = mDevice != null ? mDevice.getName() : null;
            String title = null;
            String title = null;
            String message = null;
            String message = null;
            PowerManager powerManager =
            PowerManager powerManager =
@@ -117,7 +115,7 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {


            if (powerManager.isScreenOn()
            if (powerManager.isScreenOn()
                    && LocalBluetoothPreferences.shouldShowDialogInForeground(
                    && LocalBluetoothPreferences.shouldShowDialogInForeground(
                            context, deviceAddress, deviceName)) {
                            context, mDevice)) {
                context.startActivity(connectionAccessIntent);
                context.startActivity(connectionAccessIntent);
            } else {
            } else {
                // Put up a notification that leads to the dialog
                // Put up a notification that leads to the dialog
+20 −2
Original line number Original line Diff line number Diff line
@@ -16,7 +16,10 @@


package com.android.settings.bluetooth;
package com.android.settings.bluetooth;


import android.annotation.Nullable;
import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Configuration;
@@ -57,8 +60,9 @@ final class LocalBluetoothPreferences {
                KEY_DISCOVERABLE_END_TIMESTAMP, 0);
                KEY_DISCOVERABLE_END_TIMESTAMP, 0);
    }
    }


    static boolean shouldShowDialogInForeground(Context context,
    static boolean shouldShowDialogInForeground(Context context, @Nullable BluetoothDevice device) {
            String deviceAddress, String deviceName) {
        String deviceAddress = device != null ? device.getAddress() : null;
        String deviceName = device != null ? device.getName() : null;
        LocalBluetoothManager manager = Utils.getLocalBtManager(context);
        LocalBluetoothManager manager = Utils.getLocalBtManager(context);
        if (manager == null) {
        if (manager == null) {
            if (DEBUG) Log.v(TAG, "manager == null - do not show dialog.");
            if (DEBUG) Log.v(TAG, "manager == null - do not show dialog.");
@@ -126,6 +130,20 @@ final class LocalBluetoothPreferences {
            }
            }
        }
        }


        if (device != null) {
            ActivityManager activityManager = context.getSystemService(ActivityManager.class);
            String packageName = device.getCreateBondCaller();

            if (packageName != null && activityManager.getPackageImportance(packageName)
                    == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                if (DEBUG) {
                    Log.v(TAG, "showing dialog because the initiating application "
                            + "is in foreground");
                }
                return true;
            }
        }

        if (DEBUG) Log.v(TAG, "Found no reason to show the dialog - do not show dialog.");
        if (DEBUG) Log.v(TAG, "Found no reason to show the dialog - do not show dialog.");
        return false;
        return false;
    }
    }