Skip to content

Commit 3397495

Browse files
committed
Simplify the interface.
Simplify the interface by removing the various prepare/play buttons for media ID, search, and URI, and building a Spinner that presents choices of media ID, search, URI, and none, and a single pair of prepare & play buttons. Change-Id: Icbcd43d52c002501a03e879bdc96d8e2e5d3e624
1 parent ef5f6ff commit 3397495

File tree

11 files changed

+173
-54
lines changed

11 files changed

+173
-54
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2014 The Android Open Source Project
2+
* Copyright (C) 2017 The Android Open Source Project
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (C) 2014 The Android Open Source Project
1+
# Copyright (C) 2017 The Android Open Source Project
22
#
33
# Licensed under the Apache License, Version 2.0 (the "License");
44
# you may not use this file except in compliance with the License.

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

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,46 @@ public MediaControllerAction getMediaControllerAction() {
5959
return mControllerAction;
6060
}
6161

62-
public static List<Action> createActions(@NonNull final Context context) {
62+
public static List<Action> createPreparePlayActions(@NonNull final Context context) {
6363
List<Action> actions = new ArrayList<>();
6464
Action action;
6565

66-
action = new Action(context.getString(R.string.action_prepare));
66+
/*
67+
* The order of these must match the order of the string-array, "input_options",
68+
* contained in strings.xml.
69+
*/
70+
action = new Action(context.getString(R.string.action_prepare_search));
6771
action.setMediaControllerAction(new MediaControllerAction() {
6872
@Override
6973
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
70-
controller.getTransportControls().prepare();
74+
controller.getTransportControls().prepareFromSearch(id, extras);
7175
}
7276
});
7377
actions.add(action);
7478

75-
action = new Action(context.getString(R.string.action_play));
79+
action = new Action(context.getString(R.string.action_play_search));
7680
action.setMediaControllerAction(new MediaControllerAction() {
7781
@Override
7882
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
79-
controller.getTransportControls().play();
83+
controller.getTransportControls().playFromSearch(id, extras);
84+
}
85+
});
86+
actions.add(action);
87+
88+
action = new Action(context.getString(R.string.action_prepare_id));
89+
action.setMediaControllerAction(new MediaControllerAction() {
90+
@Override
91+
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
92+
controller.getTransportControls().prepareFromMediaId(id, extras);
93+
}
94+
});
95+
actions.add(action);
96+
97+
action = new Action(context.getString(R.string.action_play_id));
98+
action.setMediaControllerAction(new MediaControllerAction() {
99+
@Override
100+
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
101+
controller.getTransportControls().playFromMediaId(id, extras);
80102
}
81103
});
82104
actions.add(action);
@@ -109,41 +131,30 @@ public void run(@NonNull MediaControllerCompat controller, String id, Bundle ext
109131
});
110132
actions.add(action);
111133

112-
action = new Action(context.getString(R.string.action_prepare_id));
134+
action = new Action(context.getString(R.string.action_prepare));
113135
action.setMediaControllerAction(new MediaControllerAction() {
114136
@Override
115137
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
116-
controller.getTransportControls().prepareFromMediaId(id, extras);
138+
controller.getTransportControls().prepare();
117139
}
118140
});
119141
actions.add(action);
120142

121-
action = new Action(context.getString(R.string.action_play_id));
143+
action = new Action(context.getString(R.string.action_play));
122144
action.setMediaControllerAction(new MediaControllerAction() {
123145
@Override
124146
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
125-
controller.getTransportControls().playFromMediaId(id, extras);
147+
controller.getTransportControls().play();
126148
}
127149
});
128150
actions.add(action);
129151

130-
action = new Action(context.getString(R.string.action_prepare_search));
131-
action.setMediaControllerAction(new MediaControllerAction() {
132-
@Override
133-
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
134-
controller.getTransportControls().prepareFromSearch(id, extras);
135-
}
136-
});
137-
actions.add(action);
152+
return actions;
153+
}
138154

139-
action = new Action(context.getString(R.string.action_play_search));
140-
action.setMediaControllerAction(new MediaControllerAction() {
141-
@Override
142-
public void run(@NonNull MediaControllerCompat controller, String id, Bundle extras) {
143-
controller.getTransportControls().playFromSearch(id, extras);
144-
}
145-
});
146-
actions.add(action);
155+
public static List<Action> createActions(@NonNull final Context context) {
156+
List<Action> actions = new ArrayList<>();
157+
Action action;
147158

148159
action = new Action(context.getString(R.string.action_resume));
149160
action.setMediaControllerAction(new MediaControllerAction() {

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

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.example.android.mediacontroller;
1717

1818
import android.app.Activity;
19+
import android.content.Context;
1920
import android.content.Intent;
2021
import android.graphics.Bitmap;
2122
import android.graphics.drawable.BitmapDrawable;
@@ -37,9 +38,11 @@
3738
import android.widget.Button;
3839
import android.widget.EditText;
3940
import android.widget.LinearLayout;
41+
import android.widget.Spinner;
4042
import android.widget.TextView;
4143

4244
import java.util.HashMap;
45+
import java.util.List;
4346
import java.util.Map;
4447

4548
/**
@@ -70,6 +73,7 @@ public class MediaAppControllerActivity extends AppCompatActivity {
7073
private MediaBrowserCompat mBrowser;
7174

7275
private View mRootView;
76+
private Spinner mInputTypeView;
7377
private EditText mUriInput;
7478
private TextView mMediaInfoText;
7579

@@ -95,6 +99,7 @@ protected void onCreate(Bundle savedInstanceState) {
9599
setSupportActionBar(toolbar);
96100

97101
mRootView = findViewById(R.id.root_view);
102+
mInputTypeView = (Spinner) findViewById(R.id.input_type);
98103
mUriInput = (EditText) findViewById(R.id.uri_id_query);
99104
mMediaInfoText = (TextView) findViewById(R.id.media_info);
100105

@@ -107,16 +112,6 @@ protected void onCreate(Bundle savedInstanceState) {
107112
setupButtons();
108113
setupMediaController();
109114

110-
findViewById(R.id.update_media_info_btn).setOnClickListener(new View.OnClickListener() {
111-
@Override
112-
public void onClick(View view) {
113-
String mediaInfoStr = fetchMediaInfo();
114-
if (mediaInfoStr != null) {
115-
mMediaInfoText.setText(mediaInfoStr);
116-
}
117-
}
118-
});
119-
120115
final ActionBar actionBar = getSupportActionBar();
121116
if (actionBar != null) {
122117
final Bitmap toolbarIcon =
@@ -178,6 +173,11 @@ private void setupMediaController() {
178173
}
179174

180175
private void setupButtons() {
176+
177+
final PreparePlayHandler preparePlayHandler = new PreparePlayHandler(this);
178+
findViewById(R.id.action_prepare).setOnClickListener(preparePlayHandler);
179+
findViewById(R.id.action_play).setOnClickListener(preparePlayHandler);
180+
181181
LinearLayout buttonList = (LinearLayout) findViewById(R.id.activity_main);
182182
for (final Action action : Action.createActions(this)) {
183183
Button button = new Button(this);
@@ -236,6 +236,57 @@ private void addMediaInfo(Map mediaInfos, String key, String val
236236
}
237237
}
238238

239+
private class PreparePlayHandler implements View.OnClickListener {
240+
/*
241+
* Indexes of the values in the "input_options" string array.
242+
*/
243+
private static final int INDEX_SEARCH = 0;
244+
private static final int INDEX_MEDIA_ID = 1;
245+
private static final int INDEX_URI = 2;
246+
private static final int INDEX_NO_PARAM = 3;
247+
248+
/*
249+
* Indexes to the Actions returned by Action.createPreparePlayActions(Context).
250+
*/
251+
private static final int ACTION_INDEX_SEARCH = INDEX_SEARCH * 2;
252+
private static final int ACTION_INDEX_MEDIA_ID = INDEX_MEDIA_ID * 2;
253+
private static final int ACTION_INDEX_URI = INDEX_URI * 2;
254+
private static final int ACTION_INDEX_NO_PARAM = INDEX_NO_PARAM * 2;
255+
256+
private final List<Action> mPreparePlayActions;
257+
258+
private PreparePlayHandler(final Context context) {
259+
mPreparePlayActions = Action.createPreparePlayActions(context);
260+
}
261+
262+
@Override
263+
public void onClick(final View button) {
264+
final int prepareOrPlay = button.getId() == R.id.action_prepare ? 0 : 1;
265+
266+
final Action action;
267+
switch (mInputTypeView.getSelectedItemPosition()) {
268+
case INDEX_NO_PARAM:
269+
action = mPreparePlayActions.get(ACTION_INDEX_NO_PARAM + prepareOrPlay);
270+
break;
271+
case INDEX_MEDIA_ID:
272+
action = mPreparePlayActions.get(ACTION_INDEX_MEDIA_ID + prepareOrPlay);
273+
break;
274+
case INDEX_SEARCH:
275+
action = mPreparePlayActions.get(ACTION_INDEX_SEARCH + prepareOrPlay);
276+
break;
277+
case INDEX_URI:
278+
action = mPreparePlayActions.get(ACTION_INDEX_URI + prepareOrPlay);
279+
break;
280+
default:
281+
throw new IllegalStateException("Unknown input type: " +
282+
mInputTypeView.getSelectedItemPosition());
283+
}
284+
285+
final String data = mUriInput.getText().toString();
286+
action.getMediaControllerAction().run(mController, data, null);
287+
}
288+
}
289+
239290
private class MyConnectionCallback extends MediaBrowserCompat.ConnectionCallback {
240291

241292
@Override
@@ -248,6 +299,15 @@ public void onConnected() {
248299
mController.registerCallback(new MediaControllerCompat.Callback() {
249300
@Override
250301
public void onPlaybackStateChanged(PlaybackStateCompat playbackState) {
302+
onUpdate();
303+
}
304+
305+
@Override
306+
public void onMetadataChanged(MediaMetadataCompat metadata) {
307+
onUpdate();
308+
}
309+
310+
private void onUpdate() {
251311
String newText = "PlaybackState changed!";
252312
String mediaInfoStr = fetchMediaInfo();
253313
if (mediaInfoStr != null) {

mediacontroller/src/main/res/drawable/ic_no_apps_black_24dp.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mediacontroller/src/main/res/layout/activity_launch.xml
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
xml version="1.0" encoding="utf-8"?>
22
mediacontroller/src/main/res/layout/activity_media_app_controller.xml
Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
xml version="1.0" encoding="utf-8"?>mediacontroller/src/main/res/layout/media_app_item.xml
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
xml version="1.0" encoding="utf-8"?>
22
mediacontroller/src/main/res/values/dimens.xml
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
<dimen name="margin_small">8dpdimen>
2323
<dimen name="toolbar_icon_size">24dpdimen>
2424

25+
<dimen name="control_padding">4dpdimen>
26+
2527
<dimen name="app_icon_size">48dpdimen>
2628
<dimen name="app_name_text_size">18spdimen>
2729
<dimen name="app_package_text_size">12spdimen>

mediacontroller/src/main/res/values/strings.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@
3939
<string name="info_artist_string">Artiststring>
4040
<string name="info_album_string">Albumstring>
4141

42+
46+
<string-array name="input_options">
47+
<item>Searchitem>
48+
<item>Media IDitem>
49+
<item>URIitem>
50+
<item>No Inputitem>
51+
string-array>
52+
4253
<string name="action_prepare">Preparestring>
4354
<string name="action_prepare_uri">Prepare URIstring>
4455
<string name="action_prepare_id">Prepare media IDstring>

mediacontroller/src/main/res/values/styles.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,12 @@
2727
<item name="windowNoTitle">trueitem>
2828
style>
2929

30-
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
30+
<style name="MediaControl" parent="AppTheme">
31+
<item name="android:padding">@dimen/control_paddingitem>
32+
style>
33+
34+
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
3135

32-
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
36+
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
3337

3438
resources>

0 commit comments

Comments
 (0)