diff --git a/AndroidManifest.xml b/AndroidManifest.xml index cca450a4df5..6aebfbbb027 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4392,20 +4392,6 @@ android:value="true"/> - - - - - - - - - - - - diff --git a/res/values/strings.xml b/res/values/strings.xml index 14e007e0291..674df75c8b2 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9960,9 +9960,6 @@ Disable automatic revocation of adb authorizations for systems that have not reconnected within the default (7 days) or user-configured (minimum 1 day) amount of time. - - Winscope Trace - Sensors Off diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java index a5bbd4a4231..cf0d4d1847f 100644 --- a/src/com/android/settings/development/qstile/DevelopmentTiles.java +++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java @@ -29,9 +29,7 @@ import android.database.ContentObserver; import android.hardware.SensorPrivacyManager; import android.net.Uri; import android.os.Handler; -import android.os.IBinder; import android.os.Looper; -import android.os.Parcel; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; @@ -45,10 +43,7 @@ import android.view.ThreadedRenderer; import android.view.WindowManagerGlobal; 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.settings.development.WirelessDebuggingPreferenceController; import com.android.settings.overlay.FeatureFactory; @@ -203,173 +198,6 @@ public abstract class DevelopmentTiles extends TileService { } } - /** - * Tile to toggle Winscope trace which consists of Window and Layer traces. - */ - public static class WinscopeTrace extends DevelopmentTiles { - @VisibleForTesting - static final int SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE = 1025; - @VisibleForTesting - static final int SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE = 1026; - private static final String VIEW_CAPTURE_ENABLED = "view_capture_enabled"; - private IBinder mSurfaceFlinger; - private IWindowManager mWindowManager; - private ImeTracing mImeTracing; - private Toast mToast; - - @Override - public void onCreate() { - super.onCreate(); - mWindowManager = WindowManagerGlobal.getWindowManagerService(); - mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger"); - mImeTracing = ImeTracing.getInstance(); - Context context = getApplicationContext(); - CharSequence text = "Trace files written to /data/misc/wmtrace"; - mToast = Toast.makeText(context, text, Toast.LENGTH_LONG); - } - - private boolean isWindowTraceEnabled() { - try { - return mWindowManager.isWindowTraceEnabled(); - } catch (RemoteException e) { - Log.e(TAG, - "Could not get window trace status, defaulting to false." + e.toString()); - } - return false; - } - - private boolean isLayerTraceEnabled() { - boolean layerTraceEnabled = false; - Parcel reply = null; - Parcel data = null; - try { - if (mSurfaceFlinger != null) { - reply = Parcel.obtain(); - data = Parcel.obtain(); - data.writeInterfaceToken("android.ui.ISurfaceComposer"); - mSurfaceFlinger.transact(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE, - data, reply, 0 /* flags */); - layerTraceEnabled = reply.readBoolean(); - } - } catch (RemoteException e) { - Log.e(TAG, "Could not get layer trace status, defaulting to false." + e.toString()); - } finally { - if (data != null) { - data.recycle(); - reply.recycle(); - } - } - return layerTraceEnabled; - } - - private boolean isSystemUiTracingEnabled() { - try { - final IStatusBarService statusBarService = IStatusBarService.Stub.asInterface( - ServiceManager.checkService(Context.STATUS_BAR_SERVICE)); - if (statusBarService != null) { - return statusBarService.isTracing(); - } - } catch (RemoteException e) { - Log.e(TAG, "Could not get system ui tracing status." + e.toString()); - } - return false; - } - - private boolean isImeTraceEnabled() { - return mImeTracing.isEnabled(); - } - - private boolean isViewCaptureEnabled() { - // Add null checking to avoid test case failure. - if (getApplicationContext() != null) { - return Settings.Global.getInt(getApplicationContext().getContentResolver(), - VIEW_CAPTURE_ENABLED, 0) != 0; - } - return false; - } - - @Override - protected boolean isEnabled() { - return isWindowTraceEnabled() || isLayerTraceEnabled() || isSystemUiTracingEnabled() - || isImeTraceEnabled() || isViewCaptureEnabled(); - } - - private void setWindowTraceEnabled(boolean isEnabled) { - try { - if (isEnabled) { - mWindowManager.startWindowTrace(); - } else { - mWindowManager.stopWindowTrace(); - } - } catch (RemoteException e) { - Log.e(TAG, "Could not set window trace status." + e.toString()); - } - } - - private void setLayerTraceEnabled(boolean isEnabled) { - Parcel data = null; - try { - if (mSurfaceFlinger != null) { - data = Parcel.obtain(); - data.writeInterfaceToken("android.ui.ISurfaceComposer"); - data.writeInt(isEnabled ? 1 : 0); - mSurfaceFlinger.transact(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE, - data, null, 0 /* flags */); - } - } catch (RemoteException e) { - Log.e(TAG, "Could not set layer tracing." + e.toString()); - } finally { - if (data != null) { - data.recycle(); - } - } - } - - private void setSystemUiTracing(boolean isEnabled) { - try { - final IStatusBarService statusBarService = IStatusBarService.Stub.asInterface( - ServiceManager.checkService(Context.STATUS_BAR_SERVICE)); - if (statusBarService != null) { - if (isEnabled) { - statusBarService.startTracing(); - } else { - statusBarService.stopTracing(); - } - } - } catch (RemoteException e) { - Log.e(TAG, "Could not set system ui tracing." + e.toString()); - } - } - - private void setImeTraceEnabled(boolean isEnabled) { - if (isEnabled) { - mImeTracing.startImeTrace(); - } else { - mImeTracing.stopImeTrace(); - } - } - - private void setViewCaptureEnabled(boolean isEnabled) { - // Add null checking to avoid test case failure. - if (getApplicationContext() != null) { - Settings.Global.putInt(getApplicationContext() - .getContentResolver(), VIEW_CAPTURE_ENABLED, isEnabled ? 1 : 0); - } - } - - @Override - protected void setIsEnabled(boolean isEnabled) { - setWindowTraceEnabled(isEnabled); - setLayerTraceEnabled(isEnabled); - setSystemUiTracing(isEnabled); - setImeTraceEnabled(isEnabled); - setViewCaptureEnabled(isEnabled); - if (!isEnabled) { - mToast.show(); - } - } - } - /** * Tile to toggle sensors off to control camera, mic, and sensors managed by the SensorManager. */ diff --git a/tests/robotests/src/com/android/settings/development/qstile/WinscopeTraceTest.java b/tests/robotests/src/com/android/settings/development/qstile/WinscopeTraceTest.java deleted file mode 100644 index ad495c740f3..00000000000 --- a/tests/robotests/src/com/android/settings/development/qstile/WinscopeTraceTest.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.development.qstile; - -import static com.android.settings.development.qstile.DevelopmentTiles.WinscopeTrace.SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE; -import static com.android.settings.development.qstile.DevelopmentTiles.WinscopeTrace.SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isNull; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; - -import android.os.IBinder; -import android.os.RemoteException; -import android.view.IWindowManager; -import android.widget.Toast; - -import androidx.test.core.app.ApplicationProvider; - -import com.android.internal.inputmethod.ImeTracing; -import com.android.settings.testutils.shadow.ShadowParcel; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; -import org.robolectric.util.ReflectionHelpers; - -@RunWith(RobolectricTestRunner.class) -public class WinscopeTraceTest { - - @Mock - private IWindowManager mWindowManager; - @Mock - private ImeTracing mImeTracing; - @Mock - private IBinder mSurfaceFlinger; - @Mock - private Toast mToast; - - private DevelopmentTiles.WinscopeTrace mWinscopeTrace; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mWinscopeTrace = spy(new DevelopmentTiles.WinscopeTrace()); - doReturn(ApplicationProvider.getApplicationContext()).when( - mWinscopeTrace).getApplicationContext(); - - ReflectionHelpers.setField(mWinscopeTrace, "mWindowManager", mWindowManager); - ReflectionHelpers.setField(mWinscopeTrace, "mImeTracing", mImeTracing); - ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", mSurfaceFlinger); - ReflectionHelpers.setField(mWinscopeTrace, "mToast", mToast); - } - - @After - public void teardown() { - verifyNoMoreInteractions(mToast); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void wmReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException { - // Assume Surface Trace and Input Method Manager are disabled. - ShadowParcel.sReadBoolResult = false; - doReturn(true).when(mWindowManager).isWindowTraceEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isTrue(); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void sfReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException { - // Assume Window Trace and Input Method Manager are disabled. - doReturn(false).when(mWindowManager).isWindowTraceEnabled(); - doReturn(false).when(mImeTracing).isEnabled(); - ShadowParcel.sReadBoolResult = true; - assertThat(mWinscopeTrace.isEnabled()).isTrue(); - verify(mSurfaceFlinger) - .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(), - eq(0 /* flags */)); - verifyNoMoreInteractions(mSurfaceFlinger); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void sfAndWmReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException { - ShadowParcel.sReadBoolResult = true; - doReturn(true).when(mWindowManager).isWindowTraceEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isTrue(); - } - - @Test - public void wmAndSfAndImmReturnTraceDisabled_shouldReturnDisabled() throws RemoteException { - ShadowParcel.sReadBoolResult = false; - doReturn(false).when(mWindowManager).isWindowTraceEnabled(); - doReturn(false).when(mImeTracing).isEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isFalse(); - verify(mSurfaceFlinger) - .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(), - eq(0 /* flags */)); - verifyNoMoreInteractions(mSurfaceFlinger); - } - - @Test - public void wmAndSfReturnTraceDisabled_immReturnsTraceEnabled_shouldReturnEnabled() - throws RemoteException { - ShadowParcel.sReadBoolResult = false; - doReturn(false).when(mWindowManager).isWindowTraceEnabled(); - doReturn(true).when(mImeTracing).isEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isTrue(); - verify(mSurfaceFlinger) - .transact(eq(SURFACE_FLINGER_LAYER_TRACE_STATUS_CODE), any(), any(), - eq(0 /* flags */)); - verifyNoMoreInteractions(mSurfaceFlinger); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void immReturnsTraceEnabled_shouldReturnEnabled() throws RemoteException { - // Assume Window Manager and Surface Trace are disabled. - ShadowParcel.sReadBoolResult = false; - doReturn(true).when(mImeTracing).isEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isTrue(); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void immReturnsTraceDisabled_shouldReturnDisabled() throws RemoteException { - // Assume Window Manager and Surface Trace are disabled. - ShadowParcel.sReadBoolResult = false; - doReturn(false).when(mImeTracing).isEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isFalse(); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void wmThrowsRemoteExAndSfReturnsTraceDisabled_shouldReturnDisabled() - throws RemoteException { - ShadowParcel.sReadBoolResult = false; - doThrow(new RemoteException("Unknown")) - .when(mWindowManager).isWindowTraceEnabled(); - assertThat(mWinscopeTrace.isEnabled()).isFalse(); - } - - @Test - public void sfUnavailableAndWmAndImmReturnTraceDisabled_shouldReturnDisabled() - throws RemoteException { - doReturn(false).when(mWindowManager).isWindowTraceEnabled(); - doReturn(false).when(mImeTracing).isEnabled(); - ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", null); - assertThat(mWinscopeTrace.isEnabled()).isFalse(); - } - - @Test - public void setIsEnableTrue_shouldEnableWindowTrace() throws RemoteException { - mWinscopeTrace.setIsEnabled(true); - verify(mWindowManager).startWindowTrace(); - verifyNoMoreInteractions(mWindowManager); - } - - @Test - public void setIsEnableTrue_shouldEnableImeTrace() throws RemoteException { - mWinscopeTrace.setIsEnabled(true); - verify(mImeTracing).startImeTrace(); - verifyNoMoreInteractions(mImeTracing); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void setIsEnableTrue_shouldEnableLayerTrace() throws RemoteException { - mWinscopeTrace.setIsEnabled(true); - assertThat(ShadowParcel.sWriteIntResult).isEqualTo(1); - verify(mSurfaceFlinger) - .transact(eq(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE), any(), isNull(), - eq(0 /* flags */)); - verifyNoMoreInteractions(mSurfaceFlinger); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void setIsEnableFalse_shouldDisableWindowTrace() throws RemoteException { - mWinscopeTrace.setIsEnabled(false); - verify(mWindowManager).stopWindowTrace(); - verifyNoMoreInteractions(mWindowManager); - verify(mToast).show(); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void setIsEnableFalse_shouldDisableImeTrace() throws RemoteException { - mWinscopeTrace.setIsEnabled(false); - verify(mImeTracing).stopImeTrace(); - verifyNoMoreInteractions(mImeTracing); - verify(mToast).show(); - } - - @Test - @Config(shadows = ShadowParcel.class) - public void setIsEnableFalse_shouldDisableLayerTrace() throws RemoteException { - mWinscopeTrace.setIsEnabled(false); - assertThat(ShadowParcel.sWriteIntResult).isEqualTo(0); - verify(mSurfaceFlinger) - .transact(eq(SURFACE_FLINGER_LAYER_TRACE_CONTROL_CODE), any(), isNull(), - eq(0 /* flags */)); - verifyNoMoreInteractions(mSurfaceFlinger); - verify(mToast).show(); - } - - @Test - public void setIsEnableFalse_shouldShowToast() { - mWinscopeTrace.setIsEnabled(false); - verify(mToast).show(); - } - - /** - * Verify when window manager call throws a remote exception, it is handled without - * re-throwing the exception. - */ - @Test - public void setIsEnableAndWmThrowsRemoteException_shouldFailGracefully() - throws RemoteException { - doThrow(new RemoteException("Unknown")).when(mWindowManager).isWindowTraceEnabled(); - mWinscopeTrace.setIsEnabled(true); - } - - /** - * Verify is surface flinger is not available not calls are made to it. - */ - @Test - public void setIsEnableAndSfUnavailable_shouldFailGracefully() { - ReflectionHelpers.setField(mWinscopeTrace, "mSurfaceFlinger", null); - mWinscopeTrace.setIsEnabled(true); - verifyNoMoreInteractions(mSurfaceFlinger); - } -}