mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-19 22:29:53 +01:00
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:
@@ -103,7 +103,8 @@ public class AddNearbyContactActivity extends BriarActivity
|
|||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (viewModel.getState().getValue() instanceof Failed) {
|
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);
|
Intent i = new Intent(this, AddNearbyContactActivity.class);
|
||||||
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
|
i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
startActivity(i);
|
startActivity(i);
|
||||||
|
|||||||
@@ -15,8 +15,11 @@ import org.briarproject.briar.android.activity.ActivityComponent;
|
|||||||
import org.briarproject.briar.android.fragment.BaseFragment;
|
import org.briarproject.briar.android.fragment.BaseFragment;
|
||||||
import org.briarproject.briar.android.util.UiUtils;
|
import org.briarproject.briar.android.util.UiUtils;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
||||||
import static android.view.View.GONE;
|
import static android.view.View.GONE;
|
||||||
@@ -30,6 +33,11 @@ public class AddNearbyContactErrorFragment extends BaseFragment {
|
|||||||
AddNearbyContactErrorFragment.class.getName();
|
AddNearbyContactErrorFragment.class.getName();
|
||||||
private static final String ERROR_MSG = "errorMessage";
|
private static final String ERROR_MSG = "errorMessage";
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ViewModelProvider.Factory viewModelFactory;
|
||||||
|
|
||||||
|
private AddNearbyContactViewModel viewModel;
|
||||||
|
|
||||||
public static AddNearbyContactErrorFragment newInstance(String errorMsg) {
|
public static AddNearbyContactErrorFragment newInstance(String errorMsg) {
|
||||||
AddNearbyContactErrorFragment f = new AddNearbyContactErrorFragment();
|
AddNearbyContactErrorFragment f = new AddNearbyContactErrorFragment();
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
@@ -46,6 +54,8 @@ public class AddNearbyContactErrorFragment extends BaseFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void injectFragment(ActivityComponent component) {
|
public void injectFragment(ActivityComponent component) {
|
||||||
component.inject(this);
|
component.inject(this);
|
||||||
|
viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
|
||||||
|
.get(AddNearbyContactViewModel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -81,6 +91,15 @@ public class AddNearbyContactErrorFragment extends BaseFragment {
|
|||||||
return v;
|
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() {
|
private void triggerFeedback() {
|
||||||
UiUtils.triggerFeedback(requireContext());
|
UiUtils.triggerFeedback(requireContext());
|
||||||
finish();
|
finish();
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ import androidx.annotation.UiThread;
|
|||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
|
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.INVISIBLE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
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) {
|
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
cameraView = view.findViewById(R.id.camera_view);
|
cameraView = view.findViewById(R.id.camera_view);
|
||||||
|
cameraView.setPreviewConsumer(viewModel.getQrCodeDecoder());
|
||||||
cameraOverlay = view.findViewById(R.id.camera_overlay);
|
cameraOverlay = view.findViewById(R.id.camera_overlay);
|
||||||
statusView = view.findViewById(R.id.status_container);
|
statusView = view.findViewById(R.id.status_container);
|
||||||
status = view.findViewById(R.id.connect_status);
|
status = view.findViewById(R.id.connect_status);
|
||||||
qrCodeView = view.findViewById(R.id.qr_code_view);
|
qrCodeView = view.findViewById(R.id.qr_code_view);
|
||||||
qrCodeView.setFullscreenListener(this);
|
qrCodeView.setFullscreenListener(this);
|
||||||
|
|
||||||
|
requireActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
|
||||||
|
|
||||||
viewModel.getState().observe(getViewLifecycleOwner(),
|
viewModel.getState().observe(getViewLifecycleOwner(),
|
||||||
this::onAddContactStateChanged);
|
this::onAddContactStateChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
|
||||||
super.onActivityCreated(savedInstanceState);
|
|
||||||
requireActivity().setRequestedOrientation(SCREEN_ORIENTATION_NOSENSOR);
|
|
||||||
cameraView.setPreviewConsumer(viewModel.getQrCodeDecoder());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
@@ -123,13 +118,6 @@ public class AddNearbyContactFragment extends BaseFragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
requireActivity()
|
|
||||||
.setRequestedOrientation(SCREEN_ORIENTATION_UNSPECIFIED);
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setFullscreen(boolean fullscreen) {
|
public void setFullscreen(boolean fullscreen) {
|
||||||
LinearLayout.LayoutParams statusParams, qrCodeParams;
|
LinearLayout.LayoutParams statusParams, qrCodeParams;
|
||||||
|
|||||||
@@ -78,6 +78,15 @@ public class AddNearbyContactIntroFragment extends BaseFragment {
|
|||||||
return v;
|
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
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
|
|||||||
@@ -314,10 +314,13 @@ class AddNearbyContactViewModel extends AndroidViewModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
private void stopListening() {
|
void stopListening() {
|
||||||
KeyAgreementTask oldTask = task;
|
KeyAgreementTask oldTask = task;
|
||||||
ioExecutor.execute(() -> {
|
ioExecutor.execute(() -> {
|
||||||
if (oldTask != null) oldTask.stopListening();
|
if (oldTask != null) {
|
||||||
|
oldTask.stopListening();
|
||||||
|
task = null;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user