Просмотр исходного кода

add OutlinedBox styling for wrapper EditTexts including theming

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 6 лет назад
Родитель
Сommit
1fa9f39a0d

+ 2 - 1
src/main/java/com/owncloud/android/ui/components/CustomEditText.java

@@ -26,13 +26,14 @@ import android.graphics.Rect;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 
+import com.google.android.material.textfield.TextInputEditText;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 
 /**
  * Custom edit text to support fixed suffix or prefix
  */
-public class CustomEditText extends androidx.appcompat.widget.AppCompatEditText {
+public class CustomEditText extends TextInputEditText {
     private Rect fixedRect = new Rect();
     private String fixedText = "";
     private boolean isPrefixFixed;

+ 9 - 2
src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java

@@ -24,6 +24,8 @@ package com.owncloud.android.ui.dialog;
 import android.annotation.SuppressLint;
 import android.app.Dialog;
 import android.content.DialogInterface;
+import android.content.res.ColorStateList;
+import android.graphics.Color;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -32,6 +34,8 @@ import android.view.Window;
 import android.view.WindowManager.LayoutParams;
 import android.widget.EditText;
 
+import com.google.android.material.textfield.TextInputEditText;
+import com.google.android.material.textfield.TextInputLayout;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.ui.activity.ComponentsGetter;
@@ -58,8 +62,11 @@ public class NoteDialogFragment extends DialogFragment implements DialogInterfac
     private OCShare share;
     private Unbinder unbinder;
 
+    @BindView(R.id.user_input_container)
+    TextInputLayout noteEditTextInputLayout;
+
     @BindView(R.id.user_input)
-    EditText noteEditText;
+    TextInputEditText noteEditText;
 
     public static NoteDialogFragment newInstance(OCShare share) {
         NoteDialogFragment frag = new NoteDialogFragment();
@@ -107,7 +114,7 @@ public class NoteDialogFragment extends DialogFragment implements DialogInterfac
         // Setup layout
         noteEditText.setText(share.getNote());
         noteEditText.requestFocus();
-        noteEditText.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
+        ThemeUtils.colorTextInputLayout(noteEditTextInputLayout, accentColor);
 
         // Build the dialog
         AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());

+ 21 - 0
src/main/java/com/owncloud/android/utils/ThemeUtils.java

@@ -40,6 +40,7 @@ import android.widget.SeekBar;
 
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 import com.google.android.material.snackbar.Snackbar;
+import com.google.android.material.textfield.TextInputLayout;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
@@ -367,6 +368,26 @@ public final class ThemeUtils {
         }
     }
 
+    /**
+     * Sets the color of the  TextInputLayout to {@code color} for hint text and box stroke.
+     *
+     * @param textInputLayout the TextInputLayout instance
+     * @param color the color to be used for the hint text and box stroke
+     */
+    public static void colorTextInputLayout(TextInputLayout textInputLayout, int color) {
+        textInputLayout.setBoxStrokeColor(color);
+        textInputLayout.setDefaultHintTextColor(new ColorStateList(
+            new int[][]{
+                new int[]{-android.R.attr.state_focused},
+                new int[]{android.R.attr.state_focused},
+            },
+            new int[]{
+                Color.GRAY,
+                color
+            }
+        ));
+    }
+
     public static void tintCheckbox(AppCompatCheckBox checkBox, int color) {
         CompoundButtonCompat.setButtonTintList(checkBox, new ColorStateList(
                 new int[][]{

+ 4 - 4
src/main/res/layout-land/account_setup.xml

@@ -175,7 +175,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content">
 
-					<EditText
+					<com.google.android.material.textfield.TextInputEditText
                         android:id="@+id/oAuthEntryPoint_1"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
@@ -197,7 +197,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content">
 
-					<EditText
+					<com.google.android.material.textfield.TextInputEditText
                         android:id="@+id/oAuthEntryPoint_2"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
@@ -220,7 +220,7 @@
 					android:layout_height="wrap_content"
 					android:visibility="gone">
 
-				<EditText
+				<com.google.android.material.textfield.TextInputEditText
                     android:id="@+id/account_username"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -241,7 +241,7 @@
 					app:passwordToggleDrawable="@drawable/password_visibility_selector"
 					app:passwordToggleTint="@color/white">
 
-                    <EditText
+                    <com.google.android.material.textfield.TextInputEditText
                         android:id="@+id/account_password"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"

+ 7 - 7
src/main/res/layout/account_setup.xml

@@ -81,7 +81,7 @@
 
                 <com.google.android.material.textfield.TextInputLayout
                 android:id="@+id/input_layout_hostUrl"
-                android:theme="@style/EditText"
+                android:theme="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content">
 
@@ -168,7 +168,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
-            <EditText
+            <com.google.android.material.textfield.TextInputEditText
                 android:id="@+id/oAuthEntryPoint_1"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -190,7 +190,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
-            <EditText
+            <com.google.android.material.textfield.TextInputEditText
                 android:id="@+id/oAuthEntryPoint_2"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -209,12 +209,12 @@
 
             <com.google.android.material.textfield.TextInputLayout
             android:id="@+id/input_layout_account_username"
-            android:theme="@style/EditText"
+            android:theme="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:visibility="gone">
 
-            <EditText
+            <com.google.android.material.textfield.TextInputEditText
                 android:id="@+id/account_username"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -231,12 +231,12 @@
             android:id="@+id/input_layout_account_password"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:theme="@style/EditText"
+            android:theme="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
             android:visibility="gone"
             app:passwordToggleDrawable="@drawable/password_visibility_selector"
             app:passwordToggleTint="@color/login_text_hint_color">
 
-            <EditText
+            <com.google.android.material.textfield.TextInputEditText
                 android:id="@+id/account_password"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"

+ 1 - 1
src/main/res/layout/choose_template.xml

@@ -32,7 +32,7 @@
         android:layout_height="0dp"
         android:layout_weight="1"></androidx.recyclerview.widget.RecyclerView>
 
-    <EditText
+    <com.google.android.material.textfield.TextInputEditText
         android:id="@+id/filename"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"

+ 1 - 1
src/main/res/layout/edit_box_dialog.xml

@@ -24,7 +24,7 @@
     android:orientation="vertical"
     android:padding="@dimen/standard_padding">
 
-    <EditText
+    <com.google.android.material.textfield.TextInputEditText
         android:id="@+id/user_input"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"

+ 22 - 14
src/main/res/layout/note_dialog.xml

@@ -20,21 +20,29 @@
   along with this program. If not, see <https://www.gnu.org/licenses/>.
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:gravity="clip_horizontal"
-              android:orientation="vertical"
-              android:padding="@dimen/standard_padding">
-
-    <EditText
-        android:id="@+id/user_input"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="clip_horizontal"
+    android:orientation="vertical"
+    android:padding="@dimen/standard_padding">
+
+    <com.google.android.material.textfield.TextInputLayout
+        android:id="@+id/user_input_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:hint="@string/hint_note"
-        android:inputType="textCapSentences|textMultiLine|textNoSuggestions"
-        android:minLines="3"
-        android:lines="5"
-        android:scrollbars="vertical"
-        android:importantForAutofill="no"/>
+        style="@style/TextInputLayout"
+        android:hint="@string/hint_note">
+
+        <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/user_input"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:importantForAutofill="no"
+            android:inputType="textCapSentences|textMultiLine|textNoSuggestions"
+            android:lines="5"
+            android:minLines="3"
+            android:scrollbars="vertical" />
+
+    </com.google.android.material.textfield.TextInputLayout>
 
 </LinearLayout>

+ 5 - 5
src/main/res/layout/passcodelock.xml

@@ -51,7 +51,7 @@
         android:layout_height="wrap_content"
         android:gravity="center_horizontal" >
 
-        <EditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/txt0"
             android:focusable="true"
             style="@style/PassCodeStyle"
@@ -61,9 +61,9 @@
             android:hint="@string/hidden_character"
             android:textCursorDrawable="@null">
             <requestFocus/>
-        </EditText>
+        </com.google.android.material.textfield.TextInputEditText>
 
-        <EditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/txt1"
             style="@style/PassCodeStyle"
             android:cursorVisible="true"
@@ -72,7 +72,7 @@
             android:hint="@string/hidden_character"
             android:textCursorDrawable="@null" />
 
-        <EditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/txt2"
             style="@style/PassCodeStyle"
             android:cursorVisible="true"
@@ -81,7 +81,7 @@
             android:hint="@string/hidden_character"
             android:textCursorDrawable="@null" />
 
-        <EditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/txt3"
             style="@style/PassCodeStyle"
             android:cursorVisible="true"

+ 3 - 2
src/main/res/layout/password_dialog.xml

@@ -26,9 +26,10 @@
     <com.google.android.material.textfield.TextInputLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:theme="@style/TextInputLayout"
         app:passwordToggleDrawable="@drawable/password_visibility_selector">
 
-        <EditText
+        <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/share_password"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
@@ -37,7 +38,7 @@
             android:inputType="textPassword"
             android:layout_margin="@dimen/standard_margin"
             android:autofillHints="password">
-        </EditText>
+        </com.google.android.material.textfield.TextInputEditText>
 
     </com.google.android.material.textfield.TextInputLayout>
 

+ 1 - 1
src/main/res/layout/setup_encryption_dialog.xml

@@ -41,7 +41,7 @@
         android:textIsSelectable="true"
         android:visibility="gone" />
 
-    <EditText
+    <com.google.android.material.textfield.TextInputEditText
         android:id="@+id/encryption_passwordInput"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"

+ 1 - 1
src/main/res/layout/upload_file_dialog.xml

@@ -33,7 +33,7 @@
         android:text="@string/upload_file_dialog_filename"
         tools:text="@string/upload_file_dialog_filename"/>
 
-    <EditText
+    <com.google.android.material.textfield.TextInputEditText
         android:id="@+id/user_input"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"

+ 2 - 4
src/main/res/values/styles.xml

@@ -265,10 +265,8 @@
 	<style name="NextcloudTextAppearanceMedium" parent="@style/TextAppearance.AppCompat.Medium">
 	</style>
 
-	<style name="EditText" parent="Theme.AppCompat.Light">
-		<item name="colorControlActivated">@color/login_text_color</item>
-		<item name="colorControlNormal">@color/login_text_color</item>
-		<item name="android:textColorHint">@color/login_text_color</item>
+	<style name="TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
+
 	</style>
 
 	<style name="AppTabTextAppearance" parent="@style/TextAppearance.Design.Tab">