• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2017 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package android.app;
18  
19  import android.annotation.IntDef;
20  import android.annotation.NonNull;
21  import android.annotation.Nullable;
22  import android.annotation.SystemApi;
23  import android.os.Parcel;
24  import android.os.Parcelable;
25  
26  import java.io.PrintWriter;
27  import java.lang.annotation.Retention;
28  import java.lang.annotation.RetentionPolicy;
29  
30  /**
31   * Display properties to be used by VR mode when creating a virtual display.
32   *
33   * @hide
34   */
35  @SystemApi
36  public final class Vr2dDisplayProperties implements Parcelable {
37  
38      public static final int FLAG_VIRTUAL_DISPLAY_ENABLED = 1;
39  
40      /** @hide */
41      @Retention(RetentionPolicy.SOURCE)
42      @IntDef({
43          FLAG_VIRTUAL_DISPLAY_ENABLED
44      })
45      public @interface Vr2dDisplayFlag {}
46  
47      /**
48       * The actual width, height and dpi.
49       */
50      private final int mWidth;
51      private final int mHeight;
52      private final int mDpi;
53  
54      // Flags describing the virtual display behavior.
55      private final int mAddedFlags;
56      private final int mRemovedFlags;
57  
Vr2dDisplayProperties(int width, int height, int dpi)58      public Vr2dDisplayProperties(int width, int height, int dpi) {
59          this(width, height, dpi, 0, 0);
60      }
61  
Vr2dDisplayProperties(int width, int height, int dpi, int flags, int removedFlags)62      private Vr2dDisplayProperties(int width, int height, int dpi, int flags, int removedFlags) {
63          mWidth = width;
64          mHeight = height;
65          mDpi = dpi;
66          mAddedFlags = flags;
67          mRemovedFlags = removedFlags;
68      }
69  
70      @Override
hashCode()71      public int hashCode() {
72          int result = getWidth();
73          result = 31 * result + getHeight();
74          result = 31 * result + getDpi();
75          return result;
76      }
77  
78      @NonNull
79      @Override
toString()80      public String toString() {
81          return "Vr2dDisplayProperties{"
82                  + "mWidth=" + mWidth
83                  + ", mHeight=" + mHeight
84                  + ", mDpi=" + mDpi
85                  + ", flags=" + toReadableFlags(mAddedFlags)
86                  + ", removed_flags=" + toReadableFlags(mRemovedFlags)
87                  + "}";
88      }
89  
90      @Override
equals(@ullable Object o)91      public boolean equals(@Nullable Object o) {
92          if (this == o) return true;
93          if (o == null || getClass() != o.getClass()) return false;
94  
95          Vr2dDisplayProperties that = (Vr2dDisplayProperties) o;
96  
97          if (getAddedFlags() != that.getAddedFlags()) return false;
98          if (getRemovedFlags() != that.getRemovedFlags()) return false;
99          if (getWidth() != that.getWidth()) return false;
100          if (getHeight() != that.getHeight()) return false;
101          return getDpi() == that.getDpi();
102      }
103  
104      @Override
describeContents()105      public int describeContents() {
106          return 0;
107      }
108  
109      @Override
writeToParcel(Parcel dest, int flags)110      public void writeToParcel(Parcel dest, int flags) {
111          dest.writeInt(mWidth);
112          dest.writeInt(mHeight);
113          dest.writeInt(mDpi);
114          dest.writeInt(mAddedFlags);
115          dest.writeInt(mRemovedFlags);
116      }
117  
118      public static final @android.annotation.NonNull Parcelable.Creator<Vr2dDisplayProperties> CREATOR
119              = new Parcelable.Creator<Vr2dDisplayProperties>() {
120          @Override
121          public Vr2dDisplayProperties createFromParcel(Parcel source) {
122              return new Vr2dDisplayProperties(source);
123          }
124  
125          @Override
126          public Vr2dDisplayProperties[] newArray(int size) {
127              return new Vr2dDisplayProperties[size];
128          }
129      };
130  
Vr2dDisplayProperties(Parcel source)131      private Vr2dDisplayProperties(Parcel source) {
132          mWidth = source.readInt();
133          mHeight = source.readInt();
134          mDpi = source.readInt();
135          mAddedFlags = source.readInt();
136          mRemovedFlags = source.readInt();
137      }
138  
139      /**
140       * Prints out dump info.
141       */
dump(@onNull PrintWriter pw, @NonNull String prefix)142      public void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
143          pw.println(prefix + toString());
144      }
145  
146      /**
147       * Returns the width of VR 2d display.
148       */
getWidth()149      public int getWidth() {
150          return mWidth;
151      }
152  
153      /**
154       * Returns the height of VR 2d display.
155       */
getHeight()156      public int getHeight() {
157          return mHeight;
158      }
159  
160      /**
161       * Returns the dpi of VR 2d display.
162       */
getDpi()163      public int getDpi() {
164          return mDpi;
165      }
166  
167      /**
168       * Returns the added flags of VR 2d display. Flags are combined by logic or.
169       */
170      @Vr2dDisplayFlag
getAddedFlags()171      public int getAddedFlags() {
172          return mAddedFlags;
173      }
174  
175      /**
176       * Returns the removed flags of VR 2d display. Flags are combined by logic or.
177       */
178      @Vr2dDisplayFlag
getRemovedFlags()179      public int getRemovedFlags() {
180          return mRemovedFlags;
181      }
182  
toReadableFlags(int flags)183      private static String toReadableFlags(int flags) {
184          String retval = "{";
185          if ((flags & FLAG_VIRTUAL_DISPLAY_ENABLED) == FLAG_VIRTUAL_DISPLAY_ENABLED) {
186              retval += "enabled";
187          }
188          return retval + "}";
189      }
190  
191      /**
192       * Convenience class for creating Vr2dDisplayProperties.
193       */
194      public static final class Builder {
195          private int mAddedFlags = 0;
196          private int mRemovedFlags = 0;
197  
198          // Negative values are translated as an "ignore" to VrManagerService.
199          private int mWidth = -1;
200          private int mHeight = -1;
201          private int mDpi = -1;
202  
Builder()203          public Builder() {
204          }
205  
206          /**
207           * Sets the dimensions to use for the virtual display.
208           */
209          @NonNull
setDimensions(int width, int height, int dpi)210          public Builder setDimensions(int width, int height, int dpi) {
211              mWidth = width;
212              mHeight = height;
213              mDpi = dpi;
214              return this;
215          }
216  
217          /**
218           * Toggles the virtual display functionality for 2D activities in VR.
219           */
220          @NonNull
setEnabled(boolean enabled)221          public Builder setEnabled(boolean enabled) {
222              if (enabled) {
223                  addFlags(FLAG_VIRTUAL_DISPLAY_ENABLED);
224              } else {
225                  removeFlags(FLAG_VIRTUAL_DISPLAY_ENABLED);
226              }
227              return this;
228          }
229  
230          /**
231           * Adds property flags.
232           */
233          @NonNull
addFlags(@r2dDisplayFlag int flags)234          public Builder addFlags(@Vr2dDisplayFlag int flags) {
235              mAddedFlags |= flags;
236              mRemovedFlags &= ~flags;
237              return this;
238          }
239  
240          /**
241           * Removes property flags.
242           */
243          @NonNull
removeFlags(@r2dDisplayFlag int flags)244          public Builder removeFlags(@Vr2dDisplayFlag int flags) {
245              mRemovedFlags |= flags;
246              mAddedFlags &= ~flags;
247              return this;
248          }
249  
250          /**
251           * Builds the Vr2dDisplayProperty instance.
252           */
253          @NonNull
build()254          public Vr2dDisplayProperties build() {
255              return new Vr2dDisplayProperties(mWidth, mHeight, mDpi, mAddedFlags, mRemovedFlags);
256          }
257      }
258  }
259