android: BillingManager: Hide premium actionbar button when premium is active.
This commit is contained in:
parent
59fd5ec971
commit
3fc57f56e5
@ -37,6 +37,8 @@ public final class SettingsFile {
|
|||||||
|
|
||||||
public static final String KEY_DESIGN = "design";
|
public static final String KEY_DESIGN = "design";
|
||||||
|
|
||||||
|
public static final String KEY_PREMIUM = "premium";
|
||||||
|
|
||||||
public static final String KEY_HW_RENDERER = "use_hw_renderer";
|
public static final String KEY_HW_RENDERER = "use_hw_renderer";
|
||||||
public static final String KEY_HW_SHADER = "use_hw_shader";
|
public static final String KEY_HW_SHADER = "use_hw_shader";
|
||||||
public static final String KEY_SHADERS_ACCURATE_MUL = "shaders_accurate_mul";
|
public static final String KEY_SHADERS_ACCURATE_MUL = "shaders_accurate_mul";
|
||||||
|
@ -42,6 +42,8 @@ public final class MainActivity extends AppCompatActivity implements MainView {
|
|||||||
// Singleton to manage user billing state
|
// Singleton to manage user billing state
|
||||||
private static BillingManager mBillingManager;
|
private static BillingManager mBillingManager;
|
||||||
|
|
||||||
|
private static MenuItem mPremiumButton;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
ThemeUtil.applyTheme();
|
ThemeUtil.applyTheme();
|
||||||
@ -98,9 +100,22 @@ public final class MainActivity extends AppCompatActivity implements MainView {
|
|||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
MenuInflater inflater = getMenuInflater();
|
MenuInflater inflater = getMenuInflater();
|
||||||
inflater.inflate(R.menu.menu_game_grid, menu);
|
inflater.inflate(R.menu.menu_game_grid, menu);
|
||||||
|
mPremiumButton = menu.findItem(R.id.button_premium);
|
||||||
|
|
||||||
|
if (mBillingManager.isPremiumCached()) {
|
||||||
|
// User had premium in a previous session, hide upsell option
|
||||||
|
setPremiumButtonVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public void setPremiumButtonVisible(boolean isVisible) {
|
||||||
|
if (mPremiumButton != null) {
|
||||||
|
mPremiumButton.setVisible(isVisible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MainView
|
* MainView
|
||||||
*/
|
*/
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package org.citra.citra_emu.utils;
|
package org.citra.citra_emu.utils;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import com.android.billingclient.api.BillingClient;
|
import com.android.billingclient.api.BillingClient;
|
||||||
import com.android.billingclient.api.BillingClientStateListener;
|
import com.android.billingclient.api.BillingClientStateListener;
|
||||||
@ -12,6 +14,10 @@ import com.android.billingclient.api.PurchasesUpdatedListener;
|
|||||||
import com.android.billingclient.api.SkuDetails;
|
import com.android.billingclient.api.SkuDetails;
|
||||||
import com.android.billingclient.api.SkuDetailsParams;
|
import com.android.billingclient.api.SkuDetailsParams;
|
||||||
|
|
||||||
|
import org.citra.citra_emu.CitraApplication;
|
||||||
|
import org.citra.citra_emu.features.settings.utils.SettingsFile;
|
||||||
|
import org.citra.citra_emu.ui.main.MainActivity;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -25,12 +31,18 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||||||
private boolean mIsServiceConnected = false;
|
private boolean mIsServiceConnected = false;
|
||||||
private Runnable mUpdateBillingCallback;
|
private Runnable mUpdateBillingCallback;
|
||||||
|
|
||||||
|
private static SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(CitraApplication.getAppContext());
|
||||||
|
|
||||||
public BillingManager(Activity activity) {
|
public BillingManager(Activity activity) {
|
||||||
mActivity = activity;
|
mActivity = activity;
|
||||||
mBillingClient = BillingClient.newBuilder(mActivity).enablePendingPurchases().setListener(this).build();
|
mBillingClient = BillingClient.newBuilder(mActivity).enablePendingPurchases().setListener(this).build();
|
||||||
querySkuDetails();
|
querySkuDetails();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public boolean isPremiumCached() {
|
||||||
|
return mPreferences.getBoolean(SettingsFile.KEY_PREMIUM, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if Premium subscription is currently active
|
* @return true if Premium subscription is currently active
|
||||||
*/
|
*/
|
||||||
@ -58,10 +70,23 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||||||
mBillingClient.launchBillingFlow(mActivity, flowParams);
|
mBillingClient.launchBillingFlow(mActivity, flowParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updatePremiumState(boolean isPremiumActive) {
|
||||||
|
mIsPremiumActive = isPremiumActive;
|
||||||
|
|
||||||
|
// Cache state for synchronous UI
|
||||||
|
SharedPreferences.Editor editor = mPreferences.edit();
|
||||||
|
editor.putBoolean(SettingsFile.KEY_PREMIUM, isPremiumActive);
|
||||||
|
editor.apply();
|
||||||
|
|
||||||
|
// No need to show button in action bar if Premium is active
|
||||||
|
MainActivity.setPremiumButtonVisible(!isPremiumActive);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchaseList) {
|
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchaseList) {
|
||||||
if (purchaseList == null || purchaseList.isEmpty()) {
|
if (purchaseList == null || purchaseList.isEmpty()) {
|
||||||
// Premium is not active, or billing is unavailable
|
// Premium is not active, or billing is unavailable
|
||||||
|
updatePremiumState(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +99,7 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||||||
|
|
||||||
if (premiumPurchase != null) {
|
if (premiumPurchase != null) {
|
||||||
// Premium has been purchased
|
// Premium has been purchased
|
||||||
mIsPremiumActive = true;
|
updatePremiumState(true);
|
||||||
|
|
||||||
if (mUpdateBillingCallback != null) {
|
if (mUpdateBillingCallback != null) {
|
||||||
try {
|
try {
|
||||||
@ -123,6 +148,7 @@ public class BillingManager implements PurchasesUpdatedListener {
|
|||||||
private void onQueryPurchasesFinished(PurchasesResult result) {
|
private void onQueryPurchasesFinished(PurchasesResult result) {
|
||||||
// Have we been disposed of in the meantime? If so, or bad result code, then quit
|
// Have we been disposed of in the meantime? If so, or bad result code, then quit
|
||||||
if (mBillingClient == null || result.getResponseCode() != BillingClient.BillingResponseCode.OK) {
|
if (mBillingClient == null || result.getResponseCode() != BillingClient.BillingResponseCode.OK) {
|
||||||
|
updatePremiumState(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Update the UI and purchases inventory with new list of purchases
|
// Update the UI and purchases inventory with new list of purchases
|
||||||
|
Loading…
x
Reference in New Issue
Block a user