diff options
author | Marcos Zuriaga <wolfi@wolfi.es> | 2022-09-08 16:58:00 +0300 |
---|---|---|
committer | Marcos Zuriaga <wolfi@wolfi.es> | 2022-09-08 16:58:00 +0300 |
commit | b20a01cf152a4d9160fcc9e7f5e40bdd41ace28d (patch) | |
tree | 6e0436024ea74c5e9e2bc16c38d72990c1fcd770 | |
parent | 788dd5e5eb22e6a01b8f8a404553268dfbb77420 (diff) | |
parent | ae1230c58ed383a4763cbcf6c6c216db5a9a80e8 (diff) |
Merge branch 'improve-custom-fields'
6 files changed, 83 insertions, 12 deletions
diff --git a/app/src/main/java/es/wolfi/app/passman/EditPasswordTextItem.java b/app/src/main/java/es/wolfi/app/passman/EditPasswordTextItem.java index 5365ea1..1fc7e39 100644 --- a/app/src/main/java/es/wolfi/app/passman/EditPasswordTextItem.java +++ b/app/src/main/java/es/wolfi/app/passman/EditPasswordTextItem.java @@ -26,6 +26,7 @@ import android.content.Context; import android.graphics.Canvas; import android.text.Editable; import android.text.InputType; +import android.text.TextWatcher; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -85,6 +86,10 @@ public class EditPasswordTextItem extends LinearLayout { super.onDraw(canvas); } + public void addTextChangedListener(TextWatcher watcher) { + this.password.addTextChangedListener(watcher); + } + public void setText(String password) { this.password.setText(password); } @@ -93,6 +98,10 @@ public class EditPasswordTextItem extends LinearLayout { return this.password.getText(); } + public void setHint(String hint) { + this.password.setHint(hint); + } + public void setEnabled(boolean enabled) { password.setEnabled(enabled); } diff --git a/app/src/main/java/es/wolfi/app/passman/adapters/CustomFieldEditAdapter.java b/app/src/main/java/es/wolfi/app/passman/adapters/CustomFieldEditAdapter.java index 5f21f08..2b61d88 100644 --- a/app/src/main/java/es/wolfi/app/passman/adapters/CustomFieldEditAdapter.java +++ b/app/src/main/java/es/wolfi/app/passman/adapters/CustomFieldEditAdapter.java @@ -27,6 +27,7 @@ import android.os.Build; import android.text.Editable; import android.text.TextWatcher; import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -49,6 +50,7 @@ import java.util.Timer; import java.util.TimerTask; import es.wolfi.app.ResponseHandlers.CustomFieldFileDeleteResponseHandler; +import es.wolfi.app.passman.EditPasswordTextItem; import es.wolfi.app.passman.R; import es.wolfi.passman.API.Credential; import es.wolfi.passman.API.CustomField; @@ -110,7 +112,18 @@ public class CustomFieldEditAdapter extends RecyclerView.Adapter<CustomFieldEdit e.printStackTrace(); } } else { - holder.mValueEdit.setText(customField.getValue()); + if (holder.mItem.getFieldType().equals("password")) { + Log.d("customfield", "got password field"); + holder.mValueEdit.setVisibility(View.GONE); + holder.mValuePasswordEdit.setVisibility(View.VISIBLE); + holder.mValuePasswordEdit.setText(customField.getValue()); + holder.mValueEdit.setEnabled(false); + } else { + Log.d("customfield", "got default field"); + holder.mValueEdit.setText(customField.getValue()); + holder.mValuePasswordEdit.setEnabled(false); + holder.mValuePasswordEdit.setVisibility(View.GONE); + } } holder.mLabelEdit.addTextChangedListener(new TextWatcher() { @@ -179,6 +192,39 @@ public class CustomFieldEditAdapter extends RecyclerView.Adapter<CustomFieldEdit } }); + holder.mValuePasswordEdit.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + } + + private Timer timer = new Timer(); + private final long DELAY = 100; // milliseconds + + @Override + public void afterTextChanged(Editable s) { + timer.cancel(); + timer = new Timer(); + timer.schedule( + new TimerTask() { + @Override + public void run() { + // you will probably need to use runOnUiThread(Runnable action) for some specific actions (e.g. manipulating views) + int itemIndex = mValues.indexOf(holder.mItem); + holder.mItem.setValue(s.toString()); + mValues.set(itemIndex, holder.mItem); + } + }, + DELAY + ); + } + }); + CustomFieldEditAdapter self = this; holder.deleteButton.setOnClickListener(new View.OnClickListener() { @Override @@ -214,6 +260,7 @@ public class CustomFieldEditAdapter extends RecyclerView.Adapter<CustomFieldEdit public final TextView mLabelView; public final EditText mLabelEdit; public final EditText mValueEdit; + public final EditPasswordTextItem mValuePasswordEdit; public final AppCompatImageButton deleteButton; public final LinearLayout displayCustomFieldLayout; public final LinearLayout editCustomFieldLayout; @@ -226,6 +273,7 @@ public class CustomFieldEditAdapter extends RecyclerView.Adapter<CustomFieldEdit mLabelView = (TextView) view.findViewById(R.id.customFieldLabel); mLabelEdit = (EditText) view.findViewById(R.id.customFieldEditLabel); mValueEdit = (EditText) view.findViewById(R.id.customFieldEditValue); + mValuePasswordEdit = (EditPasswordTextItem) view.findViewById(R.id.customFieldEditValuePassword); deleteButton = (AppCompatImageButton) view.findViewById(R.id.deleteCustomFieldButton); displayCustomFieldLayout = (LinearLayout) view.findViewById(R.id.displayCustomFieldLayout); editCustomFieldLayout = (LinearLayout) view.findViewById(R.id.editCustomFieldLayout); @@ -236,6 +284,7 @@ public class CustomFieldEditAdapter extends RecyclerView.Adapter<CustomFieldEdit mValueEdit.setVisibility(View.VISIBLE); mLabelView.setVisibility(View.INVISIBLE); mLabelEdit.setVisibility(View.VISIBLE); + mValuePasswordEdit.setHint(mView.getContext().getString(R.string.password)); WindowManager vm = (WindowManager) mView.getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE); diff --git a/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java b/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java index 158200b..5457dae 100644 --- a/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java +++ b/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java @@ -228,7 +228,7 @@ public class CredentialEditFragment extends Fragment implements View.OnClickList ((PasswordListActivity) requireActivity()).selectFileToAdd(FileUtils.activityRequestFileCode.credentialEditCustomFieldFile.ordinal()); } else { CustomField cf = new CustomField(); - cf.setLabel("newLabel" + (cfed.getItemCount() + 1)); + //cf.setLabel("newLabel" + (cfed.getItemCount() + 1)); cf.setSecret(customFieldType.getSelectedItem().toString().toLowerCase().equals("password")); cf.setFieldType(customFieldType.getSelectedItem().toString().toLowerCase()); cf.setValue(""); diff --git a/app/src/main/res/layout/fragment_credential_custom_field_item.xml b/app/src/main/res/layout/fragment_credential_custom_field_item.xml index 746ac21..7b001f0 100644 --- a/app/src/main/res/layout/fragment_credential_custom_field_item.xml +++ b/app/src/main/res/layout/fragment_credential_custom_field_item.xml @@ -21,17 +21,16 @@ --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/customFieldsRelativeLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal" + android:layout_marginStart="10dp" android:layout_marginTop="11dp" - android:layout_marginStart="10dp"> + android:orientation="horizontal"> <TextView - style="@style/Label" android:id="@+id/customFieldLabel" + style="@style/Label" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="0dp" @@ -39,22 +38,22 @@ android:text="@string/label" /> <EditText - style="@style/Label" android:id="@+id/customFieldEditLabel" + style="@style/Label" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="0dp" android:layout_marginBottom="@dimen/text_margin" - android:text="@string/label" + android:hint="@string/label" android:visibility="invisible" /> - <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" + <LinearLayout android:id="@+id/displayCustomFieldLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal" android:layout_marginTop="11dp" + android:orientation="horizontal" android:visibility="visible"> <TextView @@ -86,19 +85,32 @@ <EditText android:id="@+id/customFieldEditValue" - android:layout_width="wrap_content" + android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginBottom="@dimen/text_margin" + android:layout_marginEnd="30dp" + android:hint="@string/value" android:textAppearance="?attr/textAppearanceListItem" android:visibility="invisible" /> + <es.wolfi.app.passman.EditPasswordTextItem + android:id="@+id/customFieldEditValuePassword" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:layout_marginBottom="@dimen/text_margin" + android:layout_marginEnd="45dp" + android:paddingRight="-10dp" + android:visibility="invisible" /> + <androidx.appcompat.widget.AppCompatImageButton android:id="@+id/deleteCustomFieldButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|center_vertical" android:layout_marginTop="0dp" + android:layout_marginStart="-27dp" android:backgroundTint="@color/transparent" android:src="@drawable/ic_baseline_delete_24" android:tint="@color/danger" /> diff --git a/app/src/main/res/layout/fragment_credential_display.xml b/app/src/main/res/layout/fragment_credential_display.xml index cbfac73..3307da3 100644 --- a/app/src/main/res/layout/fragment_credential_display.xml +++ b/app/src/main/res/layout/fragment_credential_display.xml @@ -32,7 +32,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:paddingBottom="@dimen/activity_vertical_margin" + android:paddingBottom="@dimen/floating_button_parent_padding" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bc0d6ed..cdfe103 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -87,4 +87,5 @@ <string name="nextcloud_single_sign_on">Nextcloud Single Sign On</string> <string name="manual_login">Manual Login</string> <string name="confirm_account_logout">Are you sure you want to log out?</string> + <string name="value">Value</string> </resources> |