mirror of
https://github.com/LBRYFoundation/lbry-android.git
synced 2025-08-23 17:47:28 +00:00
297 lines
11 KiB
Java
297 lines
11 KiB
Java
package io.lbry.browser;
|
|
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.IntentFilter;
|
|
import android.graphics.Color;
|
|
import android.os.AsyncTask;
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
|
|
import androidx.fragment.app.FragmentActivity;
|
|
import androidx.viewpager2.widget.ViewPager2;
|
|
|
|
import com.google.android.material.snackbar.Snackbar;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import io.lbry.browser.adapter.VerificationPagerAdapter;
|
|
import io.lbry.browser.listener.SignInListener;
|
|
import io.lbry.browser.listener.WalletSyncListener;
|
|
import io.lbry.browser.model.lbryinc.User;
|
|
import io.lbry.browser.tasks.lbryinc.FetchCurrentUserTask;
|
|
import io.lbry.browser.utils.Helper;
|
|
import io.lbry.browser.utils.LbryAnalytics;
|
|
import io.lbry.browser.utils.Lbryio;
|
|
import io.lbry.lbrysdk.LbrynetService;
|
|
|
|
public class VerificationActivity extends FragmentActivity implements SignInListener, WalletSyncListener {
|
|
|
|
public static final int VERIFICATION_FLOW_SIGN_IN = 1;
|
|
public static final int VERIFICATION_FLOW_REWARDS = 2;
|
|
public static final int VERIFICATION_FLOW_WALLET = 3;
|
|
|
|
private BroadcastReceiver sdkReceiver;
|
|
private String email;
|
|
private boolean signedIn;
|
|
private int flow;
|
|
|
|
@Override
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
signedIn = Lbryio.isSignedIn();
|
|
Intent intent = getIntent();
|
|
if (intent != null) {
|
|
flow = intent.getIntExtra("flow", -1);
|
|
if (flow == -1 || (flow == VERIFICATION_FLOW_SIGN_IN && signedIn)) {
|
|
// no flow specified (or user is already signed in), just exit
|
|
setResult(signedIn ? RESULT_OK : RESULT_CANCELED);
|
|
finish();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!Arrays.asList(VERIFICATION_FLOW_SIGN_IN, VERIFICATION_FLOW_REWARDS, VERIFICATION_FLOW_WALLET).contains(flow)) {
|
|
// invalid flow specified
|
|
setResult(RESULT_CANCELED);
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
IntentFilter filter = new IntentFilter();
|
|
filter.addAction(LbrynetService.ACTION_STOP_SERVICE);
|
|
sdkReceiver = new BroadcastReceiver() {
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
String action = intent.getAction();
|
|
if (LbrynetService.ACTION_STOP_SERVICE.equals(action)) {
|
|
finish();
|
|
}
|
|
}
|
|
};
|
|
registerReceiver(sdkReceiver, filter);
|
|
|
|
setContentView(R.layout.activity_verification);
|
|
ViewPager2 viewPager = findViewById(R.id.verification_pager);
|
|
viewPager.setUserInputEnabled(false);
|
|
viewPager.setSaveEnabled(false);
|
|
viewPager.setAdapter(new VerificationPagerAdapter(this));
|
|
|
|
findViewById(R.id.verification_close_button).setVisibility(View.VISIBLE);
|
|
findViewById(R.id.verification_close_button).setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
setResult(RESULT_CANCELED);
|
|
finish();
|
|
}
|
|
});
|
|
}
|
|
|
|
public void onResume() {
|
|
super.onResume();
|
|
LbryAnalytics.setCurrentScreen(this, "Verification", "Verification");
|
|
checkFlow();
|
|
}
|
|
|
|
public void checkFlow() {
|
|
ViewPager2 viewPager = findViewById(R.id.verification_pager);
|
|
if (Lbryio.isSignedIn()) {
|
|
boolean flowHandled = false;
|
|
if (flow == VERIFICATION_FLOW_WALLET) {
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_WALLET, false);
|
|
flowHandled = true;
|
|
} else if (flow == VERIFICATION_FLOW_REWARDS) {
|
|
User user = Lbryio.currentUser;
|
|
if (!user.isIdentityVerified()) {
|
|
// phone number verification required
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_PHONE, false);
|
|
flowHandled = true;
|
|
} else if (!user.isRewardApproved()) {
|
|
// manual verification required
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_MANUAL, false);
|
|
flowHandled = true;
|
|
}
|
|
}
|
|
|
|
if (!flowHandled) {
|
|
// user has already been verified and or reward approved
|
|
setResult(RESULT_CANCELED);
|
|
finish();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void showLoading() {
|
|
findViewById(R.id.verification_loading_progress).setVisibility(View.VISIBLE);
|
|
findViewById(R.id.verification_pager).setVisibility(View.INVISIBLE);
|
|
findViewById(R.id.verification_close_button).setVisibility(View.GONE);
|
|
}
|
|
|
|
public void hideLoading() {
|
|
findViewById(R.id.verification_loading_progress).setVisibility(View.GONE);
|
|
findViewById(R.id.verification_pager).setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed() {
|
|
// ignore back press
|
|
return;
|
|
}
|
|
|
|
public void onEmailAdded(String email) {
|
|
this.email = email;
|
|
findViewById(R.id.verification_close_button).setVisibility(View.GONE);
|
|
|
|
Bundle bundle = new Bundle();
|
|
bundle.putString("email", email);
|
|
LbryAnalytics.logEvent(LbryAnalytics.EVENT_EMAIL_ADDED, bundle);
|
|
}
|
|
public void onEmailEdit() {
|
|
findViewById(R.id.verification_close_button).setVisibility(View.VISIBLE);
|
|
}
|
|
public void onEmailVerified() {
|
|
Snackbar.make(findViewById(R.id.verification_pager), R.string.sign_in_successful, Snackbar.LENGTH_LONG).show();
|
|
sendBroadcast(new Intent(MainActivity.ACTION_USER_SIGN_IN_SUCCESS));
|
|
|
|
Bundle bundle = new Bundle();
|
|
bundle.putString("email", email);
|
|
LbryAnalytics.logEvent(LbryAnalytics.EVENT_EMAIL_VERIFIED, bundle);
|
|
|
|
if (flow == VERIFICATION_FLOW_SIGN_IN) {
|
|
final Intent resultIntent = new Intent();
|
|
resultIntent.putExtra("flow", VERIFICATION_FLOW_SIGN_IN);
|
|
resultIntent.putExtra("email", email);
|
|
|
|
// only sign in required, don't do anything else
|
|
showLoading();
|
|
FetchCurrentUserTask task = new FetchCurrentUserTask(new FetchCurrentUserTask.FetchUserTaskHandler() {
|
|
@Override
|
|
public void onSuccess(User user) {
|
|
Lbryio.currentUser = user;
|
|
setResult(RESULT_OK, resultIntent);
|
|
finish();
|
|
}
|
|
|
|
@Override
|
|
public void onError(Exception error) {
|
|
showFetchUserError(error != null ? error.getMessage() : getString(R.string.fetch_current_user_error));
|
|
hideLoading();
|
|
}
|
|
});
|
|
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
} else {
|
|
// change pager view depending on flow
|
|
showLoading();
|
|
FetchCurrentUserTask task = new FetchCurrentUserTask(new FetchCurrentUserTask.FetchUserTaskHandler() {
|
|
@Override
|
|
public void onSuccess(User user) {
|
|
hideLoading();
|
|
findViewById(R.id.verification_close_button).setVisibility(View.VISIBLE);
|
|
|
|
Lbryio.currentUser = user;
|
|
ViewPager2 viewPager = findViewById(R.id.verification_pager);
|
|
// for rewards, (show phone verification if not done, or manual verification if required)
|
|
if (flow == VERIFICATION_FLOW_REWARDS) {
|
|
if (!user.isIdentityVerified()) {
|
|
// phone number verification required
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_PHONE, false);
|
|
} else if (!user.isRewardApproved()) {
|
|
// manual verification required
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_MANUAL, false);
|
|
} else {
|
|
// fully verified
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
}
|
|
} else if (flow == VERIFICATION_FLOW_WALLET) {
|
|
// for wallet sync, if password unlock is required, show password entry page
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_WALLET, false);
|
|
}
|
|
}
|
|
@Override
|
|
public void onError(Exception error) {
|
|
showFetchUserError(error != null ? error.getMessage() : getString(R.string.fetch_current_user_error));
|
|
hideLoading();
|
|
}
|
|
});
|
|
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPhoneAdded(String countryCode, String phoneNumber) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onPhoneVerified() {
|
|
showLoading();
|
|
FetchCurrentUserTask task = new FetchCurrentUserTask(new FetchCurrentUserTask.FetchUserTaskHandler() {
|
|
@Override
|
|
public void onSuccess(User user) {
|
|
Lbryio.currentUser = user;
|
|
if (user.isIdentityVerified() && user.isRewardApproved()) {
|
|
// verified for rewards
|
|
LbryAnalytics.logEvent(LbryAnalytics.EVENT_REWARD_ELIGIBILITY_COMPLETED);
|
|
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
// show manual verification page if the user is still not reward approved
|
|
ViewPager2 viewPager = findViewById(R.id.verification_pager);
|
|
viewPager.setCurrentItem(VerificationPagerAdapter.PAGE_VERIFICATION_MANUAL, false);
|
|
hideLoading();
|
|
}
|
|
|
|
@Override
|
|
public void onError(Exception error) {
|
|
showFetchUserError(error != null ? error.getMessage() : getString(R.string.fetch_current_user_error));
|
|
hideLoading();
|
|
}
|
|
});
|
|
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
}
|
|
|
|
private void showFetchUserError(String message) {
|
|
Snackbar.make(findViewById(R.id.verification_pager), message, Snackbar.LENGTH_LONG).
|
|
setBackgroundTint(Color.RED).setTextColor(Color.WHITE).show();
|
|
}
|
|
|
|
@Override
|
|
public void onManualVerifyContinue() {
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
}
|
|
|
|
@Override
|
|
public void onWalletSyncProcessing() {
|
|
findViewById(R.id.verification_close_button).setVisibility(View.GONE);
|
|
}
|
|
@Override
|
|
public void onWalletSyncWaitingForInput() {
|
|
findViewById(R.id.verification_close_button).setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
@Override
|
|
public void onWalletSyncEnabled() {
|
|
findViewById(R.id.verification_close_button).setVisibility(View.VISIBLE);
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
}
|
|
|
|
@Override
|
|
public void onWalletSyncFailed(Exception error) {
|
|
findViewById(R.id.verification_close_button).setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
@Override
|
|
public void onDestroy() {
|
|
Helper.unregisterReceiver(sdkReceiver, this);
|
|
super.onDestroy();
|
|
}
|
|
}
|