33
33
import com .android .billingclient .api .Purchase ;
34
34
import com .android .billingclient .api .PurchasesUpdatedListener ;
35
35
import com .android .billingclient .api .QueryProductDetailsParams ;
36
+ import com .google .android .gms .tasks .Task ;
36
37
import com .google .android .material .floatingactionbutton .FloatingActionButton ;
38
+ import com .google .android .play .core .review .ReviewException ;
39
+ import com .google .android .play .core .review .ReviewInfo ;
40
+ import com .google .android .play .core .review .ReviewManager ;
41
+ import com .google .android .play .core .review .ReviewManagerFactory ;
42
+ import com .google .android .play .core .review .model .ReviewErrorCode ;
37
43
import com .nitramite .apcupsdmonitor .notifier .PushUtils ;
38
44
import com .wdullaer .swipeactionadapter .SwipeActionAdapter ;
39
45
import com .wdullaer .swipeactionadapter .SwipeDirection ;
40
46
41
47
import java .util .ArrayList ;
42
48
import java .util .Collections ;
43
49
import java .util .List ;
50
+ import java .util .Objects ;
44
51
45
52
@ SuppressWarnings ("FieldCanBeLocal" )
46
53
public class MainMenu extends AppCompatActivity implements ConnectorInterface , PurchasesUpdatedListener ,
@@ -60,6 +67,7 @@ public class MainMenu extends AppCompatActivity implements ConnectorInterface, P
60
67
private ArrayList <UPS > upsArrayList = new ArrayList <>();
61
68
private ListView upsListView ;
62
69
private SwipeRefreshLayout swipeRefreshLayout ;
70
+ private ReviewManager reviewManager ;
63
71
64
72
// Activity request codes
65
73
public static final int ACTIVITY_RESULT_NEW_UPS_ADDED = 1 ;
@@ -105,6 +113,8 @@ protected void onCreate(Bundle savedInstanceState) {
105
113
106
114
setAppActivityRunning (true );
107
115
116
+ reviewManager = ReviewManagerFactory .create (this );
117
+
108
118
// Floating action buttons
109
119
FloatingActionButton floatingAddUpsBtn = findViewById (R .id .floatingAddNewUpsBtn );
110
120
floatingAddUpsBtn .setOnClickListener (view -> {
@@ -137,6 +147,7 @@ protected void onCreate(Bundle savedInstanceState) {
137
147
138
148
// Get status data
139
149
startConnectorTask ();
150
+ reviewFlow ();
140
151
} // End of onCreate()
141
152
142
153
@@ -410,6 +421,37 @@ public void onRefresh() {
410
421
startConnectorTask ();
411
422
}
412
423
424
+
425
+ private void reviewFlow () {
426
+ int launchCount = sharedPreferences .getInt (Constants .SP_APP_LAUNCH_COUNT , 0 );
427
+ launchCount ++;
428
+ sharedPreferences .edit ().putInt (Constants .SP_APP_LAUNCH_COUNT , launchCount ).apply ();
429
+
430
+ if (launchCount % 5 == 0 ) {
431
+ Task <ReviewInfo > request = reviewManager .requestReviewFlow ();
432
+ request .addOnCompleteListener (task -> {
433
+ if (task .isSuccessful ()) {
434
+ ReviewInfo reviewInfo = task .getResult ();
435
+ boolean hasReviewed = sharedPreferences .getBoolean (Constants .SP_HAS_REVIEWED , false );
436
+ if (!hasReviewed ) {
437
+ Task <Void > flow = reviewManager .launchReviewFlow (MainMenu .this , reviewInfo );
438
+ flow .addOnCompleteListener (t -> {
439
+ sharedPreferences .edit ().putBoolean (Constants .SP_HAS_REVIEWED , true ).apply ();
440
+ });
441
+ } else {
442
+ Log .d (TAG , "User has already reviewed the app." );
443
+ }
444
+ } else {
445
+ @ ReviewErrorCode int reviewErrorCode = ((ReviewException ) Objects .requireNonNull (task .getException ())).getErrorCode ();
446
+ Log .e (TAG , "Review flow error with code " + reviewErrorCode );
447
+ }
448
+ });
449
+ } else {
450
+ Log .d (TAG , "App launch count: " + launchCount + ". Not running review flow." );
451
+ }
452
+ }
453
+
454
+
413
455
// ---------------------------------------------------------------------------------------------
414
456
415
457
@ Override
0 commit comments