diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index f3601912..19bbd1c8 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -1,6 +1,7 @@ package net.pokeranalytics.android import android.app.Application +import android.content.Context import com.crashlytics.android.Crashlytics import com.crashlytics.android.core.CrashlyticsCore import io.fabric.sdk.android.Fabric @@ -22,6 +23,15 @@ import timber.log.Timber class PokerAnalyticsApplication : Application() { + companion object { + + fun timeSinceInstall(context: Context): Long { + val installTime: Long = context.packageManager.getPackageInfo(context.packageName, 0).firstInstallTime + return System.currentTimeMillis() - installTime + } + + } + override fun onCreate() { super.onCreate() UserDefaults.init(this) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt index 2da60452..d59709fd 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt @@ -1,5 +1,6 @@ package net.pokeranalytics.android.ui.extensions +import android.app.Activity import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent @@ -16,10 +17,10 @@ import androidx.browser.customtabs.CustomTabsIntent import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.core.view.isVisible +import androidx.fragment.app.Fragment import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.components.BaseActivity -import net.pokeranalytics.android.ui.fragment.components.BaseFragment import net.pokeranalytics.android.util.DeviceUtils import net.pokeranalytics.android.util.TextFormat import net.pokeranalytics.android.util.URL @@ -39,16 +40,16 @@ val Float.px: Float // Toast -fun BaseActivity.toast(message: String) { +fun Activity.toast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() } -fun BaseFragment.toast(message: String) { +fun Fragment.toast(message: String) { Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() } // Open Play Store for rating -fun BaseActivity.openPlayStorePage() { +fun Activity.openPlayStorePage() { val uri = Uri.parse("market://details?id=$packageName") val goToMarket = Intent(Intent.ACTION_VIEW, uri) goToMarket.addFlags( @@ -94,19 +95,19 @@ fun BaseActivity.openContactMail(subjectStringRes: Int, filePath: String? = null } // Open custom tab -fun BaseActivity.openUrl(url: String) { +fun Context.openUrl(url: String) { val builder: CustomTabsIntent.Builder = CustomTabsIntent.Builder() - builder.setToolbarColor(ContextCompat.getColor(this, net.pokeranalytics.android.R.color.colorPrimary)) + builder.setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary)) val customTabsIntent = builder.build() customTabsIntent.launchUrl(this, Uri.parse(url)) } // Display Alert Dialog -fun BaseActivity.showAlertDialog(title: Int? = null, message: Int? = null) { +fun Activity.showAlertDialog(title: Int? = null, message: Int? = null) { showAlertDialog(this, title, message) } -fun BaseFragment.showAlertDialog(title: Int? = null, message: Int? = null) { +fun Fragment.showAlertDialog(title: Int? = null, message: Int? = null) { context?.let { showAlertDialog(it, title, message) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt index 22672d8b..31ec10c2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/FeedFragment.kt @@ -221,13 +221,21 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { messageBox.isVisible = true message.text = getString(messageToShow.resId) - messageBoxDismiss.setOnClickListener { - Preferences.setStopShowingMessage(messageToShow, requireContext()) + messageToShow.actionResId?.let { + messageBoxAction.text = requireContext().getString(it) + messageToShow.action(requireContext())?.let { action -> + messageBoxAction.setOnClickListener { + action.invoke(it) + hideMessageBox(messageToShow) + } + } + } ?: run { + messageBoxAction.visibility = View.GONE + } - messageBox.animate().translationY(messageBox.height.toFloat()) - .setInterpolator(FastOutSlowInInterpolator()) - .withEndAction { messageBox?.isVisible = false } - .start() + messageBoxDismiss.text = requireContext().getString(messageToShow.dismissResId) + messageBoxDismiss.setOnClickListener { + hideMessageBox(messageToShow) } } else { messageBox.isVisible = false @@ -265,6 +273,15 @@ class FeedFragment : FilterableFragment(), RowRepresentableDelegate { } + private fun hideMessageBox(message: Preferences.FeedMessage) { + Preferences.setStopShowingMessage(message, requireContext()) + + messageBox.animate().translationY(messageBox.height.toFloat()) + .setInterpolator(FastOutSlowInInterpolator()) + .withEndAction { messageBox?.isVisible = false } + .start() + } + /** * Init data */ diff --git a/app/src/main/java/net/pokeranalytics/android/util/Global.kt b/app/src/main/java/net/pokeranalytics/android/util/Global.kt index 978e6109..5c7a43f4 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/Global.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/Global.kt @@ -1,3 +1,5 @@ package net.pokeranalytics.android.util -val NULL_TEXT: String = "--" +import android.content.Context + +const val NULL_TEXT: String = "--" diff --git a/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt b/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt index ae2a8138..d6d6d580 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/Preferences.kt @@ -2,9 +2,12 @@ package net.pokeranalytics.android.util import android.content.Context import android.preference.PreferenceManager +import android.view.View import io.realm.Realm +import net.pokeranalytics.android.PokerAnalyticsApplication import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.ui.extensions.openUrl import net.pokeranalytics.android.util.extensions.count import java.util.* @@ -29,6 +32,7 @@ class Preferences { FIRST_LAUNCH("firstLaunch"), STOP_SHOWING_DISCLAIMER("stopShowingDisclaimer"), STOP_SHOWING_DUPLICATE("stopShowingDuplicate"), + STOP_SHOWING_DISCORD("stopShowingDiscord"), ACTIVE_FILTER_ID("ActiveFilterId"), LATEST_PURCHASE("latestPurchase"), PATCH_BREAK("patchBreaks"), @@ -40,6 +44,7 @@ class Preferences { enum class FeedMessage { DISCLAIMER, + DISCORD, DUPLICATE; val resId: Int @@ -47,6 +52,7 @@ class Preferences { return when (this) { DISCLAIMER -> R.string.disclaimer DUPLICATE -> R.string.longtap_to_duplicate + DISCORD -> R.string.discord_feed_message } } @@ -55,6 +61,30 @@ class Preferences { return when (this) { DISCLAIMER -> Keys.STOP_SHOWING_DISCLAIMER DUPLICATE -> Keys.STOP_SHOWING_DUPLICATE + DISCORD -> Keys.STOP_SHOWING_DISCORD + } + } + + val actionResId: Int? + get() { + return when (this) { + DISCORD -> R.string.join_discord + else -> null + } + } + + fun action(context: Context): ((View) -> (Unit))? { + return when (this) { + DISCORD -> { { context.openUrl(URL.DISCORD.value) } } + else -> null + } + } + + val dismissResId: Int + get() { + return when (this) { + DISCORD -> R.string.good_for_you + else -> R.string.iunderstand } } @@ -88,7 +118,11 @@ class Preferences { editor.apply() } - fun getBoolean(key: PreferenceKey, context: Context, defaultValue: Boolean? = false): Boolean { + fun getBoolean( + key: PreferenceKey, + context: Context, + defaultValue: Boolean? = false + ): Boolean { val preferences = PreferenceManager.getDefaultSharedPreferences(context) return preferences.getBoolean(key.identifier, defaultValue ?: false) } @@ -133,10 +167,11 @@ class Preferences { } fun setStopShowingMessage(message: FeedMessage, context: Context) { - setBoolean(message.key,true, context) + setBoolean(message.key, true, context) } fun feedMessageToShow(context: Context): FeedMessage? { +// return FeedMessage.DISCORD if (!getBoolean(Keys.STOP_SHOWING_DISCLAIMER, context)) { return FeedMessage.DISCLAIMER @@ -148,6 +183,11 @@ class Preferences { if (sessionCount > 1 && !getBoolean(Keys.STOP_SHOWING_DUPLICATE, context)) { return FeedMessage.DUPLICATE } + + if (!getBoolean(Keys.STOP_SHOWING_DISCORD, context) && PokerAnalyticsApplication.timeSinceInstall(context) > 1000 * 3600 * 24 * 30L) { + return FeedMessage.DISCORD + } + return null } diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index db34795c..3c58f015 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -125,6 +125,15 @@ android:textColor="@color/white" tools:visibility="visible" /> + + + android:layout_marginEnd="16dp"/> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index bead8c41..8f40f484 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -691,5 +691,7 @@ Poker Analytics benötigt Zugriff auf Face ID, damit Sie die App per Gesichtserkennung entsperren können. Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 60bf46ee..6d2113b0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -692,5 +692,7 @@ Poker Analytics desea acceder a Face ID para permitir desbloquear la aplicación con reconocimiento facial. Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bbfc9a17..5eb8300e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -760,5 +760,7 @@ Voulez-vous vraiment supprimer cette partie ? Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 8b9d6469..61a16083 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -691,5 +691,7 @@ Poker Analytics आपको चेहरा पहचान कर एप्प खोलने की अनुमति के ल‍िए Face ID तक पहुँच चाहता है Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 845ae047..6f825284 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -691,5 +691,7 @@ Poker Analytics vuole accedere a Face ID per consentirti di sbloccare l\'app tramite riconoscimento facciale Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 328601c9..29693161 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -691,5 +691,7 @@ 顔認識でアプリのロックを解除できるようにするため、Poker AnalyticsがFace IDをへのアクセスを要求しています Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 8887f21b..07ffef51 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -690,5 +690,7 @@ O Poker Analytics deseja salvar esta imagem na sua biblioteca de Fotos O Poker Analytics deseja acessar o Face ID para permitir que você desbloqueie o aplicativo com reconhecimento facial Poker Rumble + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d61e9b9d..d328257c 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -692,5 +692,7 @@ Poker Analytics хочет получить доступ к Face ID, чтобы вы могли разблокировать приложение c помощью идентификации по лицу Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values-v24/strings.xml b/app/src/main/res/values-v24/strings.xml index 9f8277db..2ec9f97f 100644 --- a/app/src/main/res/values-v24/strings.xml +++ b/app/src/main/res/values-v24/strings.xml @@ -1,4 +1,6 @@ Poker Rumble + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! \ No newline at end of file diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 8e30e827..54d7f266 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -687,5 +687,7 @@ Poker Analytics希望访问Face ID以便通过人脸识别解锁本应用 Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a208c66..147236df 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -771,5 +771,7 @@ Poker Analytics wants to access Face ID to let you unlock the app with face recognition Poker Rumble Join us on Discord! + We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app! + Good for you! diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 63c46bef..e73bbacb 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -341,13 +341,16 @@ 12sp + + -