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;
328ebac231966e27364e5d463b63540a0527d40c4bMichael Wright    private final int mPriority;
339f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public static final Parcelable.Creator<KeyboardLayout> CREATOR =
359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown            new Parcelable.Creator<KeyboardLayout>() {
369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        public KeyboardLayout createFromParcel(Parcel source) {
379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown            return new KeyboardLayout(source);
389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        }
399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        public KeyboardLayout[] newArray(int size) {
409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown            return new KeyboardLayout[size];
419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        }
429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    };
439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
448ebac231966e27364e5d463b63540a0527d40c4bMichael Wright    public KeyboardLayout(String descriptor, String label, String collection, int priority) {
459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mDescriptor = descriptor;
469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mLabel = label;
47d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        mCollection = collection;
488ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        mPriority = priority;
499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    private KeyboardLayout(Parcel source) {
529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mDescriptor = source.readString();
539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        mLabel = source.readString();
54d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        mCollection = source.readString();
558ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        mPriority = source.readInt();
569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    /**
599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * Gets the keyboard layout descriptor, which can be used to retrieve
609f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * the keyboard layout again later using
619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * {@link InputManager#getKeyboardLayout(String)}.
629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     *
639f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * @return The keyboard layout descriptor.
649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     */
659f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public String getDescriptor() {
669f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        return mDescriptor;
679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
689f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
699f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    /**
709f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * Gets the keyboard layout descriptive label to show in the user interface.
719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     * @return The keyboard layout descriptive label.
729f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown     */
739f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public String getLabel() {
749f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        return mLabel;
759f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
769f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
77d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    /**
78d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     * Gets the name of the collection to which the keyboard layout belongs.  This is
79d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     * the label of the broadcast receiver or application that provided the keyboard layout.
80d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     * @return The keyboard layout collection name.
81d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown     */
82d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    public String getCollection() {
83d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        return mCollection;
84d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown    }
85d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown
869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public int describeContents() {
889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        return 0;
899f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
909f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
919f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
929f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public void writeToParcel(Parcel dest, int flags) {
939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        dest.writeString(mDescriptor);
949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown        dest.writeString(mLabel);
95d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        dest.writeString(mCollection);
968ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        dest.writeInt(mPriority);
979f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
989f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
999f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
1009f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public int compareTo(KeyboardLayout another) {
1018ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        // Note that these arguments are intentionally flipped since you want higher priority
1028ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        // keyboards to be listed before lower priority keyboards.
1038ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        int result = Integer.compare(another.mPriority, mPriority);
1048ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        if (result == 0) {
1058ebac231966e27364e5d463b63540a0527d40c4bMichael Wright            result = mLabel.compareToIgnoreCase(another.mLabel);
1068ebac231966e27364e5d463b63540a0527d40c4bMichael Wright        }
107d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        if (result == 0) {
108d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown            result = mCollection.compareToIgnoreCase(another.mCollection);
109d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        }
110d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        return result;
1119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
1129f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown
1139f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    @Override
1149f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    public String toString() {
115d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        if (mCollection.isEmpty()) {
116d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown            return mLabel;
117d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        }
118d9fec5d317c09da6bcc7a54df4e0190a76d21eaeJeff Brown        return mLabel + " - " + mCollection;
1199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown    }
1208ebac231966e27364e5d463b63540a0527d40c4bMichael Wright}
121