Skip to content

Commit f1656a9

Browse files
committed
Fix crash when attempting to connect via an Intent.
A race condition was introduced during refactor where the UI attempted to update itself before a connection was made to the MediaSession when connection information (by way of package name) was passed in via an Intent. The change makes it so the ViewPager is marked as GONE if the connection hasn't yet been established. After a connection is then established, the view is set to VISIBLE to trigger the updates. Change-Id: Ie713a70df7474786688f286cbe0e49eaa63a971e
1 parent 70fd2e9 commit f1656a9

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

mediacontroller/src/main/java/com/example/android/mediacontroller/MediaAppControllerActivity.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public class MediaAppControllerActivity extends AppCompatActivity {
126126
private RatingUiHelper mRatingUiHelper;
127127
private CustomControlsAdapter mCustomControlsAdapter = new CustomControlsAdapter();
128128

129+
private ViewPager mViewPager;
129130
private Spinner mInputTypeView;
130131
private EditText mUriInput;
131132
private TextView mMediaInfoText;
@@ -163,6 +164,7 @@ protected void onCreate(Bundle savedInstanceState) {
163164
final Toolbar toolbar = findViewById(R.id.toolbar);
164165
setSupportActionBar(toolbar);
165166

167+
mViewPager = findViewById(R.id.view_pager);
166168
mInputTypeView = findViewById(R.id.input_type);
167169
mUriInput = findViewById(R.id.uri_id_query);
168170
mMediaInfoText = findViewById(R.id.media_info);
@@ -192,17 +194,19 @@ protected void onCreate(Bundle savedInstanceState) {
192194
// that will be taken care of by #connectToMediaBrowserPackage in handleIntent.
193195
setupMediaController();
194196
setupToolbar(mMediaAppDetails.appName, mMediaAppDetails.icon);
197+
} else {
198+
// Wait to show the ViewPager until connected.
199+
mViewPager.setVisibility(View.GONE);
195200
}
196201

197-
final ViewPager viewPager = findViewById(R.id.view_pager);
198202
final int[] pages = {
199203
R.id.prepare_play_page,
200204
R.id.controls_page,
201205
R.id.custom_controls_page,
202206
};
203207
// Simplify the adapter by not keeping track of creating/destroying off-screen views.
204-
viewPager.setOffscreenPageLimit(pages.length);
205-
viewPager.setAdapter(new PagerAdapter() {
208+
mViewPager.setOffscreenPageLimit(pages.length);
209+
mViewPager.setAdapter(new PagerAdapter() {
206210

207211
@Override
208212
public int getCount() {
@@ -221,7 +225,7 @@ public Object instantiateItem(@NonNull ViewGroup container, int position) {
221225
}
222226
});
223227
final TabLayout pageIndicator = findViewById(R.id.page_indicator);
224-
pageIndicator.setupWithViewPager(viewPager);
228+
pageIndicator.setupWithViewPager(mViewPager);
225229

226230
final RecyclerView customControlsList = findViewById(R.id.custom_controls_list);
227231
customControlsList.setLayoutManager(new LinearLayoutManager(this));
@@ -335,6 +339,9 @@ private void setupMediaController() {
335339
mCallback.onPlaybackStateChanged(mController.getPlaybackState());
336340
mCallback.onMetadataChanged(mController.getMetadata());
337341

342+
// Ensure views are visible.
343+
mViewPager.setVisibility(View.VISIBLE);
344+
338345
Log.d(TAG, "MediaControllerCompat created");
339346
} catch (RemoteException remoteException) {
340347
Log.e(TAG, "Failed to create MediaController from session token", remoteException);

0 commit comments

Comments
 (0)