filled group preferences with life

This commit is contained in:
badaix 2016-12-07 22:45:56 +01:00
parent 6c5c998743
commit cef98e850d
9 changed files with 75 additions and 61 deletions

View file

@ -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<Stream> 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");

View file

@ -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();
}

View file

@ -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<String> getClients() {
ArrayList<String> clients = new ArrayList<>();
for (int i=0; i<prefCatClients.getPreferenceCount(); ++i) {
CheckBoxPreference checkBoxPref = (CheckBoxPreference) prefCatClients.getPreference(i);
if (checkBoxPref.isChecked())
clients.add(checkBoxPref.getKey());
}
return clients;
}
public String getStream() {
return prefStreams.getValue();
}
public Group getGroup() {
return group;
}
}

View file

@ -45,7 +45,11 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.UnknownHostException;
import java.util.ArrayList;
import de.badaix.snapcast.control.RemoteControl;
import de.badaix.snapcast.control.json.Client;
@ -384,13 +388,14 @@ public class MainActivity extends AppCompatActivity implements GroupItem.GroupIt
return;
}
if (requestCode == CLIENT_PROPERTIES_REQUEST) {
/* TODO: group Client client = null;
Client client = null;
try {
client = new Client(new JSONObject(data.getStringExtra("client")));
} catch (JSONException e) {
e.printStackTrace();
return;
}
Client clientOriginal = null;
try {
clientOriginal = new Client(new JSONObject(data.getStringExtra("clientOriginal")));
@ -401,15 +406,30 @@ public class MainActivity extends AppCompatActivity implements GroupItem.GroupIt
Log.d(TAG, "new name: " + client.getConfig().getName() + ", old name: " + clientOriginal.getConfig().getName());
if (!client.getConfig().getName().equals(clientOriginal.getConfig().getName()))
remoteControl.setName(client, client.getConfig().getName());
Log.d(TAG, "new stream: " + client.getConfig().getStream() + ", old stream: " + clientOriginal.getConfig().getStream());
if (!client.getConfig().getStream().equals(clientOriginal.getConfig().getStream()))
remoteControl.setStream(client, client.getConfig().getStream());
Log.d(TAG, "new latency: " + client.getConfig().getLatency() + ", old latency: " + clientOriginal.getConfig().getLatency());
if (client.getConfig().getLatency() != clientOriginal.getConfig().getLatency())
remoteControl.setLatency(client, client.getConfig().getLatency());
serverStatus.updateClient(client);
sectionsPagerAdapter.updateServer(serverStatus);
*/
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
clientListFragment.updateServer(MainActivity.this.serverStatus);
}
});
} else if (requestCode == GROUP_PROPERTIES_REQUEST) {
ArrayList<String> 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);
}
});
}
}

View file

@ -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();

View file

@ -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)

View file

@ -4,10 +4,6 @@
android:key="pref_client_name"
android:summary="name"
android:title="@string/client_name"/>
<ListPreference
android:key="pref_client_stream"
android:summary="stream"
android:title="@string/client_stream"/>
<EditTextPreference
android:inputType="numberSigned"
android:key="pref_client_latency"

View file

@ -4,6 +4,7 @@
android:title="Stream"/>
<ListPreference
android:key="pref_stream"
android:persistent="false"
android:title=""/>
<PreferenceCategory
android:key="pref_cat_clients"

View file

@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.android.tools.build:gradle:2.2.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files