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

Commit 75e430e0 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue Committed by android-build-merger
Browse files

Merge "Add supported PackageInfo to ExplicitHealthCheckService API" into qt-dev

am: dc269b5a

Change-Id: Id856dd56cf7467d1a23a4a138758487d31012f0f
parents f9b1c71a dc269b5a
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