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

Commit 0427c020 authored by Ajay Panicker's avatar Ajay Panicker Committed by Andre Eisenbach
Browse files

Make AVRCP encryption aware

AVRCP can't access the different media players while the user hasn't
unlocked the phone or if Bluetooth is turned on before the phone
has booted all the way.

Bug: 31966072
Change-Id: Id022e2a8068257885ddb06c5be3d4b04c026ac53
parent 310ff21b
Loading
Loading
Loading
Loading
+33 −6
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.os.UserManager;
import android.util.Log;
import android.view.KeyEvent;

@@ -182,6 +183,7 @@ public final class Avrcp {

    /* Broadcast receiver for device connections intent broadcasts */
    private final BroadcastReceiver mAvrcpReceiver = new AvrcpServiceBroadcastReceiver();
    private final BroadcastReceiver mBootReceiver = new AvrcpServiceBootReceiver();

    static {
        classInitNative();
@@ -240,6 +242,10 @@ public final class Avrcp {
        pkgFilter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
        pkgFilter.addDataScheme("package");
        context.registerReceiver(mAvrcpReceiver, pkgFilter);

        IntentFilter bootFilter = new IntentFilter();
        bootFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
        context.registerReceiver(mBootReceiver, bootFilter);
    }

    private void start() {
@@ -258,12 +264,16 @@ public final class Avrcp {
        /* create object to communicate with addressed player */
        mAddressedMediaPlayer = new AddressedMediaPlayer(mAvrcpMediaRsp);

        /* initialize BrowseMananger which manages Browse commands and response */
        mAvrcpBrowseManager = new AvrcpBrowseManager(mContext, mAvrcpMediaRsp);

        UserManager manager = UserManager.get(mContext);
        if (manager == null || manager.isUserUnlocked()) {
            if (DEBUG) Log.d(TAG, "User already unlocked, initializing player lists");
            /* initializing media player's list */
            buildBrowsablePlayersList();
            buildMediaPlayersList();

        /* initialize BrowseMananger which manages Browse commands and response */
        mAvrcpBrowseManager = new AvrcpBrowseManager(mContext, mAvrcpMediaRsp);
        }
    }

    public static Avrcp make(Context context) {
@@ -287,6 +297,7 @@ public final class Avrcp {
        mHandler = null;
        mMPLObj = null;
        mContext.unregisterReceiver(mAvrcpReceiver);
        mContext.unregisterReceiver(mBootReceiver);

        mAddressedMediaPlayer.cleanup();
        mAvrcpBrowseManager.cleanup();
@@ -1402,6 +1413,19 @@ public final class Avrcp {
        mHandler.sendMessage(msg);
    }

    private class AvrcpServiceBootReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
                if (DEBUG) Log.d(TAG, "Boot completed, initializing player lists");
                /* initializing media player's list */
                buildBrowsablePlayersList();
                buildMediaPlayersList();
            }
        }
    }

    private class AvrcpServiceBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
@@ -1443,6 +1467,7 @@ public final class Avrcp {
            if (isBrowsableListUpdated(packageName)) {
                // Rebuilding browsable players list
                buildBrowsablePlayersList();
                buildMediaPlayersList();
            }
        }
    }
@@ -1454,7 +1479,8 @@ public final class Avrcp {
        // getting the browsable media players list from package manager
        ArrayList<String> browsePlayersList = new ArrayList<String>();
        Intent intent = new Intent("android.media.browse.MediaBrowserService");
        List<ResolveInfo> resInfos = mPackageManager.queryIntentServices(intent, 0);
        List<ResolveInfo> resInfos = mPackageManager.queryIntentServices(intent,
                                         PackageManager.MATCH_ALL);
        for (ResolveInfo resolveInfo : resInfos) {
            browsePlayersList.add(resolveInfo.serviceInfo.packageName);
        }
@@ -1734,7 +1760,8 @@ public final class Avrcp {
        mBrowsePlayerInfoList.clear();

        Intent intent = new Intent(android.service.media.MediaBrowserService.SERVICE_INTERFACE);
        List<ResolveInfo> resInfos = mPackageManager.queryIntentServices(intent, 0);
        List<ResolveInfo> resInfos = mPackageManager.queryIntentServices(intent,
                                         PackageManager.MATCH_ALL);

        for (ResolveInfo resolveInfo : resInfos) {
            String displayableName = resolveInfo.loadLabel(mPackageManager).toString();