Update UI based on feedback
Add native functions
This commit is contained in:
@@ -97,7 +97,6 @@ import org.chromium.chrome.browser.toolbar.top.BraveToolbarLayout;
|
||||
import org.chromium.chrome.browser.util.BraveDbUtil;
|
||||
import org.chromium.chrome.browser.util.BraveReferrer;
|
||||
import org.chromium.chrome.browser.util.PackageUtils;
|
||||
// import org.chromium.chrome.browser.crypto_wallet.BraveWalletNativeWorker;
|
||||
import org.chromium.chrome.browser.widget.crypto.binance.BinanceAccountBalance;
|
||||
import org.chromium.chrome.browser.widget.crypto.binance.BinanceWidgetManager;
|
||||
import org.chromium.components.bookmarks.BookmarkId;
|
||||
@@ -413,7 +412,6 @@ public abstract class BraveActivity<C extends ChromeActivityComponent>
|
||||
calender.getTimeInMillis());
|
||||
}
|
||||
checkSetDefaultBrowserModal();
|
||||
// BraveWalletNativeWorker.getInstance().createWallet("qwerty");
|
||||
}
|
||||
|
||||
private void openBraveWallet() {
|
||||
|
||||
+14
-7
@@ -8,6 +8,7 @@ package org.chromium.chrome.browser.crypto_wallet;
|
||||
import org.chromium.base.annotations.CalledByNative;
|
||||
import org.chromium.base.annotations.JNINamespace;
|
||||
import org.chromium.base.annotations.NativeMethods;
|
||||
import org.chromium.base.Log;
|
||||
|
||||
@JNINamespace("chrome::android")
|
||||
public class BraveWalletNativeWorker {
|
||||
@@ -19,7 +20,7 @@ public class BraveWalletNativeWorker {
|
||||
synchronized (lock) {
|
||||
if (instance == null) {
|
||||
instance = new BraveWalletNativeWorker();
|
||||
instance.Init();
|
||||
instance.init();
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
@@ -27,7 +28,7 @@ public class BraveWalletNativeWorker {
|
||||
|
||||
private BraveWalletNativeWorker() {}
|
||||
|
||||
private void Init() {
|
||||
private void init() {
|
||||
if (mNativeBraveWalletNativeWorker == 0) {
|
||||
BraveWalletNativeWorkerJni.get().init(this);
|
||||
}
|
||||
@@ -35,10 +36,10 @@ public class BraveWalletNativeWorker {
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
Destroy();
|
||||
destroy();
|
||||
}
|
||||
|
||||
private void Destroy() {
|
||||
private void destroy() {
|
||||
if (mNativeBraveWalletNativeWorker != 0) {
|
||||
BraveWalletNativeWorkerJni.get().destroy(mNativeBraveWalletNativeWorker, this);
|
||||
mNativeBraveWalletNativeWorker = 0;
|
||||
@@ -51,16 +52,21 @@ public class BraveWalletNativeWorker {
|
||||
mNativeBraveWalletNativeWorker = nativePtr;
|
||||
}
|
||||
|
||||
public String CreateWallet(String password) {
|
||||
public String createWallet(String password) {
|
||||
return BraveWalletNativeWorkerJni.get().createWallet(
|
||||
mNativeBraveWalletNativeWorker, password);
|
||||
}
|
||||
|
||||
public void LockWallet() {
|
||||
public boolean isWalletLocked() {
|
||||
Log.e("NTP", "isWalletLocked : "+BraveWalletNativeWorkerJni.get().isWalletLocked(mNativeBraveWalletNativeWorker));
|
||||
return BraveWalletNativeWorkerJni.get().isWalletLocked(mNativeBraveWalletNativeWorker);
|
||||
}
|
||||
|
||||
public void lockWallet() {
|
||||
BraveWalletNativeWorkerJni.get().lockWallet(mNativeBraveWalletNativeWorker);
|
||||
}
|
||||
|
||||
public boolean UnlockWallet(String password) {
|
||||
public boolean unlockWallet(String password) {
|
||||
return BraveWalletNativeWorkerJni.get().unlockWallet(
|
||||
mNativeBraveWalletNativeWorker, password);
|
||||
}
|
||||
@@ -70,6 +76,7 @@ public class BraveWalletNativeWorker {
|
||||
void init(BraveWalletNativeWorker caller);
|
||||
void destroy(long nativeBraveWalletNativeWorker, BraveWalletNativeWorker caller);
|
||||
String createWallet(long nativeBraveWalletNativeWorker, String password);
|
||||
boolean isWalletLocked(long nativeBraveWalletNativeWorker);
|
||||
void lockWallet(long nativeBraveWalletNativeWorker);
|
||||
boolean unlockWallet(long nativeBraveWalletNativeWorker, String password);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ import org.chromium.chrome.browser.crypto_wallet.fragments.RewardsFragment;
|
||||
import org.chromium.chrome.browser.crypto_wallet.fragments.SwapBottomSheetDialogFragment;
|
||||
import org.chromium.chrome.browser.crypto_wallet.listeners.OnFinishOnboarding;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.NavigationItem;
|
||||
import org.chromium.chrome.browser.crypto_wallet.BraveWalletNativeWorker;
|
||||
import org.chromium.base.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -107,6 +109,18 @@ public class CryptoWalletActivity extends AppCompatActivity {
|
||||
setNavigationFragments();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
BraveWalletNativeWorker.getInstance().lockWallet();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
Log.e("NTP", "OnResume");
|
||||
}
|
||||
|
||||
private void setNavigationFragments() {
|
||||
List<NavigationItem> navigationItems = new ArrayList<>();
|
||||
int navigationMenu;
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ public class RecoveryPhraseAdapter extends RecyclerView.Adapter<RecoveryPhraseAd
|
||||
holder.recoveryPhraseText.setText(
|
||||
String.format(holder.recoveryPhraseText.getContext().getResources().getString(
|
||||
R.string.recovery_phrase_item_text),
|
||||
(recoveryPhrasePosition + 1), recoveryPhrase));
|
||||
(position + 1), recoveryPhrase));
|
||||
if (onRecoveryPhraseSelected != null) {
|
||||
holder.itemView.setOnClickListener(v -> {
|
||||
selectedRecoveryPhraseMap.put(position, recoveryPhrase);
|
||||
|
||||
+29
-4
@@ -36,6 +36,7 @@ import org.chromium.chrome.browser.crypto_wallet.fragments.onboarding_fragments.
|
||||
import org.chromium.chrome.browser.crypto_wallet.fragments.onboarding_fragments.VerifyRecoveryPhraseFragment;
|
||||
import org.chromium.chrome.browser.crypto_wallet.listeners.OnFinishOnboarding;
|
||||
import org.chromium.chrome.browser.crypto_wallet.listeners.OnNextPage;
|
||||
import org.chromium.chrome.browser.crypto_wallet.BraveWalletNativeWorker;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.NavigationItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -88,15 +89,39 @@ public class CryptoFragment extends Fragment {
|
||||
cryptoWalletOnboardingViewPager.setOffscreenPageLimit(
|
||||
cryptoWalletOnboardingPagerAdapter.getCount() - 1);
|
||||
|
||||
setNavigationFragments(ONBOARDING_ACTION);
|
||||
|
||||
ImageView onboardingBackButton = view.findViewById(R.id.onboarding_back_button);
|
||||
onboardingBackButton.setVisibility(View.GONE);
|
||||
onboardingBackButton.setOnClickListener(v -> {
|
||||
if (cryptoWalletOnboardingViewPager != null) {
|
||||
cryptoWalletOnboardingViewPager.setCurrentItem(
|
||||
cryptoWalletOnboardingViewPager.getCurrentItem() - 1);
|
||||
cryptoWalletOnboardingViewPager.setCurrentItem(cryptoWalletOnboardingViewPager.getCurrentItem() - 1);
|
||||
}
|
||||
});
|
||||
|
||||
cryptoWalletOnboardingViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
if (position == 0 || position == 2) {
|
||||
onboardingBackButton.setVisibility(View.GONE);
|
||||
} else {
|
||||
onboardingBackButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
|
||||
}
|
||||
});
|
||||
// if (BraveWalletNativeWorker.getInstance().isWalletLocked()) {
|
||||
// setNavigationFragments(UNLOCK_WALLET_ACTION);
|
||||
// } else {
|
||||
setNavigationFragments(ONBOARDING_ACTION);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-10
@@ -25,11 +25,17 @@ import org.chromium.chrome.browser.crypto_wallet.util.Utils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class RecoveryPhraseFragment extends CryptoOnboardingFragment {
|
||||
|
||||
private List<String> recoveryPhrases;
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
recoveryPhrases = new ArrayList<String>(Arrays.asList(Utils.recoveryPhrase.split(" ")));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -74,21 +80,13 @@ public class RecoveryPhraseFragment extends CryptoOnboardingFragment {
|
||||
recyclerView.setLayoutManager(layoutManager);
|
||||
|
||||
RecoveryPhraseAdapter recoveryPhraseAdapter = new RecoveryPhraseAdapter();
|
||||
recoveryPhraseAdapter.setRecoveryPhraseMap(getRecoveryPhraseMap());
|
||||
recoveryPhraseAdapter.setRecoveryPhraseMap(Utils.getRecoveryPhraseMap(recoveryPhrases));
|
||||
recyclerView.setAdapter(recoveryPhraseAdapter);
|
||||
}
|
||||
|
||||
private Map<Integer, String> getRecoveryPhraseMap() {
|
||||
Map<Integer, String> recoveryPhraseMap = new HashMap<>();
|
||||
for (int i = 0; i < Utils.recoveryPhrases.size(); i++) {
|
||||
recoveryPhraseMap.put(i, Utils.recoveryPhrases.get(i));
|
||||
}
|
||||
return recoveryPhraseMap;
|
||||
}
|
||||
|
||||
private String getRecoveryPhraseToCopy() {
|
||||
String recoveryPhrasesText = "";
|
||||
for (String phrase : Utils.recoveryPhrases) {
|
||||
for (String phrase : recoveryPhrases) {
|
||||
recoveryPhrasesText = recoveryPhrasesText.concat(phrase).concat(" ");
|
||||
}
|
||||
return recoveryPhrasesText.trim();
|
||||
|
||||
+7
-8
@@ -56,14 +56,13 @@ public class RestoreWalletFragment extends CryptoOnboardingFragment {
|
||||
|
||||
Button secureCryptoButton = view.findViewById(R.id.btn_restore_wallet);
|
||||
secureCryptoButton.setOnClickListener(v -> {
|
||||
if (TextUtils.isEmpty(passwordEdittext.getText())
|
||||
|| passwordEdittext.getText().toString().length() < 7) {
|
||||
passwordEdittext.setError(getResources().getString(R.string.password_error));
|
||||
} else if (TextUtils.isEmpty(retypePasswordEdittext.getText())
|
||||
|| !passwordEdittext.getText().toString().equals(
|
||||
retypePasswordEdittext.getText().toString())) {
|
||||
retypePasswordEdittext.setError(
|
||||
getResources().getString(R.string.retype_password_error));
|
||||
String passwordInput = passwordEdittext.getText().toString().trim();
|
||||
String retypePasswordInput = retypePasswordEdittext.getText().toString().trim();
|
||||
|
||||
if (passwordInput.isEmpty() || !Utils.PASSWORD_PATTERN.matcher(passwordInput).matches()) {
|
||||
passwordEdittext.setError(getResources().getString(R.string.password_text));
|
||||
} else if (retypePasswordInput.isEmpty() || !passwordInput.equals(retypePasswordInput)) {
|
||||
retypePasswordEdittext.setError(getResources().getString(R.string.retype_password_error));
|
||||
} else {
|
||||
// Restore button
|
||||
}
|
||||
|
||||
+15
-10
@@ -24,9 +24,14 @@ import androidx.core.content.ContextCompat;
|
||||
|
||||
import org.chromium.chrome.R;
|
||||
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
|
||||
import org.chromium.chrome.browser.crypto_wallet.BraveWalletNativeWorker;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
public class SecurePasswordFragment extends CryptoOnboardingFragment {
|
||||
private EditText passwordEdittext;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -35,30 +40,29 @@ public class SecurePasswordFragment extends CryptoOnboardingFragment {
|
||||
@Override
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
return inflater.inflate(R.layout.fragment_secure_password, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
EditText passwordEdittext = view.findViewById(R.id.secure_crypto_password);
|
||||
passwordEdittext = view.findViewById(R.id.secure_crypto_password);
|
||||
EditText retypePasswordEdittext = view.findViewById(R.id.secure_crypto_retype_password);
|
||||
|
||||
Button secureCryptoButton = view.findViewById(R.id.btn_secure_crypto_continue);
|
||||
secureCryptoButton.setOnClickListener(v -> {
|
||||
if (TextUtils.isEmpty(passwordEdittext.getText())
|
||||
|| passwordEdittext.getText().toString().length() < 7) {
|
||||
passwordEdittext.setError(getResources().getString(R.string.password_error));
|
||||
} else if (TextUtils.isEmpty(retypePasswordEdittext.getText())
|
||||
|| !passwordEdittext.getText().toString().equals(
|
||||
retypePasswordEdittext.getText().toString())) {
|
||||
retypePasswordEdittext.setError(
|
||||
getResources().getString(R.string.retype_password_error));
|
||||
String passwordInput = passwordEdittext.getText().toString().trim();
|
||||
String retypePasswordInput = retypePasswordEdittext.getText().toString().trim();
|
||||
|
||||
if (passwordInput.isEmpty() || !Utils.PASSWORD_PATTERN.matcher(passwordInput).matches()) {
|
||||
passwordEdittext.setError(getResources().getString(R.string.password_text));
|
||||
} else if (retypePasswordInput.isEmpty() || !passwordInput.equals(retypePasswordInput)) {
|
||||
retypePasswordEdittext.setError(getResources().getString(R.string.retype_password_error));
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
showFingerprintDialog(authenticationCallback);
|
||||
} else {
|
||||
Utils.recoveryPhrase = BraveWalletNativeWorker.getInstance().createWallet(passwordInput).trim();
|
||||
onNextPage.gotoNextPage(false);
|
||||
}
|
||||
}
|
||||
@@ -89,6 +93,7 @@ public class SecurePasswordFragment extends CryptoOnboardingFragment {
|
||||
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
|
||||
super.onAuthenticationSucceeded(result);
|
||||
// Go to next Page
|
||||
Utils.recoveryPhrase = BraveWalletNativeWorker.getInstance().createWallet(passwordEdittext.getText().toString().trim()).trim();
|
||||
onNextPage.gotoNextPage(false);
|
||||
}
|
||||
|
||||
|
||||
+9
-1
@@ -19,6 +19,8 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import org.chromium.chrome.R;
|
||||
|
||||
import org.chromium.chrome.browser.crypto_wallet.BraveWalletNativeWorker;
|
||||
|
||||
public class UnlockWalletFragment extends CryptoOnboardingFragment {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
@@ -40,8 +42,14 @@ public class UnlockWalletFragment extends CryptoOnboardingFragment {
|
||||
unlockButton.setOnClickListener(v -> {
|
||||
if (TextUtils.isEmpty(unlockWalletPassword.getText())) {
|
||||
unlockWalletPassword.setError(getString(R.string.password_error));
|
||||
return;
|
||||
}
|
||||
|
||||
if (BraveWalletNativeWorker.getInstance().unlockWallet(unlockWalletPassword.getText().toString())) {
|
||||
onNextPage.gotoNextPage(true);
|
||||
} else {
|
||||
unlockWalletPassword.setError(getString(R.string.password_error));
|
||||
}
|
||||
onNextPage.gotoNextPage(true);
|
||||
});
|
||||
|
||||
TextView unlockWalletRestoreButton = view.findViewById(R.id.btn_unlock_wallet_restore);
|
||||
|
||||
+8
-2
@@ -24,12 +24,17 @@ import org.chromium.chrome.browser.crypto_wallet.fragments.AddAccountOnboardingD
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.ItemOffsetDecoration;
|
||||
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class VerifyRecoveryPhraseFragment extends CryptoOnboardingFragment {
|
||||
private RecoveryPhraseAdapter recoveryPhraseAdapter;
|
||||
private RecyclerView phraseRecyclerView;
|
||||
private RecyclerView selectedPhraseRecyclerView;
|
||||
private RecoveryPhraseAdapter selectedRecoveryPhraseAdapter;
|
||||
private Button recoveryPhraseButton;
|
||||
private List<String> recoveryPhrases;
|
||||
|
||||
public interface OnRecoveryPhraseSelected {
|
||||
void onSelectedRecoveryPhrase();
|
||||
@@ -38,6 +43,7 @@ public class VerifyRecoveryPhraseFragment extends CryptoOnboardingFragment {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
recoveryPhrases = new ArrayList<String>(Arrays.asList(Utils.recoveryPhrase.split(" ")));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -71,7 +77,7 @@ public class VerifyRecoveryPhraseFragment extends CryptoOnboardingFragment {
|
||||
phraseRecyclerView.setLayoutManager(layoutManager);
|
||||
|
||||
recoveryPhraseAdapter = new RecoveryPhraseAdapter();
|
||||
recoveryPhraseAdapter.setRecoveryPhraseMap(Utils.getRecoveryPhraseMap());
|
||||
recoveryPhraseAdapter.setRecoveryPhraseMap(Utils.getRecoveryPhraseMap(recoveryPhrases));
|
||||
recoveryPhraseAdapter.setOnRecoveryPhraseSelectedListener(onRecoveryPhraseSelected);
|
||||
phraseRecyclerView.setAdapter(recoveryPhraseAdapter);
|
||||
}
|
||||
@@ -117,7 +123,7 @@ public class VerifyRecoveryPhraseFragment extends CryptoOnboardingFragment {
|
||||
|
||||
if (recoveryPhraseAdapter != null
|
||||
&& recoveryPhraseAdapter.getSelectedRecoveryPhraseMap().size()
|
||||
== Utils.recoveryPhrases.size()) {
|
||||
== recoveryPhrases.size()) {
|
||||
recoveryPhraseButton.setAlpha(1f);
|
||||
recoveryPhraseButton.setEnabled(true);
|
||||
}
|
||||
|
||||
@@ -16,17 +16,29 @@ import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Utils {
|
||||
public static final List<String> recoveryPhrases =
|
||||
new ArrayList<>(Arrays.asList("Tomato", "Green", "Velvet", "Span", "Celery", "Atoms",
|
||||
"Parent", "Stop", "Bowl", "Wishful", "Stone", "Exercise"));
|
||||
public static final Pattern PASSWORD_PATTERN =
|
||||
Pattern.compile("^" +
|
||||
"(?=.*[0-9])" + //at least 1 digit
|
||||
"(?=.*[a-zA-Z])" + //any letter
|
||||
"(?=.*[$&+,:;=?@#|'<>.^*()%!-])" + //at least 1 special character
|
||||
"(?=\\S+$)" + //no white spaces
|
||||
".{7,}" + //at least 7 characters
|
||||
"$");
|
||||
|
||||
// public static final List<String> recoveryPhrases =
|
||||
// new ArrayList<>(Arrays.asList("Tomato", "Green", "Velvet", "Span", "Celery", "Atoms",
|
||||
// "Parent", "Stop", "Bowl", "Wishful", "Stone", "Exercise"));
|
||||
|
||||
public static String recoveryPhrase = "";
|
||||
|
||||
public static int ONBOARDING_ACTION = 1;
|
||||
public static int UNLOCK_WALLET_ACTION = 2;
|
||||
public static int RESTORE_WALLET_ACTION = 3;
|
||||
|
||||
public static Map<Integer, String> getRecoveryPhraseMap() {
|
||||
public static Map<Integer, String> getRecoveryPhraseMap(List<String> recoveryPhrases) {
|
||||
Map<Integer, String> recoveryPhraseMap = new HashMap<>();
|
||||
for (int i = 0; i < recoveryPhrases.size(); i++) {
|
||||
recoveryPhraseMap.put(i, recoveryPhrases.get(i));
|
||||
|
||||
Reference in New Issue
Block a user