Convert to using the ObservableTreeMap and its adapter
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
97149fff3f
commit
25412e0537
@ -67,6 +67,33 @@ public final class BindingAdapters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BindingAdapter({"items", "layout"})
|
||||||
|
public static <K extends Comparable<K>, V> void sortedMapBinding(final ListView view,
|
||||||
|
final ObservableSortedMap<K, V> oldMap,
|
||||||
|
final int oldLayoutId,
|
||||||
|
final ObservableSortedMap<K, V> newMap,
|
||||||
|
final int newLayoutId) {
|
||||||
|
// Remove any existing binding when there is no new map.
|
||||||
|
if (newMap == null) {
|
||||||
|
view.setAdapter(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// The ListAdapter interface is not generic, so this cannot be checked.
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
ObservableMapAdapter<K, V> adapter = (ObservableMapAdapter<K, V>) view.getAdapter();
|
||||||
|
// If the layout changes, any existing adapter must be replaced.
|
||||||
|
if (newLayoutId != oldLayoutId)
|
||||||
|
adapter = null;
|
||||||
|
// Add a new binding if there was none, or if it must be replaced due to a layout change.
|
||||||
|
if (adapter == null) {
|
||||||
|
adapter = new ObservableMapAdapter<>(view.getContext(), newLayoutId, newMap);
|
||||||
|
view.setAdapter(adapter);
|
||||||
|
} else if (newMap != oldMap) {
|
||||||
|
// Changing the list only requires modifying the existing adapter.
|
||||||
|
adapter.setMap(newMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@BindingAdapter({"android:textStyle"})
|
@BindingAdapter({"android:textStyle"})
|
||||||
public static void textStyleBinding(final TextView view, final Typeface typeface) {
|
public static void textStyleBinding(final TextView view, final Typeface typeface) {
|
||||||
view.setTypeface(typeface);
|
view.setTypeface(typeface);
|
||||||
|
@ -78,7 +78,10 @@ public class ConfigListFragment extends BaseConfigFragment {
|
|||||||
|
|
||||||
private void setConfigChecked(final Config config) {
|
private void setConfigChecked(final Config config) {
|
||||||
if (config != null) {
|
if (config != null) {
|
||||||
final int position = VpnService.getInstance().getConfigs().indexOfKey(config.getName());
|
@SuppressWarnings("unchecked")
|
||||||
|
final ObservableMapAdapter<String, Config> adapter =
|
||||||
|
(ObservableMapAdapter<String, Config>) listView.getAdapter();
|
||||||
|
final int position = adapter.getItemPosition(config.getName());
|
||||||
if (position >= 0)
|
if (position >= 0)
|
||||||
listView.setItemChecked(position, true);
|
listView.setItemChecked(position, true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -41,7 +41,7 @@ public class VpnService extends Service
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final IBinder binder = new Binder();
|
private final IBinder binder = new Binder();
|
||||||
private final ObservableArrayMap<String, Config> configurations = new ObservableArrayMap<>();
|
private final ObservableTreeMap<String, Config> configurations = new ObservableTreeMap<>();
|
||||||
private final Set<String> enabledConfigs = new HashSet<>();
|
private final Set<String> enabledConfigs = new HashSet<>();
|
||||||
private SharedPreferences preferences;
|
private SharedPreferences preferences;
|
||||||
private Config primaryConfig;
|
private Config primaryConfig;
|
||||||
@ -103,7 +103,7 @@ public class VpnService extends Service
|
|||||||
*
|
*
|
||||||
* @return The set of known configurations.
|
* @return The set of known configurations.
|
||||||
*/
|
*/
|
||||||
public ObservableArrayMap<String, Config> getConfigs() {
|
public ObservableSortedMap<String, Config> getConfigs() {
|
||||||
return configurations;
|
return configurations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<!--suppress AndroidDomInspection -->
|
<!--suppress AndroidDomInspection -->
|
||||||
<variable
|
<variable
|
||||||
name="configs"
|
name="configs"
|
||||||
type="android.databinding.ObservableArrayMap<String, com.wireguard.config.Config>" />
|
type="com.wireguard.android.ObservableSortedMap<String, com.wireguard.config.Config>" />
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
|
Loading…
Reference in New Issue
Block a user