Loading Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,7 @@ java_defaults { "core/java/android/service/vr/IVrManager.aidl", "core/java/android/service/vr/IVrStateCallbacks.aidl", "core/java/android/service/watchdog/IExplicitHealthCheckService.aidl", "core/java/android/service/watchdog/PackageInfo.aidl", "core/java/android/print/ILayoutResultCallback.aidl", "core/java/android/print/IPrinterDiscoveryObserver.aidl", "core/java/android/print/IPrintDocumentAdapter.aidl", Loading api/system-current.txt +10 −1 Original line number Diff line number Diff line Loading @@ -6890,12 +6890,21 @@ package android.service.watchdog { method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent); method public abstract void onCancelHealthCheck(@NonNull String); method @NonNull public abstract java.util.List<java.lang.String> onGetRequestedPackages(); method @NonNull public abstract java.util.List<java.lang.String> onGetSupportedPackages(); method @NonNull public abstract java.util.List<android.service.watchdog.PackageInfo> onGetSupportedPackages(); method public abstract void onRequestHealthCheck(@NonNull String); field public static final String BIND_PERMISSION = "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE"; field public static final String SERVICE_INTERFACE = "android.service.watchdog.ExplicitHealthCheckService"; } public final class PackageInfo implements android.os.Parcelable { ctor public PackageInfo(@NonNull String, long); method public int describeContents(); method public long getHealthCheckTimeoutMillis(); method @NonNull public String getPackageName(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.service.watchdog.PackageInfo> CREATOR; } } package android.telecom { Loading core/java/android/service/watchdog/ExplicitHealthCheckService.java +18 −14 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ public abstract class ExplicitHealthCheckService extends Service { private static final String TAG = "ExplicitHealthCheckService"; /** * {@link Bundle} key for a {@link List} of {@link String} value. * {@link Bundle} key for a {@link List} of {@link PackageInfo} value. * * {@hide} */ Loading Loading @@ -130,7 +130,7 @@ public abstract class ExplicitHealthCheckService extends Service { * * @return all packages supporting explicit health checks */ @NonNull public abstract List<String> onGetSupportedPackages(); @NonNull public abstract List<PackageInfo> onGetSupportedPackages(); /** * Called when the system requests for all the packages that it has currently requested Loading Loading @@ -187,22 +187,26 @@ public abstract class ExplicitHealthCheckService extends Service { @Override public void getSupportedPackages(RemoteCallback callback) throws RemoteException { mHandler.post(() -> sendPackages(callback, EXTRA_SUPPORTED_PACKAGES, ExplicitHealthCheckService.this.onGetSupportedPackages())); mHandler.post(() -> { List<PackageInfo> packages = ExplicitHealthCheckService.this.onGetSupportedPackages(); Objects.requireNonNull(packages, "Supported package list must be non-null"); Bundle bundle = new Bundle(); bundle.putParcelableArrayList(EXTRA_SUPPORTED_PACKAGES, new ArrayList<>(packages)); callback.sendResult(bundle); }); } @Override public void getRequestedPackages(RemoteCallback callback) throws RemoteException { mHandler.post(() -> sendPackages(callback, EXTRA_REQUESTED_PACKAGES, ExplicitHealthCheckService.this.onGetRequestedPackages())); } private void sendPackages(RemoteCallback callback, String key, List<String> packages) { Objects.requireNonNull(packages, "Supported and requested package list must be non-null"); mHandler.post(() -> { List<String> packages = ExplicitHealthCheckService.this.onGetRequestedPackages(); Objects.requireNonNull(packages, "Requested package list must be non-null"); Bundle bundle = new Bundle(); bundle.putStringArrayList(key, new ArrayList<>(packages)); bundle.putStringArrayList(EXTRA_REQUESTED_PACKAGES, new ArrayList<>(packages)); callback.sendResult(bundle); }); } } } core/java/android/service/watchdog/PackageInfo.aidl 0 → 100644 +22 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.service.watchdog; /** * @hide */ parcelable PackageInfo; core/java/android/service/watchdog/PackageInfo.java 0 → 100644 +130 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.service.watchdog; import android.annotation.NonNull; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import com.android.internal.util.Preconditions; import java.util.Objects; import java.util.concurrent.TimeUnit; /** * A PackageInfo contains a package supporting explicit health checks and the * timeout in {@link System#uptimeMillis} across reboots after which health * check requests from clients are failed. * * @hide */ @SystemApi public final class PackageInfo implements Parcelable { // TODO: Receive from DeviceConfig flag private static final long DEFAULT_HEALTH_CHECK_TIMEOUT_MILLIS = TimeUnit.HOURS.toMillis(1); private final String mPackageName; private final long mHealthCheckTimeoutMillis; /** * Creates a new instance. * * @param packageName the package name * @param durationMillis the duration in milliseconds, must be greater than or * equal to 0. If it is 0, it will use a system default value. */ public PackageInfo(@NonNull String packageName, long healthCheckTimeoutMillis) { mPackageName = Preconditions.checkNotNull(packageName); if (healthCheckTimeoutMillis == 0) { mHealthCheckTimeoutMillis = DEFAULT_HEALTH_CHECK_TIMEOUT_MILLIS; } else { mHealthCheckTimeoutMillis = Preconditions.checkArgumentNonnegative( healthCheckTimeoutMillis); } } private PackageInfo(Parcel parcel) { mPackageName = parcel.readString(); mHealthCheckTimeoutMillis = parcel.readLong(); } /** * Gets the package name. * * @return the package name */ public @NonNull String getPackageName() { return mPackageName; } /** * Gets the timeout in milliseconds to evaluate an explicit health check result after a request. * * @return the duration in {@link System#uptimeMillis} across reboots */ public long getHealthCheckTimeoutMillis() { return mHealthCheckTimeoutMillis; } @Override public String toString() { return "PackageInfo{" + mPackageName + ", " + mHealthCheckTimeoutMillis + "}"; } @Override public boolean equals(Object other) { if (other == this) { return true; } if (!(other instanceof PackageInfo)) { return false; } PackageInfo otherInfo = (PackageInfo) other; return Objects.equals(otherInfo.getHealthCheckTimeoutMillis(), mHealthCheckTimeoutMillis) && Objects.equals(otherInfo.getPackageName(), mPackageName); } @Override public int hashCode() { return Objects.hash(mPackageName, mHealthCheckTimeoutMillis); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeString(mPackageName); parcel.writeLong(mHealthCheckTimeoutMillis); } public static final @NonNull Creator<PackageInfo> CREATOR = new Creator<PackageInfo>() { @Override public PackageInfo createFromParcel(Parcel source) { return new PackageInfo(source); } @Override public PackageInfo[] newArray(int size) { return new PackageInfo[size]; } }; } Loading
Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,7 @@ java_defaults { "core/java/android/service/vr/IVrManager.aidl", "core/java/android/service/vr/IVrStateCallbacks.aidl", "core/java/android/service/watchdog/IExplicitHealthCheckService.aidl", "core/java/android/service/watchdog/PackageInfo.aidl", "core/java/android/print/ILayoutResultCallback.aidl", "core/java/android/print/IPrinterDiscoveryObserver.aidl", "core/java/android/print/IPrintDocumentAdapter.aidl", Loading
api/system-current.txt +10 −1 Original line number Diff line number Diff line Loading @@ -6890,12 +6890,21 @@ package android.service.watchdog { method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent); method public abstract void onCancelHealthCheck(@NonNull String); method @NonNull public abstract java.util.List<java.lang.String> onGetRequestedPackages(); method @NonNull public abstract java.util.List<java.lang.String> onGetSupportedPackages(); method @NonNull public abstract java.util.List<android.service.watchdog.PackageInfo> onGetSupportedPackages(); method public abstract void onRequestHealthCheck(@NonNull String); field public static final String BIND_PERMISSION = "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE"; field public static final String SERVICE_INTERFACE = "android.service.watchdog.ExplicitHealthCheckService"; } public final class PackageInfo implements android.os.Parcelable { ctor public PackageInfo(@NonNull String, long); method public int describeContents(); method public long getHealthCheckTimeoutMillis(); method @NonNull public String getPackageName(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.service.watchdog.PackageInfo> CREATOR; } } package android.telecom { Loading
core/java/android/service/watchdog/ExplicitHealthCheckService.java +18 −14 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ public abstract class ExplicitHealthCheckService extends Service { private static final String TAG = "ExplicitHealthCheckService"; /** * {@link Bundle} key for a {@link List} of {@link String} value. * {@link Bundle} key for a {@link List} of {@link PackageInfo} value. * * {@hide} */ Loading Loading @@ -130,7 +130,7 @@ public abstract class ExplicitHealthCheckService extends Service { * * @return all packages supporting explicit health checks */ @NonNull public abstract List<String> onGetSupportedPackages(); @NonNull public abstract List<PackageInfo> onGetSupportedPackages(); /** * Called when the system requests for all the packages that it has currently requested Loading Loading @@ -187,22 +187,26 @@ public abstract class ExplicitHealthCheckService extends Service { @Override public void getSupportedPackages(RemoteCallback callback) throws RemoteException { mHandler.post(() -> sendPackages(callback, EXTRA_SUPPORTED_PACKAGES, ExplicitHealthCheckService.this.onGetSupportedPackages())); mHandler.post(() -> { List<PackageInfo> packages = ExplicitHealthCheckService.this.onGetSupportedPackages(); Objects.requireNonNull(packages, "Supported package list must be non-null"); Bundle bundle = new Bundle(); bundle.putParcelableArrayList(EXTRA_SUPPORTED_PACKAGES, new ArrayList<>(packages)); callback.sendResult(bundle); }); } @Override public void getRequestedPackages(RemoteCallback callback) throws RemoteException { mHandler.post(() -> sendPackages(callback, EXTRA_REQUESTED_PACKAGES, ExplicitHealthCheckService.this.onGetRequestedPackages())); } private void sendPackages(RemoteCallback callback, String key, List<String> packages) { Objects.requireNonNull(packages, "Supported and requested package list must be non-null"); mHandler.post(() -> { List<String> packages = ExplicitHealthCheckService.this.onGetRequestedPackages(); Objects.requireNonNull(packages, "Requested package list must be non-null"); Bundle bundle = new Bundle(); bundle.putStringArrayList(key, new ArrayList<>(packages)); bundle.putStringArrayList(EXTRA_REQUESTED_PACKAGES, new ArrayList<>(packages)); callback.sendResult(bundle); }); } } }
core/java/android/service/watchdog/PackageInfo.aidl 0 → 100644 +22 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.service.watchdog; /** * @hide */ parcelable PackageInfo;
core/java/android/service/watchdog/PackageInfo.java 0 → 100644 +130 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.service.watchdog; import android.annotation.NonNull; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import com.android.internal.util.Preconditions; import java.util.Objects; import java.util.concurrent.TimeUnit; /** * A PackageInfo contains a package supporting explicit health checks and the * timeout in {@link System#uptimeMillis} across reboots after which health * check requests from clients are failed. * * @hide */ @SystemApi public final class PackageInfo implements Parcelable { // TODO: Receive from DeviceConfig flag private static final long DEFAULT_HEALTH_CHECK_TIMEOUT_MILLIS = TimeUnit.HOURS.toMillis(1); private final String mPackageName; private final long mHealthCheckTimeoutMillis; /** * Creates a new instance. * * @param packageName the package name * @param durationMillis the duration in milliseconds, must be greater than or * equal to 0. If it is 0, it will use a system default value. */ public PackageInfo(@NonNull String packageName, long healthCheckTimeoutMillis) { mPackageName = Preconditions.checkNotNull(packageName); if (healthCheckTimeoutMillis == 0) { mHealthCheckTimeoutMillis = DEFAULT_HEALTH_CHECK_TIMEOUT_MILLIS; } else { mHealthCheckTimeoutMillis = Preconditions.checkArgumentNonnegative( healthCheckTimeoutMillis); } } private PackageInfo(Parcel parcel) { mPackageName = parcel.readString(); mHealthCheckTimeoutMillis = parcel.readLong(); } /** * Gets the package name. * * @return the package name */ public @NonNull String getPackageName() { return mPackageName; } /** * Gets the timeout in milliseconds to evaluate an explicit health check result after a request. * * @return the duration in {@link System#uptimeMillis} across reboots */ public long getHealthCheckTimeoutMillis() { return mHealthCheckTimeoutMillis; } @Override public String toString() { return "PackageInfo{" + mPackageName + ", " + mHealthCheckTimeoutMillis + "}"; } @Override public boolean equals(Object other) { if (other == this) { return true; } if (!(other instanceof PackageInfo)) { return false; } PackageInfo otherInfo = (PackageInfo) other; return Objects.equals(otherInfo.getHealthCheckTimeoutMillis(), mHealthCheckTimeoutMillis) && Objects.equals(otherInfo.getPackageName(), mPackageName); } @Override public int hashCode() { return Objects.hash(mPackageName, mHealthCheckTimeoutMillis); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeString(mPackageName); parcel.writeLong(mHealthCheckTimeoutMillis); } public static final @NonNull Creator<PackageInfo> CREATOR = new Creator<PackageInfo>() { @Override public PackageInfo createFromParcel(Parcel source) { return new PackageInfo(source); } @Override public PackageInfo[] newArray(int size) { return new PackageInfo[size]; } }; }