File: WallpaperEffectsGenerationManager.java

package info (click to toggle)
android-platform-frameworks-base 1%3A14~beta1-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 326,092 kB
  • sloc: java: 2,032,373; xml: 343,016; cpp: 304,181; python: 3,683; ansic: 2,090; sh: 1,871; makefile: 117; sed: 19
file content (114 lines) | stat: -rw-r--r-- 4,315 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 * 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.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import android.os.RemoteException;

import java.util.concurrent.Executor;

/**
 * A {@link WallpaperEffectsGenerationManager} is the class that passes wallpaper effects
 * generation requests to wallpaper effect generation service. For example, create a cinematic
 * and render a cinematic live wallpaper with the response.
 *
 * Usage:
 * <pre>{@code
 *      mWallpaperEffectsGenerationManager =
 *          context.getSystemService(WallpaperEffectsGenerationManager.class);
 *      mWallpaperEffectsGenerationManager.
 *          generateCinematicEffect(cinematicEffectRequest, response->{
 *              // proceed cinematic effect response.
 *          });
 * }</pre>
 *
 * @hide
 */
@SystemApi
@SystemService(Context.WALLPAPER_EFFECTS_GENERATION_SERVICE)
public final class WallpaperEffectsGenerationManager {
    /**
     * Interface for the cinematic effect listener.
     */
    public interface CinematicEffectListener {
        /**
         * Async call when the cinematic effect response is generated.
         * Client needs to check the status code of {@link CinematicEffectResponse}
         * to determine if the effect generation is successful.
         *
         * @param response The generated cinematic effect response.
         */
        void onCinematicEffectGenerated(@NonNull CinematicEffectResponse response);
    }

    private final IWallpaperEffectsGenerationManager mService;

    /** @hide */
    public WallpaperEffectsGenerationManager(
            @NonNull IWallpaperEffectsGenerationManager service) {
        mService = service;
    }

    /**
     * Execute a {@link android.app.wallpapereffectsgeneration.CinematicEffectRequest} from
     * the given parameters to the wallpaper effects generation service. After the cinematic
     * effect response is ready, the given listener is invoked by the system with the response.
     * The listener may never receive a callback if unexpected error happened when proceeding
     * request.
     *
     * @param request  request to generate cinematic effect.
     * @param executor where the listener is invoked.
     * @param listener listener invoked when the cinematic effect response is available.
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION)
    public void generateCinematicEffect(@NonNull CinematicEffectRequest request,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull CinematicEffectListener listener) {
        try {
            mService.generateCinematicEffect(request,
                    new CinematicEffectListenerWrapper(listener, executor));
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    private static final class CinematicEffectListenerWrapper
            extends ICinematicEffectListener.Stub {
        @NonNull
        private final CinematicEffectListener mListener;
        @NonNull
        private final Executor mExecutor;

        CinematicEffectListenerWrapper(@NonNull CinematicEffectListener listener,
                @NonNull Executor executor) {
            mListener = listener;
            mExecutor = executor;
        }

        @Override
        public void onCinematicEffectGenerated(CinematicEffectResponse response) {
            mExecutor.execute(() -> mListener.onCinematicEffectGenerated(response));
        }
    }
}