Skip to content

(Wallet) Implement new password creation screen #22459

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Mar 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions android/brave_java_resources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,11 @@ brave_java_resources = [
"java/res/drawable/onboarding_gradient_background_start.xml",
"java/res/drawable/orange_rounded_button.xml",
"java/res/drawable/p2p_rewards_inside_background.xml",
"java/res/drawable/password_match.xml",
"java/res/drawable/progress_bar_medium.xml",
"java/res/drawable/progress_bar_strong.xml",
"java/res/drawable/progress_bar_weak.xml",
"java/res/drawable/progress_bar_weak.xml",
"java/res/drawable/progress_indeterminate_orange.xml",
"java/res/drawable/quick_action_search_and_bookmark_widget_background.xml",
"java/res/drawable/quick_action_search_and_bookmark_widget_bookmark_bg.xml",
Expand Down Expand Up @@ -720,6 +725,7 @@ brave_java_resources = [
"java/res/drawable/wallet_toolbar_panel_gradient_bg.xml",
"java/res/drawable/wallet_top_banner_bg.xml",
"java/res/drawable/wallet_verify_button.xml",
"java/res/drawable/warning_circle_filled.xml",
"java/res/drawable/web_notification_small_icon_background.xml",
"java/res/drawable/white_rounded_holo_button_thin.xml",
"java/res/layout-land/brave_shields_stats_row.xml",
Expand Down Expand Up @@ -899,6 +905,7 @@ brave_java_resources = [
"java/res/layout/ntp_image_credit.xml",
"java/res/layout/ntp_non_disruptive_banner.xml",
"java/res/layout/optin_layout.xml",
"java/res/layout/password_strength_meter_layout.xml",
"java/res/layout/qa_code_check.xml",
"java/res/layout/qa_command_line.xml",
"java/res/layout/quick_action_search_and_bookmark_widget_layout.xml",
Expand Down
1 change: 1 addition & 0 deletions android/brave_java_sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/HeightWrappingViewPager.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/LockableNestedScrollView.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/NonSwipeableViewPager.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/PasswordStrengthMeterView.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/VerticalViewPager.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/ArrowColorDrawable.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

package org.chromium.chrome.browser.crypto_wallet.activities;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
Expand All @@ -15,7 +16,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.view.menu.MenuBuilder;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;

import com.google.android.material.appbar.MaterialToolbar;

Expand Down Expand Up @@ -87,7 +88,7 @@ public enum WalletAction {
private View mCryptoOnboardingLayout;
private ImageView mOnboardingCloseButton;
private ImageView mOnboardingBackButton;
private ViewPager mCryptoWalletOnboardingViewPager;
private ViewPager2 mCryptoWalletOnboardingViewPager;
private ModalDialogManager mModalDialogManager;
private CryptoWalletOnboardingPagerAdapter mCryptoWalletOnboardingPagerAdapter;
private boolean mShowBiometricPrompt;
Expand Down Expand Up @@ -147,11 +148,11 @@ protected void triggerLayoutInflation() {

mCryptoOnboardingLayout = findViewById(R.id.crypto_onboarding_layout);
mCryptoWalletOnboardingViewPager = findViewById(R.id.crypto_wallet_onboarding_viewpager);
mCryptoWalletOnboardingPagerAdapter =
new CryptoWalletOnboardingPagerAdapter(getSupportFragmentManager());
mCryptoWalletOnboardingViewPager.setUserInputEnabled(false);
mCryptoWalletOnboardingPagerAdapter = new CryptoWalletOnboardingPagerAdapter(this);
mCryptoWalletOnboardingViewPager.setAdapter(mCryptoWalletOnboardingPagerAdapter);
mCryptoWalletOnboardingViewPager.setOffscreenPageLimit(
mCryptoWalletOnboardingPagerAdapter.getCount() - 1);
mCryptoWalletOnboardingPagerAdapter.getItemCount() - 1);

mOnboardingCloseButton = findViewById(R.id.onboarding_close_button);
mOnboardingCloseButton.setOnClickListener(v -> finish());
Expand Down Expand Up @@ -207,6 +208,7 @@ public ModalDialogManager getModalDialogManager() {
};
}

@SuppressLint("NotifyDataSetChanged")
private void setNavigationFragments(@NonNull final WalletAction walletAction) {
List<NavigationItem> navigationItems = new ArrayList<>();
mShowBiometricPrompt = true;
Expand Down Expand Up @@ -240,6 +242,7 @@ private void setNavigationFragments(@NonNull final WalletAction walletAction) {
addRemoveSecureFlag(true);
}

@SuppressLint("NotifyDataSetChanged")
private void replaceNavigationFragments(@NonNull final WalletAction walletAction) {
if (mCryptoWalletOnboardingViewPager == null) return;
if (mCryptoWalletOnboardingPagerAdapter == null) return;
Expand Down Expand Up @@ -340,6 +343,7 @@ private void addWalletCreationPage(
getResources().getString(stringId), onboardingCreatingWalletFragment));
}

@SuppressLint("NotifyDataSetChanged")
public void showOnboardingLayout() {
addRemoveSecureFlag(true);
mCryptoOnboardingLayout.setVisibility(View.VISIBLE);
Expand Down Expand Up @@ -377,7 +381,7 @@ public void gotoNextPage() {
if (mCryptoWalletOnboardingViewPager != null
&& mCryptoWalletOnboardingViewPager.getAdapter() != null
&& mCryptoWalletOnboardingViewPager.getCurrentItem()
< mCryptoWalletOnboardingViewPager.getAdapter().getCount() - 1) {
< mCryptoWalletOnboardingViewPager.getAdapter().getItemCount() - 1) {
mCryptoWalletOnboardingViewPager.setCurrentItem(
mCryptoWalletOnboardingViewPager.getCurrentItem() + 1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,16 @@
package org.chromium.chrome.browser.crypto_wallet.adapters;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;

import org.chromium.chrome.browser.crypto_wallet.util.NavigationItem;

import java.util.ArrayList;
import java.util.List;

public class CryptoWalletOnboardingPagerAdapter extends FragmentStatePagerAdapter {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Migrated away from deprecated FragmentStatePagerAdapter.

public class CryptoWalletOnboardingPagerAdapter extends FragmentStateAdapter {
private final List<NavigationItem> mNavigationItems = new ArrayList<>();

public void setNavigationItems(@NonNull final List<NavigationItem> navigationItems) {
Expand All @@ -38,29 +37,18 @@ public void replaceWithNavigationItems(
mNavigationItems.addAll(navigationItems);
}

public CryptoWalletOnboardingPagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}

@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
public CryptoWalletOnboardingPagerAdapter(@NonNull final FragmentActivity fragmentActivity) {
super(fragmentActivity);
}

@NonNull
@Override
public Fragment getItem(int position) {
public Fragment createFragment(int position) {
return mNavigationItems.get(position).getFragment();
}

@Override
public int getCount() {
public int getItemCount() {
return mNavigationItems.size();
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mNavigationItems.get(position).getTitle();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@

package org.chromium.chrome.browser.crypto_wallet.fragments.onboarding;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatButton;

import org.chromium.chrome.browser.crypto_wallet.fragments.BaseWalletNextPageFragment;

/**
Expand Down Expand Up @@ -35,4 +38,14 @@ public void onResume() {
mOnNextPage.showBackButton(canNavigateBack());
}
}

protected void enable(@NonNull final AppCompatButton button, final boolean enable) {
if (enable) {
button.setAlpha(1f);
button.setEnabled(true);
} else {
button.setAlpha(0.5f);
button.setEnabled(false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,58 @@
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStoreOwner;

import org.chromium.brave_wallet.mojom.BraveWalletP3a;
import org.chromium.brave_wallet.mojom.KeyringService;
import org.chromium.brave_wallet.mojom.OnboardingAction;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.crypto_wallet.model.OnboardingViewModel;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;

/** Onboarding fragment for Brave Wallet which shows the spinner while wallet is created/restored */
public class OnboardingCreatingWalletFragment extends BaseOnboardingWalletFragment {
private OnboardingViewModel mOnboardingViewModel;

@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_creating_wallet, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mOnboardingViewModel =
new ViewModelProvider((ViewModelStoreOwner) requireActivity())
.get(OnboardingViewModel.class);

KeyringService keyringService = getKeyringService();
BraveWalletP3a braveWalletP3A = getBraveWalletP3A();
if (keyringService != null) {
mOnboardingViewModel
.getPassword()
.observe(
getViewLifecycleOwner(),
password ->
keyringService.createWallet(
password,
recoveryPhrases -> {
if (braveWalletP3A != null) {
braveWalletP3A.reportOnboardingAction(
OnboardingAction.RECOVERY_SETUP);
}
// Go to the next page after wallet creation is done
Utils.setCryptoOnboarding(false);
if (mOnNextPage != null) {
mOnNextPage.gotoNextPage();
}
}));
}
}

@Override
protected boolean canBeClosed() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public class OnboardingInitWalletFragment extends BaseOnboardingWalletFragment {

private boolean mRestartSetupAction;
private boolean mRestartRestoreAction;
private boolean mButtonClicked;
private AnimationDrawable mAnimationDrawable;

public OnboardingInitWalletFragment(boolean restartSetupAction, boolean restartRestoreAction) {
Expand All @@ -46,6 +47,7 @@ public OnboardingInitWalletFragment(boolean restartSetupAction, boolean restartR
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mButtonClicked = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Api33AndPlusBackPressHelper.create(
this, (FragmentActivity) requireActivity(), () -> requireActivity().finish());
Expand All @@ -72,6 +74,11 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
CardView newWallet = view.findViewById(R.id.new_wallet_card_view);
newWallet.setOnClickListener(
v -> {
if (mButtonClicked) {
return;
}
mButtonClicked = true;

checkOnBraveActivity(true, false);
if (mOnNextPage != null) {
// Add a little delay for a smooth ripple effect animation.
Expand All @@ -83,6 +90,11 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
CardView restoreWallet = view.findViewById(R.id.restore_wallet_card_view);
restoreWallet.setOnClickListener(
v -> {
if (mButtonClicked) {
return;
}
mButtonClicked = true;

checkOnBraveActivity(false, true);
if (mOnNextPage != null) {
// Add a little delay for a smooth ripple effect animation.
Expand All @@ -108,6 +120,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
@Override
public void onResume() {
super.onResume();
mButtonClicked = false;
mAnimationDrawable.start();
}

Expand Down
Loading