Fix NPE when using VisibilityLogger.

Fix: 31612160
Test: make RunSettingsRoboTests
Change-Id: Ib040a40d27a76d9440f629ed4f768dc4bfde8ac2
This commit is contained in:
Fan Zhang
2016-09-20 09:05:27 -07:00
parent 9560b36306
commit 45fb1199a2
5 changed files with 40 additions and 3 deletions

View File

@@ -49,8 +49,8 @@ import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.logging.MetricsProto; 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.Instrumentable;
import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
@@ -84,6 +84,13 @@ public class DeviceAdminSettings extends ListFragment implements Instrumentable
return this.name.compareTo(other.name); 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 * Internal collection of device admin info objects for all profiles associated with the current
* user. * user.

View File

@@ -80,6 +80,12 @@ public class UserDictionarySettings extends ListFragment implements Instrumentab
return MetricsProto.MetricsEvent.USER_DICTIONARY_SETTINGS; return MetricsProto.MetricsEvent.USER_DICTIONARY_SETTINGS;
} }
@Override
public void onAttach(Context context) {
super.onAttach(context);
mVisibilityLoggerMixin.onAttach(context);
}
@Override @Override
public View onCreateView( public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View File

@@ -136,6 +136,12 @@ public class ZonePicker extends ListFragment implements Instrumentable {
return TimeZone.getTimeZone((String)((Map<?, ?>)item).get(ZoneGetter.KEY_ID)); return TimeZone.getTimeZone((String)((Map<?, ?>)item).get(ZoneGetter.KEY_ID));
} }
@Override
public void onAttach(Context context) {
super.onAttach(context);
mVisibilityLoggerMixin.onAttach(context);
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsProto.MetricsEvent.ZONE_PICKER; return MetricsProto.MetricsEvent.ZONE_PICKER;

View File

@@ -50,11 +50,15 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnResume, OnPau
@Override @Override
public void onResume() { public void onResume() {
mMetricsFeature.visible(null /* context */, mMetricsCategory); if (mMetricsFeature != null) {
mMetricsFeature.visible(null /* context */, mMetricsCategory);
}
} }
@Override @Override
public void onPause() { public void onPause() {
mMetricsFeature.hidden(null /* context */, mMetricsCategory); if (mMetricsFeature != null) {
mMetricsFeature.hidden(null /* context */, mMetricsCategory);
}
} }
} }

View File

@@ -28,7 +28,9 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq; import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@@ -51,6 +53,7 @@ public class VisibilityLoggerMixinTest {
@Test @Test
public void shouldLogVisibleOnResume() { public void shouldLogVisibleOnResume() {
mMixin.onResume(); mMixin.onResume();
verify(mMetricsFeature, times(1)) verify(mMetricsFeature, times(1))
.visible(any(Context.class), eq(TestInstrumentable.TEST_METRIC)); .visible(any(Context.class), eq(TestInstrumentable.TEST_METRIC));
} }
@@ -58,10 +61,21 @@ public class VisibilityLoggerMixinTest {
@Test @Test
public void shouldLogHideOnPause() { public void shouldLogHideOnPause() {
mMixin.onPause(); mMixin.onPause();
verify(mMetricsFeature, times(1)) verify(mMetricsFeature, times(1))
.hidden(any(Context.class), eq(TestInstrumentable.TEST_METRIC)); .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 { private final class TestInstrumentable implements Instrumentable {
public static final int TEST_METRIC = 12345; public static final int TEST_METRIC = 12345;