Skip to content

Commit cd837aa

Browse files
author
Chris Bellew
committed
Refresh "select a plex client" list when a chromecast is added or removed.
1 parent f6df362 commit cd837aa

File tree

2 files changed

+40
-26
lines changed

2 files changed

+40
-26
lines changed

Voice Control For Plex/src/main/java/com/atomjack/vcfp/LocalScan.java

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@
1313
import com.atomjack.vcfp.model.PlexClient;
1414
import com.atomjack.vcfp.model.PlexServer;
1515

16-
import java.util.Map;
1716
import java.util.concurrent.ConcurrentHashMap;
1817

1918
public class LocalScan {
2019
private Context context;
2120
private Class theClass;
2221
private Dialog searchDialog;
23-
private Dialog serverSelectDialog = null;
22+
private Dialog deviceSelectDialog = null;
2423
private ScanHandler scanHandler;
2524

2625
public LocalScan(Context ctx, Class cls, ScanHandler handler) {
@@ -64,14 +63,14 @@ public void showPlexServers() {
6463
public void showPlexServers(ConcurrentHashMap<String, PlexServer> servers) {
6564
if(searchDialog != null)
6665
searchDialog.dismiss();
67-
if(serverSelectDialog == null) {
68-
serverSelectDialog = new Dialog(context);
66+
if(deviceSelectDialog == null) {
67+
deviceSelectDialog = new Dialog(context);
6968
}
70-
serverSelectDialog.setContentView(R.layout.server_select);
71-
serverSelectDialog.setTitle("Select a Plex Server");
72-
serverSelectDialog.show();
69+
deviceSelectDialog.setContentView(R.layout.server_select);
70+
deviceSelectDialog.setTitle("Select a Plex Server");
71+
deviceSelectDialog.show();
7372

74-
final ListView serverListView = (ListView)serverSelectDialog.findViewById(R.id.serverListView);
73+
final ListView serverListView = (ListView) deviceSelectDialog.findViewById(R.id.serverListView);
7574
if(servers == null)
7675
servers = new ConcurrentHashMap<String, PlexServer>(VoiceControlForPlexApplication.servers);
7776
final PlexListAdapter adapter = new PlexListAdapter(context, PlexListAdapter.TYPE_SERVER);
@@ -83,7 +82,7 @@ public void showPlexServers(ConcurrentHashMap<String, PlexServer> servers) {
8382
public void onItemClick(AdapterView<?> parentAdapter, View view, int position, long id) {
8483
Logger.d("Clicked position %d", position);
8584
PlexServer s = (PlexServer)parentAdapter.getItemAtPosition(position);
86-
serverSelectDialog.dismiss();
85+
deviceSelectDialog.dismiss();
8786
scanHandler.onDeviceSelected(s, false);
8887
}
8988
});
@@ -130,31 +129,42 @@ public void showPlexClients(boolean showResume) {
130129
showPlexClients(showResume, null);
131130
}
132131

132+
public void deviceSelectDialogRefresh() {
133+
ListView serverListView = (ListView) deviceSelectDialog.findViewById(R.id.serverListView);
134+
PlexListAdapter adapter = (PlexListAdapter)serverListView.getAdapter();
135+
adapter.setClients(VoiceControlForPlexApplication.getAllClients());
136+
adapter.notifyDataSetChanged();
137+
}
138+
139+
public boolean isDeviceDialogShowing() {
140+
return deviceSelectDialog != null && deviceSelectDialog.isShowing();
141+
}
142+
133143
public void showPlexClients(boolean showResume, final ScanHandler onFinish) {
134144
if (searchDialog != null)
135145
searchDialog.dismiss();
136-
if (serverSelectDialog == null) {
137-
serverSelectDialog = new Dialog(context);
146+
if (deviceSelectDialog == null) {
147+
deviceSelectDialog = new Dialog(context);
138148
}
139-
serverSelectDialog.setContentView(R.layout.server_select);
140-
serverSelectDialog.setTitle(R.string.select_plex_client);
141-
serverSelectDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
149+
deviceSelectDialog.setContentView(R.layout.server_select);
150+
deviceSelectDialog.setTitle(R.string.select_plex_client);
151+
deviceSelectDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
142152
@Override
143153
public void onCancel(DialogInterface dialogInterface) {
144154
if (onFinish == null && scanHandler != null)
145155
scanHandler.onDeviceSelected(null, false);
146-
else if(onFinish != null)
156+
else if (onFinish != null)
147157
onFinish.onDeviceSelected(null, false);
148158
}
149159
});
150-
serverSelectDialog.show();
160+
deviceSelectDialog.show();
151161

152162
if (showResume) {
153-
CheckBox resumeCheckbox = (CheckBox) serverSelectDialog.findViewById(R.id.serverListResume);
163+
CheckBox resumeCheckbox = (CheckBox) deviceSelectDialog.findViewById(R.id.serverListResume);
154164
resumeCheckbox.setVisibility(View.VISIBLE);
155165
}
156166

157-
final ListView serverListView = (ListView) serverSelectDialog.findViewById(R.id.serverListView);
167+
final ListView serverListView = (ListView) deviceSelectDialog.findViewById(R.id.serverListView);
158168
final PlexListAdapter adapter = new PlexListAdapter(context, PlexListAdapter.TYPE_CLIENT);
159169
adapter.setClients(VoiceControlForPlexApplication.getAllClients());
160170
serverListView.setAdapter(adapter);
@@ -164,8 +174,8 @@ else if(onFinish != null)
164174
public void onItemClick(AdapterView<?> parentAdapter, View view, int position,
165175
long id) {
166176
PlexClient s = (PlexClient) parentAdapter.getItemAtPosition(position);
167-
serverSelectDialog.dismiss();
168-
CheckBox resumeCheckbox = (CheckBox) serverSelectDialog.findViewById(R.id.serverListResume);
177+
deviceSelectDialog.dismiss();
178+
CheckBox resumeCheckbox = (CheckBox) deviceSelectDialog.findViewById(R.id.serverListResume);
169179
if (onFinish == null)
170180
scanHandler.onDeviceSelected(s, resumeCheckbox.isChecked());
171181
else

Voice Control For Plex/src/main/java/com/atomjack/vcfp/activities/MainActivity.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,13 +1006,17 @@ public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo route)
10061006
{
10071007
Logger.d("onRouteAdded: %s", route);
10081008
if(!VoiceControlForPlexApplication.castClients.containsKey(route.getName())) {
1009-
PlexClient client = new PlexClient();
1010-
client.isCastClient = true;
1011-
client.name = route.getName();
1012-
client.product = route.getDescription();
1013-
client.castDevice = CastDevice.getFromBundle(route.getExtras());
1014-
VoiceControlForPlexApplication.castClients.put(client.name, client);
1009+
PlexClient client = new PlexClient();
1010+
client.isCastClient = true;
1011+
client.name = route.getName();
1012+
client.product = route.getDescription();
1013+
client.castDevice = CastDevice.getFromBundle(route.getExtras());
1014+
VoiceControlForPlexApplication.castClients.put(client.name, client);
10151015
Preferences.put(Preferences.SAVED_CAST_CLIENTS, gsonWrite.toJson(VoiceControlForPlexApplication.castClients));
1016+
// If the "select a plex client" dialog is showing, refresh the list of clients
1017+
if(localScan.isDeviceDialogShowing()) {
1018+
localScan.deviceSelectDialogRefresh();
1019+
}
10161020
}
10171021
}
10181022

0 commit comments

Comments
 (0)