175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri/*
275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * Copyright (C) 2015 The Android Open Source Project
375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri *
475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * Licensed under the Apache License, Version 2.0 (the "License");
575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * you may not use this file except in compliance with the License.
675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * You may obtain a copy of the License at
775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri *
875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri *      http://www.apache.org/licenses/LICENSE-2.0
975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri *
1075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * Unless required by applicable law or agreed to in writing, software
1175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * distributed under the License is distributed on an "AS IS" BASIS,
1275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * See the License for the specific language governing permissions and
1475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * limitations under the License.
1575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri */
1675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarripackage android.view;
1775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
1875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.annotation.NonNull;
1975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.annotation.Nullable;
2075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.os.Parcel;
2175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.os.Parcelable;
2275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
2375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport java.util.ArrayList;
2475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport java.util.Collections;
2575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport java.util.List;
2675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
2775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport static com.android.internal.util.Preconditions.checkNotNull;
2875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
2975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri/**
3075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * A group of {@link KeyboardShortcutInfo}.
3175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri */
3275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarripublic final class KeyboardShortcutGroup implements Parcelable {
3375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    private final CharSequence mLabel;
3475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    private final List<KeyboardShortcutInfo> mItems;
358861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    // The system group looks different UI wise.
368861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    private boolean mSystemGroup;
3775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
3875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
3975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param label The title to be used for this group, or null if there is none.
4075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param items The set of items to be included.
4175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
4275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public KeyboardShortcutGroup(@Nullable CharSequence label,
4375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri            @NonNull List<KeyboardShortcutInfo> items) {
4475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mLabel = label;
4575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mItems = new ArrayList<>(checkNotNull(items));
4675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
4775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
4875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
4975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param label The title to be used for this group, or null if there is none.
5075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
5175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public KeyboardShortcutGroup(@Nullable CharSequence label) {
5275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        this(label, Collections.<KeyboardShortcutInfo>emptyList());
5375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
5475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
558861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    /**
568861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param label The title to be used for this group, or null if there is none.
578861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param items The set of items to be included.
588861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param isSystemGroup Set this to {@code true} if this is s system group.
598861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @hide
608861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     */
618861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    public KeyboardShortcutGroup(@Nullable CharSequence label,
628861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu            @NonNull List<KeyboardShortcutInfo> items, boolean isSystemGroup) {
638861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mLabel = label;
648861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mItems = new ArrayList<>(checkNotNull(items));
658861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mSystemGroup = isSystemGroup;
668861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    }
678861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu
688861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    /**
698861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param label The title to be used for this group, or null if there is none.
708861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param isSystemGroup Set this to {@code true} if this is s system group.
718861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @hide
728861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     */
738861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    public KeyboardShortcutGroup(@Nullable CharSequence label, boolean isSystemGroup) {
748861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        this(label, Collections.<KeyboardShortcutInfo>emptyList(), isSystemGroup);
758861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    }
768861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu
7775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    private KeyboardShortcutGroup(Parcel source) {
7875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mItems = new ArrayList<>();
7975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mLabel = source.readCharSequence();
8075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        source.readTypedList(mItems, KeyboardShortcutInfo.CREATOR);
818861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mSystemGroup = source.readInt() == 1;
8275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
8375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
8475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
8575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * Returns the label to be used to describe this group.
8675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
8775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public CharSequence getLabel() {
8875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        return mLabel;
8975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
9075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
9175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
9275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * Returns the list of items included in this group.
9375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
9475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public List<KeyboardShortcutInfo> getItems() {
9575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        return mItems;
9675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
9775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
988861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    /** @hide **/
998861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    public boolean isSystemGroup() {
1008861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        return mSystemGroup;
1018861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    }
1028861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu
10375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
10475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * Adds an item to the existing list.
10575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     *
10675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param item The item to be added.
10775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
10875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public void addItem(KeyboardShortcutInfo item) {
10975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mItems.add(item);
11075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
11175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
11275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    @Override
11375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public int describeContents() {
11475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        return 0;
11575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
11675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
11775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    @Override
11875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public void writeToParcel(Parcel dest, int flags) {
11975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        dest.writeCharSequence(mLabel);
12075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        dest.writeTypedList(mItems);
1218861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        dest.writeInt(mSystemGroup ? 1 : 0);
12275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
12375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
12475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public static final Creator<KeyboardShortcutGroup> CREATOR =
12575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri            new Creator<KeyboardShortcutGroup>() {
12675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        public KeyboardShortcutGroup createFromParcel(Parcel source) {
12775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri            return new KeyboardShortcutGroup(source);
12875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        }
12975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        public KeyboardShortcutGroup[] newArray(int size) {
13075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri            return new KeyboardShortcutGroup[size];
13175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        }
13275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    };
1338861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu}
134