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 {