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

Commit 20946538 authored by Xin Li's avatar Xin Li
Browse files

Merge Android R

Bug: 168057903
Merged-In: If51a5ba0ea5f35366841ffb44a10892da68905e4
Change-Id: Iba399ffc79b81d66812f887f5b0bffa867c78d0f
parents 7397e3b9 5019c313
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -70,6 +70,7 @@
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/>
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
    <uses-permission android:name="android.permission.MANAGE_COMPANION_DEVICES"/>


    <uses-sdk android:minSdkVersion="14"/>
    <uses-sdk android:minSdkVersion="14"/>


+3 −0
Original line number Original line Diff line number Diff line
@@ -114,4 +114,7 @@
    <!-- Flag whether or not to keep polling AG with CLCC for call information every 2 seconds -->
    <!-- Flag whether or not to keep polling AG with CLCC for call information every 2 seconds -->
    <bool name="hfp_clcc_poll_during_call">true</bool>
    <bool name="hfp_clcc_poll_during_call">true</bool>


    <!-- Package that is providing the exposure notification service -->
    <string name="exposure_notification_package">com.google.android.gms</string>

</resources>
</resources>
+10 −1
Original line number Original line Diff line number Diff line
@@ -485,6 +485,15 @@ public final class Utils {
                        == PackageManager.PERMISSION_GRANTED;
                        == PackageManager.PERMISSION_GRANTED;
    }
    }


    /**
     * Returns true if the caller holds RADIO_SCAN_WITHOUT_LOCATION
     */
    public static boolean checkCallerHasScanWithoutLocationPermission(Context context) {
        return context.checkCallingOrSelfPermission(
                android.Manifest.permission.RADIO_SCAN_WITHOUT_LOCATION)
                == PackageManager.PERMISSION_GRANTED;
    }

    public static boolean isQApp(Context context, String pkgName) {
    public static boolean isQApp(Context context, String pkgName) {
        try {
        try {
            return context.getPackageManager().getApplicationInfo(pkgName, 0).targetSdkVersion
            return context.getPackageManager().getApplicationInfo(pkgName, 0).targetSdkVersion
@@ -497,7 +506,7 @@ public final class Utils {


    private static boolean isAppOppAllowed(AppOpsManager appOps, String op, String callingPackage,
    private static boolean isAppOppAllowed(AppOpsManager appOps, String op, String callingPackage,
            @NonNull String callingFeatureId) {
            @NonNull String callingFeatureId) {
        return appOps.noteOp(op, Binder.getCallingUid(), callingPackage)
        return appOps.noteOp(op, Binder.getCallingUid(), callingPackage, callingFeatureId, null)
                == AppOpsManager.MODE_ALLOWED;
                == AppOpsManager.MODE_ALLOWED;
    }
    }


+0 −11
Original line number Original line Diff line number Diff line
@@ -555,14 +555,7 @@ public class A2dpService extends ProfileService {
            updateAndBroadcastActiveDevice(device);
            updateAndBroadcastActiveDevice(device);
            // Make sure the Audio Manager knows the previous Active device is disconnected,
            // Make sure the Audio Manager knows the previous Active device is disconnected,
            // and the new Active device is connected.
            // and the new Active device is connected.
            // Also, mute and unmute the output during the switch to avoid audio glitches.
            boolean wasMuted = false;
            if (previousActiveDevice != null) {
            if (previousActiveDevice != null) {
                if (!mAudioManager.isStreamMute(AudioManager.STREAM_MUSIC)) {
                    mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                            AudioManager.ADJUST_MUTE, AudioManager.FLAG_BLUETOOTH_ABS_VOLUME);
                    wasMuted = true;
                }
                mAudioManager.setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(
                mAudioManager.setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(
                        previousActiveDevice, BluetoothProfile.STATE_DISCONNECTED,
                        previousActiveDevice, BluetoothProfile.STATE_DISCONNECTED,
                        BluetoothProfile.A2DP, true, -1);
                        BluetoothProfile.A2DP, true, -1);
@@ -598,10 +591,6 @@ public class A2dpService extends ProfileService {
            // change, so the Audio Service can reset accordingly the audio
            // change, so the Audio Service can reset accordingly the audio
            // feeding parameters in the Audio HAL to the Bluetooth stack.
            // feeding parameters in the Audio HAL to the Bluetooth stack.
            mAudioManager.handleBluetoothA2dpDeviceConfigChange(newActiveDevice);
            mAudioManager.handleBluetoothA2dpDeviceConfigChange(newActiveDevice);
            if (wasMuted) {
                mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_UNMUTE, AudioManager.FLAG_BLUETOOTH_ABS_VOLUME);
            }
        }
        }
        return true;
        return true;
    }
    }
+22 −0
Original line number Original line Diff line number Diff line
@@ -182,6 +182,7 @@ class AdapterProperties {
    AdapterProperties(AdapterService service) {
    AdapterProperties(AdapterService service) {
        mService = service;
        mService = service;
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        invalidateBluetoothCaches();
    }
    }


    public void init(RemoteDevices remoteDevices) {
    public void init(RemoteDevices remoteDevices) {
@@ -223,6 +224,7 @@ class AdapterProperties {
        filter.addAction(BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED);
        filter.addAction(BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED);
        mService.registerReceiver(mReceiver, filter);
        mService.registerReceiver(mReceiver, filter);
        mReceiverRegistered = true;
        mReceiverRegistered = true;
        invalidateBluetoothCaches();
    }
    }


    public void cleanup() {
    public void cleanup() {
@@ -234,6 +236,22 @@ class AdapterProperties {
        }
        }
        mService = null;
        mService = null;
        mBondedDevices.clear();
        mBondedDevices.clear();
        invalidateBluetoothCaches();
    }

    private static void invalidateGetProfileConnectionStateCache() {
        BluetoothAdapter.invalidateGetProfileConnectionStateCache();
    }
    private static void invalidateIsOffloadedFilteringSupportedCache() {
        BluetoothAdapter.invalidateIsOffloadedFilteringSupportedCache();
    }
    private static void invalidateGetBondStateCache() {
        BluetoothDevice.invalidateBluetoothGetBondStateCache();
    }
    private static void invalidateBluetoothCaches() {
        invalidateGetProfileConnectionStateCache();
        invalidateIsOffloadedFilteringSupportedCache();
        invalidateGetBondStateCache();
    }
    }


    @Override
    @Override
@@ -538,6 +556,7 @@ class AdapterProperties {
                    debugLog("Failed to remove device: " + device);
                    debugLog("Failed to remove device: " + device);
                }
                }
            }
            }
            invalidateGetBondStateCache();
        } catch (Exception ee) {
        } catch (Exception ee) {
            Log.w(TAG, "onBondStateChanged: Exception ", ee);
            Log.w(TAG, "onBondStateChanged: Exception ", ee);
        }
        }
@@ -765,6 +784,7 @@ class AdapterProperties {


        if (update) {
        if (update) {
            mProfileConnectionState.put(profile, new Pair<Integer, Integer>(newHashState, numDev));
            mProfileConnectionState.put(profile, new Pair<Integer, Integer>(newHashState, numDev));
            invalidateGetProfileConnectionStateCache();
        }
        }
    }
    }


@@ -890,6 +910,7 @@ class AdapterProperties {
                + " mIsLeExtendedAdvertisingSupported = " + mIsLeExtendedAdvertisingSupported
                + " mIsLeExtendedAdvertisingSupported = " + mIsLeExtendedAdvertisingSupported
                + " mIsLePeriodicAdvertisingSupported = " + mIsLePeriodicAdvertisingSupported
                + " mIsLePeriodicAdvertisingSupported = " + mIsLePeriodicAdvertisingSupported
                + " mLeMaximumAdvertisingDataLength = " + mLeMaximumAdvertisingDataLength);
                + " mLeMaximumAdvertisingDataLength = " + mLeMaximumAdvertisingDataLength);
        invalidateIsOffloadedFilteringSupportedCache();
    }
    }


    void onBluetoothReady() {
    void onBluetoothReady() {
@@ -900,6 +921,7 @@ class AdapterProperties {
            // Reset adapter and profile connection states
            // Reset adapter and profile connection states
            setConnectionState(BluetoothAdapter.STATE_DISCONNECTED);
            setConnectionState(BluetoothAdapter.STATE_DISCONNECTED);
            mProfileConnectionState.clear();
            mProfileConnectionState.clear();
            invalidateGetProfileConnectionStateCache();
            mProfilesConnected = 0;
            mProfilesConnected = 0;
            mProfilesConnecting = 0;
            mProfilesConnecting = 0;
            mProfilesDisconnecting = 0;
            mProfilesDisconnecting = 0;
Loading