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