package com.jdroid.android.feedback; import com.jdroid.android.context.UsageStats; import com.jdroid.android.utils.SharedPreferencesHelper; import com.jdroid.java.date.DateUtils; public class RateAppStats { private static final String RATE_APP_STATS = "rateAppStats"; private static final String LAST_RESPONSE_TIMESTAMP = "lastResponseTimestamp"; private static final String ENJOYING = "enjoying"; private static final String GIVE_FEEDBACK = "giveFeedback"; private static final String RATE_ON_GOOGLE_PLAY = "rateOnGooglePlay"; private static SharedPreferencesHelper sharedPreferencesHelper; public static void setEnjoyingApp(Boolean enjoying) { getSharedPreferencesHelper().savePreferenceAsync(ENJOYING, enjoying); getSharedPreferencesHelper().savePreferenceAsync(LAST_RESPONSE_TIMESTAMP, DateUtils.nowMillis()); } public static Boolean getEnjoyingApp() { return getSharedPreferencesHelper().loadPreferenceAsBoolean(ENJOYING); } public static void setGiveFeedback(Boolean feedback) { getSharedPreferencesHelper().savePreferenceAsync(GIVE_FEEDBACK, feedback); getSharedPreferencesHelper().savePreferenceAsync(LAST_RESPONSE_TIMESTAMP, DateUtils.nowMillis()); } public static Boolean getGiveFeedback() { return getSharedPreferencesHelper().loadPreferenceAsBoolean(GIVE_FEEDBACK); } public static void setRateOnGooglePlay(Boolean rate) { getSharedPreferencesHelper().savePreferenceAsync(RATE_ON_GOOGLE_PLAY, rate); getSharedPreferencesHelper().savePreferenceAsync(LAST_RESPONSE_TIMESTAMP, DateUtils.nowMillis()); } public static Boolean getRateOnGooglePlay() { return getSharedPreferencesHelper().loadPreferenceAsBoolean(RATE_ON_GOOGLE_PLAY); } public static Long getLastResponseTimestamp() { return getSharedPreferencesHelper().loadPreferenceAsLong(LAST_RESPONSE_TIMESTAMP, 0L); } public static void reset() { getSharedPreferencesHelper().removeAllPreferences(); } private static SharedPreferencesHelper getSharedPreferencesHelper() { if (sharedPreferencesHelper == null) { sharedPreferencesHelper = SharedPreferencesHelper.get(RATE_APP_STATS); } return sharedPreferencesHelper; } public static Boolean displayRateAppView() { Boolean alreadyRated = getRateOnGooglePlay(); Boolean enoughDaysSinceLastResponse = DateUtils.millisecondsToDays(RateAppStats.getLastResponseTimestamp()) >= 90; Boolean enoughDaysSinceFirstAppLoad = DateUtils.millisecondsToDays(UsageStats.getFirstAppLoadTimestamp()) >= 7; Boolean enoughAppLoads = UsageStats.getAppLoads() >= 10; Boolean enoughDaysSinceLastCrash = DateUtils.millisecondsToDays(UsageStats.getLastCrashTimestamp()) >= 21; return (alreadyRated == null || !alreadyRated) && enoughDaysSinceLastResponse && enoughDaysSinceFirstAppLoad && enoughAppLoads && enoughDaysSinceLastCrash; } }