Merge "Add supported PackageInfo to ExplicitHealthCheckService API" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
dc269b5a4a
@@ -319,6 +319,7 @@ java_defaults {
|
|||||||
"core/java/android/service/vr/IVrManager.aidl",
|
"core/java/android/service/vr/IVrManager.aidl",
|
||||||
"core/java/android/service/vr/IVrStateCallbacks.aidl",
|
"core/java/android/service/vr/IVrStateCallbacks.aidl",
|
||||||
"core/java/android/service/watchdog/IExplicitHealthCheckService.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/ILayoutResultCallback.aidl",
|
||||||
"core/java/android/print/IPrinterDiscoveryObserver.aidl",
|
"core/java/android/print/IPrinterDiscoveryObserver.aidl",
|
||||||
"core/java/android/print/IPrintDocumentAdapter.aidl",
|
"core/java/android/print/IPrintDocumentAdapter.aidl",
|
||||||
|
|||||||
@@ -6895,12 +6895,21 @@ package android.service.watchdog {
|
|||||||
method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
|
method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
|
||||||
method public abstract void onCancelHealthCheck(@NonNull String);
|
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> 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);
|
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 BIND_PERMISSION = "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE";
|
||||||
field public static final String SERVICE_INTERFACE = "android.service.watchdog.ExplicitHealthCheckService";
|
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 {
|
package android.telecom {
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public abstract class ExplicitHealthCheckService extends Service {
|
|||||||
private static final String TAG = "ExplicitHealthCheckService";
|
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}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
@@ -130,7 +130,7 @@ public abstract class ExplicitHealthCheckService extends Service {
|
|||||||
*
|
*
|
||||||
* @return all packages supporting explicit health checks
|
* @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
|
* Called when the system requests for all the packages that it has currently requested
|
||||||
@@ -187,22 +187,26 @@ public abstract class ExplicitHealthCheckService extends Service {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getSupportedPackages(RemoteCallback callback) throws RemoteException {
|
public void getSupportedPackages(RemoteCallback callback) throws RemoteException {
|
||||||
mHandler.post(() -> sendPackages(callback, EXTRA_SUPPORTED_PACKAGES,
|
mHandler.post(() -> {
|
||||||
ExplicitHealthCheckService.this.onGetSupportedPackages()));
|
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
|
@Override
|
||||||
public void getRequestedPackages(RemoteCallback callback) throws RemoteException {
|
public void getRequestedPackages(RemoteCallback callback) throws RemoteException {
|
||||||
mHandler.post(() -> sendPackages(callback, EXTRA_REQUESTED_PACKAGES,
|
mHandler.post(() -> {
|
||||||
ExplicitHealthCheckService.this.onGetRequestedPackages()));
|
List<String> packages =
|
||||||
}
|
ExplicitHealthCheckService.this.onGetRequestedPackages();
|
||||||
|
Objects.requireNonNull(packages, "Requested package list must be non-null");
|
||||||
private void sendPackages(RemoteCallback callback, String key, List<String> packages) {
|
Bundle bundle = new Bundle();
|
||||||
Objects.requireNonNull(packages,
|
bundle.putStringArrayList(EXTRA_REQUESTED_PACKAGES, new ArrayList<>(packages));
|
||||||
"Supported and requested package list must be non-null");
|
callback.sendResult(bundle);
|
||||||
Bundle bundle = new Bundle();
|
});
|
||||||
bundle.putStringArrayList(key, new ArrayList<>(packages));
|
|
||||||
callback.sendResult(bundle);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
22
core/java/android/service/watchdog/PackageInfo.aidl
Normal file
22
core/java/android/service/watchdog/PackageInfo.aidl
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
130
core/java/android/service/watchdog/PackageInfo.java
Normal file
130
core/java/android/service/watchdog/PackageInfo.java
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* 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];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ package android.ext.services.watchdog;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.service.watchdog.ExplicitHealthCheckService;
|
import android.service.watchdog.ExplicitHealthCheckService;
|
||||||
|
import android.service.watchdog.PackageInfo;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -67,8 +68,12 @@ public final class ExplicitHealthCheckServiceImpl extends ExplicitHealthCheckSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> onGetSupportedPackages() {
|
public List<PackageInfo> onGetSupportedPackages() {
|
||||||
return new ArrayList<>(mSupportedCheckers.keySet());
|
List<PackageInfo> packages = new ArrayList<>();
|
||||||
|
for (ExplicitHealthChecker checker : mSupportedCheckers.values()) {
|
||||||
|
packages.add(checker.getSupportedPackage());
|
||||||
|
}
|
||||||
|
return packages;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,7 +87,7 @@ public final class ExplicitHealthCheckServiceImpl extends ExplicitHealthCheckSer
|
|||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
ExplicitHealthChecker checker = it.next();
|
ExplicitHealthChecker checker = it.next();
|
||||||
if (checker.isPending()) {
|
if (checker.isPending()) {
|
||||||
packages.add(checker.getPackageName());
|
packages.add(checker.getSupportedPackage().getPackageName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return packages;
|
return packages;
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package android.ext.services.watchdog;
|
package android.ext.services.watchdog;
|
||||||
|
|
||||||
|
import android.service.watchdog.PackageInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A type of explicit health check that can be performed on a device, e.g network health check
|
* A type of explicit health check that can be performed on a device, e.g network health check
|
||||||
*/
|
*/
|
||||||
@@ -38,7 +40,7 @@ interface ExplicitHealthChecker {
|
|||||||
boolean isPending();
|
boolean isPending();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the package name this checker can make requests for.
|
* Returns the {@link PackageInfo} object this checker can make requests for.
|
||||||
*/
|
*/
|
||||||
String getPackageName();
|
PackageInfo getSupportedPackage();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.net.Network;
|
|||||||
import android.net.NetworkCapabilities;
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkRequest;
|
import android.net.NetworkRequest;
|
||||||
import android.service.watchdog.ExplicitHealthCheckService;
|
import android.service.watchdog.ExplicitHealthCheckService;
|
||||||
|
import android.service.watchdog.PackageInfo;
|
||||||
|
|
||||||
import com.android.internal.annotations.GuardedBy;
|
import com.android.internal.annotations.GuardedBy;
|
||||||
|
|
||||||
@@ -34,6 +35,8 @@ final class NetworkChecker extends ConnectivityManager.NetworkCallback
|
|||||||
private final Object mLock = new Object();
|
private final Object mLock = new Object();
|
||||||
private final ExplicitHealthCheckService mService;
|
private final ExplicitHealthCheckService mService;
|
||||||
private final String mPackageName;
|
private final String mPackageName;
|
||||||
|
// TODO: Receive from DeviceConfig flag
|
||||||
|
private final long mRequestDurationMillis = 0;
|
||||||
@GuardedBy("mLock")
|
@GuardedBy("mLock")
|
||||||
private boolean mIsPending;
|
private boolean mIsPending;
|
||||||
|
|
||||||
@@ -73,8 +76,8 @@ final class NetworkChecker extends ConnectivityManager.NetworkCallback
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPackageName() {
|
public PackageInfo getSupportedPackage() {
|
||||||
return mPackageName;
|
return new PackageInfo(mPackageName, mRequestDurationMillis);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(b/120598832): Also monitor NetworkCallback#onAvailable to see if we have any
|
// TODO(b/120598832): Also monitor NetworkCallback#onAvailable to see if we have any
|
||||||
|
|||||||
Reference in New Issue
Block a user