Merge pull request #390 from LizardWithHat/reauthenticate_after_inactivity

added ability to ask for reauthentification after device inactivity
This commit is contained in:
Jakob Nixdorf 2020-02-03 07:15:09 +01:00 committed by GitHub
commit e7748e7979
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 67 additions and 0 deletions

View file

@ -33,6 +33,7 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
@ -108,6 +109,8 @@ public class MainActivity extends BaseActivity
private ActionBarDrawerToggle tagsToggle;
private String filterString;
private CountDownTimer countDownTimer;
// QR code scanning
private void scanQRCode(){
new IntentIntegrator(MainActivity.this)
@ -353,6 +356,8 @@ public class MainActivity extends BaseActivity
}
checkIntent();
}
if(setCountDownTimerNow()) countDownTimer.start();
}
if (filterString != null) {
@ -378,6 +383,7 @@ public class MainActivity extends BaseActivity
});
super.onPause();
stopUpdater();
countDownTimer.cancel();
}
@Override
@ -751,6 +757,32 @@ public class MainActivity extends BaseActivity
adapter.filterByTags(tagsDrawerAdapter.getActiveTags());
}
@Override
public void onUserInteraction(){
super.onUserInteraction();
// Refresh Blackout Timer
if(countDownTimer != null) countDownTimer.cancel();
if(setCountDownTimerNow()) countDownTimer.start();
}
private boolean setCountDownTimerNow() {
int secondsToBlackout = 1000 * settings.getAuthInactivityDelay();
if(settings.getAuthMethod() == AuthMethod.NONE || !settings.getAuthInactivity() || secondsToBlackout == 0 ) return false;
countDownTimer = new CountDownTimer(secondsToBlackout, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
authenticate(R.string.auth_msg_authenticate);
this.cancel();
}
};
return true;
}
private void openFileWithPermissions(int intentId){
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
showOpenFileSelector(intentId);
@ -778,6 +810,7 @@ public class MainActivity extends BaseActivity
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void addQRCode(String result){
if(!TextUtils.isEmpty(result)) {
try {

View file

@ -547,6 +547,14 @@ public class Settings {
return getBoolean(R.string.settings_key_backup_append_date_time, false);
}
public int getAuthInactivityDelay() {
return getIntValue(R.string.settings_key_auth_inactivity_delay, 0);
}
public boolean getAuthInactivity() {
return getBoolean(R.string.settings_key_auth_inactivity, false);
}
public boolean isMinimizeAppOnCopyEnabled() {
return getBoolean(R.string.settings_key_minimize_on_copy, false);
}

View file

@ -16,6 +16,8 @@
<string name="settings_key_encryption" translatable="false">pref_encryption</string>
<string name="settings_key_panic" translatable="false">pref_panic</string>
<string name="settings_key_relock_screen_off" translatable="false">pref_relock_screen_off</string>
<string name="settings_key_auth_inactivity" translatable="false">pref_auth_inactivity</string>
<string name="settings_key_auth_inactivity_delay" translatable="false">pref_auth_inactivity_timeout</string>
<string name="settings_key_block_accessibility" translatable="false">pref_block_accessibility</string>
<string name="settings_key_lang" translatable="false">pref_lang</string> <!-- Deprecated -->
@ -60,6 +62,7 @@
<!-- Default values -->
<integer name="settings_default_tap_to_reveal_timeout">30</integer>
<integer name="settings_default_auth_inactivity_delay">30</integer>
<string name="settings_default_encryption" translatable="false">keystore</string>
<string name="settings_default_locale" translatable="false">system</string>
<string name="settings_default_theme" translatable="false">light</string>
@ -210,4 +213,6 @@
<integer name="settings_max_tap_to_reveal_timeout">60</integer>
<integer name="settings_min_label_size">12</integer>
<integer name="settings_max_label_size">24</integer>
<integer name="settings_auth_min_inactivity_delay">10</integer>
<integer name="settings_auth_max_inactivity_delay">360</integer>
</resources>

View file

@ -16,6 +16,8 @@
<string name="settings_title_encryption">Database encryption</string>
<string name="settings_title_panic">Panic Trigger</string>
<string name="settings_title_relock_screen_off">Re-lock on screen off</string>
<string name="settings_title_auth_inactivity">Re-lock on inactivity</string>
<string name="settings_title_auth_inactivity_delay">Delay for inactivity re-lock</string>
<string name="settings_title_block_accessibility">Block accessibility services</string>
<string name="settings_title_lang">Language</string>
@ -55,6 +57,10 @@
<string name="settings_desc_panic">Decide what happens when a Panic Trigger is received</string>
<string name="settings_desc_relock_screen_off">Require authentication after the devices screen
has been turned off</string>
<string name="settings_desc_auth_inactivity">Require authenticication after the device has been
inactive</string>
<string name="settings_desc_auth_inactivity_delay">Select the time (in sec) after which to
require reauthentication</string>
<string name="settings_desc_block_accessibility">Hide sensitive fields from the accessibility
services. <b>DO NOT enable this if you rely on the accessibility services!</b></string>

View file

@ -48,6 +48,21 @@
android:summary="@string/settings_desc_relock_screen_off"
android:defaultValue="true" />
<CheckBoxPreference
android:key="@string/settings_key_auth_inactivity"
android:title="@string/settings_title_auth_inactivity"
android:summary="@string/settings_desc_auth_inactivity"
android:defaultValue="false" />
<com.vanniktech.vntnumberpickerpreference.VNTNumberPickerPreference
android:key="@string/settings_key_auth_inactivity_delay"
android:title="@string/settings_title_auth_inactivity_delay"
android:dialogMessage="@string/settings_desc_auth_inactivity_delay"
android:defaultValue="@integer/settings_default_auth_inactivity_delay"
android:dependency="@string/settings_key_auth_inactivity"
app:vnt_minValue="@integer/settings_auth_min_inactivity_delay"
app:vnt_maxValue="@integer/settings_auth_max_inactivity_delay" />
<CheckBoxPreference
android:key="@string/settings_key_block_accessibility"
android:title="@string/settings_title_block_accessibility"