/* 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.mozilla.fenix.ext import android.app.Activity import android.view.View import android.view.WindowManager import mozilla.components.support.base.log.Log import org.mozilla.fenix.perf.Performance /** * Attempts to call immersive mode using the View to hide the status bar and navigation buttons. * * We don't use the equivalent function from Android Components because the stable flag messes * with the toolbar. See #1998 and #3272. */ fun Activity.enterToImmersiveMode() { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) } /** * Calls [Activity.reportFullyDrawn] while also preventing crashes under some circumstances. */ fun Activity.reportFullyDrawnSafe() { try { reportFullyDrawn() } catch (e: SecurityException) { // This exception is throw on some Samsung devices. We were unable to identify the root // cause but suspect it's related to Samsung security features. See // https://github.com/mozilla-mobile/fenix/issues/12345#issuecomment-655058864 for details. Log.log(Log.Priority.ERROR, Performance.TAG, e, "Unable to call reportFullyDrawn") } }