Remove direct IMMS dependency from DevelopmentTiles
Using ImeTracing instead of IInputMethodManager so we can get rid of the direct dependency between Settings DevelopmentTiles and IInputMethodManager. Bug: 175742251 Test: Manually test ime winscope works properly Test: make RunSettingsRoboTests ROBOTEST_FILTER="WinscopeTraceTest" Change-Id: I87e6e841a50b671b7f99c7afff562f3b9a6e3db9
This commit is contained in:
@@ -48,8 +48,8 @@ import android.widget.Toast;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.internal.app.LocalePicker;
|
||||
import com.android.internal.inputmethod.ImeTracing;
|
||||
import com.android.internal.statusbar.IStatusBarService;
|
||||
import com.android.internal.view.IInputMethodManager;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.development.WirelessDebuggingPreferenceController;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
@@ -198,7 +198,7 @@ public abstract class DevelopmentTiles extends TileService {
|
||||
static final int SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE = 1026;
|
||||
private IBinder mSurfaceFlinger;
|
||||
private IWindowManager mWindowManager;
|
||||
private IInputMethodManager mInputMethodManager;
|
||||
private ImeTracing mImeTracing;
|
||||
private Toast mToast;
|
||||
|
||||
@Override
|
||||
@@ -206,8 +206,7 @@ public abstract class DevelopmentTiles extends TileService {
|
||||
super.onCreate();
|
||||
mWindowManager = WindowManagerGlobal.getWindowManagerService();
|
||||
mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
|
||||
mInputMethodManager = IInputMethodManager.Stub.asInterface(
|
||||
ServiceManager.getService("input_method"));
|
||||
mImeTracing = ImeTracing.getInstance();
|
||||
Context context = getApplicationContext();
|
||||
CharSequence text = "Trace files written to /data/misc/wmtrace";
|
||||
mToast = Toast.makeText(context, text, Toast.LENGTH_LONG);
|
||||
@@ -261,12 +260,7 @@ public abstract class DevelopmentTiles extends TileService {
|
||||
}
|
||||
|
||||
private boolean isImeTraceEnabled() {
|
||||
try {
|
||||
return mInputMethodManager.isImeTraceEnabled();
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Could not get ime trace status, defaulting to false.", e);
|
||||
}
|
||||
return false;
|
||||
return mImeTracing.isEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -323,14 +317,10 @@ public abstract class DevelopmentTiles extends TileService {
|
||||
}
|
||||
|
||||
private void setImeTraceEnabled(boolean isEnabled) {
|
||||
try {
|
||||
if (isEnabled) {
|
||||
mInputMethodManager.startImeTrace();
|
||||
} else {
|
||||
mInputMethodManager.stopImeTrace();
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Could not set ime trace status." + e.toString());
|
||||
if (isEnabled) {
|
||||
mImeTracing.startImeTrace();
|
||||
} else {
|
||||
mImeTracing.stopImeTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,7 @@ import android.os.RemoteException;
|
||||
import android.view.IWindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.internal.view.IInputMethodManager;
|
||||
import com.android.internal.inputmethod.ImeTracing;
|
||||
import com.android.settings.testutils.shadow.ShadowParcel;
|
||||
|
||||
import org.junit.After;
|
||||
@@ -56,7 +56,7 @@ public class WinscopeTraceTest {
|
||||
@Mock
|
||||
private IWindowManager mWindowManager;
|
||||
@Mock
|
||||
private IInputMethodManager mInputMethodManager;
|
||||
private ImeTracing mImeTracing;
|
||||
@Mock
|
||||
private IBinder mSurfaceFlinger;
|
||||
@Mock
|
||||
@@ -69,7 +69,7 @@ public class WinscopeTraceTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mWinscopeTrace = spy(new DevelopmentTiles.WinscopeTrace());
|
||||
ReflectionHelpers.setField(mWinscopeTrace, "mWindowManager", mWindowManager);
|
||||
ReflectionHelpers.setField(mWinscopeTrace, "mInputMethodManager", mInputMethodManager);
|
||||
ReflectionHelpers.setField(mWinscopeTrace, "mImeTracing", mImeTracing);
|
||||
ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", mSurfaceFlinger);
|
||||
ReflectionHelpers.setField(mWinscopeTrace, "mToast", mToast);
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class WinscopeTraceTest {
|
||||
public void sfReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
|
||||
// Assume Window Trace and Input Method Manager are disabled.
|
||||
doReturn(false).when(mWindowManager).isWindowTraceEnabled();
|
||||
doReturn(false).when(mInputMethodManager).isImeTraceEnabled();
|
||||
doReturn(false).when(mImeTracing).isEnabled();
|
||||
ShadowParcel.sReadBoolResult = true;
|
||||
assertThat(mWinscopeTrace.isEnabled()).isTrue();
|
||||
verify(mSurfaceFlinger)
|
||||
@@ -114,7 +114,7 @@ public class WinscopeTraceTest {
|
||||
public void wmAndSfAndImmReturnTraceDisabled_shouldReturnDisabled() throws RemoteException {
|
||||
ShadowParcel.sReadBoolResult = false;
|
||||
doReturn(false).when(mWindowManager).isWindowTraceEnabled();
|
||||
doReturn(false).when(mInputMethodManager).isImeTraceEnabled();
|
||||
doReturn(false).when(mImeTracing).isEnabled();
|
||||
assertThat(mWinscopeTrace.isEnabled()).isFalse();
|
||||
verify(mSurfaceFlinger)
|
||||
.transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(),
|
||||
@@ -127,7 +127,7 @@ public class WinscopeTraceTest {
|
||||
throws RemoteException {
|
||||
ShadowParcel.sReadBoolResult = false;
|
||||
doReturn(false).when(mWindowManager).isWindowTraceEnabled();
|
||||
doReturn(true).when(mInputMethodManager).isImeTraceEnabled();
|
||||
doReturn(true).when(mImeTracing).isEnabled();
|
||||
assertThat(mWinscopeTrace.isEnabled()).isTrue();
|
||||
verify(mSurfaceFlinger)
|
||||
.transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(),
|
||||
@@ -140,7 +140,7 @@ public class WinscopeTraceTest {
|
||||
public void immReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException {
|
||||
// Assume Window Manager and Surface Trace are disabled.
|
||||
ShadowParcel.sReadBoolResult = false;
|
||||
doReturn(true).when(mInputMethodManager).isImeTraceEnabled();
|
||||
doReturn(true).when(mImeTracing).isEnabled();
|
||||
assertThat(mWinscopeTrace.isEnabled()).isTrue();
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ public class WinscopeTraceTest {
|
||||
public void immReturnsTraceDisabled_shouldReturnDisabled() throws RemoteException {
|
||||
// Assume Window Manager and Surface Trace are disabled.
|
||||
ShadowParcel.sReadBoolResult = false;
|
||||
doReturn(false).when(mInputMethodManager).isImeTraceEnabled();
|
||||
doReturn(false).when(mImeTracing).isEnabled();
|
||||
assertThat(mWinscopeTrace.isEnabled()).isFalse();
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ public class WinscopeTraceTest {
|
||||
public void sfUnavailableAndWmAndImmReturnTraceDisabled_shouldReturnDisabled()
|
||||
throws RemoteException {
|
||||
doReturn(false).when(mWindowManager).isWindowTraceEnabled();
|
||||
doReturn(false).when(mInputMethodManager).isImeTraceEnabled();
|
||||
doReturn(false).when(mImeTracing).isEnabled();
|
||||
ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", null);
|
||||
assertThat(mWinscopeTrace.isEnabled()).isFalse();
|
||||
}
|
||||
@@ -182,8 +182,8 @@ public class WinscopeTraceTest {
|
||||
@Test
|
||||
public void setIsEnableTrue_shouldEnableImeTrace() throws RemoteException {
|
||||
mWinscopeTrace.setIsEnabled(true);
|
||||
verify(mInputMethodManager).startImeTrace();
|
||||
verifyNoMoreInteractions(mInputMethodManager);
|
||||
verify(mImeTracing).startImeTrace();
|
||||
verifyNoMoreInteractions(mImeTracing);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -210,8 +210,8 @@ public class WinscopeTraceTest {
|
||||
@Config(shadows = ShadowParcel.class)
|
||||
public void setIsEnableFalse_shouldDisableImeTrace() throws RemoteException {
|
||||
mWinscopeTrace.setIsEnabled(false);
|
||||
verify(mInputMethodManager).stopImeTrace();
|
||||
verifyNoMoreInteractions(mInputMethodManager);
|
||||
verify(mImeTracing).stopImeTrace();
|
||||
verifyNoMoreInteractions(mImeTracing);
|
||||
verify(mToast).show();
|
||||
}
|
||||
|
||||
@@ -244,17 +244,6 @@ public class WinscopeTraceTest {
|
||||
mWinscopeTrace.setIsEnabled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify when input method manager call throws a remote exception, it is handled without
|
||||
* re-throwing the exception.
|
||||
*/
|
||||
@Test
|
||||
public void setIsEnableAndImmThrowsRemoteException_shouldFailGracefully()
|
||||
throws RemoteException {
|
||||
doThrow(new RemoteException("Unknown")).when(mInputMethodManager).isImeTraceEnabled();
|
||||
mWinscopeTrace.setIsEnabled(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify is surface flinger is not available not calls are made to it.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user