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