Merge "Output switcher header is not updated with the latest media content" into rvc-dev am: 95cd4c9414

Change-Id: Iada645d9939d5b7343d1ebef27ccba669e9dc268
This commit is contained in:
Automerger Merge Worker
2020-03-17 03:45:43 +00:00
7 changed files with 113 additions and 27 deletions

View File

@@ -148,7 +148,7 @@ public class MediaOutputGroupPanel implements PanelContent, LocalMediaManager.De
@Override
public void onDeviceListUpdate(List<MediaDevice> devices) {
if (mCallback != null) {
mCallback.onGroupChanged();
mCallback.onHeaderChanged();
}
}

View File

@@ -82,20 +82,6 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
private MediaOutputPanel(Context context, String packageName) {
mContext = context.getApplicationContext();
mPackageName = TextUtils.isEmpty(packageName) ? "" : packageName;
if (!TextUtils.isEmpty(mPackageName)) {
mMediaSessionManager = mContext.getSystemService(MediaSessionManager.class);
for (MediaController controller : mMediaSessionManager.getActiveSessions(null)) {
if (TextUtils.equals(controller.getPackageName(), mPackageName)) {
mMediaController = controller;
break;
}
}
}
if (mMediaController == null) {
Log.e(TAG, "Unable to find " + mPackageName + " media controller");
}
}
@Override
@@ -228,6 +214,19 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
@OnLifecycleEvent(ON_START)
public void onStart() {
if (!TextUtils.isEmpty(mPackageName)) {
mMediaSessionManager = mContext.getSystemService(MediaSessionManager.class);
for (MediaController controller : mMediaSessionManager.getActiveSessions(null)) {
if (TextUtils.equals(controller.getPackageName(), mPackageName)) {
mMediaController = controller;
mMediaController.registerCallback(mCb);
break;
}
}
}
if (mMediaController == null) {
Log.d(TAG, "No media controller for " + mPackageName);
}
if (mLocalMediaManager == null) {
mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null);
}
@@ -237,6 +236,9 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
@OnLifecycleEvent(ON_STOP)
public void onStop() {
if (mMediaController != null) {
mMediaController.unregisterCallback(mCb);
}
mLocalMediaManager.unregisterCallback(this);
mLocalMediaManager.stopScan();
}
@@ -245,4 +247,13 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC
public int getViewType() {
return PanelContent.VIEW_TYPE_SLIDER;
}
private final MediaController.Callback mCb = new MediaController.Callback() {
@Override
public void onMetadataChanged(MediaMetadata metadata) {
if (mCallback != null) {
mCallback.onHeaderChanged();
}
}
};
}

View File

@@ -28,8 +28,8 @@ public interface PanelContentCallback {
void onCustomizedButtonStateChanged();
/**
* It will be called when group content is changed. For example, to add/remove a device into
* It will be called when header content is changed. For example, to add/remove a device into
* a group
*/
void onGroupChanged();
void onHeaderChanged();
}

View File

@@ -432,8 +432,10 @@ public class PanelFragment extends Fragment {
}
@Override
public void onGroupChanged() {
public void onHeaderChanged() {
ThreadUtils.postOnMainThread(() -> {
mTitleIcon.setImageIcon(mPanel.getIcon().toIcon(getContext()));
mHeaderTitle.setText(mPanel.getTitle());
mHeaderSubtitle.setText(mPanel.getSubTitle());
});
}