Skip to content
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

Fix external wallet redirect modals on Android #11661

Merged
merged 2 commits into from
Dec 21, 2021
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
Original file line number Diff line number Diff line change
Expand Up @@ -417,13 +417,6 @@ public void DisconnectWallet() {
}
}

public void ProcessRewardsPageUrl(String path, String query) {
synchronized (lock) {
BraveRewardsNativeWorkerJni.get().processRewardsPageUrl(
mNativeBraveRewardsNativeWorker, path, query);
}
}

public void RecoverWallet(String passPhrase) {
synchronized (lock) {
BraveRewardsNativeWorkerJni.get().recoverWallet(
Expand Down Expand Up @@ -631,15 +624,6 @@ public void OnDisconnectWallet(int error_code, String external_wallet) {
}
}

@CalledByNative
public void OnProcessRewardsPageUrl(int error_code, String wallet_type,
String action, String json_args) {
for (BraveRewardsObserver observer : mObservers) {
observer.OnProcessRewardsPageUrl(error_code, wallet_type,
action, json_args);
}
}

@CalledByNative
public void OnClaimPromotion(int error_code) {
grantClaimInProcess = false;
Expand Down Expand Up @@ -711,7 +695,6 @@ boolean isCurrentPublisherInRecurrentDonations(
boolean isRewardsEnabled(long nativeBraveRewardsNativeWorker);
void getExternalWallet(long nativeBraveRewardsNativeWorker);
void disconnectWallet(long nativeBraveRewardsNativeWorker);
void processRewardsPageUrl(long nativeBraveRewardsNativeWorker, String path, String query);
void recoverWallet(long nativeBraveRewardsNativeWorker, String passPhrase);
void refreshPublisher(long nativeBraveRewardsNativeWorker, String publisherKey);
void getRewardsParameters(long nativeBraveRewardsNativeWorker);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,8 @@ default public void OnGetLatestNotification(String id, int type, long timestamp,
default public void OnRecurringDonationUpdated() {};
default public void OnResetTheWholeState(boolean success) {};
default public void OnGrantFinish(int result) {};
default public void OnGetExternalWallet(int error_code,
String external_wallet) {};
default public void OnDisconnectWallet(int error_code,
String external_wallet) {};
default public void OnProcessRewardsPageUrl(int error_code,
String wallet_type, String action, String json_args ) {};
default public void OnGetExternalWallet(int error_code, String external_wallet){};
default public void OnDisconnectWallet(int error_code, String external_wallet){};
default public void OnClaimPromotion(int error_code) {};
default public void onUnblindedTokensReady() {}
default public void onReconcileComplete(int resultCode, int rewardsType, double amount) {}
Expand Down
118 changes: 4 additions & 114 deletions android/java/org/chromium/chrome/browser/BraveWalletProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,18 @@
*/
package org.chromium.chrome.browser;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.Uri;
import android.text.TextUtils;

import org.json.JSONException;
import org.json.JSONObject;

import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.BraveRewardsBalance;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.BraveRewardsNativeWorker;
import org.chromium.chrome.browser.BraveRewardsObserver;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.externalnav.BraveExternalNavigationHandler;
import org.chromium.components.external_intents.ExternalNavigationParams;

import java.util.Locale;

// Used from org.chromium.chrome.browser.externalnav
public class BraveWalletProvider implements BraveRewardsObserver {
public class BraveWalletProvider {
public static final String ACTION_VALUE = "authorization";

public static final String REDIRECT_URL_KEY = "redirect_url";
Expand All @@ -46,108 +34,10 @@ public class BraveWalletProvider implements BraveRewardsObserver {

private static int UNKNOWN_ERROR_CODE = -1;

private ExternalNavigationParams mExternalNavigationParams;
private BraveExternalNavigationHandler mBraveExternalNavigationHandler;
private BraveRewardsNativeWorker rewardsNativeProxy;

public void completeWalletProviderVerification(
ExternalNavigationParams params, BraveExternalNavigationHandler handler) {
mExternalNavigationParams = params;
mBraveExternalNavigationHandler = handler;
rewardsNativeProxy = BraveRewardsNativeWorker.getInstance();

Uri uri = Uri.parse(params.getUrl().getSpec());
rewardsNativeProxy.AddObserver(this);
String path = uri.getPath();
String query = uri.getQuery();

if (TextUtils.isEmpty(path) || TextUtils.isEmpty(query)) {
rewardsNativeProxy.RemoveObserver(this);
releaseDependencies();
showErrorMessageBox(UNKNOWN_ERROR_CODE);
return;
}

// Ledger expects:
// path: "/provider/path"
// query: "?query"
path = String.format(Locale.US, "/%s/%s", rewardsNativeProxy.getExternalWalletType(), path);
query = String.format(Locale.US, "?%s", query);

rewardsNativeProxy.ProcessRewardsPageUrl(path, query);
}

@Override
public void OnProcessRewardsPageUrl(
int errorCode, String walletType, String action, String jsonArgs) {
// remove observer
if (rewardsNativeProxy != null) {
rewardsNativeProxy.RemoveObserver(this);
}

String redirectUrl = parseJsonArgs(jsonArgs);
if (BraveRewardsNativeWorker.LEDGER_OK == errorCode
&& TextUtils.equals(action, ACTION_VALUE)) {
// wallet is verified: redirect to chrome://rewards for now
if (TextUtils.isEmpty(redirectUrl)) {
redirectUrl = BraveActivity.REWARDS_SETTINGS_URL;
}
mBraveExternalNavigationHandler.clobberCurrentTabWithFallbackUrl(
redirectUrl, mExternalNavigationParams);

// temporary: open Rewards Panel to show wallet transition state.
// remove this step once settings activity has this info
BraveActivity.getBraveActivity().openRewardsPanel();
releaseDependencies();
} else {
showErrorMessageBox(errorCode);
}
}

private String parseJsonArgs(String jsonArgs) {
String redirect_url = "";
try {
JSONObject jsonObj = new JSONObject(jsonArgs);
if (jsonObj.has(REDIRECT_URL_KEY)) {
redirect_url = jsonObj.getString(REDIRECT_URL_KEY);
}
} catch (JSONException e) {
Log.e("BraveRewards", e.getMessage());
}
return redirect_url;
}

private void releaseDependencies() {
mExternalNavigationParams = null;
mBraveExternalNavigationHandler = null;
}

private void showErrorMessageBox(int errorCode) {
String message = "";
String messageTitle = "";
Context context = ContextUtils.getApplicationContext();
AlertDialog.Builder builder = new AlertDialog.Builder(
BraveRewardsHelper.getChromeTabbedActivity(), R.style.Theme_Chromium_AlertDialog);

if (BraveRewardsNativeWorker.BAT_NOT_ALLOWED == errorCode) {
message = context.getResources().getString(R.string.bat_not_allowed_in_region);
messageTitle =
context.getResources().getString(R.string.bat_not_allowed_in_region_title);
} else {
message = context.getResources().getString(R.string.wallet_verification_generic_error);
messageTitle = context.getResources().getString(
R.string.wallet_verification_generic_error_title);
}
builder.setMessage(message)
.setTitle(messageTitle)
.setPositiveButton(R.string.ok,
(DialogInterface dialog, int which) -> {
mBraveExternalNavigationHandler.clobberCurrentTabWithFallbackUrl(
BRAVE_SUPPORT_URL, mExternalNavigationParams);
})
.setOnDismissListener((DialogInterface dialog) -> { releaseDependencies(); });

AlertDialog dialog = builder.create();
dialog.show();
String originalUrl = params.getUrl().getSpec();
String url = originalUrl.replaceFirst("^rewards://", "chrome://rewards/");
Copy link
Contributor

Choose a reason for hiding this comment

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

i think we should update it to "brave://rewards/" i will update it in a separate issue.

handler.clobberCurrentTabWithFallbackUrl(url, params);
}
}
28 changes: 0 additions & 28 deletions browser/brave_rewards/android/brave_rewards_native_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -733,34 +733,6 @@ void BraveRewardsNativeWorker::OnDisconnectWallet(
base::android::ConvertUTF8ToJavaString(env, wallet_type));
}

void BraveRewardsNativeWorker::ProcessRewardsPageUrl(JNIEnv* env,
const base::android::JavaParamRef<jstring>& path,
const base::android::JavaParamRef<jstring>& query) {
if (brave_rewards_service_) {
std::string cpath = base::android::ConvertJavaStringToUTF8(env, path);
std::string cquery = base::android::ConvertJavaStringToUTF8(env, query);
brave_rewards_service_->ProcessRewardsPageUrl(
cpath, cquery,
base::BindOnce(&BraveRewardsNativeWorker::OnProcessRewardsPageUrl,
weak_factory_.GetWeakPtr()));
}
}

void BraveRewardsNativeWorker::OnProcessRewardsPageUrl(
const ledger::type::Result result,
const std::string& wallet_type,
const std::string& action,
const base::flat_map<std::string, std::string>& args) {
std::string json_args = StdStrStrMapToJsonString(args);
JNIEnv* env = base::android::AttachCurrentThread();
Java_BraveRewardsNativeWorker_OnProcessRewardsPageUrl(env,
weak_java_brave_rewards_native_worker_.get(env),
static_cast<int>(result),
base::android::ConvertUTF8ToJavaString(env, wallet_type),
base::android::ConvertUTF8ToJavaString(env, action),
base::android::ConvertUTF8ToJavaString(env, json_args));
}

std::string BraveRewardsNativeWorker::StdStrStrMapToJsonString(
const base::flat_map<std::string, std::string>& args) {
std::string json_args;
Expand Down
10 changes: 0 additions & 10 deletions browser/brave_rewards/android/brave_rewards_native_worker.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,6 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver,

void DisconnectWallet(JNIEnv* env);

void ProcessRewardsPageUrl(JNIEnv* env,
const base::android::JavaParamRef<jstring>& path,
const base::android::JavaParamRef<jstring>& query);

void RecoverWallet(JNIEnv* env,
const base::android::JavaParamRef<jstring>& pass_phrase);

Expand Down Expand Up @@ -215,12 +211,6 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver,
const ledger::type::Result result,
const std::string& wallet_type) override;

void OnProcessRewardsPageUrl(
const ledger::type::Result result,
const std::string& wallet_type,
const std::string& action,
const base::flat_map<std::string, std::string>& args);

void OnRecoverWallet(
brave_rewards::RewardsService* rewards_service,
const ledger::type::Result result) override;
Expand Down
12 changes: 0 additions & 12 deletions browser/ui/android/strings/android_brave_strings.grd
Original file line number Diff line number Diff line change
Expand Up @@ -1044,18 +1044,6 @@ Are you sure you want to do this?
<message name="IDS_USER_WALLET_STATUS_PENDING">
Pending
</message>
<message name="IDS_BAT_NOT_ALLOWED_IN_REGION">
BAT is not currently supported in your region based on the location your account is opened. Check back later for availability.
</message>
<message name="IDS_BAT_NOT_ALLOWED_IN_REGION_TITLE">
Region not supported
</message>
<message name="IDS_WALLET_VERIFICATION_GENERIC_ERROR">
There was a problem verifying your wallet, please try again later.
</message>
<message name="IDS_WALLET_VERIFICATION_GENERIC_ERROR_TITLE">
Wallet verification error
</message>
<message name="IDS_BRAVE_UI_SITE_BANNER_CONNECTED_TEXT" desc="Text shown for connected publishers that are not fully verified on site banner">
NOTE: This Brave Verified Creator has not yet configured their account to receive contributions from Brave users. Your browser will keep trying to contribute until they verify, or until 90 days have passed.
</message>
Expand Down