Skip to content

Commit

Permalink
support adding adblock extra sites
Browse files Browse the repository at this point in the history
  • Loading branch information
plateaukao committed Sep 12, 2021
1 parent 8781fd0 commit 247aa33
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 32 deletions.
38 changes: 27 additions & 11 deletions app/src/main/java/de/baumann/browser/activity/BrowserActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import android.os.Bundle
import android.os.Environment
import android.print.PrintAttributes
import android.print.PrintManager
import android.provider.Browser
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
Expand Down Expand Up @@ -55,7 +54,6 @@ import de.baumann.browser.view.viewControllers.TranslationViewController
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.*
import java.lang.reflect.Field
import java.util.*
import kotlin.math.floor
import kotlin.math.roundToInt
Expand Down Expand Up @@ -1281,7 +1279,8 @@ open class BrowserActivity : AppCompatActivity(), BrowserController, OnClickList

}

private fun showContextMenuLinkDialog(url: String?) {
private fun showContextMenuLinkDialog(url: String?, hitTestResult: HitTestResult) {
val url = url ?: hitTestResult.extra ?: ""
val dialogView = DialogMenuContextLinkBinding.inflate(layoutInflater)
val dialog = dialogManager.showOptionDialog(dialogView.root)
dialogView.contextLinkNewTab.setOnClickListener {
Expand All @@ -1292,12 +1291,12 @@ open class BrowserActivity : AppCompatActivity(), BrowserController, OnClickList
}
dialogView.contextLinkShareLink.setOnClickListener {
dialog.dismissWithAction {
if (prepareRecord()) NinjaToast.show(this, getString(R.string.toast_share_failed))
if (prepareRecord()) NinjaToast.show(this, getString(R.string.toast_share_failed))
else IntentUnit.share(this, "", url)
}
}
dialogView.contextLinkOpenWith.setOnClickListener {
dialog.dismissWithAction { HelperUnit.showBrowserChooser( this@BrowserActivity, url, getString(R.string.menu_open_with) ) }
dialog.dismissWithAction { HelperUnit.showBrowserChooser(this@BrowserActivity, url, getString(R.string.menu_open_with)) }
}
dialogView.contextLinkSaveBookmark.setOnClickListener {
dialog.dismissWithAction { saveBookmark(url, title = "") }
Expand All @@ -1308,17 +1307,34 @@ open class BrowserActivity : AppCompatActivity(), BrowserController, OnClickList
dialogView.menuSavePdf.setOnClickListener {
dialog.dismissWithAction { showSavePdfDialog(url) }
}

if (hitTestResult.extra != null) {
dialogView.menuRemoveAd.visibility = VISIBLE
dialogView.menuRemoveAd.setOnClickListener {
dialog.dismissWithAction { confirmAdSiteAddition(hitTestResult.extra) }
}
}
}

override fun onLongPress(url: String?) {
val result = ninjaWebView.hitTestResult
if (url != null) {
showContextMenuLinkDialog(url)
} else if (result.type == HitTestResult.IMAGE_TYPE || result.type == HitTestResult.SRC_IMAGE_ANCHOR_TYPE || result.type == HitTestResult.SRC_ANCHOR_TYPE) {
showContextMenuLinkDialog(result.extra)
private fun confirmAdSiteAddition(url: String?) {
lifecycleScope.launch {
val domain = TextInputDialog(
this@BrowserActivity,
"Ad Url to be blocked",
"",
Uri.parse(url).host ?: ""
).show() ?: ""

if (domain.isNotBlank()) {
config.adSites = config.adSites.apply { add(domain) }
ninjaWebView.reload()
}
}
}

override fun onLongPress(url: String?) =
showContextMenuLinkDialog(url, ninjaWebView.hitTestResult)

private fun showSavePdfDialog(url: String?) {
val url = url ?: return

Expand Down
40 changes: 22 additions & 18 deletions app/src/main/java/de/baumann/browser/browser/AdBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,41 @@
import android.content.res.AssetManager;
import android.util.Log;

import de.baumann.browser.database.RecordAction;
import de.baumann.browser.unit.RecordUnit;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import de.baumann.browser.database.RecordAction;
import de.baumann.browser.preference.ConfigManager;
import de.baumann.browser.unit.RecordUnit;

public class AdBlock {
private static final String FILE = "hosts.txt";
private static final Set<String> hosts = new HashSet<>();
private static final List<String> whitelist = new ArrayList<>();
@SuppressLint("ConstantLocale")
private static final Locale locale = Locale.getDefault();
private static ConfigManager config;

private static void loadHosts(final Context context) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
AssetManager manager = context.getAssets();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(manager.open(FILE)));
String line;
while ((line = reader.readLine()) != null) {
hosts.add(line.toLowerCase(locale));
}
} catch (IOException i) {
Log.w("browser", "Error loading hosts", i);
config = new ConfigManager(context);
Thread thread = new Thread(() -> {
AssetManager manager = context.getAssets();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(manager.open(FILE)));
String line;
while ((line = reader.readLine()) != null) {
hosts.add(line.toLowerCase(locale));
}
} catch (IOException i) {
Log.w("browser", "Error loading hosts", i);
}
});
thread.start();
Expand Down Expand Up @@ -88,11 +92,11 @@ public boolean isWhite(String url) {
boolean isAd(String url) {
String domain;
try {
domain = getDomain(url);
domain = getDomain(url).toLowerCase(locale);
} catch (URISyntaxException u) {
return false;
}
return hosts.contains(domain.toLowerCase(locale));
return hosts.contains(domain) || config.getAdSites().contains(domain);
}

public synchronized void addDomain(String domain) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class NinjaWebViewClient(private val ninjaWebView: NinjaWebView) : WebViewClient
if (ninjaWebView.shouldHideTranslateContext) {
ninjaWebView.postDelayed({
ninjaWebView.hideTranslateContext()
}, 3000)
}, 2000)
}
}

Expand Down Expand Up @@ -128,7 +128,7 @@ class NinjaWebViewClient(private val ninjaWebView: NinjaWebView) : WebViewClient
}

private val webResourceResponse = WebResourceResponse(
BrowserUnit.MIME_TYPE_TEXT_PLAIN,
BrowserUnit.MIME_TYPE_IMAGE,
BrowserUnit.URL_ENCODING,
ByteArrayInputStream("".toByteArray())
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,10 @@ class ConfigManager(private val context: Context) {
get() = TranslationMode.values()[sp.getInt(K_TRANSLATION_MODE, if (Build.MANUFACTURER == "ONYX") 0 else 1)]
set(value) = sp.edit { putInt(K_TRANSLATION_MODE, value.ordinal)}

var adSites: MutableSet<String>
get() = sp.getStringSet(K_ADBLOCK_SITES, mutableSetOf()) ?: mutableSetOf()
set(value) = sp.edit { putStringSet(K_ADBLOCK_SITES, value) }

private fun iconStringToEnumList(iconListString: String): List<ToolbarAction> {
if (iconListString.isBlank()) return listOf()

Expand Down Expand Up @@ -223,6 +227,7 @@ class ConfigManager(private val context: Context) {
const val K_DESKTOP = "sp_desktop"
const val K_TRANSLATE_LANGUAGE = "sp_translate_language"
const val K_TRANSLATE_ORIENTATION = "sp_translate_orientation"
const val K_ADBLOCK_SITES = "sp_adblock_sites"

private const val ALBUM_INFO_SEPARATOR = "::::"
}
Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/de/baumann/browser/unit/BrowserUnit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ object BrowserUnit {
const val SUFFIX_PNG = ".png"
private const val SUFFIX_TXT = ".txt"
const val MIME_TYPE_TEXT_PLAIN = "text/plain"
const val MIME_TYPE_IMAGE = "image/png"
private const val SEARCH_ENGINE_GOOGLE = "https://www.google.com/search?q="
private const val SEARCH_ENGINE_DUCKDUCKGO = "https://duckduckgo.com/?q="
private const val SEARCH_ENGINE_STARTPAGE = "https://startpage.com/do/search?query="
Expand Down
31 changes: 31 additions & 0 deletions app/src/main/res/layout/dialog_menu_context_link.xml
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,37 @@
android:textColor="?android:attr/textColorPrimary" />

</LinearLayout>

<LinearLayout
android:id="@+id/menu_remove_ad"
android:layout_width="match_parent"
android:layout_height="46dp"
android:background="@drawable/item_bg_selector"
android:minHeight="46dp"
android:orientation="horizontal"
android:visibility="gone"
android:paddingStart="8dp"
android:paddingEnd="8dp">

<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginEnd="16dp"
android:gravity="center_vertical"
android:src="@drawable/icon_block" />

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ellipsize="end"
android:gravity="center_vertical"
android:includeFontPadding="false"
android:maxLines="1"
android:text="@string/setting_title_adblock"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary" />

</LinearLayout>
</LinearLayout>


2 changes: 1 addition & 1 deletion app/src/main/res/values-zh-rTW/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
<string name="menu_save_screenshot">儲存截圖</string>
<string name="menu_save_home">存為首頁</string>
<string name="menu_save_bookmark">加入書籤</string>
<string name="menu_save_as">儲存 PDF</string>
<string name="menu_save_as">儲存為...</string>
<string name="menu_save_pdf">存成 PDF</string>
<string name="menu_share_pdf">分享 PDF</string>
<string name="menu_shareClipboard">複製網址</string>
Expand Down

0 comments on commit 247aa33

Please sign in to comment.