From 0781b132b352a87afcce0ee665d3f871599fbea7 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 25 Aug 2020 10:04:25 +0200 Subject: [PATCH] Allow entering response code manually --- .../eu/faircode/email/ActivityBilling.java | 6 +- .../eu/faircode/email/AdapterMessage.java | 3 +- .../java/eu/faircode/email/FragmentPro.java | 58 +++++++++++++++++++ app/src/main/res/layout/dialog_response.xml | 32 ++++++++++ app/src/main/res/menu/menu_pro.xml | 8 +++ app/src/main/res/values/strings.xml | 1 + .../eu/faircode/email/ActivityBilling.java | 8 ++- 7 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/layout/dialog_response.xml create mode 100644 app/src/main/res/menu/menu_pro.xml diff --git a/app/src/fdroid/java/eu/faircode/email/ActivityBilling.java b/app/src/fdroid/java/eu/faircode/email/ActivityBilling.java index ad8313d9d7..7ecadbe6e0 100644 --- a/app/src/fdroid/java/eu/faircode/email/ActivityBilling.java +++ b/app/src/fdroid/java/eu/faircode/email/ActivityBilling.java @@ -169,8 +169,12 @@ public class ActivityBilling extends ActivityBase implements /*PurchasesUpdatedL } static boolean activatePro(Context context, Uri data) throws NoSuchAlgorithmException { - String challenge = getChallenge(context); String response = data.getQueryParameter("response"); + return activatePro(context, response); + } + + static boolean activatePro(Context context, String response) throws NoSuchAlgorithmException { + String challenge = getChallenge(context); Log.i("IAB challenge=" + challenge); Log.i("IAB response=" + response); String expected = getResponse(context); diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 2754e90e65..f215f0832c 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -4051,7 +4051,8 @@ public class AdapterMessage extends RecyclerView.Adapter 0) + response = response.substring(q + 10); + if (ActivityBilling.activatePro(getContext(), response)) + ToastEx.makeText(getContext(), R.string.title_pro_valid, Toast.LENGTH_LONG).show(); + else + ToastEx.makeText(getContext(), R.string.title_pro_invalid, Toast.LENGTH_LONG).show(); + } catch (Throwable ex) { + Log.e(ex); + ToastEx.makeText(getContext(), Log.formatThrowable(ex), Toast.LENGTH_LONG).show(); + } + } + }) + .show(); + } + @Override public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if ("pro".equals(key)) { diff --git a/app/src/main/res/layout/dialog_response.xml b/app/src/main/res/layout/dialog_response.xml new file mode 100644 index 0000000000..a9f2176951 --- /dev/null +++ b/app/src/main/res/layout/dialog_response.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_pro.xml b/app/src/main/res/menu/menu_pro.xml new file mode 100644 index 0000000000..40959ec776 --- /dev/null +++ b/app/src/main/res/menu/menu_pro.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3cb65cb44c..acb7a6f7f2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1351,6 +1351,7 @@ Why are the pro features so expensive? How can I restore a purchase? Purchase pending + Response All pro features are activated All pro features activated Invalid response diff --git a/app/src/play/java/eu/faircode/email/ActivityBilling.java b/app/src/play/java/eu/faircode/email/ActivityBilling.java index 0d778911ac..5e9c400222 100644 --- a/app/src/play/java/eu/faircode/email/ActivityBilling.java +++ b/app/src/play/java/eu/faircode/email/ActivityBilling.java @@ -165,12 +165,16 @@ public class ActivityBilling extends ActivityBase implements PurchasesUpdatedLis } private static String getResponse(Context context) throws NoSuchAlgorithmException { - return Helper.sha256(BuildConfig.APPLICATION_ID + getChallenge(context)); + return Helper.sha256(BuildConfig.APPLICATION_ID.replace(".debug", "") + getChallenge(context)); } static boolean activatePro(Context context, Uri data) throws NoSuchAlgorithmException { - String challenge = getChallenge(context); String response = data.getQueryParameter("response"); + return activatePro(context, response); + } + + static boolean activatePro(Context context, String response) throws NoSuchAlgorithmException { + String challenge = getChallenge(context); Log.i("IAB challenge=" + challenge); Log.i("IAB response=" + response); String expected = getResponse(context);