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

Commit fadfc4e1 authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

Merge "Volume prototypes: Allow delegate volume UI to set remote controller."

parents 2ada234d eb69e24e
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.database.ContentObserver;
import android.media.AudioManager;
import android.media.AudioManager;
import android.media.AudioManagerInternal;
import android.media.AudioSystem;
import android.media.AudioSystem;
import android.media.IAudioService;
import android.media.IAudioService;
import android.media.IRemoteVolumeController;
import android.media.IRemoteVolumeController;
@@ -59,6 +60,7 @@ import android.util.Log;
import android.util.SparseArray;
import android.util.SparseArray;
import android.view.KeyEvent;
import android.view.KeyEvent;


import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.SystemService;
import com.android.server.Watchdog;
import com.android.server.Watchdog;
import com.android.server.Watchdog.Monitor;
import com.android.server.Watchdog.Monitor;
@@ -94,6 +96,7 @@ public class MediaSessionService extends SystemService implements Monitor {
    private KeyguardManager mKeyguardManager;
    private KeyguardManager mKeyguardManager;
    private IAudioService mAudioService;
    private IAudioService mAudioService;
    private AudioManager mAudioManager;
    private AudioManager mAudioManager;
    private AudioManagerInternal mAudioManagerInternal;
    private ContentResolver mContentResolver;
    private ContentResolver mContentResolver;
    private SettingsObserver mSettingsObserver;
    private SettingsObserver mSettingsObserver;


@@ -121,6 +124,7 @@ public class MediaSessionService extends SystemService implements Monitor {
                (KeyguardManager) getContext().getSystemService(Context.KEYGUARD_SERVICE);
                (KeyguardManager) getContext().getSystemService(Context.KEYGUARD_SERVICE);
        mAudioService = getAudioService();
        mAudioService = getAudioService();
        mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
        mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
        mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class);
        mContentResolver = getContext().getContentResolver();
        mContentResolver = getContext().getContentResolver();
        mSettingsObserver = new SettingsObserver();
        mSettingsObserver = new SettingsObserver();
        mSettingsObserver.observe();
        mSettingsObserver.observe();
@@ -343,7 +347,13 @@ public class MediaSessionService extends SystemService implements Monitor {
        }
        }
    }
    }


    private void enforceStatusBarPermission(String action, int pid, int uid) {
    private void enforceSystemUiPermission(String action, int pid, int uid) {
        if (mAudioManagerInternal != null) {
            final int vcuid = mAudioManagerInternal.getVolumeControllerUid();
            if (vcuid > 0 && uid == vcuid) {
                return;
            }
        }
        if (getContext().checkPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
        if (getContext().checkPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
                pid, uid) != PackageManager.PERMISSION_GRANTED) {
                pid, uid) != PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("Only system ui may " + action);
            throw new SecurityException("Only system ui may " + action);
@@ -789,7 +799,7 @@ public class MediaSessionService extends SystemService implements Monitor {
            final int uid = Binder.getCallingUid();
            final int uid = Binder.getCallingUid();
            final long token = Binder.clearCallingIdentity();
            final long token = Binder.clearCallingIdentity();
            try {
            try {
                enforceStatusBarPermission("listen for volume changes", pid, uid);
                enforceSystemUiPermission("listen for volume changes", pid, uid);
                mRvc = rvc;
                mRvc = rvc;
            } finally {
            } finally {
                Binder.restoreCallingIdentity(token);
                Binder.restoreCallingIdentity(token);