Переглянути джерело

Use AppCompat 22.1 elements; fix MDTintHelper EditText inactivated state

plusCubed 10 роки тому
батько
коміт
615f8be9fd

+ 0 - 2
library/src/main/java/com/afollestad/materialdialogs/DialogInit.java

@@ -5,9 +5,7 @@ import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
-import android.text.Editable;
 import android.text.InputType;
-import android.text.TextWatcher;
 import android.text.method.LinkMovementMethod;
 import android.text.method.PasswordTransformationMethod;
 import android.view.View;

+ 24 - 9
library/src/main/java/com/afollestad/materialdialogs/internal/MDTintHelper.java

@@ -1,11 +1,13 @@
 package com.afollestad.materialdialogs.internal;
 
+import android.content.Context;
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.support.v4.content.ContextCompat;
 import android.support.v4.graphics.drawable.DrawableCompat;
+import android.support.v7.widget.AppCompatEditText;
 import android.widget.CheckBox;
 import android.widget.EditText;
 import android.widget.ProgressBar;
@@ -25,7 +27,7 @@ public class MDTintHelper {
                 new int[]{-android.R.attr.state_checked},
                 new int[]{android.R.attr.state_checked}
         }, new int[]{
-                DialogUtils.resolveColor(radioButton.getContext(), android.R.attr.textColorSecondary),
+                DialogUtils.resolveColor(radioButton.getContext(), R.attr.colorControlNormal),
                 color
         });
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -92,14 +94,27 @@ public class MDTintHelper {
         }
     }
 
+    private static ColorStateList createEditTextColorStateList(Context context, int color) {
+        int[][] states = new int[3][];
+        int[] colors = new int[3];
+        int i = 0;
+        states[i] = new int[]{-android.R.attr.state_enabled};
+        colors[i] = DialogUtils.resolveColor(context, R.attr.colorControlNormal);
+        i++;
+        states[i] = new int[]{-android.R.attr.state_pressed, -android.R.attr.state_focused};
+        colors[i] = DialogUtils.resolveColor(context, R.attr.colorControlNormal);
+        i++;
+        states[i] = new int[]{};
+        colors[i] = color;
+        return new ColorStateList(states, colors);
+    }
+
     public static void setTint(EditText editText, int color) {
-        ColorStateList s1 = ColorStateList.valueOf(color);
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            editText.setBackgroundTintList(s1);
-        } else {
-            Drawable drawable = DrawableCompat.wrap(ContextCompat.getDrawable(editText.getContext(), R.drawable.abc_edit_text_material));
-            DrawableCompat.setTintList(drawable, s1);
-            DialogUtils.setBackgroundCompat(editText, drawable);
+        ColorStateList editTextColorStateList = createEditTextColorStateList(editText.getContext(), color);
+        if (editText instanceof AppCompatEditText) {
+            ((AppCompatEditText) editText).setSupportBackgroundTintList(editTextColorStateList);
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            editText.setBackgroundTintList(editTextColorStateList);
         }
     }
 
@@ -108,7 +123,7 @@ public class MDTintHelper {
                 new int[]{-android.R.attr.state_checked},
                 new int[]{android.R.attr.state_checked}
         }, new int[]{
-                DialogUtils.resolveColor(box.getContext(), android.R.attr.textColorSecondary),
+                DialogUtils.resolveColor(box.getContext(), R.attr.colorControlNormal),
                 color
         });
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

+ 0 - 25
library/src/main/res/drawable/md_dialog_background.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<inset xmlns:android="http://schemas.android.com/apk/res/android"
-    android:insetTop="16dp"
-    android:insetBottom="16dp"
-    android:insetLeft="16dp"
-    android:insetRight="16dp">
-    <shape android:shape="rectangle">
-        <corners android:radius="2dp" />
-        <solid android:color="@color/background_floating_material_light" />
-    </shape>
-</inset>

+ 0 - 25
library/src/main/res/drawable/md_dialog_background_dark.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<inset xmlns:android="http://schemas.android.com/apk/res/android"
-    android:insetTop="16dp"
-    android:insetBottom="16dp"
-    android:insetLeft="16dp"
-    android:insetRight="16dp">
-    <shape android:shape="rectangle">
-        <corners android:radius="2dp" />
-        <solid android:color="@color/background_floating_material_dark" />
-    </shape>
-</inset>

+ 6 - 8
library/src/main/res/values-v11/styles.xml

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-    <style name="MD_Light" parent="Theme.AppCompat.Light.Dialog">
-        <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
-        <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
+    <style name="MD_Light" parent="Theme.AppCompat.Light.Dialog.Alert">
+        <item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+        <item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
 
         <item name="md_divider">@color/md_divider_black</item>
         <item name="md_list_selector">@drawable/md_selector</item>
@@ -15,14 +15,13 @@
         <item name="android:actionModeBackground">@color/primary_material_dark</item>
         <item name="android:actionModeCloseDrawable">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
 
-        <item name="android:windowBackground">@drawable/md_dialog_background</item>
         <item name="android:windowAnimationStyle">@style/MD_WindowAnimation</item>
         <item name="android:backgroundDimEnabled">true</item>
     </style>
 
-    <style name="MD_Dark" parent="Theme.AppCompat.Dialog">
-        <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
-        <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
+    <style name="MD_Dark" parent="Theme.AppCompat.Dialog.Alert">
+        <item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+        <item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
 
         <item name="md_divider">@color/md_divider_white</item>
         <item name="md_list_selector">@drawable/md_selector_dark</item>
@@ -34,7 +33,6 @@
         <item name="android:actionModeBackground">@color/primary_material_dark</item>
         <item name="android:actionModeCloseDrawable">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
 
-        <item name="android:windowBackground">@drawable/md_dialog_background_dark</item>
         <item name="android:windowAnimationStyle">@style/MD_WindowAnimation</item>
         <item name="android:backgroundDimEnabled">true</item>
     </style>

+ 6 - 6
library/src/main/res/values-v21/styles.xml

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-    <style name="MD_Light" parent="Theme.AppCompat.Light.Dialog">
-        <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
-        <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
+    <style name="MD_Light" parent="Theme.AppCompat.Light.Dialog.Alert">
+        <item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+        <item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
 
         <item name="md_divider">@color/md_divider_black</item>
         <item name="md_list_selector">?android:selectableItemBackground</item>
@@ -13,9 +13,9 @@
         <item name="md_btn_negative_selector">@drawable/md_btn_selector_ripple</item>
     </style>
 
-    <style name="MD_Dark" parent="Theme.AppCompat.Dialog">
-        <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
-        <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
+    <style name="MD_Dark" parent="Theme.AppCompat.Dialog.Alert">
+        <item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
+        <item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
 
         <item name="md_divider">@color/md_divider_white</item>
         <item name="md_list_selector">?android:selectableItemBackground</item>

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

@@ -1,6 +1,6 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
 
-    <style name="MD_Light" parent="Theme.AppCompat.Light.Dialog">
+    <style name="MD_Light" parent="Theme.AppCompat.Light.Dialog.Alert">
         <item name="md_divider">@color/md_divider_black</item>
         <item name="md_list_selector">@drawable/md_selector</item>
         <item name="md_btn_stacked_selector">@drawable/md_selector</item>
@@ -8,12 +8,11 @@
         <item name="md_btn_neutral_selector">@drawable/md_btn_selector</item>
         <item name="md_btn_negative_selector">@drawable/md_btn_selector</item>
 
-        <item name="android:windowBackground">@drawable/md_dialog_background</item>
         <item name="android:windowAnimationStyle">@style/MD_WindowAnimation</item>
         <item name="android:backgroundDimEnabled">true</item>
     </style>
 
-    <style name="MD_Dark" parent="Theme.AppCompat.Dialog">
+    <style name="MD_Dark" parent="Theme.AppCompat.Dialog.Alert">
         <item name="md_divider">@color/md_divider_white</item>
         <item name="md_list_selector">@drawable/md_selector_dark</item>
         <item name="md_btn_stacked_selector">@drawable/md_selector_dark</item>
@@ -21,7 +20,6 @@
         <item name="md_btn_neutral_selector">@drawable/md_btn_selector_dark</item>
         <item name="md_btn_negative_selector">@drawable/md_btn_selector_dark</item>
 
-        <item name="android:windowBackground">@drawable/md_dialog_background_dark</item>
         <item name="android:windowAnimationStyle">@style/MD_WindowAnimation</item>
         <item name="android:backgroundDimEnabled">true</item>
     </style>

+ 2 - 2
sample/src/main/java/com/afollestad/materialdialogssample/ColorChooserDialog.java

@@ -13,7 +13,7 @@ import android.graphics.drawable.shapes.OvalShape;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.v4.app.DialogFragment;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.GridLayout;
 import android.view.View;
 import android.widget.FrameLayout;
@@ -123,7 +123,7 @@ public class ColorChooserDialog extends DialogFragment implements View.OnClickLi
         mCallback = (Callback) activity;
     }
 
-    public void show(ActionBarActivity context, int preselect) {
+    public void show(AppCompatActivity context, int preselect) {
         Bundle args = new Bundle();
         args.putInt("preselect", preselect);
         setArguments(args);

+ 2 - 2
sample/src/main/java/com/afollestad/materialdialogssample/FolderSelectorDialog.java

@@ -5,7 +5,7 @@ import android.app.Dialog;
 import android.os.Bundle;
 import android.os.Environment;
 import android.support.v4.app.DialogFragment;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 
 import com.afollestad.materialdialogs.MaterialDialog;
@@ -100,7 +100,7 @@ public class FolderSelectorDialog extends DialogFragment implements MaterialDial
         mCallback = (FolderSelectCallback) activity;
     }
 
-    public void show(ActionBarActivity context) {
+    public void show(AppCompatActivity context) {
         show(context.getSupportFragmentManager(), "FOLDER_SELECTOR");
     }
 

+ 2 - 3
sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.java

@@ -7,7 +7,7 @@ import android.graphics.drawable.ColorDrawable;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.StringRes;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
 import android.text.Editable;
 import android.text.Html;
 import android.text.InputType;
@@ -35,7 +35,7 @@ import java.io.File;
 /**
  * @author Aidan Follestad (afollestad)
  */
-public class MainActivity extends ActionBarActivity implements
+public class MainActivity extends AppCompatActivity implements
         FolderSelectorDialog.FolderSelectCallback, ColorChooserDialog.Callback {
 
     private Toast mToast;
@@ -504,7 +504,6 @@ public class MainActivity extends ActionBarActivity implements
             }
         });
 
-        //Workaround for CheckBox theming  on API 10 until AppCompat fix it
         int widgetColor = ThemeSingleton.get().widgetColor;
         MDTintHelper.setTint(checkbox,
                 widgetColor == 0 ? getResources().getColor(R.color.material_pink_500) : widgetColor);