Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright (C) 2013 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.media;
     18 
     19 import android.os.Parcel;
     20 import android.os.Parcelable;
     21 import android.text.TextUtils;
     22 
     23 import java.util.ArrayList;
     24 
     25 /**
     26  * Information available from IRemoteDisplayProvider about available remote displays.
     27  *
     28  * Clients must not modify the contents of this object.
     29  * @hide
     30  */
     31 public final class RemoteDisplayState implements Parcelable {
     32     // Note: These constants are used by the remote display provider API.
     33     // Do not change them!
     34     public static final String SERVICE_INTERFACE =
     35             "com.android.media.remotedisplay.RemoteDisplayProvider";
     36     public static final int DISCOVERY_MODE_NONE = 0;
     37     public static final int DISCOVERY_MODE_PASSIVE = 1;
     38     public static final int DISCOVERY_MODE_ACTIVE = 2;
     39 
     40     /**
     41      * A list of all remote displays.
     42      */
     43     public final ArrayList<RemoteDisplayInfo> displays;
     44 
     45     public RemoteDisplayState() {
     46         displays = new ArrayList<RemoteDisplayInfo>();
     47     }
     48 
     49     RemoteDisplayState(Parcel src) {
     50         displays = src.createTypedArrayList(RemoteDisplayInfo.CREATOR);
     51     }
     52 
     53     public boolean isValid() {
     54         if (displays == null) {
     55             return false;
     56         }
     57         final int count = displays.size();
     58         for (int i = 0; i < count; i++) {
     59             if (!displays.get(i).isValid()) {
     60                 return false;
     61             }
     62         }
     63         return true;
     64     }
     65 
     66     @Override
     67     public int describeContents() {
     68         return 0;
     69     }
     70 
     71     @Override
     72     public void writeToParcel(Parcel dest, int flags) {
     73         dest.writeTypedList(displays);
     74     }
     75 
     76     public static final Parcelable.Creator<RemoteDisplayState> CREATOR =
     77             new Parcelable.Creator<RemoteDisplayState>() {
     78         @Override
     79         public RemoteDisplayState createFromParcel(Parcel in) {
     80             return new RemoteDisplayState(in);
     81         }
     82 
     83         @Override
     84         public RemoteDisplayState[] newArray(int size) {
     85             return new RemoteDisplayState[size];
     86         }
     87     };
     88 
     89     public static final class RemoteDisplayInfo implements Parcelable {
     90         // Note: These constants are used by the remote display provider API.
     91         // Do not change them!
     92         public static final int STATUS_NOT_AVAILABLE = 0;
     93         public static final int STATUS_IN_USE = 1;
     94         public static final int STATUS_AVAILABLE = 2;
     95         public static final int STATUS_CONNECTING = 3;
     96         public static final int STATUS_CONNECTED = 4;
     97 
     98         public static final int PLAYBACK_VOLUME_VARIABLE =
     99                 MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE;
    100         public static final int PLAYBACK_VOLUME_FIXED =
    101                 MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED;
    102 
    103         public String id;
    104         public String name;
    105         public String description;
    106         public int status;
    107         public int volume;
    108         public int volumeMax;
    109         public int volumeHandling;
    110         public int presentationDisplayId;
    111 
    112         public RemoteDisplayInfo(String id) {
    113             this.id = id;
    114             status = STATUS_NOT_AVAILABLE;
    115             volumeHandling = MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED;
    116             presentationDisplayId = -1;
    117         }
    118 
    119         public RemoteDisplayInfo(RemoteDisplayInfo other) {
    120             id = other.id;
    121             name = other.name;
    122             description = other.description;
    123             status = other.status;
    124             volume = other.volume;
    125             volumeMax = other.volumeMax;
    126             volumeHandling = other.volumeHandling;
    127             presentationDisplayId = other.presentationDisplayId;
    128         }
    129 
    130         RemoteDisplayInfo(Parcel in) {
    131             id = in.readString();
    132             name = in.readString();
    133             description = in.readString();
    134             status = in.readInt();
    135             volume = in.readInt();
    136             volumeMax = in.readInt();
    137             volumeHandling = in.readInt();
    138             presentationDisplayId = in.readInt();
    139         }
    140 
    141         public boolean isValid() {
    142             return !TextUtils.isEmpty(id) && !TextUtils.isEmpty(name);
    143         }
    144 
    145         @Override
    146         public int describeContents() {
    147             return 0;
    148         }
    149 
    150         @Override
    151         public void writeToParcel(Parcel dest, int flags) {
    152             dest.writeString(id);
    153             dest.writeString(name);
    154             dest.writeString(description);
    155             dest.writeInt(status);
    156             dest.writeInt(volume);
    157             dest.writeInt(volumeMax);
    158             dest.writeInt(volumeHandling);
    159             dest.writeInt(presentationDisplayId);
    160         }
    161 
    162         @Override
    163         public String toString() {
    164             return "RemoteDisplayInfo{ id=" + id
    165                     + ", name=" + name
    166                     + ", description=" + description
    167                     + ", status=" + status
    168                     + ", volume=" + volume
    169                     + ", volumeMax=" + volumeMax
    170                     + ", volumeHandling=" + volumeHandling
    171                     + ", presentationDisplayId=" + presentationDisplayId
    172                     + " }";
    173         }
    174 
    175         @SuppressWarnings("hiding")
    176         public static final Parcelable.Creator<RemoteDisplayInfo> CREATOR =
    177                 new Parcelable.Creator<RemoteDisplayInfo>() {
    178             @Override
    179             public RemoteDisplayInfo createFromParcel(Parcel in) {
    180                 return new RemoteDisplayInfo(in);
    181             }
    182 
    183             @Override
    184             public RemoteDisplayInfo[] newArray(int size) {
    185                 return new RemoteDisplayInfo[size];
    186             }
    187         };
    188     }
    189 }
    190