Skip to content

Commit

Permalink
import export bookmarks android
Browse files Browse the repository at this point in the history
  • Loading branch information
tapanmodh committed May 10, 2023
1 parent 714f5b2 commit d4cfc48
Show file tree
Hide file tree
Showing 47 changed files with 1,460 additions and 12 deletions.
4 changes: 4 additions & 0 deletions android/brave_java_resources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,8 @@ brave_java_resources = [
"java/res/drawable/ic_bell_icon.xml",
"java/res/drawable/ic_bg.xml",
"java/res/drawable/ic_bg_video_playback.xml",
"java/res/drawable/ic_bookmark_import_export_failed.xml",
"java/res/drawable/ic_bookmark_import_export_success.xml",
"java/res/drawable/ic_bookmark_menu_add.xml",
"java/res/drawable/ic_bookmark_menu_delete.xml",
"java/res/drawable/ic_bookmark_menu_edit.xml",
Expand Down Expand Up @@ -694,6 +696,7 @@ brave_java_resources = [
"java/res/drawable/rewards_tipping_radio_button_selector.xml",
"java/res/drawable/rounded_8_bottom_bg.xml",
"java/res/drawable/rounded_8_top_bg.xml",
"java/res/drawable/rounded_bookmark_import_export_dialog_bg.xml",
"java/res/drawable/rounded_corners.xml",
"java/res/drawable/rounded_dark_bg_alpha.xml",
"java/res/drawable/rounded_dot_error_status.xml",
Expand Down Expand Up @@ -861,6 +864,7 @@ brave_java_resources = [
"java/res/layout/fragment_add_token.xml",
"java/res/layout/fragment_backup_wallet.xml",
"java/res/layout/fragment_brave_ads_onboarding.xml",
"java/res/layout/fragment_brave_bookmark_import_export_dialog.xml",
"java/res/layout/fragment_brave_location_bar_qr_dialog.xml",
"java/res/layout/fragment_brave_rewards_onboarding.xml",
"java/res/layout/fragment_brave_vpn_always_on_error_dialog.xml",
Expand Down
10 changes: 10 additions & 0 deletions android/brave_java_sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/app/BraveActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/app/appmenu/AppMenuIconRowFooter.java",
"../../brave/android/java/org/chromium/chrome/browser/app/appmenu/BraveAppMenuPropertiesDelegateImpl.java",
"../../brave/android/java/org/chromium/chrome/browser/app/bookmarks/BraveBookmarkActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/app/domain/BuyModel.java",
"../../brave/android/java/org/chromium/chrome/browser/app/domain/CryptoModel.java",
"../../brave/android/java/org/chromium/chrome/browser/app/domain/CryptoSharedActions.java",
Expand All @@ -65,6 +66,15 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/app/helpers/ImageLoader.java",
"../../brave/android/java/org/chromium/chrome/browser/appmenu/BraveTabbedAppMenuPropertiesDelegate.java",
"../../brave/android/java/org/chromium/chrome/browser/autofill/BraveAutofillPopupBridge.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkBridge.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkDelegate.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkImportExportDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkManagerCoordinator.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkManagerMediator.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkModel.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkPage.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkToolbar.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkToolbarCoordinator.java",
"../../brave/android/java/org/chromium/chrome/browser/bookmarks/BraveBookmarkUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/brave_news/BraveNewsAdapterFeedCard.java",
"../../brave/android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment.java",
Expand Down
7 changes: 7 additions & 0 deletions android/java/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,13 @@
android:exported="false">
</activity>

<activity
android:name="org.chromium.chrome.browser.app.bookmarks.BraveBookmarkActivity"
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"/>

<meta-data
android:name="com.google.android.play.billingclient.version"
android:value="4.0.0" />
Expand Down
70 changes: 70 additions & 0 deletions android/java/apk_for_test.flags
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,15 @@
-keep class org.chromium.brave_wallet.mojom.NetworkInfo { *; }

-keep class org.chromium.chrome.browser.bookmarks.BookmarkBridge {
*** mNativeBookmarkBridge;
*** extensiveBookmarkChangesBeginning(...);
*** extensiveBookmarkChangesEnded(...);
*** createBookmarkItem(...);
<init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkBridge {
<init>(...);
}

-keep class org.chromium.chrome.browser.LaunchIntentDispatcher {
Expand Down Expand Up @@ -205,10 +211,74 @@

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkUtils {
*** addOrEditBookmark(...);
*** showBookmarkManagerOnPhone(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkUtils {
*** addOrEditBookmark(...);
*** showBookmarkManagerOnPhone(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkToolbar {
public <init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkToolbar {
public <init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkToolbarCoordinator {
*** mToolbar;
<init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkToolbarCoordinator {
<init>(...);
}

-keep class org.chromium.chrome.browser.app.bookmarks.BookmarkActivity {
*** mBookmarkManagerCoordinator;
public <init>(...);
}

-keep class org.chromium.chrome.browser.app.bookmarks.BraveBookmarkActivity {
public <init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkManagerCoordinator {
*** mMediator;
public <init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkManagerCoordinator {
public <init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkManagerMediator {
*** mBookmarkModel;
*** mContext;
<init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkManagerMediator {
<init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkModel {
<init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkModel {
<init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BookmarkPage {
*** mBookmarkManagerCoordinator;
public <init>(...);
}

-keep class org.chromium.chrome.browser.bookmarks.BraveBookmarkPage {
public <init>(...);
}

-keep class org.chromium.chrome.browser.preferences.ChromePreferenceKeyChecker {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/* Copyright (c) 2023 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 https://mozilla.org/MPL/2.0/. */

package org.chromium.chrome.browser.app.bookmarks;

import android.content.Intent;
import android.os.Bundle;

import org.chromium.chrome.browser.bookmarks.BookmarkManagerCoordinator;
import org.chromium.chrome.browser.bookmarks.BraveBookmarkManagerCoordinator;
import org.chromium.ui.base.ActivityWindowAndroid;
import org.chromium.ui.base.IntentRequestTracker;

public class BraveBookmarkActivity extends BookmarkActivity {
// Overridden Chromium's BookmarkActivity.mBookmarkManagerCoordinator
private BookmarkManagerCoordinator mBookmarkManagerCoordinator;
private ActivityWindowAndroid mWindowAndroid;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

IntentRequestTracker intentRequestTracker = IntentRequestTracker.createFromActivity(this);
mWindowAndroid = new ActivityWindowAndroid(this, true, intentRequestTracker);
mWindowAndroid.getIntentRequestTracker().restoreInstanceState(savedInstanceState);
if (mBookmarkManagerCoordinator instanceof BraveBookmarkManagerCoordinator) {
((BraveBookmarkManagerCoordinator) mBookmarkManagerCoordinator)
.setWindow(mWindowAndroid);
}
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);

mWindowAndroid.getIntentRequestTracker().saveInstanceState(outState);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data);
}

@Override
public void onRequestPermissionsResult(
int requestCode, String[] permissions, int[] grantResults) {
if (mWindowAndroid.handlePermissionResult(requestCode, permissions, grantResults)) return;
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/* Copyright (c) 2023 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 https://mozilla.org/MPL/2.0/. */

package org.chromium.chrome.browser.bookmarks;

import androidx.appcompat.app.AppCompatActivity;

import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.ui.base.WindowAndroid;

class BraveBookmarkBridge extends BookmarkBridge {
// Overridden Chromium's BookmarkBridge.mNativeBookmarkBridge
private long mNativeBookmarkBridge;
private WindowAndroid mWindowAndroid;

BraveBookmarkBridge(long nativeBookmarkBridge) {
super(nativeBookmarkBridge);
}

@CalledByNative
public void bookmarksImported(boolean isSuccess) {
if (mWindowAndroid != null && mWindowAndroid.getContext().get() != null
&& mWindowAndroid.getContext().get() instanceof AppCompatActivity) {
((AppCompatActivity) mWindowAndroid.getContext().get()).runOnUiThread(new Runnable() {
@Override
public void run() {
BraveBookmarkUtils.showBookmarkImportExportDialog(
(AppCompatActivity) mWindowAndroid.getContext().get(), true, isSuccess);
}
});
}
}

@CalledByNative
public void bookmarksExported(boolean isSuccess) {
if (mWindowAndroid != null && mWindowAndroid.getContext().get() != null
&& mWindowAndroid.getContext().get() instanceof AppCompatActivity) {
((AppCompatActivity) mWindowAndroid.getContext().get()).runOnUiThread(new Runnable() {
@Override
public void run() {
BraveBookmarkUtils.showBookmarkImportExportDialog(
(AppCompatActivity) mWindowAndroid.getContext().get(), false,
isSuccess);
}
});
}
}

public void importBookmarks(WindowAndroid windowAndroid, String importFilePath) {
mWindowAndroid = windowAndroid;
BraveBookmarkBridgeJni.get().importBookmarks(
mNativeBookmarkBridge, BraveBookmarkBridge.this, windowAndroid, importFilePath);
}

public void exportBookmarks(WindowAndroid windowAndroid, String exportFilePath) {
mWindowAndroid = windowAndroid;
BraveBookmarkBridgeJni.get().exportBookmarks(
mNativeBookmarkBridge, BraveBookmarkBridge.this, windowAndroid, exportFilePath);
}

@NativeMethods
public interface Natives {
void importBookmarks(long nativeBraveBookmarkBridge, BraveBookmarkBridge caller,
WindowAndroid window, String importFilePath);
void exportBookmarks(long nativeBraveBookmarkBridge, BraveBookmarkBridge caller,
WindowAndroid window, String exportFilePath);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/* Copyright (c) 2023 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 https://mozilla.org/MPL/2.0/. */

package org.chromium.chrome.browser.bookmarks;

public interface BraveBookmarkDelegate extends BookmarkDelegate {
void importBookmarks();

void exportBookmarks();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/* Copyright (c) 2023 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 https://mozilla.org/MPL/2.0/. */

package org.chromium.chrome.browser.bookmarks;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.Nullable;

import org.chromium.chrome.R;
import org.chromium.chrome.browser.BraveDialogFragment;

public class BraveBookmarkImportExportDialogFragment
extends BraveDialogFragment implements View.OnClickListener {
private static final String IS_IMPORT = "is_import";
private static final String IS_SUCCESS = "is_success";

private boolean mIsImport;
private boolean mIsSuccess;

public static BraveBookmarkImportExportDialogFragment newInstance(
boolean isImport, boolean isSuccess) {
final BraveBookmarkImportExportDialogFragment fragment =
new BraveBookmarkImportExportDialogFragment();
final Bundle args = new Bundle();
args.putBoolean(IS_IMPORT, isImport);
args.putBoolean(IS_SUCCESS, isSuccess);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (getArguments() != null) {
mIsImport = getArguments().getBoolean(IS_IMPORT);
mIsSuccess = getArguments().getBoolean(IS_SUCCESS);
}
}

@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(
R.layout.fragment_brave_bookmark_import_export_dialog, container, false);

if (getDialog() != null && getDialog().getWindow() != null) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
}
return view;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
ImageView imageView = view.findViewById(R.id.imageView);
TextView tvDesc = view.findViewById(R.id.tv_bookmark_desc);

imageView.setImageResource(mIsSuccess ? R.drawable.ic_bookmark_import_export_success
: R.drawable.ic_bookmark_import_export_failed);

if (mIsImport) {
tvDesc.setText(mIsSuccess ? R.string.import_bookmarks_success
: R.string.import_bookmarks_failed);
} else {
tvDesc.setText(mIsSuccess ? R.string.export_bookmarks_success
: R.string.export_bookmarks_failed);
}
Button okBtn = view.findViewById(R.id.btn_ok);
okBtn.setOnClickListener(this);
}

@Override
public void onClick(View view) {
dismiss();
if (mIsImport) {
Activity activity = getActivity();
if (activity != null) {
activity.finish();
activity.overridePendingTransition(0, 0);
activity.startActivity(activity.getIntent());
activity.overridePendingTransition(0, 0);
}
}
}
}
Loading

0 comments on commit d4cfc48

Please sign in to comment.