Merge "Re-run pinner service on camera app update and dex optimization." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-05-23 09:24:13 +00:00
committed by Android (Google) Code Review
2 changed files with 49 additions and 8 deletions

View File

@@ -16,12 +16,15 @@
package com.android.server; package com.android.server;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Binder; import android.os.Binder;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
@@ -68,6 +71,19 @@ public final class PinnerService extends SystemService {
private PinnerHandler mPinnerHandler = null; private PinnerHandler mPinnerHandler = null;
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// If this user's camera app has been updated, update pinned files accordingly.
if (intent.getAction() == Intent.ACTION_PACKAGE_REPLACED) {
Uri packageUri = intent.getData();
ApplicationInfo cameraInfo = getCameraInfo(UserHandle.USER_SYSTEM);
if (cameraInfo.packageName == packageUri.getSchemeSpecificPart()) {
update();
}
}
}
};
public PinnerService(Context context) { public PinnerService(Context context) {
super(context); super(context);
@@ -76,6 +92,11 @@ public final class PinnerService extends SystemService {
mShouldPinCamera = context.getResources().getBoolean( mShouldPinCamera = context.getResources().getBoolean(
com.android.internal.R.bool.config_pinnerCameraApp); com.android.internal.R.bool.config_pinnerCameraApp);
mPinnerHandler = new PinnerHandler(BackgroundThread.get().getLooper()); mPinnerHandler = new PinnerHandler(BackgroundThread.get().getLooper());
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addDataScheme("package");
mContext.registerReceiver(mBroadcastReceiver, filter);
} }
@Override @Override
@@ -85,6 +106,7 @@ public final class PinnerService extends SystemService {
} }
mBinderService = new BinderService(); mBinderService = new BinderService();
publishBinderService("pinner", mBinderService); publishBinderService("pinner", mBinderService);
publishLocalService(PinnerService.class, this);
mPinnerHandler.obtainMessage(PinnerHandler.PIN_ONSTART_MSG).sendToTarget(); mPinnerHandler.obtainMessage(PinnerHandler.PIN_ONSTART_MSG).sendToTarget();
mPinnerHandler.obtainMessage(PinnerHandler.PIN_CAMERA_MSG, UserHandle.USER_SYSTEM, 0) mPinnerHandler.obtainMessage(PinnerHandler.PIN_CAMERA_MSG, UserHandle.USER_SYSTEM, 0)
@@ -102,6 +124,17 @@ public final class PinnerService extends SystemService {
mPinnerHandler.obtainMessage(PinnerHandler.PIN_CAMERA_MSG, userHandle, 0).sendToTarget(); mPinnerHandler.obtainMessage(PinnerHandler.PIN_CAMERA_MSG, userHandle, 0).sendToTarget();
} }
/**
* Update the currently pinned files.
* Specifically, this only updates camera pinning.
* The other files pinned in onStart will not need to be updated.
*/
public void update() {
Slog.i(TAG, "Updating pinned files.");
mPinnerHandler.obtainMessage(PinnerHandler.PIN_CAMERA_MSG, UserHandle.USER_SYSTEM, 0)
.sendToTarget();
}
/** /**
* Handler for on start pinning message * Handler for on start pinning message
*/ */
@@ -202,13 +235,10 @@ public final class PinnerService extends SystemService {
return cameraResolveInfo.activityInfo.applicationInfo; return cameraResolveInfo.activityInfo.applicationInfo;
} }
/**
* If the camera app is already pinned, unpin and repin it.
*/
private boolean pinCamera(int userHandle){ private boolean pinCamera(int userHandle){
//we may have already pinned a camera app. If we've pinned this
//camera app, we're done. otherwise, unpin and pin the new app
if (alreadyPinned(userHandle)){
return true;
}
ApplicationInfo cameraInfo = getCameraInfo(userHandle); ApplicationInfo cameraInfo = getCameraInfo(userHandle);
if (cameraInfo == null) { if (cameraInfo == null) {
return false; return false;

View File

@@ -36,6 +36,8 @@ import android.util.ArraySet;
import android.util.Log; import android.util.Log;
import com.android.server.pm.dex.DexManager; import com.android.server.pm.dex.DexManager;
import com.android.server.LocalServices;
import com.android.server.PinnerService;
import java.io.File; import java.io.File;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@@ -366,11 +368,20 @@ public class BackgroundDexOptService extends JobService {
return false; return false;
} }
boolean result;
if (params.getJobId() == JOB_POST_BOOT_UPDATE) { if (params.getJobId() == JOB_POST_BOOT_UPDATE) {
return runPostBootUpdate(params, pm, pkgs); result = runPostBootUpdate(params, pm, pkgs);
} else { } else {
return runIdleOptimization(params, pm, pkgs); result = runIdleOptimization(params, pm, pkgs);
} }
PinnerService pinnerService = (PinnerService) LocalServices.getService(PinnerService.class);
if (pinnerService != null) {
Log.i(TAG, "Pinning optimized code");
pinnerService.update();
}
return result;
} }
@Override @Override