| /* |
| * Copyright (C) 2020 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 com.android.wallpaper.util; |
| |
| import android.os.Bundle; |
| import android.os.Message; |
| import android.view.SurfaceControlViewHost; |
| import android.view.SurfaceView; |
| |
| import androidx.annotation.Nullable; |
| |
| /** Util class to generate surface view requests and parse responses */ |
| public class SurfaceViewUtils { |
| |
| private static final String KEY_HOST_TOKEN = "host_token"; |
| private static final String KEY_VIEW_WIDTH = "width"; |
| private static final String KEY_VIEW_HEIGHT = "height"; |
| public static final String KEY_DISPLAY_ID = "display_id"; |
| private static final String KEY_SURFACE_PACKAGE = "surface_package"; |
| private static final String KEY_CALLBACK = "callback"; |
| public static final String KEY_WALLPAPER_COLORS = "wallpaper_colors"; |
| |
| /** Create a surface view request. */ |
| public static Bundle createSurfaceViewRequest(SurfaceView surfaceView) { |
| return createSurfaceViewRequest(surfaceView, null); |
| } |
| |
| /** Create a surface view request. */ |
| public static Bundle createSurfaceViewRequest( |
| SurfaceView surfaceView, |
| @Nullable Bundle extras) { |
| Bundle bundle = new Bundle(); |
| bundle.putBinder(KEY_HOST_TOKEN, surfaceView.getHostToken()); |
| // TODO (b/305258307): Figure out why SurfaceView.getDisplay returns null in small preview |
| if (surfaceView.getDisplay() != null) { |
| bundle.putInt(KEY_DISPLAY_ID, surfaceView.getDisplay().getDisplayId()); |
| } |
| bundle.putInt(KEY_VIEW_WIDTH, surfaceView.getWidth()); |
| bundle.putInt(KEY_VIEW_HEIGHT, surfaceView.getHeight()); |
| if (extras != null) { |
| bundle.putAll(extras); |
| } |
| return bundle; |
| } |
| |
| /** Return the surface package. */ |
| public static SurfaceControlViewHost.SurfacePackage getSurfacePackage(Bundle bundle) { |
| return bundle.getParcelable(KEY_SURFACE_PACKAGE); |
| } |
| |
| /** Return the message callback. */ |
| public static Message getCallback(Bundle bundle) { |
| return bundle.getParcelable(KEY_CALLBACK); |
| } |
| } |