FocusDelegate.java revision ac5fe7c617c66850fff75a9fce9979c6e5674b0f
163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay/*
263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Copyright 2017 The Android Open Source Project
363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Licensed under the Apache License, Version 2.0 (the "License");
563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * you may not use this file except in compliance with the License.
663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * You may obtain a copy of the License at
763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *      http://www.apache.org/licenses/LICENSE-2.0
963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
1063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Unless required by applicable law or agreed to in writing, software
1163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * distributed under the License is distributed on an "AS IS" BASIS,
1263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * See the License for the specific language governing permissions and
1463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * limitations under the License.
1563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */
1663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
172a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikaspackage androidx.recyclerview.selection;
1863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
19ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.annotation.NonNull;
20ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.recyclerview.widget.RecyclerView;
2163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
222a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
2363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
2463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay/**
257fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay * Override methods in this class to provide application specific behaviors
267fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay * related to focusing item.
2763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay *
287fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay * @param <K> Selection key type. @see {@link StorageStrategy} for supported types.
2963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */
307fb763509e07f98d650efc25c91bff8b1cb239acSteve McKaypublic abstract class FocusDelegate<K> {
3163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
32c05db2551709fb74903cce69f3e4b9f553e607afJake Wharton    static <K> FocusDelegate<K> dummy() {
337fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay        return new FocusDelegate<K>() {
3463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            @Override
357fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay            public void focusItem(@NonNull ItemDetails<K> item) {
3663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            }
3763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
3863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            @Override
3963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            public boolean hasFocusedItem() {
4063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay                return false;
4163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            }
4263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
4363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            @Override
4463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            public int getFocusedPosition() {
4563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay                return RecyclerView.NO_POSITION;
4663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            }
4763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
4863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            @Override
4963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            public void clearFocus() {
5063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay            }
5163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay        };
5263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    }
5363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
5463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    /**
5563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     * If environment supports focus, focus {@code item}.
5663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     */
577fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay    public abstract void focusItem(@NonNull ItemDetails<K> item);
5863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
5963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    /**
6063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     * @return true if there is a focused item.
6163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     */
6263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public abstract boolean hasFocusedItem();
6363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
6463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    /**
6563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     * @return the position of the currently focused item, if any.
6663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     */
6763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public abstract int getFocusedPosition();
6863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay
6963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    /**
7063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     * If the environment supports focus and something is focused, unfocus it.
7163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay     */
7263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay    public abstract void clearFocus();
7363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay}
74