Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import com.ms.square.debugoverlay.internal.data.source.OverlayPreferences
import com.ms.square.debugoverlay.internal.data.source.SharedPreferencesOverlayPreferences
import com.ms.square.debugoverlay.internal.ui.DebugPanelActivity
import com.ms.square.debugoverlay.internal.ui.DraggableOverlayPanel
import com.ms.square.debugoverlay.internal.util.findActivity
import com.ms.square.debugoverlay.internal.util.findActivityOrNull
import com.ms.square.debugoverlay.internal.util.isDarkTheme
import curtains.Curtains
import curtains.OnRootViewsChangedListener
Expand Down Expand Up @@ -182,7 +182,7 @@ internal class OverlayViewManager(
}

// Exclude windows belonging to DebugOverlay's own activities
if (view.findActivity()?.isDebugOverlayActivity() == true) return@lastOrNull false
if (view.findActivityOrNull()?.isDebugOverlayActivity() == true) return@lastOrNull false

view.windowToken != null && view.isShown
}
Expand Down Expand Up @@ -388,7 +388,8 @@ internal class OverlayViewManager(
DebugOverlay.overlayDataRepository.stopJankStatsTracking(activity)
}
}
private fun isCurrentTarget(activity: Activity): Boolean = currentTargetWindowView?.findActivity() === activity
private fun isCurrentTarget(activity: Activity): Boolean =
currentTargetWindowView?.findActivityOrNull() === activity
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import com.ms.square.debugoverlay.internal.Logger
import com.ms.square.debugoverlay.internal.bugreport.BugReportGenerator
import com.ms.square.debugoverlay.internal.bugreport.model.BugReportResult
import com.ms.square.debugoverlay.internal.bugreport.model.UserInput
import com.ms.square.debugoverlay.internal.util.findActivityOrNull
import com.ms.square.debugoverlay.internal.util.isDarkTheme
import com.ms.square.debugoverlay.internal.util.runCatchingNonCancellation
import com.ms.square.debugoverlay.model.ExportResult
Expand Down Expand Up @@ -331,15 +332,15 @@ internal class BugReportActivity : ComponentActivity() {
companion object {
fun launchWithDraftPicker(context: Context) {
val intent = Intent(context, BugReportActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
if (context.findActivityOrNull() == null) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
putExtra(INTENT_EXTRA_SHOW_DRAFT_PICKER, true)
}
context.startActivity(intent)
}

fun launchWithMetadataDialog(context: Context, bugCapturedFolderPath: String) {
val intent = Intent(context, BugReportActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
if (context.findActivityOrNull() == null) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
putExtra(INTENT_EXTRA_CAPTURE_FOLDER, bugCapturedFolderPath)
}
context.startActivity(intent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ internal fun Context.defaultDisplay(): Display? {
return dm?.getDisplay(Display.DEFAULT_DISPLAY)
}

internal tailrec fun Context.findActivity(): Activity = when (this) {
internal tailrec fun Context.findActivityOrNull(): Activity? = when (this) {
is Activity -> this
is ContextWrapper -> this.baseContext.findActivity()
else -> throw IllegalArgumentException("Could not find activity!")
is ContextWrapper -> this.baseContext.findActivityOrNull()
else -> null
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import android.app.Activity
import android.view.View
import curtains.phoneWindow

internal fun View.findActivity(): Activity? {
internal fun View.findActivityOrNull(): Activity? {
val callback = phoneWindow?.callback
// check for the callback first as context.findActivity() won't work for certain contexts such as DecorContext.
// for dialogs, callback could be non-Activity (ex..DialogWrapper), so fallback to the findActivity for those cases.
return callback as? Activity ?: runCatching { context.findActivity() }.getOrNull()
// check for the callback first as context unwrapping won't work for certain contexts such as DecorContext.
// for dialogs, callback could be non-Activity (ex..DialogWrapper), so fallback to unwrapping the context.
return callback as? Activity ?: context.findActivityOrNull()
}
Loading