Prepares the main looper for UiAutomator shell command.

The underlying UiAutomation object uses classes which expect
the main looper to have been prepared.

Fix: 289444999
Test: adb shell uiautomator dump
Test: Use go/hsv to take a snapshot
Change-Id: I43fcc4e9b4c1ab6e09aacd73f638208094641554
This commit is contained in:
Daniel Norman
2023-07-10 12:20:09 -07:00
parent 1c547cdb91
commit 5e92d2e24e

View File

@@ -8,6 +8,7 @@ import android.app.UiAutomation;
import android.app.UiAutomationConnection;
import android.content.Intent;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.RemoteException;
/**
@@ -26,6 +27,10 @@ public class UiAutomationShellWrapper {
throw new IllegalStateException("Already connected!");
}
mHandlerThread.start();
// The AccessibilityInteractionClient used by UiAutomation expects the main looper to
// be prepared. In most contexts this is normally done automatically, but must be called
// explicitly here because this is a shell tool.
Looper.prepareMainLooper();
mUiAutomation = new UiAutomation(mHandlerThread.getLooper(),
new UiAutomationConnection());
mUiAutomation.connect();