diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java index b3a7cb122..e6e4254cd 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/AddContactViewModel.java @@ -124,7 +124,7 @@ public class AddContactViewModel extends DbViewModel { return addContactResult; } - public void updatePendingContact(String name, PendingContact p) { + void updatePendingContact(String name, PendingContact p) { runOnDbThread(() -> { try { contactManager.removePendingContact(p.getId()); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java index db435c061..00012a58e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/add/remote/NicknameFragment.java @@ -29,11 +29,11 @@ import org.briarproject.briar.android.fragment.BaseFragment; import javax.annotation.Nullable; import javax.inject.Inject; +import androidx.annotation.NonNull; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog.Builder; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelProviders; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; @@ -48,6 +48,7 @@ import static org.briarproject.briar.android.util.UiUtils.getDialogIcon; public class NicknameFragment extends BaseFragment { private static final String TAG = NicknameFragment.class.getName(); + private static final String SAVED_LINK = "savedLink"; @Inject ViewModelProvider.Factory viewModelFactory; @@ -67,6 +68,20 @@ public class NicknameFragment extends BaseFragment { @Override public void injectFragment(ActivityComponent component) { component.inject(this); + viewModel = new ViewModelProvider(requireActivity(), viewModelFactory) + .get(AddContactViewModel.class); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + // When the activity (and the ViewModel) get destroyed, + // the link will not be available anymore and needs to be restored. + // TODO migrate to SavedStateViewModelFactory (once we can use it) + String savedLink = savedInstanceState.getString(SAVED_LINK); + if (savedLink != null) viewModel.setRemoteHandshakeLink(savedLink); + } } @Nullable @@ -74,14 +89,9 @@ public class NicknameFragment extends BaseFragment { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - if (getActivity() == null || getContext() == null) return null; - View v = inflater.inflate(R.layout.fragment_nickname, container, false); - viewModel = ViewModelProviders.of(getActivity(), viewModelFactory) - .get(AddContactViewModel.class); - contactNameLayout = v.findViewById(R.id.contactNameLayout); contactNameInput = v.findViewById(R.id.contactNameInput); @@ -93,6 +103,12 @@ public class NicknameFragment extends BaseFragment { return v; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(SAVED_LINK, viewModel.getRemoteHandshakeLink()); + } + @Nullable private String getNicknameOrNull() { Editable text = contactNameInput.getText(); diff --git a/briar-android/src/main/res/layout/fragment_nickname.xml b/briar-android/src/main/res/layout/fragment_nickname.xml index 197078cbf..a07cc970b 100644 --- a/briar-android/src/main/res/layout/fragment_nickname.xml +++ b/briar-android/src/main/res/layout/fragment_nickname.xml @@ -139,10 +139,10 @@ @@ -173,4 +173,4 @@ - \ No newline at end of file +