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