From 93a59cd1c0db46a7d7678a01caaaeb8afc313cbe Mon Sep 17 00:00:00 2001 From: Deep Date: Thu, 10 Sep 2020 17:02:22 -0400 Subject: [PATCH] Add binance observer Update binance native worker new functions Change location for BinanceActivity ADd setAuthToken function in binance native worker --- android/brave_java_sources.gni | 3 +- android/java/AndroidManifest.xml | 2 +- .../browser/ntp/BraveNewTabPageLayout.java | 60 ++++++++- .../browser/ntp/widget/NTPWidgetManager.java | 11 ++ .../crypto/binance}/BinanceActivity.java | 5 +- .../crypto/binance/BinanceNativeWorker.java | 116 ++++++++++++++++-- .../crypto/binance/BinanceObserver.java | 16 +++ .../binance/android/binance_native_worker.cc | 8 ++ .../binance/android/binance_native_worker.h | 4 + 9 files changed, 211 insertions(+), 14 deletions(-) rename android/java/org/chromium/chrome/browser/{ => widget/crypto/binance}/BinanceActivity.java (86%) create mode 100644 android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceObserver.java diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 92adf0f4ca9..ec925bc7b86 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -12,7 +12,8 @@ import("//brave/components/safetynet/java_sources.gni") import("//components/feed/features.gni") brave_java_sources = [ - "../../brave/android/java/org/chromium/chrome/browser/BinanceActivity.java", + "../../brave/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceActivity.java", + "../../brave/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceObserver.java", "../../brave/android/java/org/chromium/chrome/browser/BraveAppHooks.java", "../../brave/android/java/org/chromium/chrome/browser/BraveBadge.java", "../../brave/android/java/org/chromium/chrome/browser/BraveFeatureList.java", diff --git a/android/java/AndroidManifest.xml b/android/java/AndroidManifest.xml index 70a9b9ffd62..ae334b21e3d 100644 --- a/android/java/AndroidManifest.xml +++ b/android/java/AndroidManifest.xml @@ -40,7 +40,7 @@ diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java index b2acdb408c8..9c5ff194752 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java @@ -91,6 +91,7 @@ import org.chromium.chrome.browser.util.PackageUtils; import org.chromium.chrome.browser.widget.crypto.binance.CryptoWidgetBottomSheetDialogFragment; import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; import org.chromium.chrome.browser.widget.crypto.binance.BinanceNativeWorker; +import org.chromium.chrome.browser.widget.crypto.binance.BinanceObserver; import org.chromium.chrome.browser.util.TabUtils; import java.util.ArrayList; @@ -124,10 +125,13 @@ public class BraveNewTabPageLayout extends NewTabPageLayout { private LinearLayout indicatorLayout; private LinearLayout superReferralSitesLayout; + private BinanceNativeWorker mBinanceNativeWorker; + public BraveNewTabPageLayout(Context context, AttributeSet attrs) { super(context, attrs); mProfile = Profile.getLastUsedRegularProfile(); mNTPBackgroundImagesBridge = NTPBackgroundImagesBridge.getInstance(mProfile); + mBinanceNativeWorker = BinanceNativeWorker.getInstance(); mNTPBackgroundImagesBridge.setNewTabPageListener(newTabPageListener); mDatabaseHelper = DatabaseHelper.getInstance(); } @@ -308,6 +312,10 @@ public class BraveNewTabPageLayout extends NewTabPageLayout { mBadgeAnimationView.setVisibility(View.INVISIBLE); } showWidgets(); + if(NTPWidgetManager.getInstance().isUserAuthenticatedForBinance()) { + mBinanceNativeWorker.getAccountBalances(); + } + mBinanceNativeWorker.AddObserver(mBinanaceObserver); } @Override @@ -324,6 +332,7 @@ public class BraveNewTabPageLayout extends NewTabPageLayout { } } mNTPBackgroundImagesBridge.removeObserver(mNTPBackgroundImageServiceObserver); + mBinanceNativeWorker.RemoveObserver(mBinanaceObserver); super.onDetachedFromWindow(); } @@ -678,8 +687,8 @@ public class BraveNewTabPageLayout extends NewTabPageLayout { // ntpWidgetBottomSheetDialogFragment.show( // ((BraveActivity) mActivity).getSupportFragmentManager(), // "NTPWidgetBottomSheetDialogFragment"); - Log.e("NTP", "Binance URL : "+ BinanceNativeWorker.getInstance().getOAuthClientUrl()); - TabUtils.openUrlInSameTab(BinanceNativeWorker.getInstance().getOAuthClientUrl()); + Log.e("NTP", "Binance URL : " + mBinanceNativeWorker.getOAuthClientUrl()); + TabUtils.openUrlInSameTab(mBinanceNativeWorker.getOAuthClientUrl()); } @Override @@ -694,4 +703,51 @@ public class BraveNewTabPageLayout extends NewTabPageLayout { showWidgets(); } }; + + private BinanceObserver mBinanaceObserver = new BinanceObserver() { + @Override + public void OnGetAccessToken(boolean isSuccess) { + Log.e("NTP", "OnGetAccessToken : "+ isSuccess); + NTPWidgetManager.getInstance().setUserAuthenticationForBinance(isSuccess); + if(isSuccess) { + mBinanceNativeWorker.getAccountBalances(); + } + }; + + @Override + public void OnGetAccountBalances(String jsonBalances, boolean isSuccess) { + if(!isSuccess) { + NTPWidgetManager.getInstance().setUserAuthenticationForBinance(isSuccess); + } + Log.e("NTP", "AccountBalances : "+ jsonBalances); + // Reset binance widget to connect page + + mBinanceNativeWorker.getCoinNetworks(); + mBinanceNativeWorker.getConvertAssets(); + }; + + @Override + public void OnGetConvertQuote(String quoteId, String quotePrice, String totalFee, String totalAmount) { + + }; + + @Override + public void OnGetCoinNetworks(String jsonNetworks) { + Log.e("NTP", "CoinNetworks : "+ jsonNetworks); + }; + + @Override + public void OnGetDepositInfo(String depositAddress, String depositeTag, boolean isSuccess) {}; + + @Override + public void OnConfirmConvert(boolean isSuccess, String message) {}; + + @Override + public void OnGetConvertAssets(String jsonAssets) { + Log.e("NTP", "ConvertAssets : "+ jsonAssets); + }; + + @Override + public void OnRevokeToken(boolean isSuccess) {}; + }; } diff --git a/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetManager.java b/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetManager.java index db2d28c769d..cf4646ebead 100644 --- a/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetManager.java +++ b/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetManager.java @@ -22,6 +22,7 @@ public class NTPWidgetManager { public static final String PREF_BRAVE_REWARDS = "brave_rewards"; public static final String PREF_BINANCE = "binance"; public static final String PREF_NTP_WIDGET_ORDER = "ntp_widget_order"; + public static final String PREF_BINANCE_USER_AUTHENTICATION = "binance_user_authentication"; private static NTPWidgetManager sInstance; @@ -69,4 +70,14 @@ public class NTPWidgetManager { sharedPreferencesEditor.putInt(PREF_NTP_WIDGET_ORDER, position); sharedPreferencesEditor.apply(); } + + public boolean isUserAuthenticatedForBinance() { + return mSharedPreferences.getBoolean(PREF_BINANCE_USER_AUTHENTICATION, false); + } + + public void setUserAuthenticationForBinance(boolean isAuthenticated) { + SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit(); + sharedPreferencesEditor.putBoolean(PREF_BINANCE_USER_AUTHENTICATION, isAuthenticated); + sharedPreferencesEditor.apply(); + } } \ No newline at end of file diff --git a/android/java/org/chromium/chrome/browser/BinanceActivity.java b/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceActivity.java similarity index 86% rename from android/java/org/chromium/chrome/browser/BinanceActivity.java rename to android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceActivity.java index 656b7f3150d..0f976a51b0c 100644 --- a/android/java/org/chromium/chrome/browser/BinanceActivity.java +++ b/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceActivity.java @@ -5,7 +5,7 @@ * You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.chromium.chrome.browser; +package org.chromium.chrome.browser.widget.crypto.binance; import android.os.Bundle; @@ -16,6 +16,7 @@ import org.chromium.base.Log; import androidx.appcompat.app.AppCompatActivity; import org.chromium.chrome.browser.util.TabUtils; +import org.chromium.chrome.browser.widget.crypto.binance.BinanceNativeWorker; import org.chromium.components.embedder_support.util.UrlConstants; import java.util.List; @@ -44,6 +45,8 @@ public class BinanceActivity extends AppCompatActivity { if (!TextUtils.isEmpty(code)) { Log.e("NTP", "Code : " + code); TabUtils.openUrlInSameTab(UrlConstants.NTP_URL); + BinanceNativeWorker.getInstance().setAuthToken(code); + BinanceNativeWorker.getInstance().getAccessToken(); finish(); } } diff --git a/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceNativeWorker.java b/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceNativeWorker.java index 59eeced30cc..e6eca296a32 100644 --- a/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceNativeWorker.java +++ b/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceNativeWorker.java @@ -10,12 +10,19 @@ package org.chromium.chrome.browser.widget.crypto.binance; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; +import org.chromium.chrome.browser.widget.crypto.binance.BinanceObserver; + +import java.util.List; +import java.util.ArrayList; + @JNINamespace("chrome::android") public class BinanceNativeWorker { private long mNativeBinanceNativeWorker; private static final Object lock = new Object(); private static BinanceNativeWorker instance; + private List mObservers; + public static BinanceNativeWorker getInstance() { synchronized (lock) { if (instance == null) { @@ -27,7 +34,7 @@ public class BinanceNativeWorker { } private BinanceNativeWorker() { - // mObservers = new ArrayList(); + mObservers = new ArrayList(); // mFrontTabPublisherObservers = new ArrayList(); } @@ -49,6 +56,24 @@ public class BinanceNativeWorker { } } + public void AddObserver(BinanceObserver observer) { + synchronized (lock) { + mObservers.add(observer); + } + } + + public void RemoveObserver(BinanceObserver observer) { + synchronized (lock) { + mObservers.remove(observer); + } + } + + public void getAccessToken() { + synchronized (lock) { + nativeGetAccessToken(mNativeBinanceNativeWorker); + } + } + @CalledByNative private void setNativePtr(long nativePtr) { assert mNativeBinanceNativeWorker == 0; @@ -56,35 +81,108 @@ public class BinanceNativeWorker { } @CalledByNative - public void OnGetAccessToken(boolean isSuccess) {} + public void OnGetAccessToken(boolean isSuccess) { + for (BinanceObserver observer : mObservers) { + observer.OnGetAccessToken(isSuccess); + } + } @CalledByNative - public void OnGetAccountBalances(String jsonBalances, boolean isSuccess) {} + public void OnGetAccountBalances(String jsonBalances, boolean isSuccess) { + for (BinanceObserver observer : mObservers) { + observer.OnGetAccountBalances(jsonBalances, isSuccess); + } + } @CalledByNative public void OnGetConvertQuote( - String quoteId, String quotePrice, String totalFee, String totalAmount) {} + String quoteId, String quotePrice, String totalFee, String totalAmount) { + for (BinanceObserver observer : mObservers) { + observer.OnGetConvertQuote(quoteId, quotePrice, totalFee, totalAmount); + } + } @CalledByNative - public void OnGetCoinNetworks(String jsonNetworks) {} + public void OnGetCoinNetworks(String jsonNetworks) { + for (BinanceObserver observer : mObservers) { + observer.OnGetCoinNetworks(jsonNetworks); + } + } @CalledByNative - public void OnGetDepositInfo(String depositAddress, String depositeTag, boolean isSuccess) {} + public void OnGetDepositInfo(String depositAddress, String depositeTag, boolean isSuccess) { + for (BinanceObserver observer : mObservers) { + observer.OnGetDepositInfo(depositAddress, depositeTag, isSuccess); + } + } @CalledByNative - public void OnConfirmConvert(boolean isSuccess, String message) {} + public void OnConfirmConvert(boolean isSuccess, String message) { + for (BinanceObserver observer : mObservers) { + observer.OnConfirmConvert(isSuccess, message); + } + } @CalledByNative - public void OnGetConvertAssets(String jsonAssets) {} + public void OnGetConvertAssets(String jsonAssets) { + for (BinanceObserver observer : mObservers) { + observer.OnGetConvertAssets(jsonAssets); + } + } @CalledByNative - public void OnRevokeToken(boolean isSuccess) {} + public void OnRevokeToken(boolean isSuccess) { + for (BinanceObserver observer : mObservers) { + observer.OnRevokeToken(isSuccess); + } + } public String getOAuthClientUrl() { return nativeGetOAuthClientUrl(mNativeBinanceNativeWorker); } + public void setAuthToken(String authToken) { + nativeSetAuthToken(mNativeBinanceNativeWorker, authToken); + } + + public void getAccountBalances() { + nativeGetAccountBalances(mNativeBinanceNativeWorker); + } + + public void getConvertQuote(String from, String to, String amount) { + nativeGetConvertQuote(mNativeBinanceNativeWorker, from, to, amount); + } + + public void getCoinNetworks() { + nativeGetCoinNetworks(mNativeBinanceNativeWorker); + } + + public void getDepositInfo(String symbol, String tickerNetwork) { + nativeGetDepositInfo(mNativeBinanceNativeWorker, symbol, tickerNetwork); + } + + public void confirmConvert(String quoteId) { + nativeConfirmConvert(mNativeBinanceNativeWorker, quoteId); + } + + public void getConvertAssets() { + nativeGetConvertAssets(mNativeBinanceNativeWorker); + } + + public void revokeToken() { + nativeRevokeToken(mNativeBinanceNativeWorker); + } + private native void nativeInit(); private native void nativeDestroy(long nativeBinanceNativeWorker); private native String nativeGetOAuthClientUrl(long nativeBinanceNativeWorker); + private native void nativeGetAccessToken(long nativeBinanceNativeWorker); + private native void nativeSetAuthToken(long nativeBinanceNativeWorker, String authToken); + private native void nativeGetAccountBalances(long nativeBinanceNativeWorker); + private native void nativeGetConvertQuote(long nativeBinanceNativeWorker, String from, String to, String amount); + private native void nativeGetCoinNetworks(long nativeBinanceNativeWorker); + private native void nativeGetDepositInfo(long nativeBinanceNativeWorker, String symbol, String tickerNetwork); + private native void nativeConfirmConvert(long nativeBinanceNativeWorker, String quoteId); + private native void nativeGetConvertAssets(long nativeBinanceNativeWorker); + private native void nativeRevokeToken(long nativeBinanceNativeWorker); } \ No newline at end of file diff --git a/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceObserver.java b/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceObserver.java new file mode 100644 index 00000000000..b359a6c873e --- /dev/null +++ b/android/java/org/chromium/chrome/browser/widget/crypto/binance/BinanceObserver.java @@ -0,0 +1,16 @@ +/* Copyright (c) 2019 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 http://mozilla.org/MPL/2.0/. */ +package org.chromium.chrome.browser.widget.crypto.binance; + +public interface BinanceObserver { + default public void OnGetAccessToken(boolean isSuccess) {}; + default public void OnGetAccountBalances(String jsonBalances, boolean isSuccess) {}; + default public void OnGetConvertQuote(String quoteId, String quotePrice, String totalFee, String totalAmount) {}; + default public void OnGetCoinNetworks(String jsonNetworks) {}; + default public void OnGetDepositInfo(String depositAddress, String depositeTag, boolean isSuccess) {}; + default public void OnConfirmConvert(boolean isSuccess, String message) {}; + default public void OnGetConvertAssets(String jsonAssets) {}; + default public void OnRevokeToken(boolean isSuccess) {}; +} \ No newline at end of file diff --git a/browser/binance/android/binance_native_worker.cc b/browser/binance/android/binance_native_worker.cc index 3eb979a935d..a934e91fc23 100644 --- a/browser/binance/android/binance_native_worker.cc +++ b/browser/binance/android/binance_native_worker.cc @@ -245,6 +245,14 @@ void BinanceNativeWorker::OnRevokeToken(bool success) { env, weak_java_binance_native_worker_.get(env), success); } +void BinanceNativeWorker::SetAuthToken(JNIEnv* env, + const base::android::JavaParamRef& jcaller, + const base::android::JavaParamRef& auth_token) { + if (binance_service_) { + binance_service_->SetAuthToken(base::android::ConvertJavaStringToUTF8(env, auth_token)); + } +} + static void JNI_BinanceNativeWorker_Init( JNIEnv* env, const base::android::JavaParamRef& jcaller) { diff --git a/browser/binance/android/binance_native_worker.h b/browser/binance/android/binance_native_worker.h index 1b80f025283..ee13dc184da 100644 --- a/browser/binance/android/binance_native_worker.h +++ b/browser/binance/android/binance_native_worker.h @@ -90,6 +90,10 @@ class BinanceNativeWorker { void OnRevokeToken(bool success); + void SetAuthToken(JNIEnv* env, + const base::android::JavaParamRef& jcaller, + const base::android::JavaParamRef& auth_token); + private: std::string StdStrStrMapToJsonString( const std::map& args);