[Android] Brave news - rss
This commit is contained in:
@@ -892,6 +892,7 @@ brave_java_resources = [
|
||||
"java/res/layout/ntp_non_disruptive_banner.xml",
|
||||
"java/res/layout/ntp_widget_list_item_layout.xml",
|
||||
"java/res/layout/optin_layout.xml",
|
||||
"java/res/layout/pref_edittext_dialog.xml",
|
||||
"java/res/layout/qa_code_check.xml",
|
||||
"java/res/layout/qa_command_line.xml",
|
||||
"java/res/layout/radio_button_group_ens_resolve_method_preference.xml",
|
||||
|
||||
@@ -211,7 +211,6 @@ brave_java_sources = [
|
||||
"../../brave/android/java/org/chromium/chrome/browser/set_default_browser/SetDefaultBrowserBottomSheetFragment.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/settings/BackgroundImagesPreferences.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/settings/BraveAddNewsSources.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/settings/BraveCustomTabsPreference.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/settings/BraveDialogPreference.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/settings/BraveLicensePreference.java",
|
||||
|
||||
@@ -35,6 +35,10 @@ public class LinearLayoutManagerWrapper extends LinearLayoutManager {
|
||||
try {
|
||||
super.onLayoutChildren(recycler, state);
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
Log.e("bn", "LinearLayoutManagerWrapper IndexOutOfBoundsException e:"+e.getMessage());
|
||||
e.printStackTrace();
|
||||
} catch (ClassCastException e) {
|
||||
Log.e("bn", "LinearLayoutManagerWrapper ClassCastException e:"+e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
/* Copyright (c) 2021 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.settings;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.widget.EditText;
|
||||
|
||||
import androidx.preference.CheckBoxPreference;
|
||||
import androidx.preference.EditTextPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.brave_news.mojom.BraveNewsController;
|
||||
import org.chromium.brave_news.mojom.Publisher;
|
||||
import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.BraveLaunchIntentDispatcher;
|
||||
import org.chromium.chrome.browser.brave_news.BraveNewsControllerFactory;
|
||||
import org.chromium.chrome.browser.settings.BravePreferenceFragment;
|
||||
import org.chromium.components.browser_ui.settings.SettingsUtils;
|
||||
import org.chromium.mojo.bindings.ConnectionErrorHandler;
|
||||
import org.chromium.mojo.system.MojoException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
public class BraveAddNewsSources extends BravePreferenceFragment
|
||||
implements Preference.OnPreferenceChangeListener, ConnectionErrorHandler {
|
||||
private static final String PREF_ADD_SOURCES = "news_source_1";
|
||||
private EditTextPreference addSource;
|
||||
private EditText mEditText;
|
||||
private PreferenceScreen mainScreen;
|
||||
private BraveNewsController mBraveNewsController;
|
||||
private ArrayList<Publisher> mPublishers;
|
||||
|
||||
public static int getPreferenceSummary() {
|
||||
return BraveLaunchIntentDispatcher.useCustomTabs() ? R.string.text_on : R.string.text_off;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionError(MojoException e) {
|
||||
if (mBraveNewsController != null) {
|
||||
mBraveNewsController.close();
|
||||
}
|
||||
mBraveNewsController = null;
|
||||
InitBraveNewsController();
|
||||
}
|
||||
|
||||
private void InitBraveNewsController() {
|
||||
if (mBraveNewsController != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mBraveNewsController =
|
||||
BraveNewsControllerFactory.getInstance().getBraveNewsController(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
getActivity().setTitle(R.string.news_add_source);
|
||||
SettingsUtils.addPreferencesFromResource(this, R.xml.brave_news_sources_default);
|
||||
findPreference(PREF_ADD_SOURCES).setOnPreferenceChangeListener(this);
|
||||
InitBraveNewsController();
|
||||
|
||||
mainScreen = getPreferenceManager().getPreferenceScreen();
|
||||
|
||||
addSource = (EditTextPreference) findPreference(PREF_ADD_SOURCES);
|
||||
addSource.setPositiveButtonText(R.string.search_title);
|
||||
mPublishers = new ArrayList<>();
|
||||
|
||||
mBraveNewsController.getPublishers((publishers) -> {
|
||||
for (Map.Entry<String, Publisher> entry : publishers.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
Publisher publisher = entry.getValue();
|
||||
mPublishers.add(publisher);
|
||||
CheckBoxPreference source =
|
||||
new CheckBoxPreference(ContextUtils.getApplicationContext());
|
||||
source.setTitle(publisher.publisherName);
|
||||
mainScreen.addPreference(source);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
String key = preference.getKey();
|
||||
|
||||
if (PREF_ADD_SOURCES.equals(key)) {
|
||||
PreferenceManager manager = getPreferenceManager();
|
||||
PreferenceScreen sourcesScreen =
|
||||
manager.createPreferenceScreen(ContextUtils.getApplicationContext());
|
||||
sourcesScreen.setTitle((String) newValue);
|
||||
// fetch results from API
|
||||
// populate checkboxes
|
||||
CheckBoxPreference source1 =
|
||||
new CheckBoxPreference(ContextUtils.getApplicationContext());
|
||||
source1.setTitle((String) newValue + " 1");
|
||||
source1.setChecked(true);
|
||||
sourcesScreen.addPreference(source1);
|
||||
|
||||
CheckBoxPreference source2 =
|
||||
new CheckBoxPreference(ContextUtils.getApplicationContext());
|
||||
source2.setTitle((String) newValue + " 2");
|
||||
source2.setChecked(true);
|
||||
sourcesScreen.addPreference(source2);
|
||||
|
||||
// end fetch. finish the layout
|
||||
|
||||
Preference button = new Preference(ContextUtils.getApplicationContext());
|
||||
button.setTitle("Add");
|
||||
button.setKey("add_news_source");
|
||||
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
setPreferencesFromResource(R.xml.brave_news_preferences, null);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
sourcesScreen.addPreference(button);
|
||||
|
||||
setPreferenceScreen(sourcesScreen);
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (mBraveNewsController != null) {
|
||||
mBraveNewsController.close();
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Preference> getPreferenceList(Preference p, ArrayList<Preference> list) {
|
||||
if (p instanceof PreferenceCategory || p instanceof PreferenceScreen) {
|
||||
PreferenceGroup pGroup = (PreferenceGroup) p;
|
||||
int pCount = pGroup.getPreferenceCount();
|
||||
for (int i = 0; i < pCount; i++) {
|
||||
getPreferenceList(pGroup.getPreference(i), list); // recursive call
|
||||
}
|
||||
} else {
|
||||
list.add(p);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
}
|
||||
@@ -72,7 +72,9 @@ public class BraveNewsCategorySources
|
||||
Publisher publisher = entry.getValue();
|
||||
if (publisher.categoryName.toLowerCase(Locale.ROOT)
|
||||
.equals(mCategoryArg.toLowerCase(Locale.ROOT))) {
|
||||
categoryPublishers.add(publisher);
|
||||
if (!publisher.categoryName.equals("")) {
|
||||
categoryPublishers.add(publisher);
|
||||
}
|
||||
}
|
||||
|
||||
mCategsPublishers.put(publisher.categoryName, categoryPublishers);
|
||||
|
||||
@@ -10,6 +10,8 @@ import android.os.Bundle;
|
||||
import android.widget.EditText;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.CheckBoxPreference;
|
||||
import androidx.preference.EditTextPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
@@ -18,18 +20,26 @@ import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.base.Log;
|
||||
import org.chromium.brave_news.mojom.BraveNewsController;
|
||||
import org.chromium.brave_news.mojom.Publisher;
|
||||
import org.chromium.brave_news.mojom.PublisherType;
|
||||
import org.chromium.brave_news.mojom.UserEnabled;
|
||||
import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.BraveLaunchIntentDispatcher;
|
||||
import org.chromium.chrome.browser.brave_news.BraveNewsControllerFactory;
|
||||
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
|
||||
import org.chromium.chrome.browser.preferences.BravePreferenceKeys;
|
||||
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
|
||||
import org.chromium.chrome.browser.settings.BravePreferenceFragment;
|
||||
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
|
||||
import org.chromium.components.browser_ui.settings.ChromeBasePreference;
|
||||
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
|
||||
import org.chromium.components.browser_ui.settings.SettingsLauncher;
|
||||
import org.chromium.components.browser_ui.settings.SettingsUtils;
|
||||
import org.chromium.mojo.bindings.ConnectionErrorHandler;
|
||||
import org.chromium.mojo.system.MojoException;
|
||||
import org.chromium.url.mojom.Url;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -44,10 +54,14 @@ public class BraveNewsPreferences extends BravePreferenceFragment
|
||||
public static final String PREF_SHOW_OPTIN = "show_optin";
|
||||
public static final String PREF_SOURCES_SECTION = "your_sources_section";
|
||||
public static final String PREF_ADD_SOURCES = "add_source_news";
|
||||
public static final String PREF_ADD_RSS_SOURCES = "news_source_1";
|
||||
private static final String PREF_RSS_SOURCES = "rss_sources";
|
||||
|
||||
private ChromeSwitchPreference mTurnOnNews;
|
||||
private ChromeSwitchPreference mShowNews;
|
||||
private EditTextPreference addSource;
|
||||
private PreferenceScreen mMainScreen;
|
||||
private PreferenceCategory mRssCategory;
|
||||
private PreferenceManager mPreferenceManager;
|
||||
private TreeMap<String, List<Publisher>> mCategsPublishers;
|
||||
|
||||
@@ -62,9 +76,12 @@ public class BraveNewsPreferences extends BravePreferenceFragment
|
||||
@Override
|
||||
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
|
||||
SettingsUtils.addPreferencesFromResource(this, R.xml.brave_news_preferences);
|
||||
|
||||
InitBraveNewsController();
|
||||
mTurnOnNews = (ChromeSwitchPreference) findPreference(PREF_TURN_ON_NEWS);
|
||||
mShowNews = (ChromeSwitchPreference) findPreference(PREF_SHOW_NEWS);
|
||||
mRssCategory = (PreferenceCategory) findPreference(PREF_SOURCES_SECTION);
|
||||
mRssCategory.setOrderingAsAdded(true);
|
||||
mSettingsFragment = this;
|
||||
|
||||
mTurnOnNews.setOnPreferenceChangeListener(this);
|
||||
@@ -76,18 +93,60 @@ public class BraveNewsPreferences extends BravePreferenceFragment
|
||||
List<Publisher> categoryPublishers = new ArrayList<>();
|
||||
for (Map.Entry<String, Publisher> entry : publishers.entrySet()) {
|
||||
Publisher publisher = entry.getValue();
|
||||
categoryPublishers.add(publisher);
|
||||
mCategsPublishers.put(publisher.categoryName, categoryPublishers);
|
||||
if (publisher.type != PublisherType.DIRECT_SOURCE) {
|
||||
categoryPublishers.add(publisher);
|
||||
mCategsPublishers.put(publisher.categoryName, categoryPublishers);
|
||||
} else {
|
||||
addRss(publisher);
|
||||
}
|
||||
}
|
||||
mCategsPublishers.put("All Sources", allPublishers);
|
||||
addCategs(mCategsPublishers);
|
||||
});
|
||||
}
|
||||
|
||||
private void addRss(Publisher publisher) {
|
||||
if (publisher.type != PublisherType.DIRECT_SOURCE) {
|
||||
return;
|
||||
}
|
||||
SwitchPreference source = new SwitchPreference(ContextUtils.getApplicationContext());
|
||||
boolean enabled = false;
|
||||
if (publisher.userEnabledStatus == UserEnabled.ENABLED) {
|
||||
enabled = true;
|
||||
} else if (publisher.userEnabledStatus == UserEnabled.NOT_MODIFIED) {
|
||||
enabled = publisher.isEnabled;
|
||||
}
|
||||
source.setTitle(publisher.publisherName);
|
||||
source.setKey(publisher.publisherName);
|
||||
source.setChecked(enabled);
|
||||
source.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
@UserEnabled.EnumType
|
||||
int type = UserEnabled.NOT_MODIFIED;
|
||||
if ((boolean) newValue) {
|
||||
type = UserEnabled.ENABLED;
|
||||
} else {
|
||||
type = UserEnabled.DISABLED;
|
||||
}
|
||||
|
||||
SharedPreferencesManager.getInstance().writeBoolean(
|
||||
BravePreferenceKeys.BRAVE_NEWS_CHANGE_SOURCE, true);
|
||||
|
||||
if (mBraveNewsController != null) {
|
||||
mBraveNewsController.setPublisherPref(publisher.publisherId, type);
|
||||
}
|
||||
|
||||
source.setChecked((boolean) newValue);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
mRssCategory.addPreference(source);
|
||||
}
|
||||
|
||||
private void addCategs(TreeMap<String, List<Publisher>> publisherCategories) {
|
||||
for (Map.Entry<String, List<Publisher>> map : publisherCategories.entrySet()) {
|
||||
String category = map.getKey();
|
||||
|
||||
ChromeBasePreference source =
|
||||
new ChromeBasePreference(ContextUtils.getApplicationContext());
|
||||
source.setTitle(category);
|
||||
@@ -127,6 +186,13 @@ public class BraveNewsPreferences extends BravePreferenceFragment
|
||||
mPreferenceManager = getPreferenceManager();
|
||||
mMainScreen = mPreferenceManager.getPreferenceScreen();
|
||||
|
||||
addSource = (EditTextPreference) findPreference(PREF_RSS_SOURCES);
|
||||
if (addSource != null) {
|
||||
addSource.setPositiveButtonText(R.string.search_title);
|
||||
addSource.setOnPreferenceChangeListener(this);
|
||||
addSource.setText("");
|
||||
}
|
||||
|
||||
boolean isNewsOn = BravePrefServiceBridge.getInstance().getNewsOptIn();
|
||||
|
||||
if (!isNewsOn) {
|
||||
@@ -159,6 +225,30 @@ public class BraveNewsPreferences extends BravePreferenceFragment
|
||||
}
|
||||
} else if (PREF_SHOW_NEWS.equals(key)) {
|
||||
BravePrefServiceBridge.getInstance().setShowNews((boolean) newValue);
|
||||
} else if (PREF_RSS_SOURCES.equals(key)) {
|
||||
if (((String) newValue).equals("")) {
|
||||
return true;
|
||||
}
|
||||
PreferenceManager manager = getPreferenceManager();
|
||||
PreferenceScreen sourcesScreen =
|
||||
manager.createPreferenceScreen(ContextUtils.getApplicationContext());
|
||||
sourcesScreen.setTitle((String) newValue);
|
||||
// fetch results from API
|
||||
Url rssUrl = new Url();
|
||||
|
||||
rssUrl.url = (String) newValue;
|
||||
mBraveNewsController.subscribeToNewDirectFeed(
|
||||
rssUrl, (isValidFeed, isDuplicate, result) -> {
|
||||
if (isValidFeed && !isDuplicate && result != null) {
|
||||
SharedPreferencesManager.getInstance().writeBoolean(
|
||||
BravePreferenceKeys.BRAVE_NEWS_CHANGE_SOURCE, true);
|
||||
getActivity().finish();
|
||||
SettingsLauncher settingsLauncher = new SettingsLauncherImpl();
|
||||
settingsLauncher.launchSettingsActivity(
|
||||
getActivity(), BraveNewsPreferences.class);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
setSourcesVisibility((boolean) newValue);
|
||||
return true;
|
||||
@@ -173,6 +263,8 @@ public class BraveNewsPreferences extends BravePreferenceFragment
|
||||
}
|
||||
}
|
||||
|
||||
private void createRssDialog(String newValue) {}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--* Copyright (c) 2021 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/. -->
|
||||
|
||||
<!-- Used because of an Android bu causing IllegalStateException on EditTextPreference in brave_news_preferences.xml -->
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="48dp"
|
||||
android:layout_marginBottom="48dp"
|
||||
android:overScrollMode="ifContentScrolls">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="20dp"
|
||||
android:paddingBottom="20dp"
|
||||
android:paddingStart="?dialogPreferredPadding"
|
||||
android:paddingLeft="?dialogPreferredPadding"
|
||||
android:paddingEnd="?dialogPreferredPadding"
|
||||
android:paddingRight="?dialogPreferredPadding"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/message"
|
||||
style="?android:attr/textAppearanceSmall"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?android:attr/textColorSecondary" />
|
||||
|
||||
<EditText
|
||||
android:id="@android:id/edit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autofillHints="@NULL"
|
||||
android:inputType="textUri"
|
||||
android:hint="@string/news_feed_site_url" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
@@ -19,11 +19,16 @@
|
||||
android:summaryOn="@string/brave_news_optin_subtitle"
|
||||
android:summaryOff="@string/brave_news_optin_subtitle" />
|
||||
|
||||
<!-- <PreferenceCategory
|
||||
<PreferenceCategory
|
||||
android:key="your_sources_section"
|
||||
android:dependency="kNewTabPageShowToday"
|
||||
android:title="@string/news_your_sources_section"/> -->
|
||||
android:title="@string/news_your_sources_section"/>
|
||||
|
||||
<EditTextPreference
|
||||
android:key="rss_sources"
|
||||
android:title="@string/news_add_source"
|
||||
android:defaultValue="@string/news_feed_site_url"
|
||||
android:dialogLayout="@layout/pref_edittext_dialog" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="default_sources_section"
|
||||
|
||||
@@ -273,17 +273,12 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
|
||||
<message name="IDS_NEWS_TURN_ON_BUTTON" desc="Text for turn on button">
|
||||
Show Brave News
|
||||
</message>
|
||||
<!-- // for RSS
|
||||
<message name="IDS_NEWS_YOUR_SOURCES_SECTION" desc="Text for custom sources section">
|
||||
Your sources
|
||||
</message>
|
||||
<message name="IDS_NEWS_SOURCES" desc="Text for show brave news toggle">
|
||||
Your sources
|
||||
</message>
|
||||
<message name="IDS_NEWS_FEED_SITE_URL" desc="Text for news feed input">
|
||||
Feed or Site URL
|
||||
</message>
|
||||
-->
|
||||
<message name="IDS_NEWS_DEFAULT_SOURCES_SECTION" desc="Text for the default sources section">
|
||||
Default sources
|
||||
</message>
|
||||
|
||||
Reference in New Issue
Block a user