Skip to content

Commit

Permalink
Fixed not being able to exit brave wallet using navigation (#16911)
Browse files Browse the repository at this point in the history
Uplift of #16877 (squashed) to release
  • Loading branch information
Pavneet Singh committed Jan 31, 2023
1 parent d0bac6e commit 7cf1f9d
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 0 deletions.
1 change: 1 addition & 0 deletions android/brave_java_sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/app/domain/SendModel.java",
"../../brave/android/java/org/chromium/chrome/browser/app/domain/SwapModel.java",
"../../brave/android/java/org/chromium/chrome/browser/app/domain/WalletModel.java",
"../../brave/android/java/org/chromium/chrome/browser/app/helpers/Api33AndPlusBackPressHelper.java",
"../../brave/android/java/org/chromium/chrome/browser/appmenu/BraveTabbedAppMenuPropertiesDelegate.java",
"../../brave/android/java/org/chromium/chrome/browser/autofill/BraveAutofillPopupBridge.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkUtils.java",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/* Copyright (c) 2023 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */

package org.chromium.chrome.browser.app.helpers;

import android.os.Build;
import android.window.OnBackInvokedCallback;
import android.window.OnBackInvokedDispatcher;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;

import java.lang.ref.WeakReference;

/**
* Helper class for back press event handling via {@link OnBackInvokedDispatcher}.
* This should only be used to resolve Android 13+ back press issue
* {@link https://github.com/brave/brave-browser/issues/27787}.
*/
public final class Api33AndPlusBackPressHelper {
private final WeakReference<FragmentActivity> mActivity;

@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
public static void create(LifecycleOwner lifecycleOwner, FragmentActivity activity,
OnBackInvokedCallback handler) {
new Api33AndPlusBackPressHelper(lifecycleOwner, activity, handler);
}

private Api33AndPlusBackPressHelper(LifecycleOwner lifecycleOwner, FragmentActivity activity,
OnBackInvokedCallback handler) {
mActivity = new WeakReference<>(activity);
if (isActive() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getRef().getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT, handler);
lifecycleOwner.getLifecycle().addObserver(new DefaultLifecycleObserver() {
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
if (isAvailable()) {
getRef().getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(
handler);
}
}
});
}
}

private FragmentActivity getRef() {
return mActivity.get();
}

private boolean isAvailable() {
return mActivity != null && mActivity.get() != null;
}

private boolean isActive() {
return isAvailable() && !mActivity.get().isFinishing();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
Expand All @@ -21,6 +23,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

Expand All @@ -42,6 +45,7 @@
import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.app.domain.WalletModel;
import org.chromium.chrome.browser.app.helpers.Api33AndPlusBackPressHelper;
import org.chromium.chrome.browser.crypto_wallet.BlockchainRegistryFactory;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletActivity;
import org.chromium.chrome.browser.crypto_wallet.adapters.WalletCoinAdapter;
Expand Down Expand Up @@ -106,6 +110,10 @@ private TxService getTxService() {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Api33AndPlusBackPressHelper.create(
this, (FragmentActivity) requireActivity(), () -> requireActivity().finish());
}
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package org.chromium.chrome.browser.crypto_wallet.fragments.onboarding_fragments;

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
Expand All @@ -15,11 +16,13 @@

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;

import org.chromium.base.task.PostTask;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.app.helpers.Api33AndPlusBackPressHelper;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
import org.chromium.content_public.browser.UiThreadTaskTraits;

Expand All @@ -32,6 +35,15 @@ public SetupWalletFragment(boolean restartSetupAction, boolean restartRestoreAct
mRestartRestoreAction = restartRestoreAction;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Api33AndPlusBackPressHelper.create(
this, (FragmentActivity) requireActivity(), () -> requireActivity().finish());
}
}

@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;

import org.chromium.brave_wallet.mojom.KeyringService;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.helpers.Api33AndPlusBackPressHelper;
import org.chromium.chrome.browser.crypto_wallet.activities.BraveWalletActivity;
import org.chromium.chrome.browser.crypto_wallet.util.KeystoreHelper;
import org.chromium.chrome.browser.crypto_wallet.util.Utils;
Expand All @@ -49,6 +51,15 @@ private KeyringService getKeyringService() {
return null;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Api33AndPlusBackPressHelper.create(
this, (FragmentActivity) requireActivity(), () -> requireActivity().finish());
}
}

@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Expand Down

0 comments on commit 7cf1f9d

Please sign in to comment.