Cleaned up the DonationsDialog.
This commit is contained in:
parent
88fae04c4e
commit
70199b8c5a
3 changed files with 73 additions and 44 deletions
|
|
@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
|
|||
import android.app.Dialog;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Paint;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.LayoutRes;
|
||||
import android.support.annotation.NonNull;
|
||||
|
|
@ -41,15 +42,17 @@ import butterknife.ButterKnife;
|
|||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class DonationDialog extends DialogFragment implements BillingProcessor.IBillingHandler {
|
||||
public static final String TAG = DonationDialog.class.getSimpleName();
|
||||
public class DonationsDialog extends DialogFragment implements BillingProcessor.IBillingHandler {
|
||||
public static final String TAG = DonationsDialog.class.getSimpleName();
|
||||
|
||||
private static final int DONATION_PRODUCT_IDS = R.array.donation_ids;
|
||||
|
||||
private BillingProcessor billingProcessor;
|
||||
|
||||
public static DonationDialog create() {
|
||||
return new DonationDialog();
|
||||
private AsyncTask skuDetailsLoadAsyncTask;
|
||||
|
||||
public static DonationsDialog create() {
|
||||
return new DonationsDialog();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
|
@ -68,7 +71,7 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
.build();
|
||||
}
|
||||
|
||||
void donate(int i) {
|
||||
private void donate(int i) {
|
||||
final String[] ids = getResources().getStringArray(DONATION_PRODUCT_IDS);
|
||||
billingProcessor.purchase(getActivity(), ids[i]);
|
||||
}
|
||||
|
|
@ -82,11 +85,13 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
|
||||
@Override
|
||||
public void onProductPurchased(String productId, TransactionDetails details) {
|
||||
loadSkuDetails();
|
||||
Toast.makeText(getContext(), R.string.thank_you, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPurchaseHistoryRestored() {
|
||||
loadSkuDetails();
|
||||
Toast.makeText(getContext(), R.string.restored_previous_purchases, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
|
|
@ -97,7 +102,7 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
|
||||
@Override
|
||||
public void onBillingInitialized() {
|
||||
new Thread(new LoadAndDisplayPurchasesRunnable(this)).start();
|
||||
loadSkuDetails();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -105,42 +110,66 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
if (billingProcessor != null) {
|
||||
billingProcessor.release();
|
||||
}
|
||||
if (skuDetailsLoadAsyncTask != null) {
|
||||
skuDetailsLoadAsyncTask.cancel(true);
|
||||
}
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
static class LoadAndDisplayPurchasesRunnable implements Runnable {
|
||||
WeakReference<DonationDialog> dialogWeakReference;
|
||||
private void loadSkuDetails() {
|
||||
if (skuDetailsLoadAsyncTask != null) {
|
||||
skuDetailsLoadAsyncTask.cancel(false);
|
||||
}
|
||||
skuDetailsLoadAsyncTask = new SkuDetailsLoadAsyncTask(this).execute();
|
||||
}
|
||||
|
||||
public LoadAndDisplayPurchasesRunnable(DonationDialog donationDialog) {
|
||||
dialogWeakReference = new WeakReference<>(donationDialog);
|
||||
private static class SkuDetailsLoadAsyncTask extends AsyncTask<Void, Void, List<SkuDetails>> {
|
||||
private final WeakReference<DonationsDialog> donationDialogWeakReference;
|
||||
|
||||
public SkuDetailsLoadAsyncTask(DonationsDialog donationsDialog) {
|
||||
this.donationDialogWeakReference = new WeakReference<>(donationsDialog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
final DonationDialog donationDialog = dialogWeakReference.get();
|
||||
final String[] ids = donationDialog.getResources().getStringArray(DONATION_PRODUCT_IDS);
|
||||
final List<SkuDetails> skuDetailsList = donationDialog.billingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids)));
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
DonationsDialog dialog = donationDialogWeakReference.get();
|
||||
if (dialog == null) return;
|
||||
|
||||
donationDialog.getActivity().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (skuDetailsList == null || skuDetailsList.isEmpty()) {
|
||||
donationDialog.dismiss();
|
||||
return;
|
||||
}
|
||||
View customView = ((MaterialDialog) donationDialog.getDialog()).getCustomView();
|
||||
if (customView != null) {
|
||||
customView.findViewById(R.id.progress_container).setVisibility(View.GONE);
|
||||
ListView listView = ButterKnife.findById(customView, R.id.list);
|
||||
listView.setAdapter(new SkuDetailsAdapter(donationDialog, skuDetailsList));
|
||||
listView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
View customView = ((MaterialDialog) dialog.getDialog()).getCustomView();
|
||||
//noinspection ConstantConditions
|
||||
customView.findViewById(R.id.progress_container).setVisibility(View.VISIBLE);
|
||||
customView.findViewById(R.id.list).setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<SkuDetails> doInBackground(Void... params) {
|
||||
DonationsDialog dialog = donationDialogWeakReference.get();
|
||||
if (dialog != null) {
|
||||
final String[] ids = dialog.getResources().getStringArray(DONATION_PRODUCT_IDS);
|
||||
return dialog.billingProcessor.getPurchaseListingDetails(new ArrayList<>(Arrays.asList(ids)));
|
||||
}
|
||||
cancel(false);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<SkuDetails> skuDetails) {
|
||||
super.onPostExecute(skuDetails);
|
||||
DonationsDialog dialog = donationDialogWeakReference.get();
|
||||
if (dialog == null) return;
|
||||
|
||||
if (skuDetails == null || skuDetails.isEmpty()) {
|
||||
dialog.dismiss();
|
||||
return;
|
||||
}
|
||||
|
||||
View customView = ((MaterialDialog) dialog.getDialog()).getCustomView();
|
||||
//noinspection ConstantConditions
|
||||
customView.findViewById(R.id.progress_container).setVisibility(View.GONE);
|
||||
ListView listView = ButterKnife.findById(customView, R.id.list);
|
||||
listView.setAdapter(new SkuDetailsAdapter(dialog, skuDetails));
|
||||
listView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -148,11 +177,11 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
@LayoutRes
|
||||
private static int LAYOUT_RES_ID = R.layout.item_donation_option;
|
||||
|
||||
DonationDialog donationDialog;
|
||||
DonationsDialog donationsDialog;
|
||||
|
||||
public SkuDetailsAdapter(@NonNull DonationDialog donationDialog, @NonNull List<SkuDetails> objects) {
|
||||
super(donationDialog.getContext(), LAYOUT_RES_ID, objects);
|
||||
this.donationDialog = donationDialog;
|
||||
public SkuDetailsAdapter(@NonNull DonationsDialog donationsDialog, @NonNull List<SkuDetails> objects) {
|
||||
super(donationsDialog.getContext(), LAYOUT_RES_ID, objects);
|
||||
this.donationsDialog = donationsDialog;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -168,7 +197,7 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
viewHolder.text.setText(skuDetails.description);
|
||||
viewHolder.price.setText(skuDetails.priceText);
|
||||
|
||||
final boolean purchased = donationDialog.billingProcessor.isPurchased(skuDetails.productId);
|
||||
final boolean purchased = donationsDialog.billingProcessor.isPurchased(skuDetails.productId);
|
||||
int titleTextColor = purchased ? ATHUtil.resolveColor(getContext(), android.R.attr.textColorHint) : ThemeStore.textColorPrimary(getContext());
|
||||
int contentTextColor = purchased ? titleTextColor : ThemeStore.textColorSecondary(getContext());
|
||||
|
||||
|
|
@ -193,7 +222,7 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
|||
convertView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
donationDialog.donate(position);
|
||||
donationsDialog.donate(position);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -17,7 +17,7 @@ import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
|||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DonationsDialog;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.intro.AppIntroActivity;
|
||||
|
||||
|
|
@ -187,7 +187,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
|||
} else if (v == rateOnGooglePlay) {
|
||||
openUrl(RATE_ON_GOOGLE_PLAY);
|
||||
} else if (v == donate) {
|
||||
DonationDialog.create().show(getSupportFragmentManager(), "DONATION_DIALOG");
|
||||
DonationsDialog.create().show(getSupportFragmentManager(), "DONATION_DIALOG");
|
||||
} else if (v == aidanFollestadGooglePlus) {
|
||||
openUrl(AIDAN_FOLLESTAD_GOOGLE_PLUS);
|
||||
} else if (v == aidanFollestadGitHub) {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ import com.kabouzeid.appthemehelper.util.ATHUtil;
|
|||
import com.kabouzeid.appthemehelper.util.NavigationViewUtil;
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
||||
import com.kabouzeid.gramophone.dialogs.DonationsDialog;
|
||||
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||
import com.kabouzeid.gramophone.helper.SearchQueryHelper;
|
||||
|
|
@ -179,7 +179,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
|||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
DonationDialog.create().show(getSupportFragmentManager(), "DONATION_DIALOG");
|
||||
DonationsDialog.create().show(getSupportFragmentManager(), "DONATION_DIALOG");
|
||||
}
|
||||
}, 200);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue