Merge pull request #642 from alexbakker/block-minimize-lock

Fix an issue where the app would lock when showing DocumentsUI
This commit is contained in:
Michael Schättgen 2020-12-26 15:36:48 +01:00 committed by GitHub
commit a27e3c6364
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 6 deletions

View file

@ -40,6 +40,7 @@ public class AegisApplication extends Application {
private VaultManager _manager; private VaultManager _manager;
private Preferences _prefs; private Preferences _prefs;
private List<LockListener> _lockListeners; private List<LockListener> _lockListeners;
private boolean _blockAutoLock;
private static final String CODE_LOCK_STATUS_ID = "lock_status_channel"; private static final String CODE_LOCK_STATUS_ID = "lock_status_channel";
private static final String CODE_LOCK_VAULT_ACTION = "lock_vault"; private static final String CODE_LOCK_VAULT_ACTION = "lock_vault";
@ -141,6 +142,15 @@ public class AegisApplication extends Application {
_lockListeners.remove(listener); _lockListeners.remove(listener);
} }
/**
* Sets whether to block automatic lock on minimization. This should only be called
* by activities before invoking an intent that shows a DocumentsUI, because that
* action leads AppLifecycleObserver to believe that the app has been minimized.
*/
public void setBlockAutoLock(boolean block) {
_blockAutoLock = block;
}
/** /**
* Locks the vault and the app. * Locks the vault and the app.
* @param userInitiated whether or not the user initiated the lock in MainActivity. * @param userInitiated whether or not the user initiated the lock in MainActivity.
@ -195,7 +205,9 @@ public class AegisApplication extends Application {
private class AppLifecycleObserver implements LifecycleEventObserver { private class AppLifecycleObserver implements LifecycleEventObserver {
@Override @Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) { public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_STOP && isAutoLockEnabled(Preferences.AUTO_LOCK_ON_MINIMIZE)) { if (event == Lifecycle.Event.ON_STOP
&& isAutoLockEnabled(Preferences.AUTO_LOCK_ON_MINIMIZE)
&& !_blockAutoLock) {
lock(false); lock(false);
} }
} }

View file

@ -55,6 +55,12 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
super.onDestroy(); super.onDestroy();
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
_app.setBlockAutoLock(false);
}
@Override @Override
public void onLocked(boolean userInitiated) { public void onLocked(boolean userInitiated) {
setResult(RESULT_CANCELED, null); setResult(RESULT_CANCELED, null);

View file

@ -407,6 +407,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
} }
private void startScanImageActivity() { private void startScanImageActivity() {
_app.setBlockAutoLock(true);
Intent galleryIntent = new Intent(Intent.ACTION_PICK); Intent galleryIntent = new Intent(Intent.ACTION_PICK);
galleryIntent.setDataAndType(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*"); galleryIntent.setDataAndType(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");

View file

@ -87,6 +87,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
private static final int CODE_BACKUPS = 8; private static final int CODE_BACKUPS = 8;
private Intent _result; private Intent _result;
private AegisApplication _app;
private Preferences _prefs; private Preferences _prefs;
private VaultManager _vault; private VaultManager _vault;
@ -112,9 +113,9 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences); addPreferencesFromResource(R.xml.preferences);
AegisApplication app = (AegisApplication) getActivity().getApplication(); _app = (AegisApplication) getActivity().getApplication();
_prefs = app.getPreferences(); _prefs = _app.getPreferences();
_vault = app.getVaultManager(); _vault = _app.getVaultManager();
// set the result intent in advance // set the result intent in advance
setResult(new Intent()); setResult(new Intent());
@ -190,6 +191,8 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*"); intent.setType("*/*");
_app.setBlockAutoLock(true);
startActivityForResult(intent, CODE_IMPORT); startActivityForResult(intent, CODE_IMPORT);
}); });
return true; return true;
@ -282,14 +285,14 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
}); });
Preference tapToRevealTimePreference = findPreference("pref_tap_to_reveal_time"); Preference tapToRevealTimePreference = findPreference("pref_tap_to_reveal_time");
tapToRevealTimePreference.setSummary(app.getPreferences().getTapToRevealTime() + " seconds"); tapToRevealTimePreference.setSummary(_app.getPreferences().getTapToRevealTime() + " seconds");
tapToRevealTimePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { tapToRevealTimePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override @Override
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
Dialogs.showNumberPickerDialog(getActivity(), new Dialogs.NumberInputListener() { Dialogs.showNumberPickerDialog(getActivity(), new Dialogs.NumberInputListener() {
@Override @Override
public void onNumberInputResult(int number) { public void onNumberInputResult(int number) {
app.getPreferences().setTapToRevealTime(number); _app.getPreferences().setTapToRevealTime(number);
tapToRevealTimePreference.setSummary(number + " seconds"); tapToRevealTimePreference.setSummary(number + " seconds");
_result.putExtra("needsRefresh", true); _result.putExtra("needsRefresh", true);
} }
@ -735,6 +738,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
.setType(getExportMimeType(requestCode)) .setType(getExportMimeType(requestCode))
.putExtra(Intent.EXTRA_TITLE, fileInfo.toString()); .putExtra(Intent.EXTRA_TITLE, fileInfo.toString());
_app.setBlockAutoLock(true);
startActivityForResult(intent, requestCode); startActivityForResult(intent, requestCode);
}); });
@ -771,6 +775,8 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
.setType(getExportMimeType(requestCode)) .setType(getExportMimeType(requestCode))
.putExtra(Intent.EXTRA_STREAM, uri); .putExtra(Intent.EXTRA_STREAM, uri);
Intent chooser = Intent.createChooser(intent, getString(R.string.pref_export_summary)); Intent chooser = Intent.createChooser(intent, getString(R.string.pref_export_summary));
_app.setBlockAutoLock(true);
startActivity(chooser); startActivity(chooser);
}); });
}); });
@ -1014,6 +1020,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
_app.setBlockAutoLock(true);
startActivityForResult(intent, CODE_BACKUPS); startActivityForResult(intent, CODE_BACKUPS);
} }