diff options
Diffstat (limited to 'app')
3 files changed, 17 insertions, 18 deletions
diff --git a/app/src/main/java/com/wireguard/android/ProfileService.java b/app/src/main/java/com/wireguard/android/ProfileService.java index aca47c1c..ea97a613 100644 --- a/app/src/main/java/com/wireguard/android/ProfileService.java +++ b/app/src/main/java/com/wireguard/android/ProfileService.java @@ -2,8 +2,7 @@ package com.wireguard.android; import android.app.Service; import android.content.Intent; -import android.databinding.ObservableArrayList; -import android.databinding.ObservableList; +import android.databinding.ObservableArrayMap; import android.os.AsyncTask; import android.os.Binder; import android.os.IBinder; @@ -28,7 +27,7 @@ public class ProfileService extends Service { private static final String TAG = "ProfileService"; private final IBinder binder = new ProfileServiceBinder(); - private final ObservableList<Profile> profiles = new ObservableArrayList<>(); + private final ObservableArrayMap<String, Profile> profiles = new ObservableArrayMap<>(); private RootShell rootShell; @Override @@ -58,9 +57,8 @@ public class ProfileService extends Service { private ProfileAdder(Profile profile, boolean shouldConnect) { super(); - for (Profile p : profiles) - if (p.getName().equals(profile.getName())) - throw new IllegalStateException("Profile already exists: " + profile.getName()); + if (profiles.get(profile.getName()) != null) + throw new IllegalStateException("Profile already exists: " + profile.getName()); this.profile = profile; this.shouldConnect = shouldConnect; } @@ -87,7 +85,7 @@ public class ProfileService extends Service { if (!result) return; profile.setIsConnected(false); - profiles.add(profile); + profiles.put(profile.getName(), profile); if (shouldConnect) new ProfileConnecter(profile).execute(); } @@ -176,7 +174,8 @@ public class ProfileService extends Service { protected void onPostExecute(List<Profile> loadedProfiles) { if (loadedProfiles == null) return; - profiles.addAll(loadedProfiles); + for (Profile profile : loadedProfiles) + profiles.put(profile.getName(), profile); } } @@ -208,7 +207,7 @@ public class ProfileService extends Service { protected void onPostExecute(Boolean result) { if (!result) return; - profiles.remove(profile); + profiles.remove(profile.getName()); if (replaceWith != null) new ProfileAdder(replaceWith, shouldConnect).execute(); } @@ -217,7 +216,7 @@ public class ProfileService extends Service { private class ProfileServiceBinder extends Binder implements ProfileServiceInterface { @Override public void connectProfile(Profile profile) { - if (!profiles.contains(profile)) + if (profiles.get(profile.getName()) != profile) return; if (profile.getIsConnected()) return; @@ -226,14 +225,14 @@ public class ProfileService extends Service { @Override public Profile copyProfileForEditing(Profile profile) { - if (!profiles.contains(profile)) + if (profiles.get(profile.getName()) != profile) return null; return profile.copy(); } @Override public void disconnectProfile(Profile profile) { - if (!profiles.contains(profile)) + if (profiles.get(profile.getName()) != profile) return; if (!profile.getIsConnected()) return; @@ -241,13 +240,13 @@ public class ProfileService extends Service { } @Override - public ObservableList<Profile> getProfiles() { + public ObservableArrayMap<String, Profile> getProfiles() { return profiles; } @Override public void removeProfile(Profile profile) { - if (!profiles.contains(profile)) + if (profiles.get(profile.getName()) != profile) return; if (profile.getIsConnected()) new ProfileDisconnecter(profile).execute(); @@ -257,7 +256,7 @@ public class ProfileService extends Service { @Override public void saveProfile(Profile oldProfile, Profile newProfile) { if (oldProfile != null) { - if (!profiles.contains(oldProfile)) + if (profiles.get(oldProfile.getName()) != oldProfile) return; final boolean wasConnected = oldProfile.getIsConnected(); if (wasConnected) diff --git a/app/src/main/java/com/wireguard/android/ProfileServiceInterface.java b/app/src/main/java/com/wireguard/android/ProfileServiceInterface.java index 272059bc..0e94727b 100644 --- a/app/src/main/java/com/wireguard/android/ProfileServiceInterface.java +++ b/app/src/main/java/com/wireguard/android/ProfileServiceInterface.java @@ -1,6 +1,6 @@ package com.wireguard.android; -import android.databinding.ObservableList; +import android.databinding.ObservableArrayMap; import com.wireguard.config.Profile; @@ -44,7 +44,7 @@ public interface ProfileServiceInterface { * * @return The list of known profiles. */ - ObservableList<Profile> getProfiles(); + ObservableArrayMap<String, Profile> getProfiles(); /** * Remove a profile from being managed by this service. If the profile is currently connected, diff --git a/app/src/main/res/layout/profile_list_fragment.xml b/app/src/main/res/layout/profile_list_fragment.xml index 29ce62e7..c0edd444 100644 --- a/app/src/main/res/layout/profile_list_fragment.xml +++ b/app/src/main/res/layout/profile_list_fragment.xml @@ -6,7 +6,7 @@ <variable name="profiles" - type="android.databinding.ObservableList<com.wireguard.config.Profile>" /> + type="android.databinding.ObservableArrayMap<String, com.wireguard.config.Profile>" /> </data> <ListView |