1d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing/*
2d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * Copyright 2017 The Android Open Source Project
3d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing *
4d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * Licensed under the Apache License, Version 2.0 (the "License");
5d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * you may not use this file except in compliance with the License.
6d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * You may obtain a copy of the License at
7d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing *
8d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing *      http://www.apache.org/licenses/LICENSE-2.0
9d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing *
10d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * Unless required by applicable law or agreed to in writing, software
11d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * distributed under the License is distributed on an "AS IS" BASIS,
12d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * See the License for the specific language governing permissions and
14d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * limitations under the License.
15d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing */
16d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
17d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxingpackage androidx.car.utils;
18d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
19d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxingimport android.view.View;
20d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
21d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxingimport androidx.car.R;
22d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
23d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing/**
24d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * A utility class that will set the current background for a View that represents an card entry
25d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * in a list. The class will set the background depending on the position of the card within the
26d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing * list.
27d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing */
28d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxingpublic class ListItemBackgroundResolver {
29d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing    private ListItemBackgroundResolver() {}
30d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
31d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing    /**
32d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * Sets the background on the given view so that the combination of all items looks like a
33d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * rectangle with rounded corner. The view is assumed to have a non-rounded corner outline.
34d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     *
35d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * <p>The view will be set with rounded backgrounds if it is the only card within the list.
36d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * Or if it is the first or last view, it will have the top or bottom corners rounded
37d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * respectively.
38d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     *
39d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * @param view The view whose background to set.
40d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * @param currentPosition The current position of the View within the list. This value should
41d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     *                        be 0-based.
42d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     * @param totalItems The total items within the list.
43d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing     */
44d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing    public static void setBackground(View view, int currentPosition, int totalItems) {
45d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        if (currentPosition < 0) {
46d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            throw new IllegalArgumentException("currentPosition cannot be less than zero.");
47d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        }
48d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
49d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        if (currentPosition >= totalItems) {
50d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            throw new IndexOutOfBoundsException("currentPosition: " + currentPosition + "; "
51d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing                    + "totalItems: " + totalItems);
52d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        }
53d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
54d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        // Set the background for each card. Only the top and last card should have rounded corners.
55d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        if (totalItems == 1) {
56d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            // One card - all corners are rounded.
57d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            view.setBackgroundResource(R.drawable.car_card_rounded_background);
58d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        } else if (currentPosition == 0) {
59d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            // First card gets rounded top.
60d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            view.setBackgroundResource(R.drawable.car_card_rounded_top_background);
61d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        } else if (currentPosition == totalItems - 1) {
62d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            // Last one has a rounded bottom.
63d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            view.setBackgroundResource(R.drawable.car_card_rounded_bottom_background);
64d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        } else {
65d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            // Middle has no rounded corners.
66d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing            view.setBackgroundResource(R.drawable.car_card_background);
67d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing        }
68d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing    }
69d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing}
70d0e9e80e8d49a82d43cda017f10df9a609cd6102Yao, Yuxing
71