19f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/*
29f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Copyright (C) 2012 The Android Open Source Project
39f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown *
49f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
59f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * you may not use this file except in compliance with the License.
69f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * You may obtain a copy of the License at
79f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown *
89f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
99f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown *
109f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Unless required by applicable law or agreed to in writing, software
119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
129f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * See the License for the specific language governing permissions and
149f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * limitations under the License.
159f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */
169f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownpackage android.hardware.input;
189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownimport android.os.Parcel;
209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownimport android.os.Parcelable;
219f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/**
239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Describes a keyboard layout.
249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown *
259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * @hide
269f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */
279f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownpublic final class KeyboardLayout implements Parcelable,
289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        Comparable<KeyboardLayout> {
299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    private final String mDescriptor;
309f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    private final String mLabel;
31d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    private final String mCollection;
329f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
339f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public static final Parcelable.Creator<KeyboardLayout> CREATOR =
349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown            new Parcelable.Creator<KeyboardLayout>() {
359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        public KeyboardLayout createFromParcel(Parcel source) {
369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown            return new KeyboardLayout(source);
379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        }
389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        public KeyboardLayout[] newArray(int size) {
399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown            return new KeyboardLayout[size];
409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        }
419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    };
429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
43d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    public KeyboardLayout(String descriptor, String label, String collection) {
449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mDescriptor = descriptor;
459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mLabel = label;
46d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        mCollection = collection;
479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    private KeyboardLayout(Parcel source) {
509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mDescriptor = source.readString();
519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mLabel = source.readString();
52d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        mCollection = source.readString();
539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    /**
569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * Gets the keyboard layout descriptor, which can be used to retrieve
579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * the keyboard layout again later using
589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * {@link InputManager#getKeyboardLayout(String)}.
599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     *
609f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * @return The keyboard layout descriptor.
619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     */
629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public String getDescriptor() {
639f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        return mDescriptor;
649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
659f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
669f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    /**
679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * Gets the keyboard layout descriptive label to show in the user interface.
689f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * @return The keyboard layout descriptive label.
699f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     */
709f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public String getLabel() {
719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        return mLabel;
729f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
739f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
74d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    /**
75d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     * Gets the name of the collection to which the keyboard layout belongs.  This is
76d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     * the label of the broadcast receiver or application that provided the keyboard layout.
77d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     * @return The keyboard layout collection name.
78d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     */
79d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    public String getCollection() {
80d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        return mCollection;
81d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    }
82d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown
839f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
849f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public int describeContents() {
859f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        return 0;
869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
899f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public void writeToParcel(Parcel dest, int flags) {
909f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        dest.writeString(mDescriptor);
919f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        dest.writeString(mLabel);
92d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        dest.writeString(mCollection);
939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
969f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public int compareTo(KeyboardLayout another) {
97d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        int result = mLabel.compareToIgnoreCase(another.mLabel);
98d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        if (result == 0) {
99d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown            result = mCollection.compareToIgnoreCase(another.mCollection);
100d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        }
101d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        return result;
1029f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
1039f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
1049f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
1059f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public String toString() {
106d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        if (mCollection.isEmpty()) {
107d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown            return mLabel;
108d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        }
109d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        return mLabel + " - " + mCollection;
1109f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
1119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown}