Merge "Support AIDL IDumpstateDevice service in verbose vendor logging" into tm-qpr-dev
diff --git a/Android.bp b/Android.bp
index 5bf5514..11a0d18 100644
--- a/Android.bp
+++ b/Android.bp
@@ -83,6 +83,7 @@
"zxing-core-1.7",
"android.hardware.dumpstate-V1.0-java",
"android.hardware.dumpstate-V1.1-java",
+ "android.hardware.dumpstate-V1-java",
"lottie",
"WifiTrackerLib",
"SettingsLibActivityEmbedding",
diff --git a/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java b/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java
index e1db74d..051cede 100644
--- a/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java
+++ b/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.hardware.dumpstate.V1_0.IDumpstateDevice;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -40,8 +41,12 @@
private static final String ENABLE_VERBOSE_VENDOR_LOGGING_KEY = "enable_verbose_vendor_logging";
private static final int DUMPSTATE_HAL_VERSION_UNKNOWN = -1;
- private static final int DUMPSTATE_HAL_VERSION_1_0 = 0;
- private static final int DUMPSTATE_HAL_VERSION_1_1 = 1;
+ private static final int DUMPSTATE_HAL_VERSION_1_0 = 0; // HIDL v1.0
+ private static final int DUMPSTATE_HAL_VERSION_1_1 = 1; // HIDL v1.1
+ private static final int DUMPSTATE_HAL_VERSION_2_0 = 2; // AIDL v1
+
+ private static final String DUMP_STATE_AIDL_SERVICE_NAME =
+ android.hardware.dumpstate.IDumpstateDevice.DESCRIPTOR + "/default";
private int mDumpstateHalVersion;
@@ -57,9 +62,8 @@
@Override
public boolean isAvailable() {
- // Only show preference when IDumpstateDevice v1.1 is avalaible
- // This is temperary strategy that may change later.
- return isIDumpstateDeviceV1_1ServiceAvailable();
+ // Only show preference when IDumpstateDevice AIDL or HIDL v1.1 service is available
+ return isIDumpstateDeviceAidlServiceAvailable() || isIDumpstateDeviceV1_1ServiceAvailable();
}
@Override
@@ -86,15 +90,31 @@
boolean isIDumpstateDeviceV1_1ServiceAvailable() {
IDumpstateDevice service = getDumpstateDeviceService();
if (service == null) {
- if (DBG) Log.d(TAG, "IDumpstateDevice service is not available.");
+ if (DBG) Log.d(TAG, "IDumpstateDevice v1.1 service is not available.");
}
- return service != null && mDumpstateHalVersion >= DUMPSTATE_HAL_VERSION_1_1;
+ return service != null && mDumpstateHalVersion == DUMPSTATE_HAL_VERSION_1_1;
+ }
+
+ @VisibleForTesting
+ boolean isIDumpstateDeviceAidlServiceAvailable() {
+ android.hardware.dumpstate.IDumpstateDevice aidlService = getDumpstateDeviceAidlService();
+ return aidlService != null;
}
@VisibleForTesting
void setVerboseLoggingEnabled(boolean enable) {
- IDumpstateDevice service = getDumpstateDeviceService();
+ // First check if AIDL service is available
+ android.hardware.dumpstate.IDumpstateDevice aidlService = getDumpstateDeviceAidlService();
+ if (aidlService != null) {
+ try {
+ aidlService.setVerboseLoggingEnabled(enable);
+ } catch (RemoteException re) {
+ if (DBG) Log.e(TAG, "aidlService.setVerboseLoggingEnabled fail: " + re);
+ }
+ }
+ // Then check HIDL v1.1 service
+ IDumpstateDevice service = getDumpstateDeviceService();
if (service == null || mDumpstateHalVersion < DUMPSTATE_HAL_VERSION_1_1) {
if (DBG) Log.d(TAG, "setVerboseLoggingEnabled not supported.");
return;
@@ -107,14 +127,24 @@
service11.setVerboseLoggingEnabled(enable);
}
} catch (RemoteException | RuntimeException e) {
- if (DBG) Log.e(TAG, "setVerboseLoggingEnabled fail: " + e);
+ if (DBG) Log.e(TAG, "HIDL v1.1 setVerboseLoggingEnabled fail: " + e);
}
}
@VisibleForTesting
boolean getVerboseLoggingEnabled() {
- IDumpstateDevice service = getDumpstateDeviceService();
+ // First check if AIDL service is available
+ android.hardware.dumpstate.IDumpstateDevice aidlService = getDumpstateDeviceAidlService();
+ if (aidlService != null) {
+ try {
+ return aidlService.getVerboseLoggingEnabled();
+ } catch (RemoteException re) {
+ if (DBG) Log.e(TAG, "aidlService.getVerboseLoggingEnabled fail: " + re);
+ }
+ }
+ // Then check HIDL v1.1 service
+ IDumpstateDevice service = getDumpstateDeviceService();
if (service == null || mDumpstateHalVersion < DUMPSTATE_HAL_VERSION_1_1) {
if (DBG) Log.d(TAG, "getVerboseLoggingEnabled not supported.");
return false;
@@ -127,7 +157,7 @@
return service11.getVerboseLoggingEnabled();
}
} catch (RemoteException | RuntimeException e) {
- if (DBG) Log.e(TAG, "getVerboseLoggingEnabled fail: " + e);
+ if (DBG) Log.e(TAG, "HIDL v1.1 getVerboseLoggingEnabled fail: " + e);
}
return false;
}
@@ -141,6 +171,7 @@
.getService(true /* retry */);
mDumpstateHalVersion = DUMPSTATE_HAL_VERSION_1_1;
} catch (NoSuchElementException | RemoteException e) {
+ if (DBG) Log.e(TAG, "Get HIDL v1.1 service fail: " + e);
}
if (service == null) {
@@ -149,6 +180,7 @@
.getService(true /* retry */);
mDumpstateHalVersion = DUMPSTATE_HAL_VERSION_1_0;
} catch (NoSuchElementException | RemoteException e) {
+ if (DBG) Log.e(TAG, "Get HIDL v1.0 service fail: " + e);
}
}
@@ -157,4 +189,24 @@
}
return service;
}
+
+ /**
+ * Return a {@link android.hardware.dumpstate.IDumpstateDevice} instance or null if service is
+ * not available.
+ */
+ @VisibleForTesting
+ @Nullable android.hardware.dumpstate.IDumpstateDevice getDumpstateDeviceAidlService() {
+ android.hardware.dumpstate.IDumpstateDevice service = null;
+ try {
+ service = android.hardware.dumpstate.IDumpstateDevice.Stub.asInterface(
+ ServiceManager.waitForDeclaredService(DUMP_STATE_AIDL_SERVICE_NAME));
+ } catch (NoSuchElementException e) {
+ if (DBG) Log.e(TAG, "Get AIDL service fail: " + e);
+ }
+
+ if (service != null) {
+ mDumpstateHalVersion = DUMPSTATE_HAL_VERSION_2_0;
+ }
+ return service;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceControllerTest.java
index 6145939..8e62521 100644
--- a/tests/robotests/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceControllerTest.java
@@ -47,6 +47,8 @@
private PreferenceScreen mPreferenceScreen;
@Mock
IDumpstateDevice mIDumpstateDevice;
+ @Mock
+ android.hardware.dumpstate.IDumpstateDevice mIDumpstateDeviceAidl;
private Context mContext;
private EnableVerboseVendorLoggingPreferenceController mController;
@@ -57,6 +59,7 @@
mContext = RuntimeEnvironment.application;
mController = spy(new EnableVerboseVendorLoggingPreferenceController(mContext));
doReturn(mIDumpstateDevice).when(mController).getDumpstateDeviceService();
+ doReturn(mIDumpstateDeviceAidl).when(mController).getDumpstateDeviceAidlService();
// mock with Dumpstate HAL v1.1
Field f = EnableVerboseVendorLoggingPreferenceController.class
@@ -70,7 +73,9 @@
}
@Test
- public void onPreferenceChange_settingEnable_enableVendorLoggingShouldBeOn() throws Exception {
+ public void onPreferenceChange_settingEnableByHidl_enableVendorLoggingShouldBeOn()
+ throws Exception {
+ doReturn(null).when(mController).getDumpstateDeviceAidlService();
doReturn(true).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.onPreferenceChange(mPreference, true /* new value */);
@@ -80,8 +85,21 @@
}
@Test
- public void onPreferenceChange_settingDisable_enableVendorLoggingShouldBeOff()
+ public void onPreferenceChange_settingEnableByAidl_enableVendorLoggingShouldBeOn()
throws Exception {
+ doReturn(mIDumpstateDeviceAidl).when(mController).getDumpstateDeviceAidlService();
+ doReturn(true).when(mIDumpstateDeviceAidl).getVerboseLoggingEnabled();
+
+ mController.onPreferenceChange(mPreference, true /* new value */);
+
+ final boolean enabled = mController.getVerboseLoggingEnabled();
+ assertTrue(enabled);
+ }
+
+ @Test
+ public void onPreferenceChange_settingDisableByHidl_enableVendorLoggingShouldBeOff()
+ throws Exception {
+ doReturn(null).when(mController).getDumpstateDeviceAidlService();
doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.onPreferenceChange(mPreference, false /* new value */);
@@ -91,7 +109,20 @@
}
@Test
- public void updateState_settingDisabled_preferenceShouldNotBeChecked() throws Exception {
+ public void onPreferenceChange_settingDisableByAidl_enableVendorLoggingShouldBeOff()
+ throws Exception {
+ doReturn(mIDumpstateDeviceAidl).when(mController).getDumpstateDeviceAidlService();
+ doReturn(false).when(mIDumpstateDeviceAidl).getVerboseLoggingEnabled();
+
+ mController.onPreferenceChange(mPreference, false /* new value */);
+
+ final boolean enabled = mController.getVerboseLoggingEnabled();
+ assertFalse(enabled);
+ }
+
+ @Test
+ public void updateState_settingDisabledByHidl_preferenceShouldNotBeChecked() throws Exception {
+ doReturn(null).when(mController).getDumpstateDeviceAidlService();
doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.setVerboseLoggingEnabled(false);
@@ -101,7 +132,19 @@
}
@Test
- public void updateState_settingEnabled_preferenceShouldBeChecked() throws Exception {
+ public void updateState_settingDisabledByAidl_preferenceShouldNotBeChecked() throws Exception {
+ doReturn(mIDumpstateDeviceAidl).when(mController).getDumpstateDeviceAidlService();
+ doReturn(false).when(mIDumpstateDeviceAidl).getVerboseLoggingEnabled();
+
+ mController.setVerboseLoggingEnabled(false);
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(false);
+ }
+
+ @Test
+ public void updateState_settingEnabledByHidl_preferenceShouldBeChecked() throws Exception {
+ doReturn(null).when(mController).getDumpstateDeviceAidlService();
doReturn(true).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.setVerboseLoggingEnabled(true);
@@ -111,7 +154,19 @@
}
@Test
- public void onDeveloperOptionDisabled_shouldDisablePreference() throws Exception {
+ public void updateState_settingEnabledByAidl_preferenceShouldBeChecked() throws Exception {
+ doReturn(mIDumpstateDeviceAidl).when(mController).getDumpstateDeviceAidlService();
+ doReturn(true).when(mIDumpstateDeviceAidl).getVerboseLoggingEnabled();
+
+ mController.setVerboseLoggingEnabled(true);
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(true);
+ }
+
+ @Test
+ public void onDeveloperOptionDisabled_byHidl_shouldDisablePreference() throws Exception {
+ doReturn(null).when(mController).getDumpstateDeviceAidlService();
doReturn(false).when(mIDumpstateDevice).getVerboseLoggingEnabled();
mController.onDeveloperOptionsSwitchDisabled();
@@ -121,4 +176,17 @@
verify(mPreference).setChecked(false);
verify(mPreference).setEnabled(false);
}
+
+ @Test
+ public void onDeveloperOptionDisabled_byAidl_shouldDisablePreference() throws Exception {
+ doReturn(mIDumpstateDeviceAidl).when(mController).getDumpstateDeviceAidlService();
+ doReturn(false).when(mIDumpstateDeviceAidl).getVerboseLoggingEnabled();
+
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ final boolean enabled = mController.getVerboseLoggingEnabled();
+ assertFalse(enabled);
+ verify(mPreference).setChecked(false);
+ verify(mPreference).setEnabled(false);
+ }
}