Skip to content

Commit 56820e5

Browse files
authored
Merge pull request #195 from norkator/review-manager
add review manager implementation
2 parents b6246fe + e42b1fc commit 56820e5

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,5 @@ dependencies {
5757
testImplementation 'org.json:json:20230618'
5858
// Other
5959
implementation(platform('org.jetbrains.kotlin:kotlin-bom:2.0.0'))
60+
implementation('com.google.android.play:review:2.0.1')
6061
}

app/src/main/java/com/nitramite/apcupsdmonitor/Constants.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@ public class Constants {
5353
public final static String SP_UPDATE_INTERVAL = "SP_UPDATE_INTERVAL";
5454
public final static String SP_LAST_PUSH_UPDATE = "SP_LAST_PUSH_UPDATE";
5555

56+
// Others
57+
public static final String SP_APP_LAUNCH_COUNT = "APP_LAUNCH_COUNT";
58+
public static final String SP_HAS_REVIEWED = "HAS_REVIEWED";
59+
5660
}

app/src/main/java/com/nitramite/apcupsdmonitor/MainMenu.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,21 @@
3333
import com.android.billingclient.api.Purchase;
3434
import com.android.billingclient.api.PurchasesUpdatedListener;
3535
import com.android.billingclient.api.QueryProductDetailsParams;
36+
import com.google.android.gms.tasks.Task;
3637
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;
3743
import com.nitramite.apcupsdmonitor.notifier.PushUtils;
3844
import com.wdullaer.swipeactionadapter.SwipeActionAdapter;
3945
import com.wdullaer.swipeactionadapter.SwipeDirection;
4046

4147
import java.util.ArrayList;
4248
import java.util.Collections;
4349
import java.util.List;
50+
import java.util.Objects;
4451

4552
@SuppressWarnings("FieldCanBeLocal")
4653
public class MainMenu extends AppCompatActivity implements ConnectorInterface, PurchasesUpdatedListener,
@@ -60,6 +67,7 @@ public class MainMenu extends AppCompatActivity implements ConnectorInterface, P
6067
private ArrayList<UPS> upsArrayList = new ArrayList<>();
6168
private ListView upsListView;
6269
private SwipeRefreshLayout swipeRefreshLayout;
70+
private ReviewManager reviewManager;
6371

6472
// Activity request codes
6573
public static final int ACTIVITY_RESULT_NEW_UPS_ADDED = 1;
@@ -105,6 +113,8 @@ protected void onCreate(Bundle savedInstanceState) {
105113

106114
setAppActivityRunning(true);
107115

116+
reviewManager = ReviewManagerFactory.create(this);
117+
108118
// Floating action buttons
109119
FloatingActionButton floatingAddUpsBtn = findViewById(R.id.floatingAddNewUpsBtn);
110120
floatingAddUpsBtn.setOnClickListener(view -> {
@@ -137,6 +147,7 @@ protected void onCreate(Bundle savedInstanceState) {
137147

138148
// Get status data
139149
startConnectorTask();
150+
reviewFlow();
140151
} // End of onCreate()
141152

142153

@@ -410,6 +421,37 @@ public void onRefresh() {
410421
startConnectorTask();
411422
}
412423

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+
413455
// ---------------------------------------------------------------------------------------------
414456

415457
@Override

0 commit comments

Comments
 (0)