mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-22 15:49:53 +01:00
Screen Lock: Remember when keyguard was shown (for Android 6)
Also automatically unlock if device screenlock was removed.
This commit is contained in:
@@ -89,6 +89,10 @@ public class LockManagerImpl implements LockManager, Service, EventListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLocked() {
|
public boolean isLocked() {
|
||||||
|
if (locked && !hasScreenLock(appContext)) {
|
||||||
|
lockable.postValue(false);
|
||||||
|
locked = false;
|
||||||
|
}
|
||||||
return locked;
|
return locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import static android.os.Build.VERSION.SDK_INT;
|
import static android.os.Build.VERSION.SDK_INT;
|
||||||
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_KEYGUARD_UNLOCK;
|
import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_KEYGUARD_UNLOCK;
|
||||||
import static org.briarproject.briar.android.util.UiUtils.hasScreenLock;
|
|
||||||
|
|
||||||
@RequiresApi(21)
|
@RequiresApi(21)
|
||||||
@MethodsNotNullByDefault
|
@MethodsNotNullByDefault
|
||||||
@@ -29,10 +28,13 @@ public class UnlockActivity extends BaseActivity {
|
|||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(UnlockActivity.class.getName());
|
Logger.getLogger(UnlockActivity.class.getName());
|
||||||
|
private static final String KEYGUARD_SHOWN = "keyguardShown";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
LockManager lockManager;
|
LockManager lockManager;
|
||||||
|
|
||||||
|
private boolean keyguardShown = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void injectActivity(ActivityComponent component) {
|
public void injectActivity(ActivityComponent component) {
|
||||||
component.inject(this);
|
component.inject(this);
|
||||||
@@ -45,6 +47,20 @@ public class UnlockActivity extends BaseActivity {
|
|||||||
|
|
||||||
Button button = findViewById(R.id.unlock);
|
Button button = findViewById(R.id.unlock);
|
||||||
button.setOnClickListener(view -> requestKeyguardUnlock());
|
button.setOnClickListener(view -> requestKeyguardUnlock());
|
||||||
|
|
||||||
|
keyguardShown = state != null && state.getBoolean(KEYGUARD_SHOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
// Saving whether we've shown the keyguard already is necessary
|
||||||
|
// for Android 6 when this activity gets destroyed.
|
||||||
|
//
|
||||||
|
// This will not help Android 5.
|
||||||
|
// There the system will show the keyguard once again.
|
||||||
|
// So if this activity was destroyed, the user needs to enter PIN twice.
|
||||||
|
outState.putBoolean(KEYGUARD_SHOWN, keyguardShown);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -53,7 +69,10 @@ public class UnlockActivity extends BaseActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == REQUEST_KEYGUARD_UNLOCK) {
|
if (requestCode == REQUEST_KEYGUARD_UNLOCK) {
|
||||||
if (resultCode == RESULT_OK) unlock();
|
if (resultCode == RESULT_OK) unlock();
|
||||||
else finish();
|
else {
|
||||||
|
finish();
|
||||||
|
overridePendingTransition(0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,8 +82,11 @@ public class UnlockActivity extends BaseActivity {
|
|||||||
// Show keyguard after onActivityResult() as been called.
|
// Show keyguard after onActivityResult() as been called.
|
||||||
// Check if app is still locked, lockable
|
// Check if app is still locked, lockable
|
||||||
// and not finishing (which is possible if recreated)
|
// and not finishing (which is possible if recreated)
|
||||||
if (lockManager.isLocked() && hasScreenLock(this) && !isFinishing()) {
|
if (!keyguardShown && lockManager.isLocked() && !isFinishing()) {
|
||||||
requestKeyguardUnlock();
|
requestKeyguardUnlock();
|
||||||
|
} else if (!lockManager.isLocked()) {
|
||||||
|
setResult(RESULT_OK);
|
||||||
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,6 +107,7 @@ public class UnlockActivity extends BaseActivity {
|
|||||||
LOG.warning("Unlocking without keyguard");
|
LOG.warning("Unlocking without keyguard");
|
||||||
unlock();
|
unlock();
|
||||||
} else {
|
} else {
|
||||||
|
keyguardShown = true;
|
||||||
startActivityForResult(intent, REQUEST_KEYGUARD_UNLOCK);
|
startActivityForResult(intent, REQUEST_KEYGUARD_UNLOCK);
|
||||||
overridePendingTransition(0, 0);
|
overridePendingTransition(0, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public interface LockManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if app is currently locked, false otherwise.
|
* Returns true if app is currently locked, false otherwise.
|
||||||
|
* If the device's screen lock was removed while the app was locked,
|
||||||
|
* calling this will unlock the app automatically.
|
||||||
*/
|
*/
|
||||||
boolean isLocked();
|
boolean isLocked();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user