wireguard-android/app/src/main/java/com/wireguard/android/ProfileFragment.java
Samuel Holland d6d6f34088 ProfileFragment: Make good use of the cached profile
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2017-08-10 00:57:44 -05:00

62 lines
1.8 KiB
Java

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;
}
protected void onCachedProfileChanged(Profile cachedProfile) {
}
@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)
setProfile(savedInstanceState.getString(ProfileActivity.KEY_PROFILE_NAME));
else if (getArguments() != null)
setProfile(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);
updateCachedProfile(service);
}
public void setProfile(String profile) {
this.profile = profile;
updateCachedProfile(getService());
}
private void updateCachedProfile(ProfileServiceInterface service) {
final Profile newCachedProfile = service != null
? service.getProfiles().get(profile) : null;
if (newCachedProfile != cachedProfile) {
cachedProfile = newCachedProfile;
onCachedProfileChanged(newCachedProfile);
}
}
}