From b146895a526353aa0efafb5ffd4dcb8e53872517 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 29 Nov 2021 17:03:17 +0100 Subject: [PATCH] Widget fixes --- Habitica/build.gradle | 3 +- Habitica/res/drawable/widget_background.xml | 4 +-- Habitica/res/layout/widget_avatar_stats.xml | 28 ++++++++++--------- .../res/layout/widget_dailies_list_row.xml | 4 +-- Habitica/res/layout/widget_habit_button.xml | 1 + Habitica/res/layout/widget_task_list.xml | 3 +- Habitica/res/layout/widget_todo_list_row.xml | 7 +++-- Habitica/res/values-v31/styles.xml | 6 ++++ Habitica/res/values/attrs.xml | 1 + Habitica/res/values/colors.xml | 2 +- Habitica/res/values/dimens.xml | 2 +- Habitica/res/values/styles.xml | 9 ++++++ .../habitica/components/UserComponent.java | 2 -- .../preferences/AccountPreferenceFragment.kt | 6 ++-- .../habitica/ui/views/ValidatingEditText.kt | 2 +- .../widget/AvatarStatsWidgetProvider.kt | 28 +++++++++++++++---- 16 files changed, 73 insertions(+), 35 deletions(-) create mode 100644 Habitica/res/values-v31/styles.xml diff --git a/Habitica/build.gradle b/Habitica/build.gradle index e3dadc526..46b198775 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -50,6 +50,7 @@ dependencies { implementation 'com.google.dagger:dagger:2.39.1' kapt 'com.google.dagger:dagger-compiler:2.39.1' compileOnly 'javax.annotation:javax.annotation-api:1.3.2' + compileOnly 'com.github.pengrad:jdk9-deps:1.0' //App Compatibility and Material Design implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.google.android.material:material:1.4.0' @@ -151,7 +152,7 @@ android { buildConfigField "String", "TESTING_LEVEL", "\"production\"" resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW" - versionCode 3102 + versionCode 3109 versionName "3.4.2" targetSdkVersion 31 diff --git a/Habitica/res/drawable/widget_background.xml b/Habitica/res/drawable/widget_background.xml index df3a989a9..95b667dc4 100644 --- a/Habitica/res/drawable/widget_background.xml +++ b/Habitica/res/drawable/widget_background.xml @@ -2,6 +2,6 @@ - - + + \ No newline at end of file diff --git a/Habitica/res/layout/widget_avatar_stats.xml b/Habitica/res/layout/widget_avatar_stats.xml index 4f738032d..8ef484341 100644 --- a/Habitica/res/layout/widget_avatar_stats.xml +++ b/Habitica/res/layout/widget_avatar_stats.xml @@ -2,15 +2,17 @@ + android:orientation="vertical" + android:theme="@style/MyWidgetTheme"> @@ -109,7 +111,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:textColor="@color/text_primary" + android:textColor="?android:attr/textColorPrimary" android:textSize="11sp"/> @@ -158,7 +160,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:textColor="@color/text_primary" + android:textColor="?android:attr/textColorPrimary" android:textSize="11sp"/> @@ -184,7 +186,7 @@ android:layout_height="wrap_content" android:gravity="center" android:textSize="14sp" - android:textColor="@color/text_secondary" /> + android:textColor="?android:attr/textColorSecondary" /> @@ -216,7 +218,7 @@ android:id="@+id/gems_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="@color/text_secondary" + android:textColor="?android:attr/textColorSecondary" style="@style/CurrencyTextView" /> @@ -230,7 +232,7 @@ android:id="@+id/gold_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="@color/text_secondary" + android:textColor="?android:attr/textColorSecondary" style="@style/CurrencyTextView" /> diff --git a/Habitica/res/layout/widget_dailies_list_row.xml b/Habitica/res/layout/widget_dailies_list_row.xml index fcd676cf1..0c8b69088 100644 --- a/Habitica/res/layout/widget_dailies_list_row.xml +++ b/Habitica/res/layout/widget_dailies_list_row.xml @@ -7,7 +7,7 @@ + android:background="@color/content_background"> + android:textColor="@color/text_primary" /> diff --git a/Habitica/res/layout/widget_task_list.xml b/Habitica/res/layout/widget_task_list.xml index 7b7be4199..7166b11f9 100644 --- a/Habitica/res/layout/widget_task_list.xml +++ b/Habitica/res/layout/widget_task_list.xml @@ -2,7 +2,8 @@ + android:orientation="vertical" + android:theme="@style/MyWidgetTheme"> + android:layout_height="wrap_content" + android:theme="@style/MyWidgetTheme"> + android:background="@color/content_background"> + android:textColor="@color/text_primary" /> + + + \ No newline at end of file diff --git a/Habitica/res/values/attrs.xml b/Habitica/res/values/attrs.xml index e09e02790..9477e9d6c 100644 --- a/Habitica/res/values/attrs.xml +++ b/Habitica/res/values/attrs.xml @@ -26,6 +26,7 @@ + diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml index 56665d057..788784c56 100644 --- a/Habitica/res/values/colors.xml +++ b/Habitica/res/values/colors.xml @@ -101,7 +101,7 @@ @color/green_10 @color/red_10 - @color/gray_700 + @color/white @color/offset_background @color/window_background diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml index 68a3250b4..2391873b4 100644 --- a/Habitica/res/values/dimens.xml +++ b/Habitica/res/values/dimens.xml @@ -53,7 +53,7 @@ 16sp 14sp 2dp - 88dp + 92dp 120dp 20dp 68dp diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml index e0c3b08a0..0e2cf5940 100644 --- a/Habitica/res/values/styles.xml +++ b/Habitica/res/values/styles.xml @@ -253,6 +253,13 @@ @color/blue_100 + + + + 12dp \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java index 229e96376..47622c126 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/UserComponent.java @@ -108,7 +108,6 @@ import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog; import com.habitrpg.android.habitica.ui.views.social.ChatBarView; import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog; import com.habitrpg.android.habitica.ui.views.tasks.TaskFilterDialog; -import com.habitrpg.android.habitica.widget.AvatarStatsWidgetFactory; import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider; import com.habitrpg.android.habitica.widget.BaseWidgetProvider; import com.habitrpg.android.habitica.widget.DailiesWidgetProvider; @@ -344,7 +343,6 @@ public interface UserComponent { void inject(@NotNull EquipmentOverviewViewModel equipmentOverviewViewModel); - void inject(@NotNull AvatarStatsWidgetFactory avatarStatsWidgetFactory); void inject(@NotNull AccountPreferenceFragment accountPreferenceFragment); void inject(@NotNull AuthenticationViewModel authenticationViewModel); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt index f98319fb4..22e36a532 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/AccountPreferenceFragment.kt @@ -86,7 +86,7 @@ class AccountPreferenceFragment: BasePreferencesFragment(), val passwordPref = findPreference("password") if (user.authentication?.hasPassword == true) { - passwordPref?.summary = "✴✴✴✴✴✴✴✴✴✴✴" + passwordPref?.summary = "···········" passwordPref?.extraText = getString(R.string.change_password) } else { passwordPref?.summary = getString(R.string.not_set) @@ -350,8 +350,8 @@ class AccountPreferenceFragment: BasePreferencesFragment(), dialog.setTitle(R.string.change_email) dialog.addButton(R.string.change, true, false, false) { dialog, _ -> KeyboardUtil.dismissKeyboard(activity) - if (passwordEditText?.isValid != true || emailEditText?.isValid != true) return@addButton - userRepository.updateEmail(emailEditText.text.toString(), passwordEditText.text.toString()) + if (emailEditText?.isValid != true) return@addButton + userRepository.updateEmail(emailEditText.text.toString(), passwordEditText?.text.toString()) .flatMap { userRepository.retrieveUser(true, true) } .subscribe( { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt index c81274863..62a50029a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/ValidatingEditText.kt @@ -28,7 +28,7 @@ class ValidatingEditText @JvmOverloads constructor( var validator: ((String?) -> Boolean)? = null val isValid: Boolean - get() = validator?.invoke(text) == true + get() = validator?.invoke(text) != false init { orientation = VERTICAL diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt index ceb4369a8..6e7ee96a1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt @@ -11,6 +11,7 @@ import android.widget.RemoteViews import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.dpToPx +import com.habitrpg.android.habitica.extensions.withImmutableFlag import com.habitrpg.android.habitica.helpers.HealthFormatter import com.habitrpg.android.habitica.helpers.NumberAbbreviator import com.habitrpg.android.habitica.helpers.RxErrorHandler @@ -21,6 +22,7 @@ import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper class AvatarStatsWidgetProvider : BaseWidgetProvider() { + private var user: User? = null private var appWidgetManager: AppWidgetManager? = null private var showManaBar: Boolean = true @@ -37,13 +39,28 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() { } } + override fun onEnabled(context: Context) { + super.onEnabled(context) + userRepository.getUser().subscribe({ + user = it + updateData() + }, RxErrorHandler.handleEmptyError()) + } + override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { super.onUpdate(context, appWidgetManager, appWidgetIds) this.setUp() this.appWidgetManager = appWidgetManager this.context = context - userRepository.getUser().firstElement()?.subscribe({ this.updateData(it) }, RxErrorHandler.handleEmptyError()) + if (user == null) { + userRepository.getUser().firstElement()?.subscribe({ + user = it + updateData(appWidgetIds) + }, RxErrorHandler.handleEmptyError()) + } else { + updateData() + } } override fun configureRemoteViews(remoteViews: RemoteViews, widgetId: Int, columns: Int, rows: Int): RemoteViews { @@ -64,15 +81,16 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() { return remoteViews } - private fun updateData(user: User?) { + private fun updateData(widgetIds: IntArray? = null) { val context = context val appWidgetManager = appWidgetManager + val user = user val stats = user?.stats if (user == null || stats == null || context == null || appWidgetManager == null) { return } val thisWidget = ComponentName(context, AvatarStatsWidgetProvider::class.java) - val allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget) + val allWidgetIds = widgetIds ?: appWidgetManager.getAppWidgetIds(thisWidget) val currentHealth = HealthFormatter.format(stats.hp ?: 0.0) val currentHealthString = HealthFormatter.formatToString(stats.hp ?: 0.0) val healthValueString = currentHealthString + "/" + stats.maxHealth @@ -125,8 +143,8 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() { } val openAppIntent = Intent(context.applicationContext, MainActivity::class.java) - val openApp = PendingIntent.getActivity(context, 0, openAppIntent, PendingIntent.FLAG_UPDATE_CURRENT) - remoteViews.setOnClickPendingIntent(R.id.widget_main_view, openApp) + val openApp = PendingIntent.getActivity(context, 0, openAppIntent, withImmutableFlag(PendingIntent.FLAG_UPDATE_CURRENT)) + remoteViews.setOnClickPendingIntent(android.R.id.background, openApp) val options = appWidgetManager.getAppWidgetOptions(widgetId) remoteViews = sizeRemoteViews(context, options, widgetId)