• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.media;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.content.ComponentName;
22 import android.media.MediaRoute2ProviderInfo;
23 import android.media.RouteDiscoveryPreference;
24 import android.media.RoutingSessionInfo;
25 import android.os.Bundle;
26 
27 import com.android.internal.annotations.GuardedBy;
28 
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.Objects;
32 
33 abstract class MediaRoute2Provider {
34     final ComponentName mComponentName;
35     final String mUniqueId;
36     final Object mLock = new Object();
37 
38     Callback mCallback;
39     boolean mIsSystemRouteProvider;
40     private volatile MediaRoute2ProviderInfo mProviderInfo;
41 
42     @GuardedBy("mLock")
43     final List<RoutingSessionInfo> mSessionInfos = new ArrayList<>();
44 
MediaRoute2Provider(@onNull ComponentName componentName)45     MediaRoute2Provider(@NonNull ComponentName componentName) {
46         mComponentName = Objects.requireNonNull(componentName, "Component name must not be null.");
47         mUniqueId = componentName.flattenToShortString();
48     }
49 
setCallback(Callback callback)50     public void setCallback(Callback callback) {
51         mCallback = callback;
52     }
53 
requestCreateSession(long requestId, String packageName, String routeId, @Nullable Bundle sessionHints)54     public abstract void requestCreateSession(long requestId, String packageName, String routeId,
55             @Nullable Bundle sessionHints);
releaseSession(long requestId, String sessionId)56     public abstract void releaseSession(long requestId, String sessionId);
updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference)57     public abstract void updateDiscoveryPreference(RouteDiscoveryPreference discoveryPreference);
58 
selectRoute(long requestId, String sessionId, String routeId)59     public abstract void selectRoute(long requestId, String sessionId, String routeId);
deselectRoute(long requestId, String sessionId, String routeId)60     public abstract void deselectRoute(long requestId, String sessionId, String routeId);
transferToRoute(long requestId, String sessionId, String routeId)61     public abstract void transferToRoute(long requestId, String sessionId, String routeId);
62 
setRouteVolume(long requestId, String routeId, int volume)63     public abstract void setRouteVolume(long requestId, String routeId, int volume);
setSessionVolume(long requestId, String sessionId, int volume)64     public abstract void setSessionVolume(long requestId, String sessionId, int volume);
prepareReleaseSession(@onNull String sessionId)65     public abstract void prepareReleaseSession(@NonNull String sessionId);
66 
67     @NonNull
getUniqueId()68     public String getUniqueId() {
69         return mUniqueId;
70     }
71 
72     @Nullable
getProviderInfo()73     public MediaRoute2ProviderInfo getProviderInfo() {
74         return mProviderInfo;
75     }
76 
77     @NonNull
getSessionInfos()78     public List<RoutingSessionInfo> getSessionInfos() {
79         synchronized (mLock) {
80             return new ArrayList<>(mSessionInfos);
81         }
82     }
83 
setProviderState(MediaRoute2ProviderInfo providerInfo)84     void setProviderState(MediaRoute2ProviderInfo providerInfo) {
85         if (providerInfo == null) {
86             mProviderInfo = null;
87         } else {
88             mProviderInfo = new MediaRoute2ProviderInfo.Builder(providerInfo)
89                     .setUniqueId(mComponentName.getPackageName(), mUniqueId)
90                     .setSystemRouteProvider(mIsSystemRouteProvider)
91                     .build();
92         }
93     }
94 
notifyProviderState()95     void notifyProviderState() {
96         if (mCallback != null) {
97             mCallback.onProviderStateChanged(this);
98         }
99     }
100 
setAndNotifyProviderState(MediaRoute2ProviderInfo providerInfo)101     void setAndNotifyProviderState(MediaRoute2ProviderInfo providerInfo) {
102         setProviderState(providerInfo);
103         notifyProviderState();
104     }
105 
hasComponentName(String packageName, String className)106     public boolean hasComponentName(String packageName, String className) {
107         return mComponentName.getPackageName().equals(packageName)
108                 && mComponentName.getClassName().equals(className);
109     }
110 
111     public interface Callback {
onProviderStateChanged(@ullable MediaRoute2Provider provider)112         void onProviderStateChanged(@Nullable MediaRoute2Provider provider);
onSessionCreated(@onNull MediaRoute2Provider provider, long requestId, @Nullable RoutingSessionInfo sessionInfo)113         void onSessionCreated(@NonNull MediaRoute2Provider provider,
114                 long requestId, @Nullable RoutingSessionInfo sessionInfo);
onSessionUpdated(@onNull MediaRoute2Provider provider, @NonNull RoutingSessionInfo sessionInfo)115         void onSessionUpdated(@NonNull MediaRoute2Provider provider,
116                 @NonNull RoutingSessionInfo sessionInfo);
onSessionReleased(@onNull MediaRoute2Provider provider, @NonNull RoutingSessionInfo sessionInfo)117         void onSessionReleased(@NonNull MediaRoute2Provider provider,
118                 @NonNull RoutingSessionInfo sessionInfo);
onRequestFailed(@onNull MediaRoute2Provider provider, long requestId, int reason)119         void onRequestFailed(@NonNull MediaRoute2Provider provider, long requestId, int reason);
120     }
121 }
122