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);