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

Commit 7c3eef2f authored by Eugene Susla's avatar Eugene Susla
Browse files

Add system feature for Companion Device Manager

Bug: 30932767
Test: Add just the feature gating first, ensure Context#getSystemSetrvice now
returns null.
Add feature in the configuration files, ensure companion device feature works again.
Change-Id: I4ad2d52f7877eae0e951f43ddbb23881d5de8d8b
parent 40cd0544
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10589,6 +10589,7 @@ package android.content.pm {
    field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
    field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
    field public static final java.lang.String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
    field public static final java.lang.String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup";
    field public static final java.lang.String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
    field public static final java.lang.String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
    field public static final java.lang.String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
+1 −0
Original line number Diff line number Diff line
@@ -11248,6 +11248,7 @@ package android.content.pm {
    field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
    field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
    field public static final java.lang.String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
    field public static final java.lang.String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup";
    field public static final java.lang.String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
    field public static final java.lang.String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
    field public static final java.lang.String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
+1 −0
Original line number Diff line number Diff line
@@ -10625,6 +10625,7 @@ package android.content.pm {
    field public static final java.lang.String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
    field public static final java.lang.String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
    field public static final java.lang.String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
    field public static final java.lang.String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup";
    field public static final java.lang.String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
    field public static final java.lang.String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
    field public static final java.lang.String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
+31 −1
Original line number Diff line number Diff line
@@ -22,10 +22,13 @@ import android.annotation.Nullable;
import android.app.PendingIntent;
import android.content.Context;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
import android.util.Log;

import java.util.Collections;
import java.util.List;

/**
@@ -40,6 +43,9 @@ import java.util.List;
 */
public final class CompanionDeviceManager {

    private static final boolean DEBUG = false; //TODO
    private static final String LOG_TAG = "CompanionDeviceManager";

    /**
     * A device, returned in the activity result of the {@link IntentSender} received in
     * {@link Callback#onDeviceFound}
@@ -81,7 +87,7 @@ public final class CompanionDeviceManager {

    /** @hide */
    public CompanionDeviceManager(
            @NonNull ICompanionDeviceManager service, @NonNull Context context) {
            @Nullable ICompanionDeviceManager service, @NonNull Context context) {
        mService = service;
        mContext = context;
    }
@@ -120,6 +126,10 @@ public final class CompanionDeviceManager {
            @NonNull AssociationRequest<?> request,
            @NonNull Callback callback,
            @Nullable Handler handler) {
        if (!checkFeaturePresent()) {
            return;
        }

        final Handler finalHandler = handler != null
                ? handler
                : new Handler(Looper.getMainLooper());
@@ -153,6 +163,9 @@ public final class CompanionDeviceManager {
     */
    @NonNull
    public List<String> getAssociations() {
        if (!checkFeaturePresent()) {
            return Collections.emptyList();
        }
        try {
            return mService.getAssociations(mContext.getPackageName());
        } catch (RemoteException e) {
@@ -172,6 +185,9 @@ public final class CompanionDeviceManager {
     * @param deviceMacAddress the MAC address of device to disassociate from this app
     */
    public void disassociate(@NonNull String deviceMacAddress) {
        if (!checkFeaturePresent()) {
            return;
        }
        try {
            mService.disassociate(deviceMacAddress, mContext.getPackageName());
        } catch (RemoteException e) {
@@ -181,14 +197,28 @@ public final class CompanionDeviceManager {

    /** @hide */
    public void requestNotificationAccess() {
        if (!checkFeaturePresent()) {
            return;
        }
        //TODO implement
        throw new UnsupportedOperationException("Not yet implemented");
    }

    /** @hide */
    public boolean haveNotificationAccess() {
        if (!checkFeaturePresent()) {
            return false;
        }
        //TODO implement
        throw new UnsupportedOperationException("Not yet implemented");
    }

    private boolean checkFeaturePresent() {
        boolean featurePresent = mService == null;
        if (!featurePresent && DEBUG) {
            Log.d(LOG_TAG, "Feature " + PackageManager.FEATURE_COMPANION_DEVICE_SETUP
                    + " not available");
        }
        return featurePresent;
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -2218,6 +2218,15 @@ public abstract class PackageManager {
    @SdkConstant(SdkConstantType.FEATURE)
    public static final String FEATURE_PRINTING = "android.software.print";

    /**
     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
     * The device supports {@link android.companion.CompanionDeviceManager#associate associating}
     * with devices via {@link android.companion.CompanionDeviceManager}.
     */
    @SdkConstant(SdkConstantType.FEATURE)
    public static final String FEATURE_COMPANION_DEVICE_SETUP
            = "android.software.companion_device_setup";

    /**
     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
     * The device can perform backup and restore operations on installed applications.
Loading