Add metric events triggers for new storage actions.

Bug: 35063738
Test: Settings Robotests
Change-Id: I435cb16c492d3777e735266c2d3a2b1930443acb
This commit is contained in:
Daniel Nishi
2017-02-08 10:17:30 -08:00
parent be59c35037
commit e0eb1a2e27
5 changed files with 60 additions and 14 deletions

View File

@@ -443,8 +443,12 @@ public class ManageApplications extends InstrumentedPreferenceFragment
case LIST_TYPE_NOTIFICATION: case LIST_TYPE_NOTIFICATION:
return MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS; return MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS;
case LIST_TYPE_STORAGE: case LIST_TYPE_STORAGE:
case LIST_TYPE_GAMES: if (mStorageType == STORAGE_TYPE_MUSIC) {
return MetricsEvent.APPLICATIONS_STORAGE_MUSIC;
}
return MetricsEvent.APPLICATIONS_STORAGE_APPS; return MetricsEvent.APPLICATIONS_STORAGE_APPS;
case LIST_TYPE_GAMES:
return MetricsEvent.APPLICATIONS_STORAGE_GAMES;
case LIST_TYPE_USAGE_ACCESS: case LIST_TYPE_USAGE_ACCESS:
return MetricsEvent.USAGE_ACCESS; return MetricsEvent.USAGE_ACCESS;
case LIST_TYPE_HIGH_POWER: case LIST_TYPE_HIGH_POWER:

View File

@@ -26,12 +26,12 @@ import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.os.storage.VolumeInfo; import android.os.storage.VolumeInfo;
import android.provider.DocumentsContract;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.util.Log; import android.util.Log;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.Utils; import com.android.settings.Utils;
@@ -39,6 +39,7 @@ import com.android.settings.applications.ManageApplications;
import com.android.settings.applications.PackageManagerWrapperImpl; import com.android.settings.applications.PackageManagerWrapperImpl;
import com.android.settings.core.PreferenceController; import com.android.settings.core.PreferenceController;
import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.deviceinfo.StorageMeasurement; import com.android.settingslib.deviceinfo.StorageMeasurement;
import com.android.settingslib.deviceinfo.StorageVolumeProvider; import com.android.settingslib.deviceinfo.StorageVolumeProvider;
@@ -129,6 +130,8 @@ public class StorageItemPreferenceController extends PreferenceController
break; break;
case FILES_KEY: case FILES_KEY:
intent = getFilesIntent(); intent = getFilesIntent();
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider().action(
mContext, MetricsEvent.STORAGE_FILES);
break; break;
} }

View File

@@ -34,7 +34,9 @@ import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.DonutView; import com.android.settings.widget.DonutView;
import java.util.Locale; import java.util.Locale;
@@ -100,6 +102,9 @@ public class StorageSummaryDonutPreference extends Preference implements View.On
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (v != null && R.id.deletion_helper_button == v.getId()) { if (v != null && R.id.deletion_helper_button == v.getId()) {
Context context = getContext();
FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(
context, MetricsEvent.STORAGE_FREE_UP_SPACE_NOW);
Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE); Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE);
getContext().startActivity(intent); getContext().startActivity(intent);
} }

View File

@@ -18,7 +18,10 @@ package com.android.settings.deviceinfo.storage;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -27,19 +30,20 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.storage.VolumeInfo; import android.os.storage.VolumeInfo;
import android.provider.DocumentsContract;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.SubSettings; import com.android.settings.SubSettings;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.applications.ManageApplications; import com.android.settings.applications.ManageApplications;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.deviceinfo.StorageVolumeProvider; import com.android.settingslib.deviceinfo.StorageVolumeProvider;
import org.junit.Before; import org.junit.Before;
@@ -48,7 +52,6 @@ import org.junit.runner.RunWith;
import org.mockito.Answers; import org.mockito.Answers;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@@ -61,7 +64,6 @@ public class StorageItemPreferenceControllerTest {
* kilobyte. * kilobyte.
*/ */
private static long KILOBYTE = 1024L; private static long KILOBYTE = 1024L;
private Context mContext; private Context mContext;
private VolumeInfo mVolume; private VolumeInfo mVolume;
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -70,12 +72,17 @@ public class StorageItemPreferenceControllerTest {
private StorageVolumeProvider mSvp; private StorageVolumeProvider mSvp;
private StorageItemPreferenceController mController; private StorageItemPreferenceController mController;
private StorageItemPreferenceAlternate mPreference; private StorageItemPreferenceAlternate mPreference;
private FakeFeatureFactory mFakeFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application.getApplicationContext());
FakeFeatureFactory.setupForTest(mContext);
mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
mVolume = new VolumeInfo("id", 0, null, "id"); mVolume = new VolumeInfo("id", 0, null, "id");
mContext = RuntimeEnvironment.application;
// Note: null is passed as the Lifecycle because we are handling it outside of the normal // Note: null is passed as the Lifecycle because we are handling it outside of the normal
// Settings fragment lifecycle for test purposes. // Settings fragment lifecycle for test purposes.
mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp); mController = new StorageItemPreferenceController(mContext, mFragment, mVolume, mSvp);
@@ -158,6 +165,8 @@ public class StorageItemPreferenceControllerTest {
Intent browseIntent = mVolume.buildBrowseIntent(); Intent browseIntent = mVolume.buildBrowseIntent();
assertThat(intent.getAction()).isEqualTo(browseIntent.getAction()); assertThat(intent.getAction()).isEqualTo(browseIntent.getAction());
assertThat(intent.getData()).isEqualTo(browseIntent.getData()); assertThat(intent.getData()).isEqualTo(browseIntent.getData());
verify(mMetricsFeatureProvider, times(1)).action(
any(Context.class), eq(MetricsEvent.STORAGE_FILES));
} }
@Test @Test
@@ -188,17 +197,17 @@ public class StorageItemPreferenceControllerTest {
StorageItemPreferenceAlternate files = new StorageItemPreferenceAlternate(mContext); StorageItemPreferenceAlternate files = new StorageItemPreferenceAlternate(mContext);
PreferenceScreen screen = mock(PreferenceScreen.class); PreferenceScreen screen = mock(PreferenceScreen.class);
when(screen.findPreference( when(screen.findPreference(
Mockito.eq(StorageItemPreferenceController.AUDIO_KEY))).thenReturn(audio); eq(StorageItemPreferenceController.AUDIO_KEY))).thenReturn(audio);
when(screen.findPreference( when(screen.findPreference(
Mockito.eq(StorageItemPreferenceController.PHOTO_KEY))).thenReturn(image); eq(StorageItemPreferenceController.PHOTO_KEY))).thenReturn(image);
when(screen.findPreference( when(screen.findPreference(
Mockito.eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games); eq(StorageItemPreferenceController.GAME_KEY))).thenReturn(games);
when(screen.findPreference( when(screen.findPreference(
Mockito.eq(StorageItemPreferenceController.OTHER_APPS_KEY))).thenReturn(apps); eq(StorageItemPreferenceController.OTHER_APPS_KEY))).thenReturn(apps);
when(screen.findPreference( when(screen.findPreference(
Mockito.eq(StorageItemPreferenceController.SYSTEM_KEY))).thenReturn(system); eq(StorageItemPreferenceController.SYSTEM_KEY))).thenReturn(system);
when(screen.findPreference( when(screen.findPreference(
Mockito.eq(StorageItemPreferenceController.FILES_KEY))).thenReturn(files); eq(StorageItemPreferenceController.FILES_KEY))).thenReturn(files);
mController.displayPreference(screen); mController.displayPreference(screen);
mController.setSystemSize(KILOBYTE * 6); mController.setSystemSize(KILOBYTE * 6);

View File

@@ -18,6 +18,11 @@ package com.android.settings.deviceinfo.storage;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
@@ -26,12 +31,16 @@ import android.provider.Settings;
import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.PreferenceViewHolder;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.deviceinfo.StorageVolumeProvider; import com.android.settingslib.deviceinfo.StorageVolumeProvider;
import org.junit.Before; import org.junit.Before;
@@ -50,10 +59,15 @@ public class StorageSummaryDonutPreferenceControllerTest {
private StorageSummaryDonutPreferenceController mController; private StorageSummaryDonutPreferenceController mController;
private StorageSummaryDonutPreference mPreference; private StorageSummaryDonutPreference mPreference;
private PreferenceViewHolder mHolder; private PreferenceViewHolder mHolder;
private FakeFeatureFactory mFakeFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application.getApplicationContext());
FakeFeatureFactory.setupForTest(mContext);
mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
mController = new StorageSummaryDonutPreferenceController(mContext); mController = new StorageSummaryDonutPreferenceController(mContext);
mPreference = new StorageSummaryDonutPreference(mContext); mPreference = new StorageSummaryDonutPreference(mContext);
@@ -106,6 +120,17 @@ public class StorageSummaryDonutPreferenceControllerTest {
assertThat(asmTextView.getText().toString()).isEqualTo("Storage Manager: OFF"); assertThat(asmTextView.getText().toString()).isEqualTo("Storage Manager: OFF");
} }
@Test
public void testFreeUpSpaceMetricIsTriggered() throws Exception {
mPreference.onBindViewHolder(mHolder);
Button button = (Button) mHolder.findViewById(R.id.deletion_helper_button);
mPreference.onClick(button);
verify(mMetricsFeatureProvider, times(1)).action(
any(Context.class), eq(MetricsEvent.STORAGE_FREE_UP_SPACE_NOW));
}
@Test @Test
public void testAutomaticStorageManagerLabelOn() throws Exception { public void testAutomaticStorageManagerLabelOn() throws Exception {
Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.putInt(mContext.getContentResolver(),