Style changes for Pointer fill color settings.
Fix: 362455374
Test: Manual. Visual Changes only.
Flag: android.view.flags.enable_vector_cursor_a11y_settings
Change-Id: Id7a9d7eef540ea33f6bb47451b3d5c25328f9707
diff --git a/res/drawable/pointer_fill_check_24dp.xml b/res/drawable/pointer_fill_check_24dp.xml
new file mode 100644
index 0000000..c4b39d1
--- /dev/null
+++ b/res/drawable/pointer_fill_check_24dp.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"
+ android:fillColor="@android:color/white"/>
+</vector>
diff --git a/res/drawable/pointer_icon_fill_color_background.xml b/res/drawable/pointer_icon_fill_color_background.xml
new file mode 100644
index 0000000..20deb5c
--- /dev/null
+++ b/res/drawable/pointer_icon_fill_color_background.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2024 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:insetBottom="@dimen/pointer_fill_style_circle_offset"
+ android:insetLeft="@dimen/pointer_fill_style_circle_offset"
+ android:insetRight="@dimen/pointer_fill_style_circle_offset"
+ android:insetTop="@dimen/pointer_fill_style_circle_offset">
+ <shape android:shape="oval">
+ <size
+ android:width="@dimen/pointer_fill_style_circle_inner_diameter"
+ android:height="@dimen/pointer_fill_style_circle_inner_diameter" />
+ <solid android:color="@android:color/white" />
+ </shape>
+</inset>
diff --git a/res/drawable/pointer_icon_fill_color_foreground.xml b/res/drawable/pointer_icon_fill_color_foreground.xml
new file mode 100644
index 0000000..3d41620
--- /dev/null
+++ b/res/drawable/pointer_icon_fill_color_foreground.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2024 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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_selected="true" android:state_hovered="true">
+ <layer-list>
+ <item>
+ <shape android:shape="oval">
+ <size android:width="@dimen/pointer_fill_style_circle_hover_selected_diameter"
+ android:height="@dimen/pointer_fill_style_circle_hover_selected_diameter" />
+ <stroke android:width="@dimen/pointer_fill_style_shape_hovered_stroke"
+ android:color="@color/pointer_fill_outline_color" />
+ </shape>
+ </item>
+ <item
+ android:top="@dimen/pointer_fill_style_checkmark_hovered_padding"
+ android:left="@dimen/pointer_fill_style_checkmark_hovered_padding"
+ android:bottom="@dimen/pointer_fill_style_checkmark_hovered_padding"
+ android:right="@dimen/pointer_fill_style_checkmark_hovered_padding"
+ android:drawable="@drawable/pointer_fill_check_24dp" />
+ </layer-list>
+ </item>
+ <item android:state_selected="true">
+ <layer-list>
+ <item>
+ <inset android:insetTop="@dimen/pointer_fill_style_circle_selected_offset"
+ android:insetLeft="@dimen/pointer_fill_style_circle_selected_offset"
+ android:insetBottom="@dimen/pointer_fill_style_circle_selected_offset"
+ android:insetRight="@dimen/pointer_fill_style_circle_selected_offset">
+ <shape android:shape="oval">
+ <size android:width="@dimen/pointer_fill_style_circle_selected_diameter"
+ android:height="@dimen/pointer_fill_style_circle_selected_diameter" />
+ <stroke android:width="@dimen/pointer_fill_style_shape_selected_stroke"
+ android:color="@color/pointer_fill_outline_color" />
+ </shape>
+ </inset>
+ </item>
+ <item
+ android:top="@dimen/pointer_fill_style_checkmark_selected_padding"
+ android:left="@dimen/pointer_fill_style_checkmark_selected_padding"
+ android:bottom="@dimen/pointer_fill_style_checkmark_selected_padding"
+ android:right="@dimen/pointer_fill_style_checkmark_selected_padding"
+ android:drawable="@drawable/pointer_fill_check_24dp" />
+ </layer-list>
+ </item>
+ <item android:state_hovered="true">
+ <shape android:shape="oval">
+ <size android:width="@dimen/pointer_fill_style_circle_hover_diameter"
+ android:height="@dimen/pointer_fill_style_circle_hover_diameter" />
+ <stroke android:width="@dimen/pointer_fill_style_shape_hovered_stroke"
+ android:color="@color/pointer_fill_outline_color" />
+ </shape>
+ </item>
+</selector>
diff --git a/res/drawable/pointer_icon_fill_style_background.xml b/res/drawable/pointer_icon_fill_container_background.xml
similarity index 87%
rename from res/drawable/pointer_icon_fill_style_background.xml
rename to res/drawable/pointer_icon_fill_container_background.xml
index 1e98cf5..ca930a7 100644
--- a/res/drawable/pointer_icon_fill_style_background.xml
+++ b/res/drawable/pointer_icon_fill_container_background.xml
@@ -17,6 +17,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle">
- <corners android:radius="16dp" />
- <solid android:color="?androidprv:attr/materialColorSurface"/>
+ <corners android:radius="20dp" />
+ <solid android:color="?androidprv:attr/materialColorSurfaceContainerHigh"/>
</shape>
diff --git a/res/layout/pointer_icon_fill_style_layout.xml b/res/layout/pointer_icon_fill_style_layout.xml
index 1fa9baf..63c8ebd 100644
--- a/res/layout/pointer_icon_fill_style_layout.xml
+++ b/res/layout/pointer_icon_fill_style_layout.xml
@@ -16,6 +16,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
@@ -30,73 +31,149 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/pointer_fill_style_circle_padding"
android:text="@string/pointer_fill_style"
+ android:textSize="14sp"
+ android:textColor="?androidprv:attr/materialColorPrimary"
android:textAlignment="viewStart"
- android:textAppearance="?android:attr/textAppearanceListItem" />
+ android:fontWeight="500" />
- <HorizontalScrollView
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ <LinearLayout
+ android:id="@+id/button_holder"
+ android:layout_width="@dimen/pointer_fill_container_max_width"
+ android:layout_height="@dimen/pointer_fill_container_height"
+ android:layout_marginBottom="@dimen/pointer_fill_style_circle_padding"
+ android:layout_marginTop="@dimen/pointer_fill_style_circle_padding"
+ android:background="@drawable/pointer_icon_fill_container_background"
+ android:gravity="center"
+ android:paddingTop="@dimen/pointer_fill_style_container_padding"
+ android:paddingBottom="@dimen/pointer_fill_style_container_padding">
- <LinearLayout
- android:id="@+id/button_holder"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/pointer_fill_style_circle_padding"
- android:layout_marginTop="@dimen/pointer_fill_style_circle_padding"
- android:background="@drawable/pointer_icon_fill_style_background"
- android:gravity="center_horizontal"
- android:padding="@dimen/pointer_fill_style_circle_padding">
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="4" />
- <ImageView
- android:id="@+id/button_black"
- android:layout_width="@dimen/pointer_fill_style_circle_diameter"
- android:layout_height="@dimen/pointer_fill_style_circle_diameter"
- android:layout_margin="@dimen/pointer_fill_style_circle_padding"
- android:adjustViewBounds="true"
- android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
- android:contentDescription="@string/pointer_fill_style_black_button"
- android:scaleType="fitCenter" />
+ <ImageView
+ android:id="@+id/button_black"
+ android:layout_width="@dimen/pointer_fill_style_circle_diameter"
+ android:layout_weight="0"
+ android:layout_height="@dimen/pointer_fill_style_circle_diameter"
+ android:adjustViewBounds="true"
+ android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
+ android:contentDescription="@string/pointer_fill_style_black_button"
+ android:scaleType="center"
+ android:background="@drawable/pointer_icon_fill_color_background"
+ android:src="@drawable/pointer_icon_fill_color_foreground" />
- <ImageView
- android:id="@+id/button_green"
- android:layout_width="@dimen/pointer_fill_style_circle_diameter"
- android:layout_height="@dimen/pointer_fill_style_circle_diameter"
- android:layout_margin="@dimen/pointer_fill_style_circle_padding"
- android:adjustViewBounds="true"
- android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
- android:contentDescription="@string/pointer_fill_style_green_button"
- android:scaleType="fitCenter" />
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="3" />
- <ImageView
- android:id="@+id/button_yellow"
- android:layout_width="@dimen/pointer_fill_style_circle_diameter"
- android:layout_height="@dimen/pointer_fill_style_circle_diameter"
- android:layout_margin="@dimen/pointer_fill_style_circle_padding"
- android:adjustViewBounds="true"
- android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
- android:contentDescription="@string/pointer_fill_style_yellow_button"
- android:scaleType="fitCenter" />
+ <ImageView
+ android:id="@+id/button_green"
+ android:layout_width="@dimen/pointer_fill_style_circle_diameter"
+ android:layout_weight="0"
+ android:layout_height="@dimen/pointer_fill_style_circle_diameter"
+ android:adjustViewBounds="true"
+ android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
+ android:contentDescription="@string/pointer_fill_style_green_button"
+ android:scaleType="center"
+ android:background="@drawable/pointer_icon_fill_color_background"
+ android:src="@drawable/pointer_icon_fill_color_foreground" />
- <ImageView
- android:id="@+id/button_pink"
- android:layout_width="@dimen/pointer_fill_style_circle_diameter"
- android:layout_height="@dimen/pointer_fill_style_circle_diameter"
- android:layout_margin="@dimen/pointer_fill_style_circle_padding"
- android:adjustViewBounds="true"
- android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
- android:contentDescription="@string/pointer_fill_style_pink_button"
- android:scaleType="fitCenter" />
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="3" />
- <ImageView
- android:id="@+id/button_blue"
- android:layout_width="@dimen/pointer_fill_style_circle_diameter"
- android:layout_height="@dimen/pointer_fill_style_circle_diameter"
- android:layout_margin="@dimen/pointer_fill_style_circle_padding"
- android:adjustViewBounds="true"
- android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
- android:contentDescription="@string/pointer_fill_style_blue_button"
- android:scaleType="fitCenter" />
- </LinearLayout>
- </HorizontalScrollView>
+ <ImageView
+ android:id="@+id/button_red"
+ android:layout_width="@dimen/pointer_fill_style_circle_diameter"
+ android:layout_weight="0"
+ android:layout_height="@dimen/pointer_fill_style_circle_diameter"
+ android:adjustViewBounds="true"
+ android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
+ android:contentDescription="@string/pointer_fill_style_red_button"
+ android:scaleType="center"
+ android:background="@drawable/pointer_icon_fill_color_background"
+ android:src="@drawable/pointer_icon_fill_color_foreground" />
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="3" />
+
+ <ImageView
+ android:id="@+id/button_pink"
+ android:layout_width="@dimen/pointer_fill_style_circle_diameter"
+ android:layout_weight="0"
+ android:layout_height="@dimen/pointer_fill_style_circle_diameter"
+ android:adjustViewBounds="true"
+ android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
+ android:contentDescription="@string/pointer_fill_style_pink_button"
+ android:scaleType="center"
+ android:background="@drawable/pointer_icon_fill_color_background"
+ android:src="@drawable/pointer_icon_fill_color_foreground" />
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="3" />
+
+ <ImageView
+ android:id="@+id/button_blue"
+ android:layout_width="@dimen/pointer_fill_style_circle_diameter"
+ android:layout_weight="0"
+ android:layout_height="@dimen/pointer_fill_style_circle_diameter"
+ android:adjustViewBounds="true"
+ android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
+ android:contentDescription="@string/pointer_fill_style_blue_button"
+ android:scaleType="center"
+ android:background="@drawable/pointer_icon_fill_color_background"
+ android:src="@drawable/pointer_icon_fill_color_foreground" />
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="3" />
+
+ <ImageView
+ android:id="@+id/button_purple"
+ android:layout_width="@dimen/pointer_fill_style_circle_diameter"
+ android:layout_weight="0"
+ android:layout_height="@dimen/pointer_fill_style_circle_diameter"
+ android:adjustViewBounds="true"
+ android:maxWidth="@dimen/pointer_fill_style_circle_diameter"
+ android:contentDescription="@string/pointer_fill_style_purple_button"
+ android:scaleType="center"
+ android:background="@drawable/pointer_icon_fill_color_background"
+ android:src="@drawable/pointer_icon_fill_color_foreground" />
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:focusable="false"
+ android:clickable="false"
+ android:importantForAccessibility="no"
+ android:layout_weight="4" />
+ </LinearLayout>
</LinearLayout>
diff --git a/res/layout/pointer_icon_stroke_style_layout.xml b/res/layout/pointer_icon_stroke_style_layout.xml
index acf919a..01b58b2 100644
--- a/res/layout/pointer_icon_stroke_style_layout.xml
+++ b/res/layout/pointer_icon_stroke_style_layout.xml
@@ -15,6 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
@@ -29,7 +30,10 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/pointer_stroke_style_padding"
android:text="@string/pointer_stroke_style"
+ android:textSize="14sp"
+ android:textColor="?androidprv:attr/materialColorPrimary"
android:textAlignment="viewStart"
+ android:fontWeight="500"
android:textAppearance="?android:attr/textAppearanceListItem" />
<RadioGroup
@@ -38,23 +42,31 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="@dimen/pointer_stroke_style_padding"
- android:layout_marginBottom="@dimen/pointer_stroke_style_padding"
- android:padding="@dimen/pointer_stroke_style_padding">
+ android:layout_marginBottom="@dimen/pointer_stroke_style_padding">
<RadioButton android:id="@+id/stroke_style_white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/pointer_stroke_style_padding"
- android:text="@string/pointer_stroke_style_name_white"/>
+ android:paddingStart="@dimen/pointer_stroke_style_text_padding"
+ android:text="@string/pointer_stroke_style_name_white"
+ android:textSize="20sp"
+ android:textAppearance="?android:attr/textAppearanceListItem" />
<RadioButton android:id="@+id/stroke_style_black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/pointer_stroke_style_padding"
- android:text="@string/pointer_stroke_style_name_black"/>
+ android:paddingStart="@dimen/pointer_stroke_style_text_padding"
+ android:text="@string/pointer_stroke_style_name_black"
+ android:textSize="20sp"
+ android:textAppearance="?android:attr/textAppearanceListItem" />
<RadioButton android:id="@+id/stroke_style_none"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/pointer_stroke_style_padding"
- android:text="@string/pointer_stroke_style_name_none"/>
+ android:paddingStart="@dimen/pointer_stroke_style_text_padding"
+ android:text="@string/pointer_stroke_style_name_none"
+ android:textSize="20sp"
+ android:textAppearance="?android:attr/textAppearanceListItem" />
</RadioGroup>
</LinearLayout>
\ No newline at end of file
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index fb73e6e..57453ce 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -76,5 +76,8 @@
<!-- Switch bar disabled state color-->
<color name="switch_bar_state_disabled_color">#1FE3E3E3</color>
+
+ <!-- Pointer fill color setting outline color-->
+ <color name="pointer_fill_outline_color">#FFFFFF</color>
</resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 391a304..55735e6 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -28,4 +28,9 @@
<!-- Lock pattern view size, align sysui biometric_auth_pattern_view_size -->
<dimen name="biometric_auth_pattern_view_size">348dp</dimen>
+
+ <!-- Pointer fill color preference -->
+ <dimen name="pointer_fill_container_height">104dp</dimen>
+ <dimen name="pointer_fill_container_max_width">448dp</dimen>
+ <dimen name="pointer_fill_style_container_padding">32dp</dimen>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 6d92526..95b38cb 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -218,4 +218,7 @@
<!-- Switch bar disabled state color-->
<color name="switch_bar_state_disabled_color">#1F1F1F1F</color>
+
+ <!-- Pointer fill color setting outline color-->
+ <color name="pointer_fill_outline_color">#000000</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 2a9b433..c9a67e4 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -175,11 +175,23 @@
<dimen name="keyboard_picker_text_size">16sp</dimen>
<!-- Pointer -->
- <dimen name="pointer_fill_style_circle_diameter">52dp</dimen>
- <dimen name="pointer_fill_style_circle_padding">8dp</dimen>
- <dimen name="pointer_fill_style_shape_default_stroke">1dp</dimen>
- <dimen name="pointer_fill_style_shape_hovered_stroke">3dp</dimen>
+ <dimen name="pointer_fill_container_height">88dp</dimen>
+ <dimen name="pointer_fill_container_max_width">448dp</dimen>
+ <dimen name="pointer_fill_style_container_padding">32dp</dimen>
+ <dimen name="pointer_fill_style_circle_diameter">56dp</dimen>
+ <dimen name="pointer_fill_style_circle_hover_selected_diameter">52dp</dimen>
+ <dimen name="pointer_fill_style_circle_hover_diameter">56dp</dimen>
+ <dimen name="pointer_fill_style_circle_selected_diameter">50dp</dimen>
+ <dimen name="pointer_fill_style_circle_inner_diameter">40dp</dimen>
+ <dimen name="pointer_fill_style_circle_offset">8dp</dimen>
+ <dimen name="pointer_fill_style_circle_padding">16dp</dimen>
+ <dimen name="pointer_fill_style_circle_selected_offset">3dp</dimen>
+ <dimen name="pointer_fill_style_checkmark_selected_padding">14dp</dimen>
+ <dimen name="pointer_fill_style_checkmark_hovered_padding">17dp</dimen>
+ <dimen name="pointer_fill_style_shape_selected_stroke">2dp</dimen>
+ <dimen name="pointer_fill_style_shape_hovered_stroke">4dp</dimen>
<dimen name="pointer_stroke_style_padding">8dp</dimen>
+ <dimen name="pointer_stroke_style_text_padding">21dp</dimen>
<dimen name="pointer_scale_padding">8dp</dimen>
<item name="pointer_scale_size_start" format="float" type="dimen">1.0</item>
<item name="pointer_scale_size_end" format="float" type="dimen">2.5</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2270804..41bc9ed 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4538,14 +4538,16 @@
<string name="pointer_fill_style_black_button">Change pointer fill style to black</string>
<!-- Content description for green pointer fill style. [CHAR LIMIT=60] -->
<string name="pointer_fill_style_green_button">Change pointer fill style to green</string>
- <!-- Content description for yellow pointer fill style. [CHAR LIMIT=60] -->
- <string name="pointer_fill_style_yellow_button">Change pointer fill style to yellow</string>
+ <!-- Content description for red pointer fill style. [CHAR LIMIT=60] -->
+ <string name="pointer_fill_style_red_button">Change pointer fill style to red</string>
<!-- Content description for pink pointer fill style. [CHAR LIMIT=60] -->
<string name="pointer_fill_style_pink_button">Change pointer fill style to pink</string>
<!-- Content description for blue pointer fill style. [CHAR LIMIT=60] -->
<string name="pointer_fill_style_blue_button">Change pointer fill style to blue</string>
- <!-- Title text for mouse pointer stroke style. [CHAR LIMIT=35] -->
- <string name="pointer_stroke_style">Pointer stroke style</string>
+ <!-- Content description for purple pointer fill style. [CHAR LIMIT=60] -->
+ <string name="pointer_fill_style_purple_button">Change pointer fill style to purple</string>
+ <!-- Title text for mouse pointer stroke color. [CHAR LIMIT=35] -->
+ <string name="pointer_stroke_style">Pointer stroke color</string>
<!-- White value for pointer stroke style. [CHAR LIMIT=35] -->
<string name="pointer_stroke_style_name_white">White</string>
<!-- Black value pointer stroke style. [CHAR LIMIT=35] -->
diff --git a/src/com/android/settings/inputmethod/PointerFillStylePreference.java b/src/com/android/settings/inputmethod/PointerFillStylePreference.java
index 3ea656f..52535f9 100644
--- a/src/com/android/settings/inputmethod/PointerFillStylePreference.java
+++ b/src/com/android/settings/inputmethod/PointerFillStylePreference.java
@@ -19,21 +19,14 @@
import static android.view.PointerIcon.POINTER_ICON_VECTOR_STYLE_FILL_BLUE;
import static android.view.PointerIcon.POINTER_ICON_VECTOR_STYLE_FILL_GREEN;
import static android.view.PointerIcon.POINTER_ICON_VECTOR_STYLE_FILL_PINK;
-import static android.view.PointerIcon.POINTER_ICON_VECTOR_STYLE_FILL_YELLOW;
+import static android.view.PointerIcon.POINTER_ICON_VECTOR_STYLE_FILL_PURPLE;
+import static android.view.PointerIcon.POINTER_ICON_VECTOR_STYLE_FILL_RED;
import android.content.Context;
-import android.content.res.Resources;
import android.content.res.TypedArray;
-import android.graphics.BlendMode;
-import android.graphics.BlendModeColorFilter;
import android.graphics.Color;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.GradientDrawable;
-import android.graphics.drawable.StateListDrawable;
import android.provider.Settings;
import android.util.AttributeSet;
-import android.util.StateSet;
-import android.view.Gravity;
import android.view.PointerIcon;
import android.view.View;
import android.widget.ImageView;
@@ -45,7 +38,6 @@
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
-import com.android.settingslib.Utils;
public class PointerFillStylePreference extends Preference {
@@ -62,7 +54,7 @@
super.onBindViewHolder(holder);
mButtonHolder = (LinearLayout) holder.findViewById(R.id.button_holder);
- // Intercept hover events so setting row does not highlight when hovering buttons.
+ // Intercept hover events so container does not highlight when hovering buttons.
if (mButtonHolder != null) {
mButtonHolder.setOnHoverListener((v, e) -> true);
}
@@ -73,12 +65,14 @@
currentStyle);
initStyleButton(holder, R.id.button_green, POINTER_ICON_VECTOR_STYLE_FILL_GREEN,
currentStyle);
- initStyleButton(holder, R.id.button_yellow, POINTER_ICON_VECTOR_STYLE_FILL_YELLOW,
+ initStyleButton(holder, R.id.button_red, POINTER_ICON_VECTOR_STYLE_FILL_RED,
currentStyle);
initStyleButton(holder, R.id.button_pink, POINTER_ICON_VECTOR_STYLE_FILL_PINK,
currentStyle);
initStyleButton(holder, R.id.button_blue, POINTER_ICON_VECTOR_STYLE_FILL_BLUE,
currentStyle);
+ initStyleButton(holder, R.id.button_purple, POINTER_ICON_VECTOR_STYLE_FILL_PURPLE,
+ currentStyle);
}
private void initStyleButton(@NonNull PreferenceViewHolder holder, int id, int style,
@@ -90,70 +84,25 @@
int[] attrs = {com.android.internal.R.attr.pointerIconVectorFill};
try (TypedArray ta = getContext().obtainStyledAttributes(
PointerIcon.vectorFillStyleToResource(style), attrs)) {
- button.setBackground(getBackgroundSelector(ta.getColor(0, Color.BLACK)));
+ button.getBackground().setTint(ta.getColor(0, Color.BLACK));
}
- button.setForeground(getForegroundDrawable(style, currentStyle));
- button.setForegroundGravity(Gravity.CENTER);
button.setOnClickListener(
(v) -> {
getPreferenceDataStore().putInt(Settings.System.POINTER_FILL_STYLE, style);
setButtonChecked(id);
});
+ button.setSelected(style == currentStyle);
button.setPointerIcon(PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_ARROW));
}
- // Generate background instead of defining in XML so we can use res color from the platform.
- private StateListDrawable getBackgroundSelector(int color) {
- StateListDrawable background = new StateListDrawable();
- Resources res = getContext().getResources();
- int ovalSize = res.getDimensionPixelSize(R.dimen.pointer_fill_style_circle_diameter);
- background.setBounds(0, 0, ovalSize, ovalSize);
-
- // Add hovered state first! The order states are added matters for a StateListDrawable.
- GradientDrawable hoveredOval = new GradientDrawable();
- hoveredOval.setColor(color);
- int textColor = Utils.getColorAttr(getContext(),
- com.android.internal.R.attr.materialColorOutline).getDefaultColor();
- hoveredOval.setStroke(
- res.getDimensionPixelSize(R.dimen.pointer_fill_style_shape_hovered_stroke),
- textColor);
- hoveredOval.setSize(ovalSize, ovalSize);
- hoveredOval.setBounds(0, 0, ovalSize, ovalSize);
- hoveredOval.setCornerRadius(ovalSize / 2f);
- background.addState(new int[]{android.R.attr.state_hovered}, hoveredOval);
-
- GradientDrawable defaultOval = new GradientDrawable();
- defaultOval.setColor(color);
- defaultOval.setStroke(
- res.getDimensionPixelSize(R.dimen.pointer_fill_style_shape_default_stroke),
- textColor);
- defaultOval.setSize(ovalSize, ovalSize);
- defaultOval.setBounds(0, 0, ovalSize, ovalSize);
- defaultOval.setCornerRadius(ovalSize / 2f);
- background.addState(StateSet.WILD_CARD, defaultOval);
-
- return background;
- }
-
- private Drawable getForegroundDrawable(int style, int currentStyle) {
- Resources res = getContext().getResources();
- int ovalSize = res.getDimensionPixelSize(R.dimen.pointer_fill_style_circle_diameter);
- Drawable checkMark = getContext().getDrawable(R.drawable.ic_check_24dp);
- int padding = res.getDimensionPixelSize(R.dimen.pointer_fill_style_circle_padding) / 2;
- checkMark.setBounds(padding, padding, ovalSize - padding, ovalSize - padding);
- checkMark.setColorFilter(new BlendModeColorFilter(Color.WHITE, BlendMode.SRC_IN));
- checkMark.setAlpha(style == currentStyle ? 255 : 0);
- return checkMark;
- }
-
private void setButtonChecked(int id) {
if (mButtonHolder == null) {
return;
}
for (int i = 0; i < mButtonHolder.getChildCount(); i++) {
View child = mButtonHolder.getChildAt(i);
- if (child != null) {
- child.getForeground().setAlpha(child.getId() == id ? 255 : 0);
+ if (child instanceof ImageView) {
+ child.setSelected(child.getId() == id);
}
}
}