电子书阅读器上的浏览器 [Day27] 无痕模式

原先的 browser 实作就已经包含了无痕模式的细部功能,像是禁止使用 Cookie,和不记录浏览历史;但是却没有一个快速开关能够进到一般浏览器支援的无痕模式。

所以,今天我来讲讲怎麽实作一键进入无痕模式。

新增无痕模式开关的进入点

首先,将进入点实作在长按分页键。这是个蛮合理的位置。并在ConfigManager 中加入一个关於无痕模式的状态。

binding.omniboxTabcount.setOnLongClickListener {
    config.isIncognitoMode = !config.isIncognitoMode
    true
}

ConfigManager 的状态被改变时,BrowserActivity 会将这个状态传入当前的 WebView 分页中,然後 updateWebViewCountUI() 将分页预览按钮的图案改成是虚线的。

private val preferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
        key.equals(ConfigManager.K_IS_INCOGNITO_MODE) -> {
            ninjaWebView.incognito = config.isIncognitoMode
            updateWebViewCountUI()
            NinjaToast.showShort(
                this,
                "Incognito mode is " + if (config.isIncognitoMode) "enabled." else "disabled."
            )
        }
	...
}

WebView 中的实作

再来看看 NinjaWebView 中的修改。首先也是增加 incognito 的状态。当它被赋值时,会同时去呼叫 toggleCookieSupport(),藉此开关 Cookie 的支援。

var incognito: Boolean = false
    set(value) {
        field = value
        toggleCookieSupport(!incognito)
    }

除了 Cookie 开关外,在 NinjaWebViewClient 中的 onPageFinished() 原先有在记录浏览历转的地方,也要多加上 incognito 的判断才行:

override fun onPageFinished(view: WebView, url: String) {
    // skip translation pages
    if (config.saveHistory && !ninjaWebView.incognito && !isTranslationDomain(url)) {
        addHistoryAction(url)
    }
	...
}

如此一来,就可以在主画面快速地切换到无痕模式,不用再一样样功能去切来切去。使用上方便许多。


<<:  [Lesson12] RecyclerView

>>:  DAY12 - 档案类的物件关系厘清(1) - File, FileList, Blob

成为 Scrum Master:更基本的部分

前言 接着昨天分享的话题,针对成为 Scrum Master 的经历与想法再进行补充。 大家从标题「...

DAY 22 完成管理功能与权限

新增团购讯息 add 关键字 讯息 删除团购讯息 删除 关键字 查询团购讯息 团购 手动新增团购者...

数位变革

在疫情爆发之前,一切的一切看似都非常的正常,但是在爆发之後,所有的一切都被疫情给打乱了,并且所有的秩...

Day 04 - Spring Boot 的前世今生

结束了恼人的环境安装,但我们还没有要开始Spring Boot 的实作,因为在开始学习一项技术之前,...