Merge "Re-run pinner service on camera app update and dex optimization." into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a7e45e364c
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user