Stop listening to key agreement connections when leaving fragment

Also don't liberate screen orientation when backing out of adding a contact nearby
This commit is contained in:
Torsten Grote
2021-04-09 15:20:39 -03:00
parent a64878bd00
commit 5e84e5b8b6
5 changed files with 38 additions and 18 deletions

View File

@@ -103,7 +103,8 @@ public class AddNearbyContactActivity extends BriarActivity
@Override
public void onBackPressed() {
if (viewModel.getState().getValue() instanceof Failed) {
// re-create this activity when going back in failed state
// Re-create this activity when going back in failed state.
// This will also re-create the ViewModel, so we start fresh.
Intent i = new Intent(this, AddNearbyContactActivity.class);
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

View File

@@ -15,8 +15,11 @@ import org.briarproject.briar.android.activity.ActivityComponent;
import org.briarproject.briar.android.fragment.BaseFragment;
import org.briarproject.briar.android.util.UiUtils;
import javax.inject.Inject;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.view.View.GONE;
@@ -30,6 +33,11 @@ public class AddNearbyContactErrorFragment extends BaseFragment {
AddNearbyContactErrorFragment.class.getName();
private static final String ERROR_MSG = "errorMessage";
@Inject
ViewModelProvider.Factory viewModelFactory;
private AddNearbyContactViewModel viewModel;
public static AddNearbyContactErrorFragment newInstance(String errorMsg) {
AddNearbyContactErrorFragment f = new AddNearbyContactErrorFragment();
Bundle args = new Bundle();
@@ -46,6 +54,8 @@ public class AddNearbyContactErrorFragment extends BaseFragment {
@Override
public void injectFragment(ActivityComponent component) {
component.inject(this);
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
.get(AddNearbyContactViewModel.class);
}
@Nullable
@@ -81,6 +91,15 @@ public class AddNearbyContactErrorFragment extends BaseFragment {
return v;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// We don't do this in AddNearbyContactFragment#onDestroy()
// because it gets called when creating AddNearbyContactFragment
// in landscape orientation to force portrait orientation.
viewModel.stopListening();
}
private void triggerFeedback() {
UiUtils.triggerFeedback(requireContext());
finish();

View File

@@ -31,7 +31,6 @@ import androidx.annotation.UiThread;
import androidx.lifecycle.ViewModelProvider;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
@@ -86,23 +85,19 @@ public class AddNearbyContactFragment extends BaseFragment
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
cameraView = view.findViewById(R.id.camera_view);
cameraView.setPreviewConsumer(viewModel.getQrCodeDecoder());
cameraOverlay = view.findViewById(R.id.camera_overlay);
statusView = view.findViewById(R.id.status_container);
status = view.findViewById(R.id.connect_status);
qrCodeView = view.findViewById(R.id.qr_code_view);
qrCodeView.setFullscreenListener(this);
requireActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
viewModel.getState().observe(getViewLifecycleOwner(),
this::onAddContactStateChanged);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
requireActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
cameraView.setPreviewConsumer(viewModel.getQrCodeDecoder());
}
@Override
public void onStart() {
super.onStart();
@@ -123,13 +118,6 @@ public class AddNearbyContactFragment extends BaseFragment
}
}
@Override
public void onDestroy() {
requireActivity()
.setRequestedOrientation(SCREEN_ORIENTATION_UNSPECIFIED);
super.onDestroy();
}
@Override
public void setFullscreen(boolean fullscreen) {
LinearLayout.LayoutParams statusParams, qrCodeParams;

View File

@@ -78,6 +78,15 @@ public class AddNearbyContactIntroFragment extends BaseFragment {
return v;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// We don't do this in AddNearbyContactFragment#onDestroy()
// because it gets called when creating AddNearbyContactFragment
// in landscape orientation to force portrait orientation.
viewModel.stopListening();
}
@Override
public void onStart() {
super.onStart();

View File

@@ -314,10 +314,13 @@ class AddNearbyContactViewModel extends AndroidViewModel
}
@UiThread
private void stopListening() {
void stopListening() {
KeyAgreementTask oldTask = task;
ioExecutor.execute(() -> {
if (oldTask != null) oldTask.stopListening();
if (oldTask != null) {
oldTask.stopListening();
task = null;
}
});
}