package com.lechucksoftware.proxy.proxysettings.ui.dialogs.likeapp; import android.app.Dialog; import android.os.Bundle; import android.view.View; import com.afollestad.materialdialogs.MaterialDialog; import com.lechucksoftware.proxy.proxysettings.App; import com.lechucksoftware.proxy.proxysettings.R; import com.lechucksoftware.proxy.proxysettings.constants.Constants; import com.lechucksoftware.proxy.proxysettings.constants.Requests; import com.lechucksoftware.proxy.proxysettings.constants.StartupActionStatus; import com.lechucksoftware.proxy.proxysettings.constants.StartupActionType; import com.lechucksoftware.proxy.proxysettings.ui.base.BaseActivity; import com.lechucksoftware.proxy.proxysettings.ui.base.BaseDialogFragment; import com.lechucksoftware.proxy.proxysettings.utils.UIUtils; import com.lechucksoftware.proxy.proxysettings.utils.billing.IabHelper; import com.lechucksoftware.proxy.proxysettings.utils.billing.IabResult; import com.lechucksoftware.proxy.proxysettings.utils.billing.Inventory; import com.lechucksoftware.proxy.proxysettings.utils.billing.SkuDetails; import com.lechucksoftware.proxy.proxysettings.utils.startup.StartupActions; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import timber.log.Timber; public class DonateDialog extends BaseDialogFragment { public static void showDonateDialog(final BaseActivity baseActivity) { MaterialDialog.Builder waitDialogBuilder = new MaterialDialog.Builder(baseActivity); waitDialogBuilder.title(R.string.app_name); waitDialogBuilder.content(R.string.please_wait); waitDialogBuilder.progress(true, 0); final MaterialDialog waitDialog = waitDialogBuilder.build(); if(baseActivity.getIabInventory() == null) { IabHelper.QueryInventoryFinishedListener queryInventoryFinishedListener = new IabHelper.QueryInventoryFinishedListener() { public void onQueryInventoryFinished(IabResult result, Inventory inventory) { baseActivity.handleQueryInventory(result, inventory); waitDialog.dismiss(); if (result.isFailure()) { UIUtils.showError(baseActivity, R.string.billing_error_during_init); } else { DonateDialog donateDialog = new DonateDialog(); donateDialog.show(baseActivity.getSupportFragmentManager(),"DonateDialog"); } } }; try { baseActivity.startInventoryRefresh(queryInventoryFinishedListener); waitDialog.show(); } catch (Exception e) { Timber.e(e, "Exception during queryInventoryAsync"); UIUtils.showError(baseActivity, R.string.billing_error_during_init); } } else { DonateDialog donateDialog = new DonateDialog(); donateDialog.show(baseActivity.getSupportFragmentManager(),"DonateDialog"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final BaseActivity activity = (BaseActivity) getActivity(); Inventory inventory = activity.getIabInventory(); return buildDonateDialog(inventory); } private Dialog buildDonateDialog(Inventory inventory) { final BaseActivity activity = (BaseActivity) getActivity(); MaterialDialog.Builder donateBuilder = new MaterialDialog.Builder(activity); final String[] donationSkus = new String[] { Constants.IAB_ITEM_SKU_DONATION_0_99, Constants.IAB_ITEM_SKU_DONATION_1_99, Constants.IAB_ITEM_SKU_DONATION_2_99, Constants.IAB_ITEM_SKU_DONATION_5_99, Constants.IAB_ITEM_SKU_DONATION_9_99 }; Map<String, SkuDetails> donationSkuDetails = new HashMap<>(); for (String sku : donationSkus) { SkuDetails skuDetails = inventory.getSkuDetails(sku); if (skuDetails != null) { donationSkuDetails.put(sku, skuDetails); } } List<String> skusDesc = new ArrayList<String>(); for (int i = 0; i < donationSkus.length; i++) { if (donationSkuDetails.containsKey(donationSkus[i])) { SkuDetails skuDetails = donationSkuDetails.get(donationSkus[i]); // skusDesc.add(String.format("%s (%s)",skuDetails.getPrice(), skuDetails.getDescription())); skusDesc.add(skuDetails.getPrice()); } } donateBuilder.title(R.string.donate); donateBuilder.negativeText(R.string.cancel); donateBuilder.positiveText(R.string.ok); donateBuilder.cancelable(false); donateBuilder.items(skusDesc.toArray(new String[skusDesc.size()])); donateBuilder.itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() { @Override public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { /** * If you use alwaysCallSingleChoiceCallback(), which is discussed below, * returning false here won't allow the newly selected radio button to actually be selected. **/ Timber.d("Selected donation SKU: %d", which); if (which != -1 && which <= donationSkus.length) { StartupActions.updateStatus(StartupActionType.DONATE_DIALOG, StartupActionStatus.DONE); App.getEventsReporter().sendEvent(R.string.analytics_cat_dialogs_action, R.string.analytics_act_donate_dialog, R.string.analytics_lab_donate_dialog_selected_sku, (long) which); activity.iabLaunchPurchase(donationSkus[which], Requests.IAB_DONATE); return true; } else { App.getEventsReporter().sendEvent(R.string.analytics_cat_dialogs_action, R.string.analytics_act_donate_dialog, R.string.analytics_lab_donate_dialog_no_sku_selected, -1L); return false; } } }); donateBuilder.callback(new MaterialDialog.ButtonCallback() { @Override public void onNegative(MaterialDialog dialog) { App.getEventsReporter().sendEvent(R.string.analytics_cat_dialogs_action, R.string.analytics_act_donate_dialog, R.string.analytics_lab_donate_dialog_cancel, 0L); } }); MaterialDialog alert = donateBuilder.build(); return alert; } }