From b803a230312746cb83586692f396dae54dbd57d6 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 28 Mar 2018 18:02:40 -0700 Subject: [PATCH] Check time-spent-in-app intent must come from system app. Change-Id: Ie73aacdaf919b336d99a296328c2fbb4f75036b0 Fixes: 74580195 Test: robotests --- .../TimeSpentInAppPreferenceController.java | 15 ++++++++++++++- ...imeSpentInAppPreferenceControllerTest.java | 19 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceController.java b/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceController.java index 047d38e1a66..0997e60f409 100644 --- a/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceController.java @@ -18,6 +18,7 @@ package com.android.settings.applications.appinfo; import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.support.annotation.VisibleForTesting; @@ -61,7 +62,12 @@ public class TimeSpentInAppPreferenceController extends BasePreferenceController if (resolved == null || resolved.isEmpty()) { return DISABLED_UNSUPPORTED; } - return AVAILABLE; + for (ResolveInfo info : resolved) { + if (isSystemApp(info)) { + return AVAILABLE; + } + } + return DISABLED_UNSUPPORTED; } @Override @@ -72,4 +78,11 @@ public class TimeSpentInAppPreferenceController extends BasePreferenceController pref.setIntent(mIntent); } } + + private boolean isSystemApp(ResolveInfo info) { + return info != null + && info.activityInfo != null + && info.activityInfo.applicationInfo != null + && (info.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceControllerTest.java index ab3e066eacc..0a54b8253de 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceControllerTest.java @@ -22,6 +22,8 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; @@ -81,13 +83,26 @@ public class TimeSpentInAppPreferenceControllerTest { } @Test - public void hasIntentHandler_shouldBeAvailable() { + public void hasIntentHandler_notSystemApp_shouldBeDisabled() { mPackageManager.addResolveInfoForIntent(TEST_INTENT, new ResolveInfo()); mController.setPackageName(TEST_INTENT.getStringExtra(EXTRA_PACKAGE_NAME)); assertThat(mController.getAvailabilityStatus()) - .isEqualTo(BasePreferenceController.AVAILABLE); + .isEqualTo(BasePreferenceController.DISABLED_UNSUPPORTED); + } + + @Test + public void hasIntentHandler_resolvedToSystemApp_shouldBeAvailable() { + final ResolveInfo info = new ResolveInfo(); + info.activityInfo = new ActivityInfo(); + info.activityInfo.applicationInfo = new ApplicationInfo(); + info.activityInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM; + mPackageManager.addResolveInfoForIntent(TEST_INTENT, info); + mController.setPackageName(TEST_INTENT.getStringExtra(EXTRA_PACKAGE_NAME)); + + assertThat(mController.getAvailabilityStatus()) + .isEqualTo(BasePreferenceController.AVAILABLE); mController.displayPreference(mScreen); final Intent intent = mPreference.getIntent();