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 PlayerControlView castControlView;
private PlayerManager playerManager;
private MediaQueueAdapter listAdapter;
private RecyclerView mediaQueueList;
private MediaQueueListAdapter mediaQueueListAdapter;
private CastContext castContext;
// Activity lifecycle methods.
@ -71,13 +72,12 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
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());
helper.attachToRecyclerView(sampleList);
sampleList.setLayoutManager(new LinearLayoutManager(this));
sampleList.setHasFixedSize(true);
listAdapter = new MediaQueueAdapter();
sampleList.setAdapter(listAdapter);
helper.attachToRecyclerView(mediaQueueList);
mediaQueueList.setLayoutManager(new LinearLayoutManager(this));
mediaQueueList.setHasFixedSize(true);
mediaQueueListAdapter = new MediaQueueListAdapter();
findViewById(R.id.add_sample_button).setOnClickListener(this);
}
@ -100,13 +100,15 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
castControlView,
/* context= */ this,
castContext);
mediaQueueList.setAdapter(mediaQueueListAdapter);
}
@Override
public void onPause() {
super.onPause();
mediaQueueListAdapter.notifyItemRangeRemoved(0, mediaQueueListAdapter.getItemCount());
mediaQueueList.setAdapter(null);
playerManager.release();
playerManager = null;
}
// Activity input.
@ -129,10 +131,10 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
@Override
public void onQueuePositionChanged(int previousIndex, int newIndex) {
if (previousIndex != C.INDEX_UNSET) {
listAdapter.notifyItemChanged(previousIndex);
mediaQueueListAdapter.notifyItemChanged(previousIndex);
}
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);
ListView sampleList = dialogList.findViewById(R.id.sample_list);
sampleList.setAdapter(new SampleListAdapter(this));
sampleList.setOnItemClickListener(new OnItemClickListener() {
sampleList.setOnItemClickListener(
new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
playerManager.addItem(DemoUtil.SAMPLES.get(position));
listAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1);
}
});
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
playerManager.addItem(DemoUtil.SAMPLES.get(position));
mediaQueueListAdapter.notifyItemInserted(playerManager.getMediaQueueSize() - 1);
}
});
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
public QueueItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@ -219,7 +221,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
draggingFromPosition = fromPosition;
}
draggingToPosition = toPosition;
listAdapter.notifyItemMoved(fromPosition, toPosition);
mediaQueueListAdapter.notifyItemMoved(fromPosition, toPosition);
return true;
}
@ -227,7 +229,7 @@ public class MainActivity extends AppCompatActivity implements OnClickListener,
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
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)) {
// The move failed. The entire sequence of onMove calls since the drag started needs to be
// invalidated.
listAdapter.notifyDataSetChanged();
mediaQueueListAdapter.notifyDataSetChanged();
}
}
draggingFromPosition = C.INDEX_UNSET;

View File

@ -392,7 +392,9 @@ public final class CastPlayer implements Player {
@Override
public void release() {
castContext.getSessionManager().removeSessionManagerListener(statusListener, CastSession.class);
SessionManager sessionManager = castContext.getSessionManager();
sessionManager.removeSessionManagerListener(statusListener, CastSession.class);
sessionManager.endCurrentSession(false);
}
@Override