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"})
|
||||
public static void textStyleBinding(final TextView view, final Typeface typeface) {
|
||||
view.setTypeface(typeface);
|
||||
|
@ -78,7 +78,10 @@ public class ConfigListFragment extends BaseConfigFragment {
|
||||
|
||||
private void setConfigChecked(final Config config) {
|
||||
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)
|
||||
listView.setItemChecked(position, true);
|
||||
} else {
|
||||
|
@ -41,7 +41,7 @@ public class VpnService extends Service
|
||||
}
|
||||
|
||||
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 SharedPreferences preferences;
|
||||
private Config primaryConfig;
|
||||
@ -103,7 +103,7 @@ public class VpnService extends Service
|
||||
*
|
||||
* @return The set of known configurations.
|
||||
*/
|
||||
public ObservableArrayMap<String, Config> getConfigs() {
|
||||
public ObservableSortedMap<String, Config> getConfigs() {
|
||||
return configurations;
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
<!--suppress AndroidDomInspection -->
|
||||
<variable
|
||||
name="configs"
|
||||
type="android.databinding.ObservableArrayMap<String, com.wireguard.config.Config>" />
|
||||
type="com.wireguard.android.ObservableSortedMap<String, com.wireguard.config.Config>" />
|
||||
</data>
|
||||
|
||||
<ListView
|
||||
|
Loading…
Reference in New Issue
Block a user