diff options
Diffstat (limited to 'app/src/main/java')
-rw-r--r-- | app/src/main/java/com/wireguard/android/ProfileDetailFragment.java | 25 | ||||
-rw-r--r-- | app/src/main/java/com/wireguard/android/ProfileFragment.java | 53 |
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; + } +} |