@@ -50,7 +50,6 @@ import com.google.zxing.BarcodeFormat
5050import com.google.zxing.qrcode.QRCodeWriter
5151import com.google.zxing.common.BitMatrix
5252import android.widget.RadioGroup
53- import com.kododake.aabrowser.media.WebViewMediaSessionBridge
5453import com.kododake.aabrowser.settings.SettingsViews
5554import org.woheller69.freeDroidWarn.R as FreeDroidWarnR
5655
@@ -71,41 +70,6 @@ class MainActivity : AppCompatActivity() {
7170 handler.postDelayed(autoHideMenuFab, MENU_BUTTON_AUTO_HIDE_DELAY_MS )
7271 }
7372
74- private val webStateFetcher = object : Runnable {
75- override fun run () {
76- if (isDestroyed || isFinishing) return
77- webView?.evaluateJavascript("""
78- (function(){
79- var medias = document.querySelectorAll('video, audio');
80- for(var i=0; i<medias.length; i++) {
81- if(!medias[i].paused && !medias[i].muted) {
82- var dur = isNaN(medias[i].duration) ? 0 : medias[i].duration;
83- return medias[i].currentTime + ',' + dur + ',' + medias[i].paused;
84- }
85- }
86- if(medias.length > 0) {
87- var dur = isNaN(medias[0].duration) ? 0 : medias[0].duration;
88- return medias[0].currentTime + ',' + dur + ',' + medias[0].paused;
89- }
90- return '';
91- })();
92- """ .trimIndent()) { result ->
93- if (! result.isNullOrBlank() && result != " \"\" " && result != " null" ) {
94- runCatching {
95- val parts = result.replace(" \" " , " " ).split(" ," )
96- if (parts.size == 3 ) {
97- val current = parts[0 ].toDouble()
98- val dur = parts[1 ].toDouble()
99- val paused = parts[2 ].toBoolean()
100- webViewMediaSessionBridge?.updatePlaybackState(current, dur, paused)
101- }
102- }
103- }
104- }
105- handler.postDelayed(this , 1000 )
106- }
107- }
108-
10973 private var webView: android.webkit.WebView ? = null
11074 private var currentUrl: String = BrowserPreferences .defaultUrl()
11175 private var currentPageTitle: String = " "
@@ -114,7 +78,6 @@ class MainActivity : AppCompatActivity() {
11478 private var customView: View ? = null
11579 private var customViewCallback: WebChromeClient .CustomViewCallback ? = null
11680 private var isShowingCleartextDialog: Boolean = false
117- private var webViewMediaSessionBridge: WebViewMediaSessionBridge ? = null
11881 private var latestReleaseUrl: String = " https://github.com/kododake/AABrowser/releases"
11982 private val umamiTracker: UmamiTracker by lazy { UmamiTracker (applicationContext) }
12083
@@ -136,88 +99,6 @@ class MainActivity : AppCompatActivity() {
13699
137100 setupUi()
138101 setupBackPressHandling()
139- webViewMediaSessionBridge = WebViewMediaSessionBridge (
140- context = this ,
141- onPlayRequested = {
142- runOnUiThread {
143- webView?.evaluateJavascript("""
144- (function(){
145- var medias = document.querySelectorAll('video, audio');
146- for(var i=0; i<medias.length; i++) medias[i].play();
147- })();
148- """ .trimIndent(), null )
149- }
150- },
151- onPauseRequested = {
152- runOnUiThread {
153- webView?.evaluateJavascript("""
154- (function(){
155- var medias = document.querySelectorAll('video, audio');
156- for(var i=0; i<medias.length; i++) medias[i].pause();
157- })();
158- """ .trimIndent(), null )
159- }
160- },
161- onSkipForwardRequested = {
162- runOnUiThread {
163- webView?.evaluateJavascript("""
164- (function(){
165- function clickControl(re) {
166- var controls = document.querySelectorAll('button, [role="button"], [aria-label], [title], [data-tooltip]');
167- for (var i = 0; i < controls.length; i++) {
168- var el = controls[i];
169- if (!el) continue;
170- var label = (el.getAttribute('aria-label') || el.getAttribute('title') || el.getAttribute('data-tooltip') || el.textContent || '').toLowerCase();
171- if (re.test(label)) {
172- el.click();
173- return true;
174- }
175- }
176- return false;
177- }
178- if (clickControl(/next|next track|skip/)) return;
179- var medias = document.querySelectorAll('video, audio');
180- for (var i = 0; i < medias.length; i++) medias[i].currentTime += 10;
181- })();
182- """ .trimIndent(), null )
183- }
184- },
185- onSkipBackwardRequested = {
186- runOnUiThread {
187- webView?.evaluateJavascript("""
188- (function(){
189- function clickControl(re) {
190- var controls = document.querySelectorAll('button, [role="button"], [aria-label], [title], [data-tooltip]');
191- for (var i = 0; i < controls.length; i++) {
192- var el = controls[i];
193- if (!el) continue;
194- var label = (el.getAttribute('aria-label') || el.getAttribute('title') || el.getAttribute('data-tooltip') || el.textContent || '').toLowerCase();
195- if (re.test(label)) {
196- el.click();
197- return true;
198- }
199- }
200- return false;
201- }
202- if (clickControl(/previous|prev|back/)) return;
203- var medias = document.querySelectorAll('video, audio');
204- for (var i = 0; i < medias.length; i++) medias[i].currentTime -= 10;
205- })();
206- """ .trimIndent(), null )
207- }
208- },
209- onSeekRequested = { positionMs ->
210- runOnUiThread {
211- webView?.evaluateJavascript("""
212- (function(){
213- var medias = document.querySelectorAll('video, audio');
214- for(var i=0; i<medias.length; i++) medias[i].currentTime = ${positionMs / 1000.0 } ;
215- })();
216- """ .trimIndent(), null )
217- }
218- }
219- )
220- webViewMediaSessionBridge?.updateNowPlaying(currentPageTitle, currentUrl)
221102 ensureNotificationPermissionIfNeeded()
222103 showFreeDroidWarnOnUpgradeMaterial()
223104 }
@@ -228,38 +109,23 @@ class MainActivity : AppCompatActivity() {
228109 extractBrowsableUrl(intent)?.let { loadUrlFromIntent(it) }
229110 }
230111
231- override fun onStart () {
232- super .onStart()
233- webViewMediaSessionBridge?.onHostResume()
234- }
235-
236112 override fun onResume () {
237113 super .onResume()
238- handler.post(webStateFetcher)
239114 webView?.onResume()
240115 refreshBookmarks()
241116 syncUserAgentProfile()
242117 }
243118
244119 override fun onPause () {
245- handler.removeCallbacks(webStateFetcher)
246120 exitFullscreen()
247121 webView?.onPause()
248122 super .onPause()
249123 }
250124
251- override fun onStop () {
252- webViewMediaSessionBridge?.onHostPause()
253- super .onStop()
254- }
255-
256125 override fun onDestroy () {
257- handler.removeCallbacks(webStateFetcher)
258126 handler.removeCallbacks(autoHideMenuFab)
259127 handler.removeCallbacks(showMenuFabRunnable)
260128 exitFullscreen()
261- webViewMediaSessionBridge?.release()
262- webViewMediaSessionBridge = null
263129 binding.webView.releaseCompletely()
264130 webView = null
265131 super .onDestroy()
@@ -335,7 +201,6 @@ class MainActivity : AppCompatActivity() {
335201 binding.addressEdit.setSelection(binding.addressEdit.text?.length ? : 0 )
336202 }
337203 BrowserPreferences .persistUrl(this , url)
338- webViewMediaSessionBridge?.updateNowPlaying(currentPageTitle, currentUrl)
339204 updateNavigationButtons()
340205 updateConnectionSecurityIcon(url)
341206 }
@@ -345,7 +210,6 @@ class MainActivity : AppCompatActivity() {
345210 val resolvedTitle = title.orEmpty()
346211 currentPageTitle = resolvedTitle
347212 binding.pageTitle.text = resolvedTitle
348- webViewMediaSessionBridge?.updateNowPlaying(currentPageTitle, currentUrl)
349213 }
350214 },
351215 onProgressChange = { progress ->
0 commit comments