diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java index f729678e947..2c98a40dc7b 100644 --- a/src/com/android/settings/DeviceAdminSettings.java +++ b/src/com/android/settings/DeviceAdminSettings.java @@ -49,8 +49,8 @@ import android.widget.ListView; 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 @@ public class DeviceAdminSettings extends ListFragment implements Instrumentable 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 6e4d40ecc85..f67635e1929 100644 --- a/src/com/android/settings/UserDictionarySettings.java +++ b/src/com/android/settings/UserDictionarySettings.java @@ -80,6 +80,12 @@ public class UserDictionarySettings extends ListFragment implements Instrumentab return MetricsProto.MetricsEvent.USER_DICTIONARY_SETTINGS; } + @Override + public void onAttach(Context context) { + super.onAttach(context); + mVisibilityLoggerMixin.onAttach(context); + } + @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java index 0b52bdca709..68650902c49 100644 --- a/src/com/android/settings/ZonePicker.java +++ b/src/com/android/settings/ZonePicker.java @@ -136,6 +136,12 @@ public class ZonePicker extends ListFragment implements Instrumentable { return TimeZone.getTimeZone((String)((Map)item).get(ZoneGetter.KEY_ID)); } + @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 f4fe5e86cc5..101dccd71d7 100644 --- a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java +++ b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java @@ -50,11 +50,15 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnResume, OnPau @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 62800091b8b..c009d0c92c3 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.RobolectricTestRunner; 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 @@ public class VisibilityLoggerMixinTest { @Test public void shouldLogVisibleOnResume() { mMixin.onResume(); + verify(mMetricsFeature, times(1)) .visible(any(Context.class), eq(TestInstrumentable.TEST_METRIC)); } @@ -58,10 +61,21 @@ public class VisibilityLoggerMixinTest { @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;