Merge "Check time-spent-in-app intent must come from system app." into pi-dev

This commit is contained in:
TreeHugger Robot
2018-03-29 16:55:30 +00:00
committed by Android (Google) Code Review
2 changed files with 31 additions and 3 deletions

View File

@@ -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,8 +62,13 @@ public class TimeSpentInAppPreferenceController extends BasePreferenceController
if (resolved == null || resolved.isEmpty()) {
return DISABLED_UNSUPPORTED;
}
for (ResolveInfo info : resolved) {
if (isSystemApp(info)) {
return AVAILABLE;
}
}
return DISABLED_UNSUPPORTED;
}
@Override
public void displayPreference(PreferenceScreen screen) {
@@ -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;
}
}

View File

@@ -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();