147520b68e50572a9775a662410c5aff8300c8784Craig Stout/*
247520b68e50572a9775a662410c5aff8300c8784Craig Stout * Copyright (C) 2014 The Android Open Source Project
347520b68e50572a9775a662410c5aff8300c8784Craig Stout *
447520b68e50572a9775a662410c5aff8300c8784Craig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
547520b68e50572a9775a662410c5aff8300c8784Craig Stout * in compliance with the License. You may obtain a copy of the License at
647520b68e50572a9775a662410c5aff8300c8784Craig Stout *
747520b68e50572a9775a662410c5aff8300c8784Craig Stout * http://www.apache.org/licenses/LICENSE-2.0
847520b68e50572a9775a662410c5aff8300c8784Craig Stout *
947520b68e50572a9775a662410c5aff8300c8784Craig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License
1047520b68e50572a9775a662410c5aff8300c8784Craig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1147520b68e50572a9775a662410c5aff8300c8784Craig Stout * or implied. See the License for the specific language governing permissions and limitations under
1247520b68e50572a9775a662410c5aff8300c8784Craig Stout * the License.
1347520b68e50572a9775a662410c5aff8300c8784Craig Stout */
1447520b68e50572a9775a662410c5aff8300c8784Craig Stoutpackage android.support.v17.leanback.widget;
1547520b68e50572a9775a662410c5aff8300c8784Craig Stout
1647520b68e50572a9775a662410c5aff8300c8784Craig Stoutimport static android.support.v17.leanback.widget.ObjectAdapter.NO_ID;
1747520b68e50572a9775a662410c5aff8300c8784Craig Stout
1847520b68e50572a9775a662410c5aff8300c8784Craig Stout/**
19961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn * A row in a RowsFragment.  This is the base class for all rows.
20961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn * You will typically use a {@link ListRow}, but you may override this class
21961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn * for non-list Rows.
2247520b68e50572a9775a662410c5aff8300c8784Craig Stout */
2347520b68e50572a9775a662410c5aff8300c8784Craig Stoutpublic class Row {
2447520b68e50572a9775a662410c5aff8300c8784Craig Stout
2547520b68e50572a9775a662410c5aff8300c8784Craig Stout    private static final int FLAG_ID_USE_MASK = 1;
2647520b68e50572a9775a662410c5aff8300c8784Craig Stout    private static final int FLAG_ID_USE_HEADER = 1;
2747520b68e50572a9775a662410c5aff8300c8784Craig Stout    private static final int FLAG_ID_USE_ID = 0;
2847520b68e50572a9775a662410c5aff8300c8784Craig Stout
2947520b68e50572a9775a662410c5aff8300c8784Craig Stout    private int mFlags = FLAG_ID_USE_HEADER;
3047520b68e50572a9775a662410c5aff8300c8784Craig Stout    private HeaderItem mHeaderItem;
3147520b68e50572a9775a662410c5aff8300c8784Craig Stout    private long mId = NO_ID;
3247520b68e50572a9775a662410c5aff8300c8784Craig Stout
33961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn    /**
34961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * Constructor for a Row.
35961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *
36961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * @param id The id of the row.
37961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * @param headerItem The {@link HeaderItem} for this Row, or null if there
38961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *        is no header.
39961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     */
4047520b68e50572a9775a662410c5aff8300c8784Craig Stout    public Row(long id, HeaderItem headerItem) {
4147520b68e50572a9775a662410c5aff8300c8784Craig Stout        setId(id);
4247520b68e50572a9775a662410c5aff8300c8784Craig Stout        setHeaderItem(headerItem);
4347520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
4447520b68e50572a9775a662410c5aff8300c8784Craig Stout
45961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn    /**
46961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * Constructor for a Row.
47961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *
48961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * @param headerItem The {@link HeaderItem} for this Row, or null if there
49961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *        is no header.
50961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     */
5147520b68e50572a9775a662410c5aff8300c8784Craig Stout    public Row(HeaderItem headerItem) {
5247520b68e50572a9775a662410c5aff8300c8784Craig Stout        setHeaderItem(headerItem);
5347520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
5447520b68e50572a9775a662410c5aff8300c8784Craig Stout
55961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn    /**
56961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * Constructor for a Row.
57961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     */
5847520b68e50572a9775a662410c5aff8300c8784Craig Stout    public Row() {
5947520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
6047520b68e50572a9775a662410c5aff8300c8784Craig Stout
6147520b68e50572a9775a662410c5aff8300c8784Craig Stout    /**
62961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * Get the {@link HeaderItem} that represents metadata for the row.
63961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *
64961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * @return The HeaderItem for this row, or null if unset.
6547520b68e50572a9775a662410c5aff8300c8784Craig Stout     */
6647520b68e50572a9775a662410c5aff8300c8784Craig Stout    public final HeaderItem getHeaderItem() {
6747520b68e50572a9775a662410c5aff8300c8784Craig Stout        return mHeaderItem;
6847520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
6947520b68e50572a9775a662410c5aff8300c8784Craig Stout
7047520b68e50572a9775a662410c5aff8300c8784Craig Stout    /**
7147520b68e50572a9775a662410c5aff8300c8784Craig Stout     * Set the {@link HeaderItem} that represents metadata for the row.
72961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *
73961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * @param headerItem The HeaderItem for this Row, or null if there is no
74961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *        header.
7547520b68e50572a9775a662410c5aff8300c8784Craig Stout     */
7647520b68e50572a9775a662410c5aff8300c8784Craig Stout    public final void setHeaderItem(HeaderItem headerItem) {
7747520b68e50572a9775a662410c5aff8300c8784Craig Stout        mHeaderItem = headerItem;
7847520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
7947520b68e50572a9775a662410c5aff8300c8784Craig Stout
8047520b68e50572a9775a662410c5aff8300c8784Craig Stout    /**
81961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * Set the id for this row.
82961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *
83961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * @param id The id of the row.
8447520b68e50572a9775a662410c5aff8300c8784Craig Stout     */
8547520b68e50572a9775a662410c5aff8300c8784Craig Stout    public final void setId(long id) {
8647520b68e50572a9775a662410c5aff8300c8784Craig Stout        mId = id;
8747520b68e50572a9775a662410c5aff8300c8784Craig Stout        setFlags(FLAG_ID_USE_ID, FLAG_ID_USE_MASK);
8847520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
8947520b68e50572a9775a662410c5aff8300c8784Craig Stout
9047520b68e50572a9775a662410c5aff8300c8784Craig Stout    /**
91961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * Returns a unique identifier for this row. This id can come from one of
92961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * three places:
93961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * <ul>
94961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *   <li>If {@link #setId(long)} is ever called on this row, it will return
95961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *   this id.
96961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *   <li>If {@link #setId(long)} has not been called but the header item is
97961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *   not null, the result of {@link HeaderItem#getId()} is returned.
98961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     *   <li>Otherwise {@link ObjectAdapter#NO_ID NO_ID} is returned.
99961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn     * </ul>
10047520b68e50572a9775a662410c5aff8300c8784Craig Stout     */
10147520b68e50572a9775a662410c5aff8300c8784Craig Stout    public final long getId() {
10247520b68e50572a9775a662410c5aff8300c8784Craig Stout        if ( (mFlags & FLAG_ID_USE_MASK) == FLAG_ID_USE_HEADER) {
10347520b68e50572a9775a662410c5aff8300c8784Craig Stout            HeaderItem header = getHeaderItem();
10447520b68e50572a9775a662410c5aff8300c8784Craig Stout            if (header != null) {
10547520b68e50572a9775a662410c5aff8300c8784Craig Stout                return header.getId();
10647520b68e50572a9775a662410c5aff8300c8784Craig Stout            }
10747520b68e50572a9775a662410c5aff8300c8784Craig Stout            return NO_ID;
10847520b68e50572a9775a662410c5aff8300c8784Craig Stout        } else {
10947520b68e50572a9775a662410c5aff8300c8784Craig Stout            return mId;
11047520b68e50572a9775a662410c5aff8300c8784Craig Stout        }
11147520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
11247520b68e50572a9775a662410c5aff8300c8784Craig Stout
11347520b68e50572a9775a662410c5aff8300c8784Craig Stout    final void setFlags(int flags, int mask) {
11447520b68e50572a9775a662410c5aff8300c8784Craig Stout        mFlags = (mFlags & ~mask) | (flags & mask);
11547520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
11647520b68e50572a9775a662410c5aff8300c8784Craig Stout
11747520b68e50572a9775a662410c5aff8300c8784Craig Stout    final int getFlags() {
11847520b68e50572a9775a662410c5aff8300c8784Craig Stout        return mFlags;
11947520b68e50572a9775a662410c5aff8300c8784Craig Stout    }
12047520b68e50572a9775a662410c5aff8300c8784Craig Stout}
121