create custom filters android

This commit is contained in:
tapanmodh
2023-10-30 12:59:35 +05:30
parent 946979dd49
commit 6207573cc3
12 changed files with 361 additions and 69 deletions
+2
View File
@@ -414,6 +414,7 @@ brave_java_resources = [
"java/res/drawable/circle_shimmer.xml",
"java/res/drawable/circular_progress.xml",
"java/res/drawable/country_spinner_background.xml",
"java/res/drawable/create_custom_filter_edit_bg.xml",
"java/res/drawable/crypto_wallet_blue_button.xml",
"java/res/drawable/crypto_wallet_hollow_button.xml",
"java/res/drawable/crypto_wallet_negative_button.xml",
@@ -878,6 +879,7 @@ brave_java_resources = [
"java/res/layout/fragment_content_filtering.xml",
"java/res/layout/fragment_create_account.xml",
"java/res/layout/fragment_create_account.xml",
"java/res/layout/fragment_create_custom_filters.xml",
"java/res/layout/fragment_cross_promotional_modal_dialog.xml",
"java/res/layout/fragment_dapps_message.xml",
"java/res/layout/fragment_dormant_users_engagement_dialog.xml",
+1
View File
@@ -399,6 +399,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/shields/ContentFilteringAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/shields/ContentFilteringFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/shields/CreateCustomFiltersFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/shields/FilterListServiceFactory.java",
"../../brave/android/java/org/chromium/chrome/browser/shields/UrlSanitizerServiceFactory.java",
"../../brave/android/java/org/chromium/chrome/browser/signin/BraveSigninManager.java",
@@ -6,8 +6,13 @@
package org.chromium.chrome.browser.shields;
public interface BraveContentFilteringListener {
public void onAddCustomFiltering();
public void onCustomFilterToggle(int position, boolean isEnable);
public void onCustomFilterDelete(int position);
public void onDefaultFilterToggle(String uuid, boolean isEnable);
public void onAddSubscriptionFilter();
public void onSubscriptionFilterToggle(int position, boolean isEnable);
public void onSubscriptionFilterDelete(int position);
public void onFilterToggle(String uuid, boolean isEnable);
public void onCustomFilters();
}
@@ -33,9 +33,10 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
private static final int ONE_ITEM_SPACE = 1;
private static final int TWO_ITEMS_SPACE = 2;
private static final int THREE_ITEMS_SPACE = 3;
private static final int FOUR_ITEMS_SPACE = 4;
private BraveContentFilteringListener mBraveContentFileringListener;
private ArrayList<SubscriptionInfo> mCustomFilterLists;
private ArrayList<SubscriptionInfo> mSubscriptionFilterLists;
private Value mFilterLists[];
private Context mContext;
private boolean mIsEdit;
@@ -63,8 +64,15 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
CustomFilterListViewHolder customFilterListViewHolder =
(CustomFilterListViewHolder) holder;
if (holder.getAdapterPosition() == mCustomFilterLists.size() + ONE_ITEM_SPACE) {
customFilterListViewHolder.titleText.setText(R.string.add_custom_filter_list);
if (holder.getAdapterPosition() == ONE_ITEM_SPACE
|| holder.getAdapterPosition()
== mSubscriptionFilterLists.size() + TWO_ITEMS_SPACE) {
if (holder.getAdapterPosition() == ONE_ITEM_SPACE) {
customFilterListViewHolder.titleText.setText(
R.string.create_custom_filters_title);
} else {
customFilterListViewHolder.titleText.setText(R.string.add_custom_filter_list);
}
customFilterListViewHolder.lastUpdateText.setVisibility(View.GONE);
customFilterListViewHolder.toggleSwitch.setVisibility(View.GONE);
customFilterListViewHolder.urlText.setVisibility(View.GONE);
@@ -73,7 +81,7 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
} else {
SubscriptionInfo customFilter =
mCustomFilterLists.get(holder.getAdapterPosition() - ONE_ITEM_SPACE);
mSubscriptionFilterLists.get(holder.getAdapterPosition() - TWO_ITEMS_SPACE);
String url = customFilter.subscriptionUrl.url;
if (customFilter.title != null && customFilter.title.length() > 0) {
customFilterListViewHolder.titleText.setText(customFilter.title);
@@ -132,11 +140,13 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
customFilterListViewHolder.urlText.setText(url);
customFilterListViewHolder.toggleSwitch.setChecked(customFilter.enabled);
customFilterListViewHolder.toggleSwitch.setOnClickListener(view -> {
customFilter.enabled = !customFilter.enabled;
mBraveContentFileringListener.onCustomFilterToggle(
holder.getAdapterPosition() - ONE_ITEM_SPACE, customFilter.enabled);
});
customFilterListViewHolder.toggleSwitch.setOnClickListener(
view -> {
customFilter.enabled = !customFilter.enabled;
mBraveContentFileringListener.onSubscriptionFilterToggle(
holder.getAdapterPosition() - TWO_ITEMS_SPACE,
customFilter.enabled);
});
if (mIsEdit) {
customFilterListViewHolder.deleteImageView.setVisibility(View.VISIBLE);
@@ -146,24 +156,29 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
customFilterListViewHolder.toggleSwitch.setVisibility(View.VISIBLE);
}
customFilterListViewHolder.deleteImageView.setOnClickListener(view -> {
if (mIsEdit) {
mBraveContentFileringListener.onCustomFilterDelete(
holder.getAdapterPosition() - ONE_ITEM_SPACE);
}
});
customFilterListViewHolder.deleteImageView.setOnClickListener(
view -> {
if (mIsEdit) {
mBraveContentFileringListener.onSubscriptionFilterDelete(
holder.getAdapterPosition() - TWO_ITEMS_SPACE);
}
});
customFilterListViewHolder.urlText.setVisibility(View.VISIBLE);
customFilterListViewHolder.arrowImageView.setVisibility(View.GONE);
}
customFilterListViewHolder.itemView.setOnClickListener(view -> {
if (holder.getAdapterPosition() == mCustomFilterLists.size() + ONE_ITEM_SPACE) {
mBraveContentFileringListener.onAddCustomFiltering();
}
});
customFilterListViewHolder.itemView.setOnClickListener(
view -> {
if (holder.getAdapterPosition() == ONE_ITEM_SPACE) {
mBraveContentFileringListener.onCustomFilters();
} else if (holder.getAdapterPosition()
== mSubscriptionFilterLists.size() + TWO_ITEMS_SPACE) {
mBraveContentFileringListener.onAddSubscriptionFilter();
}
});
} else if (holder instanceof FilterListViewHolder) {
FilterListViewHolder filterListViewHolder = (FilterListViewHolder) holder;
int filterPosition = position - mCustomFilterLists.size() - THREE_ITEMS_SPACE;
int filterPosition = position - mSubscriptionFilterLists.size() - FOUR_ITEMS_SPACE;
if (filterPosition < mFilterLists.length) {
Map<String, Value> storage =
mFilterLists[filterPosition].getDictionaryValue().storage;
@@ -175,17 +190,18 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
filterListViewHolder.descriptionText.setText(description);
filterListViewHolder.toggleSwitch.setChecked(isEnabled);
filterListViewHolder.toggleSwitch.setOnClickListener(view -> {
storage.get("enabled").setBoolValue(!isEnabled);
mBraveContentFileringListener.onDefaultFilterToggle(uuid, !isEnabled);
});
filterListViewHolder.toggleSwitch.setOnClickListener(
view -> {
storage.get("enabled").setBoolValue(!isEnabled);
mBraveContentFileringListener.onFilterToggle(uuid, !isEnabled);
});
}
}
}
@Override
public int getItemCount() {
int count = mCustomFilterLists.size() + THREE_ITEMS_SPACE;
int count = mSubscriptionFilterLists.size() + FOUR_ITEMS_SPACE;
if (mFilterLists != null) {
count += mFilterLists.length;
}
@@ -214,9 +230,9 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
@Override
public int getItemViewType(int position) {
if (position == 0 || position == mCustomFilterLists.size() + TWO_ITEMS_SPACE) {
if (position == 0 || position == mSubscriptionFilterLists.size() + THREE_ITEMS_SPACE) {
return TYPE_FILTER_HEADER;
} else if (position > 0 && position <= mCustomFilterLists.size() + ONE_ITEM_SPACE) {
} else if (position > 0 && position <= mSubscriptionFilterLists.size() + TWO_ITEMS_SPACE) {
return TYPE_CUSTOM_FILTER_LIST;
} else {
return TYPE_FILTER_LIST;
@@ -225,21 +241,22 @@ public class ContentFilteringAdapter extends RecyclerView.Adapter<RecyclerView.V
public void setEditable(boolean isEdit) {
mIsEdit = isEdit;
notifyItemRangeChanged(ONE_ITEM_SPACE, mCustomFilterLists.size());
notifyItemRangeChanged(TWO_ITEMS_SPACE, mSubscriptionFilterLists.size());
}
public void setCustomFilterLists(ArrayList<SubscriptionInfo> customFilterLists) {
if (mCustomFilterLists != null && mCustomFilterLists.size() > 0) {
notifyItemRangeRemoved(ONE_ITEM_SPACE, mCustomFilterLists.size());
public void setSubscriptionFilterLists(ArrayList<SubscriptionInfo> customFilterLists) {
if (mSubscriptionFilterLists != null && mSubscriptionFilterLists.size() > 0) {
notifyItemRangeRemoved(TWO_ITEMS_SPACE, mSubscriptionFilterLists.size());
}
mCustomFilterLists = customFilterLists;
notifyItemRangeInserted(ONE_ITEM_SPACE, mCustomFilterLists.size());
mSubscriptionFilterLists = customFilterLists;
notifyItemRangeInserted(TWO_ITEMS_SPACE, mSubscriptionFilterLists.size());
}
public void setFilterLists(Value filterLists[]) {
mFilterLists = filterLists;
notifyItemRangeInserted(
mCustomFilterLists.size() + TWO_ITEMS_SPACE, mFilterLists.length + ONE_ITEM_SPACE);
mSubscriptionFilterLists.size() + THREE_ITEMS_SPACE,
mFilterLists.length + ONE_ITEM_SPACE);
}
public static class FilterListHeaderViewHolder extends RecyclerView.ViewHolder {
@@ -42,7 +42,7 @@ public class ContentFilteringFragment extends BravePreferenceFragment
private ContentFilteringAdapter mAdapter;
private FilterListAndroidHandler mFilterListAndroidHandler;
private ArrayList<SubscriptionInfo> mCustomFilterLists;
private ArrayList<SubscriptionInfo> mSubscriptionFilterLists;
private Value mFilterLists[];
private MenuItem mEditItem;
private MenuItem mDoneItem;
@@ -71,13 +71,15 @@ public class ContentFilteringFragment extends BravePreferenceFragment
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mAddCustomFilterResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
((BraveSettingsActivity) requireActivity()).getActivityResultRegistry(), result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
getCustomFilterLists();
}
});
mAddCustomFilterResultLauncher =
registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
((BraveSettingsActivity) requireActivity()).getActivityResultRegistry(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
getSubscriptionFilters();
}
});
}
private void setData() {
@@ -88,20 +90,21 @@ public class ContentFilteringFragment extends BravePreferenceFragment
mRecyclerView.setLayoutManager(linearLayoutManager);
mAdapter = new ContentFilteringAdapter(getActivity(), this);
mRecyclerView.setAdapter(mAdapter);
getCustomFilterLists();
getSubscriptionFilters();
getFilterLists();
}
private void getCustomFilterLists() {
private void getSubscriptionFilters() {
if (mFilterListAndroidHandler != null) {
mFilterListAndroidHandler.getSubscriptions(subscriptions -> {
mCustomFilterLists = new ArrayList(Arrays.asList(subscriptions));
mAdapter.setCustomFilterLists(mCustomFilterLists);
mIsGetSubscriptionsLoaded = true;
if (mIsMenuLoaded) {
checkForEmptyCustomFilterLists(true);
}
});
mFilterListAndroidHandler.getSubscriptions(
subscriptions -> {
mSubscriptionFilterLists = new ArrayList(Arrays.asList(subscriptions));
mAdapter.setSubscriptionFilterLists(mSubscriptionFilterLists);
mIsGetSubscriptionsLoaded = true;
if (mIsMenuLoaded) {
checkForEmptySubscriptionFilters(true);
}
});
}
}
@@ -115,17 +118,17 @@ public class ContentFilteringFragment extends BravePreferenceFragment
}
@Override
public void onCustomFilterToggle(int position, boolean isEnable) {
public void onSubscriptionFilterToggle(int position, boolean isEnable) {
if (mFilterListAndroidHandler != null) {
SubscriptionInfo customFilter = mCustomFilterLists.get(position);
SubscriptionInfo customFilter = mSubscriptionFilterLists.get(position);
mFilterListAndroidHandler.enableSubscription(customFilter.subscriptionUrl, isEnable);
customFilter.enabled = isEnable;
}
}
@Override
public void onAddCustomFiltering() {
if (mCustomFilterLists.size() > 0) {
public void onAddSubscriptionFilter() {
if (mSubscriptionFilterLists.size() > 0) {
isEditSelected(false);
}
Intent intent = mSettingsLauncher.createSettingsActivityIntent(
@@ -134,26 +137,37 @@ public class ContentFilteringFragment extends BravePreferenceFragment
}
@Override
public void onCustomFilterDelete(int position) {
public void onSubscriptionFilterDelete(int position) {
if (mFilterListAndroidHandler != null) {
SubscriptionInfo customFilter = mCustomFilterLists.get(position);
SubscriptionInfo customFilter = mSubscriptionFilterLists.get(position);
mFilterListAndroidHandler.deleteSubscription(customFilter.subscriptionUrl);
mCustomFilterLists.remove(position);
mSubscriptionFilterLists.remove(position);
mAdapter.notifyItemRemoved(position + 1);
mAdapter.notifyItemRangeChanged(position + 1, mAdapter.getItemCount());
checkForEmptyCustomFilterLists(false);
checkForEmptySubscriptionFilters(false);
}
}
@Override
public void onDefaultFilterToggle(String uuid, boolean isEnable) {
public void onCustomFilters() {
if (mSubscriptionFilterLists.size() > 0) {
isEditSelected(false);
}
Intent intent =
mSettingsLauncher.createSettingsActivityIntent(
getActivity(), CreateCustomFiltersFragment.class.getName(), null);
getActivity().startActivity(intent);
}
@Override
public void onFilterToggle(String uuid, boolean isEnable) {
if (mFilterListAndroidHandler != null) {
mFilterListAndroidHandler.enableFilter(uuid, isEnable);
}
}
private void checkForEmptyCustomFilterLists(boolean shouldEditVisible) {
if (mCustomFilterLists.size() == 0) {
private void checkForEmptySubscriptionFilters(boolean shouldEditVisible) {
if (mSubscriptionFilterLists.size() == 0) {
isEditSelected(false);
mEditItem.setVisible(false);
} else if (shouldEditVisible) {
@@ -192,7 +206,7 @@ public class ContentFilteringFragment extends BravePreferenceFragment
mDoneItem = menu.findItem(R.id.menu_id_done);
mIsMenuLoaded = true;
if (mIsGetSubscriptionsLoaded) {
checkForEmptyCustomFilterLists(true);
checkForEmptySubscriptionFilters(true);
}
}
@@ -0,0 +1,151 @@
/* 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.shields;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.chromium.brave_shields.mojom.FilterListAndroidHandler;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.settings.BravePreferenceFragment;
import org.chromium.mojo.bindings.ConnectionErrorHandler;
import org.chromium.mojo.system.MojoException;
import org.chromium.ui.text.NoUnderlineClickableSpan;
import org.chromium.ui.widget.Toast;
public class CreateCustomFiltersFragment extends BravePreferenceFragment
implements ConnectionErrorHandler {
public static final String BRAVE_ADBLOCK_FILTER_SYNTAX_PAGE =
"https://support.brave.com/hc/en-us/articles/6449369961741";
private FilterListAndroidHandler mFilterListAndroidHandler;
private EditText mEtCustomFilters;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_create_custom_filters, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (getActivity() != null) {
getActivity().setTitle(R.string.create_custom_filters_title);
}
super.onActivityCreated(savedInstanceState);
setData();
}
private void setData() {
initFilterListAndroidHandler();
mEtCustomFilters = getView().findViewById(R.id.enter_custom_filters);
TextView tvSummary = getView().findViewById(R.id.summary);
String summaryText =
String.format(
getResources().getString(R.string.create_custom_filter_summary),
getResources().getString(R.string.adblock_filter_syntax));
Spanned summaryTextSpanned = BraveRewardsHelper.spannedFromHtmlString(summaryText);
SpannableString summaryTextSpannableString =
new SpannableString(summaryTextSpanned.toString());
if (getActivity() != null) {
NoUnderlineClickableSpan summaryTextClickableSpan =
new NoUnderlineClickableSpan(
getActivity(),
R.color.brave_link,
(textView) -> {
CustomTabActivity.showInfoPage(
getActivity(), BRAVE_ADBLOCK_FILTER_SYNTAX_PAGE);
});
BraveRewardsHelper.setSpan(
getActivity(),
summaryText,
summaryTextSpannableString,
R.string.adblock_filter_syntax,
summaryTextClickableSpan);
tvSummary.setMovementMethod(LinkMovementMethod.getInstance());
tvSummary.setText(summaryTextSpannableString);
}
Button saveBtn = getView().findViewById(R.id.btn_save);
saveBtn.setOnClickListener(
view -> {
updateCustomFilters();
});
getCustomFilters();
}
@Override
public void onConnectionError(MojoException e) {
mFilterListAndroidHandler = null;
initFilterListAndroidHandler();
}
private void initFilterListAndroidHandler() {
if (mFilterListAndroidHandler != null) {
return;
}
mFilterListAndroidHandler =
FilterListServiceFactory.getInstance().getFilterListAndroidHandler(this);
}
private void getCustomFilters() {
if (mFilterListAndroidHandler != null) {
mFilterListAndroidHandler.getCustomFilters(
customFilters -> {
mEtCustomFilters.setText(customFilters);
});
}
}
private void updateCustomFilters() {
if (mFilterListAndroidHandler != null) {
mFilterListAndroidHandler.updateCustomFilters(
mEtCustomFilters.getText().toString(),
isUpdated -> {
int messageId =
isUpdated
? R.string.saved_changes_success
: R.string.brave_rewards_local_general_grant_error_title;
if (getActivity() != null) {
Toast.makeText(getActivity(), messageId, Toast.LENGTH_SHORT).show();
}
});
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem closeItem = menu.findItem(R.id.close_menu_id);
if (closeItem != null) {
closeItem.setVisible(false);
}
}
@Override
public void onDestroy() {
if (mFilterListAndroidHandler != null) {
mFilterListAndroidHandler.close();
}
super.onDestroy();
}
}
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<stroke android:width="1dp" android:color="@color/add_custom_filter_text_input_stroke_color" />
<corners android:radius="5dp"/>
</shape>
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/.
-->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/enter_custom_filters"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginTop="12dp"
android:layout_marginHorizontal="16dp"
android:paddingHorizontal="15dp"
android:paddingTop="15dp"
app:layout_constraintTop_toTopOf="parent"
android:gravity="top|start"
android:background="@drawable/create_custom_filter_edit_bg"
android:textColor="@color/filter_title_color"
android:inputType="text|textMultiLine"
android:importantForAutofill="no"
tools:ignore="LabelFor"/>
<TextView
android:id="@+id/summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginHorizontal="16dp"
app:layout_constraintTop_toBottomOf="@id/enter_custom_filters"
android:textSize="16sp"
android:textColor="@color/add_custom_filter_summary_color"/>
<Button
android:id="@+id/btn_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:layout_marginHorizontal="16dp"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/blue_48_rounded_bg"
app:backgroundTint="@null"
android:text="@string/save_changes"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="16sp"
android:paddingVertical="4dp"
android:minHeight="0dp"
style="?android:attr/borderlessButtonStyle"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -548,6 +548,21 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
<message name="IDS_UPDATE_FAILED_CUSTOM_FILTER" desc="Custom filter Update failed.">
<ph name="TIME">%1$s<ex>1 hours ago</ex></ph> Update failed
</message>
<message name="IDS_CREATE_CUSTOM_FILTERS_TITLE" desc="Title for Create Custom filters.">
Create custom filters
</message>
<message name="IDS_SAVE_CHANGES" desc="Button text for create custom filter lists.">
Save changes
</message>
<message name="IDS_SAVED_CHANGES_SUCCESS" desc="Create custom filter lists success text.">
Saved changes successfully
</message>
<message name="IDS_CREATE_CUSTOM_FILTER_SUMMARY" desc="Create custom filter summary.">
Add custom filters you've created, one per line, in the field above. Be sure to use the <ph name="ADBLOCK_FILTER_SYNTAX">%1$s</ph>.
</message>
<message name="IDS_ADBLOCK_FILTER_SYNTAX" desc="Text for Adblock filter syntax.">
Adblock filter syntax
</message>
<message name="IDS_ASSET_PRICE" desc="Text for asset price.">
<ph name="ASSET_NAME">%1$s<ex>Ethereum</ex></ph> Price (<ph name="ASSET_SYMBOL">%2$s<ex>ETH</ex></ph>)
</message>
@@ -110,4 +110,17 @@ void FilterListService::DeleteSubscription(const GURL& sub_url) {
sub_url);
}
void FilterListService::GetCustomFilters(GetCustomFiltersCallback callback) {
std::move(callback).Run(
ad_block_service_->custom_filters_provider()->GetCustomFilters());
}
void FilterListService::UpdateCustomFilters(
const std::string& custom_filters,
UpdateCustomFiltersCallback callback) {
std::move(callback).Run(
ad_block_service_->custom_filters_provider()->UpdateCustomFilters(
custom_filters));
}
} // namespace brave_shields
@@ -38,6 +38,9 @@ class FilterListService : public KeyedService,
void EnableSubscription(const GURL& sub_url, bool enabled) override;
void DeleteSubscription(const GURL& sub_url) override;
void GetFilterLists(GetFilterListsCallback callback) override;
void GetCustomFilters(GetCustomFiltersCallback callback) override;
void UpdateCustomFilters(const std::string& custom_filters,
UpdateCustomFiltersCallback callback) override;
private:
raw_ptr<AdBlockService> ad_block_service_ = nullptr;
@@ -28,6 +28,8 @@ interface FilterListAndroidHandler {
EnableSubscription(url.mojom.Url sub_url, bool enabled);
DeleteSubscription(url.mojom.Url sub_url);
GetFilterLists() => (mojo_base.mojom.ListValue filterLists);
GetCustomFilters() => (string custom_filters);
UpdateCustomFilters(string custom_filters) => (bool is_updated);
};
const string kSwitchToAppUuid = "2F3DCE16-A19A-493C-A88F-2E110FBD37D6";