Fixing ViewCaptureRule not unregistered if activity is destroyed

Bug: 291638593
Test: Presubmit
Flag: N/A
Change-Id: I86daf9fac210340b037d376d882ac5872c596ae4
This commit is contained in:
Sunny Goyal
2023-07-19 15:57:29 -07:00
parent 6779101b26
commit bb50f3cd8e
3 changed files with 3 additions and 13 deletions

View File

@@ -116,8 +116,7 @@ public class FallbackRecentsTest {
Utilities.enableRunningInTestHarnessForTests();
}
final ViewCaptureRule viewCaptureRule = new ViewCaptureRule(
RecentsActivity.ACTIVITY_TRACKER::getCreatedActivity);
final ViewCaptureRule viewCaptureRule = new ViewCaptureRule();
mOrderSensitiveRules = RuleChain
.outerRule(new SamplerRule())
.around(new NavigationModeSwitchRule(mLauncher))

View File

@@ -201,8 +201,7 @@ public abstract class AbstractLauncherUiTest {
}
protected TestRule getRulesInsideActivityMonitor() {
final ViewCaptureRule viewCaptureRule = new ViewCaptureRule(
Launcher.ACTIVITY_TRACKER::getCreatedActivity);
final ViewCaptureRule viewCaptureRule = new ViewCaptureRule();
final RuleChain inner = RuleChain
.outerRule(new PortraitLandscapeRunner(this))
.around(new FailureWatcher(mLauncher, viewCaptureRule::getViewCaptureData))

View File

@@ -25,7 +25,6 @@ import com.android.app.viewcapture.ViewCapture.MAIN_EXECUTOR
import com.android.app.viewcapture.data.ExportedData
import com.android.launcher3.util.ActivityLifecycleCallbacksAdapter
import com.android.launcher3.util.viewcapture_analysis.ViewCaptureAnalyzer
import java.util.function.Supplier
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
@@ -36,7 +35,7 @@ import org.junit.runners.model.Statement
*
* This rule will not work in OOP tests that don't have access to the activity under test.
*/
class ViewCaptureRule(var alreadyOpenActivitySupplier: Supplier<Activity?>) : TestRule {
class ViewCaptureRule : TestRule {
private val viewCapture = SimpleViewCapture("test-view-capture")
var viewCaptureData: ExportedData? = null
private set
@@ -47,20 +46,13 @@ class ViewCaptureRule(var alreadyOpenActivitySupplier: Supplier<Activity?>) : Te
viewCaptureData = null
val windowListenerCloseables = mutableListOf<SafeCloseable>()
val alreadyOpenActivity = alreadyOpenActivitySupplier.get()
if (alreadyOpenActivity != null) {
startCapture(windowListenerCloseables, alreadyOpenActivity)
}
val lifecycleCallbacks =
object : ActivityLifecycleCallbacksAdapter {
override fun onActivityCreated(activity: Activity, bundle: Bundle?) {
super.onActivityCreated(activity, bundle)
startCapture(windowListenerCloseables, activity)
}
override fun onActivityDestroyed(activity: Activity) {
super.onActivityDestroyed(activity)
viewCapture.stopCapture(activity.window.decorView)
}
}