diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni index 2632450574f..e5386a3611b 100644 --- a/android/brave_java_resources.gni +++ b/android/brave_java_resources.gni @@ -65,6 +65,7 @@ brave_java_resources = [ "java/res/drawable/enable_rewards_button.xml", "java/res/drawable/shields_tooltip_background.xml", "java/res/drawable/ic_yahoo.xml", + "java/res/drawable/sync_icon.xml", "java/res/drawable-hdpi/check.png", "java/res/drawable-hdpi/btn_bookmark.png", "java/res/drawable-hdpi/arrow_forward.png", diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index c138b6b6005..65ef094cc2f 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -31,7 +31,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/BraveRewardsSiteBannerActivity.java", "../../brave/android/java/org/chromium/chrome/browser/BraveRewardsUserWalletActivity.java", "../../brave/android/java/org/chromium/chrome/browser/BraveRewardsVerifyWalletActivity.java", - "../../brave/android/java/org/chromium/chrome/browser/BraveSyncWorkerHolder.java", + "../../brave/android/java/org/chromium/chrome/browser/BraveSyncReflectionUtils.java", "../../brave/android/java/org/chromium/chrome/browser/appmenu/BraveTabbedAppMenuPropertiesDelegate.java", "../../brave/android/java/org/chromium/chrome/browser/document/BraveLauncherActivity.java", "../../brave/android/java/org/chromium/chrome/browser/externalnav/BraveExternalNavigationHandler.java", @@ -123,6 +123,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/toolbar/bottom/BraveSearchAccelerator.java", "../../brave/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayout.java", "../../brave/android/java/org/chromium/chrome/browser/ui/brave_tricks/checkbox_to_switch/CheckBoxPreference.java", + "../../brave/android/java/org/chromium/chrome/browser/ui/messages/infobar/BraveSimpleConfirmInfoBarBuilder.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/BraveUpgradeJobIntentService.java", "../../brave/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java", @@ -161,6 +162,7 @@ if (enable_feed_in_chrome) { if (enable_brave_sync) { brave_java_sources += [ + "../../brave/android/java/org/chromium/chrome/browser/BraveSyncInformers.java", "../../brave/android/java/org/chromium/chrome/browser/BraveSyncWorker.java", "../../brave/android/java/org/chromium/chrome/browser/settings/BraveSyncScreensPreference.java", "../../brave/android/java/org/chromium/chrome/browser/sync/BraveSyncDevices.java", diff --git a/android/java/org/chromium/chrome/browser/BraveActivity.java b/android/java/org/chromium/chrome/browser/BraveActivity.java index 5c1af9f00b9..48881b6e4fa 100644 --- a/android/java/org/chromium/chrome/browser/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/BraveActivity.java @@ -33,7 +33,7 @@ import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveHelper; -import org.chromium.chrome.browser.BraveSyncWorkerHolder; +import org.chromium.chrome.browser.BraveSyncReflectionUtils; import org.chromium.chrome.browser.bookmarks.BookmarkBridge; import org.chromium.chrome.browser.bookmarks.BookmarkModel; import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent; @@ -210,7 +210,7 @@ public abstract class BraveActivity extends C Context app = ContextUtils.getApplicationContext(); if (null != app && (this instanceof ChromeTabbedActivity)) { // Trigger BraveSyncWorker CTOR to make migration from sync v1 if sync is enabled - BraveSyncWorkerHolder.get(); + BraveSyncReflectionUtils.getSyncWorker(); } if (!RateUtils.getInstance(this).getPrefRateEnabled()) { @@ -221,7 +221,7 @@ public abstract class BraveActivity extends C if (RateUtils.getInstance(this).shouldShowRateDialog()) showBraveRateDialog(); - if (PackageUtils.isFirstInstall(this) + if (PackageUtils.isFirstInstall(this) && SharedPreferencesManager.getInstance().readInt(BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) == 1) { Calendar calender = Calendar.getInstance(); calender.setTime(new Date()); @@ -255,6 +255,7 @@ public abstract class BraveActivity extends C showCrossPromotionalDialog(); OnboardingPrefManager.getInstance().setCrossPromoModalShown(true); } + BraveSyncReflectionUtils.showInformers(); } private void createNotificationChannel() { diff --git a/android/java/org/chromium/chrome/browser/BraveSyncInformers.java b/android/java/org/chromium/chrome/browser/BraveSyncInformers.java new file mode 100644 index 00000000000..e4d522d1c9c --- /dev/null +++ b/android/java/org/chromium/chrome/browser/BraveSyncInformers.java @@ -0,0 +1,99 @@ +/* Copyright (c) 2020 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; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; + +import org.chromium.base.ContextUtils; +import org.chromium.base.ApplicationStatus; +import org.chromium.base.Log; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.BraveActivity; +import org.chromium.chrome.browser.BraveSyncWorker; +import org.chromium.chrome.browser.infobar.InfoBarIdentifier; +import org.chromium.chrome.browser.preferences.BravePref; +import org.chromium.chrome.browser.preferences.BravePrefServiceBridge; +import org.chromium.chrome.browser.settings.BraveSyncScreensPreference; +import org.chromium.chrome.browser.settings.SettingsLauncher; +import org.chromium.chrome.browser.settings.SettingsLauncherImpl; +import org.chromium.chrome.browser.sync.ProfileSyncService; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.ui.messages.infobar.BraveSimpleConfirmInfoBarBuilder; +import org.chromium.chrome.browser.ui.messages.infobar.SimpleConfirmInfoBarBuilder; + +public class BraveSyncInformers { + public static void show() { + showSetupV2IfRequired(); + } + + private static void showSetupV2IfRequired() { + if (null == BraveSyncReflectionUtils.getSyncWorker()) return; + + BraveSyncWorker braveSyncWorker = (BraveSyncWorker)BraveSyncReflectionUtils.getSyncWorker(); + boolean wasV1User = braveSyncWorker.getSyncV1WasEnabled(); + if (!wasV1User) { + return; + } + + boolean infobarDismissed = braveSyncWorker.getSyncV2MigrateNoticeDismissed(); + if (infobarDismissed) { + return; + } + + boolean isV2User = ProfileSyncService.get() != null && ProfileSyncService.get().isFirstSetupComplete(); + if (isV2User) { + braveSyncWorker.setSyncV2MigrateNoticeDismissed(true); + return; + } + + showSyncV2NeedsSetup(); + } + + public static void showSyncV2NeedsSetup() { + BraveActivity activity = BraveActivity.getBraveActivity(); + if (activity == null) return; + + Tab tab = activity.getActivityTabProvider().get(); + if (tab == null) return; + + BraveSimpleConfirmInfoBarBuilder.createInfobarWithDrawable(tab.getWebContents(), + new SimpleConfirmInfoBarBuilder.Listener() { + @Override + public void onInfoBarDismissed() { + } + + @Override + public boolean onInfoBarButtonClicked(boolean isPrimary) { + if (isPrimary) { + SettingsLauncher settingsLauncher = new SettingsLauncherImpl(); + settingsLauncher.launchSettingsActivity( + ContextUtils.getApplicationContext(), + BraveSyncScreensPreference.class); + } + return false; + } + + @Override + public boolean onInfoBarLinkClicked() { + return false; + } + }, + // must be SYNC_V2_MIGRATE_INFOBAR_DELEGATE, but now it is introduced through + // src/brave/chromium_src/components/infobars/core/infobar_delegate.h and + // java enums are generated by //components/infobars/core:infobar_generated_enums + // who does not understand `brave/chromium_src` + InfoBarIdentifier.INLINE_UPDATE_READY_INFOBAR_ANDROID, + activity, + R.drawable.sync_icon /* drawableId */, + activity.getString(R.string.brave_sync_v2_migrate_infobar_message) /* message */, + activity.getString(R.string.brave_sync_v2_migrate_infobar_command) /* primaryText */, + null /* secondaryText */, null /* linkText */, false /* autoExpire */); + BraveSyncWorker braveSyncWorker = (BraveSyncWorker)BraveSyncReflectionUtils.getSyncWorker(); + braveSyncWorker.setSyncV2MigrateNoticeDismissed(true); + } +} diff --git a/android/java/org/chromium/chrome/browser/BraveSyncReflectionUtils.java b/android/java/org/chromium/chrome/browser/BraveSyncReflectionUtils.java new file mode 100644 index 00000000000..7ce83d9b44d --- /dev/null +++ b/android/java/org/chromium/chrome/browser/BraveSyncReflectionUtils.java @@ -0,0 +1,121 @@ +/* Copyright (c) 2020 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; + +import java.lang.reflect.Method; + +import org.chromium.base.Log; +import org.chromium.base.ThreadUtils; +import org.chromium.chrome.browser.BraveConfig; + +// The purpose of this class is to hide BraveSyncWorker object under `enable_brave_sync` +// and create it without explict import +public class BraveSyncReflectionUtils { + + private static Object sBraveSyncWorker = null; + private static boolean sInitialized = false; + private static String TAG = "SYNC"; + + public static Object getSyncWorker() { + // May be invoked in non-UI thread when we do validation for camera QR in callback + if (!sInitialized) { + if (BraveConfig.SYNC_ENABLED) { + try { + sBraveSyncWorker = + Class.forName("org.chromium.chrome.browser.BraveSyncWorker") + .getConstructor() + .newInstance(); + } catch (Exception e) { + Log.e(TAG, "Cannot create BraveSyncWorker ", e); + } + } + sInitialized = true; + } + return sBraveSyncWorker; + } + + public static void showInformers() { +Log.e(TAG, "showInformers 000"); + if (!BraveConfig.SYNC_ENABLED) { +Log.e(TAG, "showInformers !BraveConfig.SYNC_ENABLED"); + return; + } +Log.e(TAG, "showInformers will show"); + try { + Method method = Class.forName("org.chromium.chrome.browser.BraveSyncInformers").getDeclaredMethod("show"); + method.invoke(null); + } catch (Exception e) { + Log.e(TAG, "Cannot show sync informers with reflection ", e); + } + } + + // public static boolean isSyncEnabledThroughConfig() { + // if (BraveConfig.SYNC_ENABLED) { + // return true; + // } else { + // return false; + // } + // } + +// public static boolean getSyncV1WasEnabled() { +// Log.e(TAG, "BraveSyncWorkerHolder.getSyncV1WasEnabled 000++"); +// Object braveSyncWorker = get(); +// Log.e(TAG, "BraveSyncWorkerHolder.getSyncV1WasEnabled braveSyncWorker="+braveSyncWorker); +// if (braveSyncWorker == null) return false; +// +// // Class c = braveSyncWorker.getClass(); +// // Log.e(TAG, "BraveSyncWorkerHolder.getSyncV1WasEnabled c.getName()="+c.getName()); +// // Method[] allMethods = c.getDeclaredMethods(); +// // for (Method m : allMethods) { +// // Log.e(TAG, "BraveSyncWorkerHolder.getSyncV1WasEnabled m.getName()="+m.getName()); +// // } +// // +// // Log.e(TAG, "BraveSyncWorkerHolder.getSyncV1WasEnabled---------------"); +// // allMethods = c.getMethods(); +// // for (Method m : allMethods) { +// // Log.e(TAG, "BraveSyncWorkerHolder.getSyncV1WasEnabled getMethods m.getName()="+m.getName()); +// // } +// +// try { +// java.lang.reflect.Method method = braveSyncWorker.getClass().getDeclaredMethod("getSyncV1WasEnabled"); +// Object ret = method.invoke(braveSyncWorker); +// return (boolean)ret; +// } catch (Exception e) { +// Log.e(TAG, "Cannot make call with reflection ", e); +// } +// return false; +// } +// +// public static boolean getSyncV2MigrateNoticeDismissed() { +// Log.e(TAG, "BraveSyncWorkerHolder.getSyncV2MigrateNoticeDismissed 000"); +// Object braveSyncWorker = get(); +// if (braveSyncWorker == null) return false; +// +// java.lang.reflect.Method method; +// try { +// method = braveSyncWorker.getClass().getMethod("getSyncV2MigrateNoticeDismissed"); +// Object ret = method.invoke(braveSyncWorker); +// return (boolean)ret; +// } catch (Exception e) { +// Log.e(TAG, "Cannot make call with reflection ", e); +// } +// return false; +// } +// +// public static void setSyncV2MigrateNoticeDismissed(boolean isDismissed) { +// Log.e(TAG, "BraveSyncWorkerHolder.setSyncV2MigrateNoticeDismissed 000 isDismissed="+isDismissed); +// Object braveSyncWorker = get(); +// if (braveSyncWorker == null) return; +// +// java.lang.reflect.Method method; +// try { +// method = braveSyncWorker.getClass().getMethod("setSyncV2MigrateNoticeDismissed", boolean.class); +// method.invoke(braveSyncWorker, isDismissed); +// } catch (Exception e) { +// Log.e(TAG, "Cannot make call with reflection ", e); +// } +// } +} diff --git a/android/java/org/chromium/chrome/browser/BraveSyncWorker.java b/android/java/org/chromium/chrome/browser/BraveSyncWorker.java index 8096f35e95f..769d1ff164e 100644 --- a/android/java/org/chromium/chrome/browser/BraveSyncWorker.java +++ b/android/java/org/chromium/chrome/browser/BraveSyncWorker.java @@ -111,6 +111,7 @@ public class BraveSyncWorker { @Override public void run() { nativeMarkSyncV1WasEnabledAndMigrated(); + BraveSyncInformers.show(); } }); } @@ -150,6 +151,18 @@ public class BraveSyncWorker { return nativeResetSync(mNativeBraveSyncWorker); } + public boolean getSyncV1WasEnabled() { + return nativeGetSyncV1WasEnabled(mNativeBraveSyncWorker); + } + + public boolean getSyncV2MigrateNoticeDismissed() { + return nativeGetSyncV2MigrateNoticeDismissed(mNativeBraveSyncWorker); + } + + public void setSyncV2MigrateNoticeDismissed(boolean isDismissed) { + nativeSetSyncV2MigrateNoticeDismissed(mNativeBraveSyncWorker, isDismissed); + } + private native void nativeInit(); private native void nativeDestroy(long nativeBraveSyncWorker); @@ -168,4 +181,8 @@ public class BraveSyncWorker { private native boolean nativeIsFirstSetupComplete(long nativeBraveSyncWorker); private native boolean nativeResetSync(long nativeBraveSyncWorker); + + private native boolean nativeGetSyncV1WasEnabled(long nativeBraveSyncWorker); + private native boolean nativeGetSyncV2MigrateNoticeDismissed(long nativeBraveSyncWorker); + private native void nativeSetSyncV2MigrateNoticeDismissed(long nativeBraveSyncWorker, boolean isDismissed); } diff --git a/android/java/org/chromium/chrome/browser/BraveSyncWorkerHolder.java b/android/java/org/chromium/chrome/browser/BraveSyncWorkerHolder.java deleted file mode 100644 index 71ea4b568ab..00000000000 --- a/android/java/org/chromium/chrome/browser/BraveSyncWorkerHolder.java +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2020 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; - -import java.lang.reflect.InvocationTargetException; - -import org.chromium.base.Log; -import org.chromium.base.ThreadUtils; -import org.chromium.chrome.browser.BraveConfig; - -// The purpose of this class is to hide BraveSyncWorker object under `enable_brave_sync` -// and create it without explict import -public class BraveSyncWorkerHolder { - - private static Object sBraveSyncWorker = null; - private static boolean sInitialized = false; - private static String TAG = "SYNC"; - - public static Object get() { - // May be invoked in non-UI thread when we do validation for camera QR in callback - if (!sInitialized) { - if (BraveConfig.SYNC_ENABLED) { - try { - sBraveSyncWorker = - Class.forName("org.chromium.chrome.browser.BraveSyncWorker") - .getConstructor() - .newInstance(); - } catch (ClassNotFoundException e) { - Log.e(TAG, "Cannot create BraveSyncWorker ClassNotFoundException", e); - } catch (NoSuchMethodException e) { - Log.e(TAG, "Cannot create BraveSyncWorker NoSuchMethodException", e); - } catch (IllegalAccessException e) { - Log.e(TAG, "Cannot create BraveSyncWorker IllegalAccessException", e); - } catch (InstantiationException e) { - Log.e(TAG, "Cannot create BraveSyncWorker InstantiationException", e); - } catch (InvocationTargetException e) { - Log.e(TAG, "Cannot create BraveSyncWorker InvocationTargetException", e); - } - } - sInitialized = true; - } - return sBraveSyncWorker; - } -} diff --git a/android/java/org/chromium/chrome/browser/settings/BraveSyncScreensPreference.java b/android/java/org/chromium/chrome/browser/settings/BraveSyncScreensPreference.java index d18689a2614..2248a9a0549 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveSyncScreensPreference.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveSyncScreensPreference.java @@ -72,7 +72,7 @@ import org.chromium.base.task.PostTask; import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveActivity; import org.chromium.chrome.browser.BraveSyncWorker; -import org.chromium.chrome.browser.BraveSyncWorkerHolder; +import org.chromium.chrome.browser.BraveSyncReflectionUtils; import org.chromium.chrome.browser.qrreader.BarcodeTracker; import org.chromium.chrome.browser.qrreader.BarcodeTrackerFactory; import org.chromium.chrome.browser.qrreader.CameraSource; @@ -163,7 +163,7 @@ public class BraveSyncScreensPreference extends BravePreferenceFragment private FrameLayout mLayoutLaptop; BraveSyncWorker getBraveSyncWorker() { - Object object = BraveSyncWorkerHolder.get(); + Object object = BraveSyncReflectionUtils.getSyncWorker(); if (object == null) { return null; } diff --git a/android/java/org/chromium/chrome/browser/ui/messages/infobar/BraveSimpleConfirmInfoBarBuilder.java b/android/java/org/chromium/chrome/browser/ui/messages/infobar/BraveSimpleConfirmInfoBarBuilder.java new file mode 100644 index 00000000000..c667ce6056b --- /dev/null +++ b/android/java/org/chromium/chrome/browser/ui/messages/infobar/BraveSimpleConfirmInfoBarBuilder.java @@ -0,0 +1,55 @@ +/* Copyright (c) 2020 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.ui.messages.infobar; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; + +import androidx.annotation.Nullable; +import androidx.annotation.Nullable; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.core.content.ContextCompat; + +import org.chromium.base.Log; +import org.chromium.chrome.browser.ui.messages.infobar.SimpleConfirmInfoBarBuilder; +import org.chromium.content_public.browser.WebContents; + +// This is subclass of SimpleConfirmInfoBarBuilder which allows to pass +// drawableId of vector drawable resource + +public class BraveSimpleConfirmInfoBarBuilder extends SimpleConfirmInfoBarBuilder { + public static void createInfobarWithDrawable(WebContents webContents, SimpleConfirmInfoBarBuilder.Listener listener, + int infobarTypeIdentifier, + Context context, int drawableId, String message, String primaryText, + String secondaryText, String linkText, boolean autoExpire) { + + Bitmap bitmap = null; + if (drawableId != 0 && context != null) { + bitmap = convertDrawableToBitmap(context, drawableId); + } + + SimpleConfirmInfoBarBuilderJni.get().create(webContents, infobarTypeIdentifier, bitmap, + message, primaryText, secondaryText, linkText, autoExpire, listener); + } + + @Nullable + public static Bitmap convertDrawableToBitmap(Context context, int drawableId) { + Drawable drawable = ContextCompat.getDrawable(context, drawableId); + if (drawable == null) { + return null; + } + drawable = DrawableCompat.wrap(drawable); + + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), + drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } +} diff --git a/android/java/proguard.flags b/android/java/proguard.flags index ef39801aff5..002efb66fbd 100644 --- a/android/java/proguard.flags +++ b/android/java/proguard.flags @@ -1,13 +1,5 @@ --keep public class org.chromium.chrome.browser.BraveSyncWorker$JsObject --keep public class * implements org.chromium.chrome.browser.BraveSyncWorker$JsObject --keepclassmembers class org.chromium.chrome.browser.BraveSyncWorker$JsObject { - ; -} --keep public class org.chromium.chrome.browser.BraveSyncWorker$JsObjectWordsToBytes --keep public class * implements org.chromium.chrome.browser.BraveSyncWorker$JsObjectWordsToBytes --keepclassmembers class org.chromium.chrome.browser.BraveSyncWorker$JsObjectWordsToBytes { - ; -} --keepattributes JavascriptInterface - -keep class com.google.android.material.bottomsheet.BottomSheetBehavior { *; } + +-keep class org.chromium.chrome.browser.BraveSyncWorker { *; } + +-keep class org.chromium.chrome.browser.BraveSyncInformers { *; } diff --git a/android/java/res/drawable/sync_icon.xml b/android/java/res/drawable/sync_icon.xml new file mode 100644 index 00000000000..508236b677f --- /dev/null +++ b/android/java/res/drawable/sync_icon.xml @@ -0,0 +1,13 @@ + + + + diff --git a/browser/android/brave_sync_worker.cc b/browser/android/brave_sync_worker.cc index e72026ecdd5..7b5e7c16ed2 100644 --- a/browser/android/brave_sync_worker.cc +++ b/browser/android/brave_sync_worker.cc @@ -237,6 +237,32 @@ bool BraveSyncWorker::ResetSync( return true; } +bool BraveSyncWorker::GetSyncV1WasEnabled( + JNIEnv* env, + const base::android::JavaParamRef& jcaller) { + brave_sync::Prefs brave_sync_prefs(profile_->GetPrefs()); + bool sync_v1_was_enabled = brave_sync_prefs.IsSyncV1Enabled(); + return sync_v1_was_enabled; +} + +bool BraveSyncWorker::GetSyncV2MigrateNoticeDismissed( + JNIEnv* env, + const base::android::JavaParamRef& jcaller) { + brave_sync::Prefs brave_sync_prefs(profile_->GetPrefs()); + bool sync_v2_migration_notice_dismissed = + brave_sync_prefs.IsSyncMigrateNoticeDismissed(); + return sync_v2_migration_notice_dismissed; +} + +void BraveSyncWorker::SetSyncV2MigrateNoticeDismissed( + JNIEnv* env, + const base::android::JavaParamRef& jcaller, + bool sync_v2_migration_notice_dismissed) { + brave_sync::Prefs brave_sync_prefs(profile_->GetPrefs()); + brave_sync_prefs.SetDismissSyncMigrateNotice( + sync_v2_migration_notice_dismissed); +} + void BraveSyncWorker::OnSelfDeleted() { syncer::SyncService* sync_service = GetSyncService(); if (sync_service) { diff --git a/browser/android/brave_sync_worker.h b/browser/android/brave_sync_worker.h index e3faf216784..8c65ce56bbd 100644 --- a/browser/android/brave_sync_worker.h +++ b/browser/android/brave_sync_worker.h @@ -54,6 +54,18 @@ class BraveSyncWorker : public syncer::SyncServiceObserver { bool ResetSync(JNIEnv* env, const base::android::JavaParamRef& jcaller); + bool GetSyncV1WasEnabled(JNIEnv* env, + const base::android::JavaParamRef& jcaller); + + bool GetSyncV2MigrateNoticeDismissed( + JNIEnv* env, + const base::android::JavaParamRef& jcaller); + + void SetSyncV2MigrateNoticeDismissed( + JNIEnv* env, + const base::android::JavaParamRef& jcaller, + bool sync_v2_migration_notice_dismissed); + private: syncer::SyncService* GetSyncService() const; syncer::DeviceInfoTracker* GetDeviceInfoTracker() const; diff --git a/browser/android/preferences/brave_prefs.h b/browser/android/preferences/brave_prefs.h index 06e99fde9a1..08d6d2221a9 100644 --- a/browser/android/preferences/brave_prefs.h +++ b/browser/android/preferences/brave_prefs.h @@ -8,6 +8,7 @@ #include #include "brave/common/pref_names.h" +#include "brave/components/brave_sync/brave_sync_prefs.h" #include "brave/components/brave_rewards/common/pref_names.h" #include "brave/components/ntp_background_images/common/pref_names.h" #include "build/build_config.h" @@ -33,7 +34,7 @@ const char* const kBravePrefsExposedToJava[] = { ntp_background_images::prefs::kNewTabPageShowBackgroundImage, kTopSiteSuggestionsEnabled, kBraveSuggestedSiteSuggestionsEnabled, - brave_rewards::prefs::kBraveRewardsEnabled + brave_rewards::prefs::kBraveRewardsEnabled, }; static const int kBravePrefOffset = 10000; diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index ccf08e5d74e..e563948f976 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -815,6 +815,13 @@ until they verify, or until 90 days have passed. Create a bookmark + + + Brave Sync has been upgraded and requires setup + + + Begin Setup + Sync could not be setup