From 3e617245b52c01c50a383317b5a0a4934514f97e Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Tue, 7 Jul 2020 12:09:08 -0700 Subject: [PATCH] For #12345: catch SecurityException when calling reportFullyDrawn. That's amazing! I've got the same combination on my luggage. --- .../main/java/org/mozilla/fenix/ext/Activity.kt | 16 ++++++++++++++++ .../fenix/perf/StartupReportFullyDrawn.kt | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index 7dd2b3dce..ab0ce02fe 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -7,6 +7,8 @@ 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. @@ -22,3 +24,17 @@ fun Activity.enterToImmersiveMode() { 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") + } +} diff --git a/app/src/main/java/org/mozilla/fenix/perf/StartupReportFullyDrawn.kt b/app/src/main/java/org/mozilla/fenix/perf/StartupReportFullyDrawn.kt index d08dd59bd..695359e2c 100644 --- a/app/src/main/java/org/mozilla/fenix/perf/StartupReportFullyDrawn.kt +++ b/app/src/main/java/org/mozilla/fenix/perf/StartupReportFullyDrawn.kt @@ -9,6 +9,7 @@ import android.view.View import androidx.core.view.doOnPreDraw import kotlinx.android.synthetic.main.activity_home.* import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.ext.reportFullyDrawnSafe import org.mozilla.fenix.home.sessioncontrol.viewholders.topsites.TopSiteItemViewHolder import org.mozilla.fenix.perf.StartupTimelineStateMachine.StartupDestination.APP_LINK import org.mozilla.fenix.perf.StartupTimelineStateMachine.StartupDestination.HOMESCREEN @@ -64,6 +65,6 @@ class StartupReportFullyDrawn { // - the difference in timing is minimal (< 7ms on Pixel 2) // - if we compare against another app using a preDrawListener, as we are with Fennec, it // should be comparable - view.doOnPreDraw { activity.reportFullyDrawn() } + view.doOnPreDraw { activity.reportFullyDrawnSafe() } } }