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

Commit 404b4036 authored by Amy Zhang's avatar Amy Zhang Committed by Automerger Merge Worker
Browse files

Merge "Update media resourceManagerService with the Application pid" into...

Merge "Update media resourceManagerService with the Application pid" into rvc-dev am: cea1d98c am: 622f9f44

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11803042

Change-Id: Ibf0945042b58aa54f1f6004f778645c2bc24e872
parents e1dde942 622f9f44
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -338,6 +338,7 @@ filegroup {
        ":libcamera_client_aidl",
        ":libcamera_client_aidl",
        ":libcamera_client_framework_aidl",
        ":libcamera_client_framework_aidl",
        ":libupdate_engine_aidl",
        ":libupdate_engine_aidl",
        ":resourcemanager_aidl",
        ":storaged_aidl",
        ":storaged_aidl",
        ":vold_aidl",
        ":vold_aidl",


+2 −0
Original line number Original line Diff line number Diff line
@@ -3534,6 +3534,8 @@
         @hide -->
         @hide -->
    <permission android:name="android.permission.MEDIA_RESOURCE_OVERRIDE_PID"
    <permission android:name="android.permission.MEDIA_RESOURCE_OVERRIDE_PID"
         android:protectionLevel="signature" />
         android:protectionLevel="signature" />
    <uses-permission android:name="android.permission.MEDIA_RESOURCE_OVERRIDE_PID" />



    <!-- Must be required by a {@link android.media.routing.MediaRouteService}
    <!-- Must be required by a {@link android.media.routing.MediaRouteService}
         to ensure that only the system can interact with it.
         to ensure that only the system can interact with it.
+51 −1
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Context;
import android.media.IResourceManagerService;
import android.media.tv.TvInputManager;
import android.media.tv.TvInputManager;
import android.media.tv.tunerresourcemanager.CasSessionRequest;
import android.media.tv.tunerresourcemanager.CasSessionRequest;
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
@@ -53,7 +54,7 @@ import java.util.Set;
 *
 *
 * @hide
 * @hide
 */
 */
public class TunerResourceManagerService extends SystemService {
public class TunerResourceManagerService extends SystemService implements IBinder.DeathRecipient {
    private static final String TAG = "TunerResourceManagerService";
    private static final String TAG = "TunerResourceManagerService";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);


@@ -76,6 +77,7 @@ public class TunerResourceManagerService extends SystemService {


    private TvInputManager mTvInputManager;
    private TvInputManager mTvInputManager;
    private ActivityManager mActivityManager;
    private ActivityManager mActivityManager;
    private IResourceManagerService mMediaResourceManager;
    private UseCasePriorityHints mPriorityCongfig = new UseCasePriorityHints();
    private UseCasePriorityHints mPriorityCongfig = new UseCasePriorityHints();


    // An internal resource request count to help generate resource handle.
    // An internal resource request count to help generate resource handle.
@@ -102,6 +104,22 @@ public class TunerResourceManagerService extends SystemService {
        mActivityManager =
        mActivityManager =
                (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE);
                (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE);
        mPriorityCongfig.parse();
        mPriorityCongfig.parse();

        if (mMediaResourceManager == null) {
            IBinder mediaResourceManagerBinder = getBinderService("media.resource_manager");
            if (mediaResourceManagerBinder == null) {
                Slog.w(TAG, "Resource Manager Service not available.");
                return;
            }
            try {
                mediaResourceManagerBinder.linkToDeath(this, /*flags*/ 0);
            } catch (RemoteException e) {
                Slog.w(TAG, "Could not link to death of native resource manager service.");
                return;
            }
            mMediaResourceManager = IResourceManagerService.Stub.asInterface(
                    mediaResourceManagerBinder);
        }
    }
    }


    private final class BinderService extends ITunerResourceManager.Stub {
    private final class BinderService extends ITunerResourceManager.Stub {
@@ -380,6 +398,19 @@ public class TunerResourceManagerService extends SystemService {
        }
        }
    }
    }


    /**
     * Handle the death of the native resource manager service
     */
    @Override
    public void binderDied() {
        if (DEBUG) {
            Slog.w(TAG, "Native media resource manager service has died");
        }
        synchronized (mLock) {
            mMediaResourceManager = null;
        }
    }

    @VisibleForTesting
    @VisibleForTesting
    protected void registerClientProfileInternal(ResourceClientProfile profile,
    protected void registerClientProfileInternal(ResourceClientProfile profile,
            IResourcesReclaimListener listener, int[] clientId) {
            IResourcesReclaimListener listener, int[] clientId) {
@@ -399,6 +430,16 @@ public class TunerResourceManagerService extends SystemService {
                ? Binder.getCallingPid() /*callingPid*/
                ? Binder.getCallingPid() /*callingPid*/
                : mTvInputManager.getClientPid(profile.getTvInputSessionId()); /*tvAppId*/
                : mTvInputManager.getClientPid(profile.getTvInputSessionId()); /*tvAppId*/


        // Update Media Resource Manager with the tvAppId
        if (profile.getTvInputSessionId() != null && mMediaResourceManager != null) {
            try {
                mMediaResourceManager.overridePid(Binder.getCallingPid(), pid);
            } catch (RemoteException e) {
                Slog.e(TAG, "Could not overridePid in resourceManagerSercice,"
                        + " remote exception: " + e);
            }
        }

        ClientProfile clientProfile = new ClientProfile.Builder(clientId[0])
        ClientProfile clientProfile = new ClientProfile.Builder(clientId[0])
                                              .tvInputSessionId(profile.getTvInputSessionId())
                                              .tvInputSessionId(profile.getTvInputSessionId())
                                              .useCase(profile.getUseCase())
                                              .useCase(profile.getUseCase())
@@ -415,6 +456,15 @@ public class TunerResourceManagerService extends SystemService {
            Slog.d(TAG, "unregisterClientProfile(clientId=" + clientId + ")");
            Slog.d(TAG, "unregisterClientProfile(clientId=" + clientId + ")");
        }
        }
        removeClientProfile(clientId);
        removeClientProfile(clientId);
        // Remove the Media Resource Manager callingPid to tvAppId mapping
        if (mMediaResourceManager != null) {
            try {
                mMediaResourceManager.overridePid(Binder.getCallingPid(), -1);
            } catch (RemoteException e) {
                Slog.e(TAG, "Could not overridePid in resourceManagerSercice when unregister,"
                        + " remote exception: " + e);
            }
        }
    }
    }


    @VisibleForTesting
    @VisibleForTesting
+1 −0
Original line number Original line Diff line number Diff line
@@ -80,6 +80,7 @@
    <uses-permission android:name="android.permission.WRITE_DREAM_STATE"/>
    <uses-permission android:name="android.permission.WRITE_DREAM_STATE"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
    <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
    <uses-permission android:name="android.permission.MEDIA_RESOURCE_OVERRIDE_PID"/>


    <!-- Uses API introduced in O (26) -->
    <!-- Uses API introduced in O (26) -->
    <uses-sdk android:minSdkVersion="1"
    <uses-sdk android:minSdkVersion="1"