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
1867e2ae86396c6d0f989285275cbf908dee5e71f7Aurimas Liutikasimport static com.android.internal.util.Preconditions.checkNotNull;
1967e2ae86396c6d0f989285275cbf908dee5e71f7Aurimas Liutikas
2075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.annotation.NonNull;
2175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.annotation.Nullable;
2235a078fb484941727f0307819e64a9621797d777Clara Bayarriimport android.annotation.TestApi;
2375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.os.Parcel;
2475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport android.os.Parcelable;
2575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
2675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport java.util.ArrayList;
2775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport java.util.Collections;
2875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarriimport java.util.List;
2975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
3075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri/**
3175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri * A group of {@link KeyboardShortcutInfo}.
3275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri */
3375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarripublic final class KeyboardShortcutGroup implements Parcelable {
3475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    private final CharSequence mLabel;
3575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    private final List<KeyboardShortcutInfo> mItems;
368861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    // The system group looks different UI wise.
378861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    private boolean mSystemGroup;
3875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
3975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
4075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param label The title to be used for this group, or null if there is none.
4175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param items The set of items to be included.
4275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
4375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public KeyboardShortcutGroup(@Nullable CharSequence label,
4475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri            @NonNull List<KeyboardShortcutInfo> items) {
4575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mLabel = label;
4675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mItems = new ArrayList<>(checkNotNull(items));
4775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
4875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
4975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
5075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param label The title to be used for this group, or null if there is none.
5175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
5275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public KeyboardShortcutGroup(@Nullable CharSequence label) {
5375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        this(label, Collections.<KeyboardShortcutInfo>emptyList());
5475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
5575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
568861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    /**
578861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param label The title to be used for this group, or null if there is none.
588861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param items The set of items to be included.
598861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param isSystemGroup Set this to {@code true} if this is s system group.
608861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @hide
618861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     */
6235a078fb484941727f0307819e64a9621797d777Clara Bayarri    @TestApi
638861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    public KeyboardShortcutGroup(@Nullable CharSequence label,
648861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu            @NonNull List<KeyboardShortcutInfo> items, boolean isSystemGroup) {
658861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mLabel = label;
668861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mItems = new ArrayList<>(checkNotNull(items));
678861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mSystemGroup = isSystemGroup;
688861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    }
698861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu
708861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    /**
718861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param label The title to be used for this group, or null if there is none.
728861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @param isSystemGroup Set this to {@code true} if this is s system group.
738861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     * @hide
748861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu     */
7535a078fb484941727f0307819e64a9621797d777Clara Bayarri    @TestApi
768861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    public KeyboardShortcutGroup(@Nullable CharSequence label, boolean isSystemGroup) {
778861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        this(label, Collections.<KeyboardShortcutInfo>emptyList(), isSystemGroup);
788861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    }
798861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu
8075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    private KeyboardShortcutGroup(Parcel source) {
8175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mItems = new ArrayList<>();
8275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mLabel = source.readCharSequence();
8375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        source.readTypedList(mItems, KeyboardShortcutInfo.CREATOR);
848861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        mSystemGroup = source.readInt() == 1;
8575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
8675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
8775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
8875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * Returns the label to be used to describe this group.
8975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
9075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public CharSequence getLabel() {
9175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        return mLabel;
9275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
9375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
9475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
9575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * Returns the list of items included in this group.
9675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
9775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public List<KeyboardShortcutInfo> getItems() {
9875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        return mItems;
9975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
10075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
1018861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    /** @hide **/
10235a078fb484941727f0307819e64a9621797d777Clara Bayarri    @TestApi
1038861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    public boolean isSystemGroup() {
1048861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        return mSystemGroup;
1058861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu    }
1068861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu
10775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    /**
10875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * Adds an item to the existing list.
10975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     *
11075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     * @param item The item to be added.
11175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri     */
11275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public void addItem(KeyboardShortcutInfo item) {
11375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        mItems.add(item);
11475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
11575e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
11675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    @Override
11775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public int describeContents() {
11875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        return 0;
11975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
12075e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
12175e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    @Override
12275e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public void writeToParcel(Parcel dest, int flags) {
12375e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        dest.writeCharSequence(mLabel);
12475e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri        dest.writeTypedList(mItems);
1258861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu        dest.writeInt(mSystemGroup ? 1 : 0);
12675e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    }
12775e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri
12875e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri    public static final Creator<KeyboardShortcutGroup> CREATOR =
12975e097965cc273d33192555b0e65de3dbc1753ceClara Bayarri            new Creator<KeyboardShortcutGroup>() {
13035a078fb484941727f0307819e64a9621797d777Clara Bayarri                public KeyboardShortcutGroup createFromParcel(Parcel source) {
13135a078fb484941727f0307819e64a9621797d777Clara Bayarri                    return new KeyboardShortcutGroup(source);
13235a078fb484941727f0307819e64a9621797d777Clara Bayarri                }
13335a078fb484941727f0307819e64a9621797d777Clara Bayarri                public KeyboardShortcutGroup[] newArray(int size) {
13435a078fb484941727f0307819e64a9621797d777Clara Bayarri                    return new KeyboardShortcutGroup[size];
13535a078fb484941727f0307819e64a9621797d777Clara Bayarri                }
13635a078fb484941727f0307819e64a9621797d777Clara Bayarri            };
1378861cb002f75d3dffef922c28fc0dbaca771ed11Andrei Stingaceanu}
138