mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 05:39:53 +01:00
Open Camera in UI Thread to prevent crash on some devices
Also properly handle back navigation when trying to add contacts.
This commit is contained in:
@@ -63,6 +63,7 @@
|
|||||||
<string name="searching_format">Searching for contact with invitation code %06d\u2026</string>
|
<string name="searching_format">Searching for contact with invitation code %06d\u2026</string>
|
||||||
<string name="connection_failed">Connection failed</string>
|
<string name="connection_failed">Connection failed</string>
|
||||||
<string name="could_not_find_contact">Briar could not find your contact nearby</string>
|
<string name="could_not_find_contact">Briar could not find your contact nearby</string>
|
||||||
|
<string name="could_not_open_camera">Could not access your camera. Please try again!</string>
|
||||||
<string name="try_again_button">Try Again</string>
|
<string name="try_again_button">Try Again</string>
|
||||||
<string name="connected_to_contact">Connected to contact</string>
|
<string name="connected_to_contact">Connected to contact</string>
|
||||||
<string name="calculating_confirmation_code">Calculating confirmation code\u2026</string>
|
<string name="calculating_confirmation_code">Calculating confirmation code\u2026</string>
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ public abstract class BriarFragmentActivity extends BriarActivity {
|
|||||||
as in Gmail/Inbox.
|
as in Gmail/Inbox.
|
||||||
*/
|
*/
|
||||||
startFragment(ContactListFragment.newInstance());
|
startFragment(ContactListFragment.newInstance());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
}
|
}
|
||||||
@@ -80,7 +79,7 @@ public abstract class BriarFragmentActivity extends BriarActivity {
|
|||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startFragment(BaseFragment fragment,
|
public void startFragment(BaseFragment fragment,
|
||||||
boolean isAddedToBackStack) {
|
boolean isAddedToBackStack) {
|
||||||
startFragment(fragment, 0, 0, isAddedToBackStack);
|
startFragment(fragment, 0, 0, isAddedToBackStack);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.briarproject.android.keyagreement;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -9,7 +10,8 @@ import android.widget.Toast;
|
|||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.ActivityComponent;
|
import org.briarproject.android.ActivityComponent;
|
||||||
import org.briarproject.android.BriarFragmentActivity;
|
import org.briarproject.android.BriarFragmentActivity;
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
|
||||||
|
import org.briarproject.android.keyagreement.ChooseIdentityFragment.IdentitySelectedListener;
|
||||||
import org.briarproject.android.util.CustomAnimations;
|
import org.briarproject.android.util.CustomAnimations;
|
||||||
import org.briarproject.api.contact.ContactExchangeListener;
|
import org.briarproject.api.contact.ContactExchangeListener;
|
||||||
import org.briarproject.api.contact.ContactExchangeTask;
|
import org.briarproject.api.contact.ContactExchangeTask;
|
||||||
@@ -32,8 +34,7 @@ import static android.widget.Toast.LENGTH_LONG;
|
|||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
|
|
||||||
public class KeyAgreementActivity extends BriarFragmentActivity implements
|
public class KeyAgreementActivity extends BriarFragmentActivity implements
|
||||||
BaseFragment.BaseFragmentListener,
|
BaseFragmentListener, IdentitySelectedListener, EventListener,
|
||||||
ChooseIdentityFragment.IdentitySelectedListener, EventListener,
|
|
||||||
ContactExchangeListener {
|
ContactExchangeListener {
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
@@ -43,7 +44,6 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements
|
|||||||
|
|
||||||
private static final int STEP_ID = 1;
|
private static final int STEP_ID = 1;
|
||||||
private static final int STEP_QR = 2;
|
private static final int STEP_QR = 2;
|
||||||
private static final int STEPS = 2;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
protected EventBus eventBus;
|
protected EventBus eventBus;
|
||||||
@@ -87,15 +87,14 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements
|
|||||||
showStep(localAuthorId == null ? STEP_ID : STEP_QR);
|
showStep(localAuthorId == null ? STEP_ID : STEP_QR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions")
|
|
||||||
private void showStep(int step) {
|
private void showStep(int step) {
|
||||||
switch (step) {
|
switch (step) {
|
||||||
case STEP_QR:
|
case STEP_QR:
|
||||||
startFragment(ShowQrCodeFragment.newInstance());
|
startFragment(ShowQrCodeFragment.newInstance(), true);
|
||||||
break;
|
break;
|
||||||
case STEP_ID:
|
case STEP_ID:
|
||||||
default:
|
default:
|
||||||
startFragment(ChooseIdentityFragment.newInstance());
|
startFragment(ChooseIdentityFragment.newInstance(), true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,6 +120,26 @@ public class KeyAgreementActivity extends BriarFragmentActivity implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
onBackPressed();
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
|
||||||
|
supportFinishAfterTransition();
|
||||||
|
} else {
|
||||||
|
super.onBackPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showLoadingScreen(boolean isBlocking, int stringId) {
|
public void showLoadingScreen(boolean isBlocking, int stringId) {
|
||||||
if (isBlocking) {
|
if (isBlocking) {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.hardware.Camera;
|
import android.hardware.Camera;
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.util.Base64;
|
import android.util.Base64;
|
||||||
@@ -53,7 +52,6 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
|
|||||||
import static android.widget.Toast.LENGTH_LONG;
|
import static android.widget.Toast.LENGTH_LONG;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class ShowQrCodeFragment extends BaseEventFragment
|
public class ShowQrCodeFragment extends BaseEventFragment
|
||||||
implements QrCodeDecoder.ResultCallback {
|
implements QrCodeDecoder.ResultCallback {
|
||||||
|
|
||||||
@@ -195,44 +193,24 @@ public class ShowQrCodeFragment extends BaseEventFragment
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
private void openCamera() {
|
private void openCamera() {
|
||||||
AsyncTask<Void, Void, Camera> openTask =
|
LOG.info("Opening camera");
|
||||||
new AsyncTask<Void, Void, Camera>() {
|
Camera camera;
|
||||||
@Override
|
try {
|
||||||
protected Camera doInBackground(Void... unused) {
|
camera = Camera.open();
|
||||||
LOG.info("Opening camera");
|
} catch (RuntimeException e) {
|
||||||
try {
|
LOG.log(WARNING, e.toString(), e);
|
||||||
return Camera.open();
|
camera = null;
|
||||||
} catch (RuntimeException e) {
|
}
|
||||||
LOG.log(WARNING,
|
if (camera == null) {
|
||||||
"Error opening camera, trying again", e);
|
LOG.log(WARNING, "Error opening camera");
|
||||||
try {
|
Toast.makeText(getActivity(), R.string.could_not_open_camera,
|
||||||
Thread.sleep(1000);
|
LENGTH_LONG).show();
|
||||||
} catch (InterruptedException e2) {
|
finish();
|
||||||
LOG.info("Interrupted before second attempt");
|
return;
|
||||||
return null;
|
}
|
||||||
}
|
cameraView.start(camera, decoder, 0);
|
||||||
try {
|
|
||||||
return Camera.open();
|
|
||||||
} catch (RuntimeException e2) {
|
|
||||||
LOG.log(WARNING, "Error opening camera", e2);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Camera camera) {
|
|
||||||
if (camera == null) {
|
|
||||||
// TODO better solution?
|
|
||||||
LOG.info("No Camera found, finishing...");
|
|
||||||
getActivity().finish();
|
|
||||||
} else {
|
|
||||||
cameraView.start(camera, decoder, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
openTask.execute();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void releaseCamera() {
|
private void releaseCamera() {
|
||||||
@@ -242,7 +220,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
|
|||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
LOG.log(WARNING, "Error releasing camera", e);
|
LOG.log(WARNING, "Error releasing camera", e);
|
||||||
// TODO better solution
|
// TODO better solution
|
||||||
getActivity().finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,6 +343,10 @@ public class ShowQrCodeFragment extends BaseEventFragment
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void finish() {
|
||||||
|
getActivity().getSupportFragmentManager().popBackStack();
|
||||||
|
}
|
||||||
|
|
||||||
private class BluetoothStateReceiver extends BroadcastReceiver {
|
private class BluetoothStateReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user