allow users to initiate a purchase flow check #1163

Merged
akinwale merged 1 commit from iap-check into master 2021-03-08 19:40:20 +01:00
4 changed files with 100 additions and 2 deletions

View file

@ -225,6 +225,7 @@ import lombok.SneakyThrows;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import static android.os.Build.VERSION_CODES.M; import static android.os.Build.VERSION_CODES.M;
import static android.os.Build.VERSION_CODES.P;
public class MainActivity extends AppCompatActivity implements SdkStatusListener, public class MainActivity extends AppCompatActivity implements SdkStatusListener,
SharedPreferences.OnSharedPreferenceChangeListener, SharedPreferences.OnSharedPreferenceChangeListener,
@ -1271,7 +1272,7 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
return sp.getBoolean(PREFERENCE_KEY_INTERNAL_FIRST_RUN_COMPLETED, false); return sp.getBoolean(PREFERENCE_KEY_INTERNAL_FIRST_RUN_COMPLETED, false);
} }
private void checkPurchases() { public void checkPurchases() {
if (billingClient != null) { if (billingClient != null) {
Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.INAPP); Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (result.getPurchasesList() != null) { if (result.getPurchasesList() != null) {
@ -1282,6 +1283,24 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
} }
} }
public void checkPurchases(GenericTaskHandler handler) {
boolean purchaseFound = false;
if (billingClient != null) {
Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (result.getPurchasesList() != null) {
for (Purchase purchase : result.getPurchasesList()) {
handlePurchase(purchase, handler);
purchaseFound = true;
return;
}
}
}
if (!purchaseFound) {
handler.onError(new Exception(getString(R.string.skip_queue_purchase_not_found)));
}
}
private void handlePurchase(Purchase purchase) { private void handlePurchase(Purchase purchase) {
handleBillingPurchase(purchase, billingClient, MainActivity.this, null, new RewardVerifiedHandler() { handleBillingPurchase(purchase, billingClient, MainActivity.this, null, new RewardVerifiedHandler() {
@Override @Override
@ -1298,6 +1317,28 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
}); });
} }
private void handlePurchase(Purchase purchase, GenericTaskHandler handler) {
handleBillingPurchase(purchase, billingClient, MainActivity.this, null, new RewardVerifiedHandler() {
@Override
public void onSuccess(RewardVerified rewardVerified) {
if (Lbryio.currentUser != null) {
Lbryio.currentUser.setRewardApproved(rewardVerified.isRewardApproved());
}
if (handler != null) {
handler.onSuccess();
}
}
@Override
public void onError(Exception error) {
if (handler != null) {
handler.onError(error);
}
}
});
}
private void checkPendingOpens() { private void checkPendingOpens() {
if (pendingFollowingReload) { if (pendingFollowingReload) {
loadFollowingContent(); loadFollowingContent();

View file

@ -19,10 +19,12 @@ import androidx.fragment.app.Fragment;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import io.lbry.browser.MainActivity;
import io.lbry.browser.R; import io.lbry.browser.R;
import io.lbry.browser.listener.SignInListener; import io.lbry.browser.listener.SignInListener;
import io.lbry.browser.model.TwitterOauth; import io.lbry.browser.model.TwitterOauth;
import io.lbry.browser.model.lbryinc.RewardVerified; import io.lbry.browser.model.lbryinc.RewardVerified;
import io.lbry.browser.tasks.GenericTaskHandler;
import io.lbry.browser.tasks.RewardVerifiedHandler; import io.lbry.browser.tasks.RewardVerifiedHandler;
import io.lbry.browser.tasks.TwitterOauthHandler; import io.lbry.browser.tasks.TwitterOauthHandler;
import io.lbry.browser.tasks.lbryinc.TwitterVerifyTask; import io.lbry.browser.tasks.lbryinc.TwitterVerifyTask;
@ -69,6 +71,33 @@ public class ManualVerificationFragment extends Fragment {
} }
}); });
root.findViewById(R.id.verification_manual_skip_queue_verify).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showLoading();
if (MainActivity.instance != null) {
MainActivity.instance.checkPurchases(new GenericTaskHandler() {
@Override
public void beforeStart() {
}
@Override
public void onSuccess() {
hideLoading();
listener.onManualVerifyContinue();
}
@Override
public void onError(Exception error) {
hideLoading();
showError(error.getMessage());
}
});
}
}
});
root.findViewById(R.id.verification_manual_continue_button).setOnClickListener(new View.OnClickListener() { root.findViewById(R.id.verification_manual_continue_button).setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -267,6 +296,16 @@ public class ManualVerificationFragment extends Fragment {
showFlowError(extra); showFlowError(extra);
} }
private void showError(String message) {
Context context = getContext();
View root = getView();
if (context != null && root != null) {
Snackbar.make(root, message, Snackbar.LENGTH_LONG).
setTextColor(Color.WHITE).
setBackgroundTint(Color.RED).show();
}
}
private void showFlowError(String extra) { private void showFlowError(String extra) {
Context context = getContext(); Context context = getContext();
View root = getView(); View root = getView();

View file

@ -93,7 +93,22 @@
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:fontFamily="@font/inter" android:fontFamily="@font/inter"
android:text="@string/skip_queue_button_text" /> android:text="@string/skip_queue_button_text" />
<TextView
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/inter"
android:text="@string/skip_queue_manual_check"
android:textColor="@color/white"
android:textFontWeight="300" />
<com.google.android.material.button.MaterialButton
android:id="@+id/verification_manual_skip_queue_verify"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:fontFamily="@font/inter"
android:text="@string/verify_purchase" />
<TextView <TextView
android:textSize="20sp" android:textSize="20sp"

View file

@ -454,6 +454,9 @@
<string name="twitter_verify">Verify with Twitter</string> <string name="twitter_verify">Verify with Twitter</string>
<string name="skip_queue_verification">Skip the Queue</string> <string name="skip_queue_verification">Skip the Queue</string>
<string name="skip_queue_verification_desc">Skip the manual verification queue by paying a fee in order to start participating in the rewards program immediately.</string> <string name="skip_queue_verification_desc">Skip the manual verification queue by paying a fee in order to start participating in the rewards program immediately.</string>
<string name="skip_queue_manual_check">If you previously completed a purchase successfully and you still see this screen, please tap the verify purchase button below.</string>
<string name="skip_queue_purchase_not_found">No purchase was found for this account.</string>
<string name="verify_purchase">Verify Purchase</string>
<string name="request_to_be_verified">Please request to be verified on the &lt;a href="https://discordapp.com/invite/Z3bERWA"&gt;LBRY Discord server&lt;/a&gt;. A manual review can take anywhere from several minutes to several days.</string> <string name="request_to_be_verified">Please request to be verified on the &lt;a href="https://discordapp.com/invite/Z3bERWA"&gt;LBRY Discord server&lt;/a&gt;. A manual review can take anywhere from several minutes to several days.</string>
<string name="enjoy_free_content">Please enjoy free content in the meantime!</string> <string name="enjoy_free_content">Please enjoy free content in the meantime!</string>
<string name="verify_phone_number">Verify Phone Number</string> <string name="verify_phone_number">Verify Phone Number</string>