Added option to lock database when screen off

This commit is contained in:
Philipp Crocoll 2013-11-25 21:08:15 +01:00
parent 08093531e9
commit 0ad00eefe2
8 changed files with 60 additions and 5 deletions

View File

@ -45,6 +45,7 @@ namespace keepass2android
_intentReceiver = new LockCloseActivityBroadcastReceiver(this);
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_intentReceiver, filter);
}
@ -102,6 +103,9 @@ namespace keepass2android
case Intents.DatabaseLocked:
_service.OnLockDatabase();
break;
case Intent.ActionScreenOff:
App.Kp2a.OnScreenOff();
break;
}
}
}

View File

@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
using System;
using Android.Content;
using Android.OS;
using Android.Preferences;
using Android.Runtime;
using KeePassLib.Serialization;
@ -43,7 +44,9 @@ namespace keepass2android
_intentReceiver = new LockCloseListActivityBroadcastReceiver(this);
IntentFilter filter = new IntentFilter();
filter.AddAction(Intents.DatabaseLocked);
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_intentReceiver, filter);
}
@ -95,6 +98,9 @@ namespace keepass2android
case Intents.DatabaseLocked:
_service.OnLockDatabase();
break;
case Intent.ActionScreenOff:
App.Kp2a.OnScreenOff();
break;
}
}
}

View File

@ -87,6 +87,7 @@
<string name="LastInfoVersionCode_key">LastInfoVersion</string>
<string name="UseFileTransactions_key">UseFileTransactions</string>
<string name="LockWhenScreenOff_key">LockWhenScreenOff</string>
<string name="UseOfflineCache_key">UseOfflineCache</string>
<string name="CheckForFileChangesOnSave_key">CheckForFileChangesOnSave</string>

View File

@ -235,6 +235,8 @@
<string name="credentials_dialog_title">Enter server credentials</string>
<string name="UseFileTransactions_title">File transactions</string>
<string name="UseFileTransactions_summary">Use file transactions for writing databases</string>
<string name="LockWhenScreenOff_title">Lock when screen off</string>
<string name="LockWhenScreenOff_summary">Lock the database when screen is switched off.</string>
<string name="UseOfflineCache_title">Database caching</string>
<string name="UseOfflineCache_summary">Keep a copy of remote database files in the application cache directory. This allows to use remote databases even when offline.</string>
<string name="ClearOfflineCache_title">Clear cache?</string>

View File

@ -73,10 +73,18 @@
android:dialogTitle="@string/app_timeout"
android:defaultValue="@string/clipboard_timeout_default"/>
<CheckBoxPreference
android:key="@string/RememberRecentFiles_key"
android:title="@string/RememberRecentFiles_title"
android:summary="@string/RememberRecentFiles_summary"
android:defaultValue="@bool/RememberRecentFiles_default"/>
android:enabled="true"
android:persistent="true"
android:summary="@string/LockWhenScreenOff_summary"
android:defaultValue="false"
android:title="@string/LockWhenScreenOff_title"
android:key="@string/LockWhenScreenOff_key" />
<CheckBoxPreference
android:key="@string/RememberRecentFiles_key"
android:title="@string/RememberRecentFiles_title"
android:summary="@string/RememberRecentFiles_summary"
android:defaultValue="@bool/RememberRecentFiles_default"/>
<CheckBoxPreference
android:key="@string/keyfile_key"

View File

@ -534,6 +534,17 @@ namespace keepass2android
return cacheEnabled;
}
}
public void OnScreenOff()
{
if (PreferenceManager.GetDefaultSharedPreferences(Application.Context)
.GetBoolean(
Application.Context.GetString(Resource.String.LockWhenScreenOff_key),
false))
{
App.Kp2a.LockDatabase();
}
}
}

View File

@ -2,6 +2,7 @@ using System;
using System.Linq;
using Android.Content;
using Android.App;
using Android.Preferences;
namespace keepass2android

View File

@ -35,11 +35,23 @@ namespace keepass2android
[Service]
public class OngoingNotificationsService : Service
{
private ScreenOffReceiver _screenOffReceiver;
#region Service
private const int QuickUnlockId = 100;
private const int UnlockedWarningId = 200;
public override void OnCreate()
{
base.OnCreate();
_screenOffReceiver = new ScreenOffReceiver();
IntentFilter filter = new IntentFilter();
filter.AddAction(Intent.ActionScreenOff);
RegisterReceiver(_screenOffReceiver, filter);
}
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
Kp2aLog.Log("Starting/Updating OngoingNotificationsService. Database " + (App.Kp2a.DatabaseIsUnlocked ? "Unlocked" : (App.Kp2a.QuickLocked ? "QuickLocked" : "Locked")));
@ -111,6 +123,8 @@ namespace keepass2android
{
App.Kp2a.LockDatabase();
}
UnregisterReceiver(_screenOffReceiver);
}
public override IBinder OnBind(Intent intent)
@ -191,6 +205,14 @@ namespace keepass2android
return name;
}
#endregion
class ScreenOffReceiver: BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
App.Kp2a.OnScreenOff();
}
}
}
}