diff --git a/android/Snapcast/src/main/java/de/badaix/snapcast/ClientSettingsFragment.java b/android/Snapcast/src/main/java/de/badaix/snapcast/ClientSettingsFragment.java index 4f56a65b..a8d2db44 100644 --- a/android/Snapcast/src/main/java/de/badaix/snapcast/ClientSettingsFragment.java +++ b/android/Snapcast/src/main/java/de/badaix/snapcast/ClientSettingsFragment.java @@ -56,7 +56,6 @@ public class ClientSettingsFragment extends PreferenceFragment { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); -/* Bundle bundle = getArguments(); try { client = new Client(new JSONObject(bundle.getString("client"))); @@ -64,22 +63,6 @@ public class ClientSettingsFragment extends PreferenceFragment { e.printStackTrace(); } clientOriginal = new Client(client.toJson()); - final ArrayList streams = new ArrayList<>(); - try { - JSONArray jsonArray = new JSONArray(bundle.getString("streams")); - for (int i = 0; i < jsonArray.length(); i++) - streams.add(new Stream(jsonArray.getJSONObject(i))); - } catch (JSONException e) { - e.printStackTrace(); - } - - final CharSequence[] streamNames = new CharSequence[streams.size()]; - final CharSequence[] streamIds = new CharSequence[streams.size()]; - for (int i = 0; i < streams.size(); ++i) { - streamNames[i] = streams.get(i).getName(); - streamIds[i] = streams.get(i).getId(); - } -*/ // Load the preferences from an XML resource addPreferencesFromResource(R.xml.client_preferences); @@ -92,34 +75,7 @@ public class ClientSettingsFragment extends PreferenceFragment { return true; } }); -/* - prefStream = (ListPreference) findPreference("pref_client_stream"); - prefStream.setEntries(streamNames); - prefStream.setEntryValues(streamIds); - for (int i = 0; i < streams.size(); ++i) { - if (streamIds[i].equals(client.getConfig().getStream())) { - prefStream.setSummary(streamNames[i]); - prefStream.setValueIndex(i); - break; - } - } - prefStream.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - for (int i = 0; i < streams.size(); ++i) { - if (streamIds[i].equals(newValue)) { - prefStream.setSummary(streamNames[i]); - client.getConfig().setStream(streamIds[i].toString()); - prefStream.setValueIndex(i); - break; - } - } - - return false; - } - }); -*/ prefMac = (Preference) findPreference("pref_client_mac"); prefId = (Preference) findPreference("pref_client_id"); prefIp = (Preference) findPreference("pref_client_ip"); diff --git a/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceActivity.java b/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceActivity.java index b3899bea..a850f2a1 100644 --- a/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceActivity.java +++ b/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceActivity.java @@ -29,11 +29,14 @@ import android.view.MenuItem; */ public class GroupPreferenceActivity extends AppCompatActivity { + + private GroupPreferenceFragment groupPreferenceFragment; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - GroupPreferenceFragment groupPreferenceFragment = new GroupPreferenceFragment(); + groupPreferenceFragment = new GroupPreferenceFragment(); groupPreferenceFragment.setArguments(getIntent().getExtras()); // Display the fragment as the main content. getFragmentManager().beginTransaction() @@ -52,8 +55,10 @@ public class GroupPreferenceActivity extends AppCompatActivity { @Override public void onBackPressed() { Intent intent = new Intent(); -// intent.putExtra("client", clientSettingsFragment.getClient().toJson().toString()); -// intent.putExtra("clientOriginal", clientSettingsFragment.getOriginalClientInfo().toJson().toString()); + + intent.putStringArrayListExtra("clients", groupPreferenceFragment.getClients()); + intent.putExtra("stream", groupPreferenceFragment.getStream()); + intent.putExtra("group", groupPreferenceFragment.getGroup().getId()); setResult(Activity.RESULT_OK, intent); finish(); } diff --git a/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceFragment.java b/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceFragment.java index 83a27e2e..172232c9 100644 --- a/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceFragment.java +++ b/android/Snapcast/src/main/java/de/badaix/snapcast/GroupPreferenceFragment.java @@ -25,6 +25,7 @@ import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; +import android.util.Log; import org.json.JSONException; import org.json.JSONObject; @@ -41,9 +42,14 @@ import de.badaix.snapcast.control.json.Stream; */ public class GroupPreferenceFragment extends PreferenceFragment { + + private static final String TAG = "GroupPreferenceFragment"; + private ListPreference prefStreams; private Group group = null; private ServerStatus serverStatus = null; + private PreferenceCategory prefCatClients = null; + @Override public void onCreate(Bundle savedInstanceState) { @@ -99,7 +105,7 @@ public class GroupPreferenceFragment extends PreferenceFragment { }); - PreferenceCategory prefStream = (PreferenceCategory) findPreference("pref_cat_clients"); + prefCatClients = (PreferenceCategory) findPreference("pref_cat_clients"); for (Group g : serverStatus.getGroups()) { for (Client client : g.getClients()) { @@ -107,8 +113,27 @@ public class GroupPreferenceFragment extends PreferenceFragment { checkBoxPref.setKey(client.getId()); checkBoxPref.setTitle(client.getVisibleName()); checkBoxPref.setChecked(g.getId().equals(group.getId())); - prefStream.addPreference(checkBoxPref); + checkBoxPref.setPersistent(false); + prefCatClients.addPreference(checkBoxPref); } } } + + public ArrayList getClients() { + ArrayList clients = new ArrayList<>(); + for (int i=0; i clients = data.getStringArrayListExtra("client"); + String streamId = data.getStringExtra("stream"); + String groupId = data.getStringExtra("group"); + remoteControl.setStream(groupId, streamId); + Group group = serverStatus.getGroup(groupId); + group.setStreamId(streamId); + serverStatus.updateGroup(group); + MainActivity.this.runOnUiThread(new Runnable() { + @Override + public void run() { + clientListFragment.updateServer(MainActivity.this.serverStatus); + } + }); } } diff --git a/android/Snapcast/src/main/java/de/badaix/snapcast/control/RemoteControl.java b/android/Snapcast/src/main/java/de/badaix/snapcast/control/RemoteControl.java index 2e3c2169..ca1927a1 100644 --- a/android/Snapcast/src/main/java/de/badaix/snapcast/control/RemoteControl.java +++ b/android/Snapcast/src/main/java/de/badaix/snapcast/control/RemoteControl.java @@ -209,8 +209,12 @@ public class RemoteControl implements TcpClient.TcpClientListener { } public void setStream(Group group, String id) { + setStream(group.getId(), id); + } + + public void setStream(String group, String id) { try { - JSONObject request = jsonRequest("Group.SetStream", new JSONObject("{\"group\": \"" + group.getId() + "\", \"id\": \"" + id + "\"}")); + JSONObject request = jsonRequest("Group.SetStream", new JSONObject("{\"group\": \"" + group + "\", \"id\": \"" + id + "\"}")); tcpClient.sendMessage(request.toString()); } catch (JSONException e) { e.printStackTrace(); diff --git a/android/Snapcast/src/main/java/de/badaix/snapcast/control/json/ServerStatus.java b/android/Snapcast/src/main/java/de/badaix/snapcast/control/json/ServerStatus.java index 1ee60e2d..80416111 100644 --- a/android/Snapcast/src/main/java/de/badaix/snapcast/control/json/ServerStatus.java +++ b/android/Snapcast/src/main/java/de/badaix/snapcast/control/json/ServerStatus.java @@ -164,6 +164,13 @@ public class ServerStatus implements JsonSerialisable { return null; } + public Group getGroup(String id) { + for (Group g : groups) + if ((g != null) && (g.getId().equals(id))) + return g; + return null; + } + public JSONArray getJsonStreams() { JSONArray jsonArray = new JSONArray(); for (Stream stream : streams) diff --git a/android/Snapcast/src/main/res/xml/client_preferences.xml b/android/Snapcast/src/main/res/xml/client_preferences.xml index 374fb22b..97b1e91b 100644 --- a/android/Snapcast/src/main/res/xml/client_preferences.xml +++ b/android/Snapcast/src/main/res/xml/client_preferences.xml @@ -4,10 +4,6 @@ android:key="pref_client_name" android:summary="name" android:title="@string/client_name"/> -