Revert "Revert "MediaRouter: Add SystemMediaRoute2Provider to publish default route""
This reverts commit 5782f0d0cfc01b68c2c8855329e91d0c0dcc7df5.
Reason for revert: Fixed the issue
Test: The following CL does
Change-Id: Ib31ec9c1ef03402636dffb592f66a2d0c01db179
diff --git a/services/core/java/com/android/server/media/MediaRoute2Provider.java b/services/core/java/com/android/server/media/MediaRoute2Provider.java
new file mode 100644
index 0000000..91c9253
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaRoute2Provider.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.media;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.media.MediaRoute2Info;
+import android.media.MediaRoute2ProviderInfo;
+
+import java.util.Objects;
+
+abstract class MediaRoute2Provider {
+ final ComponentName mComponentName;
+ final String mUniqueId;
+
+ private Callback mCallback;
+ private MediaRoute2ProviderInfo mProviderInfo;
+
+ MediaRoute2Provider(@NonNull ComponentName componentName) {
+ mComponentName = Objects.requireNonNull(componentName, "Component name must not be null.");
+ mUniqueId = componentName.flattenToShortString();
+ }
+
+ public void setCallback(MediaRoute2ProviderProxy.Callback callback) {
+ mCallback = callback;
+ }
+
+ public abstract void requestSelectRoute(String packageName, String routeId, int seq);
+ public abstract void unselectRoute(String packageName, String routeId);
+ public abstract void sendControlRequest(MediaRoute2Info route, Intent request);
+ public abstract void requestSetVolume(MediaRoute2Info route, int volume);
+ public abstract void requestUpdateVolume(MediaRoute2Info route, int delta);
+
+ @NonNull
+ public String getUniqueId() {
+ return mUniqueId;
+ }
+
+ @Nullable
+ public MediaRoute2ProviderInfo getProviderInfo() {
+ return mProviderInfo;
+ }
+
+ void setAndNotifyProviderInfo(MediaRoute2ProviderInfo info) {
+ //TODO: check if info is not updated
+ if (info == null) {
+ mProviderInfo = null;
+ } else {
+ mProviderInfo = new MediaRoute2ProviderInfo.Builder(info)
+ .setUniqueId(mUniqueId)
+ .build();
+ }
+ if (mCallback != null) {
+ mCallback.onProviderStateChanged(this);
+ }
+ }
+
+ public boolean hasComponentName(String packageName, String className) {
+ return mComponentName.getPackageName().equals(packageName)
+ && mComponentName.getClassName().equals(className);
+ }
+
+ public interface Callback {
+ void onProviderStateChanged(MediaRoute2Provider provider);
+ }
+}