diff --git a/Habitica/res/layout/fragment_about.xml b/Habitica/res/layout/fragment_about.xml
index c9cd4839f..3ed993968 100644
--- a/Habitica/res/layout/fragment_about.xml
+++ b/Habitica/res/layout/fragment_about.xml
@@ -5,7 +5,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:scrollbarSize="3dp"
android:scrollbarThumbVertical="@color/scrollbarThumb"
- android:scrollbars="vertical">
+ android:scrollbars="vertical"
+ android:background="@color/white">
+
+
+
+
+
+
+
+
+
+ android:textSize="@dimen/abc_text_size_medium_material" />
-
\ No newline at end of file
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index fa0f49240..48db2550a 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -881,4 +881,5 @@
Checklist Text
New reminder
Streak
+ Update available: %1$s (%2$d)
diff --git a/Habitica/res/xml/remote_config_defaults.xml b/Habitica/res/xml/remote_config_defaults.xml
index 120b9771c..9bc823c69 100644
--- a/Habitica/res/xml/remote_config_defaults.xml
+++ b/Habitica/res/xml/remote_config_defaults.xml
@@ -24,5 +24,13 @@
enableLocalChanges
true
+
+ lastVersionNumber
+
+
+
+ lastVersionCode
+ 0
+
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.kt
index b77b20e94..447d99249 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/RemoteConfigManager.kt
@@ -44,4 +44,12 @@ class RemoteConfigManager {
fun enableLocalChanges(): Boolean {
return remoteConfig.getBoolean("enableLocalChanges")
}
+
+ fun lastVersionNumber(): String {
+ return remoteConfig.getString("lastVersionNumber")
+ }
+
+ fun lastVersionCode(): Long {
+ return remoteConfig.getLong("lastVersionCode")
+ }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt
index 7ba54ee08..34b5195f8 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/AvatarView.kt
@@ -122,7 +122,7 @@ class AvatarView : View {
.build()
val draweeHolder = DraweeHolder.create(hierarchy, context)
- draweeHolder.topLevelDrawable.callback = this
+ draweeHolder.topLevelDrawable?.callback = this
multiDraweeHolder.add(draweeHolder)
val controller = Fresco.newDraweeControllerBuilder()
@@ -134,7 +134,7 @@ class AvatarView : View {
anim: Animatable?) {
if (imageInfo != null) {
if (multiDraweeHolder.size() > layerNumber) {
- multiDraweeHolder.get(layerNumber).topLevelDrawable.bounds = getLayerBounds(layerKey, layerName, imageInfo)
+ multiDraweeHolder.get(layerNumber).topLevelDrawable?.bounds = getLayerBounds(layerKey, layerName, imageInfo)
}
onLayerComplete()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt
index 8dc2018b8..2bc7b3472 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/AboutFragment.kt
@@ -10,8 +10,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AccelerateInterpolator
+import android.widget.TextView
import android.widget.Toast
import androidx.core.net.toUri
+import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.AppComponent
import com.habitrpg.android.habitica.data.UserRepository
@@ -20,6 +22,7 @@ import com.habitrpg.android.habitica.helpers.RemoteConfigManager
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
+import com.habitrpg.android.habitica.ui.helpers.bindView
import com.plattysoft.leonids.ParticleSystem
import kotlinx.android.synthetic.main.fragment_about.*
import javax.inject.Inject
@@ -34,6 +37,9 @@ class AboutFragment : BaseMainFragment() {
@Inject
lateinit var remoteConfigManager: RemoteConfigManager
+ private val updateAvailableWrapper: ViewGroup by bindView(R.id.update_available_wrapper)
+ private val updateAvailableTextView: TextView by bindView(R.id.update_available_textview)
+
override fun injectFragment(component: AppComponent) {
component.inject(this)
}
@@ -50,8 +56,8 @@ class AboutFragment : BaseMainFragment() {
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- super.onCreateView(inflater, container, savedInstanceState)
this.hidesToolbar = true
+ super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_about, container, false)
}
@@ -64,7 +70,7 @@ class AboutFragment : BaseMainFragment() {
1 -> context.notNull { context ->
Toast.makeText(context, "Oh! You tapped me!", Toast.LENGTH_SHORT).show()
}
- in 4..7 -> context.notNull { context ->
+ in 5..7 -> context.notNull { context ->
Toast.makeText(context, "Only ${8 - versionNumberTappedCount} taps left!", Toast.LENGTH_SHORT).show()
}
8 -> {
@@ -100,12 +106,20 @@ class AboutFragment : BaseMainFragment() {
versionInfo.text = getString(R.string.version_info, versionName, versionCode)
+ if (remoteConfigManager.lastVersionCode() > versionCode) {
+ updateAvailableWrapper.visibility = View.VISIBLE
+ updateAvailableTextView.text = getString(R.string.update_available, remoteConfigManager.lastVersionNumber(), remoteConfigManager.lastVersionCode())
+ } else {
+ updateAvailableWrapper.visibility = View.GONE
+ }
+
sourceCodeLink.setOnClickListener { openBrowserLink(androidSourceCodeLink) }
twitter.setOnClickListener { openBrowserLink(twitterLink) }
sourceCodeButton.setOnClickListener { openBrowserLink(androidSourceCodeLink) }
reportBug.setOnClickListener { sendEmail("[Android] Bugreport") }
sendFeedback.setOnClickListener { sendEmail("[Android] Feedback") }
googlePlayStoreButton.setOnClickListener { openGooglePlay() }
+ updateAvailableWrapper.setOnClickListener { openGooglePlay() }
}
private fun openBrowserLink(url: String) {
@@ -142,6 +156,7 @@ class AboutFragment : BaseMainFragment() {
}
private fun doTheThing() {
+ context?.let { FirebaseAnalytics.getInstance(it).logEvent("found_easter_egg", null) }
DataBindingUtils.loadImage("Pet-Sabretooth-Base") {bitmap ->
activity?.runOnUiThread {
activity.notNull {