Log visibility change for DialogCreatable in Settings.
Bug: 30681529
Test: adb logcat -b events | egrep "(sysui_|notification_)"
Test: make RunSettingsRoboTests
Change-Id: I51754d258ba1ddfae24323681f21cd02de4dbb4e
diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java
index 9865fb2..a32e421 100644
--- a/src/com/android/settings/ApnSettings.java
+++ b/src/com/android/settings/ApnSettings.java
@@ -507,4 +507,12 @@
}
return null;
}
+
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == DIALOG_RESTORE_DEFAULTAPN) {
+ return MetricsEvent.DIALOG_APN_RESTORE_DEFAULT;
+ }
+ return 0;
+ }
}
diff --git a/src/com/android/settings/DialogCreatable.java b/src/com/android/settings/DialogCreatable.java
index a0de2e0..ca0d3d1 100644
--- a/src/com/android/settings/DialogCreatable.java
+++ b/src/com/android/settings/DialogCreatable.java
@@ -26,4 +26,6 @@
public interface DialogCreatable {
Dialog onCreateDialog(int dialogId);
+
+ int getDialogMetricsCategory(int dialogId);
}
diff --git a/src/com/android/settings/DreamSettings.java b/src/com/android/settings/DreamSettings.java
index 2a7c852..6587097 100644
--- a/src/com/android/settings/DreamSettings.java
+++ b/src/com/android/settings/DreamSettings.java
@@ -183,6 +183,14 @@
return super.onCreateDialog(dialogId);
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == DIALOG_WHEN_TO_DREAM) {
+ return MetricsEvent.DIALOG_DREAM_START_DELAY;
+ }
+ return 0;
+ }
+
private Dialog createWhenToDreamDialog() {
final CharSequence[] items = {
mContext.getString(R.string.screensaver_settings_summary_dock),
diff --git a/src/com/android/settings/EncryptionInterstitial.java b/src/com/android/settings/EncryptionInterstitial.java
index a26d0dc..81945df 100644
--- a/src/com/android/settings/EncryptionInterstitial.java
+++ b/src/com/android/settings/EncryptionInterstitial.java
@@ -259,6 +259,14 @@
}
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == ACCESSIBILITY_WARNING_DIALOG) {
+ return MetricsEvent.DIALOG_ENCRYPTION_INTERSTITIAL_ACCESSIBILITY;
+ }
+ return 0;
+ }
+
private void setRequirePasswordState(boolean required) {
mPasswordRequired = required;
}
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
index ae5dd8b..80de9da 100644
--- a/src/com/android/settings/ProxySelector.java
+++ b/src/com/android/settings/ProxySelector.java
@@ -108,6 +108,11 @@
return null;
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ return MetricsEvent.DIALOG_PROXY_SELECTOR_ERROR;
+ }
+
private void showDialog(int dialogId) {
if (mDialogFragment != null) {
Log.e(TAG, "Old dialog fragment not null!");
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index cc87c05..28230a9 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -46,9 +46,11 @@
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.InstrumentedFragment;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settingslib.HelpUtils;
import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Base class for Settings fragments, with some helper functions and dialog management.
@@ -501,10 +503,16 @@
mDialogFragment.show(getChildFragmentManager(), Integer.toString(dialogId));
}
+ @Override
public Dialog onCreateDialog(int dialogId) {
return null;
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ return 0;
+ }
+
protected void removeDialog(int dialogId) {
// mDialogFragment may not be visible yet in parent fragment's onResume().
// To be able to dismiss dialog at that time, don't check
@@ -569,12 +577,10 @@
onDialogShowing();
}
- public static class SettingsDialogFragment extends DialogFragment {
+ public static class SettingsDialogFragment extends InstrumentedDialogFragment {
private static final String KEY_DIALOG_ID = "key_dialog_id";
private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id";
- private int mDialogId;
-
private Fragment mParentFragment;
private DialogInterface.OnCancelListener mOnCancelListener;
@@ -585,7 +591,7 @@
}
public SettingsDialogFragment(DialogCreatable fragment, int dialogId) {
- mDialogId = dialogId;
+ super(fragment, dialogId);
if (!(fragment instanceof Fragment)) {
throw new IllegalArgumentException("fragment argument must be an instance of "
+ Fragment.class.getName());
@@ -593,6 +599,16 @@
mParentFragment = (Fragment) fragment;
}
+
+ @Override
+ public int getMetricsCategory() {
+ final int metricsCategory = mDialogCreatable.getDialogMetricsCategory(mDialogId);
+ if (metricsCategory <= 0) {
+ throw new IllegalStateException("Dialog must provide a metrics category");
+ }
+ return metricsCategory;
+ }
+
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 7485328..40c91ce 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -259,6 +259,14 @@
return null;
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == DIALOG_AP_SETTINGS) {
+ return MetricsEvent.DIALOG_AP_SETTINGS;
+ }
+ return 0;
+ }
+
private class TetherChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context content, Intent intent) {
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index 3168178..8535850 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -202,6 +202,15 @@
}
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == DIALOG_ID_ENABLE_WARNING) {
+ return MetricsEvent.DIALOG_ACCESSIBILITY_SERVICE_ENABLE;
+ } else {
+ return MetricsEvent.DIALOG_ACCESSIBILITY_SERVICE_DISABLE;
+ }
+ }
+
private void updateSwitchBarToggleSwitch() {
final boolean checked = AccessibilityUtils.getEnabledServicesFromSettings(getActivity())
.contains(mComponentName);
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 6b6791e..ae06f9c 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -52,13 +52,13 @@
import android.widget.ImageView;
import android.widget.TextView;
-import com.google.android.collect.Lists;
-
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settingslib.RestrictedLockUtils;
+import com.google.android.collect.Lists;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
@@ -153,6 +153,20 @@
}
@Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case REALLY_REMOVE_DIALOG:
+ return MetricsEvent.DIALOG_ACCOUNT_SYNC_REMOVE;
+ case FAILED_REMOVAL_DIALOG:
+ return MetricsEvent.DIALOG_ACCOUNT_SYNC_FAILED_REMOVAL;
+ case CANT_DO_ONETIME_SYNC_DIALOG:
+ return MetricsEvent.DIALOG_ACCOUNT_SYNC_CANNOT_ONETIME_SYNC;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setPreferenceScreen(null);
diff --git a/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java b/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
index 6f97068..f0a3fed 100644
--- a/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
+++ b/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
@@ -15,12 +15,25 @@
*/
package com.android.settings.core.instrumentation;
+import com.android.settings.DialogCreatable;
import com.android.settings.core.lifecycle.ObservableDialogFragment;
public abstract class InstrumentedDialogFragment extends ObservableDialogFragment
implements Instrumentable {
+ protected final DialogCreatable mDialogCreatable;
+ protected int mDialogId;
+
public InstrumentedDialogFragment() {
+ this(null /* parentFragment */, 0 /* dialogId */);
+ }
+
+ /**
+ * Use this if the dialog is created via {@code DialogCreatable}
+ */
+ public InstrumentedDialogFragment(DialogCreatable dialogCreatable, int dialogId) {
+ mDialogCreatable = dialogCreatable;
+ mDialogId = dialogId;
mLifecycle.addObserver(new VisibilityLoggerMixin(getMetricsCategory()));
}
diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java
index 98352a7..b37e2e2 100644
--- a/src/com/android/settings/display/NightDisplaySettings.java
+++ b/src/com/android/settings/display/NightDisplaySettings.java
@@ -156,6 +156,17 @@
}
@Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case DIALOG_START_TIME:
+ return MetricsEvent.DIALOG_NIGHT_DISPLAY_SET_START_TIME;
+ case DIALOG_END_TIME:
+ return MetricsEvent.DIALOG_NIGHT_DISPLAY_SET_END_TIME;
+ default:
+ return 0;
+ }
+ }
+ @Override
public void onActivated(boolean activated) {
mActivatedPreference.setChecked(activated);
}
diff --git a/src/com/android/settings/users/RestrictedProfileSettings.java b/src/com/android/settings/users/RestrictedProfileSettings.java
index 182053f..31722e2 100644
--- a/src/com/android/settings/users/RestrictedProfileSettings.java
+++ b/src/com/android/settings/users/RestrictedProfileSettings.java
@@ -26,6 +26,7 @@
import android.widget.ImageView;
import android.widget.TextView;
+import com.android.internal.logging.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
@@ -133,6 +134,18 @@
return null;
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case DIALOG_ID_EDIT_USER_INFO:
+ return MetricsProto.MetricsEvent.DIALOG_USER_EDIT;
+ case DIALOG_CONFIRM_REMOVE:
+ return MetricsProto.MetricsEvent.DIALOG_USER_REMOVE;
+ default:
+ return 0;
+ }
+ }
+
private void removeUser() {
getView().post(new Runnable() {
public void run() {
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 65f55cb..47f8007 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -26,6 +26,7 @@
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
+import com.android.internal.logging.MetricsProto;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -192,6 +193,20 @@
throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case DIALOG_CONFIRM_REMOVE:
+ return MetricsProto.MetricsEvent.DIALOG_USER_REMOVE;
+ case DIALOG_CONFIRM_ENABLE_CALLING:
+ return MetricsProto.MetricsEvent.DIALOG_USER_ENABLE_CALLING;
+ case DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS:
+ return MetricsProto.MetricsEvent.DIALOG_USER_ENABLE_CALLING_AND_SMS;
+ default:
+ return 0;
+ }
+ }
+
void removeUser() {
mUserManager.removeUser(mUserInfo.id);
finishFragment();
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index bc3712e..d070838 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -622,6 +622,32 @@
}
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case DIALOG_CONFIRM_REMOVE:
+ return MetricsEvent.DIALOG_USER_REMOVE;
+ case DIALOG_USER_CANNOT_MANAGE:
+ return MetricsEvent.DIALOG_USER_CANNOT_MANAGE;
+ case DIALOG_ADD_USER:
+ return MetricsEvent.DIALOG_USER_ADD;
+ case DIALOG_SETUP_USER:
+ return MetricsEvent.DIALOG_USER_SETUP;
+ case DIALOG_SETUP_PROFILE:
+ return MetricsEvent.DIALOG_USER_SETUP_PROFILE;
+ case DIALOG_CHOOSE_USER_TYPE:
+ return MetricsEvent.DIALOG_USER_CHOOSE_TYPE;
+ case DIALOG_NEED_LOCKSCREEN:
+ return MetricsEvent.DIALOG_USER_NEED_LOCKSCREEN;
+ case DIALOG_CONFIRM_EXIT_GUEST:
+ return MetricsEvent.DIALOG_USER_CONFIRM_EXIT_GUEST;
+ case DIALOG_USER_PROFILE_EDITOR:
+ return MetricsEvent.DIALOG_USER_EDIT_PROFILE;
+ default:
+ return 0;
+ }
+ }
+
private static boolean emergencyInfoActivityPresent(Context context) {
Intent intent = new Intent(ACTION_EDIT_EMERGENCY_INFO).setPackage("com.android.emergency");
List<ResolveInfo> infos = context.getPackageManager().queryIntentActivities(intent, 0);
diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
index ea92b7f..55f0b63 100644
--- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
@@ -25,6 +25,7 @@
import android.support.v7.preference.PreferenceScreen;
import android.util.Log;
+import com.android.internal.logging.MetricsProto;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -152,6 +153,16 @@
}
@Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case WifiSettings.WIFI_DIALOG_ID:
+ return MetricsProto.MetricsEvent.DIALOG_WIFI_SAVED_AP_EDIT;
+ default:
+ return 0;
+ }
+ }
+
+ @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 6198bc9..782ff13 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -597,6 +597,22 @@
return super.onCreateDialog(dialogId);
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case WIFI_DIALOG_ID:
+ return MetricsEvent.DIALOG_WIFI_AP_EDIT;
+ case WPS_PBC_DIALOG_ID:
+ return MetricsEvent.DIALOG_WIFI_PBC;
+ case WPS_PIN_DIALOG_ID:
+ return MetricsEvent.DIALOG_WIFI_PIN;
+ case WRITE_NFC_DIALOG_ID:
+ return MetricsEvent.DIALOG_WIFI_WRITE_NFC;
+ default:
+ return 0;
+ }
+ }
+
/**
* Shows the latest access points available with supplemental information like
* the strength of network and the security for it.
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index ddf7dfe..487090d 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -496,6 +496,21 @@
}
@Override
+ public int getDialogMetricsCategory(int dialogId) {
+ switch (dialogId) {
+ case DIALOG_DISCONNECT:
+ return MetricsEvent.DIALOG_WIFI_P2P_DISCONNECT;
+ case DIALOG_CANCEL_CONNECT:
+ return MetricsEvent.DIALOG_WIFI_P2P_CANCEL_CONNECT;
+ case DIALOG_RENAME:
+ return MetricsEvent.DIALOG_WIFI_P2P_RENAME;
+ case DIALOG_DELETE_GROUP:
+ return MetricsEvent.DIALOG_WIFI_P2P_DELETE_GROUP;
+ }
+ return 0;
+ }
+
+ @Override
public void onSaveInstanceState(Bundle outState) {
if (mSelectedWifiPeer != null) {
outState.putParcelable(SAVE_DIALOG_PEER, mSelectedWifiPeer.device);