First draft for review requests

blinds
Laurent 4 years ago
parent dc0840461b
commit 1ee6b2d142
  1. 10
      app/src/main/java/net/pokeranalytics/android/ui/activity/components/BaseActivity.kt
  2. 1
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BaseFragment.kt
  3. 4
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt
  4. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt
  5. 58
      app/src/main/java/net/pokeranalytics/android/ui/helpers/AppReviewManager.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarDetailsFragment.kt
  7. 18
      app/src/main/java/net/pokeranalytics/android/util/Preferences.kt

@ -16,6 +16,7 @@ import io.realm.Realm
import net.pokeranalytics.android.model.realm.Location
import net.pokeranalytics.android.util.CrashLogging
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.helpers.AppReviewManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.util.LocationManager
import net.pokeranalytics.android.util.PermissionRequest
@ -40,10 +41,6 @@ abstract class BaseActivity : AppCompatActivity() {
ViewModelProvider(this).get(RootBottomSheetViewModel::class.java)
}
// var bottomSheetRow: RowRepresentable?
// get() { return this.bottomSheetViewModel.rowRepresentable }
// set(value) { this.bottomSheetViewModel.rowRepresentable = value }
fun setBottomSheetParameters(rowRepresentable: RowRepresentable, delegate: RowRepresentableDelegate) {
this.bottomSheetViewModel.rowRepresentable = rowRepresentable
this.bottomSheetViewModel.delegate = delegate
@ -83,6 +80,11 @@ abstract class BaseActivity : AppCompatActivity() {
this.realm?.close()
}
override fun onBackPressed() {
super.onBackPressed()
AppReviewManager.showReviewManager(this)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)

@ -7,6 +7,7 @@ import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import com.google.android.play.core.review.ReviewManagerFactory
import net.pokeranalytics.android.R
import net.pokeranalytics.android.util.CrashLogging
import net.pokeranalytics.android.ui.activity.components.BaseActivity

@ -7,6 +7,7 @@ import android.view.ViewGroup
import com.google.android.material.tabs.TabLayout
import net.pokeranalytics.android.databinding.FragmentReportDetailsBinding
import net.pokeranalytics.android.ui.adapter.ReportPagerAdapter
import net.pokeranalytics.android.ui.helpers.AppReviewManager
class ComparisonReportFragment : AbstractReportFragment() {
@ -27,7 +28,8 @@ class ComparisonReportFragment : AbstractReportFragment() {
override fun onDestroyView() {
super.onDestroyView()
_binding = null
AppReviewManager.requestReview()
_binding = null
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {

@ -29,6 +29,7 @@ import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.extensions.showWithAnimation
import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.graph.Graph
import net.pokeranalytics.android.ui.helpers.AppReviewManager
import timber.log.Timber
import java.util.*
@ -87,6 +88,8 @@ class ProgressReportFragment : AbstractReportFragment() {
// fragmentTransaction.commit()
// }
AppReviewManager.requestReview()
super.onDestroyView()
_binding = null
}

@ -0,0 +1,58 @@
package net.pokeranalytics.android.ui.helpers
import android.app.Activity
import android.content.Context
import com.google.android.play.core.review.ReviewManagerFactory
import net.pokeranalytics.android.util.Preferences
import java.util.*
object AppReviewManager {
private var reviewRequested: Boolean = false
fun requestReview() {
this.reviewRequested = true
}
fun showReviewManager(activity: Activity) {
if (this.reviewRequested && this.shouldAskForReview(activity.baseContext)) {
this.reviewRequested = false
val manager = ReviewManagerFactory.create(activity.applicationContext)
val task = manager.requestReviewFlow()
task.addOnCompleteListener { request ->
if (request.isSuccessful) {
Preferences.setLastReviewRequestDate(Date().time, activity.applicationContext)
// We got the ReviewInfo object
val reviewInfo = request.result
val flow = manager.launchReviewFlow(activity, reviewInfo)
flow.addOnCompleteListener {
// completed
}
} else {
// There was some problem, continue regardless of the result.
}
}
}
}
private fun shouldAskForReview(context: Context): Boolean {
val now = Date().time
val firstLaunch = Preferences.getFirstLaunchDate(context)
if (now - firstLaunch < 20 * 24 * 3600 * 1000L) {
return false
}
val lastReviewRequest = Preferences.getLastReviewRequestDate(context)
if (now - lastReviewRequest < 90 * 24 * 3600 * 1000L) {
return false
}
return true
}
}

@ -28,6 +28,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.BaseFragment
import net.pokeranalytics.android.ui.helpers.AppReviewManager
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rows.CustomizableRowRepresentable
@ -70,6 +71,7 @@ class CalendarDetailsFragment : BaseFragment(), StaticRowRepresentableDataSource
override fun onDestroyView() {
super.onDestroyView()
AppReviewManager.requestReview()
_binding = null
}

@ -23,7 +23,7 @@ class Preferences {
enum class Keys(override var identifier: String) : PreferenceKey {
CURRENCY_CODE("CurrencyCode"),
LOCALE_CODE("LocaleCode"),
// FIRST_LAUNCH("firstLaunch"),
FIRST_LAUNCH("firstLaunch"),
STOP_SHOWING_DISCLAIMER("stopShowingDisclaimer"),
STOP_SHOWING_DUPLICATE("stopShowingDuplicate"),
STOP_SHOWING_DISCORD("stopShowingDiscord"),
@ -42,6 +42,7 @@ class Preferences {
LATEST_BLOG_POST_ID_DISPLAYED("latestBlogPostIdDisplayed"),
LAST_BLOG_TIPS_RETRIEVAL("lastBlogTipsRetrieval"),
SHOW_BLOG_TIPS("showBlogTips"),
LAST_REVIEW_REQUEST_DATE("lastReviewRequestDate")
}
enum class FeedMessage {
@ -283,6 +284,21 @@ class Preferences {
return getLong(Keys.LAST_BLOG_TIPS_RETRIEVAL, context)
}
fun setLastReviewRequestDate(date: Long, context: Context) {
setLong(Keys.LAST_REVIEW_REQUEST_DATE, date, context)
}
fun getLastReviewRequestDate(context: Context): Long {
return getLong(Keys.LAST_REVIEW_REQUEST_DATE, context)
}
fun setFirstLaunchDate(date: Long, context: Context) {
setLong(Keys.FIRST_LAUNCH, date, context)
}
fun getFirstLaunchDate(context: Context): Long {
return getLong(Keys.FIRST_LAUNCH, context)
}
}
}

Loading…
Cancel
Save