diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 69105b5df6f..0db8c20ec18 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -28,7 +28,9 @@ import android.text.TextUtils; import android.util.Log; import com.android.internal.logging.nano.MetricsProto; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.SettingsActivity; +import com.android.settings.SubSettings; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.drawer.CategoryManager; @@ -198,6 +200,8 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { return; } final Intent intent = new Intent(tile.intent) + .putExtra(SettingsActivity.EXTRA_SOURCE_METRICS_CATEGORY, + MetricsEvent.DASHBOARD_SUMMARY) .putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); launchIntentOrSelectProfile(activity, tile, intent); @@ -222,10 +226,15 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } final ComponentName cn = intent.getComponent(); if (cn == null) { + // Not loggable + return; + } else if (TextUtils.equals(cn.getPackageName(), mContext.getPackageName())) { + // Going to a Setting internal page, skip click logging in favor of page's own + // visibility logging. return; } mMetricsFeatureProvider.action(mContext, - MetricsProto.MetricsEvent.ACTION_SETTINGS_TILE_CLICK, + MetricsEvent.ACTION_SETTINGS_TILE_CLICK, cn.flattenToString()); } } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 834b2ad0af9..33eb29f5cea 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -44,6 +44,7 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowActivity; import org.robolectric.shadows.ShadowApplication; @@ -55,6 +56,7 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -174,6 +176,33 @@ public class DashboardFeatureProviderImplTest { .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class)); } + @Test + public void bindPreference_toInternalSettingActivity_shouldBindToDirectLaunchIntentAndNotLog() { + final Preference preference = new Preference(RuntimeEnvironment.application); + final Tile tile = new Tile(); + tile.metaData = new Bundle(); + tile.userHandle = new ArrayList<>(); + tile.userHandle.add(mock(UserHandle.class)); + tile.intent = new Intent(); + tile.intent.setComponent( + new ComponentName(RuntimeEnvironment.application.getPackageName(), "class")); + + when(mActivity.getSystemService(Context.USER_SERVICE)) + .thenReturn(mUserManager); + when(mActivity.getApplicationContext().getPackageName()) + .thenReturn(RuntimeEnvironment.application.getPackageName()); + + mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES, + preference, tile, "123", Preference.DEFAULT_ORDER); + preference.getOnPreferenceClickListener().onPreferenceClick(null); + verify(mFeatureFactory.metricsFeatureProvider, never()).action( + any(Context.class), + eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_TILE_CLICK), + eq(tile.intent.getComponent().flattenToString())); + verify(mActivity) + .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class)); + } + @Test public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() { final Preference preference = new Preference(