From 6f22ad012e92596608690662ff5300cdfc96a997 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Mon, 7 Oct 2013 06:28:06 +0200 Subject: [PATCH] * modified setup workflow for IFileStorage (to be compatible with Google Drive requirements) * scheme (protocol) is always contained in path variables passed to JavaFileStorage implementors * file chooser improvements (internal browser displayed also in file chooser list e.g. when selecting an attachments, compatible with Solid Explorer content uris, removed OI stuff) * started GDrive support --- .../KeePassLib2Android.csproj | 4 +- .../Io/BuiltInFileStorage.cs | 58 +- .../Io/CachingFileStorage.cs | 46 +- .../Io/DropboxFileStorage.cs | 9 +- .../Io/FileStorageSetupActivity.cs | 23 + .../Io/FileStorageSetupInitiatorActivity.cs | 20 + src/Kp2aBusinessLogic/Io/GDriveFileStorage.cs | 5 +- src/Kp2aBusinessLogic/Io/IFileStorage.cs | 79 +- src/Kp2aBusinessLogic/Io/JavaFileStorage.cs | 101 +- .../Kp2aBusinessLogic.csproj | 7 +- src/java/JavaFileStorage/.classpath | 2 + src/java/JavaFileStorage/AndroidManifest.xml | 1 + src/java/JavaFileStorage/project.properties | 3 +- .../javafilestorage/DropboxFileStorage.java | 231 +- .../GoogleDriveFileStorage.java | 262 + .../javafilestorage/JavaFileStorage.java | 54 +- .../lib/ui/filechooser/FragmentFiles.java | 3 + .../ui/filechooser/prefs/DisplayPrefs.java | 5 +- .../Kp2aFileChooserBridge.java | 2 +- .../kp2afilechooser/Kp2aFileProvider.java | 26 +- src/keepass2android/ChangeLog.cs | 1 + .../FileStorageSelectionActivity.cs | 74 +- src/keepass2android/PasswordActivity.cs | 56 +- .../Properties/AndroidManifest_net.xml | 25 +- .../Resources/Resource.designer.cs | 4412 +++++++++-------- .../drawable-hdpi/ic_storage_androidget.png | Bin 0 -> 1681 bytes .../drawable-hdpi/ic_storage_androidsend.png | Bin 0 -> 1681 bytes .../drawable-hdpi/ic_storage_file.png | Bin 0 -> 1425 bytes .../Resources/drawable/ic_keepass2android.png | Bin 0 -> 7430 bytes .../drawable/ic_keepass2android_nonet.png | Bin 0 -> 7323 bytes .../drawable/ic_storage_androidget.png | Bin 0 -> 1185 bytes .../drawable/ic_storage_androidsend.png | Bin 0 -> 1185 bytes .../Resources/drawable/ic_storage_file.png | Bin 0 -> 1273 bytes .../layout/file_selection_no_recent.xml | 13 +- .../layout/filestorage_selection.xml | 2 +- .../Resources/values/config.xml | 1 + .../Resources/values/strings.xml | 19 +- src/keepass2android/Utils/Util.cs | 59 +- src/keepass2android/app/App.cs | 2 +- .../fileselect/BrowserDialog.cs | 78 - .../fileselect/FileChooserFileProvider.cs | 2 + .../fileselect/FileSelectActivity.cs | 116 +- .../fileselect/FileStorageSetupActivity.cs | 82 + .../FileStorageSetupInitiatorActivity.cs | 76 + src/keepass2android/keepass2android.csproj | 35 +- 45 files changed, 3425 insertions(+), 2569 deletions(-) create mode 100644 src/Kp2aBusinessLogic/Io/FileStorageSetupActivity.cs create mode 100644 src/Kp2aBusinessLogic/Io/FileStorageSetupInitiatorActivity.cs create mode 100644 src/java/JavaFileStorage/src/keepass2android/javafilestorage/GoogleDriveFileStorage.java create mode 100644 src/keepass2android/Resources/drawable-hdpi/ic_storage_androidget.png create mode 100644 src/keepass2android/Resources/drawable-hdpi/ic_storage_androidsend.png create mode 100644 src/keepass2android/Resources/drawable-hdpi/ic_storage_file.png create mode 100644 src/keepass2android/Resources/drawable/ic_keepass2android.png create mode 100644 src/keepass2android/Resources/drawable/ic_keepass2android_nonet.png create mode 100644 src/keepass2android/Resources/drawable/ic_storage_androidget.png create mode 100644 src/keepass2android/Resources/drawable/ic_storage_androidsend.png create mode 100644 src/keepass2android/Resources/drawable/ic_storage_file.png delete mode 100644 src/keepass2android/fileselect/BrowserDialog.cs create mode 100644 src/keepass2android/fileselect/FileStorageSetupActivity.cs create mode 100644 src/keepass2android/fileselect/FileStorageSetupInitiatorActivity.cs diff --git a/src/KeePassLib2Android/KeePassLib2Android.csproj b/src/KeePassLib2Android/KeePassLib2Android.csproj index 8b5d1ce3..d75573c9 100644 --- a/src/KeePassLib2Android/KeePassLib2Android.csproj +++ b/src/KeePassLib2Android/KeePassLib2Android.csproj @@ -20,7 +20,7 @@ full False bin\Debug - DEBUG;EXCLUDE_KEYTRANSFORM + DEBUG;INCLUDE_TWOFISH;INCLUDE_KEYBOARD;INCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE prompt 4 False @@ -155,7 +155,7 @@ - + {A57B3ACE-5634-469A-88C4-858BB409F356} kp2akeytransform diff --git a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs index d63cc7b5..94bdb3c0 100644 --- a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs @@ -2,16 +2,9 @@ using System; using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Net; -using System.Text; - -using Android.App; using Android.Content; using Android.OS; -using Android.Runtime; -using Android.Views; -using Android.Widget; using KeePassLib.Serialization; using KeePassLib.Utility; @@ -89,8 +82,6 @@ namespace keepass2android.Io return new BuiltInFileTransaction(ioc, useFileTransaction); } - public IFileStorageSetup RequiredSetup { get { return null; } } - public class BuiltInFileTransaction : IWriteTransaction { private readonly FileTransactionEx _transaction; @@ -155,5 +146,54 @@ namespace keepass2android.Io //TODO throw new NotImplementedException(); } + + public bool RequiresSetup(IOConnectionInfo ioConnection) + { + return false; + } + + public string IocToPath(IOConnectionInfo ioc) + { + return ioc.Path; + } + + public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId) + { + if (protocolId != "file") + activity.PerformManualFileSelect(isForSave, requestCode, protocolId); + else + { + Intent intent = new Intent(); + activity.IocToIntent(intent, new IOConnectionInfo() { Path = protocolId+"://"}); + activity.OnImmediateResult(requestCode, (int) FileStorageResults.FileChooserPrepared, intent); + } + } + + public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode) + { + Intent intent = new Intent(); + activity.IocToIntent(intent, ioc); + activity.OnImmediateResult(requestCode, (int) FileStorageResults.FileUsagePrepared, intent); + } + + public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) + { + throw new NotImplementedException(); + } + + public void OnResume(IFileStorageSetupActivity activity) + { + throw new NotImplementedException(); + } + + public void OnStart(IFileStorageSetupActivity activity) + { + throw new NotImplementedException(); + } + + public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs b/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs index 63db7c79..719b53bf 100644 --- a/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/CachingFileStorage.cs @@ -4,6 +4,8 @@ using System.IO; using System.Net; using System.Security.Cryptography; using System.Text; +using Android.Content; +using Android.OS; using KeePassLib.Cryptography; using KeePassLib.Serialization; using KeePassLib.Utility; @@ -19,7 +21,7 @@ namespace keepass2android.Io /// called when a save operation only updated the cache but not the remote file /// /// The file which we tried to write - /// The exception why the remote file couldn't be updated + /// The exception why the remote file couldn't be updated void CouldntSaveToRemote(IOConnectionInfo ioc, Exception ex); /// @@ -398,8 +400,6 @@ namespace keepass2android.Io return new CachedWriteTransaction(ioc, useFileTransaction, this); } - public IFileStorageSetup RequiredSetup { get { return _cachedStorage.RequiredSetup; } } - public bool CompleteIoId() { throw new NotImplementedException(); @@ -436,6 +436,46 @@ namespace keepass2android.Io return _cachedStorage.GetFileDescription(ioc); } + public bool RequiresSetup(IOConnectionInfo ioConnection) + { + return _cachedStorage.RequiresSetup(ioConnection); + } + + public string IocToPath(IOConnectionInfo ioc) + { + return _cachedStorage.IocToPath(ioc); + } + + public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId) + { + _cachedStorage.StartSelectFile(activity, isForSave, requestCode, protocolId); + } + + public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode) + { + _cachedStorage.PrepareFileUsage(activity, ioc, requestCode); + } + + public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) + { + _cachedStorage.OnCreate(activity, savedInstanceState); + } + + public void OnResume(IFileStorageSetupActivity activity) + { + _cachedStorage.OnResume(activity); + } + + public void OnStart(IFileStorageSetupActivity activity) + { + _cachedStorage.OnStart(activity); + } + + public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) + { + _cachedStorage.OnActivityResult(activity, requestCode, resultCode, data); + } + public string GetBaseVersionHash(IOConnectionInfo ioc) { diff --git a/src/Kp2aBusinessLogic/Io/DropboxFileStorage.cs b/src/Kp2aBusinessLogic/Io/DropboxFileStorage.cs index 49e68146..1fb205fb 100644 --- a/src/Kp2aBusinessLogic/Io/DropboxFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/DropboxFileStorage.cs @@ -16,17 +16,14 @@ using Keepass2android.Javafilestorage; namespace keepass2android.Io { - public class DropboxFileStorage: JavaFileStorage + public partial class DropboxFileStorage: JavaFileStorage { public DropboxFileStorage(Context ctx, IKp2aApp app) : - base(new Keepass2android.Javafilestorage.DropboxFileStorage(ctx), app) + base(new Keepass2android.Javafilestorage.DropboxFileStorage(ctx, AppKey, AppSecret), app) { } - protected override string Protocol - { - get { return "dropbox"; } - } + } } #endif \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/FileStorageSetupActivity.cs b/src/Kp2aBusinessLogic/Io/FileStorageSetupActivity.cs new file mode 100644 index 00000000..fd3534c1 --- /dev/null +++ b/src/Kp2aBusinessLogic/Io/FileStorageSetupActivity.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using KeePassLib.Serialization; + +namespace keepass2android.Io +{ + public interface IFileStorageSetupActivity + { + IOConnectionInfo Ioc { get; } + String ProcessName { get; } + bool IsForSave { get; } + Bundle State { get; } + } +} \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/FileStorageSetupInitiatorActivity.cs b/src/Kp2aBusinessLogic/Io/FileStorageSetupInitiatorActivity.cs new file mode 100644 index 00000000..af50dfae --- /dev/null +++ b/src/Kp2aBusinessLogic/Io/FileStorageSetupInitiatorActivity.cs @@ -0,0 +1,20 @@ +using System; +using Android.App; +using Android.Content; +using Android.OS; +using KeePassLib.Serialization; + +namespace keepass2android.Io +{ + public interface IFileStorageSetupInitiatorActivity + { + void StartSelectFileProcess(IOConnectionInfo ioc, bool isForSave, int requestCode); + void StartFileUsageProcess(IOConnectionInfo ioc, int requestCode); + void OnImmediateResult(int requestCode, int result, Intent intent); + + Activity Activity { get; } + + void IocToIntent(Intent intent, IOConnectionInfo ioc); + void PerformManualFileSelect(bool isForSave, int requestCode, string protocolId); + } +} \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/GDriveFileStorage.cs b/src/Kp2aBusinessLogic/Io/GDriveFileStorage.cs index 3f55196c..f04d2612 100644 --- a/src/Kp2aBusinessLogic/Io/GDriveFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/GDriveFileStorage.cs @@ -14,7 +14,7 @@ using KeePassLib.Serialization; namespace keepass2android.Io { - public class GDriveFileStorage: IFileStorage + /*public class GDriveFileStorage: IFileStorage { public IEnumerable SupportedProtocols { get { yield return "gdrive"; } } public void Delete(IOConnectionInfo ioc) @@ -42,7 +42,6 @@ namespace keepass2android.Io throw new NotImplementedException(); } - public IFileStorageSetup RequiredSetup { get; private set; } public bool CompleteIoId() { @@ -78,5 +77,5 @@ namespace keepass2android.Io { throw new NotImplementedException(); } - } + }*/ } \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/IFileStorage.cs b/src/Kp2aBusinessLogic/Io/IFileStorage.cs index 5ef48faa..9523ecfd 100644 --- a/src/Kp2aBusinessLogic/Io/IFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/IFileStorage.cs @@ -1,20 +1,33 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Text; - using Android.App; using Android.Content; using Android.OS; -using Android.Runtime; -using Android.Views; -using Android.Widget; -using KeePassLib.Keys; using KeePassLib.Serialization; namespace keepass2android.Io { + + public enum FileStorageResults + { + FullFilenameSelected = 874345 + 1, + FileChooserPrepared = FullFilenameSelected + 1, + FileUsagePrepared = FileChooserPrepared + 1 + } + + public static class FileStorageSetupDefs + { + public static String ProcessNameSelectfile = "SELECT_FILE"; + public static String ProcessNameFileUsageSetup = "FILE_USAGE_SETUP"; + + public static String ExtraProcessName = "EXTRA_PROCESS_NAME"; + public static String ExtraPath = "PATH"; + public static String ExtraIsForSave = "IS_FOR_SAVE"; + public static String ExtraErrorMessage = "EXTRA_ERROR_MESSAGE"; + + } + /// /// Called as a callback from CheckForFileChangeAsync. /// @@ -69,14 +82,6 @@ namespace keepass2android.Io /// if true, force to use file system level transaction. This might be ignored if the file storage has built in transaction support IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction); - /// - /// Returns an instance of an implementation of IFileStorageSetup or one of the more complex interfaces. - /// Depending on the type returned, the caller should try to follow the interface as close as possible. - /// Returns null if the file storage is setup or doesn't require anything to work. - /// - /// This is due to different storage types requiring different workflows for authentication processes - IFileStorageSetup RequiredSetup { get; } - /// /// brings up a dialog to query credentials or something like this. /// @@ -111,32 +116,36 @@ namespace keepass2android.Io /// returns the description of the given file /// FileDescription GetFileDescription(IOConnectionInfo ioc); - } - /// - /// Base interface for required setup code - /// - public interface IFileStorageSetup - { /// - /// call this when the user explicitly wants to use this file storage. Might require user interaction. - /// May throw if the setup failed permanentaly. + /// returns true if everything is ok with connecting to the given file. + /// Returns False if PrepareFileUsage must be called first. /// - /// true if the setup was succesful immediately (without UI). Returns false if setup was not successful but no error occured or can be displayed. - bool TrySetup(Activity activity); - } + bool RequiresSetup(IOConnectionInfo ioConnection); - /// - /// Interface which can be used additionally for an IFileStorageSetup to indicate that setup must be completed in OnResume() - /// - public interface IFileStorageSetupOnResume - { /// - /// call this after TrySetup() returned false in the next OnResume() - /// May throw if the setup failed permanentaly. + /// converts the ioc to a path which may contain the credentials /// - /// true if setup was succesful - bool TrySetupOnResume(Activity activity); + string IocToPath(IOConnectionInfo ioc); + + /// + /// Initiates the process for choosing a file in the given file storage. + /// The file storage should either call OnImmediateResult or StartSelectFileProcess + /// + void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId); + + /// + /// Initiates the process for choosing a file in the given file storage. + /// The file storage should either call OnImmediateResult or StartFileUsageProcess + /// + void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode); + + //Setup methods: these are called from the setup activity so the file storage can handle UI events for authorization etc. + void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState); + void OnResume(IFileStorageSetupActivity activity); + void OnStart(IFileStorageSetupActivity activity); + void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data); + } public interface IWriteTransaction: IDisposable diff --git a/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs b/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs index 0ac0147a..6f864d41 100644 --- a/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/JavaFileStorage.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; using Android.App; +using Android.Content; +using Android.OS; using KeePassLib.Serialization; using KeePassLib.Utility; #if !EXCLUDE_JAVAFILESTORAGE @@ -16,6 +18,8 @@ namespace keepass2android.Io #if !EXCLUDE_JAVAFILESTORAGE public abstract class JavaFileStorage: IFileStorage { + protected string Protocol { get { return _jfs.ProtocolId; } } + public IEnumerable SupportedProtocols { get { yield return Protocol; } } @@ -64,7 +68,7 @@ namespace keepass2android.Io { try { - return Jfs.GetCurrentFileVersionFast(ioc.Path); + return Jfs.GetCurrentFileVersionFast(IocToPath(ioc)); } catch (Java.Lang.Exception e) { @@ -103,55 +107,11 @@ namespace keepass2android.Io return new JavaFileStorageWriteTransaction(IocToPath(ioc), useFileTransaction, this); } - public IFileStorageSetup RequiredSetup - { - get - { - if (Jfs.IsConnected) - return null; - return new JavaFileStorageSetup(this); - } - } - internal IJavaFileStorage Jfs { get { return _jfs; } } - public class JavaFileStorageSetup : IFileStorageSetup, IFileStorageSetupOnResume - { - private readonly JavaFileStorage _javaFileStorage; - - public JavaFileStorageSetup(JavaFileStorage javaFileStorage) - { - _javaFileStorage = javaFileStorage; - } - - public bool TrySetup(Activity activity) - { - try - { - return _javaFileStorage.Jfs.TryConnect(activity); - } - catch (Java.Lang.Exception e) - { - throw _javaFileStorage.LogAndConvertJavaException(e); - } - } - - public bool TrySetupOnResume(Activity activity) - { - try - { - _javaFileStorage.Jfs.OnResume(); - return _javaFileStorage.Jfs.IsConnected; - } - catch (Java.Lang.Exception e) - { - throw _javaFileStorage.LogAndConvertJavaException(e); - } - } - } class JavaFileStorageWriteTransaction: IWriteTransaction { @@ -255,13 +215,14 @@ namespace keepass2android.Io CanWrite = e.CanWrite, IsDirectory = e.IsDirectory, LastModified = JavaTimeToCSharp(e.LastModifiedTime), - Path = Protocol + "://" + e.Path, + Path = e.Path, SizeInBytes = e.SizeInBytes }; } public FileDescription GetFileDescription(IOConnectionInfo ioc) { + Kp2aLog.Log("GetFileDescription "+ioc.Path); try { return ConvertToFileDescription(Jfs.GetFileEntry(IocToPath(ioc))); @@ -276,24 +237,54 @@ namespace keepass2android.Io } } + public bool RequiresSetup(IOConnectionInfo ioConnection) + { + return _jfs.RequiresSetup(IocToPath(ioConnection)); + } + + public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId) + { + Kp2aLog.Log("StartSelectFile " + protocolId); + _jfs.StartSelectFile((IJavaFileStorageFileStorageSetupInitiatorActivity) activity, isForSave, requestCode); + } + + public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode) + { + _jfs.PrepareFileUsage((IJavaFileStorageFileStorageSetupInitiatorActivity)activity, IocToPath(ioc), requestCode); + } + + public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState) + { + _jfs.OnCreate(((IJavaFileStorageFileStorageSetupActivity)activity), savedInstanceState); + } + + public void OnResume(IFileStorageSetupActivity activity) + { + Kp2aLog.Log("JFS/OnResume Ioc.Path=" +activity.Ioc.Path+". Path="+((IJavaFileStorageFileStorageSetupActivity)activity).Path); + _jfs.OnResume(((IJavaFileStorageFileStorageSetupActivity) activity)); + } + + public void OnStart(IFileStorageSetupActivity activity) + { + _jfs.OnStart(((IJavaFileStorageFileStorageSetupActivity) activity)); + } + + public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) + { + _jfs.OnActivityResult(((IJavaFileStorageFileStorageSetupActivity) activity), requestCode, resultCode, data); + } + private DateTime JavaTimeToCSharp(long javatime) { - //todo test return new DateTime(1970, 1, 1).AddMilliseconds(javatime); } - private string IocToPath(IOConnectionInfo ioc) + public string IocToPath(IOConnectionInfo ioc) { - if (ioc.Path.StartsWith(Protocol + "://")) - return ioc.Path.Substring(Protocol.Length + 3); - else - { - return ioc.Path; - } + return ioc.Path; } - protected abstract string Protocol { get; } } #endif } \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj index 0ea863db..cbc7aff9 100644 --- a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj +++ b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj @@ -20,7 +20,7 @@ full false bin\Debug\ - TRACE;DEBUG;EXCLUDE_JAVAFILESTORAGE + TRACE;DEBUG;INCLUDE_TWOFISH;INCLUDE_KEYBOARD;INCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE prompt 4 @@ -58,7 +58,10 @@ + + + @@ -93,7 +96,7 @@ - + {48574278-4779-4b3a-a9e4-9cf1bc285d0b} JavaFileStorageBindings diff --git a/src/java/JavaFileStorage/.classpath b/src/java/JavaFileStorage/.classpath index 2731f9c5..a46423a1 100644 --- a/src/java/JavaFileStorage/.classpath +++ b/src/java/JavaFileStorage/.classpath @@ -5,5 +5,7 @@ + + diff --git a/src/java/JavaFileStorage/AndroidManifest.xml b/src/java/JavaFileStorage/AndroidManifest.xml index 08024eeb..5cad9c93 100644 --- a/src/java/JavaFileStorage/AndroidManifest.xml +++ b/src/java/JavaFileStorage/AndroidManifest.xml @@ -18,5 +18,6 @@ + diff --git a/src/java/JavaFileStorage/project.properties b/src/java/JavaFileStorage/project.properties index 484dab07..9968ee5e 100644 --- a/src/java/JavaFileStorage/project.properties +++ b/src/java/JavaFileStorage/project.properties @@ -8,8 +8,9 @@ # project structure. # # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt +proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:proguard-google-api-client.txt # Project target. target=android-17 android.library=true +android.library.reference.1=../../../../../../../AppData/Local/Android/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib diff --git a/src/java/JavaFileStorage/src/keepass2android/javafilestorage/DropboxFileStorage.java b/src/java/JavaFileStorage/src/keepass2android/javafilestorage/DropboxFileStorage.java index 7dcf3417..17fbdaaa 100644 --- a/src/java/JavaFileStorage/src/keepass2android/javafilestorage/DropboxFileStorage.java +++ b/src/java/JavaFileStorage/src/keepass2android/javafilestorage/DropboxFileStorage.java @@ -15,6 +15,7 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Bundle; import android.os.DropBoxManager.Entry; import android.util.Log; import android.widget.Toast; @@ -35,7 +36,7 @@ import com.dropbox.client2.session.Session.AccessType; public class DropboxFileStorage implements JavaFileStorage { //NOTE: also adjust secret! - final static private String APP_KEY = "i8shu7v1hgh7ynt"; //KP2A + //final static private String APP_KEY = "i8shu7v1hgh7ynt"; //KP2A //final static private String APP_KEY = "4ybka4p4a1027n6"; //FileStorageTest // If you'd like to change the access type to the full Dropbox instead of @@ -51,14 +52,36 @@ public class DropboxFileStorage implements JavaFileStorage { DropboxAPI mApi; private boolean mLoggedIn = false; private Context mContext; + + private String appKey; + private String appSecret; - public DropboxFileStorage(Context ctx) + public DropboxFileStorage(Context ctx, String _appKey, String _appSecret) { + appKey = _appKey; + appSecret = _appSecret; mContext = ctx; // We create a new AuthSession so that we can use the Dropbox API. AndroidAuthSession session = buildSession(); mApi = new DropboxAPI(session); + checkAppKeySetup(); + } + + public DropboxFileStorage(Context ctx, String _appKey, String _appSecret, boolean clearKeysOnStart) + { + appKey = _appKey; + appSecret = _appSecret; + mContext = ctx; + + if (clearKeysOnStart) + clearKeys(); + + + // We create a new AuthSession so that we can use the Dropbox API. + AndroidAuthSession session = buildSession(); + mApi = new DropboxAPI(session); + checkAppKeySetup(); } @@ -69,29 +92,6 @@ public class DropboxFileStorage implements JavaFileStorage { return mLoggedIn; } - public void onResume() - { - AndroidAuthSession session = mApi.getSession(); - - // The next part must be inserted in the onResume() method of the - // activity from which session.startAuthentication() was called, so - // that Dropbox authentication completes properly. - if (session.authenticationSuccessful()) { - try { - // Mandatory call to complete the auth - session.finishAuthentication(); - - // Store it locally in our app for later use - TokenPair tokens = session.getAccessTokenPair(); - storeKeys(tokens.key, tokens.secret); - setLoggedIn(true); - } catch (IllegalStateException e) { - Log.i(TAG, "Error authenticating", e); - throw e; - } - } - } - private void setLoggedIn(boolean b) { mLoggedIn = b; @@ -101,7 +101,7 @@ public class DropboxFileStorage implements JavaFileStorage { // Check if the app has set up its manifest properly. Intent testIntent = new Intent(Intent.ACTION_VIEW); - String scheme = "db-" + APP_KEY; + String scheme = "db-" + appKey; String uri = scheme + "://" + AuthActivity.AUTH_VERSION + "/test"; testIntent.setData(Uri.parse(uri)); PackageManager pm = mContext.getPackageManager(); @@ -123,9 +123,10 @@ public class DropboxFileStorage implements JavaFileStorage { public boolean checkForFileChangeFast(String path, String previousFileVersion) throws Exception { - if ((previousFileVersion == null) || (previousFileVersion == "")) + if ((previousFileVersion == null) || (previousFileVersion.equals(""))) return false; try { + path = removeProtocol(path); com.dropbox.client2.DropboxAPI.Entry entry = mApi.metadata(path, 1, null, false, null); return entry.hash != previousFileVersion; } catch (DropboxException e) { @@ -136,6 +137,7 @@ public class DropboxFileStorage implements JavaFileStorage { public String getCurrentFileVersionFast(String path) { try { + path = removeProtocol(path); com.dropbox.client2.DropboxAPI.Entry entry = mApi.metadata(path, 1, null, false, null); return entry.rev; } catch (DropboxException e) { @@ -147,6 +149,7 @@ public class DropboxFileStorage implements JavaFileStorage { public InputStream openFileForRead(String path) throws Exception { try { + path = removeProtocol(path); return mApi.getFileStream(path, null); } catch (DropboxException e) { //System.out.println("Something went wrong: " + e); @@ -158,6 +161,7 @@ public class DropboxFileStorage implements JavaFileStorage { { ByteArrayInputStream bis = new ByteArrayInputStream(data); try { + path = removeProtocol(path); //TODO: it would be nice to be able to use the parent version with putFile() mApi.putFileOverwrite(path, bis, data.length, null); } catch (DropboxException e) { @@ -231,7 +235,6 @@ public class DropboxFileStorage implements JavaFileStorage { edit.commit(); } - //TODO: call when Unlinked Exception private void clearKeys() { SharedPreferences prefs = mContext.getSharedPreferences(ACCOUNT_PREFS_NAME, 0); Editor edit = prefs.edit(); @@ -240,8 +243,7 @@ public class DropboxFileStorage implements JavaFileStorage { } private AndroidAuthSession buildSession() { - //note: the SecretKeys class is not public because the App-Secret must be secret! - AppKeyPair appKeyPair = new AppKeyPair(APP_KEY, SecretKeys.DROPBOX_APP_SECRET); + AppKeyPair appKeyPair = new AppKeyPair(appKey, appSecret); AndroidAuthSession session; String[] stored = getKeys(); @@ -263,6 +265,7 @@ public class DropboxFileStorage implements JavaFileStorage { public void createFolder(String path) throws Exception { try { + path = removeProtocol(path); mApi.createFolder(path); } catch (DropboxException e) { @@ -274,6 +277,7 @@ public class DropboxFileStorage implements JavaFileStorage { public List listFiles(String dirName) throws Exception { try { + dirName = removeProtocol(dirName); com.dropbox.client2.DropboxAPI.Entry dirEntry = mApi.metadata(dirName, 0, null, true, null); if (dirEntry.isDeleted) @@ -305,7 +309,7 @@ public class DropboxFileStorage implements JavaFileStorage { fileEntry.canWrite = true; fileEntry.isDirectory = e.isDir; fileEntry.sizeInBytes = e.bytes; - fileEntry.path = e.path; + fileEntry.path = getProtocolId()+"://"+ e.path; //Log.d("JFS","fileEntry="+fileEntry); Date lastModifiedDate = null; if (e.modified != null) @@ -322,6 +326,7 @@ public class DropboxFileStorage implements JavaFileStorage { public void delete(String path) throws Exception { try { + path = removeProtocol(path); mApi.delete(path); } catch (DropboxException e) { throw convertException(e); @@ -334,8 +339,8 @@ public class DropboxFileStorage implements JavaFileStorage { public FileEntry getFileEntry(String filename) throws Exception { try { - Log.d("JFS", "Hi!"); - Log.d("JFS", "mApi = "+mApi); + filename = removeProtocol(filename); + Log.d("KP2AJ", "getFileEntry(), mApi = "+mApi+" filename="+filename); com.dropbox.client2.DropboxAPI.Entry dbEntry = mApi.metadata(filename, 0, null, false, null); Log.d("JFS", "dbEntry = "+dbEntry); @@ -350,4 +355,164 @@ public class DropboxFileStorage implements JavaFileStorage { } } + @Override + public void startSelectFile(FileStorageSetupInitiatorActivity activity, boolean isForSave, + int requestCode) + { + + String path = getProtocolId()+":///"; + Log.d("KP2AJ", "startSelectFile "+path+", connected: "+path); + if (isConnected()) + { + Intent intent = new Intent(); + intent.putExtra(EXTRA_IS_FOR_SAVE, isForSave); + intent.putExtra(EXTRA_PATH, path); + activity.onImmediateResult(requestCode, RESULT_FILECHOOSER_PREPARED, intent); + } + else + { + activity.startSelectFileProcess(path, isForSave, requestCode); + } + + + + } + + @Override + public String getProtocolId() { + return "dropbox"; + } + + public boolean requiresSetup(String path) + { + return !isConnected(); + } + + @Override + public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode) { + if (isConnected()) + { + Intent intent = new Intent(); + intent.putExtra(EXTRA_PATH, path); + activity.onImmediateResult(requestCode, RESULT_FILEUSAGE_PREPARED, intent); + } + else + { + activity.startFileUsageProcess(path, requestCode); + } + + } + + @Override + public void onCreate(FileStorageSetupActivity activity, Bundle savedInstanceState) { + + Log.d("KP2AJ", "OnCreate"); + + } + + @Override + public void onResume(FileStorageSetupActivity activity) { + + Log.d("KP2AJ", "OnResume. LoggedIn="+mLoggedIn); + if (mLoggedIn) + { + finishActivityWithSuccess(activity); + return; + } + + AndroidAuthSession session = mApi.getSession(); + + // The next part must be inserted in the onResume() method of the + // activity from which session.startAuthentication() was called, so + // that Dropbox authentication completes properly. + if (session.authenticationSuccessful()) { + try { + // Mandatory call to complete the auth + session.finishAuthentication(); + + // Store it locally in our app for later use + TokenPair tokens = session.getAccessTokenPair(); + storeKeys(tokens.key, tokens.secret); + setLoggedIn(true); + + finishActivityWithSuccess(activity); + return; + + } catch (Throwable t) { + Log.i(TAG, "Error authenticating", t); + Intent data = new Intent(); + data.putExtra(EXTRA_ERROR_MESSAGE, t.getMessage()); + ((Activity)activity).setResult(Activity.RESULT_CANCELED, data); + ((Activity)activity).finish(); + return; + } + } + + JavaFileStorage.FileStorageSetupActivity storageSetupAct = (JavaFileStorage.FileStorageSetupActivity)activity; + + if (storageSetupAct.getState().containsKey("hasStartedAuth")) + { + Log.i(TAG, "authenticating not succesful"); + Intent data = new Intent(); + data.putExtra(EXTRA_ERROR_MESSAGE, "authenticating not succesful"); + ((Activity)activity).setResult(Activity.RESULT_CANCELED, data); + ((Activity)activity).finish(); + } + else + { + Log.d("KP2AJ", "Starting auth"); + mApi.getSession().startAuthentication(((Activity)activity)); + storageSetupAct.getState().putBoolean("hasStartedAuth", true); + + } + + + } + + private void finishActivityWithSuccess(FileStorageSetupActivity setupActivity) { + Log.d("KP2AJ", "Success with authentcating!"); + Activity activity = (Activity)setupActivity; + + if (setupActivity.getProcessName().equals(PROCESS_NAME_FILE_USAGE_SETUP)) + { + Intent data = new Intent(); + data.putExtra(EXTRA_IS_FOR_SAVE, setupActivity.isForSave()); + data.putExtra(EXTRA_PATH, setupActivity.getPath()); + activity.setResult(RESULT_FILEUSAGE_PREPARED, data); + activity.finish(); + return; + } + if (setupActivity.getProcessName().equals(PROCESS_NAME_SELECTFILE)) + { + Intent data = new Intent(); + data.putExtra(EXTRA_PATH, setupActivity.getPath()); + activity.setResult(RESULT_FILECHOOSER_PREPARED, data); + activity.finish(); + return; + } + + Log.w("KP2AJ", "Unknown process: " + setupActivity.getProcessName()); + + + } + + @Override + public void onStart(FileStorageSetupActivity activity) { + + + } + + @Override + public void onActivityResult(FileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) { + //nothing to do here + + } + + String removeProtocol(String path) + { + if (path == null) + return null; + return path.substring(getProtocolId().length()+3); + } + } diff --git a/src/java/JavaFileStorage/src/keepass2android/javafilestorage/GoogleDriveFileStorage.java b/src/java/JavaFileStorage/src/keepass2android/javafilestorage/GoogleDriveFileStorage.java new file mode 100644 index 00000000..ef467122 --- /dev/null +++ b/src/java/JavaFileStorage/src/keepass2android/javafilestorage/GoogleDriveFileStorage.java @@ -0,0 +1,262 @@ +package keepass2android.javafilestorage; + +import java.io.IOException; +import java.io.InputStream; + +import java.util.ArrayList; +import java.util.List; + +import com.google.api.client.extensions.android.http.AndroidHttp; +import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential; +import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException; +import com.google.api.client.json.gson.GsonFactory; +import com.google.api.services.drive.Drive; +import com.google.api.services.drive.Drive.Children; +import com.google.api.services.drive.DriveScopes; +import com.google.api.services.drive.model.ChildList; +import com.google.api.services.drive.model.ChildReference; + +import android.accounts.AccountManager; +import android.app.Activity; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; +import android.preference.PreferenceManager; + +public class GoogleDriveFileStorage +{}; +/*/ +public class GoogleDriveFileStorage implements JavaFileStorage { + + private static Drive service; + //private GoogleAccountCredential credential; + + static final int MAGIC_GDRIVE=2082334; + static final int REQUEST_ACCOUNT_PICKER = MAGIC_GDRIVE+1; + static final int REQUEST_AUTHORIZATION = MAGIC_GDRIVE+2; + + class TestConnectionTask extends AsyncTask + { + @Override + protected Void doInBackground(Object... params) { + + Activity activity = (Activity) params[0]; + + //try to list files: + //todo: is there a simpler way to test if the user is authorized? + try + { + + + return true; + } + catch (UserRecoverableAuthIOException e) { + activity.startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); + } + catch (Throwable t) + { + Intent data = new Intent(); + data.putExtra(EXTRA_ERROR_MESSAGE, t.getMessage()); + activity.setResult(Activity.RESULT_CANCELED, data); + activity.finish(); + } + + } + } + + private static void printFilesInFolder(Drive service, String folderId) + throws IOException { + Children.List request = service.files().list(); + + do { + try { + ChildList children = request.execute(); + + for (ChildReference child : children.getItems()) { + System.out.println("File Id: " + child.getId()); + } + request.setPageToken(children.getNextPageToken()); + } catch (IOException e) { + System.out.println("An error occurred: " + e); + request.setPageToken(null); + } + } while (request.getPageToken() != null && + request.getPageToken().length() > 0); + } + + public boolean tryConnect(Activity activity) { + + List scopes = new ArrayList(); + scopes.add(DriveScopes.DRIVE); + GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(activity, scopes); + + String storedAccountName = PreferenceManager.getDefaultSharedPreferences(activity).getString("GDRIVE_ACCOUNT_NAME", null); + + if (storedAccountName != null) + { + credential.setSelectedAccountName(storedAccountName); + //try to list files: + //todo: is there a simpler way to test if the user is authorized? + try + { + + return true; + } + catch (UserRecoverableAuthIOException e) { + activity.startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); + } + + catch (Throwable t) + { + return false; + } + + } + else + { + + activity.startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); + return false; + } + + } + + + + @Override + public boolean checkForFileChangeFast(String path, + String previousFileVersion) throws Exception { + // TODO Auto-generated method stub + return false; + } + + @Override + public String getCurrentFileVersionFast(String path) { + // TODO Auto-generated method stub + return null; + } + + @Override + public InputStream openFileForRead(String path) throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public void uploadFile(String path, byte[] data, boolean writeTransactional) + throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public void createFolder(String path) throws Exception { + // TODO Auto-generated method stub + + } + + @Override + public List listFiles(String dirName) throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public FileEntry getFileEntry(String filename) throws Exception { + // TODO Auto-generated method stub + return null; + } + + @Override + public void delete(String path) throws Exception { + // TODO Auto-generated method stub + + } + + + private Drive getDriveService(GoogleAccountCredential credential) { + return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential) + .build(); + } + + @Override + public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case REQUEST_ACCOUNT_PICKER: + + if (resultCode == Activity.RESULT_OK && data != null && data.getExtras() != null) { + String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); + if (accountName != null) { + //credential.setSelectedAccountName(accountName); + todo + return; + } + } + todo + + case REQUEST_AUTHORIZATION: + if (resultCode == Activity.RESULT_OK) { + // App is authorized + todo + } else { + // User denied access, show him the account chooser again + activity.startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); + } + } + + } + + @Override + public void startSelectFile(Activity activity, boolean isForSave, + int requestCode) { + ((JavaFileStorage.FileStorageSetupInitiatorActivity)(activity)).startSelectFileProcess(getProtocolId()+"://", isForSave, requestCode); + } + + @Override + public void prepareFileUsage(Activity activity, String path, int requestCode) { + ((JavaFileStorage.FileStorageSetupInitiatorActivity)(activity)).startFileUsageProcess(path, requestCode); + + } + + @Override + public String getProtocolId() { + + return "gdrive"; + } + + + + @Override + public void onResume(Activity activity) { + + JavaFileStorage.FileStorageSetupActivity setupAct = (FileStorageSetupActivity) activity; + + if (activity.isFinishing()) + return; + + if (!hasAccount(setupAct)) + { + List scopes = new ArrayList(); + scopes.add(DriveScopes.DRIVE); + GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(activity, scopes); + + activity.startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); + + } + else + { + + + + } + + } + + @Override + public void onStart(Activity activity) { + // TODO Auto-generated method stub + + } + +} +*/ \ No newline at end of file diff --git a/src/java/JavaFileStorage/src/keepass2android/javafilestorage/JavaFileStorage.java b/src/java/JavaFileStorage/src/keepass2android/javafilestorage/JavaFileStorage.java index 631df6f4..26d555a0 100644 --- a/src/java/JavaFileStorage/src/keepass2android/javafilestorage/JavaFileStorage.java +++ b/src/java/JavaFileStorage/src/keepass2android/javafilestorage/JavaFileStorage.java @@ -4,9 +4,37 @@ import java.io.InputStream; import java.util.List; import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; public interface JavaFileStorage { + public static final String PROCESS_NAME_SELECTFILE = "SELECT_FILE"; + public static final String PROCESS_NAME_FILE_USAGE_SETUP = "FILE_USAGE_SETUP"; + + public static final String EXTRA_PROCESS_NAME = "EXTRA_PROCESS_NAME"; + public static final String EXTRA_PATH = "fileName"; //match KP2A PasswordActivity Ioc-Path Extra key + public static final String EXTRA_IS_FOR_SAVE = "IS_FOR_SAVE"; + public static final String EXTRA_ERROR_MESSAGE = "EXTRA_ERROR_MESSAGE"; + + +public interface FileStorageSetupInitiatorActivity +{ + void startSelectFileProcess(String path, boolean isForSave, int requestCode); + void startFileUsageProcess(String path, int requestCode); + void onImmediateResult(int requestCode, int result, Intent intent); + Activity getActivity(); +} + +public interface FileStorageSetupActivity +{ + String getPath(); + String getProcessName(); + //int getRequestCode(); + boolean isForSave(); + Bundle getState(); +} + public class FileEntry { public String path; @@ -66,11 +94,26 @@ public class FileEntry { } - public boolean tryConnect(Activity activity); + //public boolean tryConnect(Activity activity); - public void onResume(); + //public void onResume(); + + //public void onActivityResult(Activity activity, final int requestCode, final int resultCode, final Intent data); - public boolean isConnected(); + //public boolean isConnected(); + + public static int MAGIC_NUMBER_JFS = 874345; + public static int RESULT_FULL_FILENAME_SELECTED = MAGIC_NUMBER_JFS+1; + public static int RESULT_FILECHOOSER_PREPARED = MAGIC_NUMBER_JFS+2; + public static int RESULT_FILEUSAGE_PREPARED = MAGIC_NUMBER_JFS+3; + + public boolean requiresSetup(String path); + + public void startSelectFile(FileStorageSetupInitiatorActivity activity, boolean isForSave, int requestCode); + + public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode); + + public String getProtocolId(); public boolean checkForFileChangeFast(String path, String previousFileVersion) throws Exception; @@ -88,4 +131,9 @@ public class FileEntry { public void delete(String path) throws Exception; + public void onCreate(FileStorageSetupActivity activity, Bundle savedInstanceState); + public void onResume(FileStorageSetupActivity activity); + public void onStart(FileStorageSetupActivity activity); + public void onActivityResult(FileStorageSetupActivity activity, int requestCode, int resultCode, Intent data); + } \ No newline at end of file diff --git a/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/FragmentFiles.java b/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/FragmentFiles.java index c26fd2f3..78a3e68f 100644 --- a/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/FragmentFiles.java +++ b/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/FragmentFiles.java @@ -980,11 +980,14 @@ public class FragmentFiles extends Fragment implements if (path == null || !BaseFileProviderUtils.isDirectory(getActivity(), path)) + { + Log.d(CLASSNAME, "load default path"); path = BaseFileProviderUtils .getDefaultPath( getActivity(), path == null ? mFileProviderAuthority : path .getAuthority()); + } if (path == null) { showCannotConnectToServiceAndFinish(); diff --git a/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/prefs/DisplayPrefs.java b/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/prefs/DisplayPrefs.java index c86aa64c..3a51fdaa 100644 --- a/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/prefs/DisplayPrefs.java +++ b/src/java/android-filechooser/code/src/group/pals/android/lib/ui/filechooser/prefs/DisplayPrefs.java @@ -213,10 +213,7 @@ public class DisplayPrefs extends Prefs { * @since v4.7 beta */ public static boolean isRememberLastLocation(Context c) { - return p(c).getBoolean( - c.getString(R.string.afc_pkey_display_remember_last_location), - c.getResources().getBoolean( - R.bool.afc_pkey_display_remember_last_location_def)); + return false; //KP2A: don't allow to remember because of different protocols } /** diff --git a/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileChooserBridge.java b/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileChooserBridge.java index 70e1c6ef..1cd992dd 100644 --- a/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileChooserBridge.java +++ b/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileChooserBridge.java @@ -13,7 +13,7 @@ public class Kp2aFileChooserBridge { Class cls = FileChooserActivity.class; Intent intent = new Intent(ctx, cls); - + intent.putExtra(FileChooserActivity.EXTRA_FILE_PROVIDER_AUTHORITY, authority); intent.putExtra(FileChooserActivity.EXTRA_ROOTPATH, BaseFile.genContentIdUriBase(authority) .buildUpon() diff --git a/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileProvider.java b/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileProvider.java index d96b6b2a..9663b542 100644 --- a/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileProvider.java +++ b/src/java/android-filechooser/code/src/keepass2android/kp2afilechooser/Kp2aFileProvider.java @@ -230,7 +230,11 @@ public abstract class Kp2aFileProvider extends BaseFileProvider { private MatrixCursor doAnswerApiCommand(Uri uri) { MatrixCursor matrixCursor = null; - if (BaseFile.CMD_CANCEL.equals(uri.getLastPathSegment())) { + String lastPathSegment = uri.getLastPathSegment(); + + //Log.d(CLASSNAME, "lastPathSegment:" + lastPathSegment); + + if (BaseFile.CMD_CANCEL.equals(lastPathSegment)) { int taskId = ProviderUtils.getIntQueryParam(uri, BaseFile.PARAM_TASK_ID, 0); synchronized (mMapInterruption) { @@ -241,15 +245,14 @@ public abstract class Kp2aFileProvider extends BaseFileProvider { mMapInterruption.put(taskId, true); } return null; - } else if (BaseFile.CMD_GET_DEFAULT_PATH.equals(uri - .getLastPathSegment())) { + } else if (BaseFile.CMD_GET_DEFAULT_PATH.equals(lastPathSegment)) { return null; }// get default path - else if (BaseFile.CMD_IS_ANCESTOR_OF.equals(uri.getLastPathSegment())) { + else if (BaseFile.CMD_IS_ANCESTOR_OF.equals(lastPathSegment)) { return doCheckAncestor(uri); - } else if (BaseFile.CMD_GET_PARENT.equals(uri.getLastPathSegment())) { + } else if (BaseFile.CMD_GET_PARENT.equals(lastPathSegment)) { { String path = Uri.parse( @@ -292,7 +295,7 @@ public abstract class Kp2aFileProvider extends BaseFileProvider { return matrixCursor; } - } else if (BaseFile.CMD_SHUTDOWN.equals(uri.getLastPathSegment())) { + } else if (BaseFile.CMD_SHUTDOWN.equals(lastPathSegment)) { /* * TODO Stop all tasks. If the activity call this command in * onDestroy(), it seems that this code block will be suspended and @@ -492,7 +495,8 @@ public abstract class Kp2aFileProvider extends BaseFileProvider { //puts the file entry in the cache for later reuse with retrieveFileInfo private void updateFileEntryCache(FileEntry f) { - fileEntryMap.put(f.path, f); + if (f != null) + fileEntryMap.put(f.path, f); } //removes the file entry from the cache (if cached). Should be called whenever the file changes private void removeFromCache(String filename, boolean recursive) { @@ -501,11 +505,17 @@ public abstract class Kp2aFileProvider extends BaseFileProvider { if (recursive) { Set keys = fileEntryMap.keySet(); + Set keysToRemove = new HashSet(); for (String key: keys) { if (key.startsWith(key)) - fileEntryMap.remove(key); + keysToRemove.add(key); } + for (String key: keysToRemove) + { + fileEntryMap.remove(key); + } + } diff --git a/src/keepass2android/ChangeLog.cs b/src/keepass2android/ChangeLog.cs index ed16cc8e..da9bb881 100644 --- a/src/keepass2android/ChangeLog.cs +++ b/src/keepass2android/ChangeLog.cs @@ -22,6 +22,7 @@ namespace keepass2android AlertDialog.Builder builder = new AlertDialog.Builder(ctx); builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title)); String[] changeLog = { + ctx.GetString(Resource.String.ChangeLog_0_9), ctx.GetString(Resource.String.ChangeLog_0_8_6), ctx.GetString(Resource.String.ChangeLog_0_8_5), ctx.GetString(Resource.String.ChangeLog_0_8_4), diff --git a/src/keepass2android/FileStorageSelectionActivity.cs b/src/keepass2android/FileStorageSelectionActivity.cs index 4c8be667..a730280c 100644 --- a/src/keepass2android/FileStorageSelectionActivity.cs +++ b/src/keepass2android/FileStorageSelectionActivity.cs @@ -1,20 +1,10 @@ -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; - using Android.App; using Android.Content; using Android.Content.PM; -using Android.Graphics.Drawables; using Android.OS; -using Android.Runtime; using Android.Views; using Android.Widget; -using KeePassLib; -using KeePassLib.Keys; -using KeePassLib.Security; -using KeePassLib.Serialization; using keepass2android.Io; using keepass2android.view; using Object = Java.Lang.Object; @@ -24,15 +14,17 @@ namespace keepass2android [Activity (Label = "@string/app_name", ConfigurationChanges=ConfigChanges.Orientation|ConfigChanges.KeyboardHidden , Theme="@style/NoTitleBar")] public class FileStorageSelectionActivity : ListActivity { - private string _protocolToSetup; private FileStorageAdapter _fileStorageAdapter; + public const string AllowThirdPartyAppGet = "AllowThirdPartyAppGet"; + public const string AllowThirdPartyAppSend = "AllowThirdPartyAppSend"; + class FileStorageAdapter: BaseAdapter { private readonly FileStorageSelectionActivity _context; - private List _protocolIds = new List(); + private readonly List _protocolIds = new List(); public FileStorageAdapter(FileStorageSelectionActivity context) { @@ -40,8 +32,13 @@ namespace keepass2android //show all supported protocols: foreach (IFileStorage fs in App.Kp2a.FileStorages) _protocolIds.AddRange(fs.SupportedProtocols); - //except file:// + //put file:// to the top _protocolIds.Remove("file"); + _protocolIds.Insert(0, "file"); + if (context.Intent.GetBooleanExtra(AllowThirdPartyAppGet, false)) + _protocolIds.Add("androidget"); + if (context.Intent.GetBooleanExtra(AllowThirdPartyAppSend, false)) + _protocolIds.Add("androidsend"); } public override Object GetItem(int position) @@ -69,24 +66,7 @@ namespace keepass2android private void OnItemSelected(string protocolId) { - var fs = App.Kp2a.GetFileStorage(protocolId); - IFileStorageSetup fssetup = fs.RequiredSetup; - try - { - if ((fssetup == null) || (fssetup.TrySetup(this))) - { - ReturnProtocol(protocolId); - } - else - { - //setup not yet complete - _protocolToSetup = protocolId; - } - } - catch (Exception e) - { - Toast.MakeText(this, e.Message, ToastLength.Long).Show(); - } + ReturnProtocol(protocolId); } @@ -102,46 +82,16 @@ namespace keepass2android { base.OnCreate(bundle); - if (bundle != null) - _protocolToSetup = bundle.GetString("_protocolToSetup", null); SetContentView(Resource.Layout.filestorage_selection); _fileStorageAdapter = new FileStorageAdapter(this); - this.ListAdapter = _fileStorageAdapter; + ListAdapter = _fileStorageAdapter; FindViewById(Android.Resource.Id.List).ItemClick += (sender, args) => OnItemSelected((string)_fileStorageAdapter.GetItem(args.Position)); } - protected override void OnSaveInstanceState(Bundle outState) - { - base.OnSaveInstanceState(outState); - outState.PutString("_protocolToSetup",_protocolToSetup); - } - protected override void OnResume() - { - base.OnResume(); - if (!String.IsNullOrEmpty(_protocolToSetup)) - { - try - { - string protocolToSetup = _protocolToSetup; - _protocolToSetup = null; - - IFileStorageSetupOnResume fsSetup = App.Kp2a.GetFileStorage(protocolToSetup).RequiredSetup as IFileStorageSetupOnResume; - if ((fsSetup == null) || (fsSetup.TrySetupOnResume(this))) - { - ReturnProtocol(protocolToSetup); - } - - } - catch (Exception e) - { - Toast.MakeText(this, e.Message, ToastLength.Long).Show(); - } - } - } } } \ No newline at end of file diff --git a/src/keepass2android/PasswordActivity.cs b/src/keepass2android/PasswordActivity.cs index d639a3be..c08d3c6e 100644 --- a/src/keepass2android/PasswordActivity.cs +++ b/src/keepass2android/PasswordActivity.cs @@ -31,7 +31,7 @@ using Android.Content.PM; using KeePassLib.Keys; using KeePassLib.Serialization; using KeePassLib.Utility; - +using keepass2android.Io; using MemoryStream = System.IO.MemoryStream; namespace keepass2android @@ -189,6 +189,9 @@ namespace keepass2android } } break; + case (Result)FileStorageResults.FileUsagePrepared: + PeformLoadDatabase(); + break; } } @@ -272,26 +275,11 @@ namespace keepass2android Window.SetSoftInputMode(SoftInput.StateVisible); Button confirmButton = (Button)FindViewById(Resource.Id.pass_ok); - confirmButton.Click += (sender, e) => { - String pass = GetEditText(Resource.Id.password); - String key = GetEditText(Resource.Id.pass_keyfile); - if (pass.Length == 0 && key.Length == 0) + confirmButton.Click += (sender, e) => { - ErrorMessage(Resource.String.error_nopass); - return; - } - - CheckBox cbQuickUnlock = (CheckBox)FindViewById(Resource.Id.enable_quickunlock); - App.Kp2a.SetQuickUnlockEnabled(cbQuickUnlock.Checked); - - Handler handler = new Handler(); - LoadDb task = new LoadDb(App.Kp2a, _ioConnection, _loadDbTask, pass, key, new AfterLoad(handler, this)); - _loadDbTask = null; // prevent accidental re-use - - SetNewDefaultFile(); - - new ProgressTask(App.Kp2a, this, task).Run(); - }; + App.Kp2a.GetFileStorage(_ioConnection) + .PrepareFileUsage(new FileStorageSetupInitiatorActivity(this, OnActivityResult), _ioConnection, 0); + }; /*CheckBox checkBox = (CheckBox) FindViewById(Resource.Id.show_password); // Show or hide password @@ -334,6 +322,32 @@ namespace keepass2android RetrieveSettings(); } + private void PeformLoadDatabase() + { + String pass = GetEditText(Resource.Id.password); + String key = GetEditText(Resource.Id.pass_keyfile); + if (pass.Length == 0 && key.Length == 0) + { + ErrorMessage(Resource.String.error_nopass); + return; + } + + CheckBox cbQuickUnlock = (CheckBox) FindViewById(Resource.Id.enable_quickunlock); + App.Kp2a.SetQuickUnlockEnabled(cbQuickUnlock.Checked); + + //avoid password being visible while loading: + _showPassword = false; + MakePasswordMaskedOrVisible(); + + Handler handler = new Handler(); + LoadDb task = new LoadDb(App.Kp2a, _ioConnection, _loadDbTask, pass, key, new AfterLoad(handler, this)); + _loadDbTask = null; // prevent accidental re-use + + SetNewDefaultFile(); + + new ProgressTask(App.Kp2a, this, task).Run(); + } + private void MakePasswordMaskedOrVisible() { TextView password = (TextView) FindViewById(Resource.Id.password); @@ -470,7 +484,7 @@ namespace keepass2android //check if FileStorage setup is all done. Usually this should not occur here because the setup is //performed in FileSelectActivity, but e.g. if the user unlinks from Dropbox saving might fail and //the user is returned here. - if (App.Kp2a.GetFileStorage(_ioConnection).RequiredSetup != null) + if (App.Kp2a.GetFileStorage(_ioConnection).RequiresSetup(_ioConnection)) { GoToFileSelectActivity(); } diff --git a/src/keepass2android/Properties/AndroidManifest_net.xml b/src/keepass2android/Properties/AndroidManifest_net.xml index 0ef3bc08..07adbda9 100644 --- a/src/keepass2android/Properties/AndroidManifest_net.xml +++ b/src/keepass2android/Properties/AndroidManifest_net.xml @@ -1,6 +1,13 @@  - + + + + @@ -13,7 +20,20 @@ - + + + + + + + + + + + + + @@ -54,4 +74,5 @@ + \ No newline at end of file diff --git a/src/keepass2android/Resources/Resource.designer.cs b/src/keepass2android/Resources/Resource.designer.cs index cf82cc4d..d807fd38 100644 --- a/src/keepass2android/Resources/Resource.designer.cs +++ b/src/keepass2android/Resources/Resource.designer.cs @@ -27,6 +27,8 @@ namespace keepass2android public static void UpdateIdValues() { KeePassLib2Android.Resource.String.library_name = keepass2android.Resource.String.library_name; + TwofishCipher.Resource.String.ApplicationName = keepass2android.Resource.String.ApplicationName; + TwofishCipher.Resource.String.library_name = keepass2android.Resource.String.library_name; } public partial class Animation @@ -542,74 +544,74 @@ namespace keepass2android public partial class Boolean { - // aapt resource value: 0x7f080012 - public const int CopyToClipboardNotification_default = 2131230738; + // aapt resource value: 0x7f0a0012 + public const int CopyToClipboardNotification_default = 2131361810; - // aapt resource value: 0x7f080014 - public const int OpenKp2aKeyboardAutomatically_default = 2131230740; + // aapt resource value: 0x7f0a0014 + public const int OpenKp2aKeyboardAutomatically_default = 2131361812; - // aapt resource value: 0x7f080016 - public const int PreloadDatabaseEnabled_default = 2131230742; + // aapt resource value: 0x7f0a0016 + public const int PreloadDatabaseEnabled_default = 2131361814; - // aapt resource value: 0x7f080011 - public const int RememberRecentFiles_default = 2131230737; + // aapt resource value: 0x7f0a0011 + public const int RememberRecentFiles_default = 2131361809; - // aapt resource value: 0x7f080015 - public const int ShowUnlockedNotification_default = 2131230741; + // aapt resource value: 0x7f0a0015 + public const int ShowUnlockedNotification_default = 2131361813; - // aapt resource value: 0x7f080010 - public const int ShowUsernameInList_default = 2131230736; + // aapt resource value: 0x7f0a0010 + public const int ShowUsernameInList_default = 2131361808; - // aapt resource value: 0x7f08000f - public const int TanExpiresOnUse_default = 2131230735; + // aapt resource value: 0x7f0a000f + public const int TanExpiresOnUse_default = 2131361807; - // aapt resource value: 0x7f080013 - public const int UseKp2aKeyboard_default = 2131230739; + // aapt resource value: 0x7f0a0013 + public const int UseKp2aKeyboard_default = 2131361811; - // aapt resource value: 0x7f080000 - public const int abc_action_bar_embed_tabs_pre_jb = 2131230720; + // aapt resource value: 0x7f0a0000 + public const int abc_action_bar_embed_tabs_pre_jb = 2131361792; - // aapt resource value: 0x7f080001 - public const int abc_action_bar_expanded_action_views_exclusive = 2131230721; + // aapt resource value: 0x7f0a0001 + public const int abc_action_bar_expanded_action_views_exclusive = 2131361793; - // aapt resource value: 0x7f080005 - public const int abc_config_actionMenuItemAllCaps = 2131230725; + // aapt resource value: 0x7f0a0005 + public const int abc_config_actionMenuItemAllCaps = 2131361797; - // aapt resource value: 0x7f080004 - public const int abc_config_allowActionMenuItemTextWithIcon = 2131230724; + // aapt resource value: 0x7f0a0004 + public const int abc_config_allowActionMenuItemTextWithIcon = 2131361796; - // aapt resource value: 0x7f080003 - public const int abc_config_showMenuShortcutsWhenKeyboardPresent = 2131230723; + // aapt resource value: 0x7f0a0003 + public const int abc_config_showMenuShortcutsWhenKeyboardPresent = 2131361795; - // aapt resource value: 0x7f080002 - public const int abc_split_action_bar_is_narrow = 2131230722; + // aapt resource value: 0x7f0a0002 + public const int abc_split_action_bar_is_narrow = 2131361794; - // aapt resource value: 0x7f080006 - public const int afc_is_large_screen = 2131230726; + // aapt resource value: 0x7f0a0006 + public const int afc_is_large_screen = 2131361798; - // aapt resource value: 0x7f08000a - public const int afc_pkey_display_remember_last_location_def = 2131230730; + // aapt resource value: 0x7f0a000a + public const int afc_pkey_display_remember_last_location_def = 2131361802; - // aapt resource value: 0x7f080009 - public const int afc_pkey_display_show_time_for_old_days_def = 2131230729; + // aapt resource value: 0x7f0a0009 + public const int afc_pkey_display_show_time_for_old_days_def = 2131361801; - // aapt resource value: 0x7f080008 - public const int afc_pkey_display_show_time_for_old_days_this_year_def = 2131230728; + // aapt resource value: 0x7f0a0008 + public const int afc_pkey_display_show_time_for_old_days_this_year_def = 2131361800; - // aapt resource value: 0x7f080007 - public const int afc_pkey_display_sort_ascending_def = 2131230727; + // aapt resource value: 0x7f0a0007 + public const int afc_pkey_display_sort_ascending_def = 2131361799; - // aapt resource value: 0x7f08000c - public const int keyfile_default = 2131230732; + // aapt resource value: 0x7f0a000c + public const int keyfile_default = 2131361804; - // aapt resource value: 0x7f08000b - public const int maskpass_default = 2131230731; + // aapt resource value: 0x7f0a000b + public const int maskpass_default = 2131361803; - // aapt resource value: 0x7f08000e - public const int omitbackup_default = 2131230734; + // aapt resource value: 0x7f0a000e + public const int omitbackup_default = 2131361806; - // aapt resource value: 0x7f08000d - public const int sort_default = 2131230733; + // aapt resource value: 0x7f0a000d + public const int sort_default = 2131361805; static Boolean() { @@ -624,65 +626,77 @@ namespace keepass2android public partial class Color { - // aapt resource value: 0x7f090013 - public const int abc_search_url_text_holo = 2131296275; + // aapt resource value: 0x7f070017 + public const int abc_search_url_text_holo = 2131165207; - // aapt resource value: 0x7f090000 - public const int abc_search_url_text_normal = 2131296256; + // aapt resource value: 0x7f070004 + public const int abc_search_url_text_normal = 2131165188; - // aapt resource value: 0x7f090002 - public const int abc_search_url_text_pressed = 2131296258; + // aapt resource value: 0x7f070006 + public const int abc_search_url_text_pressed = 2131165190; - // aapt resource value: 0x7f090001 - public const int abc_search_url_text_selected = 2131296257; + // aapt resource value: 0x7f070005 + public const int abc_search_url_text_selected = 2131165189; - // aapt resource value: 0x7f090003 - public const int afc_border_line_dark = 2131296259; + // aapt resource value: 0x7f070007 + public const int afc_border_line_dark = 2131165191; - // aapt resource value: 0x7f090006 - public const int afc_list_group_view_background_dark = 2131296262; + // aapt resource value: 0x7f07000a + public const int afc_list_group_view_background_dark = 2131165194; - // aapt resource value: 0x7f090007 - public const int afc_list_group_view_background_light = 2131296263; + // aapt resource value: 0x7f07000b + public const int afc_list_group_view_background_light = 2131165195; - // aapt resource value: 0x7f090004 - public const int afc_listview_cache_hint_dark = 2131296260; + // aapt resource value: 0x7f070008 + public const int afc_listview_cache_hint_dark = 2131165192; - // aapt resource value: 0x7f090005 - public const int afc_listview_cache_hint_light = 2131296261; + // aapt resource value: 0x7f070009 + public const int afc_listview_cache_hint_light = 2131165193; - // aapt resource value: 0x7f09000f - public const int bg_gray = 2131296271; + // aapt resource value: 0x7f070013 + public const int bg_gray = 2131165203; - // aapt resource value: 0x7f090008 - public const int blue_highlight = 2131296264; + // aapt resource value: 0x7f07000c + public const int blue_highlight = 2131165196; - // aapt resource value: 0x7f090012 - public const int dark_gray = 2131296274; + // aapt resource value: 0x7f070003 + public const int candidate_background = 2131165187; - // aapt resource value: 0x7f090011 - public const int element_being_moved = 2131296273; + // aapt resource value: 0x7f070000 + public const int candidate_normal = 2131165184; - // aapt resource value: 0x7f09000d - public const int emphasis = 2131296269; + // aapt resource value: 0x7f070002 + public const int candidate_other = 2131165186; - // aapt resource value: 0x7f09000e - public const int emphasis2 = 2131296270; + // aapt resource value: 0x7f070001 + public const int candidate_recommended = 2131165185; - // aapt resource value: 0x7f090009 - public const int group = 2131296265; + // aapt resource value: 0x7f070016 + public const int dark_gray = 2131165206; - // aapt resource value: 0x7f09000c - public const int group_header_button_pressed = 2131296268; + // aapt resource value: 0x7f070015 + public const int element_being_moved = 2131165205; - // aapt resource value: 0x7f09000a - public const int icon_background = 2131296266; + // aapt resource value: 0x7f070011 + public const int emphasis = 2131165201; - // aapt resource value: 0x7f09000b - public const int icon_text = 2131296267; + // aapt resource value: 0x7f070012 + public const int emphasis2 = 2131165202; - // aapt resource value: 0x7f090010 - public const int light_gray = 2131296272; + // aapt resource value: 0x7f07000d + public const int group = 2131165197; + + // aapt resource value: 0x7f070010 + public const int group_header_button_pressed = 2131165200; + + // aapt resource value: 0x7f07000e + public const int icon_background = 2131165198; + + // aapt resource value: 0x7f07000f + public const int icon_text = 2131165199; + + // aapt resource value: 0x7f070014 + public const int light_gray = 2131165204; static Color() { @@ -697,131 +711,140 @@ namespace keepass2android public partial class Dimension { - // aapt resource value: 0x7f0a0002 - public const int abc_action_bar_default_height = 2131361794; + // aapt resource value: 0x7f080005 + public const int abc_action_bar_default_height = 2131230725; - // aapt resource value: 0x7f0a0003 - public const int abc_action_bar_icon_vertical_padding = 2131361795; + // aapt resource value: 0x7f080006 + public const int abc_action_bar_icon_vertical_padding = 2131230726; - // aapt resource value: 0x7f0a0009 - public const int abc_action_bar_stacked_max_height = 2131361801; + // aapt resource value: 0x7f08000c + public const int abc_action_bar_stacked_max_height = 2131230732; - // aapt resource value: 0x7f0a0001 - public const int abc_action_bar_stacked_tab_max_width = 2131361793; + // aapt resource value: 0x7f080004 + public const int abc_action_bar_stacked_tab_max_width = 2131230724; - // aapt resource value: 0x7f0a0007 - public const int abc_action_bar_subtitle_bottom_margin = 2131361799; + // aapt resource value: 0x7f08000a + public const int abc_action_bar_subtitle_bottom_margin = 2131230730; - // aapt resource value: 0x7f0a0005 - public const int abc_action_bar_subtitle_text_size = 2131361797; + // aapt resource value: 0x7f080008 + public const int abc_action_bar_subtitle_text_size = 2131230728; - // aapt resource value: 0x7f0a0006 - public const int abc_action_bar_subtitle_top_margin = 2131361798; + // aapt resource value: 0x7f080009 + public const int abc_action_bar_subtitle_top_margin = 2131230729; - // aapt resource value: 0x7f0a0004 - public const int abc_action_bar_title_text_size = 2131361796; + // aapt resource value: 0x7f080007 + public const int abc_action_bar_title_text_size = 2131230727; - // aapt resource value: 0x7f0a0008 - public const int abc_action_button_min_width = 2131361800; + // aapt resource value: 0x7f08000b + public const int abc_action_button_min_width = 2131230731; - // aapt resource value: 0x7f0a0000 - public const int abc_config_prefDialogWidth = 2131361792; + // aapt resource value: 0x7f080003 + public const int abc_config_prefDialogWidth = 2131230723; - // aapt resource value: 0x7f0a000f - public const int abc_dropdownitem_icon_width = 2131361807; + // aapt resource value: 0x7f080012 + public const int abc_dropdownitem_icon_width = 2131230738; - // aapt resource value: 0x7f0a000d - public const int abc_dropdownitem_text_padding_left = 2131361805; + // aapt resource value: 0x7f080010 + public const int abc_dropdownitem_text_padding_left = 2131230736; - // aapt resource value: 0x7f0a000e - public const int abc_dropdownitem_text_padding_right = 2131361806; + // aapt resource value: 0x7f080011 + public const int abc_dropdownitem_text_padding_right = 2131230737; - // aapt resource value: 0x7f0a000a - public const int abc_panel_menu_list_width = 2131361802; + // aapt resource value: 0x7f08000d + public const int abc_panel_menu_list_width = 2131230733; - // aapt resource value: 0x7f0a000c - public const int abc_search_view_preferred_width = 2131361804; + // aapt resource value: 0x7f08000f + public const int abc_search_view_preferred_width = 2131230735; - // aapt resource value: 0x7f0a000b - public const int abc_search_view_text_min_width = 2131361803; + // aapt resource value: 0x7f08000e + public const int abc_search_view_text_min_width = 2131230734; - // aapt resource value: 0x7f0a0028 - public const int activity_horizontal_margin = 2131361832; + // aapt resource value: 0x7f08002b + public const int activity_horizontal_margin = 2131230763; - // aapt resource value: 0x7f0a0029 - public const int activity_vertical_margin = 2131361833; + // aapt resource value: 0x7f08002c + public const int activity_vertical_margin = 2131230764; - // aapt resource value: 0x7f0a0012 - public const int afc_10dp = 2131361810; + // aapt resource value: 0x7f080015 + public const int afc_10dp = 2131230741; - // aapt resource value: 0x7f0a0015 - public const int afc_10sp = 2131361813; + // aapt resource value: 0x7f080018 + public const int afc_10sp = 2131230744; - // aapt resource value: 0x7f0a0011 - public const int afc_15dp = 2131361809; + // aapt resource value: 0x7f080014 + public const int afc_15dp = 2131230740; - // aapt resource value: 0x7f0a0014 - public const int afc_2dp = 2131361812; + // aapt resource value: 0x7f080017 + public const int afc_2dp = 2131230743; - // aapt resource value: 0x7f0a0017 - public const int afc_2sp = 2131361815; + // aapt resource value: 0x7f08001a + public const int afc_2sp = 2131230746; - // aapt resource value: 0x7f0a0010 - public const int afc_30dp = 2131361808; + // aapt resource value: 0x7f080013 + public const int afc_30dp = 2131230739; - // aapt resource value: 0x7f0a0013 - public const int afc_5dp = 2131361811; + // aapt resource value: 0x7f080016 + public const int afc_5dp = 2131230742; - // aapt resource value: 0x7f0a0016 - public const int afc_5sp = 2131361814; + // aapt resource value: 0x7f080019 + public const int afc_5sp = 2131230745; - // aapt resource value: 0x7f0a0018 - public const int afc_button_location_max_width = 2131361816; + // aapt resource value: 0x7f08001b + public const int afc_button_location_max_width = 2131230747; - // aapt resource value: 0x7f0a0019 - public const int afc_button_location_min_width = 2131361817; + // aapt resource value: 0x7f08001c + public const int afc_button_location_min_width = 2131230748; - // aapt resource value: 0x7f0a0020 - public const int afc_button_navigators_min_height = 2131361824; + // aapt resource value: 0x7f080023 + public const int afc_button_navigators_min_height = 2131230755; - // aapt resource value: 0x7f0a0021 - public const int afc_button_ok_saveas_size = 2131361825; + // aapt resource value: 0x7f080024 + public const int afc_button_ok_saveas_size = 2131230756; - // aapt resource value: 0x7f0a001a - public const int afc_context_menu_item_padding = 2131361818; + // aapt resource value: 0x7f08001d + public const int afc_context_menu_item_padding = 2131230749; - // aapt resource value: 0x7f0a001b - public const int afc_context_menu_item_padding_left = 2131361819; + // aapt resource value: 0x7f08001e + public const int afc_context_menu_item_padding_left = 2131230750; - // aapt resource value: 0x7f0a001c - public const int afc_context_menu_width = 2131361820; + // aapt resource value: 0x7f08001f + public const int afc_context_menu_width = 2131230751; - // aapt resource value: 0x7f0a0023 - public const int afc_file_icon_size = 2131361827; + // aapt resource value: 0x7f080026 + public const int afc_file_icon_size = 2131230758; - // aapt resource value: 0x7f0a001d - public const int afc_single_button_min_width = 2131361821; + // aapt resource value: 0x7f080020 + public const int afc_single_button_min_width = 2131230752; - // aapt resource value: 0x7f0a0022 - public const int afc_thumbnail_size = 2131361826; + // aapt resource value: 0x7f080025 + public const int afc_thumbnail_size = 2131230757; - // aapt resource value: 0x7f0a001e - public const int afc_viewgroup_button_locations_bottom_divider_height = 2131361822; + // aapt resource value: 0x7f080021 + public const int afc_viewgroup_button_locations_bottom_divider_height = 2131230753; - // aapt resource value: 0x7f0a001f - public const int afc_widget_search_view_button_clear_size = 2131361823; + // aapt resource value: 0x7f080022 + public const int afc_widget_search_view_button_clear_size = 2131230754; - // aapt resource value: 0x7f0a0026 - public const int aosp_dialog_fixed_height_major = 2131361830; + // aapt resource value: 0x7f080029 + public const int aosp_dialog_fixed_height_major = 2131230761; - // aapt resource value: 0x7f0a0027 - public const int aosp_dialog_fixed_height_minor = 2131361831; + // aapt resource value: 0x7f08002a + public const int aosp_dialog_fixed_height_minor = 2131230762; - // aapt resource value: 0x7f0a0024 - public const int aosp_dialog_fixed_width_major = 2131361828; + // aapt resource value: 0x7f080027 + public const int aosp_dialog_fixed_width_major = 2131230759; - // aapt resource value: 0x7f0a0025 - public const int aosp_dialog_fixed_width_minor = 2131361829; + // aapt resource value: 0x7f080028 + public const int aosp_dialog_fixed_width_minor = 2131230760; + + // aapt resource value: 0x7f080001 + public const int candidate_font_height = 2131230721; + + // aapt resource value: 0x7f080002 + public const int candidate_vertical_padding = 2131230722; + + // aapt resource value: 0x7f080000 + public const int key_height = 2131230720; static Dimension() { @@ -1647,85 +1670,124 @@ namespace keepass2android public const int ic_action_search = 2130837773; // aapt resource value: 0x7f02010e - public const int ic_launcher = 2130837774; + public const int ic_keepass2android = 2130837774; // aapt resource value: 0x7f02010f - public const int ic_launcher_folder_small = 2130837775; + public const int ic_keepass2android_nonet = 2130837775; // aapt resource value: 0x7f020110 - public const int ic_launcher_gray = 2130837776; + public const int ic_launcher = 2130837776; // aapt resource value: 0x7f020111 - public const int ic_launcher_offline = 2130837777; + public const int ic_launcher_folder_small = 2130837777; // aapt resource value: 0x7f020112 - public const int ic_launcher_red = 2130837778; + public const int ic_launcher_gray = 2130837778; // aapt resource value: 0x7f020113 - public const int ic_menu_add_field_holo_light = 2130837779; + public const int ic_launcher_offline = 2130837779; // aapt resource value: 0x7f020114 - public const int ic_menu_remove_field_holo_light = 2130837780; + public const int ic_launcher_red = 2130837780; // aapt resource value: 0x7f020115 - public const int ic_menu_view = 2130837781; + public const int ic_menu_add_field_holo_light = 2130837781; // aapt resource value: 0x7f020116 - public const int ic_storage_dropbox = 2130837782; + public const int ic_menu_remove_field_holo_light = 2130837782; // aapt resource value: 0x7f020117 - public const int ic_storage_ftp = 2130837783; + public const int ic_menu_view = 2130837783; // aapt resource value: 0x7f020118 - public const int ic_storage_gdrive = 2130837784; + public const int ic_storage_androidget = 2130837784; // aapt resource value: 0x7f020119 - public const int ic_storage_http = 2130837785; + public const int ic_storage_androidsend = 2130837785; // aapt resource value: 0x7f02011a - public const int ic_storage_https = 2130837786; + public const int ic_storage_dropbox = 2130837786; // aapt resource value: 0x7f02011b - public const int ic_unlocked_gray = 2130837787; + public const int ic_storage_file = 2130837787; // aapt resource value: 0x7f02011c - public const int location_web_site = 2130837788; + public const int ic_storage_ftp = 2130837788; // aapt resource value: 0x7f02011d - public const int navigation_accept = 2130837789; + public const int ic_storage_gdrive = 2130837789; // aapt resource value: 0x7f02011e - public const int navigation_accept_dark = 2130837790; + public const int ic_storage_http = 2130837790; // aapt resource value: 0x7f02011f - public const int navigation_cancel = 2130837791; + public const int ic_storage_https = 2130837791; // aapt resource value: 0x7f020120 - public const int navigation_previous_item = 2130837792; + public const int ic_unlocked_gray = 2130837792; // aapt resource value: 0x7f020121 - public const int navigation_previous_item_dark = 2130837793; + public const int location_web_site = 2130837793; // aapt resource value: 0x7f020122 - public const int notify = 2130837794; + public const int navigation_accept = 2130837794; // aapt resource value: 0x7f020123 - public const int notify_keyboard = 2130837795; + public const int navigation_accept_dark = 2130837795; // aapt resource value: 0x7f020124 - public const int oktoberfest = 2130837796; + public const int navigation_cancel = 2130837796; // aapt resource value: 0x7f020125 - public const int RedButton = 2130837797; + public const int navigation_previous_item = 2130837797; // aapt resource value: 0x7f020126 - public const int section_header = 2130837798; + public const int navigation_previous_item_dark = 2130837798; // aapt resource value: 0x7f020127 - public const int transparent = 2130837799; + public const int notify = 2130837799; // aapt resource value: 0x7f020128 - public const int YellowButton = 2130837800; + public const int notify_keyboard = 2130837800; + + // aapt resource value: 0x7f020129 + public const int oktoberfest = 2130837801; + + // aapt resource value: 0x7f02012a + public const int RedButton = 2130837802; + + // aapt resource value: 0x7f02012b + public const int section_header = 2130837803; + + // aapt resource value: 0x7f02012c + public const int sym_keyboard = 2130837804; + + // aapt resource value: 0x7f02012d + public const int sym_keyboard_delete = 2130837805; + + // aapt resource value: 0x7f02012e + public const int sym_keyboard_done = 2130837806; + + // aapt resource value: 0x7f02012f + public const int sym_keyboard_kp2a = 2130837807; + + // aapt resource value: 0x7f020130 + public const int sym_keyboard_return = 2130837808; + + // aapt resource value: 0x7f020131 + public const int sym_keyboard_search = 2130837809; + + // aapt resource value: 0x7f020132 + public const int sym_keyboard_shift = 2130837810; + + // aapt resource value: 0x7f020133 + public const int sym_keyboard_space = 2130837811; + + // aapt resource value: 0x7f020134 + public const int transparent = 2130837812; + + // aapt resource value: 0x7f020135 + public const int YellowButton = 2130837813; static Drawable() { @@ -1740,881 +1802,884 @@ namespace keepass2android public partial class Id { - // aapt resource value: 0x7f070052 - public const int Credit = 2131165266; + // aapt resource value: 0x7f090052 + public const int Credit = 2131296338; - // aapt resource value: 0x7f0700e7 - public const int IconGridView = 2131165415; + // aapt resource value: 0x7f0900e7 + public const int IconGridView = 2131296487; - // aapt resource value: 0x7f0700f5 - public const int QuickUnlock_button = 2131165429; + // aapt resource value: 0x7f0900f6 + public const int QuickUnlock_button = 2131296502; - // aapt resource value: 0x7f0700f6 - public const int QuickUnlock_buttonLock = 2131165430; + // aapt resource value: 0x7f0900f7 + public const int QuickUnlock_buttonLock = 2131296503; - // aapt resource value: 0x7f0700f3 - public const int QuickUnlock_label = 2131165427; + // aapt resource value: 0x7f0900f4 + public const int QuickUnlock_label = 2131296500; - // aapt resource value: 0x7f0700f4 - public const int QuickUnlock_password = 2131165428; + // aapt resource value: 0x7f0900f5 + public const int QuickUnlock_password = 2131296501; - // aapt resource value: 0x7f0700ca - public const int RelativeLayout = 2131165386; + // aapt resource value: 0x7f0900ca + public const int RelativeLayout = 2131296458; - // aapt resource value: 0x7f0700c9 - public const int ScrollView = 2131165385; + // aapt resource value: 0x7f0900c9 + public const int ScrollView = 2131296457; - // aapt resource value: 0x7f070042 - public const int about_title = 2131165250; + // aapt resource value: 0x7f090042 + public const int about_title = 2131296322; - // aapt resource value: 0x7f0700c7 - public const int accept_button = 2131165383; + // aapt resource value: 0x7f0900c7 + public const int accept_button = 2131296455; - // aapt resource value: 0x7f07001a - public const int action_bar = 2131165210; + // aapt resource value: 0x7f09001a + public const int action_bar = 2131296282; - // aapt resource value: 0x7f070015 - public const int action_bar_activity_content = 2131165205; + // aapt resource value: 0x7f090015 + public const int action_bar_activity_content = 2131296277; - // aapt resource value: 0x7f070019 - public const int action_bar_container = 2131165209; + // aapt resource value: 0x7f090019 + public const int action_bar_container = 2131296281; - // aapt resource value: 0x7f07001d - public const int action_bar_overlay_layout = 2131165213; + // aapt resource value: 0x7f09001d + public const int action_bar_overlay_layout = 2131296285; - // aapt resource value: 0x7f070018 - public const int action_bar_root = 2131165208; + // aapt resource value: 0x7f090018 + public const int action_bar_root = 2131296280; - // aapt resource value: 0x7f070021 - public const int action_bar_subtitle = 2131165217; + // aapt resource value: 0x7f090021 + public const int action_bar_subtitle = 2131296289; - // aapt resource value: 0x7f070020 - public const int action_bar_title = 2131165216; + // aapt resource value: 0x7f090020 + public const int action_bar_title = 2131296288; - // aapt resource value: 0x7f07001b - public const int action_context_bar = 2131165211; + // aapt resource value: 0x7f09001b + public const int action_context_bar = 2131296283; - // aapt resource value: 0x7f070016 - public const int action_menu_divider = 2131165206; + // aapt resource value: 0x7f090016 + public const int action_menu_divider = 2131296278; - // aapt resource value: 0x7f070017 - public const int action_menu_presenter = 2131165207; + // aapt resource value: 0x7f090017 + public const int action_menu_presenter = 2131296279; - // aapt resource value: 0x7f07002f - public const int action_mode_bar = 2131165231; + // aapt resource value: 0x7f09002f + public const int action_mode_bar = 2131296303; - // aapt resource value: 0x7f07002e - public const int action_mode_bar_stub = 2131165230; + // aapt resource value: 0x7f09002e + public const int action_mode_bar_stub = 2131296302; - // aapt resource value: 0x7f070022 - public const int action_mode_close_button = 2131165218; + // aapt resource value: 0x7f090022 + public const int action_mode_close_button = 2131296290; - // aapt resource value: 0x7f070023 - public const int activity_chooser_view_content = 2131165219; + // aapt resource value: 0x7f090023 + public const int activity_chooser_view_content = 2131296291; - // aapt resource value: 0x7f070099 - public const int add_advanced = 2131165337; + // aapt resource value: 0x7f090099 + public const int add_advanced = 2131296409; - // aapt resource value: 0x7f0700dd - public const int add_entry = 2131165405; + // aapt resource value: 0x7f0900dd + public const int add_entry = 2131296477; - // aapt resource value: 0x7f0700dc - public const int add_group = 2131165404; + // aapt resource value: 0x7f0900dc + public const int add_group = 2131296476; - // aapt resource value: 0x7f070108 - public const int add_url_entry = 2131165448; + // aapt resource value: 0x7f090109 + public const int add_url_entry = 2131296521; - // aapt resource value: 0x7f070098 - public const int advanced_container = 2131165336; + // aapt resource value: 0x7f090098 + public const int advanced_container = 2131296408; - // aapt resource value: 0x7f07005b - public const int afc_button_go_back = 2131165275; + // aapt resource value: 0x7f09005b + public const int afc_button_go_back = 2131296347; - // aapt resource value: 0x7f07005c - public const int afc_button_go_forward = 2131165276; + // aapt resource value: 0x7f09005c + public const int afc_button_go_forward = 2131296348; - // aapt resource value: 0x7f07006a - public const int afc_button_ok = 2131165290; + // aapt resource value: 0x7f09006a + public const int afc_button_ok = 2131296362; - // aapt resource value: 0x7f070071 - public const int afc_button_sort_by_date_asc = 2131165297; + // aapt resource value: 0x7f090071 + public const int afc_button_sort_by_date_asc = 2131296369; - // aapt resource value: 0x7f070072 - public const int afc_button_sort_by_date_desc = 2131165298; + // aapt resource value: 0x7f090072 + public const int afc_button_sort_by_date_desc = 2131296370; - // aapt resource value: 0x7f07006d - public const int afc_button_sort_by_name_asc = 2131165293; + // aapt resource value: 0x7f09006d + public const int afc_button_sort_by_name_asc = 2131296365; - // aapt resource value: 0x7f07006e - public const int afc_button_sort_by_name_desc = 2131165294; + // aapt resource value: 0x7f09006e + public const int afc_button_sort_by_name_desc = 2131296366; - // aapt resource value: 0x7f07006f - public const int afc_button_sort_by_size_asc = 2131165295; + // aapt resource value: 0x7f09006f + public const int afc_button_sort_by_size_asc = 2131296367; - // aapt resource value: 0x7f070070 - public const int afc_button_sort_by_size_desc = 2131165296; + // aapt resource value: 0x7f090070 + public const int afc_button_sort_by_size_desc = 2131296368; - // aapt resource value: 0x7f070059 - public const int afc_checkbox_selection = 2131165273; + // aapt resource value: 0x7f090059 + public const int afc_checkbox_selection = 2131296345; - // aapt resource value: 0x7f070067 - public const int afc_footer_view_divider = 2131165287; + // aapt resource value: 0x7f090067 + public const int afc_footer_view_divider = 2131296359; - // aapt resource value: 0x7f070053 - public const int afc_fragment_files = 2131165267; + // aapt resource value: 0x7f090053 + public const int afc_fragment_files = 2131296339; - // aapt resource value: 0x7f070060 - public const int afc_header_view_divider = 2131165280; + // aapt resource value: 0x7f090060 + public const int afc_header_view_divider = 2131296352; - // aapt resource value: 0x7f070055 - public const int afc_imageview_icon = 2131165269; + // aapt resource value: 0x7f090055 + public const int afc_imageview_icon = 2131296341; - // aapt resource value: 0x7f070056 - public const int afc_imageview_locked_symbol = 2131165270; + // aapt resource value: 0x7f090056 + public const int afc_imageview_locked_symbol = 2131296342; - // aapt resource value: 0x7f070054 - public const int afc_listview_menu = 2131165268; + // aapt resource value: 0x7f090054 + public const int afc_listview_menu = 2131296340; - // aapt resource value: 0x7f070110 - public const int afc_menuitem_home = 2131165456; + // aapt resource value: 0x7f090111 + public const int afc_menuitem_home = 2131296529; - // aapt resource value: 0x7f070113 - public const int afc_menuitem_new_folder = 2131165459; + // aapt resource value: 0x7f090114 + public const int afc_menuitem_new_folder = 2131296532; - // aapt resource value: 0x7f070111 - public const int afc_menuitem_sort = 2131165457; + // aapt resource value: 0x7f090112 + public const int afc_menuitem_sort = 2131296530; - // aapt resource value: 0x7f070112 - public const int afc_menuitem_switch_viewmode = 2131165458; + // aapt resource value: 0x7f090113 + public const int afc_menuitem_switch_viewmode = 2131296531; - // aapt resource value: 0x7f070074 - public const int afc_progress_bar = 2131165300; + // aapt resource value: 0x7f090074 + public const int afc_progress_bar = 2131296372; - // aapt resource value: 0x7f070073 - public const int afc_text1 = 2131165299; + // aapt resource value: 0x7f090073 + public const int afc_text1 = 2131296371; - // aapt resource value: 0x7f070075 - public const int afc_textview = 2131165301; + // aapt resource value: 0x7f090075 + public const int afc_textview = 2131296373; - // aapt resource value: 0x7f070058 - public const int afc_textview_file_info = 2131165272; + // aapt resource value: 0x7f090058 + public const int afc_textview_file_info = 2131296344; - // aapt resource value: 0x7f070057 - public const int afc_textview_filename = 2131165271; + // aapt resource value: 0x7f090057 + public const int afc_textview_filename = 2131296343; - // aapt resource value: 0x7f070061 - public const int afc_textview_full_dir_name = 2131165281; + // aapt resource value: 0x7f090061 + public const int afc_textview_full_dir_name = 2131296353; - // aapt resource value: 0x7f07006c - public const int afc_textview_home = 2131165292; + // aapt resource value: 0x7f09006c + public const int afc_textview_home = 2131296364; - // aapt resource value: 0x7f070069 - public const int afc_textview_saveas_filename = 2131165289; + // aapt resource value: 0x7f090069 + public const int afc_textview_saveas_filename = 2131296361; - // aapt resource value: 0x7f070064 - public const int afc_view_files_container = 2131165284; + // aapt resource value: 0x7f090064 + public const int afc_view_files_container = 2131296356; - // aapt resource value: 0x7f070065 - public const int afc_view_files_footer_view = 2131165285; + // aapt resource value: 0x7f090065 + public const int afc_view_files_footer_view = 2131296357; - // aapt resource value: 0x7f070066 - public const int afc_view_loading = 2131165286; + // aapt resource value: 0x7f090066 + public const int afc_view_loading = 2131296358; - // aapt resource value: 0x7f07005f - public const int afc_view_locations = 2131165279; + // aapt resource value: 0x7f09005f + public const int afc_view_locations = 2131296351; - // aapt resource value: 0x7f07005e - public const int afc_view_locations_container = 2131165278; + // aapt resource value: 0x7f09005e + public const int afc_view_locations_container = 2131296350; - // aapt resource value: 0x7f07006b - public const int afc_viewgroup_bookmarks = 2131165291; + // aapt resource value: 0x7f09006b + public const int afc_viewgroup_bookmarks = 2131296363; - // aapt resource value: 0x7f07005d - public const int afc_viewgroup_button_locations = 2131165277; + // aapt resource value: 0x7f09005d + public const int afc_viewgroup_button_locations = 2131296349; - // aapt resource value: 0x7f070063 - public const int afc_viewgroup_files = 2131165283; + // aapt resource value: 0x7f090063 + public const int afc_viewgroup_files = 2131296355; - // aapt resource value: 0x7f070068 - public const int afc_viewgroup_footer = 2131165288; + // aapt resource value: 0x7f090068 + public const int afc_viewgroup_footer = 2131296360; - // aapt resource value: 0x7f070062 - public const int afc_viewgroup_footer_container = 2131165282; + // aapt resource value: 0x7f090062 + public const int afc_viewgroup_footer_container = 2131296354; - // aapt resource value: 0x7f07005a - public const int afc_viewgroup_header = 2131165274; + // aapt resource value: 0x7f09005a + public const int afc_viewgroup_header = 2131296346; - // aapt resource value: 0x7f070078 - public const int afc_widget_search_view_button_clear = 2131165304; + // aapt resource value: 0x7f090078 + public const int afc_widget_search_view_button_clear = 2131296376; - // aapt resource value: 0x7f070076 - public const int afc_widget_search_view_button_search = 2131165302; + // aapt resource value: 0x7f090076 + public const int afc_widget_search_view_button_search = 2131296374; - // aapt resource value: 0x7f070077 - public const int afc_widget_search_view_textview_search = 2131165303; + // aapt resource value: 0x7f090077 + public const int afc_widget_search_view_textview_search = 2131296375; - // aapt resource value: 0x7f07000b - public const int always = 2131165195; + // aapt resource value: 0x7f09000b + public const int always = 2131296267; - // aapt resource value: 0x7f070051 - public const int android_filechooser_contrib = 2131165265; + // aapt resource value: 0x7f090051 + public const int android_filechooser_contrib = 2131296337; - // aapt resource value: 0x7f07004e - public const int author = 2131165262; + // aapt resource value: 0x7f09004e + public const int author = 2131296334; - // aapt resource value: 0x7f070011 - public const int beginning = 2131165201; + // aapt resource value: 0x7f090011 + public const int beginning = 2131296273; - // aapt resource value: 0x7f07009b - public const int binaries = 2131165339; + // aapt resource value: 0x7f09009b + public const int binaries = 2131296411; - // aapt resource value: 0x7f0700a8 - public const int bottom_bar = 2131165352; + // aapt resource value: 0x7f0900a8 + public const int bottom_bar = 2131296424; - // aapt resource value: 0x7f0700c2 - public const int bottom_layout = 2131165378; + // aapt resource value: 0x7f0900c2 + public const int bottom_layout = 2131296450; - // aapt resource value: 0x7f0700bd - public const int browse_button = 2131165373; + // aapt resource value: 0x7f0900bd + public const int browse_button = 2131296445; - // aapt resource value: 0x7f0700cf - public const int btn_length12 = 2131165391; + // aapt resource value: 0x7f0900cf + public const int btn_length12 = 2131296463; - // aapt resource value: 0x7f0700ce - public const int btn_length16 = 2131165390; + // aapt resource value: 0x7f0900ce + public const int btn_length16 = 2131296462; - // aapt resource value: 0x7f0700d1 - public const int btn_length6 = 2131165393; + // aapt resource value: 0x7f0900d1 + public const int btn_length6 = 2131296465; - // aapt resource value: 0x7f0700d0 - public const int btn_length8 = 2131165392; + // aapt resource value: 0x7f0900d0 + public const int btn_length8 = 2131296464; - // aapt resource value: 0x7f07007c - public const int cancel = 2131165308; + // aapt resource value: 0x7f09007c + public const int cancel = 2131296380; - // aapt resource value: 0x7f0700c8 - public const int cancel_button = 2131165384; + // aapt resource value: 0x7f0900c8 + public const int cancel_button = 2131296456; - // aapt resource value: 0x7f0700df - public const int cancel_insert_element = 2131165407; + // aapt resource value: 0x7f0900df + public const int cancel_insert_element = 2131296479; - // aapt resource value: 0x7f070105 - public const int cbCaseSensitive = 2131165445; + // aapt resource value: 0x7f090106 + public const int cbCaseSensitive = 2131296518; - // aapt resource value: 0x7f070106 - public const int cbExcludeExpiredEntries = 2131165446; + // aapt resource value: 0x7f090107 + public const int cbExcludeExpiredEntries = 2131296519; - // aapt resource value: 0x7f0700fb - public const int cbRegEx = 2131165435; + // aapt resource value: 0x7f0900fc + public const int cbRegEx = 2131296508; - // aapt resource value: 0x7f070104 - public const int cbSearchInGroupName = 2131165444; + // aapt resource value: 0x7f090105 + public const int cbSearchInGroupName = 2131296517; - // aapt resource value: 0x7f070101 - public const int cbSearchInNotes = 2131165441; + // aapt resource value: 0x7f090102 + public const int cbSearchInNotes = 2131296514; - // aapt resource value: 0x7f070102 - public const int cbSearchInOtherStrings = 2131165442; + // aapt resource value: 0x7f090103 + public const int cbSearchInOtherStrings = 2131296515; - // aapt resource value: 0x7f070100 - public const int cbSearchInPassword = 2131165440; + // aapt resource value: 0x7f090101 + public const int cbSearchInPassword = 2131296513; - // aapt resource value: 0x7f070103 - public const int cbSearchInTags = 2131165443; + // aapt resource value: 0x7f090104 + public const int cbSearchInTags = 2131296516; - // aapt resource value: 0x7f0700fd - public const int cbSearchInTitle = 2131165437; + // aapt resource value: 0x7f0900fe + public const int cbSearchInTitle = 2131296510; - // aapt resource value: 0x7f0700fe - public const int cbSearchInUrl = 2131165438; + // aapt resource value: 0x7f0900ff + public const int cbSearchInUrl = 2131296511; - // aapt resource value: 0x7f0700ff - public const int cbSearchInUsername = 2131165439; + // aapt resource value: 0x7f090100 + public const int cbSearchInUsername = 2131296512; - // aapt resource value: 0x7f0700da - public const int cb_brackets = 2131165402; + // aapt resource value: 0x7f0900da + public const int cb_brackets = 2131296474; - // aapt resource value: 0x7f0700d5 - public const int cb_digits = 2131165397; + // aapt resource value: 0x7f0900d5 + public const int cb_digits = 2131296469; - // aapt resource value: 0x7f0700d4 - public const int cb_lowercase = 2131165396; + // aapt resource value: 0x7f0900d4 + public const int cb_lowercase = 2131296468; - // aapt resource value: 0x7f0700d6 - public const int cb_minus = 2131165398; + // aapt resource value: 0x7f0900d6 + public const int cb_minus = 2131296470; - // aapt resource value: 0x7f0700d8 - public const int cb_space = 2131165400; + // aapt resource value: 0x7f0900d8 + public const int cb_space = 2131296472; - // aapt resource value: 0x7f0700d9 - public const int cb_specials = 2131165401; + // aapt resource value: 0x7f0900d9 + public const int cb_specials = 2131296473; - // aapt resource value: 0x7f0700d7 - public const int cb_underline = 2131165399; + // aapt resource value: 0x7f0900d7 + public const int cb_underline = 2131296471; - // aapt resource value: 0x7f0700d3 - public const int cb_uppercase = 2131165395; + // aapt resource value: 0x7f0900d3 + public const int cb_uppercase = 2131296467; - // aapt resource value: 0x7f07002b - public const int checkbox = 2131165227; + // aapt resource value: 0x7f09002b + public const int checkbox = 2131296299; - // aapt resource value: 0x7f07000d - public const int collapseActionView = 2131165197; + // aapt resource value: 0x7f09000d + public const int collapseActionView = 2131296269; - // aapt resource value: 0x7f07004d - public const int contributors_title = 2131165261; + // aapt resource value: 0x7f09004d + public const int contributors_title = 2131296333; - // aapt resource value: 0x7f0700c0 - public const int create = 2131165376; + // aapt resource value: 0x7f0900c0 + public const int create = 2131296448; - // aapt resource value: 0x7f07010e - public const int cred_password = 2131165454; + // aapt resource value: 0x7f09010f + public const int cred_password = 2131296527; - // aapt resource value: 0x7f07010f - public const int cred_remember_mode = 2131165455; + // aapt resource value: 0x7f090110 + public const int cred_remember_mode = 2131296528; - // aapt resource value: 0x7f07010d - public const int cred_username = 2131165453; + // aapt resource value: 0x7f09010e + public const int cred_username = 2131296526; - // aapt resource value: 0x7f070026 - public const int default_activity_button = 2131165222; + // aapt resource value: 0x7f090026 + public const int default_activity_button = 2131296294; - // aapt resource value: 0x7f070085 - public const int delete_extra = 2131165317; + // aapt resource value: 0x7f090085 + public const int delete_extra = 2131296389; - // aapt resource value: 0x7f07000e - public const int dialog = 2131165198; + // aapt resource value: 0x7f09000e + public const int dialog = 2131296270; - // aapt resource value: 0x7f070008 - public const int disableHome = 2131165192; + // aapt resource value: 0x7f090008 + public const int disableHome = 2131296264; - // aapt resource value: 0x7f07004c - public const int disclaimer = 2131165260; + // aapt resource value: 0x7f09004c + public const int disclaimer = 2131296332; - // aapt resource value: 0x7f07004b - public const int disclaimer_title = 2131165259; + // aapt resource value: 0x7f09004b + public const int disclaimer_title = 2131296331; - // aapt resource value: 0x7f070043 - public const int divider1 = 2131165251; + // aapt resource value: 0x7f090043 + public const int divider1 = 2131296323; - // aapt resource value: 0x7f070047 - public const int divider2 = 2131165255; + // aapt resource value: 0x7f090047 + public const int divider2 = 2131296327; - // aapt resource value: 0x7f07004a - public const int divider3 = 2131165258; + // aapt resource value: 0x7f09004a + public const int divider3 = 2131296330; - // aapt resource value: 0x7f07007f - public const int donate_question = 2131165311; + // aapt resource value: 0x7f09007f + public const int donate_question = 2131296383; - // aapt resource value: 0x7f07000f - public const int dropdown = 2131165199; + // aapt resource value: 0x7f09000f + public const int dropdown = 2131296271; - // aapt resource value: 0x7f0700a3 - public const int edit_extra = 2131165347; + // aapt resource value: 0x7f0900a3 + public const int edit_extra = 2131296419; - // aapt resource value: 0x7f070036 - public const int edit_query = 2131165238; + // aapt resource value: 0x7f090036 + public const int edit_query = 2131296310; - // aapt resource value: 0x7f0700ef - public const int enable_quickunlock = 2131165423; + // aapt resource value: 0x7f0900f0 + public const int enable_quickunlock = 2131296496; - // aapt resource value: 0x7f070013 - public const int end = 2131165203; + // aapt resource value: 0x7f090013 + public const int end = 2131296275; - // aapt resource value: 0x7f0700b4 - public const int entry_accessed = 2131165364; + // aapt resource value: 0x7f0900b4 + public const int entry_accessed = 2131296436; - // aapt resource value: 0x7f0700b3 - public const int entry_accessed_label = 2131165363; + // aapt resource value: 0x7f0900b3 + public const int entry_accessed_label = 2131296435; - // aapt resource value: 0x7f07009a - public const int entry_binaries_label = 2131165338; + // aapt resource value: 0x7f09009a + public const int entry_binaries_label = 2131296410; - // aapt resource value: 0x7f070096 - public const int entry_comment = 2131165334; + // aapt resource value: 0x7f090096 + public const int entry_comment = 2131296406; - // aapt resource value: 0x7f070095 - public const int entry_comment_label = 2131165333; + // aapt resource value: 0x7f090095 + public const int entry_comment_label = 2131296405; - // aapt resource value: 0x7f070094 - public const int entry_confpassword = 2131165332; + // aapt resource value: 0x7f090094 + public const int entry_confpassword = 2131296404; - // aapt resource value: 0x7f070093 - public const int entry_confpassword_label = 2131165331; + // aapt resource value: 0x7f090093 + public const int entry_confpassword_label = 2131296403; - // aapt resource value: 0x7f0700ab - public const int entry_contents = 2131165355; + // aapt resource value: 0x7f0900ab + public const int entry_contents = 2131296427; - // aapt resource value: 0x7f0700b0 - public const int entry_created = 2131165360; + // aapt resource value: 0x7f0900b0 + public const int entry_created = 2131296432; - // aapt resource value: 0x7f0700af - public const int entry_created_label = 2131165359; + // aapt resource value: 0x7f0900af + public const int entry_created_label = 2131296431; - // aapt resource value: 0x7f0700aa - public const int entry_divider2 = 2131165354; + // aapt resource value: 0x7f0900aa + public const int entry_divider2 = 2131296426; - // aapt resource value: 0x7f0700a9 - public const int entry_edit = 2131165353; + // aapt resource value: 0x7f0900a9 + public const int entry_edit = 2131296425; - // aapt resource value: 0x7f0700a2 - public const int entry_expires = 2131165346; + // aapt resource value: 0x7f0900a2 + public const int entry_expires = 2131296418; - // aapt resource value: 0x7f0700a1 - public const int entry_expires_checkbox = 2131165345; + // aapt resource value: 0x7f0900a1 + public const int entry_expires_checkbox = 2131296417; - // aapt resource value: 0x7f0700a0 - public const int entry_expires_label = 2131165344; + // aapt resource value: 0x7f0900a0 + public const int entry_expires_label = 2131296416; - // aapt resource value: 0x7f070097 - public const int entry_extra_strings_label = 2131165335; + // aapt resource value: 0x7f090097 + public const int entry_extra_strings_label = 2131296407; - // aapt resource value: 0x7f0700a4 - public const int entry_icon = 2131165348; + // aapt resource value: 0x7f0900a4 + public const int entry_icon = 2131296420; - // aapt resource value: 0x7f0700b2 - public const int entry_modified = 2131165362; + // aapt resource value: 0x7f0900b2 + public const int entry_modified = 2131296434; - // aapt resource value: 0x7f0700b1 - public const int entry_modified_label = 2131165361; + // aapt resource value: 0x7f0900b1 + public const int entry_modified_label = 2131296433; - // aapt resource value: 0x7f07009f - public const int entry_override_url = 2131165343; + // aapt resource value: 0x7f09009f + public const int entry_override_url = 2131296415; - // aapt resource value: 0x7f07009e - public const int entry_override_url_label = 2131165342; + // aapt resource value: 0x7f09009e + public const int entry_override_url_label = 2131296414; - // aapt resource value: 0x7f070092 - public const int entry_password = 2131165330; + // aapt resource value: 0x7f090092 + public const int entry_password = 2131296402; - // aapt resource value: 0x7f070090 - public const int entry_password_label = 2131165328; + // aapt resource value: 0x7f090090 + public const int entry_password_label = 2131296400; - // aapt resource value: 0x7f070087 - public const int entry_save = 2131165319; + // aapt resource value: 0x7f090087 + public const int entry_save = 2131296391; - // aapt resource value: 0x7f070086 - public const int entry_save_header = 2131165318; + // aapt resource value: 0x7f090086 + public const int entry_save_header = 2131296390; - // aapt resource value: 0x7f070088 - public const int entry_scroll = 2131165320; + // aapt resource value: 0x7f090088 + public const int entry_scroll = 2131296392; - // aapt resource value: 0x7f0700ad - public const int entry_table = 2131165357; + // aapt resource value: 0x7f0900ad + public const int entry_table = 2131296429; - // aapt resource value: 0x7f07009d - public const int entry_tags = 2131165341; + // aapt resource value: 0x7f09009d + public const int entry_tags = 2131296413; - // aapt resource value: 0x7f07009c - public const int entry_tags_label = 2131165340; + // aapt resource value: 0x7f09009c + public const int entry_tags_label = 2131296412; - // aapt resource value: 0x7f0700a5 - public const int entry_text = 2131165349; + // aapt resource value: 0x7f0900a5 + public const int entry_text = 2131296421; - // aapt resource value: 0x7f0700a6 - public const int entry_text_detail = 2131165350; + // aapt resource value: 0x7f0900a6 + public const int entry_text_detail = 2131296422; - // aapt resource value: 0x7f07008b - public const int entry_title = 2131165323; + // aapt resource value: 0x7f09008b + public const int entry_title = 2131296395; - // aapt resource value: 0x7f070089 - public const int entry_title_label = 2131165321; + // aapt resource value: 0x7f090089 + public const int entry_title_label = 2131296393; - // aapt resource value: 0x7f07008f - public const int entry_url = 2131165327; + // aapt resource value: 0x7f09008f + public const int entry_url = 2131296399; - // aapt resource value: 0x7f07008e - public const int entry_url_label = 2131165326; + // aapt resource value: 0x7f09008e + public const int entry_url_label = 2131296398; - // aapt resource value: 0x7f07008d - public const int entry_user_name = 2131165325; + // aapt resource value: 0x7f09008d + public const int entry_user_name = 2131296397; - // aapt resource value: 0x7f07008c - public const int entry_user_name_label = 2131165324; + // aapt resource value: 0x7f09008c + public const int entry_user_name_label = 2131296396; - // aapt resource value: 0x7f070024 - public const int expand_activities_button = 2131165220; + // aapt resource value: 0x7f090024 + public const int expand_activities_button = 2131296292; - // aapt resource value: 0x7f07002a - public const int expanded_menu = 2131165226; + // aapt resource value: 0x7f09002a + public const int expanded_menu = 2131296298; - // aapt resource value: 0x7f0700ae - public const int extra_strings = 2131165358; + // aapt resource value: 0x7f0900ae + public const int extra_strings = 2131296430; - // aapt resource value: 0x7f070049 - public const int feedback = 2131165257; + // aapt resource value: 0x7f090049 + public const int feedback = 2131296329; - // aapt resource value: 0x7f070048 - public const int feedback_title = 2131165256; + // aapt resource value: 0x7f090048 + public const int feedback_title = 2131296328; - // aapt resource value: 0x7f0700b5 - public const int file_filename = 2131165365; + // aapt resource value: 0x7f0900b5 + public const int file_filename = 2131296437; - // aapt resource value: 0x7f0700b6 - public const int file_listtop = 2131165366; + // aapt resource value: 0x7f0900b6 + public const int file_listtop = 2131296438; - // aapt resource value: 0x7f0700c3 - public const int file_select = 2131165379; + // aapt resource value: 0x7f0900c3 + public const int file_select = 2131296451; - // aapt resource value: 0x7f0700ea - public const int filename = 2131165418; + // aapt resource value: 0x7f0900eb + public const int filename = 2131296491; - // aapt resource value: 0x7f0700bb - public const int filename_form = 2131165371; + // aapt resource value: 0x7f0900bb + public const int filename_form = 2131296443; - // aapt resource value: 0x7f0700e8 - public const int filename_label = 2131165416; + // aapt resource value: 0x7f0900e9 + public const int filename_label = 2131296489; - // aapt resource value: 0x7f0700e9 - public const int filenamescroll = 2131165417; + // aapt resource value: 0x7f0900ea + public const int filenamescroll = 2131296490; - // aapt resource value: 0x7f0700c6 - public const int filestorage_label = 2131165382; + // aapt resource value: 0x7f0900c6 + public const int filestorage_label = 2131296454; - // aapt resource value: 0x7f0700c5 - public const int filestorage_logo = 2131165381; + // aapt resource value: 0x7f0900c5 + public const int filestorage_logo = 2131296453; - // aapt resource value: 0x7f0700c1 - public const int fnv_cancel = 2131165377; + // aapt resource value: 0x7f0900c1 + public const int fnv_cancel = 2131296449; - // aapt resource value: 0x7f07004f - public const int further_authors = 2131165263; + // aapt resource value: 0x7f09004f + public const int further_authors = 2131296335; - // aapt resource value: 0x7f070091 - public const int generate_button = 2131165329; + // aapt resource value: 0x7f090091 + public const int generate_button = 2131296401; - // aapt resource value: 0x7f0700cc - public const int generate_password_button = 2131165388; + // aapt resource value: 0x7f0900cc + public const int generate_password_button = 2131296460; - // aapt resource value: 0x7f0700db - public const int group_header = 2131165403; + // aapt resource value: 0x7f0900db + public const int group_header = 2131296475; - // aapt resource value: 0x7f0700e2 - public const int group_icon = 2131165410; + // aapt resource value: 0x7f0900e2 + public const int group_icon = 2131296482; - // aapt resource value: 0x7f0700e4 - public const int group_label = 2131165412; + // aapt resource value: 0x7f0900e4 + public const int group_label = 2131296484; - // aapt resource value: 0x7f0700e0 - public const int group_name = 2131165408; + // aapt resource value: 0x7f0900e0 + public const int group_name = 2131296480; - // aapt resource value: 0x7f0700e3 - public const int group_text = 2131165411; + // aapt resource value: 0x7f0900e3 + public const int group_text = 2131296483; - // aapt resource value: 0x7f070014 - public const int home = 2131165204; + // aapt resource value: 0x7f090014 + public const int home = 2131296276; - // aapt resource value: 0x7f070005 - public const int homeAsUp = 2131165189; + // aapt resource value: 0x7f090005 + public const int homeAsUp = 2131296261; - // aapt resource value: 0x7f070028 - public const int icon = 2131165224; + // aapt resource value: 0x7f090028 + public const int icon = 2131296296; - // aapt resource value: 0x7f07008a - public const int icon_button = 2131165322; + // aapt resource value: 0x7f09008a + public const int icon_button = 2131296394; - // aapt resource value: 0x7f0700e5 - public const int icon_image = 2131165413; + // aapt resource value: 0x7f0900e5 + public const int icon_image = 2131296485; - // aapt resource value: 0x7f0700e6 - public const int icon_text = 2131165414; + // aapt resource value: 0x7f0900e6 + public const int icon_text = 2131296486; - // aapt resource value: 0x7f07000a - public const int ifRoom = 2131165194; + // aapt resource value: 0x7f09000a + public const int ifRoom = 2131296266; - // aapt resource value: 0x7f070025 - public const int image = 2131165221; + // aapt resource value: 0x7f090025 + public const int image = 2131296293; - // aapt resource value: 0x7f070080 - public const int imgoktfest = 2131165312; + // aapt resource value: 0x7f090080 + public const int imgoktfest = 2131296384; - // aapt resource value: 0x7f0700de - public const int insert_element = 2131165406; + // aapt resource value: 0x7f0900de + public const int insert_element = 2131296478; - // aapt resource value: 0x7f07007a - public const int install_market = 2131165306; + // aapt resource value: 0x7f09007a + public const int install_market = 2131296378; - // aapt resource value: 0x7f07007b - public const int install_web = 2131165307; + // aapt resource value: 0x7f09007b + public const int install_web = 2131296379; - // aapt resource value: 0x7f0700f1 - public const int keyfileLine = 2131165425; + // aapt resource value: 0x7f0900e8 + public const int keyboard = 2131296488; - // aapt resource value: 0x7f0700bc - public const int label_open_by_filename = 2131165372; + // aapt resource value: 0x7f0900f2 + public const int keyfileLine = 2131296498; - // aapt resource value: 0x7f0700be - public const int label_open_by_filename_details = 2131165374; + // aapt resource value: 0x7f0900bc + public const int label_open_by_filename = 2131296444; - // aapt resource value: 0x7f0700b7 - public const int label_warning = 2131165367; + // aapt resource value: 0x7f0900be + public const int label_open_by_filename_details = 2131296446; - // aapt resource value: 0x7f070031 - public const int left_icon = 2131165233; + // aapt resource value: 0x7f0900b7 + public const int label_warning = 2131296439; - // aapt resource value: 0x7f0700d2 - public const int length = 2131165394; + // aapt resource value: 0x7f090031 + public const int left_icon = 2131296305; - // aapt resource value: 0x7f0700cd - public const int length_label = 2131165389; + // aapt resource value: 0x7f0900d2 + public const int length = 2131296466; - // aapt resource value: 0x7f0700fa - public const int linearLayout1 = 2131165434; + // aapt resource value: 0x7f0900cd + public const int length_label = 2131296461; - // aapt resource value: 0x7f070001 - public const int listMode = 2131165185; + // aapt resource value: 0x7f0900fb + public const int linearLayout1 = 2131296507; - // aapt resource value: 0x7f070027 - public const int list_item = 2131165223; + // aapt resource value: 0x7f090001 + public const int listMode = 2131296257; - // aapt resource value: 0x7f07011d - public const int menu_about = 2131165469; + // aapt resource value: 0x7f090027 + public const int list_item = 2131296295; - // aapt resource value: 0x7f07011c - public const int menu_app_settings = 2131165468; + // aapt resource value: 0x7f09011e + public const int menu_about = 2131296542; - // aapt resource value: 0x7f07011b - public const int menu_cancel_edit = 2131165467; + // aapt resource value: 0x7f09011d + public const int menu_app_settings = 2131296541; - // aapt resource value: 0x7f070123 - public const int menu_change_db = 2131165475; + // aapt resource value: 0x7f09011c + public const int menu_cancel_edit = 2131296540; - // aapt resource value: 0x7f07011f - public const int menu_change_master_key = 2131165471; + // aapt resource value: 0x7f090124 + public const int menu_change_db = 2131296548; - // aapt resource value: 0x7f070114 - public const int menu_donate = 2131165460; + // aapt resource value: 0x7f090120 + public const int menu_change_master_key = 2131296544; - // aapt resource value: 0x7f070116 - public const int menu_goto_url = 2131165462; + // aapt resource value: 0x7f090115 + public const int menu_donate = 2131296533; - // aapt resource value: 0x7f070117 - public const int menu_lock = 2131165463; + // aapt resource value: 0x7f090117 + public const int menu_goto_url = 2131296535; - // aapt resource value: 0x7f070119 - public const int menu_rate = 2131165465; + // aapt resource value: 0x7f090118 + public const int menu_lock = 2131296536; - // aapt resource value: 0x7f07011e - public const int menu_search = 2131165470; + // aapt resource value: 0x7f09011a + public const int menu_rate = 2131296538; - // aapt resource value: 0x7f070122 - public const int menu_search_advanced = 2131165474; + // aapt resource value: 0x7f09011f + public const int menu_search = 2131296543; - // aapt resource value: 0x7f070121 - public const int menu_sort = 2131165473; + // aapt resource value: 0x7f090123 + public const int menu_search_advanced = 2131296547; - // aapt resource value: 0x7f070118 - public const int menu_suggest_improvements = 2131165464; + // aapt resource value: 0x7f090122 + public const int menu_sort = 2131296546; - // aapt resource value: 0x7f070120 - public const int menu_sync = 2131165472; + // aapt resource value: 0x7f090119 + public const int menu_suggest_improvements = 2131296537; - // aapt resource value: 0x7f070115 - public const int menu_toggle_pass = 2131165461; + // aapt resource value: 0x7f090121 + public const int menu_sync = 2131296545; - // aapt resource value: 0x7f07011a - public const int menu_translate = 2131165466; + // aapt resource value: 0x7f090116 + public const int menu_toggle_pass = 2131296534; - // aapt resource value: 0x7f070012 - public const int middle = 2131165202; + // aapt resource value: 0x7f09011b + public const int menu_translate = 2131296539; - // aapt resource value: 0x7f070009 - public const int never = 2131165193; + // aapt resource value: 0x7f090012 + public const int middle = 2131296274; - // aapt resource value: 0x7f070082 - public const int no_donate = 2131165314; + // aapt resource value: 0x7f090009 + public const int never = 2131296265; - // aapt resource value: 0x7f070109 - public const int no_results = 2131165449; + // aapt resource value: 0x7f090082 + public const int no_donate = 2131296386; - // aapt resource value: 0x7f070010 - public const int none = 2131165200; + // aapt resource value: 0x7f09010a + public const int no_results = 2131296522; - // aapt resource value: 0x7f070000 - public const int normal = 2131165184; + // aapt resource value: 0x7f090010 + public const int none = 2131296272; - // aapt resource value: 0x7f0700e1 - public const int ok = 2131165409; + // aapt resource value: 0x7f090000 + public const int normal = 2131296256; - // aapt resource value: 0x7f070081 - public const int ok_donate = 2131165313; + // aapt resource value: 0x7f0900e1 + public const int ok = 2131296481; - // aapt resource value: 0x7f0700bf - public const int open = 2131165375; + // aapt resource value: 0x7f090081 + public const int ok_donate = 2131296385; - // aapt resource value: 0x7f07010b - public const int pass_conf_password = 2131165451; + // aapt resource value: 0x7f0900bf + public const int open = 2131296447; - // aapt resource value: 0x7f0700ed - public const int pass_keyfile = 2131165421; + // aapt resource value: 0x7f09010c + public const int pass_conf_password = 2131296524; - // aapt resource value: 0x7f0700ee - public const int pass_ok = 2131165422; + // aapt resource value: 0x7f0900ee + public const int pass_keyfile = 2131296494; - // aapt resource value: 0x7f07010a - public const int pass_password = 2131165450; + // aapt resource value: 0x7f0900ef + public const int pass_ok = 2131296495; - // aapt resource value: 0x7f0700cb - public const int password = 2131165387; + // aapt resource value: 0x7f09010b + public const int pass_password = 2131296523; - // aapt resource value: 0x7f0700f0 - public const int passwordLine = 2131165424; + // aapt resource value: 0x7f0900cb + public const int password = 2131296459; - // aapt resource value: 0x7f0700eb - public const int password_label = 2131165419; + // aapt resource value: 0x7f0900f1 + public const int passwordLine = 2131296497; - // aapt resource value: 0x7f070050 - public const int plugin1 = 2131165264; + // aapt resource value: 0x7f0900ec + public const int password_label = 2131296492; - // aapt resource value: 0x7f070034 - public const int progress_circular = 2131165236; + // aapt resource value: 0x7f090050 + public const int plugin1 = 2131296336; - // aapt resource value: 0x7f070035 - public const int progress_horizontal = 2131165237; + // aapt resource value: 0x7f090034 + public const int progress_circular = 2131296308; - // aapt resource value: 0x7f070084 - public const int protection = 2131165316; + // aapt resource value: 0x7f090035 + public const int progress_horizontal = 2131296309; - // aapt resource value: 0x7f0700f2 - public const int qu_filename = 2131165426; + // aapt resource value: 0x7f090084 + public const int protection = 2131296388; - // aapt resource value: 0x7f07002d - public const int radio = 2131165229; + // aapt resource value: 0x7f0900f3 + public const int qu_filename = 2131296499; - // aapt resource value: 0x7f070032 - public const int right_container = 2131165234; + // aapt resource value: 0x7f09002d + public const int radio = 2131296301; - // aapt resource value: 0x7f070033 - public const int right_icon = 2131165235; + // aapt resource value: 0x7f090032 + public const int right_container = 2131296306; - // aapt resource value: 0x7f07007d - public const int rounds = 2131165309; + // aapt resource value: 0x7f090033 + public const int right_icon = 2131296307; - // aapt resource value: 0x7f07007e - public const int rounds_explaination = 2131165310; + // aapt resource value: 0x7f09007d + public const int rounds = 2131296381; - // aapt resource value: 0x7f0700f9 - public const int scrollView1 = 2131165433; + // aapt resource value: 0x7f09007e + public const int rounds_explaination = 2131296382; - // aapt resource value: 0x7f0700f8 - public const int searchEditText = 2131165432; + // aapt resource value: 0x7f0900fa + public const int scrollView1 = 2131296506; - // aapt resource value: 0x7f070038 - public const int search_badge = 2131165240; + // aapt resource value: 0x7f0900f9 + public const int searchEditText = 2131296505; - // aapt resource value: 0x7f070037 - public const int search_bar = 2131165239; + // aapt resource value: 0x7f090038 + public const int search_badge = 2131296312; - // aapt resource value: 0x7f070039 - public const int search_button = 2131165241; + // aapt resource value: 0x7f090037 + public const int search_bar = 2131296311; - // aapt resource value: 0x7f07003e - public const int search_close_btn = 2131165246; + // aapt resource value: 0x7f090039 + public const int search_button = 2131296313; - // aapt resource value: 0x7f07003a - public const int search_edit_frame = 2131165242; + // aapt resource value: 0x7f09003e + public const int search_close_btn = 2131296318; - // aapt resource value: 0x7f070040 - public const int search_go_btn = 2131165248; + // aapt resource value: 0x7f09003a + public const int search_edit_frame = 2131296314; - // aapt resource value: 0x7f0700fc - public const int search_in_label = 2131165436; + // aapt resource value: 0x7f090040 + public const int search_go_btn = 2131296320; - // aapt resource value: 0x7f0700f7 - public const int search_label = 2131165431; + // aapt resource value: 0x7f0900fd + public const int search_in_label = 2131296509; - // aapt resource value: 0x7f07003b - public const int search_mag_icon = 2131165243; + // aapt resource value: 0x7f0900f8 + public const int search_label = 2131296504; - // aapt resource value: 0x7f07003c - public const int search_plate = 2131165244; + // aapt resource value: 0x7f09003b + public const int search_mag_icon = 2131296315; - // aapt resource value: 0x7f07003d - public const int search_src_text = 2131165245; + // aapt resource value: 0x7f09003c + public const int search_plate = 2131296316; - // aapt resource value: 0x7f070041 - public const int search_voice_btn = 2131165249; + // aapt resource value: 0x7f09003d + public const int search_src_text = 2131296317; - // aapt resource value: 0x7f070107 - public const int select_other_entry = 2131165447; + // aapt resource value: 0x7f090041 + public const int search_voice_btn = 2131296321; - // aapt resource value: 0x7f07002c - public const int shortcut = 2131165228; + // aapt resource value: 0x7f090108 + public const int select_other_entry = 2131296520; - // aapt resource value: 0x7f070007 - public const int showCustom = 2131165191; + // aapt resource value: 0x7f09002c + public const int shortcut = 2131296300; - // aapt resource value: 0x7f070004 - public const int showHome = 2131165188; + // aapt resource value: 0x7f090007 + public const int showCustom = 2131296263; - // aapt resource value: 0x7f070006 - public const int showTitle = 2131165190; + // aapt resource value: 0x7f090004 + public const int showHome = 2131296260; - // aapt resource value: 0x7f07001c - public const int split_action_bar = 2131165212; + // aapt resource value: 0x7f090006 + public const int showTitle = 2131296262; - // aapt resource value: 0x7f0700ba - public const int start_create = 2131165370; + // aapt resource value: 0x7f09001c + public const int split_action_bar = 2131296284; - // aapt resource value: 0x7f07010c - public const int start_create_import = 2131165452; + // aapt resource value: 0x7f0900ba + public const int start_create = 2131296442; - // aapt resource value: 0x7f0700b8 - public const int start_open_file = 2131165368; + // aapt resource value: 0x7f09010d + public const int start_create_import = 2131296525; - // aapt resource value: 0x7f0700b9 - public const int start_open_url = 2131165369; + // aapt resource value: 0x7f0900b8 + public const int start_open_file = 2131296440; - // aapt resource value: 0x7f07003f - public const int submit_area = 2131165247; + // aapt resource value: 0x7f0900b9 + public const int start_open_url = 2131296441; - // aapt resource value: 0x7f070002 - public const int tabMode = 2131165186; + // aapt resource value: 0x7f09003f + public const int submit_area = 2131296319; - // aapt resource value: 0x7f070079 - public const int text = 2131165305; + // aapt resource value: 0x7f090002 + public const int tabMode = 2131296258; - // aapt resource value: 0x7f0700c4 - public const int textView = 2131165380; + // aapt resource value: 0x7f090079 + public const int text = 2131296377; - // aapt resource value: 0x7f070029 - public const int title = 2131165225; + // aapt resource value: 0x7f0900c4 + public const int textView = 2131296452; - // aapt resource value: 0x7f0700a7 - public const int title_block = 2131165351; + // aapt resource value: 0x7f090029 + public const int title = 2131296297; - // aapt resource value: 0x7f070030 - public const int title_container = 2131165232; + // aapt resource value: 0x7f0900a7 + public const int title_block = 2131296423; - // aapt resource value: 0x7f0700ec - public const int toggle_password = 2131165420; + // aapt resource value: 0x7f090030 + public const int title_container = 2131296304; - // aapt resource value: 0x7f0700ac - public const int top = 2131165356; + // aapt resource value: 0x7f0900ed + public const int toggle_password = 2131296493; - // aapt resource value: 0x7f07001e - public const int top_action_bar = 2131165214; + // aapt resource value: 0x7f0900ac + public const int top = 2131296428; - // aapt resource value: 0x7f07001f - public const int up = 2131165215; + // aapt resource value: 0x7f09001e + public const int top_action_bar = 2131296286; - // aapt resource value: 0x7f070003 - public const int useLogo = 2131165187; + // aapt resource value: 0x7f09001f + public const int up = 2131296287; - // aapt resource value: 0x7f070083 - public const int value = 2131165315; + // aapt resource value: 0x7f090003 + public const int useLogo = 2131296259; - // aapt resource value: 0x7f070046 - public const int versionB = 2131165254; + // aapt resource value: 0x7f090083 + public const int value = 2131296387; - // aapt resource value: 0x7f070045 - public const int versionX = 2131165253; + // aapt resource value: 0x7f090046 + public const int versionB = 2131296326; - // aapt resource value: 0x7f070044 - public const int version_title = 2131165252; + // aapt resource value: 0x7f090045 + public const int versionX = 2131296325; - // aapt resource value: 0x7f07000c - public const int withText = 2131165196; + // aapt resource value: 0x7f090044 + public const int version_title = 2131296324; + + // aapt resource value: 0x7f09000c + public const int withText = 2131296268; static Id() { @@ -2859,40 +2924,43 @@ namespace keepass2android public const int icon_picker = 2130903106; // aapt resource value: 0x7f030043 - public const int InViewButton = 2130903107; + public const int input = 2130903107; // aapt resource value: 0x7f030044 - public const int password = 2130903108; + public const int InViewButton = 2130903108; // aapt resource value: 0x7f030045 - public const int QuickUnlock = 2130903109; + public const int password = 2130903109; // aapt resource value: 0x7f030046 - public const int QuickUnlock_Unused = 2130903110; + public const int QuickUnlock = 2130903110; // aapt resource value: 0x7f030047 - public const int SaveButton = 2130903111; + public const int QuickUnlock_Unused = 2130903111; // aapt resource value: 0x7f030048 - public const int search = 2130903112; + public const int SaveButton = 2130903112; // aapt resource value: 0x7f030049 - public const int searchurlresults = 2130903113; + public const int search = 2130903113; // aapt resource value: 0x7f03004a - public const int searchurlresults_empty = 2130903114; + public const int searchurlresults = 2130903114; // aapt resource value: 0x7f03004b - public const int set_password = 2130903115; + public const int searchurlresults_empty = 2130903115; // aapt resource value: 0x7f03004c - public const int StartScreenButtons = 2130903116; + public const int set_password = 2130903116; // aapt resource value: 0x7f03004d - public const int support_simple_spinner_dropdown_item = 2130903117; + public const int StartScreenButtons = 2130903117; // aapt resource value: 0x7f03004e - public const int url_credentials = 2130903118; + public const int support_simple_spinner_dropdown_item = 2130903118; + + // aapt resource value: 0x7f03004f + public const int url_credentials = 2130903119; static Layout() { @@ -2960,1382 +3028,1430 @@ namespace keepass2android public partial class String { - // aapt resource value: 0x7f06008b - public const int AboutText = 2131099787; - - // aapt resource value: 0x7f060197 - public const int AddingEntry = 2131100055; - - // aapt resource value: 0x7f060198 - public const int AddingGroup = 2131100056; - - // aapt resource value: 0x7f06018d - public const int AskDeletePermanentlyEntry = 2131100045; - - // aapt resource value: 0x7f06018e - public const int AskDeletePermanentlyGroup = 2131100046; - - // aapt resource value: 0x7f06018f - public const int AskDeletePermanently_title = 2131100047; - - // aapt resource value: 0x7f060192 - public const int AskDiscardChanges = 2131100050; - - // aapt resource value: 0x7f060193 - public const int AskDiscardChanges_title = 2131100051; - - // aapt resource value: 0x7f060187 - public const int AskOverwriteBinary = 2131100039; - - // aapt resource value: 0x7f06018a - public const int AskOverwriteBinary_no = 2131100042; - - // aapt resource value: 0x7f060188 - public const int AskOverwriteBinary_title = 2131100040; - - // aapt resource value: 0x7f060189 - public const int AskOverwriteBinary_yes = 2131100041; - - // aapt resource value: 0x7f060191 - public const int AskReloadFile = 2131100049; - - // aapt resource value: 0x7f060190 - public const int AskReloadFile_title = 2131100048; - - // aapt resource value: 0x7f06018b - public const int AttachFailed = 2131100043; - - // aapt resource value: 0x7f060070 - public const int BinaryDirectory_default = 2131099760; - - // aapt resource value: 0x7f06006f - public const int BinaryDirectory_key = 2131099759; - - // aapt resource value: 0x7f060163 - public const int BinaryDirectory_summary = 2131100003; - - // aapt resource value: 0x7f060162 - public const int BinaryDirectory_title = 2131100002; - - // aapt resource value: 0x7f0601b6 - public const int CannotMoveGroupHere = 2131100086; - - // aapt resource value: 0x7f0601ca - public const int ChangeLog = 2131100106; - - // aapt resource value: 0x7f0601c9 - public const int ChangeLog_0_7 = 2131100105; - - // aapt resource value: 0x7f0601c7 - public const int ChangeLog_0_8 = 2131100103; - - // aapt resource value: 0x7f0601c6 - public const int ChangeLog_0_8_1 = 2131100102; - - // aapt resource value: 0x7f0601c5 - public const int ChangeLog_0_8_2 = 2131100101; - - // aapt resource value: 0x7f0601c4 - public const int ChangeLog_0_8_3 = 2131100100; - - // aapt resource value: 0x7f0601c3 - public const int ChangeLog_0_8_4 = 2131100099; - - // aapt resource value: 0x7f0601c2 - public const int ChangeLog_0_8_5 = 2131100098; - - // aapt resource value: 0x7f0601c1 - public const int ChangeLog_0_8_6 = 2131100097; - - // aapt resource value: 0x7f0601c8 - public const int ChangeLog_keptDonate = 2131100104; - - // aapt resource value: 0x7f0601c0 - public const int ChangeLog_title = 2131100096; - - // aapt resource value: 0x7f06007e - public const int CheckForFileChangesOnSave_key = 2131099774; - - // aapt resource value: 0x7f06017c - public const int CheckForFileChangesOnSave_summary = 2131100028; - - // aapt resource value: 0x7f06017b - public const int CheckForFileChangesOnSave_title = 2131100027; - - // aapt resource value: 0x7f0601ac - public const int CheckingDatabaseForChanges = 2131100076; - - // aapt resource value: 0x7f0601a0 - public const int CheckingTargetFileForChanges = 2131100064; - - // aapt resource value: 0x7f0600a6 - public const int ClearClipboard = 2131099814; - - // aapt resource value: 0x7f06017a - public const int ClearOfflineCache_question = 2131100026; - - // aapt resource value: 0x7f060179 - public const int ClearOfflineCache_title = 2131100025; - - // aapt resource value: 0x7f060082 - public const int CopyToClipboardNotification_key = 2131099778; - - // aapt resource value: 0x7f0601ae - public const int CouldNotLoadFromRemote = 2131100078; - - // aapt resource value: 0x7f0601ad - public const int CouldNotSaveToRemote = 2131100077; - - // aapt resource value: 0x7f06008c - public const int CreditsText = 2131099788; - - // aapt resource value: 0x7f06019e - public const int DecodingDatabase = 2131100062; - - // aapt resource value: 0x7f060199 - public const int DeletingEntry = 2131100057; - - // aapt resource value: 0x7f06019a - public const int DeletingGroup = 2131100058; - - // aapt resource value: 0x7f0601a7 - public const int DownloadingRemoteFile = 2131100071; - - // aapt resource value: 0x7f0601b4 - public const int ErrorOcurred = 2131100084; - - // aapt resource value: 0x7f0600a1 - public const int FileHandling_prefs = 2131099809; - - // aapt resource value: 0x7f060075 - public const int FileHandling_prefs_key = 2131099765; - - // aapt resource value: 0x7f0600df - public const int FileNotFound = 2131099871; - - // aapt resource value: 0x7f0601aa - public const int FilesInSync = 2131100074; - - // aapt resource value: 0x7f0600f2 - public const int InvalidPassword = 2131099890; - - // aapt resource value: 0x7f06007b - public const int LastInfoVersionCode_key = 2131099771; - - // aapt resource value: 0x7f0601b1 - public const int LoadedFromRemoteInSync = 2131100081; - - // aapt resource value: 0x7f06007f - public const int MarketURL = 2131099775; - - // aapt resource value: 0x7f0600fc - public const int MaskedPassword = 2131099900; + // aapt resource value: 0x7f060096 + public const int AboutText = 2131099798; // aapt resource value: 0x7f0601a2 - public const int MessageSyncQuestion = 2131100066; - - // aapt resource value: 0x7f0601a5 - public const int NoOverwrite = 2131100069; - - // aapt resource value: 0x7f0601b0 - public const int NotifyOpenFromLocalDueToConflict = 2131100080; - - // aapt resource value: 0x7f060084 - public const int OpenKp2aKeyboardAutomatically_key = 2131099780; - - // aapt resource value: 0x7f060182 - public const int OpenKp2aKeyboardAutomatically_summary = 2131100034; - - // aapt resource value: 0x7f060181 - public const int OpenKp2aKeyboardAutomatically_title = 2131100033; - - // aapt resource value: 0x7f06019f - public const int ParsingDatabase = 2131100063; - - // aapt resource value: 0x7f060088 - public const int PreloadDatabaseEnabled_key = 2131099784; - - // aapt resource value: 0x7f060186 - public const int PreloadDatabaseEnabled_summary = 2131100038; - - // aapt resource value: 0x7f060185 - public const int PreloadDatabaseEnabled_title = 2131100037; - - // aapt resource value: 0x7f060076 - public const int QuickUnlockDefaultEnabled_key = 2131099766; - - // aapt resource value: 0x7f06015c - public const int QuickUnlockDefaultEnabled_summary = 2131099996; - - // aapt resource value: 0x7f06015b - public const int QuickUnlockDefaultEnabled_title = 2131099995; - - // aapt resource value: 0x7f060079 - public const int QuickUnlockIconHidden_key = 2131099769; - - // aapt resource value: 0x7f06015e - public const int QuickUnlockIconHidden_summary = 2131099998; - - // aapt resource value: 0x7f06015d - public const int QuickUnlockIconHidden_title = 2131099997; - - // aapt resource value: 0x7f060078 - public const int QuickUnlockLength_default = 2131099768; - - // aapt resource value: 0x7f060077 - public const int QuickUnlockLength_key = 2131099767; - - // aapt resource value: 0x7f060160 - public const int QuickUnlockLength_summary = 2131100000; - - // aapt resource value: 0x7f06015f - public const int QuickUnlockLength_title = 2131099999; - - // aapt resource value: 0x7f060159 - public const int QuickUnlock_button = 2131099993; - - // aapt resource value: 0x7f060161 - public const int QuickUnlock_fail = 2131100001; - - // aapt resource value: 0x7f060158 - public const int QuickUnlock_label = 2131099992; - - // aapt resource value: 0x7f06015a - public const int QuickUnlock_lockButton = 2131099994; - - // aapt resource value: 0x7f0600a0 - public const int QuickUnlock_prefs = 2131099808; - - // aapt resource value: 0x7f060074 - public const int QuickUnlock_prefs_key = 2131099764; - - // aapt resource value: 0x7f06018c - public const int RecycleBin = 2131100044; - - // aapt resource value: 0x7f06006c - public const int RememberRecentFiles_key = 2131099756; - - // aapt resource value: 0x7f06014c - public const int RememberRecentFiles_summary = 2131099980; - - // aapt resource value: 0x7f06014b - public const int RememberRecentFiles_title = 2131099979; - - // aapt resource value: 0x7f0601b3 - public const int RemoteDatabaseUnchanged = 2131100083; - - // aapt resource value: 0x7f0601a9 - public const int RestoringRemoteFile = 2131100073; - - // aapt resource value: 0x7f060167 - public const int SaveAttachmentDialog_open = 2131100007; - - // aapt resource value: 0x7f060166 - public const int SaveAttachmentDialog_save = 2131100006; - - // aapt resource value: 0x7f060165 - public const int SaveAttachmentDialog_text = 2131100005; - - // aapt resource value: 0x7f060164 - public const int SaveAttachmentDialog_title = 2131100004; - - // aapt resource value: 0x7f060169 - public const int SaveAttachment_Failed = 2131100009; - - // aapt resource value: 0x7f060168 - public const int SaveAttachment_doneMessage = 2131100008; - - // aapt resource value: 0x7f06019b - public const int SettingPassword = 2131100059; - - // aapt resource value: 0x7f06017e - public const int ShowCopyToClipboardNotification_summary = 2131100030; - - // aapt resource value: 0x7f06017d - public const int ShowCopyToClipboardNotification_title = 2131100029; - - // aapt resource value: 0x7f060180 - public const int ShowKp2aKeyboardNotification_summary = 2131100032; - - // aapt resource value: 0x7f06017f - public const int ShowKp2aKeyboardNotification_title = 2131100031; - - // aapt resource value: 0x7f060087 - public const int ShowUnlockedNotification_key = 2131099783; - - // aapt resource value: 0x7f060184 - public const int ShowUnlockedNotification_summary = 2131100036; - - // aapt resource value: 0x7f060183 - public const int ShowUnlockedNotification_title = 2131100035; - - // aapt resource value: 0x7f06006b - public const int ShowUsernameInList_key = 2131099755; - - // aapt resource value: 0x7f06014a - public const int ShowUsernameInList_summary = 2131099978; - - // aapt resource value: 0x7f060149 - public const int ShowUsernameInList_title = 2131099977; - - // aapt resource value: 0x7f060080 - public const int SuggestionsURL = 2131099776; - - // aapt resource value: 0x7f0601ab - public const int SynchronizedDatabaseSuccessfully = 2131100075; - - // aapt resource value: 0x7f0601a6 - public const int SynchronizingCachedDatabase = 2131100070; + public const int AddingEntry = 2131100066; // aapt resource value: 0x7f0601a3 - public const int SynchronizingDatabase = 2131100067; - - // aapt resource value: 0x7f06006a - public const int TanExpiresOnUse_key = 2131099754; - - // aapt resource value: 0x7f060148 - public const int TanExpiresOnUse_summary = 2131099976; - - // aapt resource value: 0x7f060147 - public const int TanExpiresOnUse_title = 2131099975; - - // aapt resource value: 0x7f0601a1 - public const int TitleSyncQuestion = 2131100065; - - // aapt resource value: 0x7f06019d - public const int TransformingKey = 2131100061; - - // aapt resource value: 0x7f060081 - public const int TranslationURL = 2131099777; - - // aapt resource value: 0x7f06019c - public const int UndoingChanges = 2131100060; - - // aapt resource value: 0x7f0601b2 - public const int UpdatedCachedFileOnLoad = 2131100082; - - // aapt resource value: 0x7f0601af - public const int UpdatedRemoteFileOnLoad = 2131100079; - - // aapt resource value: 0x7f0601a8 - public const int UploadingFile = 2131100072; - - // aapt resource value: 0x7f06007a - public const int UsageCount_key = 2131099770; - - // aapt resource value: 0x7f06007c - public const int UseFileTransactions_key = 2131099772; - - // aapt resource value: 0x7f060176 - public const int UseFileTransactions_summary = 2131100022; - - // aapt resource value: 0x7f060175 - public const int UseFileTransactions_title = 2131100021; - - // aapt resource value: 0x7f060083 - public const int UseKp2aKeyboard_key = 2131099779; - - // aapt resource value: 0x7f06007d - public const int UseOfflineCache_key = 2131099773; - - // aapt resource value: 0x7f060178 - public const int UseOfflineCache_summary = 2131100024; - - // aapt resource value: 0x7f060177 - public const int UseOfflineCache_title = 2131100023; - - // aapt resource value: 0x7f0601a4 - public const int YesSynchronize = 2131100068; - - // aapt resource value: 0x7f060002 - public const int abc_action_bar_home_description = 2131099650; - - // aapt resource value: 0x7f060003 - public const int abc_action_bar_up_description = 2131099651; - - // aapt resource value: 0x7f060004 - public const int abc_action_menu_overflow_description = 2131099652; - - // aapt resource value: 0x7f060001 - public const int abc_action_mode_done = 2131099649; - - // aapt resource value: 0x7f06000b - public const int abc_activity_chooser_view_see_all = 2131099659; - - // aapt resource value: 0x7f06000a - public const int abc_activitychooserview_choose_application = 2131099658; - - // aapt resource value: 0x7f060007 - public const int abc_searchview_description_clear = 2131099655; - - // aapt resource value: 0x7f060006 - public const int abc_searchview_description_query = 2131099654; - - // aapt resource value: 0x7f060005 - public const int abc_searchview_description_search = 2131099653; - - // aapt resource value: 0x7f060008 - public const int abc_searchview_description_submit = 2131099656; - - // aapt resource value: 0x7f060009 - public const int abc_searchview_description_voice = 2131099657; - - // aapt resource value: 0x7f06000d - public const int abc_shareactionprovider_share_with = 2131099661; - - // aapt resource value: 0x7f06000c - public const int abc_shareactionprovider_share_with_application = 2131099660; - - // aapt resource value: 0x7f060089 - public const int about_feedback = 2131099785; - - // aapt resource value: 0x7f06008a - public const int about_homepage = 2131099786; - - // aapt resource value: 0x7f06008d - public const int accept = 2131099789; - - // aapt resource value: 0x7f06016f - public const int add_binary = 2131100015; - - // aapt resource value: 0x7f06008e - public const int add_entry = 2131099790; - - // aapt resource value: 0x7f060170 - public const int add_extra_string = 2131100016; - - // aapt resource value: 0x7f060090 - public const int add_group = 2131099792; - - // aapt resource value: 0x7f060091 - public const int add_group_title = 2131099793; - - // aapt resource value: 0x7f06008f - public const int add_url_entry = 2131099791; - - // aapt resource value: 0x7f060056 - public const int afc_bullet = 2131099734; - - // aapt resource value: 0x7f060017 - public const int afc_cmd_advanced_selection_all = 2131099671; - - // aapt resource value: 0x7f060018 - public const int afc_cmd_advanced_selection_invert = 2131099672; - - // aapt resource value: 0x7f060019 - public const int afc_cmd_advanced_selection_none = 2131099673; - - // aapt resource value: 0x7f060048 - public const int afc_cmd_clear = 2131099720; - - // aapt resource value: 0x7f06001a - public const int afc_cmd_grid_view = 2131099674; - - // aapt resource value: 0x7f06001b - public const int afc_cmd_home = 2131099675; - - // aapt resource value: 0x7f06001c - public const int afc_cmd_list_view = 2131099676; - - // aapt resource value: 0x7f06001d - public const int afc_cmd_new_folder = 2131099677; - - // aapt resource value: 0x7f060054 - public const int afc_cmd_reload = 2131099732; - - // aapt resource value: 0x7f060049 - public const int afc_cmd_rename = 2131099721; - - // aapt resource value: 0x7f06001e - public const int afc_cmd_select_all_files = 2131099678; - - // aapt resource value: 0x7f06001f - public const int afc_cmd_select_all_folders = 2131099679; - - // aapt resource value: 0x7f060020 - public const int afc_cmd_sort = 2131099680; - - // aapt resource value: 0x7f06004a - public const int afc_cmd_sort_by_name = 2131099722; - - // aapt resource value: 0x7f060055 - public const int afc_ellipsize = 2131099733; - - // aapt resource value: 0x7f060021 - public const int afc_file = 2131099681; - - // aapt resource value: 0x7f060022 - public const int afc_folder = 2131099682; - - // aapt resource value: 0x7f060023 - public const int afc_hint_clear = 2131099683; - - // aapt resource value: 0x7f06004b - public const int afc_hint_double_tap_to_select_file = 2131099723; - - // aapt resource value: 0x7f060024 - public const int afc_hint_folder_name = 2131099684; - - // aapt resource value: 0x7f06004c - public const int afc_hint_new_name = 2131099724; - - // aapt resource value: 0x7f06004d - public const int afc_hint_newer = 2131099725; - - // aapt resource value: 0x7f06004e - public const int afc_hint_older = 2131099726; - - // aapt resource value: 0x7f060025 - public const int afc_hint_save_as_filename = 2131099685; - - // aapt resource value: 0x7f060026 - public const int afc_hint_search = 2131099686; - - // aapt resource value: 0x7f06000e - public const int afc_lib_name = 2131099662; - - // aapt resource value: 0x7f06000f - public const int afc_lib_version_name = 2131099663; - - // aapt resource value: 0x7f060027 - public const int afc_msg_app_doesnot_have_permission_to_create_files = 2131099687; - - // aapt resource value: 0x7f060028 - public const int afc_msg_app_doesnot_have_permission_to_delete_files = 2131099688; - - // aapt resource value: 0x7f060029 - public const int afc_msg_cancelled = 2131099689; - - // aapt resource value: 0x7f06002a - public const int afc_msg_cannot_connect_to_file_provider_service = 2131099690; - - // aapt resource value: 0x7f06002b - public const int afc_msg_cannot_create_new_folder_here = 2131099691; - - // aapt resource value: 0x7f06002c - public const int afc_msg_cannot_save_a_file_here = 2131099692; - - // aapt resource value: 0x7f06002d - public const int afc_msg_done = 2131099693; - - // aapt resource value: 0x7f06002e - public const int afc_msg_empty = 2131099694; - - // aapt resource value: 0x7f06002f - public const int afc_msg_failed_please_try_again = 2131099695; - - // aapt resource value: 0x7f06004f - public const int afc_msg_filename_is_empty = 2131099727; - - // aapt resource value: 0x7f060030 - public const int afc_msg_loading = 2131099696; - - // aapt resource value: 0x7f060031 - public const int afc_phone = 2131099697; - - // aapt resource value: 0x7f060016 - public const int afc_pkey_display_last_location = 2131099670; - - // aapt resource value: 0x7f060015 - public const int afc_pkey_display_remember_last_location = 2131099669; - - // aapt resource value: 0x7f060014 - public const int afc_pkey_display_show_time_for_old_days = 2131099668; - - // aapt resource value: 0x7f060013 - public const int afc_pkey_display_show_time_for_old_days_this_year = 2131099667; - - // aapt resource value: 0x7f060012 - public const int afc_pkey_display_sort_ascending = 2131099666; - - // aapt resource value: 0x7f060011 - public const int afc_pkey_display_sort_type = 2131099665; - - // aapt resource value: 0x7f060010 - public const int afc_pkey_display_view_type = 2131099664; - - // aapt resource value: 0x7f060032 - public const int afc_pmsg_cannot_access_dir = 2131099698; - - // aapt resource value: 0x7f060033 - public const int afc_pmsg_cannot_create_folder = 2131099699; - - // aapt resource value: 0x7f060034 - public const int afc_pmsg_cannot_delete_file = 2131099700; - - // aapt resource value: 0x7f060035 - public const int afc_pmsg_confirm_delete_file = 2131099701; - - // aapt resource value: 0x7f060036 - public const int afc_pmsg_confirm_replace_file = 2131099702; - - // aapt resource value: 0x7f060037 - public const int afc_pmsg_deleting_file = 2131099703; - - // aapt resource value: 0x7f060038 - public const int afc_pmsg_file_has_been_deleted = 2131099704; - - // aapt resource value: 0x7f060039 - public const int afc_pmsg_filename_is_directory = 2131099705; - - // aapt resource value: 0x7f06003a - public const int afc_pmsg_filename_is_invalid = 2131099706; - - // aapt resource value: 0x7f06003b - public const int afc_pmsg_max_file_count_allowed = 2131099707; - - // aapt resource value: 0x7f06003c - public const int afc_pmsg_unknown_error = 2131099708; - - // aapt resource value: 0x7f060050 - public const int afc_pmsg_xxx_items = 2131099728; - - // aapt resource value: 0x7f06003d - public const int afc_root = 2131099709; - - // aapt resource value: 0x7f06003e - public const int afc_title_advanced_selection = 2131099710; - - // aapt resource value: 0x7f060051 - public const int afc_title_alert = 2131099729; - - // aapt resource value: 0x7f06003f - public const int afc_title_confirmation = 2131099711; - - // aapt resource value: 0x7f060040 - public const int afc_title_date = 2131099712; - - // aapt resource value: 0x7f060041 - public const int afc_title_error = 2131099713; - - // aapt resource value: 0x7f060042 - public const int afc_title_info = 2131099714; - - // aapt resource value: 0x7f060043 - public const int afc_title_name = 2131099715; - - // aapt resource value: 0x7f060052 - public const int afc_title_rename = 2131099730; - - // aapt resource value: 0x7f060044 - public const int afc_title_save_as = 2131099716; - - // aapt resource value: 0x7f060045 - public const int afc_title_size = 2131099717; - - // aapt resource value: 0x7f060046 - public const int afc_title_sort_by = 2131099718; - - // aapt resource value: 0x7f060053 - public const int afc_today = 2131099731; - - // aapt resource value: 0x7f060047 - public const int afc_yesterday = 2131099719; - - // aapt resource value: 0x7f060093 - public const int algorithm = 2131099795; - - // aapt resource value: 0x7f060094 - public const int algorithm_colon = 2131099796; - - // aapt resource value: 0x7f06005f - public const int algorithm_key = 2131099743; - - // aapt resource value: 0x7f060060 - public const int app_key = 2131099744; - - // aapt resource value: 0x7f060095 - public const int app_name = 2131099797; - - // aapt resource value: 0x7f060097 - public const int app_name_nonet = 2131099799; - - // aapt resource value: 0x7f060099 - public const int app_timeout = 2131099801; - - // aapt resource value: 0x7f060061 - public const int app_timeout_key = 2131099745; - - // aapt resource value: 0x7f06009a - public const int app_timeout_summary = 2131099802; - - // aapt resource value: 0x7f06009b - public const int application = 2131099803; - - // aapt resource value: 0x7f06009c - public const int application_settings = 2131099804; - - // aapt resource value: 0x7f060140 - public const int author = 2131099968; - - // aapt resource value: 0x7f0600ab - public const int available_through_keyboard = 2131099819; - - // aapt resource value: 0x7f0600a2 - public const int brackets = 2131099810; - - // aapt resource value: 0x7f0600a3 - public const int browser_intall_text = 2131099811; - - // aapt resource value: 0x7f0600a4 - public const int building_search_idx = 2131099812; - - // aapt resource value: 0x7f0600a5 - public const int cancel = 2131099813; - - // aapt resource value: 0x7f060150 - public const int caseSensitive = 2131099984; - - // aapt resource value: 0x7f0600a7 - public const int clipboard_timeout = 2131099815; - - // aapt resource value: 0x7f060085 - public const int clipboard_timeout_default = 2131099781; - - // aapt resource value: 0x7f060062 - public const int clipboard_timeout_key = 2131099746; - - // aapt resource value: 0x7f0600a8 - public const int clipboard_timeout_summary = 2131099816; - - // aapt resource value: 0x7f060145 - public const int contributors = 2131099973; - - // aapt resource value: 0x7f0600aa - public const int copy_password = 2131099818; - - // aapt resource value: 0x7f0600a9 - public const int copy_username = 2131099817; - - // aapt resource value: 0x7f0600ae - public const int creating_db_key = 2131099822; - - // aapt resource value: 0x7f060174 - public const int credentials_dialog_title = 2131100020; - - // aapt resource value: 0x7f060143 - public const int credit_android_filechooser = 2131099971; - - // aapt resource value: 0x7f060142 - public const int credit_plugin1 = 2131099970; - - // aapt resource value: 0x7f0600af - public const int current_group = 2131099823; - - // aapt resource value: 0x7f0600b0 - public const int current_group_root = 2131099824; - - // aapt resource value: 0x7f0600b1 - public const int database = 2131099825; - - // aapt resource value: 0x7f060172 - public const int database_loaded_quickunlock_enabled = 2131100018; - - // aapt resource value: 0x7f060173 - public const int database_loaded_unlocked = 2131100019; - - // aapt resource value: 0x7f060129 - public const int database_name = 2131099945; - - // aapt resource value: 0x7f06006e - public const int database_name_key = 2131099758; - - // aapt resource value: 0x7f060063 - public const int db_key = 2131099747; - - // aapt resource value: 0x7f0600b2 - public const int decrypting_db = 2131099826; - - // aapt resource value: 0x7f0600b3 - public const int decrypting_entry = 2131099827; - - // aapt resource value: 0x7f0600b4 - public const int default_checkbox = 2131099828; - - // aapt resource value: 0x7f060057 - public const int default_file_path = 2131099735; - - // aapt resource value: 0x7f06012a - public const int default_username = 2131099946; - - // aapt resource value: 0x7f06006d - public const int default_username_key = 2131099757; - - // aapt resource value: 0x7f060171 - public const int delete_extra_string = 2131100017; - - // aapt resource value: 0x7f0600b5 - public const int digits = 2131099829; - - // aapt resource value: 0x7f0600b6 - public const int disclaimer_formal = 2131099830; - - // aapt resource value: 0x7f06009e - public const int display_prefs = 2131099806; - - // aapt resource value: 0x7f060073 - public const int display_prefs_key = 2131099763; - - // aapt resource value: 0x7f0601b7 - public const int donate_question = 2131100087; - - // aapt resource value: 0x7f060058 - public const int donate_url = 2131099736; - - // aapt resource value: 0x7f060092 - public const int edit_group_title = 2131099794; - - // aapt resource value: 0x7f0600b7 - public const int ellipsis = 2131099831; - - // aapt resource value: 0x7f060157 - public const int enable_quickunlock = 2131099991; - - // aapt resource value: 0x7f0600b8 - public const int enter_filename = 2131099832; - - // aapt resource value: 0x7f060156 - public const int enter_filename_details_create_import = 2131099990; - - // aapt resource value: 0x7f060155 - public const int enter_filename_details_url = 2131099989; - - // aapt resource value: 0x7f0600b9 - public const int entry_accessed = 2131099833; - - // aapt resource value: 0x7f0600ba - public const int entry_and_or = 2131099834; - - // aapt resource value: 0x7f0600ca - public const int entry_binaries = 2131099850; - - // aapt resource value: 0x7f0600bb - public const int entry_cancel = 2131099835; - - // aapt resource value: 0x7f0600bc - public const int entry_comment = 2131099836; - - // aapt resource value: 0x7f0600bf - public const int entry_confpassword = 2131099839; - - // aapt resource value: 0x7f0600c0 - public const int entry_created = 2131099840; - - // aapt resource value: 0x7f0600c1 - public const int entry_expires = 2131099841; - - // aapt resource value: 0x7f0600c9 - public const int entry_extra_strings = 2131099849; - - // aapt resource value: 0x7f0600c2 - public const int entry_keyfile = 2131099842; - - // aapt resource value: 0x7f0600c3 - public const int entry_modified = 2131099843; - - // aapt resource value: 0x7f0600be - public const int entry_override_url = 2131099838; - - // aapt resource value: 0x7f0600c4 - public const int entry_password = 2131099844; - - // aapt resource value: 0x7f0600c5 - public const int entry_save = 2131099845; - - // aapt resource value: 0x7f0600bd - public const int entry_tags = 2131099837; - - // aapt resource value: 0x7f0600c6 - public const int entry_title = 2131099846; - - // aapt resource value: 0x7f0600c7 - public const int entry_url = 2131099847; - - // aapt resource value: 0x7f0600c8 - public const int entry_user_name = 2131099848; - - // aapt resource value: 0x7f0600cb - public const int error_arc4 = 2131099851; - - // aapt resource value: 0x7f0600cc - public const int error_can_not_handle_uri = 2131099852; - - // aapt resource value: 0x7f0600cd - public const int error_could_not_create_group = 2131099853; - - // aapt resource value: 0x7f0600ce - public const int error_could_not_create_parent = 2131099854; - - // aapt resource value: 0x7f0600cf - public const int error_database_exists = 2131099855; - - // aapt resource value: 0x7f0600d0 - public const int error_database_settings = 2131099856; - - // aapt resource value: 0x7f0600d1 - public const int error_failed_to_launch_link = 2131099857; - - // aapt resource value: 0x7f0600d3 - public const int error_file_not_create = 2131099859; - - // aapt resource value: 0x7f0600d2 - public const int error_filename_required = 2131099858; - - // aapt resource value: 0x7f0600d4 - public const int error_invalid_db = 2131099860; - - // aapt resource value: 0x7f06016a - public const int error_invalid_expiry_date = 2131100010; - - // aapt resource value: 0x7f0600d5 - public const int error_invalid_path = 2131099861; - - // aapt resource value: 0x7f0600d6 - public const int error_no_name = 2131099862; - - // aapt resource value: 0x7f0600d7 - public const int error_nopass = 2131099863; - - // aapt resource value: 0x7f0600d8 - public const int error_out_of_memory = 2131099864; - - // aapt resource value: 0x7f0600d9 - public const int error_pass_gen_type = 2131099865; - - // aapt resource value: 0x7f0600da - public const int error_pass_match = 2131099866; - - // aapt resource value: 0x7f0600db - public const int error_rounds_not_number = 2131099867; - - // aapt resource value: 0x7f0600dc - public const int error_rounds_too_large = 2131099868; - - // aapt resource value: 0x7f06016b - public const int error_string_key = 2131100011; - - // aapt resource value: 0x7f0600dd - public const int error_title_required = 2131099869; - - // aapt resource value: 0x7f0600de - public const int error_wrong_length = 2131099870; - - // aapt resource value: 0x7f06014e - public const int excludeExpiredEntries = 2131099982; - - // aapt resource value: 0x7f06016c - public const int field_name = 2131100012; - - // aapt resource value: 0x7f06016d - public const int field_value = 2131100013; - - // aapt resource value: 0x7f0600e0 - public const int file_browser = 2131099872; - - // aapt resource value: 0x7f0601be - public const int filestoragename_dropbox = 2131100094; - - // aapt resource value: 0x7f0601ba - public const int filestoragename_file = 2131100090; - - // aapt resource value: 0x7f0601bb - public const int filestoragename_ftp = 2131100091; - - // aapt resource value: 0x7f0601bf - public const int filestoragename_gdrive = 2131100095; - - // aapt resource value: 0x7f0601bc - public const int filestoragename_http = 2131100092; - - // aapt resource value: 0x7f0601bd - public const int filestoragename_https = 2131100093; - - // aapt resource value: 0x7f06005b - public const int further_author_names = 2131099739; - - // aapt resource value: 0x7f060141 - public const int further_authors = 2131099969; - - // aapt resource value: 0x7f0600e1 - public const int generate_password = 2131099873; - - // aapt resource value: 0x7f0600e2 - public const int group = 2131099874; - - // aapt resource value: 0x7f0600e3 - public const int hint_comment = 2131099875; - - // aapt resource value: 0x7f0600e4 - public const int hint_conf_pass = 2131099876; - - // aapt resource value: 0x7f0600e5 - public const int hint_generated_password = 2131099877; - - // aapt resource value: 0x7f0600e6 - public const int hint_group_name = 2131099878; - - // aapt resource value: 0x7f0600e7 - public const int hint_keyfile = 2131099879; - - // aapt resource value: 0x7f0600e8 - public const int hint_length = 2131099880; - - // aapt resource value: 0x7f0600ea - public const int hint_login_pass = 2131099882; - - // aapt resource value: 0x7f0600ed - public const int hint_override_url = 2131099885; - - // aapt resource value: 0x7f0600e9 - public const int hint_pass = 2131099881; - - // aapt resource value: 0x7f0600ee - public const int hint_tags = 2131099886; - - // aapt resource value: 0x7f0600eb - public const int hint_title = 2131099883; - - // aapt resource value: 0x7f0600ec - public const int hint_url = 2131099884; - - // aapt resource value: 0x7f0600ef - public const int hint_username = 2131099887; - - // aapt resource value: 0x7f060059 - public const int homepage = 2131099737; - - // aapt resource value: 0x7f06005a - public const int homepage_short = 2131099738; - - // aapt resource value: 0x7f060137 - public const int insert_element_here = 2131099959; - - // aapt resource value: 0x7f0600f0 - public const int install_from_market = 2131099888; - - // aapt resource value: 0x7f0600f1 - public const int install_from_website = 2131099889; - - // aapt resource value: 0x7f0600f3 - public const int invalid_algorithm = 2131099891; - - // aapt resource value: 0x7f0600f4 - public const int invalid_db_sig = 2131099892; - - // aapt resource value: 0x7f06005c - public const int issues = 2131099740; - - // aapt resource value: 0x7f0600f5 - public const int keyfile_does_not_exist = 2131099893; - - // aapt resource value: 0x7f0600f6 - public const int keyfile_is_empty = 2131099894; - - // aapt resource value: 0x7f060065 - public const int keyfile_key = 2131099749; - - // aapt resource value: 0x7f06014d - public const int kp2a_findUrl = 2131099981; - - // aapt resource value: 0x7f0600f7 - public const int length = 2131099895; + public const int AddingGroup = 2131100067; // aapt resource value: 0x7f060000 - public const int library_name = 2131099648; + public const int ApplicationName = 2131099648; - // aapt resource value: 0x7f060086 - public const int list_size_default = 2131099782; + // aapt resource value: 0x7f060198 + public const int AskDeletePermanentlyEntry = 2131100056; - // aapt resource value: 0x7f060068 - public const int list_size_key = 2131099752; + // aapt resource value: 0x7f060199 + public const int AskDeletePermanentlyGroup = 2131100057; - // aapt resource value: 0x7f0600f9 - public const int list_size_summary = 2131099897; + // aapt resource value: 0x7f06019a + public const int AskDeletePermanently_title = 2131100058; - // aapt resource value: 0x7f0600f8 - public const int list_size_title = 2131099896; + // aapt resource value: 0x7f06019d + public const int AskDiscardChanges = 2131100061; - // aapt resource value: 0x7f0600fa - public const int loading_database = 2131099898; + // aapt resource value: 0x7f06019e + public const int AskDiscardChanges_title = 2131100062; - // aapt resource value: 0x7f0600fb - public const int lowercase = 2131099899; - - // aapt resource value: 0x7f060066 - public const int maskpass_key = 2131099750; - - // aapt resource value: 0x7f0600fe - public const int maskpass_summary = 2131099902; - - // aapt resource value: 0x7f0600fd - public const int maskpass_title = 2131099901; - - // aapt resource value: 0x7f0600ff - public const int menu_about = 2131099903; - - // aapt resource value: 0x7f060104 - public const int menu_app_settings = 2131099908; - - // aapt resource value: 0x7f060112 - public const int menu_change_db = 2131099922; - - // aapt resource value: 0x7f060100 - public const int menu_change_key = 2131099904; - - // aapt resource value: 0x7f060101 - public const int menu_copy_pass = 2131099905; - - // aapt resource value: 0x7f060102 - public const int menu_copy_user = 2131099906; - - // aapt resource value: 0x7f060103 - public const int menu_create = 2131099907; - - // aapt resource value: 0x7f060105 - public const int menu_db_settings = 2131099909; - - // aapt resource value: 0x7f060106 - public const int menu_delete = 2131099910; - - // aapt resource value: 0x7f060108 - public const int menu_donate = 2131099912; - - // aapt resource value: 0x7f060109 - public const int menu_edit = 2131099913; - - // aapt resource value: 0x7f06010a - public const int menu_hide_password = 2131099914; - - // aapt resource value: 0x7f06010b - public const int menu_homepage = 2131099915; - - // aapt resource value: 0x7f06010c - public const int menu_lock = 2131099916; - - // aapt resource value: 0x7f060107 - public const int menu_move = 2131099911; - - // aapt resource value: 0x7f06010d - public const int menu_open = 2131099917; - - // aapt resource value: 0x7f06010e - public const int menu_rename = 2131099918; - - // aapt resource value: 0x7f06010f - public const int menu_search = 2131099919; - - // aapt resource value: 0x7f060110 - public const int menu_search_advanced = 2131099920; - - // aapt resource value: 0x7f060111 - public const int menu_url = 2131099921; - - // aapt resource value: 0x7f060113 - public const int minus = 2131099923; - - // aapt resource value: 0x7f060114 - public const int never = 2131099924; - - // aapt resource value: 0x7f060116 - public const int no = 2131099926; - - // aapt resource value: 0x7f060117 - public const int no_keys = 2131099927; - - // aapt resource value: 0x7f060118 - public const int no_results = 2131099928; - - // aapt resource value: 0x7f0601b9 - public const int no_thanks = 2131100089; - - // aapt resource value: 0x7f060119 - public const int no_url_handler = 2131099929; - - // aapt resource value: 0x7f0600ac - public const int not_possible_im_picker = 2131099820; - - // aapt resource value: 0x7f06005d - public const int oi_filemanager_market = 2131099741; - - // aapt resource value: 0x7f06005e - public const int oi_filemanager_web = 2131099742; - - // aapt resource value: 0x7f0601b8 - public const int ok_donate = 2131100088; - - // aapt resource value: 0x7f060067 - public const int omitbackup_key = 2131099751; - - // aapt resource value: 0x7f06011c - public const int omitbackup_summary = 2131099932; - - // aapt resource value: 0x7f06011b - public const int omitbackup_title = 2131099931; - - // aapt resource value: 0x7f06011a - public const int open_recent = 2131099930; - - // aapt resource value: 0x7f06011d - public const int pass_filename = 2131099933; - - // aapt resource value: 0x7f06009f - public const int password_access_prefs = 2131099807; - - // aapt resource value: 0x7f060071 - public const int password_access_prefs_key = 2131099761; - - // aapt resource value: 0x7f06011e - public const int password_title = 2131099934; - - // aapt resource value: 0x7f0600ad - public const int please_activate_keyboard = 2131099821; - - // aapt resource value: 0x7f060144 - public const int please_note = 2131099972; - - // aapt resource value: 0x7f06011f - public const int progress_create = 2131099935; - - // aapt resource value: 0x7f060120 - public const int progress_title = 2131099936; - - // aapt resource value: 0x7f06016e - public const int protection = 2131100014; + // aapt resource value: 0x7f060192 + public const int AskOverwriteBinary = 2131100050; // aapt resource value: 0x7f060195 - public const int rate_app = 2131100053; + public const int AskOverwriteBinary_no = 2131100053; - // aapt resource value: 0x7f060146 - public const int regular_expression = 2131099974; - - // aapt resource value: 0x7f060121 - public const int remember_keyfile_summary = 2131099937; - - // aapt resource value: 0x7f060122 - public const int remember_keyfile_title = 2131099938; - - // aapt resource value: 0x7f060123 - public const int remove_from_filelist = 2131099939; - - // aapt resource value: 0x7f060124 - public const int rijndael = 2131099940; - - // aapt resource value: 0x7f060125 - public const int root = 2131099941; - - // aapt resource value: 0x7f060126 - public const int rounds = 2131099942; - - // aapt resource value: 0x7f060127 - public const int rounds_explaination = 2131099943; - - // aapt resource value: 0x7f060128 - public const int rounds_hint = 2131099944; - - // aapt resource value: 0x7f060064 - public const int rounds_key = 2131099748; - - // aapt resource value: 0x7f06012b - public const int saving_database = 2131099947; - - // aapt resource value: 0x7f060132 - public const int search_hint = 2131099954; - - // aapt resource value: 0x7f060134 - public const int search_in = 2131099956; - - // aapt resource value: 0x7f06012d - public const int search_label = 2131099949; - - // aapt resource value: 0x7f06014f - public const int search_options = 2131099983; - - // aapt resource value: 0x7f060133 - public const int search_results = 2131099955; - - // aapt resource value: 0x7f06009d - public const int security_prefs = 2131099805; - - // aapt resource value: 0x7f060072 - public const int security_prefs_key = 2131099762; - - // aapt resource value: 0x7f060136 - public const int select_group_then_add = 2131099958; - - // aapt resource value: 0x7f060135 - public const int select_other_entry = 2131099957; - - // aapt resource value: 0x7f060096 - public const int short_app_name = 2131099798; - - // aapt resource value: 0x7f060098 - public const int short_app_name_nonet = 2131099800; - - // aapt resource value: 0x7f06012e - public const int show_password = 2131099950; - - // aapt resource value: 0x7f060130 - public const int sort_db = 2131099952; - - // aapt resource value: 0x7f060069 - public const int sort_key = 2131099753; - - // aapt resource value: 0x7f06012f - public const int sort_name = 2131099951; - - // aapt resource value: 0x7f06012c - public const int space = 2131099948; - - // aapt resource value: 0x7f060131 - public const int special = 2131099953; - - // aapt resource value: 0x7f060152 - public const int start_create = 2131099986; - - // aapt resource value: 0x7f060154 - public const int start_create_import = 2131099988; - - // aapt resource value: 0x7f060151 - public const int start_open_file = 2131099985; - - // aapt resource value: 0x7f060153 - public const int start_open_url = 2131099987; + // aapt resource value: 0x7f060193 + public const int AskOverwriteBinary_title = 2131100051; // aapt resource value: 0x7f060194 - public const int suggest_improvements = 2131100052; + public const int AskOverwriteBinary_yes = 2131100052; - // aapt resource value: 0x7f0601b5 - public const int synchronize_database_menu = 2131100085; + // aapt resource value: 0x7f06019c + public const int AskReloadFile = 2131100060; + + // aapt resource value: 0x7f06019b + public const int AskReloadFile_title = 2131100059; // aapt resource value: 0x7f060196 - public const int translate_app = 2131100054; + public const int AttachFailed = 2131100054; - // aapt resource value: 0x7f060138 - public const int twofish = 2131099960; + // aapt resource value: 0x7f06007b + public const int BinaryDirectory_default = 2131099771; - // aapt resource value: 0x7f060139 - public const int underline = 2131099961; + // aapt resource value: 0x7f06007a + public const int BinaryDirectory_key = 2131099770; - // aapt resource value: 0x7f06013a - public const int unsupported_db_version = 2131099962; + // aapt resource value: 0x7f06016e + public const int BinaryDirectory_summary = 2131100014; - // aapt resource value: 0x7f06013b - public const int uppercase = 2131099963; + // aapt resource value: 0x7f06016d + public const int BinaryDirectory_title = 2131100013; - // aapt resource value: 0x7f06013f - public const int version_history = 2131099967; + // aapt resource value: 0x7f0601c1 + public const int CannotMoveGroupHere = 2131100097; - // aapt resource value: 0x7f06013e - public const int version_label = 2131099966; + // aapt resource value: 0x7f0601da + public const int ChangeLog = 2131100122; - // aapt resource value: 0x7f06013c - public const int warning_read_only = 2131099964; + // aapt resource value: 0x7f0601d9 + public const int ChangeLog_0_7 = 2131100121; - // aapt resource value: 0x7f06013d - public const int warning_unmounted = 2131099965; + // aapt resource value: 0x7f0601d7 + public const int ChangeLog_0_8 = 2131100119; + + // aapt resource value: 0x7f0601d6 + public const int ChangeLog_0_8_1 = 2131100118; + + // aapt resource value: 0x7f0601d5 + public const int ChangeLog_0_8_2 = 2131100117; + + // aapt resource value: 0x7f0601d4 + public const int ChangeLog_0_8_3 = 2131100116; + + // aapt resource value: 0x7f0601d3 + public const int ChangeLog_0_8_4 = 2131100115; + + // aapt resource value: 0x7f0601d2 + public const int ChangeLog_0_8_5 = 2131100114; + + // aapt resource value: 0x7f0601d1 + public const int ChangeLog_0_8_6 = 2131100113; + + // aapt resource value: 0x7f0601d0 + public const int ChangeLog_0_9 = 2131100112; + + // aapt resource value: 0x7f0601d8 + public const int ChangeLog_keptDonate = 2131100120; + + // aapt resource value: 0x7f0601cf + public const int ChangeLog_title = 2131100111; + + // aapt resource value: 0x7f060089 + public const int CheckForFileChangesOnSave_key = 2131099785; + + // aapt resource value: 0x7f060187 + public const int CheckForFileChangesOnSave_summary = 2131100039; + + // aapt resource value: 0x7f060186 + public const int CheckForFileChangesOnSave_title = 2131100038; + + // aapt resource value: 0x7f0601b7 + public const int CheckingDatabaseForChanges = 2131100087; + + // aapt resource value: 0x7f0601ab + public const int CheckingTargetFileForChanges = 2131100075; + + // aapt resource value: 0x7f0600b1 + public const int ClearClipboard = 2131099825; + + // aapt resource value: 0x7f060185 + public const int ClearOfflineCache_question = 2131100037; + + // aapt resource value: 0x7f060184 + public const int ClearOfflineCache_title = 2131100036; + + // aapt resource value: 0x7f06008d + public const int CopyToClipboardNotification_key = 2131099789; + + // aapt resource value: 0x7f0601b9 + public const int CouldNotLoadFromRemote = 2131100089; + + // aapt resource value: 0x7f0601b8 + public const int CouldNotSaveToRemote = 2131100088; + + // aapt resource value: 0x7f060097 + public const int CreditsText = 2131099799; + + // aapt resource value: 0x7f0601a9 + public const int DecodingDatabase = 2131100073; + + // aapt resource value: 0x7f0601a4 + public const int DeletingEntry = 2131100068; + + // aapt resource value: 0x7f0601a5 + public const int DeletingGroup = 2131100069; + + // aapt resource value: 0x7f0601b2 + public const int DownloadingRemoteFile = 2131100082; + + // aapt resource value: 0x7f0601bf + public const int ErrorOcurred = 2131100095; + + // aapt resource value: 0x7f0600ac + public const int FileHandling_prefs = 2131099820; + + // aapt resource value: 0x7f060080 + public const int FileHandling_prefs_key = 2131099776; + + // aapt resource value: 0x7f0600ea + public const int FileNotFound = 2131099882; + + // aapt resource value: 0x7f0601b5 + public const int FilesInSync = 2131100085; + + // aapt resource value: 0x7f0600fd + public const int InvalidPassword = 2131099901; + + // aapt resource value: 0x7f060086 + public const int LastInfoVersionCode_key = 2131099782; + + // aapt resource value: 0x7f0601bc + public const int LoadedFromRemoteInSync = 2131100092; + + // aapt resource value: 0x7f06008a + public const int MarketURL = 2131099786; + + // aapt resource value: 0x7f060107 + public const int MaskedPassword = 2131099911; + + // aapt resource value: 0x7f0601ad + public const int MessageSyncQuestion = 2131100077; + + // aapt resource value: 0x7f0601b0 + public const int NoOverwrite = 2131100080; + + // aapt resource value: 0x7f0601bb + public const int NotifyOpenFromLocalDueToConflict = 2131100091; + + // aapt resource value: 0x7f06008f + public const int OpenKp2aKeyboardAutomatically_key = 2131099791; + + // aapt resource value: 0x7f06018d + public const int OpenKp2aKeyboardAutomatically_summary = 2131100045; + + // aapt resource value: 0x7f06018c + public const int OpenKp2aKeyboardAutomatically_title = 2131100044; + + // aapt resource value: 0x7f0601aa + public const int ParsingDatabase = 2131100074; + + // aapt resource value: 0x7f060093 + public const int PreloadDatabaseEnabled_key = 2131099795; + + // aapt resource value: 0x7f060191 + public const int PreloadDatabaseEnabled_summary = 2131100049; + + // aapt resource value: 0x7f060190 + public const int PreloadDatabaseEnabled_title = 2131100048; + + // aapt resource value: 0x7f060081 + public const int QuickUnlockDefaultEnabled_key = 2131099777; + + // aapt resource value: 0x7f060167 + public const int QuickUnlockDefaultEnabled_summary = 2131100007; + + // aapt resource value: 0x7f060166 + public const int QuickUnlockDefaultEnabled_title = 2131100006; + + // aapt resource value: 0x7f060084 + public const int QuickUnlockIconHidden_key = 2131099780; + + // aapt resource value: 0x7f060169 + public const int QuickUnlockIconHidden_summary = 2131100009; + + // aapt resource value: 0x7f060168 + public const int QuickUnlockIconHidden_title = 2131100008; + + // aapt resource value: 0x7f060083 + public const int QuickUnlockLength_default = 2131099779; + + // aapt resource value: 0x7f060082 + public const int QuickUnlockLength_key = 2131099778; + + // aapt resource value: 0x7f06016b + public const int QuickUnlockLength_summary = 2131100011; + + // aapt resource value: 0x7f06016a + public const int QuickUnlockLength_title = 2131100010; + + // aapt resource value: 0x7f060164 + public const int QuickUnlock_button = 2131100004; + + // aapt resource value: 0x7f06016c + public const int QuickUnlock_fail = 2131100012; + + // aapt resource value: 0x7f060163 + public const int QuickUnlock_label = 2131100003; + + // aapt resource value: 0x7f060165 + public const int QuickUnlock_lockButton = 2131100005; + + // aapt resource value: 0x7f0600ab + public const int QuickUnlock_prefs = 2131099819; + + // aapt resource value: 0x7f06007f + public const int QuickUnlock_prefs_key = 2131099775; + + // aapt resource value: 0x7f060197 + public const int RecycleBin = 2131100055; + + // aapt resource value: 0x7f060077 + public const int RememberRecentFiles_key = 2131099767; + + // aapt resource value: 0x7f060157 + public const int RememberRecentFiles_summary = 2131099991; + + // aapt resource value: 0x7f060156 + public const int RememberRecentFiles_title = 2131099990; + + // aapt resource value: 0x7f0601be + public const int RemoteDatabaseUnchanged = 2131100094; + + // aapt resource value: 0x7f0601b4 + public const int RestoringRemoteFile = 2131100084; + + // aapt resource value: 0x7f060172 + public const int SaveAttachmentDialog_open = 2131100018; + + // aapt resource value: 0x7f060171 + public const int SaveAttachmentDialog_save = 2131100017; + + // aapt resource value: 0x7f060170 + public const int SaveAttachmentDialog_text = 2131100016; + + // aapt resource value: 0x7f06016f + public const int SaveAttachmentDialog_title = 2131100015; + + // aapt resource value: 0x7f060174 + public const int SaveAttachment_Failed = 2131100020; + + // aapt resource value: 0x7f060173 + public const int SaveAttachment_doneMessage = 2131100019; + + // aapt resource value: 0x7f0601a6 + public const int SettingPassword = 2131100070; + + // aapt resource value: 0x7f060189 + public const int ShowCopyToClipboardNotification_summary = 2131100041; + + // aapt resource value: 0x7f060188 + public const int ShowCopyToClipboardNotification_title = 2131100040; + + // aapt resource value: 0x7f06018b + public const int ShowKp2aKeyboardNotification_summary = 2131100043; + + // aapt resource value: 0x7f06018a + public const int ShowKp2aKeyboardNotification_title = 2131100042; + + // aapt resource value: 0x7f060092 + public const int ShowUnlockedNotification_key = 2131099794; + + // aapt resource value: 0x7f06018f + public const int ShowUnlockedNotification_summary = 2131100047; + + // aapt resource value: 0x7f06018e + public const int ShowUnlockedNotification_title = 2131100046; + + // aapt resource value: 0x7f060076 + public const int ShowUsernameInList_key = 2131099766; + + // aapt resource value: 0x7f060155 + public const int ShowUsernameInList_summary = 2131099989; + + // aapt resource value: 0x7f060154 + public const int ShowUsernameInList_title = 2131099988; + + // aapt resource value: 0x7f06008b + public const int SuggestionsURL = 2131099787; + + // aapt resource value: 0x7f0601b6 + public const int SynchronizedDatabaseSuccessfully = 2131100086; + + // aapt resource value: 0x7f0601b1 + public const int SynchronizingCachedDatabase = 2131100081; + + // aapt resource value: 0x7f0601ae + public const int SynchronizingDatabase = 2131100078; + + // aapt resource value: 0x7f060075 + public const int TanExpiresOnUse_key = 2131099765; + + // aapt resource value: 0x7f060153 + public const int TanExpiresOnUse_summary = 2131099987; + + // aapt resource value: 0x7f060152 + public const int TanExpiresOnUse_title = 2131099986; + + // aapt resource value: 0x7f0601ac + public const int TitleSyncQuestion = 2131100076; + + // aapt resource value: 0x7f0601a8 + public const int TransformingKey = 2131100072; + + // aapt resource value: 0x7f06008c + public const int TranslationURL = 2131099788; + + // aapt resource value: 0x7f0601a7 + public const int UndoingChanges = 2131100071; + + // aapt resource value: 0x7f0601bd + public const int UpdatedCachedFileOnLoad = 2131100093; + + // aapt resource value: 0x7f0601ba + public const int UpdatedRemoteFileOnLoad = 2131100090; + + // aapt resource value: 0x7f0601b3 + public const int UploadingFile = 2131100083; + + // aapt resource value: 0x7f060085 + public const int UsageCount_key = 2131099781; + + // aapt resource value: 0x7f060087 + public const int UseFileTransactions_key = 2131099783; + + // aapt resource value: 0x7f060181 + public const int UseFileTransactions_summary = 2131100033; + + // aapt resource value: 0x7f060180 + public const int UseFileTransactions_title = 2131100032; + + // aapt resource value: 0x7f06008e + public const int UseKp2aKeyboard_key = 2131099790; + + // aapt resource value: 0x7f060088 + public const int UseOfflineCache_key = 2131099784; + + // aapt resource value: 0x7f060183 + public const int UseOfflineCache_summary = 2131100035; + + // aapt resource value: 0x7f060182 + public const int UseOfflineCache_title = 2131100034; + + // aapt resource value: 0x7f0601af + public const int YesSynchronize = 2131100079; + + // aapt resource value: 0x7f06000c + public const int abc_action_bar_home_description = 2131099660; + + // aapt resource value: 0x7f06000d + public const int abc_action_bar_up_description = 2131099661; + + // aapt resource value: 0x7f06000e + public const int abc_action_menu_overflow_description = 2131099662; + + // aapt resource value: 0x7f06000b + public const int abc_action_mode_done = 2131099659; + + // aapt resource value: 0x7f060015 + public const int abc_activity_chooser_view_see_all = 2131099669; + + // aapt resource value: 0x7f060014 + public const int abc_activitychooserview_choose_application = 2131099668; + + // aapt resource value: 0x7f060011 + public const int abc_searchview_description_clear = 2131099665; + + // aapt resource value: 0x7f060010 + public const int abc_searchview_description_query = 2131099664; + + // aapt resource value: 0x7f06000f + public const int abc_searchview_description_search = 2131099663; + + // aapt resource value: 0x7f060012 + public const int abc_searchview_description_submit = 2131099666; + + // aapt resource value: 0x7f060013 + public const int abc_searchview_description_voice = 2131099667; + + // aapt resource value: 0x7f060017 + public const int abc_shareactionprovider_share_with = 2131099671; + + // aapt resource value: 0x7f060016 + public const int abc_shareactionprovider_share_with_application = 2131099670; + + // aapt resource value: 0x7f060094 + public const int about_feedback = 2131099796; + + // aapt resource value: 0x7f060095 + public const int about_homepage = 2131099797; + + // aapt resource value: 0x7f060098 + public const int accept = 2131099800; + + // aapt resource value: 0x7f06017a + public const int add_binary = 2131100026; + + // aapt resource value: 0x7f060099 + public const int add_entry = 2131099801; + + // aapt resource value: 0x7f06017b + public const int add_extra_string = 2131100027; + + // aapt resource value: 0x7f06009b + public const int add_group = 2131099803; + + // aapt resource value: 0x7f06009c + public const int add_group_title = 2131099804; + + // aapt resource value: 0x7f06009a + public const int add_url_entry = 2131099802; + + // aapt resource value: 0x7f060060 + public const int afc_bullet = 2131099744; + + // aapt resource value: 0x7f060021 + public const int afc_cmd_advanced_selection_all = 2131099681; + + // aapt resource value: 0x7f060022 + public const int afc_cmd_advanced_selection_invert = 2131099682; + + // aapt resource value: 0x7f060023 + public const int afc_cmd_advanced_selection_none = 2131099683; + + // aapt resource value: 0x7f060052 + public const int afc_cmd_clear = 2131099730; + + // aapt resource value: 0x7f060024 + public const int afc_cmd_grid_view = 2131099684; + + // aapt resource value: 0x7f060025 + public const int afc_cmd_home = 2131099685; + + // aapt resource value: 0x7f060026 + public const int afc_cmd_list_view = 2131099686; + + // aapt resource value: 0x7f060027 + public const int afc_cmd_new_folder = 2131099687; + + // aapt resource value: 0x7f06005e + public const int afc_cmd_reload = 2131099742; + + // aapt resource value: 0x7f060053 + public const int afc_cmd_rename = 2131099731; + + // aapt resource value: 0x7f060028 + public const int afc_cmd_select_all_files = 2131099688; + + // aapt resource value: 0x7f060029 + public const int afc_cmd_select_all_folders = 2131099689; + + // aapt resource value: 0x7f06002a + public const int afc_cmd_sort = 2131099690; + + // aapt resource value: 0x7f060054 + public const int afc_cmd_sort_by_name = 2131099732; + + // aapt resource value: 0x7f06005f + public const int afc_ellipsize = 2131099743; + + // aapt resource value: 0x7f06002b + public const int afc_file = 2131099691; + + // aapt resource value: 0x7f06002c + public const int afc_folder = 2131099692; + + // aapt resource value: 0x7f06002d + public const int afc_hint_clear = 2131099693; + + // aapt resource value: 0x7f060055 + public const int afc_hint_double_tap_to_select_file = 2131099733; + + // aapt resource value: 0x7f06002e + public const int afc_hint_folder_name = 2131099694; + + // aapt resource value: 0x7f060056 + public const int afc_hint_new_name = 2131099734; + + // aapt resource value: 0x7f060057 + public const int afc_hint_newer = 2131099735; + + // aapt resource value: 0x7f060058 + public const int afc_hint_older = 2131099736; + + // aapt resource value: 0x7f06002f + public const int afc_hint_save_as_filename = 2131099695; + + // aapt resource value: 0x7f060030 + public const int afc_hint_search = 2131099696; + + // aapt resource value: 0x7f060018 + public const int afc_lib_name = 2131099672; + + // aapt resource value: 0x7f060019 + public const int afc_lib_version_name = 2131099673; + + // aapt resource value: 0x7f060031 + public const int afc_msg_app_doesnot_have_permission_to_create_files = 2131099697; + + // aapt resource value: 0x7f060032 + public const int afc_msg_app_doesnot_have_permission_to_delete_files = 2131099698; + + // aapt resource value: 0x7f060033 + public const int afc_msg_cancelled = 2131099699; + + // aapt resource value: 0x7f060034 + public const int afc_msg_cannot_connect_to_file_provider_service = 2131099700; + + // aapt resource value: 0x7f060035 + public const int afc_msg_cannot_create_new_folder_here = 2131099701; + + // aapt resource value: 0x7f060036 + public const int afc_msg_cannot_save_a_file_here = 2131099702; + + // aapt resource value: 0x7f060037 + public const int afc_msg_done = 2131099703; + + // aapt resource value: 0x7f060038 + public const int afc_msg_empty = 2131099704; + + // aapt resource value: 0x7f060039 + public const int afc_msg_failed_please_try_again = 2131099705; + + // aapt resource value: 0x7f060059 + public const int afc_msg_filename_is_empty = 2131099737; + + // aapt resource value: 0x7f06003a + public const int afc_msg_loading = 2131099706; + + // aapt resource value: 0x7f06003b + public const int afc_phone = 2131099707; + + // aapt resource value: 0x7f060020 + public const int afc_pkey_display_last_location = 2131099680; + + // aapt resource value: 0x7f06001f + public const int afc_pkey_display_remember_last_location = 2131099679; + + // aapt resource value: 0x7f06001e + public const int afc_pkey_display_show_time_for_old_days = 2131099678; + + // aapt resource value: 0x7f06001d + public const int afc_pkey_display_show_time_for_old_days_this_year = 2131099677; + + // aapt resource value: 0x7f06001c + public const int afc_pkey_display_sort_ascending = 2131099676; + + // aapt resource value: 0x7f06001b + public const int afc_pkey_display_sort_type = 2131099675; + + // aapt resource value: 0x7f06001a + public const int afc_pkey_display_view_type = 2131099674; + + // aapt resource value: 0x7f06003c + public const int afc_pmsg_cannot_access_dir = 2131099708; + + // aapt resource value: 0x7f06003d + public const int afc_pmsg_cannot_create_folder = 2131099709; + + // aapt resource value: 0x7f06003e + public const int afc_pmsg_cannot_delete_file = 2131099710; + + // aapt resource value: 0x7f06003f + public const int afc_pmsg_confirm_delete_file = 2131099711; + + // aapt resource value: 0x7f060040 + public const int afc_pmsg_confirm_replace_file = 2131099712; + + // aapt resource value: 0x7f060041 + public const int afc_pmsg_deleting_file = 2131099713; + + // aapt resource value: 0x7f060042 + public const int afc_pmsg_file_has_been_deleted = 2131099714; + + // aapt resource value: 0x7f060043 + public const int afc_pmsg_filename_is_directory = 2131099715; + + // aapt resource value: 0x7f060044 + public const int afc_pmsg_filename_is_invalid = 2131099716; + + // aapt resource value: 0x7f060045 + public const int afc_pmsg_max_file_count_allowed = 2131099717; + + // aapt resource value: 0x7f060046 + public const int afc_pmsg_unknown_error = 2131099718; + + // aapt resource value: 0x7f06005a + public const int afc_pmsg_xxx_items = 2131099738; + + // aapt resource value: 0x7f060047 + public const int afc_root = 2131099719; + + // aapt resource value: 0x7f060048 + public const int afc_title_advanced_selection = 2131099720; + + // aapt resource value: 0x7f06005b + public const int afc_title_alert = 2131099739; + + // aapt resource value: 0x7f060049 + public const int afc_title_confirmation = 2131099721; + + // aapt resource value: 0x7f06004a + public const int afc_title_date = 2131099722; + + // aapt resource value: 0x7f06004b + public const int afc_title_error = 2131099723; + + // aapt resource value: 0x7f06004c + public const int afc_title_info = 2131099724; + + // aapt resource value: 0x7f06004d + public const int afc_title_name = 2131099725; + + // aapt resource value: 0x7f06005c + public const int afc_title_rename = 2131099740; + + // aapt resource value: 0x7f06004e + public const int afc_title_save_as = 2131099726; + + // aapt resource value: 0x7f06004f + public const int afc_title_size = 2131099727; + + // aapt resource value: 0x7f060050 + public const int afc_title_sort_by = 2131099728; + + // aapt resource value: 0x7f06005d + public const int afc_today = 2131099741; + + // aapt resource value: 0x7f060051 + public const int afc_yesterday = 2131099729; + + // aapt resource value: 0x7f06009e + public const int algorithm = 2131099806; + + // aapt resource value: 0x7f06009f + public const int algorithm_colon = 2131099807; + + // aapt resource value: 0x7f06006a + public const int algorithm_key = 2131099754; + + // aapt resource value: 0x7f06006b + public const int app_key = 2131099755; + + // aapt resource value: 0x7f0600a0 + public const int app_name = 2131099808; + + // aapt resource value: 0x7f0600a2 + public const int app_name_nonet = 2131099810; + + // aapt resource value: 0x7f0600a4 + public const int app_timeout = 2131099812; + + // aapt resource value: 0x7f06006c + public const int app_timeout_key = 2131099756; + + // aapt resource value: 0x7f0600a5 + public const int app_timeout_summary = 2131099813; + + // aapt resource value: 0x7f0600a6 + public const int application = 2131099814; + + // aapt resource value: 0x7f0600a7 + public const int application_settings = 2131099815; + + // aapt resource value: 0x7f06014b + public const int author = 2131099979; + + // aapt resource value: 0x7f0600b6 + public const int available_through_keyboard = 2131099830; + + // aapt resource value: 0x7f0600ad + public const int brackets = 2131099821; + + // aapt resource value: 0x7f0600ae + public const int browser_intall_text = 2131099822; + + // aapt resource value: 0x7f0600af + public const int building_search_idx = 2131099823; + + // aapt resource value: 0x7f0600b0 + public const int cancel = 2131099824; + + // aapt resource value: 0x7f06015b + public const int caseSensitive = 2131099995; + + // aapt resource value: 0x7f060003 + public const int change_entry = 2131099651; + + // aapt resource value: 0x7f0600b2 + public const int clipboard_timeout = 2131099826; + + // aapt resource value: 0x7f060090 + public const int clipboard_timeout_default = 2131099792; + + // aapt resource value: 0x7f06006d + public const int clipboard_timeout_key = 2131099757; + + // aapt resource value: 0x7f0600b3 + public const int clipboard_timeout_summary = 2131099827; + + // aapt resource value: 0x7f060150 + public const int contributors = 2131099984; + + // aapt resource value: 0x7f0600b5 + public const int copy_password = 2131099829; + + // aapt resource value: 0x7f0600b4 + public const int copy_username = 2131099828; + + // aapt resource value: 0x7f0600b9 + public const int creating_db_key = 2131099833; + + // aapt resource value: 0x7f06017f + public const int credentials_dialog_title = 2131100031; + + // aapt resource value: 0x7f06014e + public const int credit_android_filechooser = 2131099982; + + // aapt resource value: 0x7f06014d + public const int credit_plugin1 = 2131099981; + + // aapt resource value: 0x7f0600ba + public const int current_group = 2131099834; + + // aapt resource value: 0x7f0600bb + public const int current_group_root = 2131099835; + + // aapt resource value: 0x7f0600bc + public const int database = 2131099836; + + // aapt resource value: 0x7f06017d + public const int database_loaded_quickunlock_enabled = 2131100029; + + // aapt resource value: 0x7f06017e + public const int database_loaded_unlocked = 2131100030; + + // aapt resource value: 0x7f060134 + public const int database_name = 2131099956; + + // aapt resource value: 0x7f060079 + public const int database_name_key = 2131099769; + + // aapt resource value: 0x7f06006e + public const int db_key = 2131099758; + + // aapt resource value: 0x7f0600bd + public const int decrypting_db = 2131099837; + + // aapt resource value: 0x7f0600be + public const int decrypting_entry = 2131099838; + + // aapt resource value: 0x7f0600bf + public const int default_checkbox = 2131099839; + + // aapt resource value: 0x7f060061 + public const int default_file_path = 2131099745; + + // aapt resource value: 0x7f060135 + public const int default_username = 2131099957; + + // aapt resource value: 0x7f060078 + public const int default_username_key = 2131099768; + + // aapt resource value: 0x7f06017c + public const int delete_extra_string = 2131100028; + + // aapt resource value: 0x7f0600c0 + public const int digits = 2131099840; + + // aapt resource value: 0x7f0600c1 + public const int disclaimer_formal = 2131099841; + + // aapt resource value: 0x7f0600a9 + public const int display_prefs = 2131099817; + + // aapt resource value: 0x7f06007e + public const int display_prefs_key = 2131099774; + + // aapt resource value: 0x7f0601c2 + public const int donate_question = 2131100098; + + // aapt resource value: 0x7f060062 + public const int donate_url = 2131099746; + + // aapt resource value: 0x7f06009d + public const int edit_group_title = 2131099805; + + // aapt resource value: 0x7f0600c2 + public const int ellipsis = 2131099842; + + // aapt resource value: 0x7f060162 + public const int enable_quickunlock = 2131100002; + + // aapt resource value: 0x7f0600c3 + public const int enter_filename = 2131099843; + + // aapt resource value: 0x7f060161 + public const int enter_filename_details_create_import = 2131100001; + + // aapt resource value: 0x7f060160 + public const int enter_filename_details_url = 2131100000; + + // aapt resource value: 0x7f0600c4 + public const int entry_accessed = 2131099844; + + // aapt resource value: 0x7f0600c5 + public const int entry_and_or = 2131099845; + + // aapt resource value: 0x7f0600d5 + public const int entry_binaries = 2131099861; + + // aapt resource value: 0x7f0600c6 + public const int entry_cancel = 2131099846; + + // aapt resource value: 0x7f0600c7 + public const int entry_comment = 2131099847; + + // aapt resource value: 0x7f0600ca + public const int entry_confpassword = 2131099850; + + // aapt resource value: 0x7f0600cb + public const int entry_created = 2131099851; + + // aapt resource value: 0x7f0600cc + public const int entry_expires = 2131099852; + + // aapt resource value: 0x7f0600d4 + public const int entry_extra_strings = 2131099860; + + // aapt resource value: 0x7f0600cd + public const int entry_keyfile = 2131099853; + + // aapt resource value: 0x7f0600ce + public const int entry_modified = 2131099854; + + // aapt resource value: 0x7f0600c9 + public const int entry_override_url = 2131099849; + + // aapt resource value: 0x7f0600cf + public const int entry_password = 2131099855; + + // aapt resource value: 0x7f0600d0 + public const int entry_save = 2131099856; + + // aapt resource value: 0x7f0600c8 + public const int entry_tags = 2131099848; + + // aapt resource value: 0x7f0600d1 + public const int entry_title = 2131099857; + + // aapt resource value: 0x7f0600d2 + public const int entry_url = 2131099858; + + // aapt resource value: 0x7f0600d3 + public const int entry_user_name = 2131099859; + + // aapt resource value: 0x7f0600d6 + public const int error_arc4 = 2131099862; + + // aapt resource value: 0x7f0600d7 + public const int error_can_not_handle_uri = 2131099863; + + // aapt resource value: 0x7f0600d8 + public const int error_could_not_create_group = 2131099864; + + // aapt resource value: 0x7f0600d9 + public const int error_could_not_create_parent = 2131099865; + + // aapt resource value: 0x7f0600da + public const int error_database_exists = 2131099866; + + // aapt resource value: 0x7f0600db + public const int error_database_settings = 2131099867; + + // aapt resource value: 0x7f0600dc + public const int error_failed_to_launch_link = 2131099868; + + // aapt resource value: 0x7f0600de + public const int error_file_not_create = 2131099870; + + // aapt resource value: 0x7f0600dd + public const int error_filename_required = 2131099869; + + // aapt resource value: 0x7f0600df + public const int error_invalid_db = 2131099871; + + // aapt resource value: 0x7f060175 + public const int error_invalid_expiry_date = 2131100021; + + // aapt resource value: 0x7f0600e0 + public const int error_invalid_path = 2131099872; + + // aapt resource value: 0x7f0600e1 + public const int error_no_name = 2131099873; + + // aapt resource value: 0x7f0600e2 + public const int error_nopass = 2131099874; + + // aapt resource value: 0x7f0600e3 + public const int error_out_of_memory = 2131099875; + + // aapt resource value: 0x7f0600e4 + public const int error_pass_gen_type = 2131099876; + + // aapt resource value: 0x7f0600e5 + public const int error_pass_match = 2131099877; + + // aapt resource value: 0x7f0600e6 + public const int error_rounds_not_number = 2131099878; + + // aapt resource value: 0x7f0600e7 + public const int error_rounds_too_large = 2131099879; + + // aapt resource value: 0x7f060176 + public const int error_string_key = 2131100022; + + // aapt resource value: 0x7f0600e8 + public const int error_title_required = 2131099880; + + // aapt resource value: 0x7f0600e9 + public const int error_wrong_length = 2131099881; + + // aapt resource value: 0x7f060159 + public const int excludeExpiredEntries = 2131099993; + + // aapt resource value: 0x7f060177 + public const int field_name = 2131100023; + + // aapt resource value: 0x7f060178 + public const int field_value = 2131100024; + + // aapt resource value: 0x7f0600eb + public const int file_browser = 2131099883; + + // aapt resource value: 0x7f0601ce + public const int filestorage_setup_title = 2131100110; + + // aapt resource value: 0x7f0601c7 + public const int filestoragename_androidget = 2131100103; + + // aapt resource value: 0x7f0601c8 + public const int filestoragename_androidsend = 2131100104; + + // aapt resource value: 0x7f0601cc + public const int filestoragename_dropbox = 2131100108; + + // aapt resource value: 0x7f0601c6 + public const int filestoragename_file = 2131100102; + + // aapt resource value: 0x7f0601c9 + public const int filestoragename_ftp = 2131100105; + + // aapt resource value: 0x7f0601cd + public const int filestoragename_gdrive = 2131100109; + + // aapt resource value: 0x7f0601ca + public const int filestoragename_http = 2131100106; + + // aapt resource value: 0x7f0601cb + public const int filestoragename_https = 2131100107; + + // aapt resource value: 0x7f060065 + public const int further_author_names = 2131099749; + + // aapt resource value: 0x7f06014c + public const int further_authors = 2131099980; + + // aapt resource value: 0x7f0600ec + public const int generate_password = 2131099884; + + // aapt resource value: 0x7f0600ed + public const int group = 2131099885; + + // aapt resource value: 0x7f0600ee + public const int hint_comment = 2131099886; + + // aapt resource value: 0x7f0600ef + public const int hint_conf_pass = 2131099887; + + // aapt resource value: 0x7f0600f0 + public const int hint_generated_password = 2131099888; + + // aapt resource value: 0x7f0600f1 + public const int hint_group_name = 2131099889; + + // aapt resource value: 0x7f0600f2 + public const int hint_keyfile = 2131099890; + + // aapt resource value: 0x7f0600f3 + public const int hint_length = 2131099891; + + // aapt resource value: 0x7f0600f5 + public const int hint_login_pass = 2131099893; + + // aapt resource value: 0x7f0600f8 + public const int hint_override_url = 2131099896; + + // aapt resource value: 0x7f0600f4 + public const int hint_pass = 2131099892; + + // aapt resource value: 0x7f0600f9 + public const int hint_tags = 2131099897; + + // aapt resource value: 0x7f0600f6 + public const int hint_title = 2131099894; + + // aapt resource value: 0x7f0600f7 + public const int hint_url = 2131099895; + + // aapt resource value: 0x7f0600fa + public const int hint_username = 2131099898; + + // aapt resource value: 0x7f060063 + public const int homepage = 2131099747; + + // aapt resource value: 0x7f060064 + public const int homepage_short = 2131099748; + + // aapt resource value: 0x7f060001 + public const int ime_name = 2131099649; + + // aapt resource value: 0x7f060142 + public const int insert_element_here = 2131099970; + + // aapt resource value: 0x7f0600fb + public const int install_from_market = 2131099899; + + // aapt resource value: 0x7f0600fc + public const int install_from_website = 2131099900; + + // aapt resource value: 0x7f0600fe + public const int invalid_algorithm = 2131099902; + + // aapt resource value: 0x7f0600ff + public const int invalid_db_sig = 2131099903; + + // aapt resource value: 0x7f060066 + public const int issues = 2131099750; + + // aapt resource value: 0x7f060100 + public const int keyfile_does_not_exist = 2131099904; + + // aapt resource value: 0x7f060101 + public const int keyfile_is_empty = 2131099905; + + // aapt resource value: 0x7f060070 + public const int keyfile_key = 2131099760; + + // aapt resource value: 0x7f060158 + public const int kp2a_findUrl = 2131099992; + + // aapt resource value: 0x7f060006 + public const int label_go_key = 2131099654; + + // aapt resource value: 0x7f060007 + public const int label_next_key = 2131099655; + + // aapt resource value: 0x7f060008 + public const int label_send_key = 2131099656; + + // aapt resource value: 0x7f060009 + public const int label_subtype_generic = 2131099657; + + // aapt resource value: 0x7f060102 + public const int length = 2131099906; + + // aapt resource value: 0x7f06000a + public const int library_name = 2131099658; + + // aapt resource value: 0x7f060091 + public const int list_size_default = 2131099793; + + // aapt resource value: 0x7f060073 + public const int list_size_key = 2131099763; + + // aapt resource value: 0x7f060104 + public const int list_size_summary = 2131099908; + + // aapt resource value: 0x7f060103 + public const int list_size_title = 2131099907; + + // aapt resource value: 0x7f060105 + public const int loading_database = 2131099909; + + // aapt resource value: 0x7f060106 + public const int lowercase = 2131099910; + + // aapt resource value: 0x7f060071 + public const int maskpass_key = 2131099761; + + // aapt resource value: 0x7f060109 + public const int maskpass_summary = 2131099913; + + // aapt resource value: 0x7f060108 + public const int maskpass_title = 2131099912; + + // aapt resource value: 0x7f06010a + public const int menu_about = 2131099914; + + // aapt resource value: 0x7f06010f + public const int menu_app_settings = 2131099919; + + // aapt resource value: 0x7f06011d + public const int menu_change_db = 2131099933; + + // aapt resource value: 0x7f06010b + public const int menu_change_key = 2131099915; + + // aapt resource value: 0x7f06010c + public const int menu_copy_pass = 2131099916; + + // aapt resource value: 0x7f06010d + public const int menu_copy_user = 2131099917; + + // aapt resource value: 0x7f06010e + public const int menu_create = 2131099918; + + // aapt resource value: 0x7f060110 + public const int menu_db_settings = 2131099920; + + // aapt resource value: 0x7f060111 + public const int menu_delete = 2131099921; + + // aapt resource value: 0x7f060113 + public const int menu_donate = 2131099923; + + // aapt resource value: 0x7f060114 + public const int menu_edit = 2131099924; // aapt resource value: 0x7f060115 - public const int yes = 2131099925; + public const int menu_hide_password = 2131099925; + + // aapt resource value: 0x7f060116 + public const int menu_homepage = 2131099926; + + // aapt resource value: 0x7f060117 + public const int menu_lock = 2131099927; + + // aapt resource value: 0x7f060112 + public const int menu_move = 2131099922; + + // aapt resource value: 0x7f060118 + public const int menu_open = 2131099928; + + // aapt resource value: 0x7f060119 + public const int menu_rename = 2131099929; + + // aapt resource value: 0x7f06011a + public const int menu_search = 2131099930; + + // aapt resource value: 0x7f06011b + public const int menu_search_advanced = 2131099931; + + // aapt resource value: 0x7f06011c + public const int menu_url = 2131099932; + + // aapt resource value: 0x7f06011e + public const int minus = 2131099934; + + // aapt resource value: 0x7f06011f + public const int never = 2131099935; + + // aapt resource value: 0x7f060121 + public const int no = 2131099937; + + // aapt resource value: 0x7f060122 + public const int no_keys = 2131099938; + + // aapt resource value: 0x7f060123 + public const int no_results = 2131099939; + + // aapt resource value: 0x7f0601c4 + public const int no_thanks = 2131100100; + + // aapt resource value: 0x7f060124 + public const int no_url_handler = 2131099940; + + // aapt resource value: 0x7f0600b7 + public const int not_possible_im_picker = 2131099831; + + // aapt resource value: 0x7f060067 + public const int oi_filemanager_market = 2131099751; + + // aapt resource value: 0x7f060068 + public const int oi_filemanager_web = 2131099752; + + // aapt resource value: 0x7f0601c3 + public const int ok_donate = 2131100099; + + // aapt resource value: 0x7f060072 + public const int omitbackup_key = 2131099762; + + // aapt resource value: 0x7f060127 + public const int omitbackup_summary = 2131099943; + + // aapt resource value: 0x7f060126 + public const int omitbackup_title = 2131099942; + + // aapt resource value: 0x7f060004 + public const int open_entry = 2131099652; + + // aapt resource value: 0x7f060005 + public const int open_entry_for_app = 2131099653; + + // aapt resource value: 0x7f060125 + public const int open_recent = 2131099941; + + // aapt resource value: 0x7f060128 + public const int pass_filename = 2131099944; + + // aapt resource value: 0x7f0600aa + public const int password_access_prefs = 2131099818; + + // aapt resource value: 0x7f06007c + public const int password_access_prefs_key = 2131099772; + + // aapt resource value: 0x7f060129 + public const int password_title = 2131099945; + + // aapt resource value: 0x7f060069 + public const int permission_desc = 2131099753; + + // aapt resource value: 0x7f0600b8 + public const int please_activate_keyboard = 2131099832; + + // aapt resource value: 0x7f06014f + public const int please_note = 2131099983; + + // aapt resource value: 0x7f06012a + public const int progress_create = 2131099946; + + // aapt resource value: 0x7f06012b + public const int progress_title = 2131099947; + + // aapt resource value: 0x7f060179 + public const int protection = 2131100025; + + // aapt resource value: 0x7f0601a0 + public const int rate_app = 2131100064; + + // aapt resource value: 0x7f060151 + public const int regular_expression = 2131099985; + + // aapt resource value: 0x7f06012c + public const int remember_keyfile_summary = 2131099948; + + // aapt resource value: 0x7f06012d + public const int remember_keyfile_title = 2131099949; + + // aapt resource value: 0x7f06012e + public const int remove_from_filelist = 2131099950; + + // aapt resource value: 0x7f06012f + public const int rijndael = 2131099951; + + // aapt resource value: 0x7f060130 + public const int root = 2131099952; + + // aapt resource value: 0x7f060131 + public const int rounds = 2131099953; + + // aapt resource value: 0x7f060132 + public const int rounds_explaination = 2131099954; + + // aapt resource value: 0x7f060133 + public const int rounds_hint = 2131099955; + + // aapt resource value: 0x7f06006f + public const int rounds_key = 2131099759; + + // aapt resource value: 0x7f060136 + public const int saving_database = 2131099958; + + // aapt resource value: 0x7f06013d + public const int search_hint = 2131099965; + + // aapt resource value: 0x7f06013f + public const int search_in = 2131099967; + + // aapt resource value: 0x7f060138 + public const int search_label = 2131099960; + + // aapt resource value: 0x7f06015a + public const int search_options = 2131099994; + + // aapt resource value: 0x7f06013e + public const int search_results = 2131099966; + + // aapt resource value: 0x7f0600a8 + public const int security_prefs = 2131099816; + + // aapt resource value: 0x7f06007d + public const int security_prefs_key = 2131099773; + + // aapt resource value: 0x7f060141 + public const int select_group_then_add = 2131099969; + + // aapt resource value: 0x7f060140 + public const int select_other_entry = 2131099968; + + // aapt resource value: 0x7f0601c5 + public const int select_storage_type = 2131100101; + + // aapt resource value: 0x7f0600a1 + public const int short_app_name = 2131099809; + + // aapt resource value: 0x7f0600a3 + public const int short_app_name_nonet = 2131099811; + + // aapt resource value: 0x7f060139 + public const int show_password = 2131099961; + + // aapt resource value: 0x7f06013b + public const int sort_db = 2131099963; + + // aapt resource value: 0x7f060074 + public const int sort_key = 2131099764; + + // aapt resource value: 0x7f06013a + public const int sort_name = 2131099962; + + // aapt resource value: 0x7f060137 + public const int space = 2131099959; + + // aapt resource value: 0x7f06013c + public const int special = 2131099964; + + // aapt resource value: 0x7f06015d + public const int start_create = 2131099997; + + // aapt resource value: 0x7f06015f + public const int start_create_import = 2131099999; + + // aapt resource value: 0x7f06015c + public const int start_open_file = 2131099996; + + // aapt resource value: 0x7f06015e + public const int start_open_url = 2131099998; + + // aapt resource value: 0x7f06019f + public const int suggest_improvements = 2131100063; + + // aapt resource value: 0x7f0601c0 + public const int synchronize_database_menu = 2131100096; + + // aapt resource value: 0x7f0601a1 + public const int translate_app = 2131100065; + + // aapt resource value: 0x7f060143 + public const int twofish = 2131099971; + + // aapt resource value: 0x7f060144 + public const int underline = 2131099972; + + // aapt resource value: 0x7f060145 + public const int unsupported_db_version = 2131099973; + + // aapt resource value: 0x7f060146 + public const int uppercase = 2131099974; + + // aapt resource value: 0x7f06014a + public const int version_history = 2131099978; + + // aapt resource value: 0x7f060149 + public const int version_label = 2131099977; + + // aapt resource value: 0x7f060147 + public const int warning_read_only = 2131099975; + + // aapt resource value: 0x7f060148 + public const int warning_unmounted = 2131099976; + + // aapt resource value: 0x7f060002 + public const int word_separators = 2131099650; + + // aapt resource value: 0x7f060120 + public const int yes = 2131099936; static String() { @@ -4919,13 +5035,25 @@ namespace keepass2android { // aapt resource value: 0x7f050000 - public const int preferences = 2131034112; + public const int method = 2131034112; // aapt resource value: 0x7f050001 - public const int searchable = 2131034113; + public const int preferences = 2131034113; // aapt resource value: 0x7f050002 - public const int searchable_offline = 2131034114; + public const int qwerty = 2131034114; + + // aapt resource value: 0x7f050003 + public const int searchable = 2131034115; + + // aapt resource value: 0x7f050004 + public const int searchable_offline = 2131034116; + + // aapt resource value: 0x7f050005 + public const int symbols = 2131034117; + + // aapt resource value: 0x7f050006 + public const int symbols_shift = 2131034118; static Xml() { diff --git a/src/keepass2android/Resources/drawable-hdpi/ic_storage_androidget.png b/src/keepass2android/Resources/drawable-hdpi/ic_storage_androidget.png new file mode 100644 index 0000000000000000000000000000000000000000..f6119664ca7ed8036d771085a4ffbd14388a0945 GIT binary patch literal 1681 zcmV;C25$L@P)#00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-3kK&I}{(C{WSmp1|CU7 zK~z}7?U-w99Mu)a|L4wQch=rb9IqWaan_GGl;GHLif}3fi3pTZ+5l2p^Qa;rRHCAa zN+qJ=As($L&jb<37lab2Amu{}LRFiTLgFM1v`UJJOackc!-*{uJF(Z^^?G)8X6`+F zz;WVih`e^z65#V?q%-Hv{pp;0&)oY5axm9Rt@V7{alKRpwp6N?_1FRt>1%ASYAz57Ju3)M6@rbc_)y~ zWuCNK-uv`EtzymimoS*Q^_eXiwfCnfd36y|>yr zU!VEKslP$8H~z&>CKi@Aqan6>K#;zQh_+sKNM`>?S3)}78^6vwyh3%f1^ac!>rT9tx>ndc<{v{E;JLwk0%#~7Q-rRlo z(NREMvrsp86(UyUxS(cORj8Z03c6+i0BrX({`19SLMrzyW{zEsKDqW__g_Qt;lrbj zilXb$7<&MV=dB(WWJBzJG{zo4MbUMmzW&r9eAfMD0f3h#Rc>Z(wB6JD|FQor_{urg zw=@e2=iGzNz7{0X9plJkHDb{fIP~Ra_%eO&J0ghNmTZA#Mi&#&rxVTOUB}OC8v_Uc zzD(ml*T!)H0ze|&fdgF|#{dF=uN)jd^Dh9nb28;_?&{x-d|Fq07XUO*2$Gpi#eUVm zaC=@MJ*W zayNN0MS@Jt^N0HYY|w;`pEhhlzDyY+xDGd5xo+6h zBe&|VpL~Ab@wKCX0MOarf|Br}KuLHp&hL-;GQ|={dfo|~1q6V;q0jLDj+YCXs@J?A zG!dvfJ=B&puqV-~DRwaxrZ|J%D4JJy$^_(pv)I+LtyD;^_XPc@YP8SB}j=n67G-6@--L4>gYO*MFTs7y{ZfRuk zs4pCxhihuqq)ol>FFKLFMas+s&Z?>cznge^-m2s zUCNgZ%__XY1oNMW^mlXs(6qpF%)BWYuDcpQ2EaZ5wNtgPhy(z!Llfp3Geh&60GI$; zNl@?T9p~#n>IJavyo*^!*qX~kf|ykv0W}l`D;Pir5hVd^A9o8PqCs6)@Bg5zIj>o~ zvb-6(2);)|iHXWARSdQJNYA^mF9-KRstlMVdXt}I#ad z4*Dv+sP)9FWk-Aeo-K(qZC8dC`Vc@8z+M2aT`G%X*5oD1o&fO72yhvI;{dFSUZ|wE zleEx188@*Rz}?^Q$qaxyiKu7#-#rcaeSsX*gsBT*T%-jRD_skA1Ax#1r!1pbW&iq2 zXu{M14CW1zh#X%!hpUQj;;{z=12rW-vxP8s0Dvw6+iOa1wJ$t=RTlr4ed&BoL{3ig z<}8UYUn7;f>ywikg53jqgk?mrr1HVxSp~KKHS~g;&&Ii4YR8~`w5j#vYlV*2kBV8# z)RNfm98H+ZiRk0}Yd6ew89%wzmrgw6CEKOU{E?ZB3t|i@Gmm8ay?-euFY>YGmA00000NkvXXu0mjfOgSOP literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable-hdpi/ic_storage_androidsend.png b/src/keepass2android/Resources/drawable-hdpi/ic_storage_androidsend.png new file mode 100644 index 0000000000000000000000000000000000000000..f6119664ca7ed8036d771085a4ffbd14388a0945 GIT binary patch literal 1681 zcmV;C25$L@P)#00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-3kK&I}{(C{WSmp1|CU7 zK~z}7?U-w99Mu)a|L4wQch=rb9IqWaan_GGl;GHLif}3fi3pTZ+5l2p^Qa;rRHCAa zN+qJ=As($L&jb<37lab2Amu{}LRFiTLgFM1v`UJJOackc!-*{uJF(Z^^?G)8X6`+F zz;WVih`e^z65#V?q%-Hv{pp;0&)oY5axm9Rt@V7{alKRpwp6N?_1FRt>1%ASYAz57Ju3)M6@rbc_)y~ zWuCNK-uv`EtzymimoS*Q^_eXiwfCnfd36y|>yr zU!VEKslP$8H~z&>CKi@Aqan6>K#;zQh_+sKNM`>?S3)}78^6vwyh3%f1^ac!>rT9tx>ndc<{v{E;JLwk0%#~7Q-rRlo z(NREMvrsp86(UyUxS(cORj8Z03c6+i0BrX({`19SLMrzyW{zEsKDqW__g_Qt;lrbj zilXb$7<&MV=dB(WWJBzJG{zo4MbUMmzW&r9eAfMD0f3h#Rc>Z(wB6JD|FQor_{urg zw=@e2=iGzNz7{0X9plJkHDb{fIP~Ra_%eO&J0ghNmTZA#Mi&#&rxVTOUB}OC8v_Uc zzD(ml*T!)H0ze|&fdgF|#{dF=uN)jd^Dh9nb28;_?&{x-d|Fq07XUO*2$Gpi#eUVm zaC=@MJ*W zayNN0MS@Jt^N0HYY|w;`pEhhlzDyY+xDGd5xo+6h zBe&|VpL~Ab@wKCX0MOarf|Br}KuLHp&hL-;GQ|={dfo|~1q6V;q0jLDj+YCXs@J?A zG!dvfJ=B&puqV-~DRwaxrZ|J%D4JJy$^_(pv)I+LtyD;^_XPc@YP8SB}j=n67G-6@--L4>gYO*MFTs7y{ZfRuk zs4pCxhihuqq)ol>FFKLFMas+s&Z?>cznge^-m2s zUCNgZ%__XY1oNMW^mlXs(6qpF%)BWYuDcpQ2EaZ5wNtgPhy(z!Llfp3Geh&60GI$; zNl@?T9p~#n>IJavyo*^!*qX~kf|ykv0W}l`D;Pir5hVd^A9o8PqCs6)@Bg5zIj>o~ zvb-6(2);)|iHXWARSdQJNYA^mF9-KRstlMVdXt}I#ad z4*Dv+sP)9FWk-Aeo-K(qZC8dC`Vc@8z+M2aT`G%X*5oD1o&fO72yhvI;{dFSUZ|wE zleEx188@*Rz}?^Q$qaxyiKu7#-#rcaeSsX*gsBT*T%-jRD_skA1Ax#1r!1pbW&iq2 zXu{M14CW1zh#X%!hpUQj;;{z=12rW-vxP8s0Dvw6+iOa1wJ$t=RTlr4ed&BoL{3ig z<}8UYUn7;f>ywikg53jqgk?mrr1HVxSp~KKHS~g;&&Ii4YR8~`w5j#vYlV*2kBV8# z)RNfm98H+ZiRk0}Yd6ew89%wzmrgw6CEKOU{E?ZB3t|i@Gmm8ay?-euFY>YGmA00000NkvXXu0mjfOgSOP literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable-hdpi/ic_storage_file.png b/src/keepass2android/Resources/drawable-hdpi/ic_storage_file.png new file mode 100644 index 0000000000000000000000000000000000000000..e240f8070043939e5f6d2ea36c5db6444f030b22 GIT binary patch literal 1425 zcmaJ>drTX396!sP3lSJHH<*K*$HUFg-d!KC-YB%CEvr)O$}`L<*Xuz~xZdr0tfd(X z1Kof@bj~n>hCxD2B;z@@Rf*z^gJEz+#xMbwq1%YtG_YtCScYC1W&R;va`$`W^Z9&V zpIn_eDJzJSkWig_2#k$}d=SV_=G<0Yhp z#BCJ^N68cb2#TX}3itw3CPpx{1ovYkZkiR?0FaXAW^tmF+~5!dQZ^No zuP`AdHl4Indp#VP?a9g^Jf(!v2BoEfDQ-*QEa3wIRR4QRa3QMJ80U>r)IC$JGb~s}L3OdqBa1_f^ zj05y5;#Q`dS3yFik4vE0HCcyqwM|09U^mXfs08ts6abn`{|}|AGB4NCx(g_Ftn8TnYa1 zZ`X_~9M-H)It0ISg0Tl5cBuhC6lBzCa@D7Am5(d zi($UOrHqA_c7Im?^VykMYxKlrJ^Q_Wr}q4W=k$W;W=)1q!;N@~&Se4mJdIxo$? zcT`uH*Hn0e0P|kApBkt~b~g9De_eGUx&Pky)+*^TFcdyrul*S3i5(5!1@#(Q&e4Zs zfV8>Ub0PDYp3&cfi(Z&%;u|hrX{!f1{|FE5>aM0DbC-usG$wZXMAIFWVk$SdsINBh ztq65P&4Y*snp=R->t;(;+f4qZn-g2F<=3SSU)}aW*u+7iCle^wxoa9e+A{O>J@Z2M l0P+0Ay6Bb36j_1g4UvEuJ_5(~OojV@l16=&u3KAF{SV7c2iX7s literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable/ic_keepass2android.png b/src/keepass2android/Resources/drawable/ic_keepass2android.png new file mode 100644 index 0000000000000000000000000000000000000000..f0109f9c0682789cf9bc16c1c965acc07c804d46 GIT binary patch literal 7430 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 Eg5oX1F#rGn literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable/ic_keepass2android_nonet.png b/src/keepass2android/Resources/drawable/ic_keepass2android_nonet.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd22310b40d0b60f1baded3c15335b91d5ce7db GIT binary patch literal 7323 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 Bhb#a9 literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/drawable/ic_storage_androidget.png b/src/keepass2android/Resources/drawable/ic_storage_androidget.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0b985ca7676ab0ca8369ac18a5d03e286c91d6 GIT binary patch literal 1185 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 literal 0 HcmV?d00001 diff --git a/src/keepass2android/Resources/layout/file_selection_no_recent.xml b/src/keepass2android/Resources/layout/file_selection_no_recent.xml index 4c7c3f25..403b9cdf 100644 --- a/src/keepass2android/Resources/layout/file_selection_no_recent.xml +++ b/src/keepass2android/Resources/layout/file_selection_no_recent.xml @@ -8,13 +8,16 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> - - + + + diff --git a/src/keepass2android/Resources/layout/filestorage_selection.xml b/src/keepass2android/Resources/layout/filestorage_selection.xml index 1fdf3438..97fb5ea2 100644 --- a/src/keepass2android/Resources/layout/filestorage_selection.xml +++ b/src/keepass2android/Resources/layout/filestorage_selection.xml @@ -10,7 +10,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" - android:text="Please select the cloud storage type you want to use:" + android:text="@string/select_storage_type" style="@style/PaddedElement" android:id="@+id/textView" android:layout_gravity="left|center_vertical"/> diff --git a/src/keepass2android/Resources/values/config.xml b/src/keepass2android/Resources/values/config.xml index 55c7a228..59e85b58 100644 --- a/src/keepass2android/Resources/values/config.xml +++ b/src/keepass2android/Resources/values/config.xml @@ -27,6 +27,7 @@ http://keepass2android.codeplex.com market://details?id=org.openintents.filemanager https://openintents.googlecode.com/files/FileManager-2.0.2.apk + KP2A Internal File Browsing Permission algorithm diff --git a/src/keepass2android/Resources/values/strings.xml b/src/keepass2android/Resources/values/strings.xml index 769655f3..736298b0 100644 --- a/src/keepass2android/Resources/values/strings.xml +++ b/src/keepass2android/Resources/values/strings.xml @@ -320,16 +320,29 @@ Tell me more! No, I don\'t like it that much + Select the storage type: + Local file + Get from third-party app + Send to third-party app FTP HTTP (WebDav) HTTPS (WebDav) Dropbox Google Drive + + File access initialization + + + Change log + + + Version 0.9\n + * Support for Dropbox (Keepass2Android regular edition only)\n + * Integrated custom filechooser (based on android-filechooser by HBA) + + - - Change log - Version 0.8.6\n * Support for Twofish cipher\n diff --git a/src/keepass2android/Utils/Util.cs b/src/keepass2android/Utils/Util.cs index 4f4a90a0..91b78816 100644 --- a/src/keepass2android/Utils/Util.cs +++ b/src/keepass2android/Utils/Util.cs @@ -20,6 +20,8 @@ using System.Collections; using System.Collections.Generic; using Android.App; using Android.Content; +using Android.Database; +using Android.Provider; using Android.Widget; using Android.Content.PM; using Uri = Android.Net.Uri; @@ -126,35 +128,36 @@ namespace keepass2android public static void ShowBrowseDialog(string filename, Activity act, int requestCodeBrowse, bool forSaving) { - if ((!forSaving) && (IsIntentAvailable(act, Intent.ActionGetContent, "file/*"))) { + if ((!forSaving) && (IsIntentAvailable(act, Intent.ActionGetContent, "file/*"))) + { Intent i = new Intent(Intent.ActionGetContent); i.SetType("file/*"); act.StartActivityForResult(i, requestCodeBrowse); - return; - } - if (IsIntentAvailable(act, Intents.FileBrowse, null)) - { - Intent i = new Intent(Intents.FileBrowse); - if (filename != null) - i.SetData(Uri.Parse("file://" + filename)); - try - { - act.StartActivityForResult(i, requestCodeBrowse); - } - catch (ActivityNotFoundException) - { - BrowserDialog diag = new BrowserDialog(act); - diag.Show(); - } } else { - BrowserDialog diag = new BrowserDialog(act); - diag.Show(); + string defaultPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; + + + ShowInternalLocalFileChooser(act, requestCodeBrowse, forSaving, defaultPath); } } + private static void ShowInternalLocalFileChooser(Activity act, int requestCodeBrowse, bool forSaving, string defaultPath) + { + const string fileProviderAuthority = "keepass2android.keepass2android.android-filechooser.localfile"; + + + Intent i = Keepass2android.Kp2afilechooser.Kp2aFileChooserBridge.GetLaunchFileChooserIntent(act, + fileProviderAuthority, + defaultPath); + if (forSaving) + i.PutExtra("group.pals.android.lib.ui.filechooser.FileChooserActivity.save_dialog", true); + + act.StartActivityForResult(i, requestCodeBrowse); + } + public static string IntentToFilename(Intent data, Context ctx) { #if !EXCLUDE_FILECHOOSER @@ -165,7 +168,25 @@ namespace keepass2android Uri uri = (Uri) uris[0]; return Group.Pals.Android.Lib.UI.Filechooser.Providers.BaseFileProviderUtils.GetRealUri(ctx, uri).ToString(); } + #endif + try + { + Uri uri = data.Data; + if ((uri != null) && (uri.Scheme == "content")) + { + String[] col = new String[] {MediaStore.MediaColumns.Data}; + + ICursor c1 = ctx.ContentResolver.Query(uri, col, null, null, null); + c1.MoveToFirst(); + + return c1.GetString(0); + } + } + catch (Exception e) + { + Kp2aLog.Log(e.ToString()); + } String filename = data.Data.Path; if (String.IsNullOrEmpty(filename)) diff --git a/src/keepass2android/app/App.cs b/src/keepass2android/app/App.cs index 3d226baa..12738212 100644 --- a/src/keepass2android/app/App.cs +++ b/src/keepass2android/app/App.cs @@ -377,7 +377,7 @@ namespace keepass2android } //TODO: catch! - throw new Exception("Unknown protocol " + iocInfo); + throw new Exception("Unknown protocol " + iocInfo.Path); } public IEnumerable FileStorages diff --git a/src/keepass2android/fileselect/BrowserDialog.cs b/src/keepass2android/fileselect/BrowserDialog.cs deleted file mode 100644 index 2d48a6f1..00000000 --- a/src/keepass2android/fileselect/BrowserDialog.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* -This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file is based on Keepassdroid, Copyright Brian Pellin. - - Keepass2Android is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - Keepass2Android is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Keepass2Android. If not, see . - */ - -using Android.App; -using Android.Content; -using Android.OS; -using Android.Views; -using Android.Widget; -using Android.Content.PM; - -namespace keepass2android -{ - /// - /// Dialog to offer to install OpenIntent file manager if there's no other browser installed - /// - public class BrowserDialog : Dialog { - - public BrowserDialog(Context context) : base(context) - { - } - - protected override void OnCreate(Bundle savedInstanceState) { - base.OnCreate(savedInstanceState); - SetContentView(Resource.Layout.browser_install); - SetTitle(Resource.String.file_browser); - - Button cancel = (Button) FindViewById(Resource.Id.cancel); - cancel.Click += (sender, e) => Cancel(); - - Button market = (Button) FindViewById(Resource.Id.install_market); - market.Click += (sender, e) => { - Util.GotoUrl(Context, Resource.String.oi_filemanager_market); - Cancel(); - } - ; - if (!IsMarketInstalled()) { - market.Visibility = ViewStates.Gone; - } - - Button web = (Button) FindViewById(Resource.Id.install_web); - web.Click += (sender, e) => { - Util.GotoUrl(Context, Resource.String.oi_filemanager_web); - Cancel(); - } - ; - } - - private bool IsMarketInstalled() { - PackageManager pm = Context.PackageManager; - - try { - pm.GetPackageInfo("com.android.vending", 0); - } catch (PackageManager.NameNotFoundException) { - return false; - } - - return true; - - } - - } - -} - diff --git a/src/keepass2android/fileselect/FileChooserFileProvider.cs b/src/keepass2android/fileselect/FileChooserFileProvider.cs index 579b3096..081c8b68 100644 --- a/src/keepass2android/fileselect/FileChooserFileProvider.cs +++ b/src/keepass2android/fileselect/FileChooserFileProvider.cs @@ -67,6 +67,7 @@ namespace keepass2android { try { + Kp2aLog.Log("Provider.GetFileEntry " + filename); return ConvertFileDescription(App.Kp2a.GetFileStorage(filename).GetFileDescription(ConvertPathToIoc(filename))); } catch (Exception e) @@ -80,6 +81,7 @@ namespace keepass2android protected override void ListFiles(int taskId, string dirName, bool showHiddenFiles, int filterMode, int limit, string positiveRegex, string negativeRegex, IList fileList, bool[] hasMoreFiles) { + Kp2aLog.Log("Provider.ListFiles " + dirName); try { var dirContents = App.Kp2a.GetFileStorage(dirName).ListContents(ConvertPathToIoc(dirName)); diff --git a/src/keepass2android/fileselect/FileSelectActivity.cs b/src/keepass2android/fileselect/FileSelectActivity.cs index c62eeaed..3a7cdd0e 100644 --- a/src/keepass2android/fileselect/FileSelectActivity.cs +++ b/src/keepass2android/fileselect/FileSelectActivity.cs @@ -63,7 +63,6 @@ namespace keepass2android view.FileSelectButtons _fileSelectButtons; internal AppTask AppTask; - private IOConnectionInfo _iocToLaunch; public const string NoForwardToPasswordActivity = "NoForwardToPasswordActivity"; @@ -234,26 +233,18 @@ namespace keepass2android EventHandler openFileButtonClick = (sender, e) => { - string defaultFilename = Android.OS.Environment.ExternalStorageDirectory + GetString(Resource.String.default_file_path); - const string detailsText = ""; - ShowFilenameDialog(true, false, true, defaultFilename, detailsText, Intents.RequestCodeFileBrowseForOpen); - + Intent intent = new Intent(this, typeof(FileStorageSelectionActivity)); + intent.PutExtra(FileStorageSelectionActivity.AllowThirdPartyAppGet, true); + StartActivityForResult(intent, 0); }; openFileButton.Click += openFileButtonClick; //OPEN URL Button openUrlButton = (Button)FindViewById(Resource.Id.start_open_url); -#if NoNet openUrlButton.Visibility = ViewStates.Gone; -#endif //EventHandler openUrlButtonClick = (sender, e) => ShowFilenameDialog(true, false, false, "", GetString(Resource.String.enter_filename_details_url), Intents.RequestCodeFileBrowseForOpen); - openUrlButton.Click += (sender, args) => - { - Intent intent = new Intent(this, typeof(FileStorageSelectionActivity)); - StartActivityForResult(intent, 0); - }; //CREATE NEW Button createNewButton = (Button)FindViewById(Resource.Id.start_create); @@ -282,20 +273,6 @@ namespace keepass2android { AppTask = AppTask.CreateFromBundle(savedInstanceState); _recentMode = savedInstanceState.GetBoolean(BundleKeyRecentMode, _recentMode); - - string filenameToLaunch = savedInstanceState.GetString(PasswordActivity.KeyFilename); - if (filenameToLaunch != null) - { - _iocToLaunch = new IOConnectionInfo() - { - Path = filenameToLaunch, - UserName = savedInstanceState.GetString(PasswordActivity.KeyServerusername), - Password = savedInstanceState.GetString(PasswordActivity.KeyServerpassword), - CredSaveMode = (IOCredSaveMode) savedInstanceState.GetInt(PasswordActivity.KeyServercredmode) - }; - } - - } } @@ -322,13 +299,6 @@ namespace keepass2android AppTask.ToBundle(outState); outState.PutBoolean(BundleKeyRecentMode, _recentMode); - if (_iocToLaunch != null) - { - outState.PutString(PasswordActivity.KeyFilename, _iocToLaunch.Path); - outState.PutString(PasswordActivity.KeyServerusername, _iocToLaunch.UserName); - outState.PutString(PasswordActivity.KeyServerpassword, _iocToLaunch.Password); - outState.PutInt(PasswordActivity.KeyServercredmode, (int)_iocToLaunch.CredSaveMode); - } } private class LaunchGroupActivity : FileOnFinish { @@ -407,15 +377,6 @@ namespace keepass2android void LaunchPasswordActivityForIoc(IOConnectionInfo ioc) { IFileStorage fileStorage = App.Kp2a.GetFileStorage(ioc); - if (fileStorage.RequiredSetup != null) - { - if (!fileStorage.RequiredSetup.TrySetup(this)) - { - //store ioc to launch. TrySetup hopefully launched another activity so we can check again in OnResume - _iocToLaunch = ioc; - return; - } - } if (fileStorage.RequiresCredentials(ioc)) { @@ -485,9 +446,19 @@ namespace keepass2android if (resultCode == KeePass.ExitFileStorageSelectionOk) { #if !EXCLUDE_FILECHOOSER - Intent i = Keepass2android.Kp2afilechooser.Kp2aFileChooserBridge.GetLaunchFileChooserIntent(this, FileChooserFileProvider.TheAuthority, data.GetStringExtra("protocolId")+":///"); + string protocolId = data.GetStringExtra("protocolId"); + + if (protocolId == "androidget") + { + string defaultFilename = Environment.ExternalStorageDirectory + + GetString(Resource.String.default_file_path); + Util.ShowBrowseDialog(defaultFilename, this, Intents.RequestCodeFileBrowseForOpen, false); + } + else + { + App.Kp2a.GetFileStorage(protocolId).StartSelectFile(new FileStorageSetupInitiatorActivity(this, OnActivityResult), false, 0, protocolId); + } - StartActivityForResult(i, Intents.RequestCodeFileBrowseForOpen); #else Toast.MakeText(this, "TODO: make this more flexible.", ToastLength.Long).Show(); IOConnectionInfo ioc = new IOConnectionInfo @@ -528,6 +499,36 @@ namespace keepass2android } } + + if (resultCode == (Result) FileStorageResults.FileUsagePrepared) + { + IOConnectionInfo ioc = new IOConnectionInfo(); + PasswordActivity.SetIoConnectionFromIntent(ioc, data); + LaunchPasswordActivityForIoc(ioc); + } + if (resultCode == (Result)FileStorageResults.FileChooserPrepared) + { + IOConnectionInfo ioc = new IOConnectionInfo(); + PasswordActivity.SetIoConnectionFromIntent(ioc, data); +#if !EXCLUDE_FILECHOOSER + StartFileChooser(ioc.Path); +#endif + } + } + + private void StartFileChooser(string defaultPath) + { + Kp2aLog.Log("FSA: defaultPath="+defaultPath); + string fileProviderAuthority = FileChooserFileProvider.TheAuthority; + if (defaultPath.StartsWith("file://")) + { + fileProviderAuthority = "keepass2android.keepass2android.android-filechooser.localfile"; + defaultPath = Environment.ExternalStorageDirectory + GetString(Resource.String.default_file_path); + } + Intent i = Keepass2android.Kp2afilechooser.Kp2aFileChooserBridge.GetLaunchFileChooserIntent(this, fileProviderAuthority, + defaultPath); + + StartActivityForResult(i, Intents.RequestCodeFileBrowseForOpen); } @@ -546,26 +547,7 @@ namespace keepass2android return; } - //check if we are resuming after setting up the file storage: - if (_iocToLaunch != null) - { - try - { - IOConnectionInfo iocToLaunch = _iocToLaunch; - _iocToLaunch = null; - - IFileStorageSetupOnResume fsSetup = App.Kp2a.GetFileStorage(iocToLaunch).RequiredSetup as IFileStorageSetupOnResume; - if ((fsSetup == null) || (fsSetup.TrySetupOnResume(this))) - { - LaunchPasswordActivityForIoc(iocToLaunch); - } - - } - catch (Exception e) - { - Toast.MakeText(this, e.Message, ToastLength.Long).Show(); - } - } + _fileSelectButtons.UpdateExternalStorageWarning(); @@ -591,7 +573,7 @@ namespace keepass2android StartManagingCursor(filesCursor); filesCursor.MoveToFirst(); IOConnectionInfo ioc = _DbHelper.CursorToIoc(filesCursor); - if (App.Kp2a.GetFileStorage(ioc).RequiredSetup == null) + if (App.Kp2a.GetFileStorage(ioc).RequiresSetup(ioc) == false) { LaunchPasswordActivityForIoc(ioc); } @@ -684,6 +666,10 @@ namespace keepass2android Android.Database.ICursor cursor = ca.Cursor; cursor.Requery(); } + + + + } } diff --git a/src/keepass2android/fileselect/FileStorageSetupActivity.cs b/src/keepass2android/fileselect/FileStorageSetupActivity.cs new file mode 100644 index 00000000..f6da969a --- /dev/null +++ b/src/keepass2android/fileselect/FileStorageSetupActivity.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using KeePassLib.Serialization; +using Keepass2android.Javafilestorage; +using keepass2android.Io; +using JavaFileStorage = Keepass2android.Javafilestorage.JavaFileStorage; + +namespace keepass2android.fileselect +{ + [Activity(Label = "@string/filestorage_setup_title",Theme="@style/Base")] + public class FileStorageSetupActivity : Activity, IFileStorageSetupActivity +#if !EXCLUDE_JAVAFILESTORAGE + ,IJavaFileStorageFileStorageSetupActivity +#endif + { + protected override void OnCreate(Bundle bundle) + { + base.OnCreate(bundle); + + Ioc = new IOConnectionInfo(); + PasswordActivity.SetIoConnectionFromIntent(Ioc, Intent); + + Kp2aLog.Log("FSSA.OnCreate with " + Ioc.Path); + + ProcessName = Intent.GetStringExtra(FileStorageSetupDefs.ExtraProcessName); + IsForSave = Intent.GetBooleanExtra(FileStorageSetupDefs.ExtraIsForSave, false); + if (bundle == null) + State = new Bundle(); + else + State = (Bundle) bundle.Clone(); + + App.Kp2a.GetFileStorage(Ioc).OnCreate(this, bundle); + + } + + protected override void OnStart() + { + base.OnStart(); + App.Kp2a.GetFileStorage(Ioc).OnStart(this); + } + + protected override void OnResume() + { + base.OnResume(); + App.Kp2a.GetFileStorage(Ioc).OnResume(this); + } + + protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) + { + base.OnActivityResult(requestCode, resultCode, data); + App.Kp2a.GetFileStorage(Ioc).OnActivityResult(this, requestCode, (int) resultCode, data); + } + + protected override void OnSaveInstanceState(Bundle outState) + { + base.OnSaveInstanceState(outState); + + outState.PutAll(State); + } + + public IOConnectionInfo Ioc { get; private set; } + public string Path + { + get + { + return App.Kp2a.GetFileStorage(Ioc).IocToPath(Ioc); + } + } + public string ProcessName { get; private set; } + public bool IsForSave { get; private set; } + public Bundle State { get; private set; } + } +} \ No newline at end of file diff --git a/src/keepass2android/fileselect/FileStorageSetupInitiatorActivity.cs b/src/keepass2android/fileselect/FileStorageSetupInitiatorActivity.cs new file mode 100644 index 00000000..b251685c --- /dev/null +++ b/src/keepass2android/fileselect/FileStorageSetupInitiatorActivity.cs @@ -0,0 +1,76 @@ +using System; +using Android.App; +using Android.Content; +using KeePassLib.Serialization; +using Keepass2android.Javafilestorage; +using keepass2android.Io; +using keepass2android.fileselect; + +namespace keepass2android +{ + public class FileStorageSetupInitiatorActivity: +#if !EXCLUDE_JAVAFILESTORAGE + Java.Lang.Object + ,IJavaFileStorageFileStorageSetupInitiatorActivity +#endif + , IFileStorageSetupInitiatorActivity + { + private readonly Activity _activity; + private readonly Action _onActivityResult; + + public FileStorageSetupInitiatorActivity(Activity activity, Action onActivityResult) + { + _activity = activity; + _onActivityResult = onActivityResult; + } + + public void StartSelectFileProcess(IOConnectionInfo ioc, bool isForSave, int requestCode) + { + Kp2aLog.Log("FSSIA: StartSelectFileProcess "+ioc.Path); + Intent fileStorageSetupIntent = new Intent(_activity, typeof(FileStorageSetupActivity)); + fileStorageSetupIntent.PutExtra(FileStorageSetupDefs.ExtraProcessName, FileStorageSetupDefs.ProcessNameSelectfile); + fileStorageSetupIntent.PutExtra(FileStorageSetupDefs.ExtraIsForSave, isForSave); + PasswordActivity.PutIoConnectionToIntent(ioc, fileStorageSetupIntent); + + _activity.StartActivityForResult(fileStorageSetupIntent, requestCode); + } + + public void StartFileUsageProcess(IOConnectionInfo ioc, int requestCode) + { + Intent fileStorageSetupIntent = new Intent(_activity, typeof(FileStorageSetupActivity)); + fileStorageSetupIntent.PutExtra(FileStorageSetupDefs.ExtraProcessName, FileStorageSetupDefs.ProcessNameFileUsageSetup); + PasswordActivity.PutIoConnectionToIntent(ioc, fileStorageSetupIntent); + + _activity.StartActivityForResult(fileStorageSetupIntent, requestCode); + } + + public void OnImmediateResult(int requestCode, int result, Intent intent) + { + _onActivityResult(requestCode, (Result)result, intent); + } + + public Activity Activity { + get { return _activity; } + } + + public void IocToIntent(Intent intent, IOConnectionInfo ioc) + { + PasswordActivity.PutIoConnectionToIntent(ioc, intent); + } + + public void PerformManualFileSelect(bool isForSave, int requestCode, string protocolId) + { + throw new NotImplementedException(); + } + + public void StartFileUsageProcess(string p0, int p1) + { + StartFileUsageProcess(new IOConnectionInfo() { Path = p0 }, p1); + } + + public void StartSelectFileProcess(string p0, bool p1, int p2) + { + StartSelectFileProcess(new IOConnectionInfo() { Path = p0 }, p1, p2); + } + } +} \ No newline at end of file diff --git a/src/keepass2android/keepass2android.csproj b/src/keepass2android/keepass2android.csproj index a8fec310..9cedf81a 100644 --- a/src/keepass2android/keepass2android.csproj +++ b/src/keepass2android/keepass2android.csproj @@ -24,7 +24,7 @@ full False bin\Debug - DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_KEYTRANSFORM;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE + DEBUG;INCLUDE_TWOFISH;INCLUDE_KEYBOARD;INCLUDE_KEYTRANSFORM;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE prompt 4 False @@ -79,6 +79,8 @@ + + @@ -96,7 +98,6 @@ - @@ -253,7 +254,7 @@ False - + libs\mips\libfinal-key.so @@ -700,11 +701,11 @@ - + libs\armeabi\libfinal-key.so PreserveNewest - + libs\armeabi-v7a\libfinal-key.so PreserveNewest @@ -816,4 +817,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file