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

Commit 79d91e3e authored by Sharon Su's avatar Sharon Su Committed by Android (Google) Code Review
Browse files

Merge changes from topic "susharon-wallpapereffectsgeneration"

* changes:
  Server implementation of WallpaperEffectsService API.
  Data class and interface for wallpaper effects generation api.
parents 0c20077d a5afd373
Loading
Loading
Loading
Loading
+115 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ package android {
    field public static final String BIND_TRANSLATION_SERVICE = "android.permission.BIND_TRANSLATION_SERVICE";
    field public static final String BIND_TRUST_AGENT = "android.permission.BIND_TRUST_AGENT";
    field public static final String BIND_TV_REMOTE_SERVICE = "android.permission.BIND_TV_REMOTE_SERVICE";
    field public static final String BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE = "android.permission.BIND_WALLPAPER_EFFECTS_GENERATION_SERVICE";
    field public static final String BLUETOOTH_MAP = "android.permission.BLUETOOTH_MAP";
    field public static final String BRICK = "android.permission.BRICK";
    field public static final String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE";
@@ -191,6 +192,7 @@ package android {
    field public static final String MANAGE_USB = "android.permission.MANAGE_USB";
    field public static final String MANAGE_USERS = "android.permission.MANAGE_USERS";
    field public static final String MANAGE_USER_OEM_UNLOCK_STATE = "android.permission.MANAGE_USER_OEM_UNLOCK_STATE";
    field public static final String MANAGE_WALLPAPER_EFFECTS_GENERATION = "android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION";
    field public static final String MANAGE_WEAK_ESCROW_TOKEN = "android.permission.MANAGE_WEAK_ESCROW_TOKEN";
    field public static final String MANAGE_WIFI_AUTO_JOIN = "android.permission.MANAGE_WIFI_AUTO_JOIN";
    field public static final String MANAGE_WIFI_COUNTRY_CODE = "android.permission.MANAGE_WIFI_COUNTRY_CODE";
@@ -2554,6 +2556,107 @@ package android.app.usage {
}
package android.app.wallpapereffectsgeneration {
  public final class CameraAttributes implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public float[] getAnchorPointInOutputUvSpace();
    method @NonNull public float[] getAnchorPointInWorldSpace();
    method public float getCameraOrbitPitchDegrees();
    method public float getCameraOrbitYawDegrees();
    method public float getDollyDistanceInWorldSpace();
    method public float getFrustumFarInWorldSpace();
    method public float getFrustumNearInWorldSpace();
    method public float getVerticalFovDegrees();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.wallpapereffectsgeneration.CameraAttributes> CREATOR;
  }
  public static final class CameraAttributes.Builder {
    ctor public CameraAttributes.Builder(@NonNull float[], @NonNull float[]);
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes build();
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes.Builder setCameraOrbitPitchDegrees(@FloatRange(from=-90.0F, to=90.0f) float);
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes.Builder setCameraOrbitYawDegrees(@FloatRange(from=-180.0F, to=180.0f) float);
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes.Builder setDollyDistanceInWorldSpace(float);
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes.Builder setFrustumFarInWorldSpace(@FloatRange(from=0.0f) float);
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes.Builder setFrustumNearInWorldSpace(@FloatRange(from=0.0f) float);
    method @NonNull public android.app.wallpapereffectsgeneration.CameraAttributes.Builder setVerticalFovDegrees(@FloatRange(from=0.0f, to=180.0f, fromInclusive=false) float);
  }
  public final class CinematicEffectRequest implements android.os.Parcelable {
    ctor public CinematicEffectRequest(@NonNull String, @NonNull android.graphics.Bitmap);
    method public int describeContents();
    method @NonNull public android.graphics.Bitmap getBitmap();
    method @NonNull public String getTaskId();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.wallpapereffectsgeneration.CinematicEffectRequest> CREATOR;
  }
  public final class CinematicEffectResponse implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public android.app.wallpapereffectsgeneration.CameraAttributes getEndKeyFrame();
    method public int getImageContentType();
    method @Nullable public android.app.wallpapereffectsgeneration.CameraAttributes getStartKeyFrame();
    method public int getStatusCode();
    method @NonNull public String getTaskId();
    method @NonNull public java.util.List<android.app.wallpapereffectsgeneration.TexturedMesh> getTexturedMeshes();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int CINEMATIC_EFFECT_STATUS_ERROR = 2; // 0x2
    field public static final int CINEMATIC_EFFECT_STATUS_NOT_READY = 3; // 0x3
    field public static final int CINEMATIC_EFFECT_STATUS_OK = 1; // 0x1
    field public static final int CINEMATIC_EFFECT_STATUS_PENDING = 4; // 0x4
    field public static final int CINEMATIC_EFFECT_STATUS_TOO_MANY_REQUESTS = 5; // 0x5
    field public static final int CINEMATIC_EFFECT_STATUS_UNKNOWN = 0; // 0x0
    field @NonNull public static final android.os.Parcelable.Creator<android.app.wallpapereffectsgeneration.CinematicEffectResponse> CREATOR;
    field public static final int IMAGE_CONTENT_TYPE_LANDSCAPE = 2; // 0x2
    field public static final int IMAGE_CONTENT_TYPE_OTHER = 3; // 0x3
    field public static final int IMAGE_CONTENT_TYPE_PEOPLE_PORTRAIT = 1; // 0x1
    field public static final int IMAGE_CONTENT_TYPE_UNKNOWN = 0; // 0x0
  }
  public static final class CinematicEffectResponse.Builder {
    ctor public CinematicEffectResponse.Builder(int, @NonNull String);
    method @NonNull public android.app.wallpapereffectsgeneration.CinematicEffectResponse build();
    method @NonNull public android.app.wallpapereffectsgeneration.CinematicEffectResponse.Builder setEndKeyFrame(@Nullable android.app.wallpapereffectsgeneration.CameraAttributes);
    method @NonNull public android.app.wallpapereffectsgeneration.CinematicEffectResponse.Builder setImageContentType(int);
    method @NonNull public android.app.wallpapereffectsgeneration.CinematicEffectResponse.Builder setStartKeyFrame(@Nullable android.app.wallpapereffectsgeneration.CameraAttributes);
    method @NonNull public android.app.wallpapereffectsgeneration.CinematicEffectResponse.Builder setTexturedMeshes(@NonNull java.util.List<android.app.wallpapereffectsgeneration.TexturedMesh>);
  }
  public final class TexturedMesh implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public android.graphics.Bitmap getBitmap();
    method @NonNull public int[] getIndices();
    method @NonNull public int getIndicesLayoutType();
    method @NonNull public float[] getVertices();
    method @NonNull public int getVerticesLayoutType();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.app.wallpapereffectsgeneration.TexturedMesh> CREATOR;
    field public static final int INDICES_LAYOUT_TRIANGLES = 1; // 0x1
    field public static final int INDICES_LAYOUT_UNDEFINED = 0; // 0x0
    field public static final int VERTICES_LAYOUT_POSITION3_UV2 = 1; // 0x1
    field public static final int VERTICES_LAYOUT_UNDEFINED = 0; // 0x0
  }
  public static final class TexturedMesh.Builder {
    ctor public TexturedMesh.Builder(@NonNull android.graphics.Bitmap);
    method @NonNull public android.app.wallpapereffectsgeneration.TexturedMesh build();
    method @NonNull public android.app.wallpapereffectsgeneration.TexturedMesh.Builder setIndices(@NonNull int[]);
    method @NonNull public android.app.wallpapereffectsgeneration.TexturedMesh.Builder setIndicesLayoutType(int);
    method @NonNull public android.app.wallpapereffectsgeneration.TexturedMesh.Builder setVertices(@NonNull float[]);
    method @NonNull public android.app.wallpapereffectsgeneration.TexturedMesh.Builder setVerticesLayoutType(int);
  }
  public final class WallpaperEffectsGenerationManager {
    method @RequiresPermission(android.Manifest.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION) public void generateCinematicEffect(@NonNull android.app.wallpapereffectsgeneration.CinematicEffectRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.wallpapereffectsgeneration.WallpaperEffectsGenerationManager.CinematicEffectListener);
  }
  public static interface WallpaperEffectsGenerationManager.CinematicEffectListener {
    method public void onCinematicEffectGenerated(@NonNull android.app.wallpapereffectsgeneration.CinematicEffectResponse);
  }
}
package android.apphibernation {
  public class AppHibernationManager {
@@ -2742,6 +2845,7 @@ package android.content {
    field public static final String UI_TRANSLATION_SERVICE = "ui_translation";
    field public static final String UWB_SERVICE = "uwb";
    field public static final String VR_SERVICE = "vrmanager";
    field public static final String WALLPAPER_EFFECTS_GENERATION_SERVICE = "wallpaper_effects_generation";
    field public static final String WIFI_NL80211_SERVICE = "wifinl80211";
    field @Deprecated public static final String WIFI_RTT_SERVICE = "rttmanager";
    field public static final String WIFI_SCANNING_SERVICE = "wifiscanner";
@@ -11715,6 +11819,17 @@ package android.service.wallpaper {
}
package android.service.wallpapereffectsgeneration {
  public abstract class WallpaperEffectsGenerationService extends android.app.Service {
    ctor public WallpaperEffectsGenerationService();
    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
    method public abstract void onGenerateCinematicEffect(@NonNull android.app.wallpapereffectsgeneration.CinematicEffectRequest);
    method public final void returnCinematicEffectResponse(@NonNull android.app.wallpapereffectsgeneration.CinematicEffectResponse);
  }
}
package android.service.watchdog {
  public abstract class ExplicitHealthCheckService extends android.app.Service {
+16 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import android.app.usage.IUsageStatsManager;
import android.app.usage.NetworkStatsManager;
import android.app.usage.StorageStatsManager;
import android.app.usage.UsageStatsManager;
import android.app.wallpapereffectsgeneration.IWallpaperEffectsGenerationManager;
import android.app.wallpapereffectsgeneration.WallpaperEffectsGenerationManager;
import android.apphibernation.AppHibernationManager;
import android.appwidget.AppWidgetManager;
import android.bluetooth.BluetoothFrameworkInitializer;
@@ -1297,6 +1299,20 @@ public final class SystemServiceRegistry {
                    }
                });

        registerService(Context.WALLPAPER_EFFECTS_GENERATION_SERVICE,
                WallpaperEffectsGenerationManager.class,
                new CachedServiceFetcher<WallpaperEffectsGenerationManager>() {
                    @Override
                    public WallpaperEffectsGenerationManager createService(ContextImpl ctx)
                            throws ServiceNotFoundException {
                        IBinder b = ServiceManager.getService(
                                Context.WALLPAPER_EFFECTS_GENERATION_SERVICE);
                        return b == null ? null :
                                new WallpaperEffectsGenerationManager(
                                        IWallpaperEffectsGenerationManager.Stub.asInterface(b));
                    }
                });

        registerService(Context.VR_SERVICE, VrManager.class, new CachedServiceFetcher<VrManager>() {
            @Override
            public VrManager createService(ContextImpl ctx) throws ServiceNotFoundException {
+301 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.app.wallpapereffectsgeneration;

import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Representing the position and other parameters of camera of a single frame.
 *
 * @hide
 */
@SystemApi
public final class CameraAttributes implements Parcelable {
    /**
     * The location of the anchor within the 3D scene.
     * Expecting 3 floats representing the x, y, z coordinates
     * of the anchor point.
     */
    @NonNull
    private float[] mAnchorPointInWorldSpace;
    /**
     * Where the anchor point should project to in the output image.
     * Expecting 2 floats representing the u,v coordinates of the
     * anchor point.
     */
    @NonNull
    private float[] mAnchorPointInOutputUvSpace;
    /**
     * Specifies the amount of yaw orbit rotation the camera should perform
     * around the anchor point in world space.
     */
    private float mCameraOrbitYawDegrees;
    /**
     * Specifies the amount of pitch orbit rotation the camera should perform
     * around the anchor point in world space.
     */
    private float mCameraOrbitPitchDegrees;
    /**
     * Specifies by how much the camera should be placed towards the anchor
     * point in world space, which is also called dolly distance.
     */
    private float mDollyDistanceInWorldSpace;
    /**
     * Specifies the vertical fov degrees of the virtual image.
     */
    private float mVerticalFovDegrees;
    /**
     * The frustum of near plane.
     */
    private float mFrustumNearInWorldSpace;
    /**
     * The frustum of far plane.
     */
    private float mFrustumFarInWorldSpace;

    private CameraAttributes(Parcel in) {
        this.mCameraOrbitYawDegrees = in.readFloat();
        this.mCameraOrbitPitchDegrees = in.readFloat();
        this.mDollyDistanceInWorldSpace = in.readFloat();
        this.mVerticalFovDegrees = in.readFloat();
        this.mFrustumNearInWorldSpace = in.readFloat();
        this.mFrustumFarInWorldSpace = in.readFloat();
        this.mAnchorPointInWorldSpace = in.createFloatArray();
        this.mAnchorPointInOutputUvSpace = in.createFloatArray();
    }

    private CameraAttributes(float[] anchorPointInWorldSpace, float[] anchorPointInOutputUvSpace,
            float cameraOrbitYawDegrees, float cameraOrbitPitchDegrees,
            float dollyDistanceInWorldSpace,
            float verticalFovDegrees, float frustumNearInWorldSpace, float frustumFarInWorldSpace) {
        mAnchorPointInWorldSpace = anchorPointInWorldSpace;
        mAnchorPointInOutputUvSpace = anchorPointInOutputUvSpace;
        mCameraOrbitYawDegrees = cameraOrbitYawDegrees;
        mCameraOrbitPitchDegrees = cameraOrbitPitchDegrees;
        mDollyDistanceInWorldSpace = dollyDistanceInWorldSpace;
        mVerticalFovDegrees = verticalFovDegrees;
        mFrustumNearInWorldSpace = frustumNearInWorldSpace;
        mFrustumFarInWorldSpace = frustumFarInWorldSpace;
    }

    /**
     * Get the location of the anchor within the 3D scene. The response float array contains
     * 3 floats representing the x, y, z coordinates
     */
    @NonNull
    public float[] getAnchorPointInWorldSpace() {
        return mAnchorPointInWorldSpace;
    }

    /**
     * Get where the anchor point should project to in the output image. The response float
     * array contains 2 floats representing the u,v coordinates of the anchor point.
     */
    @NonNull
    public float[] getAnchorPointInOutputUvSpace() {
        return mAnchorPointInOutputUvSpace;
    }

    /**
     * Get the camera yaw orbit rotation.
     */
    public float getCameraOrbitYawDegrees() {
        return mCameraOrbitYawDegrees;
    }

    /**
     * Get the camera pitch orbit rotation.
     */
    public float getCameraOrbitPitchDegrees() {
        return mCameraOrbitPitchDegrees;
    }

    /**
     * Get how many units the camera should be placed towards the anchor point in world space.
     */
    public float getDollyDistanceInWorldSpace() {
        return mDollyDistanceInWorldSpace;
    }

    /**
     * Get the camera vertical fov degrees.
     */
    public float getVerticalFovDegrees() {
        return mVerticalFovDegrees;
    }

    /**
     * Get the frustum in near plane.
     */
    public float getFrustumNearInWorldSpace() {
        return mFrustumNearInWorldSpace;
    }

    /**
     * Get the frustum in far plane.
     */
    public float getFrustumFarInWorldSpace() {
        return mFrustumFarInWorldSpace;
    }

    @NonNull
    public static final Creator<CameraAttributes> CREATOR = new Creator<CameraAttributes>() {
        @Override
        public CameraAttributes createFromParcel(Parcel in) {
            return new CameraAttributes(in);
        }

        @Override
        public CameraAttributes[] newArray(int size) {
            return new CameraAttributes[size];
        }
    };

    @Override
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeFloat(mCameraOrbitYawDegrees);
        out.writeFloat(mCameraOrbitPitchDegrees);
        out.writeFloat(mDollyDistanceInWorldSpace);
        out.writeFloat(mVerticalFovDegrees);
        out.writeFloat(mFrustumNearInWorldSpace);
        out.writeFloat(mFrustumFarInWorldSpace);
        out.writeFloatArray(mAnchorPointInWorldSpace);
        out.writeFloatArray(mAnchorPointInOutputUvSpace);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * Builder for {@link CameraAttributes}.
     *
     * @hide
     */
    @SystemApi
    public static final class Builder {
        @NonNull
        private float[] mAnchorPointInWorldSpace;
        @NonNull
        private float[] mAnchorPointInOutputUvSpace;
        private float mCameraOrbitYawDegrees;
        private float mCameraOrbitPitchDegrees;
        private float mDollyDistanceInWorldSpace;
        private float mVerticalFovDegrees;
        private float mFrustumNearInWorldSpace;
        private float mFrustumFarInWorldSpace;

        /**
         * Constructor with anchor point in world space and anchor point in output image
         * space.
         *
         * @param anchorPointInWorldSpace the location of the anchor within the 3D scene. The
         *  float array contains 3 floats representing the x, y, z coordinates.
         * @param anchorPointInOutputUvSpace where the anchor point should project to in the
         *  output image. The  float array contains 2 floats representing the u,v coordinates
         *  of the anchor point.
         *
         * @hide
         */
        @SystemApi
        public Builder(@NonNull float[] anchorPointInWorldSpace,
                @NonNull float[] anchorPointInOutputUvSpace) {
            mAnchorPointInWorldSpace = anchorPointInWorldSpace;
            mAnchorPointInOutputUvSpace = anchorPointInOutputUvSpace;
        }

        /**
         * Sets the camera orbit yaw rotation.
         */
        @NonNull
        public Builder setCameraOrbitYawDegrees(
                @FloatRange(from = -180.0f, to = 180.0f) float cameraOrbitYawDegrees) {
            mCameraOrbitYawDegrees = cameraOrbitYawDegrees;
            return this;
        }

        /**
         * Sets the camera orbit pitch rotation.
         */
        @NonNull
        public Builder setCameraOrbitPitchDegrees(
                @FloatRange(from = -90.0f, to = 90.0f) float cameraOrbitPitchDegrees) {
            mCameraOrbitPitchDegrees = cameraOrbitPitchDegrees;
            return this;
        }

        /**
         * Sets the camera dolly distance.
         */
        @NonNull
        public Builder setDollyDistanceInWorldSpace(float dollyDistanceInWorldSpace) {
            mDollyDistanceInWorldSpace = dollyDistanceInWorldSpace;
            return this;
        }

        /**
         * Sets the camera vertical fov degree.
         */
        @NonNull
        public Builder setVerticalFovDegrees(
                @FloatRange(from = 0.0f, to = 180.0f, fromInclusive = false)
                        float verticalFovDegrees) {
            mVerticalFovDegrees = verticalFovDegrees;
            return this;
        }

        /**
         * Sets the frustum in near plane.
         */
        @NonNull
        public Builder setFrustumNearInWorldSpace(
                @FloatRange(from = 0.0f) float frustumNearInWorldSpace) {
            mFrustumNearInWorldSpace = frustumNearInWorldSpace;
            return this;
        }

        /**
         * Sets the frustum in far plane.
         */
        @NonNull
        public Builder setFrustumFarInWorldSpace(
                @FloatRange(from = 0.0f) float frustumFarInWorldSpace) {
            mFrustumFarInWorldSpace = frustumFarInWorldSpace;
            return this;
        }

        /**
         * Builds a new {@link CameraAttributes} instance.
         */
        @NonNull
        public CameraAttributes build() {
            return new CameraAttributes(mAnchorPointInWorldSpace,
                    mAnchorPointInOutputUvSpace,
                    mCameraOrbitYawDegrees,
                    mCameraOrbitPitchDegrees,
                    mDollyDistanceInWorldSpace,
                    mVerticalFovDegrees,
                    mFrustumNearInWorldSpace,
                    mFrustumFarInWorldSpace);
        }
    }
}
+19 −0
Original line number Diff line number Diff line
/**
 * Copyright (c) 2022, 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.app.wallpapereffectsgeneration;

parcelable CinematicEffectRequest;
 No newline at end of file
+115 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading