diff options
Diffstat (limited to 'app/src/main/java/com/wireguard/android/fragment')
5 files changed, 71 insertions, 60 deletions
diff --git a/app/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.java b/app/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.java index 15571297..50de0c39 100644 --- a/app/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.java +++ b/app/src/main/java/com/wireguard/android/fragment/AppListDialogFragment.java @@ -39,7 +39,7 @@ public class AppListDialogFragment extends DialogFragment { private static final String KEY_EXCLUDED_APPS = "excludedApps"; - private List<String> currentlyExcludedApps; + private final List<String> currentlyExcludedApps = Arrays.asList(getArguments().getStringArray(KEY_EXCLUDED_APPS)); private final ObservableKeyedList<String, ApplicationData> appData = new ObservableKeyedArrayList<>(); public static <T extends Fragment & AppExclusionListener> AppListDialogFragment newInstance(final String[] excludedApps, final T target) { @@ -52,23 +52,11 @@ public class AppListDialogFragment extends DialogFragment { } @Override - public void onCreate(@Nullable final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - currentlyExcludedApps = Arrays.asList(getArguments().getStringArray(KEY_EXCLUDED_APPS)); - } - - @Override - public void onAttach(final Context context) { - super.onAttach(context); - } - - @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); alertDialogBuilder.setTitle(R.string.excluded_applications); - AppListDialogFragmentBinding binding = AppListDialogFragmentBinding.inflate(getActivity().getLayoutInflater(), null, false); + final AppListDialogFragmentBinding binding = AppListDialogFragmentBinding.inflate(getActivity().getLayoutInflater(), null, false); binding.executePendingBindings(); alertDialogBuilder.setView(binding.getRoot()); diff --git a/app/src/main/java/com/wireguard/android/fragment/BaseFragment.java b/app/src/main/java/com/wireguard/android/fragment/BaseFragment.java index e1d4c87b..f4c6ea81 100644 --- a/app/src/main/java/com/wireguard/android/fragment/BaseFragment.java +++ b/app/src/main/java/com/wireguard/android/fragment/BaseFragment.java @@ -10,7 +10,7 @@ import android.content.Context; import android.content.Intent; import android.databinding.DataBindingUtil; import android.databinding.ViewDataBinding; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.util.Log; @@ -37,10 +37,11 @@ public abstract class BaseFragment extends Fragment implements OnSelectedTunnelC private static final String TAG = "WireGuard/" + BaseFragment.class.getSimpleName(); private static final int REQUEST_CODE_VPN_PERMISSION = 23491; - private BaseActivity activity; - private Tunnel pendingTunnel; - private Boolean pendingTunnelUp; + @Nullable private BaseActivity activity; + @Nullable private Tunnel pendingTunnel; + @Nullable private Boolean pendingTunnelUp; + @Nullable protected Tunnel getSelectedTunnel() { return activity != null ? activity.getSelectedTunnel() : null; } @@ -65,7 +66,7 @@ public abstract class BaseFragment extends Fragment implements OnSelectedTunnelC } @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { + public void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_VPN_PERMISSION) { @@ -76,7 +77,7 @@ public abstract class BaseFragment extends Fragment implements OnSelectedTunnelC } } - protected void setSelectedTunnel(final Tunnel tunnel) { + protected void setSelectedTunnel(@Nullable final Tunnel tunnel) { if (activity != null) activity.setSelectedTunnel(tunnel); } @@ -106,7 +107,7 @@ public abstract class BaseFragment extends Fragment implements OnSelectedTunnelC }); } - private void setTunnelStateWithPermissionsResult(@NonNull final Tunnel tunnel, final boolean checked) { + private void setTunnelStateWithPermissionsResult(final Tunnel tunnel, final boolean checked) { tunnel.setState(State.of(checked)).whenComplete((state, throwable) -> { if (throwable == null) return; diff --git a/app/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.java b/app/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.java index 5c35686f..cb1712fc 100644 --- a/app/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.java +++ b/app/src/main/java/com/wireguard/android/fragment/TunnelDetailFragment.java @@ -7,7 +7,7 @@ package com.wireguard.android.fragment; import android.os.Bundle; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -24,14 +24,16 @@ import com.wireguard.config.Config; */ public class TunnelDetailFragment extends BaseFragment { - private TunnelDetailFragmentBinding binding; + @Nullable private TunnelDetailFragmentBinding binding; private void onConfigLoaded(final String name, final Config config) { - binding.setConfig(new Config.Observable(config, name)); + if (binding != null) { + binding.setConfig(new Config.Observable(config, name)); + } } @Override - public void onCreate(final Bundle savedInstanceState) { + public void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @@ -42,8 +44,8 @@ public class TunnelDetailFragment extends BaseFragment { } @Override - public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, - final Bundle savedInstanceState) { + public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, + @Nullable final Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); binding = TunnelDetailFragmentBinding.inflate(inflater, container, false); binding.executePendingBindings(); @@ -57,7 +59,7 @@ public class TunnelDetailFragment extends BaseFragment { } @Override - public void onSelectedTunnelChanged(final Tunnel oldTunnel, final Tunnel newTunnel) { + public void onSelectedTunnelChanged(@Nullable final Tunnel oldTunnel, @Nullable final Tunnel newTunnel) { if (binding == null) return; binding.setTunnel(newTunnel); @@ -68,7 +70,11 @@ public class TunnelDetailFragment extends BaseFragment { } @Override - public void onViewStateRestored(final Bundle savedInstanceState) { + public void onViewStateRestored(@Nullable final Bundle savedInstanceState) { + if (binding == null) { + return; + } + binding.setFragment(this); onSelectedTunnelChanged(null, getSelectedTunnel()); super.onViewStateRestored(savedInstanceState); diff --git a/app/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.java b/app/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.java index f6f1483a..a6e315f9 100644 --- a/app/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.java +++ b/app/src/main/java/com/wireguard/android/fragment/TunnelEditorFragment.java @@ -11,7 +11,7 @@ import android.content.Context; import android.databinding.Observable; import android.databinding.ObservableList; import android.os.Bundle; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.app.FragmentManager; import android.util.Log; @@ -37,6 +37,7 @@ import com.wireguard.config.Config; import com.wireguard.config.Peer; import java.util.List; +import java.util.Objects; /** * Fragment for editing a WireGuard configuration. @@ -47,15 +48,17 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi private static final String KEY_ORIGINAL_NAME = "original_name"; private static final String TAG = "WireGuard/" + TunnelEditorFragment.class.getSimpleName(); - private TunnelEditorFragmentBinding binding; - private Tunnel tunnel; + @Nullable private TunnelEditorFragmentBinding binding; + @Nullable private Tunnel tunnel; private void onConfigLoaded(final String name, final Config config) { - binding.setConfig(new Config.Observable(config, name)); + if (binding != null) { + binding.setConfig(new Config.Observable(config, name)); + } } private void onConfigSaved(final Tunnel savedTunnel, - final Throwable throwable) { + @Nullable final Throwable throwable) { final String message; if (throwable == null) { message = getString(R.string.config_save_success, savedTunnel.getName()); @@ -73,7 +76,7 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi } @Override - public void onCreate(final Bundle savedInstanceState) { + public void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @@ -124,8 +127,8 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi }; @Override - public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, - final Bundle savedInstanceState) { + public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, + @Nullable final Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); binding = TunnelEditorFragmentBinding.inflate(inflater, container, false); binding.addOnPropertyChangedCallback(breakObjectOrientedLayeringHandler); @@ -197,14 +200,14 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi } @Override - public void onSaveInstanceState(@NonNull final Bundle outState) { + public void onSaveInstanceState(final Bundle outState) { outState.putParcelable(KEY_LOCAL_CONFIG, binding.getConfig()); outState.putString(KEY_ORIGINAL_NAME, tunnel == null ? null : tunnel.getName()); super.onSaveInstanceState(outState); } @Override - public void onSelectedTunnelChanged(final Tunnel oldTunnel, final Tunnel newTunnel) { + public void onSelectedTunnelChanged(@Nullable final Tunnel oldTunnel, @Nullable final Tunnel newTunnel) { tunnel = newTunnel; if (binding == null) return; @@ -213,7 +216,7 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi tunnel.getConfigAsync().thenAccept(a -> onConfigLoaded(tunnel.getName(), a)); } - private void onTunnelCreated(final Tunnel newTunnel, final Throwable throwable) { + private void onTunnelCreated(final Tunnel newTunnel, @Nullable final Throwable throwable) { final String message; if (throwable == null) { tunnel = newTunnel; @@ -232,7 +235,7 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi } private void onTunnelRenamed(final Tunnel renamedTunnel, final Config newConfig, - final Throwable throwable) { + @Nullable final Throwable throwable) { final String message; if (throwable == null) { message = getString(R.string.tunnel_rename_success, renamedTunnel.getName()); @@ -251,7 +254,11 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi } @Override - public void onViewStateRestored(final Bundle savedInstanceState) { + public void onViewStateRestored(@Nullable final Bundle savedInstanceState) { + if (binding == null) { + return; + } + binding.setFragment(this); if (savedInstanceState == null) { @@ -271,15 +278,16 @@ public class TunnelEditorFragment extends BaseFragment implements AppExclusionLi public void onRequestSetExcludedApplications(@SuppressWarnings("unused") final View view) { final FragmentManager fragmentManager = getFragmentManager(); - if (fragmentManager != null) { + if (fragmentManager != null && binding != null) { final String[] excludedApps = Attribute.stringToList(binding.getConfig().getInterfaceSection().getExcludedApplications()); final AppListDialogFragment fragment = AppListDialogFragment.newInstance(excludedApps, this); - fragment.show(getFragmentManager(), null); + fragment.show(fragmentManager, null); } } @Override public void onExcludedAppsSelected(final List<String> excludedApps) { + Objects.requireNonNull(binding, "Tried to set excluded apps while no view was loaded"); binding.getConfig().getInterfaceSection().setExcludedApplications(Attribute.iterableToString(excludedApps)); } diff --git a/app/src/main/java/com/wireguard/android/fragment/TunnelListFragment.java b/app/src/main/java/com/wireguard/android/fragment/TunnelListFragment.java index 5dda6cfe..dd8e1337 100644 --- a/app/src/main/java/com/wireguard/android/fragment/TunnelListFragment.java +++ b/app/src/main/java/com/wireguard/android/fragment/TunnelListFragment.java @@ -15,7 +15,6 @@ import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.OpenableColumns; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; @@ -60,20 +59,20 @@ public class TunnelListFragment extends BaseFragment { private static final String TAG = "WireGuard/" + TunnelListFragment.class.getSimpleName(); private final ActionModeListener actionModeListener = new ActionModeListener(); - private ActionMode actionMode; - private TunnelListFragmentBinding binding; + @Nullable private ActionMode actionMode; + @Nullable private TunnelListFragmentBinding binding; public boolean collapseActionMenu() { - if (binding.createMenu.isExpanded()) { + if (binding != null && binding.createMenu.isExpanded()) { binding.createMenu.collapse(); return true; } return false; } - private void importTunnel(final Uri uri) { + private void importTunnel(@Nullable final Uri uri) { final Activity activity = getActivity(); - if (activity == null) + if (activity == null || uri == null) return; final ContentResolver contentResolver = activity.getContentResolver(); @@ -165,10 +164,10 @@ public class TunnelListFragment extends BaseFragment { } @Override - public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { + public void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) { switch (requestCode) { case REQUEST_IMPORT: - if (resultCode == Activity.RESULT_OK) + if (resultCode == Activity.RESULT_OK && data != null) importTunnel(data.getData()); return; default: @@ -178,8 +177,8 @@ public class TunnelListFragment extends BaseFragment { @SuppressLint("ClickableViewAccessibility") @Override - public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container, - final Bundle savedInstanceState) { + public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container, + @Nullable final Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); binding = TunnelListFragmentBinding.inflate(inflater, container, false); @@ -216,16 +215,18 @@ public class TunnelListFragment extends BaseFragment { @Override public void onPause() { - binding.createMenu.collapse(); + if (binding != null) { + binding.createMenu.collapse(); + } super.onPause(); } @Override - public void onSelectedTunnelChanged(final Tunnel oldTunnel, final Tunnel newTunnel) { + public void onSelectedTunnelChanged(@Nullable final Tunnel oldTunnel, @Nullable final Tunnel newTunnel) { // Do nothing. } - private void onTunnelDeletionFinished(final Integer count, final Throwable throwable) { + private void onTunnelDeletionFinished(final Integer count, @Nullable final Throwable throwable) { final String message; if (throwable == null) { message = getResources().getQuantityString(R.plurals.delete_success, count, count); @@ -265,8 +266,13 @@ public class TunnelListFragment extends BaseFragment { } @Override - public void onViewStateRestored(final Bundle savedInstanceState) { + public void onViewStateRestored(@Nullable final Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); + + if (binding == null) { + return; + } + binding.setFragment(this); binding.setTunnels(Application.getTunnelManager().getTunnels()); binding.setRowConfigurationHandler((ObservableKeyedRecyclerViewAdapter.RowConfigurationHandler<TunnelListItemBinding, Tunnel>) (binding, tunnel, position) -> { @@ -290,7 +296,7 @@ public class TunnelListFragment extends BaseFragment { private final class ActionModeListener implements ActionMode.Callback { private final Collection<Integer> checkedItems = new HashSet<>(); - private Resources resources; + @Nullable private Resources resources; @Override public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { @@ -357,7 +363,9 @@ public class TunnelListFragment extends BaseFragment { actionMode.finish(); } - binding.tunnelList.getAdapter().notifyItemChanged(position); + if (binding != null) { + binding.tunnelList.getAdapter().notifyItemChanged(position); + } updateTitle(actionMode); } |