summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael W <baddaemon87@gmail.com>2023-04-10 17:49:09 +0200
committerMichael Bestas <mkbestas@lineageos.org>2023-05-05 19:25:21 +0200
commitd65b3b60d58e31ee63307a539c8c5394bdbb76e7 (patch)
tree63747eee79a3827b958834b49adfa7e28000ab38
parenta9e6a18d1abd5f3ee2ec816d031f2a69ea1f6028 (diff)
DeskClock: Digital widget: Redesign
* Redesign the widget in terms of font, separator, spacing and colors * Provide separate theming for light and dark wallpapers - that way it's easier visible on various backgrounds * Provide an additional layout with a solid background - it also changes depending on the chosen wallpaper! * Let the user decide on insert, if transparent or solid should be used -> provide a configuration activity TBD (separate patch): * Landscape layout for widget and config activity Co-authored-by: Asher Simonds <dayanhammer@gmail.com> Change-Id: I4bab4ce31630e6d2a5a1c857db9a76356f66e0ce
-rw-r--r--AndroidManifest.xml11
-rw-r--r--res/drawable/widget_background.xml11
-rw-r--r--res/drawable/widget_configuration_background.xml14
-rw-r--r--res/layout-night/digital_widget_preview.xml59
-rw-r--r--res/layout/digital_widget.xml53
-rw-r--r--res/layout/digital_widget_configuration.xml132
-rw-r--r--res/layout/digital_widget_configuration_preview.xml60
-rw-r--r--res/layout/digital_widget_configuration_preview_solid_root.xml17
-rw-r--r--res/layout/digital_widget_configuration_preview_transparent_root.xml17
-rw-r--r--res/layout/digital_widget_darkbg_solid_theme_root.xml14
-rw-r--r--res/layout/digital_widget_darkbg_theme_root.xml14
-rw-r--r--res/layout/digital_widget_lightbg_solid_theme_root.xml14
-rw-r--r--res/layout/digital_widget_lightbg_theme_root.xml14
-rw-r--r--res/layout/digital_widget_preview.xml60
-rw-r--r--res/layout/digital_widget_sizer.xml35
-rw-r--r--res/layout/world_clock_remote_list_item.xml45
-rw-r--r--res/values-night/styles.xml15
-rw-r--r--res/values-sw600dp/dimens.xml8
-rw-r--r--res/values/attrs.xml13
-rw-r--r--res/values/cm_strings.xml7
-rw-r--r--res/values/colors.xml8
-rw-r--r--res/values/dimens.xml17
-rw-r--r--res/values/donottranslate.xml6
-rw-r--r--res/values/styles.xml161
-rw-r--r--res/xml/digital_appwidget.xml13
-rw-r--r--src/com/android/alarmclock/DigitalAppWidgetCityViewsFactory.java10
-rw-r--r--src/com/android/alarmclock/DigitalAppWidgetConfigurationActivity.java50
-rw-r--r--src/com/android/alarmclock/DigitalAppWidgetProvider.java60
-rw-r--r--src/com/android/alarmclock/WidgetUtils.java28
-rw-r--r--src/com/android/deskclock/Utils.java2
30 files changed, 857 insertions, 111 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2d1168ba6..7c127a02c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -22,7 +22,7 @@
<original-package android:name="com.android.alarmclock" />
<original-package android:name="com.android.deskclock" />
- <uses-sdk android:minSdkVersion="28" android:targetSdkVersion="33" />
+ <uses-sdk android:minSdkVersion="31" android:targetSdkVersion="33" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
@@ -295,6 +295,7 @@
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="com.android.deskclock.ON_DAY_CHANGE" />
<action android:name="com.android.deskclock.WORLD_CITIES_CHANGED" />
+ <action android:name="android.intent.action.CONFIGURATION_CHANGED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
@@ -305,5 +306,13 @@
android:name="com.android.alarmclock.DigitalAppWidgetCityService"
android:permission="android.permission.BIND_REMOTEVIEWS" />
+ <activity
+ android:name="com.android.alarmclock.DigitalAppWidgetConfigurationActivity"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetConfigurationTheme"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
+ </intent-filter>
+ </activity>
</application>
</manifest>
diff --git a/res/drawable/widget_background.xml b/res/drawable/widget_background.xml
new file mode 100644
index 000000000..4a9485a7d
--- /dev/null
+++ b/res/drawable/widget_background.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<shape android:shape="rectangle"
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/white" />
+ <corners android:radius="@dimen/widget_background_corner_radius" />
+</shape>
diff --git a/res/drawable/widget_configuration_background.xml b/res/drawable/widget_configuration_background.xml
new file mode 100644
index 000000000..33eb4a5a7
--- /dev/null
+++ b/res/drawable/widget_configuration_background.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<shape android:shape="rectangle"
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <stroke
+ android:width="1dp"
+ android:color="@color/system_neutral2_700" />
+ <solid android:color="@android:color/transparent"/>
+ <corners android:radius="@dimen/widget_configuration_background_corner_radius" />
+</shape>
diff --git a/res/layout-night/digital_widget_preview.xml b/res/layout-night/digital_widget_preview.xml
new file mode 100644
index 000000000..1b8a6115d
--- /dev/null
+++ b/res/layout-night/digital_widget_preview.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@android:id/background"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="top|center_horizontal"
+ android:orientation="vertical"
+ android:background="@drawable/widget_background"
+ android:backgroundTint="?appWidgetBackgroundTint"
+ android:padding="@dimen/widget_padding"
+ android:paddingTop="@dimen/widget_padding"
+ android:paddingBottom="@dimen/widget_padding"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetTransparentDarkBg">
+
+ <TextClock
+ android:id="@+id/clock"
+ android:textAppearance="?appWidgetTextAppearancePrimary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:ellipsize="none"
+ android:format12Hour="@string/lock_screen_12_hour_format"
+ android:format24Hour="@string/lock_screen_24_hour_format"
+ android:includeFontPadding="false"
+ android:singleLine="true"
+ android:textAlignment="center"
+ android:textSize="48sp"
+ tools:text="0123"
+ tools:textColor="@android:color/white"/>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:layout_marginTop="-10dp">
+
+ <TextClock
+ android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:ellipsize="none"
+ android:includeFontPadding="false"
+ android:singleLine="true"
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
+ android:format12Hour="@string/abbrev_wday_month_day_no_year_preview"
+ android:format24Hour="@string/abbrev_wday_month_day_no_year_preview"
+ tools:text="01. Jan, 2023"
+ tools:textColor="@android:color/white"
+ tools:textSize="@dimen/label_font_size"/>
+
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/digital_widget.xml b/res/layout/digital_widget.xml
index d09cba64c..3dfed7f84 100644
--- a/res/layout/digital_widget.xml
+++ b/res/layout/digital_widget.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
+ Copyright (C) 2023 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,60 +17,78 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/digital_widget"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@android:id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:gravity="top|center_horizontal"
- android:orientation="vertical">
+ android:background="@drawable/widget_background"
+ android:backgroundTint="?appWidgetBackgroundTint"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:padding="@dimen/widget_padding"
+ tools:theme="@style/Theme.DeskClock.DigitalWidgetDarkBg">
<TextClock
android:id="@+id/clock"
- style="@style/widget_big"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top"
+ android:layout_gravity="center_horizontal"
android:ellipsize="none"
android:format12Hour="@string/lock_screen_12_hour_format"
android:format24Hour="@string/lock_screen_24_hour_format"
android:includeFontPadding="false"
- android:singleLine="true" />
+ android:singleLine="true"
+ android:textAppearance="?appWidgetTextAppearancePrimary"
+ tools:text="0123"
+ tools:textColor="@android:color/white"
+ tools:textSize="@dimen/big_font_size" />
<LinearLayout
+ android:id="@+id/bottom_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top">
+ android:layout_marginTop="-10dp">
<TextClock
android:id="@+id/date"
- style="@style/widget_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="none"
android:includeFontPadding="false"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white" />
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
+ tools:text="01. Jan, 2023"
+ tools:textColor="@android:color/white"
+ tools:textSize="@dimen/label_font_size" />
<ImageView
android:id="@+id/nextAlarmIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
+ android:adjustViewBounds="true"
android:contentDescription="@null"
- android:scaleType="center" />
+ android:scaleType="fitCenter"
+ android:src="@drawable/ic_alarm"
+ android:tint="?appWidgetLabelTint"
+ app:tint="?appWidgetLabelTint"
+ tools:ignore="UseAppTint"
+ tools:tint="@color/white" />
<TextView
android:id="@+id/nextAlarm"
- style="@style/widget_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="none"
android:includeFontPadding="false"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white" />
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
+ tools:text="08:30"
+ tools:textColor="@android:color/white"
+ tools:textSize="@dimen/label_font_size" />
</LinearLayout>
@@ -78,7 +97,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|top"
- android:layout_marginTop="20dp"
- android:divider="@null" />
+ android:layout_marginTop="10dp"
+ android:divider="@null"
+ android:visibility="gone"
+ tools:listitem="@layout/world_clock_remote_list_item" />
</LinearLayout>
diff --git a/res/layout/digital_widget_configuration.xml b/res/layout/digital_widget_configuration.xml
new file mode 100644
index 000000000..d38e688db
--- /dev/null
+++ b/res/layout/digital_widget_configuration.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="?appWidgetConfigBackground"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ tools:theme="@style/Theme.DeskClock.DigitalWidgetConfigurationTheme">
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="24dp"
+ android:layout_marginBottom="48dp"
+ android:text="@string/widget_choice_title"
+ android:textColor="?appWidgetConfigTitle"
+ android:textSize="22sp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/center_layout"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_marginTop="64dp"
+ android:layout_marginBottom="64dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_weight="1"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_weight="1"
+ app:layout_constraintWidth_max="480dp">
+
+ <TextView
+ android:id="@+id/title_transparent"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="24dp"
+ android:fontFamily="sans-serif-medium"
+ android:text="@string/widget_name_transparent"
+ android:textAlignment="center"
+ android:textColor="?appWidgetConfigSubtitle"
+ android:textSize="16sp"
+ app:layout_constraintBottom_toTopOf="@id/widget_bg"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="1.0" />
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/widget_bg"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:background="@drawable/widget_configuration_background"
+ android:backgroundTint="?appWidgetConfigBorder"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintHeight_max="480dp"
+ app:layout_constraintTop_toTopOf="parent">
+
+ <LinearLayout
+ android:id="@+id/container_transparent"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:paddingStart="48dp"
+ android:paddingEnd="48dp"
+ app:layout_constraintBottom_toTopOf="@+id/container_solid"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHeight_max="230dp"
+ app:layout_constraintHeight_min="150dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+ <include
+ android:id="@+id/preview_transparent"
+ layout="@layout/digital_widget_configuration_preview_transparent_root"
+ android:layout_width="203dp"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/container_solid"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:paddingStart="48dp"
+ android:paddingEnd="48dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHeight_max="250dp"
+ app:layout_constraintHeight_min="130dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/container_transparent">
+
+ <include
+ android:id="@+id/preview_solid"
+ layout="@layout/digital_widget_configuration_preview_solid_root"
+ android:layout_width="203dp"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <TextView
+ android:id="@+id/title_solid"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="24dp"
+ android:fontFamily="sans-serif-medium"
+ android:text="@string/widget_name_solid"
+ android:textAlignment="center"
+ android:textColor="?appWidgetConfigSubtitle"
+ android:textSize="16sp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/widget_bg"
+ app:layout_constraintVertical_bias="0.0" />
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/digital_widget_configuration_preview.xml b/res/layout/digital_widget_configuration_preview.xml
new file mode 100644
index 000000000..fbc8a09b5
--- /dev/null
+++ b/res/layout/digital_widget_configuration_preview.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@android:id/background"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/widget_background"
+ android:backgroundTint="?appWidgetBackgroundTint"
+ android:gravity="top|center_horizontal"
+ android:orientation="vertical"
+ android:padding="@dimen/widget_padding"
+ android:paddingTop="@dimen/widget_padding"
+ android:paddingBottom="@dimen/widget_padding"
+ tools:theme="@style/Theme.DeskClock.DigitalWidgetTransparentLightBg">
+
+ <TextClock
+ android:id="@+id/clock"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:ellipsize="none"
+ android:format12Hour="@string/lock_screen_12_hour_format"
+ android:format24Hour="@string/lock_screen_24_hour_format"
+ android:includeFontPadding="false"
+ android:singleLine="true"
+ android:textAlignment="center"
+ android:textAppearance="?appWidgetTextAppearancePrimary"
+ android:textSize="48sp"
+ tools:text="0123"
+ tools:textColor="@android:color/white" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:layout_marginTop="-5dp">
+
+ <TextClock
+ android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:ellipsize="none"
+ android:format12Hour="@string/abbrev_wday_month_day_no_year_preview"
+ android:format24Hour="@string/abbrev_wday_month_day_no_year_preview"
+ android:includeFontPadding="false"
+ android:singleLine="true"
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
+ tools:text="01. Jan, 2023"
+ tools:textColor="@android:color/white"
+ tools:textSize="@dimen/label_font_size" />
+
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/digital_widget_configuration_preview_solid_root.xml b/res/layout/digital_widget_configuration_preview_solid_root.xml
new file mode 100644
index 000000000..100ff35a8
--- /dev/null
+++ b/res/layout/digital_widget_configuration_preview_solid_root.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/themed_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center|center_horizontal"
+ android:orientation="vertical"
+ android:theme="?appWidgetThemeSolid">
+
+ <include layout="@layout/digital_widget_configuration_preview" />
+</FrameLayout>
diff --git a/res/layout/digital_widget_configuration_preview_transparent_root.xml b/res/layout/digital_widget_configuration_preview_transparent_root.xml
new file mode 100644
index 000000000..b935f0dc6
--- /dev/null
+++ b/res/layout/digital_widget_configuration_preview_transparent_root.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/themed_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center|center_horizontal"
+ android:orientation="vertical"
+ android:theme="?appWidgetThemeTransparent">
+
+ <include layout="@layout/digital_widget_configuration_preview" />
+</FrameLayout>
diff --git a/res/layout/digital_widget_darkbg_solid_theme_root.xml b/res/layout/digital_widget_darkbg_solid_theme_root.xml
new file mode 100644
index 000000000..34b9e93a2
--- /dev/null
+++ b/res/layout/digital_widget_darkbg_solid_theme_root.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/themed_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center|center_horizontal"
+ android:orientation="vertical"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetDarkBg" />
diff --git a/res/layout/digital_widget_darkbg_theme_root.xml b/res/layout/digital_widget_darkbg_theme_root.xml
new file mode 100644
index 000000000..4689c21b1
--- /dev/null
+++ b/res/layout/digital_widget_darkbg_theme_root.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/themed_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center|center_horizontal"
+ android:orientation="vertical"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetTransparentDarkBg" />
diff --git a/res/layout/digital_widget_lightbg_solid_theme_root.xml b/res/layout/digital_widget_lightbg_solid_theme_root.xml
new file mode 100644
index 000000000..cfecdc1b4
--- /dev/null
+++ b/res/layout/digital_widget_lightbg_solid_theme_root.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/themed_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center|center_horizontal"
+ android:orientation="vertical"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetLightBg" />
diff --git a/res/layout/digital_widget_lightbg_theme_root.xml b/res/layout/digital_widget_lightbg_theme_root.xml
new file mode 100644
index 000000000..82fd72f0e
--- /dev/null
+++ b/res/layout/digital_widget_lightbg_theme_root.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/themed_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center|center_horizontal"
+ android:orientation="vertical"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetTransparentLightBg" />
diff --git a/res/layout/digital_widget_preview.xml b/res/layout/digital_widget_preview.xml
new file mode 100644
index 000000000..b2ca0a1be
--- /dev/null
+++ b/res/layout/digital_widget_preview.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@android:id/background"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="top|center_horizontal"
+ android:orientation="vertical"
+ android:background="@drawable/widget_background"
+ android:backgroundTint="?appWidgetBackgroundTint"
+ android:padding="@dimen/widget_padding"
+ android:paddingTop="@dimen/widget_padding"
+ android:paddingBottom="@dimen/widget_padding"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetTransparentLightBg">
+
+ <TextClock
+ android:id="@+id/clock"
+ android:textAppearance="?appWidgetTextAppearancePrimary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:ellipsize="none"
+ android:format12Hour="@string/lock_screen_12_hour_format"
+ android:format24Hour="@string/lock_screen_24_hour_format"
+ android:includeFontPadding="false"
+ android:singleLine="true"
+ android:textAlignment="center"
+ android:textSize="48sp"
+ tools:text="0123"
+ tools:textColor="@android:color/white"/>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal|top"
+ android:layout_marginTop="-10dp">
+
+ <TextClock
+ android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:ellipsize="none"
+ android:includeFontPadding="false"
+ android:singleLine="true"
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
+ android:format12Hour="@string/abbrev_wday_month_day_no_year_preview"
+ android:format24Hour="@string/abbrev_wday_month_day_no_year_preview"
+ tools:text="01. Jan, 2023"
+ tools:textColor="@android:color/white"
+ tools:textSize="@dimen/label_font_size"/>
+
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/digital_widget_sizer.xml b/res/layout/digital_widget_sizer.xml
index be7677ba7..217686237 100644
--- a/res/layout/digital_widget_sizer.xml
+++ b/res/layout/digital_widget_sizer.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
+ Copyright (C) 2023 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,13 +16,16 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/widget_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:theme="@style/Theme.DeskClock.DigitalWidgetTransparentDarkBg">
<TextClock
android:id="@+id/clock"
- style="@style/widget_big"
+ android:textAppearance="?appWidgetTextAppearancePrimary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|top"
@@ -29,29 +33,31 @@
android:ellipsize="none"
android:format12Hour="@string/lock_screen_12_hour_format"
android:format24Hour="@string/lock_screen_24_hour_format"
- android:singleLine="true" />
+ android:singleLine="true"
+ tools:text="01:23"/>
<LinearLayout
+ android:id="@+id/bottom_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top">
+ android:layout_gravity="center_horizontal|top"
+ android:layout_marginTop="-10dp">
<TextClock
android:id="@+id/date"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:includeFontPadding="false"
android:ellipsize="none"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white" />
+ tools:text="Sa, Apr 14"/>
<!-- This view is drawn to a Bitmap and sent to the widget as an icon. -->
<TextView
android:id="@+id/nextAlarmIcon"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@@ -59,19 +65,24 @@
android:ellipsize="none"
android:singleLine="true"
android:text="@string/clock_emoji"
- android:textColor="@color/white" />
+ android:textColor="?appWidgetLabelTint"
+ tools:text=""
+ tools:drawableStart="@drawable/ic_alarm"
+ tools:paddingStart="8dp"
+ tools:paddingEnd="8dp"/>
<TextView
android:id="@+id/nextAlarm"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearancePrimaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:includeFontPadding="false"
android:ellipsize="none"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white" />
+ android:textAllCaps="false"
+ android:textColor="@color/white"
+ tools:text="Mo, 07:30 AM"/>
</LinearLayout>
diff --git a/res/layout/world_clock_remote_list_item.xml b/res/layout/world_clock_remote_list_item.xml
index 8513ebefc..699d96d18 100644
--- a/res/layout/world_clock_remote_list_item.xml
+++ b/res/layout/world_clock_remote_list_item.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
+ Copyright (C) 2023 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,10 +17,12 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/widget_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:orientation="vertical"
+ tools:theme="@style/Theme.DeskClock.DigitalWidgetTransparentDarkBg">
<LinearLayout
android:layout_width="match_parent"
@@ -36,13 +39,15 @@
<TextClock
android:id="@+id/left_clock"
- style="@style/widget_medium_thin"
+ android:textAppearance="?appWidgetTextAppearanceSecondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:baselineAligned="true"
android:gravity="center"
- android:textColor="@color/white" />
+ android:maxLines="1"
+ tools:text="01:23 AM"
+ tools:textSize="16sp"/>
<LinearLayout
android:layout_width="wrap_content"
@@ -57,22 +62,21 @@
<TextView
android:id="@+id/city_name_left"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearanceSecondaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white"
- android:textSize="@dimen/city_widget_name_font_size" />
+ android:textSize="@dimen/city_widget_name_font_size"
+ tools:text="City1"/>
</FrameLayout>
<TextView
android:id="@+id/city_day_left"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearanceSecondaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/style_label_space"
@@ -81,9 +85,8 @@
android:format24Hour="@string/abbrev_wday"
android:includeFontPadding="false"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white"
- android:textSize="@dimen/city_widget_name_font_size" />
+ android:textSize="@dimen/city_widget_name_font_size"
+ tools:text="/ Mon"/>
</LinearLayout>
@@ -98,13 +101,15 @@
<TextClock
android:id="@+id/right_clock"
- style="@style/widget_medium_thin"
+ android:textAppearance="?appWidgetTextAppearanceSecondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:baselineAligned="true"
android:gravity="center"
- android:textColor="@color/white" />
+ android:maxLines="1"
+ tools:text="01:23 AM"
+ tools:textSize="16sp"/>
<LinearLayout
android:layout_width="wrap_content"
@@ -119,22 +124,21 @@
<TextView
android:id="@+id/city_name_right"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearanceSecondaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white"
- android:textSize="@dimen/city_widget_name_font_size" />
+ android:textSize="@dimen/city_widget_name_font_size"
+ tools:text="City 2"/>
</FrameLayout>
<TextView
android:id="@+id/city_day_right"
- style="@style/widget_label"
+ android:textAppearance="?appWidgetTextAppearanceSecondaryLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/style_label_space"
@@ -143,9 +147,8 @@
android:format24Hour="@string/abbrev_wday"
android:includeFontPadding="false"
android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white"
- android:textSize="@dimen/city_widget_name_font_size" />
+ android:textSize="@dimen/city_widget_name_font_size"
+ tools:text="/ Mon"/>
</LinearLayout>
diff --git a/res/values-night/styles.xml b/res/values-night/styles.xml
new file mode 100644
index 000000000..c26e26089
--- /dev/null
+++ b/res/values-night/styles.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ SPDX-FileCopyrightText: 2023 The LineageOS Project
+ SPDX-License-Identifier: Apache-2.0
+-->
+<resources>
+ <style name="Theme.DeskClock.DigitalWidgetConfigurationTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
+ <item name="appWidgetConfigBackground">#191C1C</item>
+ <item name="appWidgetConfigTitle">@android:color/system_neutral1_200</item>
+ <item name="appWidgetConfigSubtitle">@android:color/system_neutral2_200</item>
+ <item name="appWidgetConfigBorder">@android:color/system_neutral2_700</item>
+ <item name="appWidgetThemeTransparent">@style/Theme.DeskClock.DigitalWidgetTransparentDarkBg</item>
+ <item name="appWidgetThemeSolid">@style/Theme.DeskClock.DigitalWidgetDarkBg</item>
+ </style>
+</resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index bde6b225c..27895968d 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -54,11 +54,11 @@
<dimen name="min_analog_widget_size">170dp</dimen>
<!-- digital widget sizing information -->
- <dimen name="min_digital_widget_width">300dp</dimen>
- <dimen name="min_digital_widget_height">170dp</dimen>
+ <dimen name="min_digital_widget_width">130dp</dimen>
+ <dimen name="min_digital_widget_height">80dp</dimen>
<dimen name="digital_widget_city_margin_bottom">15dp</dimen>
- <dimen name="digital_widget_city_12_medium_font_size">52sp</dimen>
- <dimen name="digital_widget_city_24_medium_font_size">65sp</dimen>
+ <dimen name="digital_widget_city_12_medium_font_size">48sp</dimen>
+ <dimen name="digital_widget_city_24_medium_font_size">56sp</dimen>
<!-- The fixed size of the font for the city name / day of week in the city widget. -->
<dimen name="city_widget_name_font_size">20dp</dimen>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 9a619bced..2eb1ab4c8 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -47,4 +47,17 @@
<attr format="dimension" name="round"/>
<attr format="float" name="roundPercent"/>
</declare-styleable>
+
+ <attr name="appWidgetBackgroundTint" format="color" />
+ <attr name="appWidgetLabelTint" format="color" />
+ <attr name="appWidgetTextAppearancePrimary" format="reference" />
+ <attr name="appWidgetTextAppearancePrimaryLabel" format="reference" />
+ <attr name="appWidgetTextAppearanceSecondary" format="reference" />
+ <attr name="appWidgetTextAppearanceSecondaryLabel" format="reference" />
+ <attr name="appWidgetConfigBackground" format="color" />
+ <attr name="appWidgetConfigTitle" format="color" />
+ <attr name="appWidgetConfigSubtitle" format="color" />
+ <attr name="appWidgetConfigBorder" format="color" />
+ <attr name="appWidgetThemeTransparent" format="reference" />
+ <attr name="appWidgetThemeSolid" format="reference" />
</resources>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 6da5ce9ec..8bb085635 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -59,4 +59,11 @@
<string name="selected">Selected</string>
<!-- Description of the menu button which opens on custom ringtones -->
<string name="more_options">More options</string>
+
+ <!-- Title of the widget layout choice activity -->
+ <string name="widget_choice_title">Choose your style</string>
+ <!-- Name of the transparent widget layout -->
+ <string name="widget_name_transparent">Unbacked</string>
+ <!-- Name of the solid widget layout -->
+ <string name="widget_name_solid">Backed</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 91ca13873..853559f1c 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -70,4 +70,12 @@
<color name="accent_600">@android:color/system_accent3_600</color>
<color name="accent_900">@android:color/system_accent3_900</color>
+ <color name="widget_text_color">@android:color/system_accent1_100</color>
+ <color name="widget_text_color_dark">@android:color/system_accent1_700</color>
+ <color name="widget_text_color_on_solid">@android:color/system_accent1_200</color>
+ <color name="widget_text_color_on_solid_dark">@android:color/system_accent1_600</color>
+ <color name="widget_label_color">@color/white</color>
+ <color name="widget_label_color_dark">@color/black</color>
+ <color name="widget_secondary_text_color">@android:color/system_accent2_100</color>
+ <color name="widget_secondary_text_color_dark">@android:color/system_accent2_800</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c26d93ddd..fde225b75 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -86,11 +86,11 @@
<dimen name="min_analog_widget_size">110dp</dimen>
<!-- digital widget sizing information -->
- <dimen name="min_digital_widget_width">206dp</dimen>
- <dimen name="min_digital_widget_height">129dp</dimen>
+ <dimen name="min_digital_widget_width">202dp</dimen>
+ <dimen name="min_digital_widget_height">80dp</dimen>
<dimen name="digital_widget_city_margin_bottom">10dp</dimen>
- <dimen name="digital_widget_city_12_medium_font_size">32sp</dimen>
- <dimen name="digital_widget_city_24_medium_font_size">40sp</dimen>
+ <dimen name="digital_widget_city_12_medium_font_size">24sp</dimen>
+ <dimen name="digital_widget_city_24_medium_font_size">36sp</dimen>
<!-- The fixed size of the font for the city name / day of week in the city widget. -->
<dimen name="city_widget_name_font_size">10dp</dimen>
@@ -98,11 +98,6 @@
<dimen name="widget_max_clock_font_size">80dp</dimen>
<dimen name="widget_min_world_city_list_size">80dp</dimen>
- <!-- shadow styles for widget text with drop shadows -->
- <item name="widget_shadow_radius" format="float" type="dimen">2.75</item>
- <item name="widget_shadow_dx" format="float" type="dimen">2.0</item>
- <item name="widget_shadow_dy" format="float" type="dimen">2.0</item>
-
<!-- Divider height -->
<dimen name="hairline_height">1dp</dimen>
@@ -144,4 +139,8 @@
<dimen name="settings_padding">4dp</dimen>
<dimen name="analog_clock_width_percent">0.5</dimen>
+
+ <dimen name="widget_background_corner_radius">80dp</dimen>
+ <dimen name="widget_configuration_background_corner_radius">12dp</dimen>
+ <dimen name="widget_padding">16dp</dimen>
</resources>
diff --git a/res/values/donottranslate.xml b/res/values/donottranslate.xml
index 76dae4905..c2a2ea6bc 100644
--- a/res/values/donottranslate.xml
+++ b/res/values/donottranslate.xml
@@ -16,9 +16,9 @@
<resources>
<!-- String matching the lock screen format for displaying 12-hour times. -->
- <string name="lock_screen_12_hour_format">h&#58;mm</string>
+ <string name="lock_screen_12_hour_format">h&#xEE01;mm</string>
<!-- String matching the lock screen format for displaying 24-hour times. -->
- <string name="lock_screen_24_hour_format">kk&#58;mm</string>
+ <string name="lock_screen_24_hour_format">kk&#xEE01;mm</string>
<!-- Format for displaying the day of week with a preceding slash divider. -->
<string name="abbrev_wday">&#160;/ EEE</string>
<!-- String matching the lock screen format for displaying the date. -->
@@ -29,4 +29,6 @@
<string name="default_clock_style">digital</string>
<!-- ⏰ (A custom font replaces the A glyph with a clock icon) -->
<string name="clock_emoji">A</string>
+ <!-- String for the date in the DigitalAppWidget preview -->
+ <string name="abbrev_wday_month_day_no_year_preview">EEE MMM d</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 683df4ee5..98bd74f52 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -22,27 +22,10 @@
<item name="android:textColor">@color/white_63p</item>
</style>
- <style name="widget_medium_thin">
- <item name="android:fontFamily">sans-serif-thin</item>
- <item name="android:shadowRadius">@dimen/widget_shadow_radius</item>
- <item name="android:shadowColor">@color/widget_shadow_color</item>
- <item name="android:shadowDx">@dimen/widget_shadow_dx</item>
- <item name="android:shadowDy">@dimen/widget_shadow_dy</item>
- </style>
-
<style name="label">
<item name="android:textSize">@dimen/label_font_size</item>
</style>
- <style name="widget_label" parent="label">
- <item name="android:textAllCaps">true</item>
- <item name="android:letterSpacing">0.15</item>
- <item name="android:shadowRadius">@dimen/widget_shadow_radius</item>
- <item name="android:shadowColor">@color/widget_shadow_color</item>
- <item name="android:shadowDx">@dimen/widget_shadow_dx</item>
- <item name="android:shadowDy">@dimen/widget_shadow_dy</item>
- </style>
-
<style name="display_time">
<item name="android:textSize">56sp</item>
<item name="android:textColor">@color/white</item>
@@ -72,16 +55,6 @@
<item name="android:fontFamily">sans-serif-thin</item>
</style>
- <style name="widget_big" parent="big_thin">
- <item name="android:shadowRadius">@dimen/widget_shadow_radius</item>
- <item name="android:shadowColor">@color/widget_shadow_color</item>
- <item name="android:shadowDx">@dimen/widget_shadow_dx</item>
- <item name="android:shadowDy">@dimen/widget_shadow_dy</item>
- <item name="android:fontFamily">sans-serif-condensed</item>
- <item name="android:textColor">@*android:color/system_accent2_100</item>
- <item name="android:scaleY">0.9</item>
- </style>
-
<style name="PrimaryLabelTextParentAppearance">
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/label_text_size</item>
@@ -211,4 +184,138 @@
<item name="layout_constraintStart_toStartOf">parent</item>
<item name="layout_constraintTop_toBottomOf">@id/timer_setup_time</item>
</style>
+
+ <style name="Theme.DeskClock.DigitalWidgetTransparentDarkBg" parent="Theme.AppCompat.DayNight">
+ <item name="appWidgetBackgroundTint">@android:color/transparent</item>
+ <item name="appWidgetLabelTint">@color/widget_label_color</item>
+ <item name="appWidgetTextAppearancePrimary">@style/TextAppearance.DigitalAppWidget.TextClockPrimary.TransparentDarkBg</item>
+ <item name="appWidgetTextAppearancePrimaryLabel">@style/TextAppearance.DigitalAppWidget.Label.TransparentDarkBg</item>
+ <item name="appWidgetTextAppearanceSecondary">@style/TextAppearance.DigitalAppWidget.WorldClock.TransparentDarkBg</item>
+ <item name="appWidgetTextAppearanceSecondaryLabel">@style/TextAppearance.DigitalAppWidget.WorldClock.Label.TransparentDarkBg</item>
+ </style>
+
+ <style name="Theme.DeskClock.DigitalWidgetTransparentLightBg" parent="Theme.AppCompat.DayNight">
+ <item name="appWidgetBackgroundTint">@android:color/transparent</item>
+ <item name="appWidgetLabelTint">@color/widget_label_color_dark</item>
+ <item name="appWidgetTextAppearancePrimary">@style/TextAppearance.DigitalAppWidget.TextClockPrimary.TransparentLightBg</item>
+ <item name="appWidgetTextAppearancePrimaryLabel">@style/TextAppearance.DigitalAppWidget.Label.TransparentLightBg</item>
+ <item name="appWidgetTextAppearanceSecondary">@style/TextAppearance.DigitalAppWidget.WorldClock.TransparentLightBg</item>
+ <item name="appWidgetTextAppearanceSecondaryLabel">@style/TextAppearance.DigitalAppWidget.WorldClock.Label.TransparentLightBg</item>
+ </style>
+
+ <style name="Theme.DeskClock.DigitalWidgetDarkBg" parent="Theme.AppCompat.DayNight">
+ <item name="appWidgetBackgroundTint">@android:color/system_accent2_800</item>
+ <item name="appWidgetLabelTint">@color/widget_text_color_on_solid</item>
+ <item name="appWidgetTextAppearancePrimary">@style/TextAppearance.DigitalAppWidget.TextClockPrimary.DarkBg</item>
+ <item name="appWidgetTextAppearancePrimaryLabel">@style/TextAppearance.DigitalAppWidget.Label.DarkBg</item>
+ <item name="appWidgetTextAppearanceSecondary">@style/TextAppearance.DigitalAppWidget.WorldClock.DarkBg</item>
+ <item name="appWidgetTextAppearanceSecondaryLabel">@style/TextAppearance.DigitalAppWidget.WorldClock.Label.DarkBg</item>
+ </style>
+
+ <style name="Theme.DeskClock.DigitalWidgetLightBg" parent="Theme.AppCompat.DayNight">
+ <item name="appWidgetBackgroundTint">@android:color/system_accent2_100</item>
+ <item name="appWidgetLabelTint">@color/widget_text_color_on_solid_dark</item>
+ <item name="appWidgetTextAppearancePrimary">@style/TextAppearance.DigitalAppWidget.TextClockPrimary.LightBg</item>
+ <item name="appWidgetTextAppearancePrimaryLabel">@style/TextAppearance.DigitalAppWidget.Label.LightBg</item>
+ <item name="appWidgetTextAppearanceSecondary">@style/TextAppearance.DigitalAppWidget.WorldClock.LightBg</item>
+ <item name="appWidgetTextAppearanceSecondaryLabel">@style/TextAppearance.DigitalAppWidget.WorldClock.Label.LightBg</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget" parent="">
+ <item name="android:fontFamily">sans-serif</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.TextClockPrimary" parent="TextAppearance.DigitalAppWidget">
+ <item name="android:textSize">@dimen/big_font_size</item>
+ <item name="android:textColor">@color/widget_text_color</item>
+ <item name="android:fontFeatureSettings">pnum</item>
+ <item name="android:letterSpacing">-0.04</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.TextClockPrimary.TransparentDarkBg">
+ <item name="android:textColor">@color/widget_text_color</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.TextClockPrimary.TransparentLightBg">
+ <item name="android:textColor">@color/widget_text_color_dark</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.TextClockPrimary.DarkBg">
+ <item name="android:textColor">@color/widget_text_color_on_solid</item>
+ <item name="android:fontFamily">sans-serif-light</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.TextClockPrimary.LightBg">
+ <item name="android:textColor">@color/widget_text_color_on_solid_dark</item>
+ <item name="android:fontFamily">sans-serif-light</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.Label">
+ <item name="android:textSize">@dimen/label_font_size</item>
+ <item name="android:fontFeatureSettings">pnum</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.Label.TransparentDarkBg" parent="TextAppearance.DigitalAppWidget.Label">
+ <item name="android:textColor">@color/widget_label_color</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.Label.TransparentLightBg" parent="TextAppearance.DigitalAppWidget.Label">
+ <item name="android:textColor">@color/widget_label_color_dark</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.Label.DarkBg" parent="TextAppearance.DigitalAppWidget.Label">
+ <item name="android:textColor">@color/widget_text_color_on_solid</item>
+ </style>
+ <style name="TextAppearance.DigitalAppWidget.Label.LightBg" parent="TextAppearance.DigitalAppWidget.Label">
+ <item name="android:textColor">@color/widget_text_color_on_solid_dark</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.Primary" parent="TextAppearance.DigitalAppWidget">
+ <item name="android:fontFeatureSettings">pnum</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.TransparentDarkBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Primary">
+ <item name="android:textColor">@color/widget_text_color</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.TransparentLightBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Primary">
+ <item name="android:textColor">@color/widget_text_color_dark</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.DarkBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Primary">
+ <item name="android:textColor">@color/widget_secondary_text_color</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.LightBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Primary">
+ <item name="android:textColor">@color/widget_secondary_text_color_dark</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.Label" parent="TextAppearance.DigitalAppWidget">
+ <item name="android:letterSpacing">0.05</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.Label.TransparentDarkBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Label">
+ <item name="android:textColor">@color/widget_label_color</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.Label.TransparentLightBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Label">
+ <item name="android:textColor">@color/widget_label_color_dark</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.Label.DarkBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Label">
+ <item name="android:textColor">@color/widget_secondary_text_color</item>
+ </style>
+
+ <style name="TextAppearance.DigitalAppWidget.WorldClock.Label.LightBg" parent="TextAppearance.DigitalAppWidget.WorldClock.Label">
+ <item name="android:textColor">@color/widget_secondary_text_color_dark</item>
+ </style>
+
+ <style name="Theme.DeskClock.DigitalWidgetConfigurationTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
+ <item name="appWidgetConfigBackground">#FAFDFB</item>
+ <item name="appWidgetConfigTitle">@android:color/system_neutral1_900</item>
+ <item name="appWidgetConfigSubtitle">@android:color/system_neutral2_700</item>
+ <item name="appWidgetConfigBorder">@android:color/system_neutral2_200</item>
+ <item name="appWidgetThemeTransparent">@style/Theme.DeskClock.DigitalWidgetTransparentLightBg</item>
+ <item name="appWidgetThemeSolid">@style/Theme.DeskClock.DigitalWidgetLightBg</item>
+ </style>
</resources>
diff --git a/res/xml/digital_appwidget.xml b/res/xml/digital_appwidget.xml
index fe91ff643..cb876da80 100644
--- a/res/xml/digital_appwidget.xml
+++ b/res/xml/digital_appwidget.xml
@@ -17,11 +17,14 @@
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/loading_widget"
- android:minHeight="@dimen/min_digital_widget_height"
android:minWidth="@dimen/min_digital_widget_width"
- android:minResizeHeight="59dp"
- android:minResizeWidth="136dp"
- android:previewImage="@drawable/appwidget_digital_clock_preview"
+ android:minHeight="@dimen/min_digital_widget_height"
+ android:minResizeWidth="202dp"
+ android:minResizeHeight="24dp"
+ android:targetCellWidth="3"
+ android:targetCellHeight="1"
+ android:previewLayout="@layout/digital_widget_preview"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="0"
- android:widgetCategory="keyguard|home_screen" />
+ android:widgetCategory="keyguard|home_screen"
+ android:configure="com.android.alarmclock.DigitalAppWidgetConfigurationActivity" />
diff --git a/src/com/android/alarmclock/DigitalAppWidgetCityViewsFactory.java b/src/com/android/alarmclock/DigitalAppWidgetCityViewsFactory.java
index 96c499bcc..d50be4849 100644
--- a/src/com/android/alarmclock/DigitalAppWidgetCityViewsFactory.java
+++ b/src/com/android/alarmclock/DigitalAppWidgetCityViewsFactory.java
@@ -113,8 +113,14 @@ public class DigitalAppWidgetCityViewsFactory implements RemoteViewsFactory {
(leftIndex < mCities.size() ? mCities.get(leftIndex) : null);
final City right = rightIndex < mCities.size() ? mCities.get(rightIndex) : null;
- final RemoteViews rv =
- new RemoteViews(mContext.getPackageName(), R.layout.world_clock_remote_list_item);
+ String packageName = mContext.getPackageName();
+ int[] layoutIds = WidgetUtils.getWidgetLayouts(mContext, mWidgetId);
+ final RemoteViews rv = new RemoteViews(packageName, layoutIds[0]);
+ rv.setLightBackgroundLayoutId(layoutIds[1]);
+
+ rv.removeAllViews(R.id.themed_root);
+ rv.addView(R.id.themed_root, new RemoteViews(packageName,
+ R.layout.world_clock_remote_list_item));
// Show the left clock if one exists.
if (left != null) {
diff --git a/src/com/android/alarmclock/DigitalAppWidgetConfigurationActivity.java b/src/com/android/alarmclock/DigitalAppWidgetConfigurationActivity.java
new file mode 100644
index 000000000..d65a9e9d9
--- /dev/null
+++ b/src/com/android/alarmclock/DigitalAppWidgetConfigurationActivity.java
@@ -0,0 +1,50 @@
+package com.android.alarmclock;
+
+import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID;
+import static android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID;
+
+import android.appwidget.AppWidgetManager;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.android.deskclock.R;
+
+public class DigitalAppWidgetConfigurationActivity extends AppCompatActivity {
+ private int mAppWidgetId = INVALID_APPWIDGET_ID;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setResult(RESULT_CANCELED);
+ setContentView(R.layout.digital_widget_configuration);
+
+ View transparent = findViewById(R.id.preview_transparent);
+ transparent.setOnClickListener(v -> onWidgetContainerClicked(false));
+ View solid = findViewById(R.id.preview_solid);
+ solid.setOnClickListener(v -> onWidgetContainerClicked(true));
+
+ Intent intent = getIntent();
+ if (intent != null) {
+ Bundle extras = intent.getExtras();
+ if (extras != null) {
+ mAppWidgetId = extras.getInt(EXTRA_APPWIDGET_ID, INVALID_APPWIDGET_ID);
+ }
+ }
+ }
+
+ private void onWidgetContainerClicked(boolean isSolid) {
+ WidgetUtils.saveWidgetMode(this, mAppWidgetId, isSolid);
+ AppWidgetManager wm = AppWidgetManager.getInstance(this);
+ DigitalAppWidgetProvider.updateAppWidget(this, wm, mAppWidgetId);
+
+ Intent result = new Intent();
+ result.putExtra(EXTRA_APPWIDGET_ID, mAppWidgetId);
+ setResult(RESULT_OK, result);
+ finish();
+ }
+}
diff --git a/src/com/android/alarmclock/DigitalAppWidgetProvider.java b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
index b54a500c5..ec6fac409 100644
--- a/src/com/android/alarmclock/DigitalAppWidgetProvider.java
+++ b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
@@ -24,6 +24,7 @@ import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT;
import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH;
import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT;
import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH;
+import static android.content.Intent.ACTION_CONFIGURATION_CHANGED;
import static android.content.Intent.ACTION_LOCALE_CHANGED;
import static android.content.Intent.ACTION_TIMEZONE_CHANGED;
import static android.content.Intent.ACTION_TIME_CHANGED;
@@ -46,7 +47,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
-import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
@@ -54,6 +54,7 @@ import android.text.format.DateFormat;
import android.util.ArraySet;
import android.view.LayoutInflater;
import android.view.View;
+import android.widget.LinearLayout;
import android.widget.RemoteViews;
import android.widget.TextClock;
import android.widget.TextView;
@@ -148,6 +149,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
case ACTION_TIMEZONE_CHANGED:
case ACTION_ON_DAY_CHANGE:
case ACTION_WORLD_CITIES_CHANGED:
+ case ACTION_CONFIGURATION_CHANGED:
for (int widgetId : widgetIds) {
relayoutWidget(context, wm, widgetId, wm.getAppWidgetOptions(widgetId));
}
@@ -180,6 +182,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_WORLD_CITIES_CHANGED);
intentFilter.addAction(ACTION_ON_DAY_CHANGE);
+ intentFilter.addAction(ACTION_CONFIGURATION_CHANGED);
context.getApplicationContext().registerReceiver(receiver, intentFilter);
sReceiversRegistered = true;
@@ -210,6 +213,10 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
wm.notifyAppWidgetViewDataChanged(widgetId, R.id.world_city_list);
}
+ public static void updateAppWidget(Context context, AppWidgetManager wm, int widgetId) {
+ relayoutWidget(context, wm, widgetId, wm.getAppWidgetOptions(widgetId));
+ }
+
/**
* Compute optimal font and icon sizes offscreen for the given orientation.
*/
@@ -217,13 +224,18 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
Bundle options, boolean portrait) {
// Create a remote view for the digital clock.
final String packageName = context.getPackageName();
- final RemoteViews rv = new RemoteViews(packageName, R.layout.digital_widget);
+ int[] layoutIds = WidgetUtils.getWidgetLayouts(context, widgetId);
+ final RemoteViews rv = new RemoteViews(packageName, layoutIds[0]);
+ rv.setLightBackgroundLayoutId(layoutIds[1]);
+
+ rv.removeAllViews(R.id.themed_root);
+ rv.addView(R.id.themed_root, new RemoteViews(packageName, R.layout.digital_widget));
// Tapping on the widget opens the app (if not on the lock screen).
if (Utils.isWidgetClickable(wm, widgetId)) {
final Intent openApp = new Intent(context, DeskClock.class);
final PendingIntent pi = PendingIntent.getActivity(context, 0, openApp, FLAG_IMMUTABLE);
- rv.setOnClickPendingIntent(R.id.digital_widget, pi);
+ rv.setOnClickPendingIntent(android.R.id.background, pi);
}
// Configure child views of the remote view.
@@ -267,10 +279,15 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
}
// Apply the computed sizes to the remote views.
- rv.setImageViewBitmap(R.id.nextAlarmIcon, sizes.mIconBitmap);
+ rv.setInt(R.id.nextAlarmIcon, "setMaxHeight", sizes.mFontSizePx);
+ rv.setViewPadding(R.id.nextAlarmIcon, sizes.mIconPaddingPx, 0, sizes.mIconPaddingPx, 0);
rv.setTextViewTextSize(R.id.date, COMPLEX_UNIT_PX, sizes.mFontSizePx);
rv.setTextViewTextSize(R.id.nextAlarm, COMPLEX_UNIT_PX, sizes.mFontSizePx);
rv.setTextViewTextSize(R.id.clock, COMPLEX_UNIT_PX, sizes.mClockFontSizePx);
+ // Shift the bottom view up by half of the non-removable TextView padding
+ rv.setViewLayoutMargin(R.id.bottom_view, RemoteViews.MARGIN_TOP,
+ sizes.mBottomViewMarginTopPx, COMPLEX_UNIT_PX);
+ rv.setViewPadding(R.id.bottom_view, 0, 0, 0, sizes.mBottomViewPaddingBottomPx);
final int smallestWorldCityListSizePx =
resources.getDimensionPixelSize(R.dimen.widget_min_world_city_list_size);
@@ -307,6 +324,8 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
@SuppressLint("InflateParams")
final View sizer = inflater.inflate(R.layout.digital_widget_sizer, null /* root */);
+ int padding = context.getResources().getDimensionPixelSize(R.dimen.widget_padding);
+ sizer.findViewById(R.id.widget_item).setPadding(padding, padding, padding, padding);
// Configure the date to display the current date string.
final CharSequence dateFormat = getDateFormat(context);
final TextClock date = sizer.findViewById(R.id.date);
@@ -420,6 +439,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
final TextClock clock = sizer.findViewById(R.id.clock);
final TextView nextAlarm = sizer.findViewById(R.id.nextAlarm);
final TextView nextAlarmIcon = sizer.findViewById(R.id.nextAlarmIcon);
+ final LinearLayout bottomView = sizer.findViewById(R.id.bottom_view);
// Adjust the font sizes.
measuredSizes.setClockFontSizePx(clockFontSize);
@@ -429,6 +449,17 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
nextAlarm.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mFontSizePx);
nextAlarmIcon.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mIconFontSizePx);
nextAlarmIcon.setPadding(measuredSizes.mIconPaddingPx, 0, measuredSizes.mIconPaddingPx, 0);
+ // We want to shift the date line up by half the invisible padding of the clock (which is
+ // 33% of the font size)
+ measuredSizes.setBottomViewMarginPx(-1 * (int)(measuredSizes.mClockFontSizePx * 0.33 / 2));
+ // We want the bottom padding of the date be equal to the top padding of the clock
+ measuredSizes.setBottomViewPaddingPx(
+ (int)(measuredSizes.mClockFontSizePx * 0.28 - measuredSizes.mFontSizePx * 0.33));
+ bottomView.setPadding(0, 0, 0, measuredSizes.getBottomViewPaddingPx());
+ LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)
+ bottomView.getLayoutParams();
+ layoutParams.topMargin = measuredSizes.getBottomViewMarginTopPx();
+ bottomView.setLayoutParams(layoutParams);
// Measure and layout the sizer.
final int widthSize = View.MeasureSpec.getSize(measuredSizes.mTargetWidthPx);
@@ -444,11 +475,6 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
measuredSizes.mMeasuredTextClockWidthPx = clock.getMeasuredWidth();
measuredSizes.mMeasuredTextClockHeightPx = clock.getMeasuredHeight();
- // If an alarm icon is required, generate one from the TextView with the special font.
- if (nextAlarmIcon.getVisibility() == VISIBLE) {
- measuredSizes.mIconBitmap = Utils.createBitmap(nextAlarmIcon);
- }
-
return measuredSizes;
}
@@ -483,7 +509,6 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
private final int mTargetHeightPx;
private final int mLargestClockFontSizePx;
private final int mSmallestClockFontSizePx;
- private Bitmap mIconBitmap;
private int mMeasuredWidthPx;
private int mMeasuredHeightPx;
@@ -499,6 +524,9 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
private int mIconFontSizePx;
private int mIconPaddingPx;
+ private int mBottomViewMarginTopPx;
+ private int mBottomViewPaddingBottomPx;
+
private Sizes(int targetWidthPx, int targetHeightPx, int largestClockFontSizePx) {
mTargetWidthPx = targetWidthPx;
mTargetHeightPx = targetHeightPx;
@@ -511,11 +539,21 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
private int getClockFontSizePx() { return mClockFontSizePx; }
private void setClockFontSizePx(int clockFontSizePx) {
mClockFontSizePx = clockFontSizePx;
- mFontSizePx = max(1, round(clockFontSizePx / 7.5f));
+ mFontSizePx = max(1, round(clockFontSizePx / 5.5f));
mIconFontSizePx = (int) (mFontSizePx * 1.4f);
mIconPaddingPx = mFontSizePx / 3;
}
+ private int getBottomViewMarginTopPx() { return mBottomViewMarginTopPx; }
+ private void setBottomViewMarginPx(int bottomViewMarginPx) {
+ mBottomViewMarginTopPx = bottomViewMarginPx;
+ }
+
+ private int getBottomViewPaddingPx() { return mBottomViewPaddingBottomPx; }
+ private void setBottomViewPaddingPx(int bottomViewPaddingPx) {
+ mBottomViewPaddingBottomPx = bottomViewPaddingPx;
+ }
+
/**
* @return the amount of widget height available to the world cities list
*/
diff --git a/src/com/android/alarmclock/WidgetUtils.java b/src/com/android/alarmclock/WidgetUtils.java
index 7ad2df7b8..46339029c 100644
--- a/src/com/android/alarmclock/WidgetUtils.java
+++ b/src/com/android/alarmclock/WidgetUtils.java
@@ -26,6 +26,11 @@ import com.android.deskclock.Utils;
public final class WidgetUtils {
+ private static String PREFS_NAME = "com.android.alarmclock.widgets";
+ private static String PREF_PREFIX_KEY = "appwidget_";
+ private static String PREF_MODE_PREFIX = PREF_PREFIX_KEY + "solid_";
+
+
private WidgetUtils() {}
// Calculate the scale factor of the fonts in the widget
@@ -92,4 +97,27 @@ public final class WidgetUtils {
}
return 1;
}
+
+ public static void saveWidgetMode(Context context, int appWidgetId, boolean isSolid) {
+ context.getSharedPreferences(PREFS_NAME, 0).edit()
+ .putBoolean(PREF_MODE_PREFIX + appWidgetId, isSolid)
+ .commit();
+ }
+
+ public static boolean getWidgetMode(Context context, int appWidgetId) {
+ return context.getSharedPreferences(PREFS_NAME, 0)
+ .getBoolean(PREF_MODE_PREFIX + appWidgetId, false);
+ }
+
+ public static int[] getWidgetLayouts(Context context, int appWidgetId) {
+ int[] layoutIds = new int[2];
+ if (getWidgetMode(context, appWidgetId)) {
+ layoutIds[0] = R.layout.digital_widget_darkbg_solid_theme_root;
+ layoutIds[1] = R.layout.digital_widget_lightbg_solid_theme_root;
+ } else {
+ layoutIds[0] = R.layout.digital_widget_darkbg_theme_root;
+ layoutIds[1] = R.layout.digital_widget_lightbg_theme_root;
+ }
+ return layoutIds;
+ }
}
diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java
index 4eea6beba..ed44315b0 100644
--- a/src/com/android/deskclock/Utils.java
+++ b/src/com/android/deskclock/Utils.java
@@ -359,7 +359,7 @@ public class Utils {
final Spannable sp = new SpannableString(pattern);
sp.setSpan(new RelativeSizeSpan(amPmRatio), amPmPos, amPmPos + 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- sp.setSpan(new StyleSpan(Typeface.NORMAL), amPmPos, amPmPos + 1,
+ sp.setSpan(new StyleSpan(Typeface.BOLD), amPmPos, amPmPos + 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
sp.setSpan(new TypefaceSpan("sans-serif"), amPmPos, amPmPos + 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);