mirror of
https://github.com/androidx/media.git
synced 2025-05-12 01:59:50 +08:00
Clear the media queue and stop casting on app pause
Simplifies the app and prevents inconsistent states between both players and the media queue. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=183831329
This commit is contained in:
parent
17edae6528
commit
e7ba2caf47
@ -53,7 +53,8 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
private PlayerView localPlayerView;
|
private PlayerView localPlayerView;
|
||||||
private PlayerControlView castControlView;
|
private PlayerControlView castControlView;
|
||||||
private PlayerManager playerManager;
|
private PlayerManager playerManager;
|
||||||
private MediaQueueAdapter listAdapter;
|
private RecyclerView mediaQueueList;
|
||||||
|
private MediaQueueListAdapter mediaQueueListAdapter;
|
||||||
private CastContext castContext;
|
private CastContext castContext;
|
||||||
|
|
||||||
// Activity lifecycle methods.
|
// Activity lifecycle methods.
|
||||||
@ -71,13 +72,12 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
|
|
||||||
castControlView = findViewById(R.id.cast_control_view);
|
castControlView = findViewById(R.id.cast_control_view);
|
||||||
|
|
||||||
RecyclerView sampleList = findViewById(R.id.sample_list);
|
mediaQueueList = findViewById(R.id.sample_list);
|
||||||
ItemTouchHelper helper = new ItemTouchHelper(new RecyclerViewCallback());
|
ItemTouchHelper helper = new ItemTouchHelper(new RecyclerViewCallback());
|
||||||
helper.attachToRecyclerView(sampleList);
|
helper.attachToRecyclerView(mediaQueueList);
|
||||||
sampleList.setLayoutManager(new LinearLayoutManager(this));
|
mediaQueueList.setLayoutManager(new LinearLayoutManager(this));
|
||||||
sampleList.setHasFixedSize(true);
|
mediaQueueList.setHasFixedSize(true);
|
||||||
listAdapter = new MediaQueueAdapter();
|
mediaQueueListAdapter = new MediaQueueListAdapter();
|
||||||
sampleList.setAdapter(listAdapter);
|
|
||||||
|
|
||||||
findViewById(R.id.add_sample_button).setOnClickListener(this);
|
findViewById(R.id.add_sample_button).setOnClickListener(this);
|
||||||
}
|
}
|
||||||
@ -100,13 +100,15 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
castControlView,
|
castControlView,
|
||||||
/* context= */ this,
|
/* context= */ this,
|
||||||
castContext);
|
castContext);
|
||||||
|
mediaQueueList.setAdapter(mediaQueueListAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
mediaQueueListAdapter.notifyItemRangeRemoved(0, mediaQueueListAdapter.getItemCount());
|
||||||
|
mediaQueueList.setAdapter(null);
|
||||||
playerManager.release();
|
playerManager.release();
|
||||||
playerManager = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Activity input.
|
// Activity input.
|
||||||
@ -129,10 +131,10 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
@Override
|
@Override
|
||||||
public void onQueuePositionChanged(int previousIndex, int newIndex) {
|
public void onQueuePositionChanged(int previousIndex, int newIndex) {
|
||||||
if (previousIndex != C.INDEX_UNSET) {
|
if (previousIndex != C.INDEX_UNSET) {
|
||||||
listAdapter.notifyItemChanged(previousIndex);
|
mediaQueueListAdapter.notifyItemChanged(previousIndex);
|
||||||
}
|
}
|
||||||
if (newIndex != C.INDEX_UNSET) {
|
if (newIndex != C.INDEX_UNSET) {
|
||||||
listAdapter.notifyItemChanged(newIndex);
|
mediaQueueListAdapter.notifyItemChanged(newIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,15 +144,15 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
View dialogList = getLayoutInflater().inflate(R.layout.sample_list, null);
|
View dialogList = getLayoutInflater().inflate(R.layout.sample_list, null);
|
||||||
ListView sampleList = dialogList.findViewById(R.id.sample_list);
|
ListView sampleList = dialogList.findViewById(R.id.sample_list);
|
||||||
sampleList.setAdapter(new SampleListAdapter(this));
|
sampleList.setAdapter(new SampleListAdapter(this));
|
||||||
sampleList.setOnItemClickListener(new OnItemClickListener() {
|
sampleList.setOnItemClickListener(
|
||||||
|
new OnItemClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
playerManager.addItem(DemoUtil.SAMPLES.get(position));
|
playerManager.addItem(DemoUtil.SAMPLES.get(position));
|
||||||
listAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1);
|
mediaQueueListAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
|
||||||
return dialogList;
|
return dialogList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,7 +175,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class MediaQueueAdapter extends RecyclerView.Adapter<QueueItemViewHolder> {
|
private class MediaQueueListAdapter extends RecyclerView.Adapter<QueueItemViewHolder> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public QueueItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public QueueItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
@ -219,7 +221,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
draggingFromPosition = fromPosition;
|
draggingFromPosition = fromPosition;
|
||||||
}
|
}
|
||||||
draggingToPosition = toPosition;
|
draggingToPosition = toPosition;
|
||||||
listAdapter.notifyItemMoved(fromPosition, toPosition);
|
mediaQueueListAdapter.notifyItemMoved(fromPosition, toPosition);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +229,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
||||||
int position = viewHolder.getAdapterPosition();
|
int position = viewHolder.getAdapterPosition();
|
||||||
if (playerManager.removeItem(position)) {
|
if (playerManager.removeItem(position)) {
|
||||||
listAdapter.notifyItemRemoved(position);
|
mediaQueueListAdapter.notifyItemRemoved(position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,7 +241,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
|
|||||||
if (!playerManager.moveItem(draggingFromPosition, draggingToPosition)) {
|
if (!playerManager.moveItem(draggingFromPosition, draggingToPosition)) {
|
||||||
// The move failed. The entire sequence of onMove calls since the drag started needs to be
|
// The move failed. The entire sequence of onMove calls since the drag started needs to be
|
||||||
// invalidated.
|
// invalidated.
|
||||||
listAdapter.notifyDataSetChanged();
|
mediaQueueListAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
draggingFromPosition = C.INDEX_UNSET;
|
draggingFromPosition = C.INDEX_UNSET;
|
||||||
|
@ -392,7 +392,9 @@ public final class CastPlayer implements Player {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void release() {
|
public void release() {
|
||||||
castContext.getSessionManager().removeSessionManagerListener(statusListener, CastSession.class);
|
SessionManager sessionManager = castContext.getSessionManager();
|
||||||
|
sessionManager.removeSessionManagerListener(statusListener, CastSession.class);
|
||||||
|
sessionManager.endCurrentSession(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user