Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e342c5a3 authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge "Add supported PackageInfo to ExplicitHealthCheckService API"...

Merge "Merge "Add supported PackageInfo to ExplicitHealthCheckService API" into qt-dev am: dc269b5a am: 75e430e0"
parents a02af709 a7694faf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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",
+10 −1
Original line number Diff line number Diff line
@@ -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 {
+18 −14
Original line number Diff line number Diff line
@@ -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}
     */
@@ -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
@@ -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);
            });
        }
    }
}
+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;
+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