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:
aquilescanta 2018-01-30 07:51:23 -08:00 committed by Oliver Woodman
parent 17edae6528
commit e7ba2caf47
2 changed files with 27 additions and 23 deletions

View File

@ -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;

View File

@ -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