Skip to content

Commit 96a57f3

Browse files
committed
Use a Snackbar for connection errors.
Rather than using a TextView to display connectivity errors with the (remote) MediaSession, display a Snackbar with a "Reconnect" action. This also allows for the removal of the "Reconnect" button at the top of the UI which was persistent and may cause some confusion. Change-Id: Ic2853e1228a5e1cf7f934ed8d5f1413fc0b6962f
1 parent c2891bc commit 96a57f3

File tree

3 files changed

+34
-42
lines changed

3 files changed

+34
-42
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,6 @@ public static Bitmap createToolbarIcon(@NonNull Resources resources,
103103
final Bitmap scaledIcon = Bitmap.createScaledBitmap(icon, iconSize, iconSize, false);
104104
canvas.drawBitmap(scaledIcon, padding, padding, null);
105105

106-
return scaledIcon;
106+
return toolbarIcon;
107107
}
108108
}

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

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@
1818
import android.app.Activity;
1919
import android.content.Intent;
2020
import android.graphics.Bitmap;
21-
import android.graphics.Canvas;
22-
import android.graphics.Color;
23-
import android.graphics.PorterDuff;
2421
import android.graphics.drawable.BitmapDrawable;
2522
import android.os.Bundle;
2623
import android.os.RemoteException;
27-
import android.support.annotation.NonNull;
2824
import android.support.annotation.Nullable;
25+
import android.support.annotation.StringRes;
26+
import android.support.design.widget.Snackbar;
2927
import android.support.v4.media.MediaBrowserCompat;
3028
import android.support.v4.media.MediaMetadataCompat;
3129
import android.support.v4.media.session.MediaControllerCompat;
@@ -71,6 +69,7 @@ public class MediaAppControllerActivity extends AppCompatActivity {
7169
private MediaControllerCompat mController;
7270
private MediaBrowserCompat mBrowser;
7371

72+
private View mRootView;
7473
private EditText mUriInput;
7574
private TextView mMediaInfoText;
7675

@@ -95,6 +94,7 @@ protected void onCreate(Bundle savedInstanceState) {
9594
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
9695
setSupportActionBar(toolbar);
9796

97+
mRootView = findViewById(R.id.root_view);
9898
mUriInput = (EditText) findViewById(R.id.uri_id_query);
9999
mMediaInfoText = (TextView) findViewById(R.id.media_info);
100100

@@ -107,12 +107,6 @@ protected void onCreate(Bundle savedInstanceState) {
107107
setupButtons();
108108
setupMediaController();
109109

110-
findViewById(R.id.reconnect).setOnClickListener(new View.OnClickListener() {
111-
@Override
112-
public void onClick(View view) {
113-
setupMediaController();
114-
}
115-
});
116110
findViewById(R.id.update_media_info_btn).setOnClickListener(new View.OnClickListener() {
117111
@Override
118112
public void onClick(View view) {
@@ -262,29 +256,34 @@ public void onPlaybackStateChanged(PlaybackStateCompat playbackState) {
262256
}
263257
});
264258
Log.d(TAG, "MediaControllerCompat created");
265-
findViewById(R.id.status_info).setVisibility(View.GONE);
266-
} catch (RemoteException e) {
267-
Log.e(TAG, "Failed to connect with session token: " + e);
268-
String msg = getString(R.string.media_controller_failed_msg);
269-
((TextView) findViewById(R.id.status_info)).setText(msg);
270-
findViewById(R.id.status_info).setVisibility(View.VISIBLE);
259+
} catch (RemoteException remoteException) {
260+
Log.e(TAG, "Failed to connect with session token: " + remoteException);
261+
showDisconnected(R.string.media_controller_failed_msg);
271262
}
272263
}
273264

274265
@Override
275266
public void onConnectionSuspended() {
276267
Log.d(TAG, "MediaBrowser connection suspended");
277-
String msg = getString(R.string.connection_suspended_msg);
278-
((TextView) findViewById(R.id.status_info)).setText(msg);
279-
findViewById(R.id.status_info).setVisibility(View.VISIBLE);
268+
showDisconnected(R.string.connection_suspended_msg);
280269
}
281270

282271
@Override
283272
public void onConnectionFailed() {
284273
Log.e(TAG, "MediaBrowser connection failed");
285-
String msg = getString(R.string.connection_failed_msg);
286-
((TextView) findViewById(R.id.status_info)).setText(msg);
287-
findViewById(R.id.status_info).setVisibility(View.VISIBLE);
274+
showDisconnected(R.string.connection_failed_msg);
275+
}
276+
277+
private void showDisconnected(@StringRes final int stringResource) {
278+
final Snackbar snackbar =
279+
Snackbar.make(mRootView, stringResource, Snackbar.LENGTH_INDEFINITE);
280+
snackbar.setAction(R.string.reconnect, new View.OnClickListener() {
281+
@Override
282+
public void onClick(final View view) {
283+
setupMediaController();
284+
}
285+
});
286+
snackbar.show();
288287
}
289288
}
290289
}

mediacontroller/src/main/res/layout/activity_media_app_controller.xml

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414
limitations under the License.
1515
-->
1616
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
17-
xmlns:app="http://schemas.android.com/apk/res-auto"
18-
xmlns:tools="http://schemas.android.com/tools"
19-
android:layout_width="match_parent"
20-
android:layout_height="match_parent"
21-
android:orientation="vertical"
22-
tools:context="com.example.android.mediacontroller.MediaAppControllerActivity">
17+
xmlns:app="http://schemas.android.com/apk/res-auto"
18+
xmlns:tools="http://schemas.android.com/tools"
19+
android:id="@+id/root_view"
20+
android:layout_width="match_parent"
21+
android:layout_height="match_parent"
22+
android:orientation="vertical"
23+
tools:context="com.example.android.mediacontroller.MediaAppControllerActivity">
2324

2425
<android.support.design.widget.AppBarLayout
2526
android:layout_width="match_parent"
@@ -31,7 +32,7 @@
3132
android:layout_width="match_parent"
3233
android:layout_height="?attr/actionBarSize"
3334
android:background="?attr/colorPrimary"
34-
app:popupTheme="@style/AppTheme.PopupOverlay" />
35+
app:popupTheme="@style/AppTheme.PopupOverlay"/>
3536

3637
android.support.design.widget.AppBarLayout>
3738

@@ -53,15 +54,7 @@
5354
android:id="@+id/status_info"
5455
android:layout_width="wrap_content"
5556
android:layout_height="wrap_content"
56-
android:visibility="gone" />
57-
58-
<Button
59-
android:id="@+id/reconnect"
60-
android:layout_width="wrap_content"
61-
android:layout_height="wrap_content"
62-
android:focusable="true"
63-
android:focusableInTouchMode="true"
64-
android:text="@string/reconnect" />
57+
android:visibility="gone"/>
6558

6659
<EditText
6760
android:id="@+id/uri_id_query"
@@ -70,19 +63,19 @@
7063
android:layout_marginBottom="@dimen/activity_vertical_margin"
7164
android:hint="@string/id_hint"
7265
android:inputType="textUri"
73-
android:text="@string/default_uri" />
66+
android:text="@string/default_uri"/>
7467

7568
<Button
7669
android:id="@+id/update_media_info_btn"
7770
android:layout_width="wrap_content"
7871
android:layout_height="wrap_content"
79-
android:text="@string/update_media_info" />
72+
android:text="@string/update_media_info"/>
8073

8174
<TextView
8275
android:id="@+id/media_info"
8376
android:layout_width="wrap_content"
8477
android:layout_height="wrap_content"
85-
android:text="@string/media_info_default" />
78+
android:text="@string/media_info_default"/>
8679
LinearLayout>
8780

8881
ScrollView>

0 commit comments

Comments
 (0)