Loading Ravenwood.bp +28 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ java_genrule { "--debug-log $(location hoststubgen_framework-minus-apex.log) " + "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " + "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " + "--out-impl-jar $(location ravenwood.jar) " + Loading @@ -58,6 +59,7 @@ java_genrule { "hoststubgen_framework-minus-apex.log", "hoststubgen_framework-minus-apex_stats.csv", "hoststubgen_framework-minus-apex_apis.csv", ], visibility: ["//visibility:private"], } Loading Loading @@ -90,6 +92,18 @@ genrule { ], } genrule { name: "framework-minus-apex.ravenwood.apis", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":framework-minus-apex.ravenwood-base{hoststubgen_framework-minus-apex_apis.csv}", ], out: [ "hoststubgen_framework-minus-apex_apis.csv", ], } java_library { name: "services.core-for-hoststubgen", installable: false, // host only jar. Loading @@ -108,6 +122,7 @@ java_genrule { "--debug-log $(location hoststubgen_services.core.log) " + "--stats-file $(location hoststubgen_services.core_stats.csv) " + "--supported-api-list-file $(location hoststubgen_services.core_apis.csv) " + "--out-impl-jar $(location ravenwood.jar) " + Loading @@ -132,6 +147,7 @@ java_genrule { "hoststubgen_services.core.log", "hoststubgen_services.core_stats.csv", "hoststubgen_services.core_apis.csv", ], visibility: ["//visibility:private"], } Loading Loading @@ -161,6 +177,18 @@ genrule { ], } genrule { name: "services.core.ravenwood.apis", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":services.core.ravenwood-base{hoststubgen_services.core_apis.csv}", ], out: [ "hoststubgen_services.core_apis.csv", ], } java_library { name: "services.core.ravenwood-jarjar", installable: false, Loading apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java +15 −20 Original line number Diff line number Diff line Loading @@ -36,10 +36,9 @@ import com.android.server.AppSchedulingModuleThread; import com.android.server.job.JobSchedulerService; import com.android.server.job.StateControllerProto; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.PriorityQueue; import java.util.function.Predicate; /** Loading @@ -64,8 +63,17 @@ public final class TimeController extends StateController { private volatile long mLastFiredDelayExpiredElapsedMillis; private AlarmManager mAlarmService = null; /** List of tracked jobs, sorted asc. by deadline */ private final List<JobStatus> mTrackedJobs = new LinkedList<>(); /** List of tracked jobs, ordered by deadline (lowest i.e. earliest first) */ private final PriorityQueue<JobStatus> mTrackedJobs = new PriorityQueue<>( new Comparator<JobStatus>() { public int compare(JobStatus left, JobStatus right) { return Long.compare( left.getLatestRunTimeElapsed(), right.getLatestRunTimeElapsed()); } }); public TimeController(JobSchedulerService service) { super(service); Loading Loading @@ -102,20 +110,7 @@ public final class TimeController extends StateController { } } boolean isInsert = false; ListIterator<JobStatus> it = mTrackedJobs.listIterator(mTrackedJobs.size()); while (it.hasPrevious()) { JobStatus ts = it.previous(); if (ts.getLatestRunTimeElapsed() < job.getLatestRunTimeElapsed()) { // Insert isInsert = true; break; } } if (isInsert) { it.next(); } it.add(job); mTrackedJobs.add(job); job.setTrackingController(JobStatus.TRACKING_TIME); WorkSource ws = Loading Loading @@ -226,7 +221,7 @@ public final class TimeController extends StateController { String nextExpiryPackageName = null; final long nowElapsedMillis = sElapsedRealtimeClock.millis(); ListIterator<JobStatus> it = mTrackedJobs.listIterator(); Iterator<JobStatus> it = mTrackedJobs.iterator(); while (it.hasNext()) { JobStatus job = it.next(); if (!job.hasDeadlineConstraint()) { Loading core/java/android/app/ApplicationPackageManager.java +40 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ import android.content.pm.parsing.ApkLiteParseUtils; import android.content.res.ApkAssets; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.graphics.Bitmap; import android.graphics.Canvas; Loading Loading @@ -118,9 +119,11 @@ import android.system.StructStat; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AttributeSet; import android.util.LauncherIcons; import android.util.Log; import android.util.Slog; import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.Immutable; Loading @@ -132,6 +135,9 @@ import dalvik.system.VMRuntime; import libcore.util.EmptyArray; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.IOException; import java.io.InputStream; Loading Loading @@ -4090,4 +4096,38 @@ public class ApplicationPackageManager extends PackageManager { } } } @Override public TypedArray extractPackageItemInfoAttributes(PackageItemInfo info, String name, String rootTag, int[] attributes) { if (info == null || info.metaData == null) { return null; } try (XmlResourceParser parser = info.loadXmlMetaData(this, name)) { if (parser == null) { Log.w(TAG, "No " + name + " metadata"); return null; } final AttributeSet attrs = Xml.asAttributeSet(parser); while (true) { final int type = parser.next(); if (type == XmlPullParser.END_DOCUMENT || type == XmlPullParser.START_TAG) { break; } } if (!TextUtils.equals(parser.getName(), rootTag)) { Log.w(TAG, "Metadata does not start with " + name + " tag"); return null; } return getResourcesForApplication(info.getApplicationInfo()) .obtainAttributes(attrs, attributes); } catch (PackageManager.NameNotFoundException | IOException | XmlPullParserException e) { Log.e(TAG, "Error parsing: " + info.packageName, e); return null; } } } core/java/android/companion/CompanionDeviceManager.java +30 −15 Original line number Diff line number Diff line Loading @@ -382,6 +382,10 @@ public final class CompanionDeviceManager { @GuardedBy("mListeners") private final ArrayList<OnAssociationsChangedListenerProxy> mListeners = new ArrayList<>(); @GuardedBy("mTransportsChangedListeners") private final ArrayList<OnTransportsChangedListenerProxy> mTransportsChangedListeners = new ArrayList<>(); @GuardedBy("mTransports") private final SparseArray<Transport> mTransports = new SparseArray<>(); Loading Loading @@ -998,6 +1002,7 @@ public final class CompanionDeviceManager { return; } synchronized (mTransportsChangedListeners) { final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy( executor, listener); try { Loading @@ -1005,6 +1010,8 @@ public final class CompanionDeviceManager { } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } mTransportsChangedListeners.add(proxy); } } /** Loading @@ -1022,13 +1029,21 @@ public final class CompanionDeviceManager { return; } final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy( null, listener); synchronized (mTransportsChangedListeners) { final Iterator<OnTransportsChangedListenerProxy> iterator = mTransportsChangedListeners.iterator(); while (iterator.hasNext()) { final OnTransportsChangedListenerProxy proxy = iterator.next(); if (proxy.mListener == listener) { try { mService.removeOnTransportsChangedListener(proxy); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } iterator.remove(); } } } } /** Loading Loading @@ -1884,7 +1899,7 @@ public final class CompanionDeviceManager { mLocalOut = new ParcelFileDescriptor.AutoCloseOutputStream(localFd); try { mService.attachSystemDataTransport(mContext.getPackageName(), mService.attachSystemDataTransport(mContext.getOpPackageName(), mContext.getUserId(), mAssociationId, remoteFd); } catch (RemoteException e) { throw new IOException("Failed to configure transport", e); Loading Loading @@ -1921,9 +1936,9 @@ public final class CompanionDeviceManager { mStopped = true; try { mService.detachSystemDataTransport(mContext.getPackageName(), mService.detachSystemDataTransport(mContext.getOpPackageName(), mContext.getUserId(), mAssociationId); } catch (RemoteException e) { } catch (RemoteException | IllegalArgumentException e) { Log.w(TAG, "Failed to detach transport", e); } Loading core/java/android/content/pm/ApplicationInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -2700,7 +2700,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** * @hide */ @Override protected ApplicationInfo getApplicationInfo() { @Override public ApplicationInfo getApplicationInfo() { return this; } Loading Loading
Ravenwood.bp +28 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ java_genrule { "--debug-log $(location hoststubgen_framework-minus-apex.log) " + "--stats-file $(location hoststubgen_framework-minus-apex_stats.csv) " + "--supported-api-list-file $(location hoststubgen_framework-minus-apex_apis.csv) " + "--out-impl-jar $(location ravenwood.jar) " + Loading @@ -58,6 +59,7 @@ java_genrule { "hoststubgen_framework-minus-apex.log", "hoststubgen_framework-minus-apex_stats.csv", "hoststubgen_framework-minus-apex_apis.csv", ], visibility: ["//visibility:private"], } Loading Loading @@ -90,6 +92,18 @@ genrule { ], } genrule { name: "framework-minus-apex.ravenwood.apis", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":framework-minus-apex.ravenwood-base{hoststubgen_framework-minus-apex_apis.csv}", ], out: [ "hoststubgen_framework-minus-apex_apis.csv", ], } java_library { name: "services.core-for-hoststubgen", installable: false, // host only jar. Loading @@ -108,6 +122,7 @@ java_genrule { "--debug-log $(location hoststubgen_services.core.log) " + "--stats-file $(location hoststubgen_services.core_stats.csv) " + "--supported-api-list-file $(location hoststubgen_services.core_apis.csv) " + "--out-impl-jar $(location ravenwood.jar) " + Loading @@ -132,6 +147,7 @@ java_genrule { "hoststubgen_services.core.log", "hoststubgen_services.core_stats.csv", "hoststubgen_services.core_apis.csv", ], visibility: ["//visibility:private"], } Loading Loading @@ -161,6 +177,18 @@ genrule { ], } genrule { name: "services.core.ravenwood.apis", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":services.core.ravenwood-base{hoststubgen_services.core_apis.csv}", ], out: [ "hoststubgen_services.core_apis.csv", ], } java_library { name: "services.core.ravenwood-jarjar", installable: false, Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/TimeController.java +15 −20 Original line number Diff line number Diff line Loading @@ -36,10 +36,9 @@ import com.android.server.AppSchedulingModuleThread; import com.android.server.job.JobSchedulerService; import com.android.server.job.StateControllerProto; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.PriorityQueue; import java.util.function.Predicate; /** Loading @@ -64,8 +63,17 @@ public final class TimeController extends StateController { private volatile long mLastFiredDelayExpiredElapsedMillis; private AlarmManager mAlarmService = null; /** List of tracked jobs, sorted asc. by deadline */ private final List<JobStatus> mTrackedJobs = new LinkedList<>(); /** List of tracked jobs, ordered by deadline (lowest i.e. earliest first) */ private final PriorityQueue<JobStatus> mTrackedJobs = new PriorityQueue<>( new Comparator<JobStatus>() { public int compare(JobStatus left, JobStatus right) { return Long.compare( left.getLatestRunTimeElapsed(), right.getLatestRunTimeElapsed()); } }); public TimeController(JobSchedulerService service) { super(service); Loading Loading @@ -102,20 +110,7 @@ public final class TimeController extends StateController { } } boolean isInsert = false; ListIterator<JobStatus> it = mTrackedJobs.listIterator(mTrackedJobs.size()); while (it.hasPrevious()) { JobStatus ts = it.previous(); if (ts.getLatestRunTimeElapsed() < job.getLatestRunTimeElapsed()) { // Insert isInsert = true; break; } } if (isInsert) { it.next(); } it.add(job); mTrackedJobs.add(job); job.setTrackingController(JobStatus.TRACKING_TIME); WorkSource ws = Loading Loading @@ -226,7 +221,7 @@ public final class TimeController extends StateController { String nextExpiryPackageName = null; final long nowElapsedMillis = sElapsedRealtimeClock.millis(); ListIterator<JobStatus> it = mTrackedJobs.listIterator(); Iterator<JobStatus> it = mTrackedJobs.iterator(); while (it.hasNext()) { JobStatus job = it.next(); if (!job.hasDeadlineConstraint()) { Loading
core/java/android/app/ApplicationPackageManager.java +40 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ import android.content.pm.parsing.ApkLiteParseUtils; import android.content.res.ApkAssets; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.graphics.Bitmap; import android.graphics.Canvas; Loading Loading @@ -118,9 +119,11 @@ import android.system.StructStat; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AttributeSet; import android.util.LauncherIcons; import android.util.Log; import android.util.Slog; import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.Immutable; Loading @@ -132,6 +135,9 @@ import dalvik.system.VMRuntime; import libcore.util.EmptyArray; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.IOException; import java.io.InputStream; Loading Loading @@ -4090,4 +4096,38 @@ public class ApplicationPackageManager extends PackageManager { } } } @Override public TypedArray extractPackageItemInfoAttributes(PackageItemInfo info, String name, String rootTag, int[] attributes) { if (info == null || info.metaData == null) { return null; } try (XmlResourceParser parser = info.loadXmlMetaData(this, name)) { if (parser == null) { Log.w(TAG, "No " + name + " metadata"); return null; } final AttributeSet attrs = Xml.asAttributeSet(parser); while (true) { final int type = parser.next(); if (type == XmlPullParser.END_DOCUMENT || type == XmlPullParser.START_TAG) { break; } } if (!TextUtils.equals(parser.getName(), rootTag)) { Log.w(TAG, "Metadata does not start with " + name + " tag"); return null; } return getResourcesForApplication(info.getApplicationInfo()) .obtainAttributes(attrs, attributes); } catch (PackageManager.NameNotFoundException | IOException | XmlPullParserException e) { Log.e(TAG, "Error parsing: " + info.packageName, e); return null; } } }
core/java/android/companion/CompanionDeviceManager.java +30 −15 Original line number Diff line number Diff line Loading @@ -382,6 +382,10 @@ public final class CompanionDeviceManager { @GuardedBy("mListeners") private final ArrayList<OnAssociationsChangedListenerProxy> mListeners = new ArrayList<>(); @GuardedBy("mTransportsChangedListeners") private final ArrayList<OnTransportsChangedListenerProxy> mTransportsChangedListeners = new ArrayList<>(); @GuardedBy("mTransports") private final SparseArray<Transport> mTransports = new SparseArray<>(); Loading Loading @@ -998,6 +1002,7 @@ public final class CompanionDeviceManager { return; } synchronized (mTransportsChangedListeners) { final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy( executor, listener); try { Loading @@ -1005,6 +1010,8 @@ public final class CompanionDeviceManager { } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } mTransportsChangedListeners.add(proxy); } } /** Loading @@ -1022,13 +1029,21 @@ public final class CompanionDeviceManager { return; } final OnTransportsChangedListenerProxy proxy = new OnTransportsChangedListenerProxy( null, listener); synchronized (mTransportsChangedListeners) { final Iterator<OnTransportsChangedListenerProxy> iterator = mTransportsChangedListeners.iterator(); while (iterator.hasNext()) { final OnTransportsChangedListenerProxy proxy = iterator.next(); if (proxy.mListener == listener) { try { mService.removeOnTransportsChangedListener(proxy); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } iterator.remove(); } } } } /** Loading Loading @@ -1884,7 +1899,7 @@ public final class CompanionDeviceManager { mLocalOut = new ParcelFileDescriptor.AutoCloseOutputStream(localFd); try { mService.attachSystemDataTransport(mContext.getPackageName(), mService.attachSystemDataTransport(mContext.getOpPackageName(), mContext.getUserId(), mAssociationId, remoteFd); } catch (RemoteException e) { throw new IOException("Failed to configure transport", e); Loading Loading @@ -1921,9 +1936,9 @@ public final class CompanionDeviceManager { mStopped = true; try { mService.detachSystemDataTransport(mContext.getPackageName(), mService.detachSystemDataTransport(mContext.getOpPackageName(), mContext.getUserId(), mAssociationId); } catch (RemoteException e) { } catch (RemoteException | IllegalArgumentException e) { Log.w(TAG, "Failed to detach transport", e); } Loading
core/java/android/content/pm/ApplicationInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -2700,7 +2700,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { /** * @hide */ @Override protected ApplicationInfo getApplicationInfo() { @Override public ApplicationInfo getApplicationInfo() { return this; } Loading