summaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/com/wireguard/android/ProfileDetailFragment.java25
-rw-r--r--app/src/main/java/com/wireguard/android/ProfileFragment.java53
2 files changed, 62 insertions, 16 deletions
diff --git a/app/src/main/java/com/wireguard/android/ProfileDetailFragment.java b/app/src/main/java/com/wireguard/android/ProfileDetailFragment.java
index 4af7fb25..2aa40c06 100644
--- a/app/src/main/java/com/wireguard/android/ProfileDetailFragment.java
+++ b/app/src/main/java/com/wireguard/android/ProfileDetailFragment.java
@@ -10,22 +10,15 @@ import android.view.ViewGroup;
import com.wireguard.android.databinding.ProfileDetailFragmentBinding;
/**
- * Fragment for viewing and editing a WireGuard profile.
+ * Fragment for viewing information about a WireGuard profile.
*/
-public class ProfileDetailFragment extends ServiceClientFragment<ProfileServiceInterface> {
+public class ProfileDetailFragment extends ProfileFragment {
private ProfileDetailFragmentBinding binding;
- private String name;
-
- public ProfileDetailFragment() {
- super();
- setArguments(new Bundle());
- }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- name = getArguments().getString(ProfileActivity.KEY_PROFILE_NAME);
setHasOptionsMenu(true);
}
@@ -37,20 +30,20 @@ public class ProfileDetailFragment extends ServiceClientFragment<ProfileServiceI
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
binding = ProfileDetailFragmentBinding.inflate(inflater, parent, false);
+ binding.setProfile(getCachedProfile());
return binding.getRoot();
}
@Override
public void onServiceConnected(ProfileServiceInterface service) {
super.onServiceConnected(service);
- binding.setProfile(service.getProfiles().get(name));
+ binding.setProfile(service.getProfiles().get(getProfile()));
}
- public void setProfile(String name) {
- this.name = name;
- getArguments().putString(ProfileActivity.KEY_PROFILE_NAME, name);
- final ProfileServiceInterface service = getService();
- if (binding != null && service != null)
- binding.setProfile(service.getProfiles().get(name));
+ @Override
+ public void setProfile(String profile) {
+ super.setProfile(profile);
+ if (binding != null)
+ binding.setProfile(getCachedProfile());
}
}
diff --git a/app/src/main/java/com/wireguard/android/ProfileFragment.java b/app/src/main/java/com/wireguard/android/ProfileFragment.java
new file mode 100644
index 00000000..cf1c690e
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/ProfileFragment.java
@@ -0,0 +1,53 @@
+package com.wireguard.android;
+
+import android.os.Bundle;
+
+import com.wireguard.config.Profile;
+
+/**
+ * Base class for fragments that need to remember which profile they belong to.
+ */
+
+abstract class ProfileFragment extends ServiceClientFragment<ProfileServiceInterface> {
+ private Profile cachedProfile;
+ private String profile;
+
+ protected Profile getCachedProfile() {
+ return cachedProfile;
+ }
+
+ public String getProfile() {
+ return profile;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // Restore the saved profile if there is one; otherwise grab it from the arguments.
+ if (savedInstanceState != null)
+ profile = savedInstanceState.getString(ProfileActivity.KEY_PROFILE_NAME);
+ else if (getArguments() != null)
+ profile = getArguments().getString(ProfileActivity.KEY_PROFILE_NAME);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putString(ProfileActivity.KEY_PROFILE_NAME, profile);
+ }
+
+ @Override
+ public void onServiceConnected(ProfileServiceInterface service) {
+ super.onServiceConnected(service);
+ cachedProfile = service.getProfiles().get(profile);
+ }
+
+ public void setProfile(String profile) {
+ this.profile = profile;
+ final ProfileServiceInterface service = getService();
+ if (service != null)
+ cachedProfile = service.getProfiles().get(profile);
+ else
+ cachedProfile = null;
+ }
+}