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)