| /* |
| * 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 android.hardware.lights; |
| |
| import android.annotation.IntDef; |
| import android.annotation.NonNull; |
| import android.annotation.SystemApi; |
| import android.annotation.SystemService; |
| import android.annotation.TestApi; |
| import android.content.Context; |
| import android.os.Binder; |
| import android.os.IBinder; |
| |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.util.List; |
| |
| /** |
| * The LightsManager class allows control over device lights. |
| * |
| */ |
| @SystemService(Context.LIGHTS_SERVICE) |
| public abstract class LightsManager { |
| private static final String TAG = "LightsManager"; |
| |
| // These enum values copy the values from {@link com.android.server.lights.LightsManager} |
| // and the light HAL. Since 0-7 are lights reserved for system use, only the microphone light |
| // and following types are available through this API. |
| /** Type for lights that indicate microphone usage |
| * @deprecated this has been moved to {@link android.hardware.lights.Light } |
| * @hide |
| */ |
| @Deprecated |
| @SystemApi |
| public static final int LIGHT_TYPE_MICROPHONE = 8; |
| |
| /** @hide */ |
| @Retention(RetentionPolicy.SOURCE) |
| @IntDef(prefix = {"LIGHT_TYPE_"}, |
| value = { |
| LIGHT_TYPE_MICROPHONE, |
| }) |
| public @interface LightType {} |
| |
| /** |
| * @hide to prevent subclassing from outside of the framework |
| */ |
| public LightsManager() {} |
| |
| /** |
| * Returns the lights available on the device. |
| * |
| * @return A list of available lights |
| */ |
| public @NonNull abstract List<Light> getLights(); |
| |
| /** |
| * Returns the state of a specified light. |
| * |
| */ |
| public abstract @NonNull LightState getLightState(@NonNull Light light); |
| |
| /** |
| * Creates a new LightsSession that can be used to control the device lights. |
| */ |
| public abstract @NonNull LightsSession openSession(); |
| |
| /** |
| * |
| * Creates a new {@link LightsSession} |
| * |
| * @param priority the larger this number, the higher the priority of this session when multiple |
| * light state requests arrive simultaneously. |
| * |
| * @hide |
| */ |
| @TestApi |
| public abstract @NonNull LightsSession openSession(int priority); |
| |
| /** |
| * Encapsulates a session that can be used to control device lights and represents the lifetime |
| * of the requests. |
| * |
| * <p>Any lights requests always live in a lights session which defines the lifecycle of the |
| * lights requests. A lights session is AutoCloseable that will get closed when leaving the |
| * session context. |
| * |
| * <p>Multiple sessions can make lights requests which contains same light. In the case the |
| * LightsManager implementation will arbitrate and honor one of the session's request. When |
| * the session hold the current light request closed, LightsManager implementation will choose |
| * another live session to honor its lights requests. |
| */ |
| public abstract static class LightsSession implements AutoCloseable { |
| private final IBinder mToken = new Binder(); |
| |
| /** |
| * @hide to prevent subclassing from outside of the framework |
| */ |
| public LightsSession() { |
| } |
| |
| /** |
| * Sends a request to modify the states of multiple lights. |
| * |
| * @param request the settings for lights that should change |
| */ |
| public abstract void requestLights(@NonNull LightsRequest request); |
| |
| @Override |
| public abstract void close(); |
| |
| /** |
| * Get the token of a light session. |
| * |
| * @return Binder token of the light session. |
| * @hide |
| */ |
| public @NonNull IBinder getToken() { |
| return mToken; |
| } |
| } |
| |
| } |