Home | History | Annotate | Download | only in input
      1 /*
      2  * Copyright (C) 2012 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.hardware.input;
     18 
     19 import android.annotation.NonNull;
     20 import android.os.LocaleList;
     21 import android.os.Parcel;
     22 import android.os.Parcelable;
     23 
     24 import java.util.Locale;
     25 
     26 /**
     27  * Describes a keyboard layout.
     28  *
     29  * @hide
     30  */
     31 public final class KeyboardLayout implements Parcelable,
     32         Comparable<KeyboardLayout> {
     33     private final String mDescriptor;
     34     private final String mLabel;
     35     private final String mCollection;
     36     private final int mPriority;
     37     @NonNull
     38     private final LocaleList mLocales;
     39     private final int mVendorId;
     40     private final int mProductId;
     41 
     42     public static final Parcelable.Creator<KeyboardLayout> CREATOR =
     43             new Parcelable.Creator<KeyboardLayout>() {
     44         public KeyboardLayout createFromParcel(Parcel source) {
     45             return new KeyboardLayout(source);
     46         }
     47         public KeyboardLayout[] newArray(int size) {
     48             return new KeyboardLayout[size];
     49         }
     50     };
     51 
     52     public KeyboardLayout(String descriptor, String label, String collection, int priority,
     53             LocaleList locales, int vid, int pid) {
     54         mDescriptor = descriptor;
     55         mLabel = label;
     56         mCollection = collection;
     57         mPriority = priority;
     58         mLocales = locales;
     59         mVendorId = vid;
     60         mProductId = pid;
     61     }
     62 
     63     private KeyboardLayout(Parcel source) {
     64         mDescriptor = source.readString();
     65         mLabel = source.readString();
     66         mCollection = source.readString();
     67         mPriority = source.readInt();
     68         mLocales = LocaleList.CREATOR.createFromParcel(source);
     69         mVendorId = source.readInt();
     70         mProductId = source.readInt();
     71     }
     72 
     73     /**
     74      * Gets the keyboard layout descriptor, which can be used to retrieve
     75      * the keyboard layout again later using
     76      * {@link InputManager#getKeyboardLayout(String)}.
     77      *
     78      * @return The keyboard layout descriptor.
     79      */
     80     public String getDescriptor() {
     81         return mDescriptor;
     82     }
     83 
     84     /**
     85      * Gets the keyboard layout descriptive label to show in the user interface.
     86      * @return The keyboard layout descriptive label.
     87      */
     88     public String getLabel() {
     89         return mLabel;
     90     }
     91 
     92     /**
     93      * Gets the name of the collection to which the keyboard layout belongs.  This is
     94      * the label of the broadcast receiver or application that provided the keyboard layout.
     95      * @return The keyboard layout collection name.
     96      */
     97     public String getCollection() {
     98         return mCollection;
     99     }
    100 
    101     /**
    102      * Gets the locales that this keyboard layout is intended for.
    103      * This may be empty if a locale has not been assigned to this keyboard layout.
    104      * @return The keyboard layout's intended locale.
    105      */
    106     public LocaleList getLocales() {
    107         return mLocales;
    108     }
    109 
    110     /**
    111      * Gets the vendor ID of the hardware device this keyboard layout is intended for.
    112      * Returns -1 if this is not specific to any piece of hardware.
    113      * @return The hardware vendor ID of the keyboard layout's intended device.
    114      */
    115     public int getVendorId() {
    116         return mVendorId;
    117     }
    118 
    119     /**
    120      * Gets the product ID of the hardware device this keyboard layout is intended for.
    121      * Returns -1 if this is not specific to any piece of hardware.
    122      * @return The hardware product ID of the keyboard layout's intended device.
    123      */
    124     public int getProductId() {
    125         return mProductId;
    126     }
    127 
    128     @Override
    129     public int describeContents() {
    130         return 0;
    131     }
    132 
    133     @Override
    134     public void writeToParcel(Parcel dest, int flags) {
    135         dest.writeString(mDescriptor);
    136         dest.writeString(mLabel);
    137         dest.writeString(mCollection);
    138         dest.writeInt(mPriority);
    139         mLocales.writeToParcel(dest, 0);
    140         dest.writeInt(mVendorId);
    141         dest.writeInt(mProductId);
    142     }
    143 
    144     @Override
    145     public int compareTo(KeyboardLayout another) {
    146         // Note that these arguments are intentionally flipped since you want higher priority
    147         // keyboards to be listed before lower priority keyboards.
    148         int result = Integer.compare(another.mPriority, mPriority);
    149         if (result == 0) {
    150             result = mLabel.compareToIgnoreCase(another.mLabel);
    151         }
    152         if (result == 0) {
    153             result = mCollection.compareToIgnoreCase(another.mCollection);
    154         }
    155         return result;
    156     }
    157 
    158     @Override
    159     public String toString() {
    160         if (mCollection.isEmpty()) {
    161             return mLabel;
    162         }
    163         return mLabel + " - " + mCollection;
    164     }
    165 }
    166