diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java
index 5cefe6ce193..f3aceb52244 100644
--- a/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java
+++ b/android/java/org/chromium/chrome/browser/BraveRewardsNativeWorker.java
@@ -430,6 +430,19 @@ public void ProcessRewardsPageUrl(String path, String query) {
}
}
+ public void RecoverWallet(String passPhrase) {
+ synchronized (lock) {
+ nativeRecoverWallet(mNativeBraveRewardsNativeWorker, passPhrase);
+ }
+ }
+
+ @CalledByNative
+ public void OnRecoverWallet(int errorCode) {
+ for (BraveRewardsObserver observer : mObservers) {
+ observer.OnRecoverWallet(errorCode);
+ }
+ }
+
@CalledByNative
public void OnGetRewardsMainEnabled(boolean enabled) {
int oldRewardsStatus = rewardsStatus;
@@ -672,4 +685,5 @@ private native boolean nativeIsCurrentPublisherInRecurrentDonations(long nativeB
private native void nativeGetExternalWallet(long nativeBraveRewardsNativeWorker, String wallet_type);
private native void nativeDisconnectWallet(long nativeBraveRewardsNativeWorker, String wallet_type);
private native void nativeProcessRewardsPageUrl(long nativeBraveRewardsNativeWorker, String path, String query);
+ private native void nativeRecoverWallet(long nativeBraveRewardsNativeWorker, String passPhrase);
}
diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java
index 69ab2083e21..1e6cfeb3589 100644
--- a/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java
+++ b/android/java/org/chromium/chrome/browser/BraveRewardsObserver.java
@@ -32,4 +32,5 @@ default public void OnDisconnectWallet(int error_code,
default public void OnProcessRewardsPageUrl(int error_code,
String wallet_type, String action, String json_args ) {};
default public void OnClaimPromotion(int error_code) {};
+ default public void OnRecoverWallet(int errorCode) {};
}
diff --git a/android/java/org/chromium/chrome/browser/settings/developer/BraveQAPreferences.java b/android/java/org/chromium/chrome/browser/settings/developer/BraveQAPreferences.java
index da687973a87..f8850f72ef8 100644
--- a/android/java/org/chromium/chrome/browser/settings/developer/BraveQAPreferences.java
+++ b/android/java/org/chromium/chrome/browser/settings/developer/BraveQAPreferences.java
@@ -16,11 +16,13 @@
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
+import android.widget.Toast;
import org.chromium.base.ContextUtils;
import org.chromium.chrome.R;
@@ -48,6 +50,7 @@
private static final String QA_ADS_PER_HOUR = "qa_ads_per_hour";
private static final String QA_IMPORT_REWARDS_DB = "qa_import_rewards_db";
private static final String QA_EXPORT_REWARDS_DB = "qa_export_rewards_db";
+ private static final String QA_RESTORE_WALLET = "qa_restore_wallet";
private static final int CHOOSE_FILE_FOR_IMPORT_REQUEST_CODE = STORAGE_PERMISSION_IMPORT_REQUEST_CODE + 1;
@@ -57,6 +60,7 @@
private ChromeSwitchPreference mIsStagingServer;
private ChromeSwitchPreference mMaximizeAdsNumber;
private ChromeSwitchPreference mDebugNTP;
+ private Preference mRestoreWallet;
private Preference mImportRewardsDb;
private Preference mExportRewardsDb;
@@ -90,9 +94,53 @@ public void onCreate(Bundle savedInstanceState) {
mImportRewardsDb = findPreference(QA_IMPORT_REWARDS_DB);
mExportRewardsDb = findPreference(QA_EXPORT_REWARDS_DB);
setRewardsDbClickListeners();
+
+ mRestoreWallet = findPreference(QA_RESTORE_WALLET);
+ setRestoreClickListener();
+
checkQACode();
}
+ private void setRestoreClickListener() {
+ if (mRestoreWallet != null) {
+ mRestoreWallet.setOnPreferenceClickListener(preference -> {
+ LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.qa_code_check, null);
+ EditText input = (EditText) view.findViewById(R.id.qa_code);
+ input.setInputType(InputType.TYPE_CLASS_TEXT);
+
+ DialogInterface.OnClickListener onClickListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int button) {
+ if (button == AlertDialog.BUTTON_POSITIVE) {
+ String restorePhrase = input.getText().toString();
+ if (!restorePhrase.isEmpty()) {
+ BraveRewardsNativeWorker.getInstance().RecoverWallet(
+ restorePhrase);
+ }
+ }
+ }
+ };
+
+ AlertDialog.Builder alert =
+ new AlertDialog.Builder(getActivity(), R.style.Theme_Chromium_AlertDialog);
+ AlertDialog.Builder alertDialog =
+ alert.setTitle("Enter Wallet restore phrase")
+ .setView(view)
+ .setPositiveButton(R.string.ok, onClickListener)
+ .setNegativeButton(R.string.cancel, onClickListener)
+ .setCancelable(false);
+ Dialog dialog = alertDialog.create();
+ dialog.setCanceledOnTouchOutside(false);
+ dialog.show();
+
+ return true;
+ });
+ }
+ }
+
private void setRewardsDbClickListeners() {
if (mImportRewardsDb != null) {
mImportRewardsDb.setOnPreferenceClickListener( preference -> {
@@ -235,6 +283,14 @@ public void OnResetTheWholeState(boolean success) {
@Override
public void onCreatePreferences(Bundle bundle, String s) {}
+ @Override
+ public void OnRecoverWallet(int errorCode) {
+ Context context = ContextUtils.getApplicationContext();
+ String msg =
+ (0 == errorCode) ? "Wallet is successfully restored" : "Wallet recovery failed";
+ Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
+ }
+
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
diff --git a/android/java/res/layout/qa_code_check.xml b/android/java/res/layout/qa_code_check.xml
index ae8d8db8439..29fdc0160b1 100644
--- a/android/java/res/layout/qa_code_check.xml
+++ b/android/java/res/layout/qa_code_check.xml
@@ -11,5 +11,6 @@
android:id="@+id/qa_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:inputType="textPassword" />
+ android:inputType="textPassword"
+ android:focusable="true" />
diff --git a/android/java/res/xml/qa_preferences.xml b/android/java/res/xml/qa_preferences.xml
index 83f9058b59e..1a14ffba8f8 100644
--- a/android/java/res/xml/qa_preferences.xml
+++ b/android/java/res/xml/qa_preferences.xml
@@ -35,4 +35,8 @@
android:key="qa_export_rewards_db"
android:title="Export Rewards Database" />
+
+
diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.cc b/browser/brave_rewards/android/brave_rewards_native_worker.cc
index 65eafaaa138..c3cfab5ee0b 100644
--- a/browser/brave_rewards/android/brave_rewards_native_worker.cc
+++ b/browser/brave_rewards/android/brave_rewards_native_worker.cc
@@ -793,6 +793,25 @@ std::string BraveRewardsNativeWorker::StdStrStrMapToJsonString(
return json_args;
}
+void BraveRewardsNativeWorker::RecoverWallet(
+ JNIEnv* env,
+ const base::android::JavaParamRef& obj,
+ const base::android::JavaParamRef& pass_phrase) {
+ if (brave_rewards_service_) {
+ brave_rewards_service_->RecoverWallet(
+ base::android::ConvertJavaStringToUTF8(env, pass_phrase));
+ }
+}
+
+void BraveRewardsNativeWorker::OnRecoverWallet(
+ brave_rewards::RewardsService* rewards_service,
+ unsigned int result,
+ double balance) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ Java_BraveRewardsNativeWorker_OnRecoverWallet(
+ env, weak_java_brave_rewards_native_worker_.get(env), result);
+}
+
static void JNI_BraveRewardsNativeWorker_Init(
JNIEnv* env,
const base::android::JavaParamRef& jcaller) {
diff --git a/browser/brave_rewards/android/brave_rewards_native_worker.h b/browser/brave_rewards/android/brave_rewards_native_worker.h
index bb1dd5a64c1..5fb8488f75f 100644
--- a/browser/brave_rewards/android/brave_rewards_native_worker.h
+++ b/browser/brave_rewards/android/brave_rewards_native_worker.h
@@ -179,6 +179,10 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver,
const base::android::JavaParamRef& path,
const base::android::JavaParamRef& query);
+ void RecoverWallet(JNIEnv* env,
+ const base::android::JavaParamRef& obj,
+ const base::android::JavaParamRef& pass_phrase);
+
void OnAdsResetTheWholeState(bool sucess);
void OnResetTheWholeState(bool sucess);
@@ -259,6 +263,10 @@ class BraveRewardsNativeWorker : public brave_rewards::RewardsServiceObserver,
const std::string& wallet_type, const std::string& action,
const std::map& args);
+ void OnRecoverWallet(brave_rewards::RewardsService* rewards_service,
+ unsigned int result,
+ double balance) override;
+
private:
std::string StdStrStrMapToJsonString(
const std::map& args);