File: LightState.java

package info (click to toggle)
android-platform-frameworks-base 1%3A14~beta1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 326,096 kB
  • sloc: java: 2,032,373; xml: 343,016; cpp: 304,183; python: 3,683; ansic: 2,090; sh: 1,871; makefile: 120; sed: 19
file content (181 lines) | stat: -rw-r--r-- 5,978 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/**
 * 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.ColorInt;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Represents the state of a device light.
 *
 * <p>Controlling the color and brightness of a light is done on a best-effort basis. Each of the R,
 * G and B channels represent the intensities of the respective part of an RGB LED, if that is
 * supported. For devices that only support on or off lights, everything that's not off will turn
 * the light on. If the light is monochrome and only the brightness can be controlled, the RGB color
 * will be converted to only a brightness value and that will be used for the light's single
 * channel.
 *
 */
public final class LightState implements Parcelable {
    private final int mColor;
    private final int mPlayerId;

    /**
     * Creates a new LightState with the desired color and intensity, for a light type
     * of RBG color or monochrome color.
     *
     * @param color the desired color and intensity in ARGB format.
     * @deprecated this has been replaced with {@link android.hardware.lights.LightState.Builder }
     * @hide
     */
    @Deprecated
    @SystemApi
    public LightState(@ColorInt int color) {
        this(color, 0);
    }

    /**
     * Creates a new LightState with the desired color and intensity, and the player Id.
     * Player Id will only be applied on Light with type
     * {@link android.hardware.lights.Light#LIGHT_TYPE_PLAYER_ID}
     *
     * @param color the desired color and intensity in ARGB format.
     * @hide
     */
    public LightState(@ColorInt int color, int playerId) {
        mColor = color;
        mPlayerId = playerId;
    }

    /**
     * Builder for creating device light change requests.
     */
    public static final class Builder {
        private int mValue;
        private boolean mIsForPlayerId;

        /** Creates a new {@link LightState.Builder}. */
        public Builder() {
            mValue = 0;
            mIsForPlayerId = false;
        }

        /**
         * Set the desired color and intensity of the LightState Builder, for a light type
         * of RBG color or single monochrome color.
         *
         * @param color the desired color and intensity in ARGB format.
         * @return The {@link LightState.Builder} object contains the light color and intensity.
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        @NonNull
        public Builder setColor(@ColorInt int color) {
            mIsForPlayerId = false;
            mValue = color;
            return this;
        }

        /**
         * Set the desired player id of the LightState Builder, for a light with type
         * {@link android.hardware.lights.Light#LIGHT_TYPE_PLAYER_ID}.
         *
         * @param playerId the desired player id.
         * @return The {@link LightState.Builder} object contains the player id.
         */
        @SuppressLint("MissingGetterMatchingBuilder")
        @NonNull
        public Builder setPlayerId(int playerId) {
            mIsForPlayerId = true;
            mValue = playerId;
            return this;
        }

        /**
         * Create a LightState object used to control lights on the device.
         *
         * <p>The generated {@link LightState} should be used in
         * {@link LightsRequest.Builder#addLight(Light, LightState)}.
         */
        public @NonNull LightState build() {
            if (!mIsForPlayerId) {
                return new LightState(mValue, 0);
            } else {
                return new LightState(0, mValue);
            }
        }
    }

    /**
     * Creates a new LightState from a parcel object.
     */
    private LightState(@NonNull Parcel in) {
        mColor = in.readInt();
        mPlayerId = in.readInt();
    }

    /**
     * Returns the color and intensity associated with this LightState.
     * @return the color and intensity in ARGB format. The A channel is ignored. return 0 when
     * calling LightsManager.getLightState with
     * {@link android.hardware.lights.Light#LIGHT_TYPE_PLAYER_ID}.
     */
    public @ColorInt int getColor() {
        return mColor;
    }

    /**
     * Returns the player ID associated with this LightState for Light with type
     * {@link android.hardware.lights.Light#LIGHT_TYPE_PLAYER_ID},
     * or 0 for other types.
     * @return the player ID.
     */
    public int getPlayerId() {
        return mPlayerId;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(mColor);
        dest.writeInt(mPlayerId);
    }

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

    @Override
    public String toString() {
        return "LightState{Color=0x" + Integer.toHexString(mColor) + ", PlayerId="
                + mPlayerId + "}";
    }

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

                public LightState[] newArray(int size) {
                    return new LightState[size];
                }
            };
}