升級 EinkBro 的廣告阻擋機制

新版的 EinkBro 在經過一番努力後,即將支援 EasyList 格式的廣告清單,除了阻擋一般廣告外,還可以隱藏其區塊,甚至是去除一些常見的 tracking 機制。 原先 EinkBro 的廣告阻擋機制比較陽春,採用的方式是定期抓取 <https://github.com/StevenBlack/hosts> 上的 adblock 清單,在載入網頁時,會檢查每個 WebResourceRequest 的連結是不是來自於這份清單中的項目;是的話就傳送一個 dummy response 給 WebView,讓它既不會去浪費頻寬抓廣告,也不會在畫面上呈現出來。 ...

November 6, 2024

改善 EinkBro 的工具列設定畫面

為了要可以塞入更多的功能按鈕,而又同時可以輕鬆的設定工具列,我改寫了工具列設定畫面。 修改前和修改後的差異如下。 修改前 vs 修改後 在導入 Jetpack Compose 後,做這樣子的調整就容易多了,不需要再寫一堆無謂的 layout xml 檔案。右邊新的設定畫面,不再使用 Dialog 的方式來呈現,而是新建了一個 ToolbarConfigActivity,全畫面顯示,一方面是為了日後再加入更多的功能,以及設定;另一方面,在下方可以完整地顯示一個工具列預覽區,想調整成怎麼樣,在下面可以即時移動按鈕,不再需要望著一個直式的列表,在腦中想像成果會長成怎樣。 ...

November 6, 2024

整合 Edge TTS 文字轉語音

這篇文章會整理這一個月來整合 Edge TTS 功能到 EinkBro 中的過程。經過一連串的開發後,總算是把自己想要的功能都開發出來了。 為什麼要整合? 目前 Android 手機上的 Accessibility Service 常常在更新,它的文字轉語音效果也比前幾年有明顯的進步。但是,聽起來還是感覺得出來比較機器人一點。目前能通吃所有語言的 OpenAI tts 文字轉語音,雖然什麼語言的文字丟給它它都可以唸得出來,但是 ABC 的腔調還是聽起來不是很舒服。所以,開始著手找看看是不是有機會將其他的語音轉文字整合到 EinkBro 中。 ...

September 28, 2024

EinkBro 的更新小記: v11.16.0 & v11.17.0

果然,沒有良好的測試偶爾就是會出大包。還好,不用寫 outage report,只要趕快再推出新版,有人來問時,就說新版已經解決了。 v11.16.0 支援書籤重排! 重磅功能,不曉得為什麼我拖了那麼久沒開發,寧可用 prefix 加上數字的方式,撐了兩三年。我想,主要原因應該是:得要調整資料庫格式,將 Bookmark 加上 order 的欄位吧。有了這個欄位,才能夠將使用者移動後的新排序記錄起來。 ...

September 17, 2024

EinkBro 六月以來的一些更新

自從開始更大量地使用 ChatGPT 協助寫 code 之後,就漸漸失去了動力寫文章,因為大部分的功能只需要請 ChatGPT 幫忙產生所需程式碼,再稍微重構一下,將其套用到 EinkBro 中就行。如此一來,少了很多需要自己探索,或是值得記錄下來的內容。不過,一直這樣下去也不是辦法,所以,還是來寫寫最近有加入的新功能吧。 ...

August 29, 2024

EinkBro: 支援 Gemini API

Google 在 Google IO 2024 公布了 Gemini 1.5 Flash model,並且幾乎免費地讓開發者可以來試用。為了能夠試試它的效果,我把它也整合進了 EinkBro。本篇文章會說明整合的方式。 ...

June 15, 2024

EinkBro App 被 Google Play Store suspend

沒想到在 2024 年初竟然迎來了這樣子的結果,真的是始料未及。下面會來說說被 suspend 的原委,希望讓剛好看到這篇文章的讀者能夠有所警惕,不要踩到 Google 大大的雷。 在 2023 年 12 月,突然想到其實我可以在 EinkBro 中加入更方便的 App 更新機制。以我自己的使用習慣來說,我都會是安裝剛開發完的版本,所以都不是安裝 Google Play Store 上可能兩三週才更新一次的相對穩定版本。 ...

January 23, 2024

從 EinkBro App 中直接安裝升級版本

早該做的提升效率的事 — 從 EinkBro App 中直接安裝升級版本 手邊的 Android 手機,外加電子書閱讀器設備,總共有十幾台。常常在 EinkBro 更新後,不論在使用哪一台,都要開網頁到 Github 網站,下載 snapshot 版本,或是最新的 release 版,再安裝。 ...

December 19, 2023

Kotlin Coroutine Channel 的使用簡介

這篇文章會分享 EinkBro 在整合 OpenAI tts API 時,藉由 Kotlin Coroutine Channel 處理 API 邏輯和播放的實作。 前言 原先在 EinkBro 的朗讀功能,是利用系統的文字轉語音功能。這樣做的好處是,不用處理太多複雜的邏輯,只需要把文字丟給系統就好;但缺點是每一台設備上的文字轉語音功能支援度不同。很多時候還需要使用者事前先下載好相關資料檔,或是從系統設定中指定好想要的語音語言。對一般使用者來說,難度有點高。在使用時,也需要請使用者自己指定一下語言,不然可能會唸不出來。即便是我自己的設備,也不見得每一台都能夠正常運作。 ...

December 10, 2023

EinkBro 期待已久的功能 — 選取連結的文字!

期待了很久,一直不知道怎麼實作的功能終於做出來了!在 Android WebView中,一般來說,只可以長按非連結的文字,選取文字進行複製或其他的動作。如果想要選取連結上的文字的話,必須要用些小技巧才能達成。 ...

November 3, 2023