Fix NPE when using VisibilityLogger.
Fix: 31612160
Test: make RunSettingsRoboTests
Change-Id: Ib040a40d27a76d9440f629ed4f768dc4bfde8ac2
diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java
index f729678..2c98a40 100644
--- a/src/com/android/settings/DeviceAdminSettings.java
+++ b/src/com/android/settings/DeviceAdminSettings.java
@@ -49,8 +49,8 @@
import android.widget.TextView;
import com.android.internal.logging.MetricsProto;
-import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
import com.android.settings.core.instrumentation.Instrumentable;
+import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
import org.xmlpull.v1.XmlPullParserException;
@@ -84,6 +84,13 @@
return this.name.compareTo(other.name);
}
}
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mVisibilityLoggerMixin.onAttach(context);
+ }
+
/**
* Internal collection of device admin info objects for all profiles associated with the current
* user.
diff --git a/src/com/android/settings/UserDictionarySettings.java b/src/com/android/settings/UserDictionarySettings.java
index 6e4d40e..f67635e 100644
--- a/src/com/android/settings/UserDictionarySettings.java
+++ b/src/com/android/settings/UserDictionarySettings.java
@@ -81,6 +81,12 @@
}
@Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mVisibilityLoggerMixin.onAttach(context);
+ }
+
+ @Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(
diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java
index 0b52bdc..6865090 100644
--- a/src/com/android/settings/ZonePicker.java
+++ b/src/com/android/settings/ZonePicker.java
@@ -137,6 +137,12 @@
}
@Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mVisibilityLoggerMixin.onAttach(context);
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.ZONE_PICKER;
}
diff --git a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
index f4fe5e8..101dccd 100644
--- a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
+++ b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
@@ -50,11 +50,15 @@
@Override
public void onResume() {
- mMetricsFeature.visible(null /* context */, mMetricsCategory);
+ if (mMetricsFeature != null) {
+ mMetricsFeature.visible(null /* context */, mMetricsCategory);
+ }
}
@Override
public void onPause() {
- mMetricsFeature.hidden(null /* context */, mMetricsCategory);
+ if (mMetricsFeature != null) {
+ mMetricsFeature.hidden(null /* context */, mMetricsCategory);
+ }
}
}
diff --git a/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java b/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java
index 6280009..c009d0c 100644
--- a/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java
+++ b/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java
@@ -28,7 +28,9 @@
import org.robolectric.annotation.Config;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -51,6 +53,7 @@
@Test
public void shouldLogVisibleOnResume() {
mMixin.onResume();
+
verify(mMetricsFeature, times(1))
.visible(any(Context.class), eq(TestInstrumentable.TEST_METRIC));
}
@@ -58,10 +61,21 @@
@Test
public void shouldLogHideOnPause() {
mMixin.onPause();
+
verify(mMetricsFeature, times(1))
.hidden(any(Context.class), eq(TestInstrumentable.TEST_METRIC));
}
+ @Test
+ public void shouldNotLogIfMetricsFeatureIsNull() {
+ mMixin = new VisibilityLoggerMixin(TestInstrumentable.TEST_METRIC);
+ mMixin.onResume();
+ mMixin.onPause();
+
+ verify(mMetricsFeature, never())
+ .hidden(any(Context.class), anyInt());
+ }
+
private final class TestInstrumentable implements Instrumentable {
public static final int TEST_METRIC = 12345;