mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Add selection mode and fix read only
This commit is contained in:
@@ -101,7 +101,7 @@
|
||||
android:name="com.kunzisoft.keepass.activities.GroupActivity"
|
||||
android:configChanges="orientation|keyboardHidden"
|
||||
android:windowSoftInputMode="adjustPan"
|
||||
android:launchMode="singleTop">
|
||||
android:launchMode="singleTask">
|
||||
<meta-data
|
||||
android:name="android.app.default_searchable"
|
||||
android:value="com.kunzisoft.keepass.search.SearchResults"
|
||||
|
||||
@@ -89,7 +89,7 @@ public class EntryActivity extends LockingHideActivity {
|
||||
if (TimeoutHelper.INSTANCE.checkTimeAndLockIfTimeout(activity)) {
|
||||
Intent intent = new Intent(activity, EntryActivity.class);
|
||||
intent.putExtra(KEY_ENTRY, Types.UUIDtoBytes(pw.getUUID()));
|
||||
ReadOnlyHelper.putReadOnlyInIntent(intent, readOnly);
|
||||
ReadOnlyHelper.INSTANCE.putReadOnlyInIntent(intent, readOnly);
|
||||
activity.startActivityForResult(intent, EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.kunzisoft.keepass.selection
|
||||
package com.kunzisoft.keepass.activities
|
||||
|
||||
import android.app.assist.AssistStructure
|
||||
import android.content.Intent
|
||||
@@ -8,11 +8,20 @@ import com.kunzisoft.keepass.autofill.AutofillHelper
|
||||
object EntrySelectionHelper {
|
||||
|
||||
private const val EXTRA_ENTRY_SELECTION_MODE = "com.kunzisoft.keepass.extra.ENTRY_SELECTION_MODE"
|
||||
private const val DEFAULT_ENTRY_SELECTION_MODE = false
|
||||
|
||||
fun addEntrySelectionModeExtraInIntent(intent: Intent) {
|
||||
intent.putExtra(EXTRA_ENTRY_SELECTION_MODE, true)
|
||||
}
|
||||
|
||||
fun removeEntrySelectionModeFromIntent(intent: Intent) {
|
||||
intent.removeExtra(EXTRA_ENTRY_SELECTION_MODE)
|
||||
}
|
||||
|
||||
fun retrieveEntrySelectionModeFromIntent(intent: Intent): Boolean {
|
||||
return intent.getBooleanExtra(EXTRA_ENTRY_SELECTION_MODE, DEFAULT_ENTRY_SELECTION_MODE)
|
||||
}
|
||||
|
||||
fun doEntrySelectionAction(intent: Intent,
|
||||
standardAction: () -> Unit,
|
||||
keyboardAction: () -> Unit,
|
||||
@@ -25,7 +34,7 @@ object EntrySelectionHelper {
|
||||
}
|
||||
}
|
||||
if (assistStructure == null) {
|
||||
if (intent.getBooleanExtra(EXTRA_ENTRY_SELECTION_MODE, false)) {
|
||||
if (intent.getBooleanExtra(EXTRA_ENTRY_SELECTION_MODE, DEFAULT_ENTRY_SELECTION_MODE)) {
|
||||
intent.removeExtra(EXTRA_ENTRY_SELECTION_MODE)
|
||||
keyboardAction.invoke()
|
||||
} else {
|
||||
@@ -86,7 +86,6 @@ import com.kunzisoft.keepass.magikeyboard.KeyboardEntryNotificationService;
|
||||
import com.kunzisoft.keepass.magikeyboard.KeyboardHelper;
|
||||
import com.kunzisoft.keepass.magikeyboard.MagikIME;
|
||||
import com.kunzisoft.keepass.password.AssignPasswordHelper;
|
||||
import com.kunzisoft.keepass.selection.EntrySelectionHelper;
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil;
|
||||
import com.kunzisoft.keepass.tasks.SaveDatabaseProgressTaskDialogFragment;
|
||||
import com.kunzisoft.keepass.tasks.UIToastTask;
|
||||
@@ -97,8 +96,6 @@ import com.kunzisoft.keepass.view.AddNodeButtonView;
|
||||
|
||||
import net.cachapa.expandablelayout.ExpandableLayout;
|
||||
|
||||
import static com.kunzisoft.keepass.activities.ReadOnlyHelper.READ_ONLY_DEFAULT;
|
||||
|
||||
public class GroupActivity extends LockingActivity
|
||||
implements GroupEditDialogFragment.EditGroupListener,
|
||||
IconPickerDialogFragment.IconPickerListener,
|
||||
@@ -122,6 +119,7 @@ public class GroupActivity extends LockingActivity
|
||||
private ExpandableLayout toolbarPasteExpandableLayout;
|
||||
private Toolbar toolbarPaste;
|
||||
private ImageView iconView;
|
||||
private TextView modeTitleView;
|
||||
private AddNodeButtonView addNodeButtonView;
|
||||
private TextView groupNameView;
|
||||
|
||||
@@ -147,7 +145,7 @@ public class GroupActivity extends LockingActivity
|
||||
if (group != null) {
|
||||
intent.putExtra(GROUP_ID_KEY, group.getId());
|
||||
}
|
||||
ReadOnlyHelper.putReadOnlyInIntent(intent, readOnly);
|
||||
ReadOnlyHelper.INSTANCE.putReadOnlyInIntent(intent, readOnly);
|
||||
intentBuildLauncher.launchActivity(intent);
|
||||
}
|
||||
}
|
||||
@@ -159,7 +157,7 @@ public class GroupActivity extends LockingActivity
|
||||
*/
|
||||
|
||||
public static void launch(Activity activity) {
|
||||
launch(activity, READ_ONLY_DEFAULT);
|
||||
launch(activity, PreferencesUtil.enableReadOnlyDatabase(activity));
|
||||
}
|
||||
|
||||
public static void launch(Activity activity, boolean readOnly) {
|
||||
@@ -178,15 +176,11 @@ public class GroupActivity extends LockingActivity
|
||||
* Keyboard Launch
|
||||
* -------------------------
|
||||
*/
|
||||
// TODO implement pre search to directly open the direct group
|
||||
|
||||
public static void launchForKeyboardSelection(Activity activity, boolean readOnly) {
|
||||
launchForKeyboardSelection(activity, null, readOnly);
|
||||
}
|
||||
|
||||
public static void launchForKeyboardSelection(Activity activity, PwGroup group, boolean readOnly) {
|
||||
// TODO implement pre search to directly open the direct group
|
||||
TimeoutHelper.INSTANCE.recordTime(activity);
|
||||
buildAndLaunchIntent(activity, group, readOnly,
|
||||
buildAndLaunchIntent(activity, null, readOnly,
|
||||
(intent) -> KeyboardHelper.INSTANCE.startActivityForKeyboardSelection(activity, intent));
|
||||
}
|
||||
|
||||
@@ -195,19 +189,14 @@ public class GroupActivity extends LockingActivity
|
||||
* Autofill Launch
|
||||
* -------------------------
|
||||
*/
|
||||
// TODO implement pre search to directly open the direct group
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
public static void launchForAutofillResult(Activity activity, @NonNull AssistStructure assistStructure, boolean readOnly) {
|
||||
launchForAutofillResult(activity, null, assistStructure, readOnly);
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
public static void launchForAutofillResult(Activity activity, PwGroup group, @NonNull AssistStructure assistStructure, boolean readOnly) {
|
||||
// TODO implement pre search to directly open the direct group
|
||||
TimeoutHelper.INSTANCE.recordTime(activity);
|
||||
buildAndLaunchIntent(activity, group, readOnly,
|
||||
buildAndLaunchIntent(activity, null, readOnly,
|
||||
(intent) -> AutofillHelper.INSTANCE.startActivityForAutofillResult(activity, intent, assistStructure));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -230,15 +219,11 @@ public class GroupActivity extends LockingActivity
|
||||
groupNameView = findViewById(R.id.group_name);
|
||||
toolbarPasteExpandableLayout = findViewById(R.id.expandable_toolbar_paste_layout);
|
||||
toolbarPaste = findViewById(R.id.toolbar_paste);
|
||||
modeTitleView = findViewById(R.id.mode_title_view);
|
||||
|
||||
// Focus view to reinitialize timeout
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(addNodeButtonView);
|
||||
|
||||
invalidateOptionsMenu();
|
||||
|
||||
// Get arg from intent or instance state
|
||||
setReadOnly(ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrIntent(savedInstanceState, getIntent()));
|
||||
|
||||
// Retrieve elements after an orientation change
|
||||
if (savedInstanceState != null) {
|
||||
if (savedInstanceState.containsKey(OLD_GROUP_TO_UPDATE_KEY))
|
||||
@@ -380,7 +365,6 @@ public class GroupActivity extends LockingActivity
|
||||
outState.putParcelable(NODE_TO_COPY_KEY, nodeToCopy);
|
||||
if (nodeToMove != null)
|
||||
outState.putParcelable(NODE_TO_MOVE_KEY, nodeToMove);
|
||||
ReadOnlyHelper.onSaveInstanceState(outState, getReadOnly());
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
@@ -459,6 +443,13 @@ public class GroupActivity extends LockingActivity
|
||||
}
|
||||
}
|
||||
|
||||
// Show selection mode message if needed
|
||||
if (getSelectionMode()) {
|
||||
modeTitleView.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
modeTitleView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// Show button if allowed
|
||||
if (addNodeButtonView != null) {
|
||||
|
||||
@@ -513,6 +504,8 @@ public class GroupActivity extends LockingActivity
|
||||
GroupActivity.this,
|
||||
KeyboardEntryNotificationService.class));
|
||||
}
|
||||
// Consume the selection mode
|
||||
EntrySelectionHelper.INSTANCE.removeEntrySelectionModeFromIntent(getIntent());
|
||||
moveTaskToBack(true);
|
||||
return null;
|
||||
},
|
||||
@@ -856,41 +849,42 @@ public class GroupActivity extends LockingActivity
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.search, menu);
|
||||
if (!getReadOnly())
|
||||
inflater.inflate(R.menu.database_master_key, menu);
|
||||
inflater.inflate(R.menu.database_lock, menu);
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.search, menu);
|
||||
inflater.inflate(R.menu.database_lock, menu);
|
||||
if (!getReadOnly())
|
||||
inflater.inflate(R.menu.database_master_key, menu);
|
||||
if (!getSelectionMode()) {
|
||||
inflater.inflate(R.menu.default_menu, menu);
|
||||
MenuUtil.INSTANCE.contributionMenuInflater(inflater, menu);
|
||||
}
|
||||
|
||||
// Get the SearchView and set the searchable configuration
|
||||
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
|
||||
assert searchManager != null;
|
||||
// Get the SearchView and set the searchable configuration
|
||||
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
|
||||
assert searchManager != null;
|
||||
|
||||
MenuItem searchItem = menu.findItem(R.id.menu_search);
|
||||
SearchView searchView = null;
|
||||
if (searchItem != null) {
|
||||
searchView = (SearchView) searchItem.getActionView();
|
||||
}
|
||||
if (searchView != null) {
|
||||
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, GroupActivity.class)));
|
||||
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
|
||||
searchView.setSuggestionsAdapter(searchSuggestionAdapter);
|
||||
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
|
||||
@Override
|
||||
public boolean onSuggestionClick(int position) {
|
||||
onNodeClick(searchSuggestionAdapter.getEntryFromPosition(position));
|
||||
return true;
|
||||
}
|
||||
MenuItem searchItem = menu.findItem(R.id.menu_search);
|
||||
SearchView searchView = null;
|
||||
if (searchItem != null) {
|
||||
searchView = (SearchView) searchItem.getActionView();
|
||||
}
|
||||
if (searchView != null) {
|
||||
searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, GroupActivity.class)));
|
||||
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
|
||||
searchView.setSuggestionsAdapter(searchSuggestionAdapter);
|
||||
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
|
||||
@Override
|
||||
public boolean onSuggestionClick(int position) {
|
||||
onNodeClick(searchSuggestionAdapter.getEntryFromPosition(position));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSuggestionSelect(int position) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
MenuUtil.INSTANCE.contributionMenuInflater(inflater, menu);
|
||||
inflater.inflate(R.menu.default_menu, menu);
|
||||
@Override
|
||||
public boolean onSuggestionSelect(int position) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
super.onCreateOptionsMenu(menu);
|
||||
|
||||
@@ -900,7 +894,7 @@ public class GroupActivity extends LockingActivity
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Override
|
||||
public void startActivity(Intent intent) {
|
||||
|
||||
// Get the intent, verify the action and get the query
|
||||
|
||||
@@ -58,7 +58,7 @@ public class ListNodesFragment extends StylishFragment implements
|
||||
bundle.putParcelable(GROUP_KEY, group);
|
||||
}
|
||||
bundle.putBoolean(IS_SEARCH, isASearch);
|
||||
ReadOnlyHelper.putReadOnlyInBundle(bundle, readOnly);
|
||||
ReadOnlyHelper.INSTANCE.putReadOnlyInBundle(bundle, readOnly);
|
||||
ListNodesFragment listNodesFragment = new ListNodesFragment();
|
||||
listNodesFragment.setArguments(bundle);
|
||||
return listNodesFragment;
|
||||
@@ -99,7 +99,7 @@ public class ListNodesFragment extends StylishFragment implements
|
||||
if ( getActivity() != null ) {
|
||||
setHasOptionsMenu(true);
|
||||
|
||||
readOnly = ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, getArguments());
|
||||
readOnly = ReadOnlyHelper.INSTANCE.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, getArguments());
|
||||
|
||||
if (getArguments() != null) {
|
||||
// Contains all the group in element
|
||||
@@ -127,7 +127,7 @@ public class ListNodesFragment extends StylishFragment implements
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
ReadOnlyHelper.onSaveInstanceState(outState, readOnly);
|
||||
ReadOnlyHelper.INSTANCE.onSaveInstanceState(outState, readOnly);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
package com.kunzisoft.keepass.activities;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil;
|
||||
|
||||
public class ReadOnlyHelper {
|
||||
|
||||
public static final String READ_ONLY_KEY = "READ_ONLY_KEY";
|
||||
|
||||
public static final boolean READ_ONLY_DEFAULT = false;
|
||||
|
||||
public static boolean retrieveReadOnlyFromInstanceStateOrPreference(Context context, Bundle savedInstanceState) {
|
||||
boolean readOnly;
|
||||
if (savedInstanceState != null
|
||||
&& savedInstanceState.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = savedInstanceState.getBoolean(READ_ONLY_KEY);
|
||||
} else {
|
||||
readOnly = PreferencesUtil.enableReadOnlyDatabase(context);
|
||||
}
|
||||
return readOnly;
|
||||
}
|
||||
|
||||
public static boolean retrieveReadOnlyFromInstanceStateOrArguments(Bundle savedInstanceState, Bundle arguments) {
|
||||
boolean readOnly = READ_ONLY_DEFAULT;
|
||||
if (savedInstanceState != null
|
||||
&& savedInstanceState.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = savedInstanceState.getBoolean(READ_ONLY_KEY);
|
||||
} else if (arguments != null
|
||||
&& arguments.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = arguments.getBoolean(READ_ONLY_KEY);
|
||||
}
|
||||
return readOnly;
|
||||
}
|
||||
|
||||
public static boolean retrieveReadOnlyFromInstanceStateOrIntent(Bundle savedInstanceState, Intent intent) {
|
||||
boolean readOnly = READ_ONLY_DEFAULT;
|
||||
if (savedInstanceState != null
|
||||
&& savedInstanceState.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = savedInstanceState.getBoolean(READ_ONLY_KEY);
|
||||
} else {
|
||||
if (intent != null)
|
||||
readOnly = intent.getBooleanExtra(READ_ONLY_KEY, READ_ONLY_DEFAULT);
|
||||
}
|
||||
return readOnly;
|
||||
}
|
||||
|
||||
public static void putReadOnlyInIntent(Intent intent, boolean readOnly) {
|
||||
intent.putExtra(READ_ONLY_KEY, readOnly);
|
||||
}
|
||||
|
||||
public static void putReadOnlyInBundle(Bundle bundle, boolean readOnly) {
|
||||
bundle.putBoolean(READ_ONLY_KEY, readOnly);
|
||||
}
|
||||
|
||||
public static void onSaveInstanceState(Bundle outState, boolean readOnly) {
|
||||
outState.putBoolean(READ_ONLY_KEY, readOnly);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.kunzisoft.keepass.activities
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
|
||||
object ReadOnlyHelper {
|
||||
|
||||
private const val READ_ONLY_KEY = "READ_ONLY_KEY"
|
||||
|
||||
const val READ_ONLY_DEFAULT = false
|
||||
|
||||
fun retrieveReadOnlyFromIntent(intent: Intent): Boolean {
|
||||
return intent.getBooleanExtra(READ_ONLY_KEY, READ_ONLY_DEFAULT)
|
||||
}
|
||||
|
||||
fun retrieveReadOnlyFromInstanceStateOrPreference(context: Context, savedInstanceState: Bundle?): Boolean {
|
||||
return if (savedInstanceState != null && savedInstanceState.containsKey(READ_ONLY_KEY)) {
|
||||
savedInstanceState.getBoolean(READ_ONLY_KEY)
|
||||
} else {
|
||||
PreferencesUtil.enableReadOnlyDatabase(context)
|
||||
}
|
||||
}
|
||||
|
||||
fun retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState: Bundle?, arguments: Bundle?): Boolean {
|
||||
var readOnly = READ_ONLY_DEFAULT
|
||||
if (savedInstanceState != null && savedInstanceState.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = savedInstanceState.getBoolean(READ_ONLY_KEY)
|
||||
} else if (arguments != null && arguments.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = arguments.getBoolean(READ_ONLY_KEY)
|
||||
}
|
||||
return readOnly
|
||||
}
|
||||
|
||||
fun retrieveReadOnlyFromInstanceStateOrIntent(savedInstanceState: Bundle?, intent: Intent?): Boolean {
|
||||
var readOnly = READ_ONLY_DEFAULT
|
||||
if (savedInstanceState != null && savedInstanceState.containsKey(READ_ONLY_KEY)) {
|
||||
readOnly = savedInstanceState.getBoolean(READ_ONLY_KEY)
|
||||
} else {
|
||||
if (intent != null)
|
||||
readOnly = intent.getBooleanExtra(READ_ONLY_KEY, READ_ONLY_DEFAULT)
|
||||
}
|
||||
return readOnly
|
||||
}
|
||||
|
||||
fun putReadOnlyInIntent(intent: Intent, readOnly: Boolean) {
|
||||
intent.putExtra(READ_ONLY_KEY, readOnly)
|
||||
}
|
||||
|
||||
fun putReadOnlyInBundle(bundle: Bundle, readOnly: Boolean) {
|
||||
bundle.putBoolean(READ_ONLY_KEY, readOnly)
|
||||
}
|
||||
|
||||
fun onSaveInstanceState(outState: Bundle, readOnly: Boolean) {
|
||||
outState.putBoolean(READ_ONLY_KEY, readOnly)
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import android.content.IntentFilter
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import com.kunzisoft.keepass.activities.EntrySelectionHelper
|
||||
import com.kunzisoft.keepass.activities.ReadOnlyHelper
|
||||
import com.kunzisoft.keepass.app.App
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
@@ -51,7 +52,12 @@ abstract class LockingActivity : StylishActivity() {
|
||||
private var lockReceiver: LockReceiver? = null
|
||||
private var exitLock: Boolean = false
|
||||
|
||||
// Force readOnly if Entry Selection mode
|
||||
protected var readOnly: Boolean = false
|
||||
get() {
|
||||
return field || selectionMode
|
||||
}
|
||||
protected var selectionMode: Boolean = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -75,8 +81,6 @@ abstract class LockingActivity : StylishActivity() {
|
||||
}
|
||||
|
||||
exitLock = false
|
||||
|
||||
readOnly = false
|
||||
readOnly = ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrIntent(savedInstanceState, intent)
|
||||
}
|
||||
|
||||
@@ -93,6 +97,9 @@ abstract class LockingActivity : StylishActivity() {
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
// To refresh when back to normal workflow from selection workflow
|
||||
selectionMode = EntrySelectionHelper.retrieveEntrySelectionModeFromIntent(intent)
|
||||
|
||||
if (timeoutEnable) {
|
||||
// End activity if database not loaded
|
||||
if (!App.getDB().loaded) {
|
||||
@@ -108,6 +115,8 @@ abstract class LockingActivity : StylishActivity() {
|
||||
if (!exitLock)
|
||||
TimeoutHelper.recordTime(this)
|
||||
}
|
||||
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
|
||||
@@ -31,6 +31,7 @@ import android.support.v7.app.AppCompatActivity
|
||||
import com.kunzisoft.keepass.activities.GroupActivity
|
||||
import com.kunzisoft.keepass.app.App
|
||||
import com.kunzisoft.keepass.fileselect.FileSelectActivity
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
@@ -41,7 +42,7 @@ class AutoFillLauncherActivity : AppCompatActivity() {
|
||||
val assistStructure = AutofillHelper.retrieveAssistStructure(intent)
|
||||
if (assistStructure != null) {
|
||||
if (App.getDB().loaded && TimeoutHelper.checkTime(this))
|
||||
GroupActivity.launchForAutofillResult(this, assistStructure, true)
|
||||
GroupActivity.launchForAutofillResult(this, assistStructure, PreferencesUtil.enableReadOnlyDatabase(this))
|
||||
else {
|
||||
FileSelectActivity.launchForAutofillResult(this, assistStructure)
|
||||
}
|
||||
|
||||
@@ -32,8 +32,8 @@ import android.view.autofill.AutofillManager
|
||||
import android.view.autofill.AutofillValue
|
||||
import android.widget.RemoteViews
|
||||
import com.kunzisoft.keepass.R
|
||||
import com.kunzisoft.keepass.activities.EntrySelectionHelper
|
||||
import com.kunzisoft.keepass.database.PwEntry
|
||||
import com.kunzisoft.keepass.selection.EntrySelectionHelper
|
||||
import java.util.*
|
||||
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ import com.kunzisoft.keepass.dialogs.CreateFileDialogFragment;
|
||||
import com.kunzisoft.keepass.magikeyboard.KeyboardHelper;
|
||||
import com.kunzisoft.keepass.password.AssignPasswordHelper;
|
||||
import com.kunzisoft.keepass.password.PasswordActivity;
|
||||
import com.kunzisoft.keepass.selection.EntrySelectionHelper;
|
||||
import com.kunzisoft.keepass.activities.EntrySelectionHelper;
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil;
|
||||
import com.kunzisoft.keepass.stylish.StylishActivity;
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.kunzisoft.keepass.magikeyboard
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import com.kunzisoft.keepass.selection.EntrySelectionHelper
|
||||
import com.kunzisoft.keepass.activities.EntrySelectionHelper
|
||||
|
||||
object KeyboardHelper {
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.support.v7.app.AppCompatActivity
|
||||
import com.kunzisoft.keepass.activities.GroupActivity
|
||||
import com.kunzisoft.keepass.app.App
|
||||
import com.kunzisoft.keepass.fileselect.FileSelectActivity
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
|
||||
class KeyboardLauncherActivity : AppCompatActivity() {
|
||||
@@ -15,7 +16,7 @@ class KeyboardLauncherActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
if (App.getDB().loaded && TimeoutHelper.checkTime(this))
|
||||
GroupActivity.launchForKeyboardSelection(this, true)
|
||||
GroupActivity.launchForKeyboardSelection(this, PreferencesUtil.enableReadOnlyDatabase(this))
|
||||
else {
|
||||
// Pass extra to get entry
|
||||
FileSelectActivity.launchForKeyboardSelection(this)
|
||||
|
||||
@@ -71,7 +71,7 @@ import com.kunzisoft.keepass.fingerprint.FingerPrintAnimatedVector;
|
||||
import com.kunzisoft.keepass.fingerprint.FingerPrintExplanationDialog;
|
||||
import com.kunzisoft.keepass.fingerprint.FingerPrintHelper;
|
||||
import com.kunzisoft.keepass.magikeyboard.KeyboardHelper;
|
||||
import com.kunzisoft.keepass.selection.EntrySelectionHelper;
|
||||
import com.kunzisoft.keepass.activities.EntrySelectionHelper;
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil;
|
||||
import com.kunzisoft.keepass.stylish.StylishActivity;
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment;
|
||||
@@ -243,7 +243,7 @@ public class PasswordActivity extends StylishActivity
|
||||
checkboxKeyfileView = findViewById(R.id.keyfile_checkox);
|
||||
checkboxDefaultDatabaseView = findViewById(R.id.default_database);
|
||||
|
||||
readOnly = ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrPreference(this, savedInstanceState);
|
||||
readOnly = ReadOnlyHelper.INSTANCE.retrieveReadOnlyFromInstanceStateOrPreference(this, savedInstanceState);
|
||||
|
||||
View browseView = findViewById(R.id.browse_button);
|
||||
keyFileHelper = new KeyFileHelper(PasswordActivity.this);
|
||||
@@ -334,7 +334,7 @@ public class PasswordActivity extends StylishActivity
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
ReadOnlyHelper.onSaveInstanceState(outState, readOnly);
|
||||
ReadOnlyHelper.INSTANCE.onSaveInstanceState(outState, readOnly);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
|
||||
// supply arguments to bundle.
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(TAG_KEY, key.ordinal());
|
||||
ReadOnlyHelper.putReadOnlyInBundle(args, databaseReadOnly);
|
||||
ReadOnlyHelper.INSTANCE.putReadOnlyInBundle(args, databaseReadOnly);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
@@ -124,7 +124,7 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
|
||||
key = getArguments().getInt(TAG_KEY);
|
||||
|
||||
database = App.getDB();
|
||||
databaseReadOnly = ReadOnlyHelper.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, getArguments());
|
||||
databaseReadOnly = ReadOnlyHelper.INSTANCE.retrieveReadOnlyFromInstanceStateOrArguments(savedInstanceState, getArguments());
|
||||
databaseReadOnly = database.isReadOnly() || databaseReadOnly;
|
||||
|
||||
// Load the preferences from an XML resource
|
||||
@@ -552,7 +552,7 @@ public class NestedSettingsFragment extends PreferenceFragmentCompat
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
ReadOnlyHelper.onSaveInstanceState(outState, databaseReadOnly);
|
||||
ReadOnlyHelper.INSTANCE.onSaveInstanceState(outState, databaseReadOnly);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
|
||||
@@ -98,13 +98,26 @@
|
||||
</android.support.design.widget.CollapsingToolbarLayout>
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/nodes_list_fragment_container"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||
android:layout_below="@+id/toolbar"
|
||||
android:background="?android:attr/windowBackground" />
|
||||
android:layout_below="@+id/toolbar">
|
||||
<android.support.v7.widget.AppCompatTextView
|
||||
android:id="@+id/mode_title_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="6dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:background="?attr/colorAccent"
|
||||
android:text="@string/selection_mode"/>
|
||||
<FrameLayout
|
||||
android:id="@+id/nodes_list_fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?android:attr/windowBackground" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.kunzisoft.keepass.view.AddNodeButtonView
|
||||
android:id="@+id/add_node_button"
|
||||
|
||||
@@ -157,6 +157,7 @@
|
||||
<string name="read_only">Write-protected</string>
|
||||
<string name="read_only_warning">KeePass DX needs write permission in order to change anything in your database.</string>
|
||||
<string name="read_only_kitkat_warning">Starting with Android KitKat, some devices no longer allow apps to write to the SD card.</string>
|
||||
<string name="selection_mode">Selection mode</string>
|
||||
<string name="recentfile_title">Recent file history</string>
|
||||
<string name="recentfile_summary">Remember recent filenames</string>
|
||||
<string name="remember_keyfile_summary">Remembers the location of databases keyfiles</string>
|
||||
|
||||
Reference in New Issue
Block a user