Skip device index job if caller is not Settings app.

Change-Id: I96184f111e83477b46ddf321ec74917bab330048
Fixes: 80437512
Fixes: 109713077
Test: robotests
(cherry picked from commit 74ba1a51d7)
(cherry picked from commit 9ecf3e0c11)
This commit is contained in:
Fan Zhang
2018-05-30 09:50:52 -07:00
committed by android-build-team Robot
parent da294f14cd
commit 23059f5e5a
2 changed files with 60 additions and 20 deletions

View File

@@ -21,7 +21,10 @@ import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
@@ -36,7 +39,6 @@ import java.util.Locale;
public interface DeviceIndexFeatureProvider {
String TAG = "DeviceIndex";
String INDEX_VERSION = "settings:index_version";
@@ -57,7 +59,7 @@ public interface DeviceIndexFeatureProvider {
default void updateIndex(Context context, boolean force) {
if (!isIndexingEnabled()) {
Log.w(TAG, "Skipping: device index is not enabled");
Log.i(TAG, "Skipping: device index is not enabled");
return;
}
@@ -66,7 +68,29 @@ public interface DeviceIndexFeatureProvider {
return;
}
final ComponentName jobComponent = new ComponentName(context.getPackageName(),
DeviceIndexUpdateJobService.class.getName());
try {
final int callerUid = Binder.getCallingUid();
final ServiceInfo si = context.getPackageManager().getServiceInfo(jobComponent,
PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
if (si == null) {
Log.w(TAG, "Skipping: No such service " + jobComponent);
return;
}
if (si.applicationInfo.uid != callerUid) {
Log.w(TAG, "Skipping: Uid cannot schedule DeviceIndexUpdate: " + callerUid);
return;
}
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "Skipping: error finding DeviceIndexUpdateJobService from packageManager");
return;
}
if (!force && skipIndex(context)) {
Log.i(TAG, "Skipping: already indexed.");
// No need to update.
return;
}
@@ -74,8 +98,6 @@ public interface DeviceIndexFeatureProvider {
// Prevent scheduling multiple jobs
setIndexState(context);
final ComponentName jobComponent = new ComponentName(context.getPackageName(),
DeviceIndexUpdateJobService.class.getName());
final int jobId = context.getResources().getInteger(R.integer.device_index_update);
// Schedule a job so that we know it'll be able to complete, but try to run as
// soon as possible.