Fix a NPE when rotating dialog created by DialogCreatable.
Bug: 30088727 Test: make RunSettingsRoboTests Change-Id: I775899809dfe920daa294f70d646b141da7c0706
This commit is contained in:
@@ -46,6 +46,7 @@ import android.widget.Button;
|
|||||||
|
|
||||||
import com.android.settings.applications.LayoutPreference;
|
import com.android.settings.applications.LayoutPreference;
|
||||||
import com.android.settings.core.InstrumentedFragment;
|
import com.android.settings.core.InstrumentedFragment;
|
||||||
|
import com.android.settings.core.instrumentation.Instrumentable;
|
||||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||||
import com.android.settingslib.HelpUtils;
|
import com.android.settingslib.HelpUtils;
|
||||||
|
|
||||||
@@ -626,6 +627,9 @@ public abstract class SettingsPreferenceFragment extends InstrumentedFragment
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMetricsCategory() {
|
public int getMetricsCategory() {
|
||||||
|
if (mDialogCreatable == null) {
|
||||||
|
return Instrumentable.METRICS_CATEGORY_UNKNOWN;
|
||||||
|
}
|
||||||
final int metricsCategory = mDialogCreatable.getDialogMetricsCategory(mDialogId);
|
final int metricsCategory = mDialogCreatable.getDialogMetricsCategory(mDialogId);
|
||||||
if (metricsCategory <= 0) {
|
if (metricsCategory <= 0) {
|
||||||
throw new IllegalStateException("Dialog must provide a metrics category");
|
throw new IllegalStateException("Dialog must provide a metrics category");
|
||||||
|
@@ -18,6 +18,8 @@ package com.android.settings.core.instrumentation;
|
|||||||
|
|
||||||
public interface Instrumentable {
|
public interface Instrumentable {
|
||||||
|
|
||||||
|
int METRICS_CATEGORY_UNKNOWN = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instrumented name for a view as defined in
|
* Instrumented name for a view as defined in
|
||||||
* {@link com.android.internal.logging.MetricsProto.MetricsEvent}.
|
* {@link com.android.internal.logging.MetricsProto.MetricsEvent}.
|
||||||
|
@@ -24,6 +24,8 @@ import com.android.settings.core.lifecycle.events.OnPause;
|
|||||||
import com.android.settings.core.lifecycle.events.OnResume;
|
import com.android.settings.core.lifecycle.events.OnResume;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
|
|
||||||
|
import static com.android.settings.core.instrumentation.Instrumentable.METRICS_CATEGORY_UNKNOWN;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs visibility change of a fragment.
|
* Logs visibility change of a fragment.
|
||||||
*/
|
*/
|
||||||
@@ -50,14 +52,14 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnResume, OnPau
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
if (mMetricsFeature != null) {
|
if (mMetricsFeature != null && mMetricsCategory != METRICS_CATEGORY_UNKNOWN) {
|
||||||
mMetricsFeature.visible(null /* context */, mMetricsCategory);
|
mMetricsFeature.visible(null /* context */, mMetricsCategory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
if (mMetricsFeature != null) {
|
if (mMetricsFeature != null && mMetricsCategory != METRICS_CATEGORY_UNKNOWN) {
|
||||||
mMetricsFeature.hidden(null /* context */, mMetricsCategory);
|
mMetricsFeature.hidden(null /* context */, mMetricsCategory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,6 +27,7 @@ import org.mockito.MockitoAnnotations;
|
|||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import static com.android.settings.core.instrumentation.Instrumentable.METRICS_CATEGORY_UNKNOWN;
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Matchers.anyInt;
|
import static org.mockito.Matchers.anyInt;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
@@ -76,6 +77,17 @@ public class VisibilityLoggerMixinTest {
|
|||||||
.hidden(any(Context.class), anyInt());
|
.hidden(any(Context.class), anyInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldNotLogIfMetricsCategoryIsUnknown() {
|
||||||
|
mMixin = new VisibilityLoggerMixin(METRICS_CATEGORY_UNKNOWN, mMetricsFeature);
|
||||||
|
|
||||||
|
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;
|
||||||
|
Reference in New Issue
Block a user