content: /*
   * Copyright (C) 2012 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.input;
  
  import android.annotation.NonNull;
  import android.os.LocaleList;
  import android.os.Parcel;
  import android.os.Parcelable;
  
  import java.util.Locale;
  
  /**
   * Describes a keyboard layout.
   *
   * @hide
   */
  public final class KeyboardLayout implements Parcelable,
          Comparable<KeyboardLayout> {
      private final String mDescriptor;
      private final String mLabel;
      private final String mCollection;
      private final int mPriority;
      @NonNull
      private final LocaleList mLocales;
      private final int mVendorId;
      private final int mProductId;
  
      public static final @android.annotation.NonNull Parcelable.Creator<KeyboardLayout> CREATOR =
              new Parcelable.Creator<KeyboardLayout>() {
          public KeyboardLayout createFromParcel(Parcel source) {
              return new KeyboardLayout(source);
          }
          public KeyboardLayout[] newArray(int size) {
              return new KeyboardLayout[size];
          }
      };
  
      public KeyboardLayout(String descriptor, String label, String collection, int priority,
              LocaleList locales, int vid, int pid) {
          mDescriptor = descriptor;
          mLabel = label;
          mCollection = collection;
          mPriority = priority;
          mLocales = locales;
          mVendorId = vid;
          mProductId = pid;
      }
  
      private KeyboardLayout(Parcel source) {
          mDescriptor = source.readString();
          mLabel = source.readString();
          mCollection = source.readString();
          mPriority = source.readInt();
          mLocales = LocaleList.CREATOR.createFromParcel(source);
          mVendorId = source.readInt();
          mProductId = source.readInt();
      }
  
      /**
       * Gets the keyboard layout descriptor, which can be used to retrieve
       * the keyboard layout again later using
       * {@link InputManager#getKeyboardLayout(String)}.
       *
       * @return The keyboard layout descriptor.
       */
      public String getDescriptor() {
          return mDescriptor;
      }
  
      /**
       * Gets the keyboard layout descriptive label to show in the user interface.
       * @return The keyboard layout descriptive label.
       */
      public String getLabel() {
          return mLabel;
      }
  
      /**
       * Gets the name of the collection to which the keyboard layout belongs.  This is
       * the label of the broadcast receiver or application that provided the keyboard layout.
       * @return The keyboard layout collection name.
       */
      public String getCollection() {
          return mCollection;
      }
  
      /**
       * Gets the locales that this keyboard layout is intended for.
       * This may be empty if a locale has not been assigned to this keyboard layout.
       * @return The keyboard layout's intended locale.
       */
      public LocaleList getLocales() {
          return mLocales;
      }
  
      /**
       * Gets the vendor ID of the hardware device this keyboard layout is intended for.
       * Returns -1 if this is not specific to any piece of hardware.
       * @return The hardware vendor ID of the keyboard layout's intended device.
       */
      public int getVendorId() {
          return mVendorId;
      }
  
      /**
       * Gets the product ID of the hardware device this keyboard layout is intended for.
       * Returns -1 if this is not specific to any piece of hardware.
       * @return The hardware product ID of the keyboard layout's intended device.
       */
      public int getProductId() {
          return mProductId;
      }
  
      @Override
      public int describeContents() {
          return 0;
      }
  
      @Override
      public void writeToParcel(Parcel dest, int flags) {
          dest.writeString(mDescriptor);
          dest.writeString(mLabel);
          dest.writeString(mCollection);
          dest.writeInt(mPriority);
          mLocales.writeToParcel(dest, 0);
          dest.writeInt(mVendorId);
          dest.writeInt(mProductId);
      }
  
      @Override
      public int compareTo(KeyboardLayout another) {
          // Note that these arguments are intentionally flipped since you want higher priority
          // keyboards to be listed before lower priority keyboards.
          int result = Integer.compare(another.mPriority, mPriority);
          if (result == 0) {
              result = mLabel.compareToIgnoreCase(another.mLabel);
          }
          if (result == 0) {
              result = mCollection.compareToIgnoreCase(another.mCollection);
          }
          return result;
      }
  
      @Override
      public String toString() {
          if (mCollection.isEmpty()) {
              return mLabel;
          }
          return mLabel + " - " + mCollection;
      }
  }
  