mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Solve layout for selections
This commit is contained in:
@@ -37,9 +37,8 @@
|
||||
android:resource="@xml/nnf_provider_paths" />
|
||||
</provider>
|
||||
<activity
|
||||
android:name="com.nononsenseapps.filepicker.FilePickerActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/KeepassDXStyle.FilePickerStyle">
|
||||
android:name="com.keepassdroid.FilePickerStylishActivity"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.GET_CONTENT" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
@@ -83,17 +83,14 @@ public class AssignPasswordDialog extends DialogFragment {
|
||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
passwordCheckBox = (CompoundButton) rootView.findViewById(R.id.password_checkBox);
|
||||
passwordCheckBox = (CompoundButton) rootView.findViewById(R.id.password_checkbox);
|
||||
keyfileCheckBox = (CompoundButton) rootView.findViewById(R.id.keyfile_checkox);
|
||||
|
||||
keyFileHelper = new KeyFileHelper(this);
|
||||
@@ -202,7 +199,9 @@ public class AssignPasswordDialog extends DialogFragment {
|
||||
public void onResultCallback(Uri uri) {
|
||||
if(uri != null) {
|
||||
EditText keyFileView = (EditText) rootView.findViewById(R.id.pass_keyfile);
|
||||
keyFileView.setText(uri.toString());
|
||||
Uri pathString = UriUtil.parseDefaultFile(uri.toString());
|
||||
if (pathString != null)
|
||||
keyFileView.setText(pathString.toString());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
/*
|
||||
* Copyright 2017 Jeremy Jamet / Kunzisoft.
|
||||
*
|
||||
* This file is part of KeePass DX.
|
||||
*
|
||||
* KeePass DX 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.
|
||||
*
|
||||
* KeePass DX 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 KeePass DX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.keepassdroid;
|
||||
|
||||
import android.app.Activity;
|
||||
@@ -84,7 +103,7 @@ public class CreateFileDialog extends DialogFragment implements AdapterView.OnIt
|
||||
browseView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent i = new Intent(getContext(), FilePickerActivity.class);
|
||||
Intent i = new Intent(getContext(), FilePickerStylishActivity.class);
|
||||
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
|
||||
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
|
||||
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2017 Jeremy Jamet / Kunzisoft.
|
||||
*
|
||||
* This file is part of KeePass DX.
|
||||
*
|
||||
* KeePass DX 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.
|
||||
*
|
||||
* KeePass DX 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 KeePass DX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.keepassdroid;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StyleRes;
|
||||
import android.util.Log;
|
||||
|
||||
import com.keepassdroid.stylish.Stylish;
|
||||
import com.kunzisoft.keepass.R;
|
||||
import com.nononsenseapps.filepicker.FilePickerActivity;
|
||||
|
||||
|
||||
public class FilePickerStylishActivity extends FilePickerActivity {
|
||||
|
||||
private @StyleRes
|
||||
int themeId;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
this.themeId = FilePickerStylish.getThemeId(this);
|
||||
setTheme(themeId);
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if(FilePickerStylish.getThemeId(this) != this.themeId) {
|
||||
Log.d(this.getClass().getName(), "Theme change detected, restarting activity");
|
||||
this.recreate();
|
||||
}
|
||||
}
|
||||
|
||||
public static class FilePickerStylish extends Stylish {
|
||||
public static @StyleRes int getThemeId(Context context) {
|
||||
if (themeString.equals(context.getString(R.string.list_style_name_night)))
|
||||
return R.style.KeepassDXStyle_FilePickerStyle_Night;
|
||||
|
||||
return R.style.KeepassDXStyle_FilePickerStyle_Light;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,7 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
@@ -90,7 +91,10 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
private View fingerprintView;
|
||||
private TextView confirmationView;
|
||||
private EditText passwordView;
|
||||
private EditText keyFileView;
|
||||
private Button confirmButton;
|
||||
private CheckBox checkboxPassword;
|
||||
private CheckBox checkboxKeyfile;
|
||||
|
||||
private KeyFileHelper keyFileHelper;
|
||||
|
||||
@@ -109,6 +113,7 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
}
|
||||
|
||||
Uri uri = UriUtil.parseDefaultFile(fileName);
|
||||
assert uri != null;
|
||||
String scheme = uri.getScheme();
|
||||
|
||||
if (!EmptyUtils.isNullOrEmpty(scheme) && scheme.equalsIgnoreCase("file")) {
|
||||
@@ -146,13 +151,13 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
|
||||
switch (requestCode) {
|
||||
case KeePass.EXIT_NORMAL:
|
||||
setEditText(R.id.password, "");
|
||||
setEmptyViews();
|
||||
App.getDB().clear();
|
||||
break;
|
||||
|
||||
case KeePass.EXIT_LOCK:
|
||||
setResult(KeePass.EXIT_LOCK);
|
||||
setEditText(R.id.password, "");
|
||||
setEmptyViews();
|
||||
finish();
|
||||
App.getDB().clear();
|
||||
break;
|
||||
@@ -183,6 +188,10 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
fingerprintView = findViewById(R.id.fingerprint);
|
||||
confirmationView = (TextView) findViewById(R.id.fingerprint_label);
|
||||
passwordView = (EditText) findViewById(R.id.password);
|
||||
keyFileView = (EditText) findViewById(R.id.pass_keyfile);
|
||||
|
||||
checkboxPassword = (CheckBox) findViewById(R.id.password_checkbox);
|
||||
checkboxKeyfile = (CheckBox) findViewById(R.id.keyfile_checkox);
|
||||
|
||||
new InitTask().execute(i);
|
||||
}
|
||||
@@ -194,8 +203,7 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
// If the application was shutdown make sure to clear the password field, if it
|
||||
// was saved in the instance state
|
||||
if (App.isShutdown()) {
|
||||
TextView password = (TextView) findViewById(R.id.password);
|
||||
password.setText("");
|
||||
setEmptyViews();
|
||||
}
|
||||
|
||||
// Clear the shutdown flag
|
||||
@@ -208,6 +216,11 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
}
|
||||
}
|
||||
|
||||
private void setEmptyViews() {
|
||||
passwordView.setText("");
|
||||
keyFileView.setText("");
|
||||
}
|
||||
|
||||
private void retrieveSettings() {
|
||||
String defaultFilename = prefs.getString(KEY_DEFAULT_FILENAME, "");
|
||||
if (!EmptyUtils.isNullOrEmpty(mDbUri.getPath()) && UriUtil.equalsDefaultfile(mDbUri, defaultFilename)) {
|
||||
@@ -232,10 +245,6 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
setEditText(R.id.pass_keyfile, key);
|
||||
}
|
||||
|
||||
private void errorMessage(int resId) {
|
||||
Toast.makeText(this, resId, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
// fingerprint related code here
|
||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||
private void initForFingerprint() {
|
||||
@@ -366,9 +375,7 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
else if (!fingerPrintHelper.hasEnrolledFingerprints()) {
|
||||
|
||||
setFingerPrintVisibility(View.VISIBLE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
fingerprintView.setAlpha(0.3f);
|
||||
}
|
||||
// This happens when no fingerprints are registered. Listening won't start
|
||||
confirmationView.setText(R.string.configure_fingerprint);
|
||||
}
|
||||
@@ -376,9 +383,7 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
else {
|
||||
fingerprintMustBeConfigured = false;
|
||||
setFingerPrintVisibility(View.VISIBLE);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||
fingerprintView.setAlpha(1f);
|
||||
}
|
||||
// fingerprint available but no stored password found yet for this DB so show info don't listen
|
||||
if (prefsNoBackup.getString(getPreferenceKeyValue(), null) == null) {
|
||||
confirmationView.setText(R.string.no_password_stored);
|
||||
@@ -480,6 +485,13 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
// Clear the shutdown flag
|
||||
App.clearShutdown();
|
||||
|
||||
if (!checkboxPassword.isChecked()) {
|
||||
pass = "";
|
||||
}
|
||||
if (!checkboxKeyfile.isChecked()) {
|
||||
keyfile = null;
|
||||
}
|
||||
|
||||
Handler handler = new Handler();
|
||||
LoadDB task = new LoadDB(db, PasswordActivity.this, mDbUri, pass, keyfile, new AfterLoad(handler, db));
|
||||
ProgressTask pt = new ProgressTask(PasswordActivity.this, task, R.string.loading_database);
|
||||
@@ -525,7 +537,7 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
|
||||
private Database db;
|
||||
|
||||
public AfterLoad(
|
||||
AfterLoad(
|
||||
Handler handler,
|
||||
Database db) {
|
||||
super(handler);
|
||||
@@ -625,8 +637,7 @@ public class PasswordActivity extends LockingActivity implements FingerPrintHelp
|
||||
confirmButton.setOnClickListener(new OkClickHandler());
|
||||
|
||||
if (password != null) {
|
||||
TextView tv_password = (TextView) findViewById(R.id.password);
|
||||
tv_password.setText(password);
|
||||
passwordView.setText(password);
|
||||
}
|
||||
|
||||
CompoundButton defaultCheck = (CompoundButton) findViewById(R.id.default_database);
|
||||
|
||||
@@ -9,9 +9,9 @@ import com.kunzisoft.keepass.R;
|
||||
|
||||
public class Stylish {
|
||||
|
||||
private static String stylishPrefKey;
|
||||
protected static String stylishPrefKey;
|
||||
|
||||
private static String themeString;
|
||||
protected static String themeString;
|
||||
|
||||
public static void init(Context context) {
|
||||
stylishPrefKey = context.getString(R.string.setting_style_key);
|
||||
@@ -23,7 +23,7 @@ public class Stylish {
|
||||
themeString = styleString;
|
||||
}
|
||||
|
||||
static @StyleRes int getThemeId(Context context) {
|
||||
public static @StyleRes int getThemeId(Context context) {
|
||||
|
||||
if (themeString.equals(context.getString(R.string.list_style_name_night)))
|
||||
return R.style.KeepassDXStyle_Night;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with KeePass DX. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
@@ -25,7 +25,8 @@
|
||||
<android.support.v7.widget.CardView
|
||||
android:id="@+id/filename_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="32dp">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
@@ -35,7 +36,7 @@
|
||||
android:layout_marginStart="@dimen/default_margin"
|
||||
android:layout_marginRight="@dimen/default_margin"
|
||||
android:layout_marginEnd="@dimen/default_margin"
|
||||
android:layout_marginBottom="28dp">
|
||||
android:layout_marginBottom="12dp">
|
||||
|
||||
<TextView android:id="@+id/label_warning"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -79,13 +80,13 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/filename_container"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:layout_marginTop="-22dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
app:fabSize="mini"
|
||||
app:layout_anchor="@id/filename_container"
|
||||
app:layout_anchorGravity="bottom|start"
|
||||
android:src="@drawable/ic_open_folder_white_24dp" />
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<android.support.v7.widget.AppCompatCheckBox
|
||||
android:id="@+id/password_checkBox"
|
||||
android:id="@+id/password_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
@@ -126,8 +126,8 @@
|
||||
android:id="@+id/password_input_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@+id/password_checkBox"
|
||||
android:layout_toEndOf="@+id/password_checkBox"
|
||||
android:layout_toRightOf="@+id/password_checkbox"
|
||||
android:layout_toEndOf="@+id/password_checkbox"
|
||||
app:passwordToggleEnabled="true"
|
||||
app:passwordToggleTint="?attr/colorAccent">
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.v7.widget.AppCompatCheckBox
|
||||
android:id="@+id/password_checkBox"
|
||||
android:id="@+id/password_checkbox"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:checked="true"
|
||||
@@ -81,6 +81,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/default_margin"
|
||||
android:layout_marginBottom="@dimen/default_margin"
|
||||
app:cardCornerRadius="4dp">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -238,14 +238,30 @@
|
||||
</style>
|
||||
|
||||
<!-- File Picker Theme -->
|
||||
<style name="KeepassDXStyle.FilePickerStyle" parent="NNF_BaseTheme">
|
||||
<style name="KeepassDXStyle.FilePickerStyle.Night" parent="Theme.AppCompat.Dialog">
|
||||
<!-- You can override this in your sub theme -->
|
||||
<item name="nnf_toolbarTheme">@style/ThemeOverlay.AppCompat.ActionBar</item>
|
||||
<item name="nnf_separator_color">@color/nnf_dark_separator_color</item>
|
||||
<item name="nnf_save_icon_color">?attr/colorAccent</item>
|
||||
<item name="nnf_dir_icon_color">?attr/colorAccent</item>
|
||||
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
||||
<item name="colorPrimary">@color/green</item>
|
||||
<item name="colorPrimaryDark">@color/green_dark</item>
|
||||
<item name="colorAccent">@color/orange</item>
|
||||
<item name="alertDialogTheme">@style/KeepassDXStyle.FilePickerStyle.AlertDialog</item>
|
||||
</style>
|
||||
|
||||
<style name="KeepassDXStyle.FilePickerStyle.AlertDialog" parent="Theme.AppCompat.Dialog.Alert">
|
||||
<style name="KeepassDXStyle.FilePickerStyle.Light" parent="Theme.AppCompat.Light.Dialog">
|
||||
<item name="nnf_toolbarTheme">@style/ThemeOverlay.AppCompat.ActionBar</item>
|
||||
<item name="nnf_separator_color">@color/nnf_light_separator_color</item>
|
||||
<item name="nnf_save_icon_color">?attr/colorAccent</item>
|
||||
<item name="nnf_dir_icon_color">?attr/colorAccent</item>
|
||||
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
||||
<item name="colorPrimary">@color/green</item>
|
||||
<item name="colorPrimaryDark">@color/green_dark</item>
|
||||
<item name="colorAccent">@color/orange</item>
|
||||
|
||||
Reference in New Issue
Block a user