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

Commit 56ed26e3 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Move media player list management to Audioservice"

parents 9255e464 31ec08d1
Loading
Loading
Loading
Loading
+14 −81
Original line number Diff line number Diff line
@@ -67,7 +67,6 @@ public class AudioManager {
    private final Binder mToken = new Binder();
    private static String TAG = "AudioManager";
    AudioPortEventHandler mAudioPortEventHandler;
    private static ArrayList<MediaPlayerInfo> mMediaPlayers;
    /**
     * Broadcast intent, a hint for applications that audio is about to become
     * 'noisy' due to a change in audio outputs. For example, this intent may
@@ -619,8 +618,6 @@ public class AudioManager {
        mAudioPortEventHandler = new AudioPortEventHandler(this);
        mUseFixedVolume = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_useFixedVolume);
        mMediaPlayers = new ArrayList<MediaPlayerInfo>(1);

    }

    private static IAudioService getService()
@@ -2438,24 +2435,6 @@ public class AudioManager {
    //====================================================================
    // Remote Control

    private class MediaPlayerInfo {
        private String mPackageName;
        private boolean mIsfocussed;
        public MediaPlayerInfo(String packageName, boolean isfocussed) {
            mPackageName = packageName;
            mIsfocussed = isfocussed;
        }
        public boolean isFocussed() {
            return mIsfocussed;
        }
        public void setFocus(boolean focus) {
            mIsfocussed = focus;
        }
        public String getPackageName() {
            return mPackageName;
        }
    }

    /**
     * Register a component to be the sole receiver of MEDIA_BUTTON intents.
     * @param eventReceiver identifier of a {@link android.content.BroadcastReceiver}
@@ -2466,7 +2445,6 @@ public class AudioManager {
     */
    @Deprecated
    public void registerMediaButtonEventReceiver(ComponentName eventReceiver) {
        boolean playerToAdd = true;
        if (eventReceiver == null) {
            return;
        }
@@ -2475,42 +2453,15 @@ public class AudioManager {
                    "receiver and context package names don't match");
            return;
        }
        if (mMediaPlayers.size() > 0) {
            final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator();
            while (rccIterator.hasNext()) {
                final MediaPlayerInfo player = rccIterator.next();
                if (eventReceiver.getPackageName().equals(player.getPackageName())) {
                    Log.e(TAG, "Player entry present, no need to add");
                    playerToAdd = false;
                    player.setFocus(true);
                } else {
                    Log.e(TAG, "Player: " + player.getPackageName()+ "Lost Focus");
                    player.setFocus(false);
                }
            }
        }
        if (playerToAdd) {
            Log.e(TAG, "Adding Player: " + eventReceiver.getPackageName() +
                                                    " to available player list");
            mMediaPlayers.add(new MediaPlayerInfo(eventReceiver.getPackageName(), true));
        }

        IAudioService service = getService();
        Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION);
        intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME,
                                   eventReceiver.getPackageName());
        intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, true);
        intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true);
        final long identity = Binder.clearCallingIdentity();
        try {
            mContext.sendBroadcast(intent);
        } catch (Exception e) {
            Log.e(TAG, "Error while updating focussed RCC change",e);
        } finally {
            Binder.restoreCallingIdentity(identity);
            service.addMediaPlayerAndUpdateRemoteController(
                                    eventReceiver.getPackageName());
        } catch (RemoteException e) {
            Log.e(TAG, "Error in calling Audioservice interface " +
                        "addMediaPlayerAndUpdateRemoteController()" + e);
        }
        Log.v(TAG, "updating focussed RCC change to RCD: CallingPackageName:"
                + eventReceiver.getPackageName());

        // construct a PendingIntent for the media button and register it
        Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
        mediaButtonIntent.addFlags(mediaButtonIntent.FLAG_RECEIVER_FOREGROUND);
@@ -2521,6 +2472,7 @@ public class AudioManager {
        registerMediaButtonIntent(pi, eventReceiver);
    }


    /**
     * Register a component to be the sole receiver of MEDIA_BUTTON intents.  This is like
     * {@link #registerMediaButtonEventReceiver(android.content.ComponentName)}, but allows
@@ -2646,35 +2598,16 @@ public class AudioManager {
     */
    @Deprecated
    public boolean registerRemoteController(RemoteController rctlr) {
        Log.v(TAG, "registerRemoteController: size of Media player list: " +
                                                                mMediaPlayers.size());
        if (rctlr == null) {
            return false;
        }
        rctlr.startListeningToSessions();
        if (mMediaPlayers.size() > 0) {
            Log.v(TAG, "Inform RemoteController regarding existing RCC entry");
            final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator();
            while (rccIterator.hasNext()) {
                final MediaPlayerInfo player = rccIterator.next();
        IAudioService service = getService();
                Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION);
                intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME,
                                                    player.getPackageName());
                intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, player.isFocussed());
                intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true);
                final long identity = Binder.clearCallingIdentity();
                try {
                    mContext.sendBroadcast(intent);
                } catch (Exception e) {
                    Log.e(TAG, "Error while updating RCC change", e);
                } finally {
                    Binder.restoreCallingIdentity(identity);
                }
                Log.v(TAG, "updating RCC change: CallingPackageName:" + player.getPackageName());
            }
        } else {
            Log.e(TAG, "No RCC entry present to update");
        try {
            service.updateRemoteControllerOnExistingMediaPlayers();
        } catch (RemoteException e) {
            Log.e(TAG, "Error in calling Audio service interface" +
                "updateRemoteControllerOnExistingMediaPlayers() due to " + e);
        }
        return true;
    }
+79 −0
Original line number Diff line number Diff line
@@ -159,6 +159,27 @@ public class AudioService extends IAudioService.Stub {
    // the platform type affects volume and silent mode behavior
    private final int mPlatformType;

    private static final ArrayList<MediaPlayerInfo> mMediaPlayers =
                                        new ArrayList<MediaPlayerInfo>();

    private class MediaPlayerInfo {
        private String mPackageName;
        private boolean mIsfocussed;
        public MediaPlayerInfo(String packageName, boolean isfocussed) {
            mPackageName = packageName;
            mIsfocussed = isfocussed;
        }
        public boolean isFocussed() {
            return mIsfocussed;
        }
        public void setFocus(boolean focus) {
            mIsfocussed = focus;
        }
        public String getPackageName() {
            return mPackageName;
        }
    }

    private boolean isPlatformVoice() {
        return mPlatformType == PLATFORM_VOICE;
    }
@@ -716,6 +737,64 @@ public class AudioService extends IAudioService.Stub {
        }
    }

    /**
     * @hide
     */
    public void addMediaPlayerAndUpdateRemoteController (String packageName) {
        boolean playerToAdd = true;
        if (mMediaPlayers.size() > 0) {
            final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator();
            while (rccIterator.hasNext()) {
                final MediaPlayerInfo player = rccIterator.next();
                if (packageName.equals(player.getPackageName())) {
                    Log.e(TAG, "Player entry present, no need to add");
                    playerToAdd = false;
                    player.setFocus(true);
                } else {
                    Log.e(TAG, "Player: " + player.getPackageName()+ "Lost Focus");
                    player.setFocus(false);
                }
            }
        }
        if (playerToAdd) {
            Log.e(TAG, "Adding Player: " + packageName + " to available player list");
            mMediaPlayers.add(new MediaPlayerInfo(packageName, true));
        }
        Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION);
        intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME, packageName);
        intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE, true);
        intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true);
        sendBroadcastToAll(intent);
        Log.v(TAG, "updating focussed RCC change to RCD: CallingPackageName:"
                + packageName);
    }

    /**
     * @hide
     */
    public void updateRemoteControllerOnExistingMediaPlayers() {
        Log.v(TAG, "updateRemoteControllerOnExistingMediaPlayers: size of Player list: " +
                                                                mMediaPlayers.size());
        if (mMediaPlayers.size() > 0) {
            Log.v(TAG, "Inform RemoteController regarding existing RCC entry");
            final Iterator<MediaPlayerInfo> rccIterator = mMediaPlayers.iterator();
            while (rccIterator.hasNext()) {
                final MediaPlayerInfo player = rccIterator.next();
                Intent intent = new Intent(AudioManager.RCC_CHANGED_ACTION);
                intent.putExtra(AudioManager.EXTRA_CALLING_PACKAGE_NAME,
                                                    player.getPackageName());
                intent.putExtra(AudioManager.EXTRA_FOCUS_CHANGED_VALUE,
                                                    player.isFocussed());
                intent.putExtra(AudioManager.EXTRA_AVAILABLITY_CHANGED_VALUE, true);
                sendBroadcastToAll(intent);
                Log.v(TAG, "updating RCC change: CallingPackageName:" +
                                                    player.getPackageName());
            }
        } else {
            Log.e(TAG, "No RCC entry present to update");
        }
    }

    private void checkAllAliasStreamVolumes() {
        int numStreamTypes = AudioSystem.getNumStreamTypes();
        for (int streamType = 0; streamType < numStreamTypes; streamType++) {
+4 −0
Original line number Diff line number Diff line
@@ -213,4 +213,8 @@ interface IAudioService {
    void getRemoteControlClientNowPlayingEntries();

    void setRemoteControlClientPlayItem(long uid, int scope);

    void updateRemoteControllerOnExistingMediaPlayers();

    void addMediaPlayerAndUpdateRemoteController(String packageName);
}