mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
#1343 Billing client
This commit is contained in:
parent
37064eafa2
commit
e296d66fd2
5 changed files with 98 additions and 10 deletions
|
@ -30,6 +30,7 @@ dependencies {
|
|||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.12.12'
|
||||
implementation 'com.google.code.gson:gson:2.8.6'
|
||||
implementation 'com.android.billingclient:billing:3.0.0'
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
|
@ -24,7 +24,6 @@ import com.newsblur.service.NBSyncService;
|
|||
import com.newsblur.util.AppConstants;
|
||||
import com.newsblur.util.FeedSet;
|
||||
import com.newsblur.util.FeedUtils;
|
||||
import com.newsblur.util.Log;
|
||||
import com.newsblur.util.PrefConstants.ThemeValue;
|
||||
import com.newsblur.util.PrefsUtils;
|
||||
import com.newsblur.util.ReadFilter;
|
||||
|
@ -354,7 +353,8 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
|
|||
if (q.length() < 1) {
|
||||
updateFleuron(false);
|
||||
q = null;
|
||||
} else if (!PrefsUtils.isPremium(this)) {
|
||||
//TODO: change flag
|
||||
} else if (PrefsUtils.isPremium(this)) {
|
||||
updateFleuron(true);
|
||||
return;
|
||||
}
|
||||
|
@ -380,9 +380,7 @@ public abstract class ItemsList extends NbActivity implements StoryOrderChangedL
|
|||
binding.footerFleuron.textSubscription.setText(R.string.premium_subscribers_search);
|
||||
binding.footerFleuron.containerSubscribe.setVisibility(View.VISIBLE);
|
||||
binding.footerFleuron.getRoot().setVisibility(View.VISIBLE);
|
||||
binding.footerFleuron.containerSubscribe.setOnClickListener(view -> {
|
||||
// Log.d(this, "Open subscription page");
|
||||
});
|
||||
binding.footerFleuron.containerSubscribe.setOnClickListener(view -> UIUtils.startPremiumActivity(this));
|
||||
} else {
|
||||
transaction.show(itemSetFragment);
|
||||
binding.footerFleuron.containerSubscribe.setVisibility(View.GONE);
|
||||
|
|
|
@ -4,7 +4,18 @@ import android.graphics.Paint;
|
|||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.util.Linkify;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.billingclient.api.BillingClient;
|
||||
import com.android.billingclient.api.BillingClientStateListener;
|
||||
import com.android.billingclient.api.BillingFlowParams;
|
||||
import com.android.billingclient.api.BillingResult;
|
||||
import com.android.billingclient.api.Purchase;
|
||||
import com.android.billingclient.api.PurchasesUpdatedListener;
|
||||
import com.android.billingclient.api.SkuDetails;
|
||||
import com.android.billingclient.api.SkuDetailsParams;
|
||||
import com.newsblur.R;
|
||||
import com.newsblur.databinding.ActivityPremiumBinding;
|
||||
import com.newsblur.util.AppConstants;
|
||||
|
@ -12,9 +23,13 @@ import com.newsblur.util.BetterLinkMovementMethod;
|
|||
import com.newsblur.util.FeedUtils;
|
||||
import com.newsblur.util.UIUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Premium extends NbActivity {
|
||||
|
||||
private ActivityPremiumBinding binding;
|
||||
private BillingClient billingClient;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle bundle) {
|
||||
|
@ -22,6 +37,11 @@ public class Premium extends NbActivity {
|
|||
binding = ActivityPremiumBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
setupUI();
|
||||
setupBillingClient();
|
||||
}
|
||||
|
||||
private void setupUI() {
|
||||
UIUtils.setCustomActionBar(this, R.drawable.logo, getString(R.string.premium_toolbar_title));
|
||||
|
||||
// linkify before setting the string resource
|
||||
|
@ -34,4 +54,70 @@ public class Premium extends NbActivity {
|
|||
binding.textSubscriptionTitle.setPaintFlags(binding.textSubscriptionTitle.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
|
||||
FeedUtils.iconLoader.displayImage(AppConstants.SHILOH_PHOTO_URL, binding.imgShiloh, 0, false);
|
||||
}
|
||||
|
||||
private void setupBillingClient() {
|
||||
PurchasesUpdatedListener purchaseUpdateListener = (billingResult, purchases) -> {
|
||||
// To be implemented
|
||||
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
|
||||
for (Purchase purchase : purchases) {
|
||||
// handle purchase
|
||||
}
|
||||
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
|
||||
// Handle an error caused by a user cancelling the purchase flow.
|
||||
} else {
|
||||
// Handle any other error codes.
|
||||
}
|
||||
};
|
||||
|
||||
billingClient = BillingClient.newBuilder(this)
|
||||
.setListener(purchaseUpdateListener)
|
||||
.enablePendingPurchases()
|
||||
.build();
|
||||
|
||||
billingClient.startConnection(new BillingClientStateListener() {
|
||||
@Override
|
||||
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
|
||||
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
|
||||
// The BillingClient is ready. You can query purchases here.
|
||||
Log.d(Premium.this.getLocalClassName(), "onBillingSetupFinished - message: " + billingResult.getDebugMessage() + " | response code: " + billingResult.getResponseCode());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBillingServiceDisconnected() {
|
||||
Log.d(Premium.this.getLocalClassName(), "onBillingServiceDisconnected");
|
||||
// Try to restart the connection on the next request to
|
||||
// Google Play by calling the startConnection() method.
|
||||
}
|
||||
});
|
||||
|
||||
List<String> skuList = new ArrayList<>();
|
||||
// add sub SKUs from Play Store
|
||||
skuList.add("premium_subscription");
|
||||
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
|
||||
params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS);
|
||||
billingClient.querySkuDetailsAsync(params.build(), (billingResult, skuDetailsList) -> {
|
||||
// Process the result.
|
||||
Log.d(Premium.this.getLocalClassName(), "SkuDetailsResponse - result message: " + billingResult.getDebugMessage() + " | result response code: " + billingResult.getResponseCode());
|
||||
if (skuDetailsList != null) {
|
||||
for (SkuDetails skuDetails : skuDetailsList) {
|
||||
Log.d(Premium.this.getLocalClassName(), "Sku detail: " + skuDetails.getTitle() + " | " + skuDetails.getDescription() + " | " + skuDetails.getPrice() + " | " + skuDetails.getSku());
|
||||
}
|
||||
} else {
|
||||
Log.d(Premium.this.getLocalClassName(), "Empty sku list");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void launchBillingFlow(@NonNull SkuDetails skuDetails) {
|
||||
Log.d(Premium.this.getLocalClassName(), "launchBillingFlow");
|
||||
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
|
||||
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
|
||||
.setSkuDetails(skuDetails)
|
||||
.build();
|
||||
int responseCode = billingClient.launchBillingFlow(this, billingFlowParams).getResponseCode();
|
||||
|
||||
// Handle the result.
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ import com.newsblur.domain.Story;
|
|||
import com.newsblur.service.NBSyncService;
|
||||
import com.newsblur.util.FeedSet;
|
||||
import com.newsblur.util.FeedUtils;
|
||||
import com.newsblur.util.Log;
|
||||
import com.newsblur.util.PrefsUtils;
|
||||
import com.newsblur.util.ReadFilter;
|
||||
import com.newsblur.util.StoryListStyle;
|
||||
|
@ -141,9 +140,7 @@ public class ItemSetFragment extends NbFragment implements LoaderManager.LoaderC
|
|||
UIUtils.getColor(getActivity(), R.color.refresh_4));
|
||||
|
||||
fleuronBinding.getRoot().setVisibility(View.INVISIBLE);
|
||||
fleuronBinding.containerSubscribe.setOnClickListener(view -> {
|
||||
// Log.d(this, "Show subscribe page");
|
||||
});
|
||||
fleuronBinding.containerSubscribe.setOnClickListener(view -> UIUtils.startPremiumActivity(requireContext()));
|
||||
|
||||
binding.itemgridfragmentGrid.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
|
||||
@Override
|
||||
|
|
|
@ -586,6 +586,12 @@ public class UIUtils {
|
|||
boolean isPremium = PrefsUtils.isPremium(context);
|
||||
boolean requiresPremium = feedSet.isFolder() || feedSet.isInfrequent() ||
|
||||
feedSet.isAllNormal() || feedSet.isGlobalShared() || feedSet.isSingleSavedTag();
|
||||
return isPremium && requiresPremium;
|
||||
//TODO: change flag
|
||||
return !(isPremium && requiresPremium);
|
||||
}
|
||||
|
||||
public static void startPremiumActivity(Context context) {
|
||||
Intent intent = new Intent(context, Premium.class);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue