1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.devicelockcontroller.activities;
18 
19 import android.content.Context;
20 import android.view.View;
21 import android.view.ViewGroup;
22 import android.widget.TextView;
23 
24 import androidx.recyclerview.widget.RecyclerView;
25 
26 import com.android.devicelockcontroller.R;
27 import com.android.devicelockcontroller.activities.util.UrlUtils;
28 
29 /**
30  * A {@link androidx.recyclerview.widget.RecyclerView.ViewHolder} class which describes the item
31  * views used in the {@link RecyclerView}
32  */
33 final class DevicePolicyGroupViewHolder extends RecyclerView.ViewHolder {
34 
35     private static final String TAG = "DevicePolicyGroupViewHolder";
36 
37     private final TextView mGroupTitleTextView;
38     private final ViewGroup mDevicePolicyItems;
39 
DevicePolicyGroupViewHolder(View iteView)40     DevicePolicyGroupViewHolder(View iteView) {
41         super(iteView);
42         mGroupTitleTextView = iteView.findViewById(R.id.text_view_device_policy_group_title);
43         mDevicePolicyItems = iteView.findViewById(R.id.device_policy_items);
44     }
45 
bind(DevicePolicyGroup devicePolicyGroup, int maxDevicePolicy, String providerName)46     void bind(DevicePolicyGroup devicePolicyGroup, int maxDevicePolicy, String providerName) {
47         Context context = itemView.getContext();
48         mGroupTitleTextView.setText(
49                 context.getString(devicePolicyGroup.getGroupTitleTextId(), providerName));
50         for (int i = 0; i < devicePolicyGroup.getDevicePolicyList().size(); ++i) {
51             TextView devicePolicyItemView = (TextView) mDevicePolicyItems.getChildAt(i);
52             DevicePolicy devicePolicy = devicePolicyGroup.getDevicePolicyList().get(i);
53             String policyText = context.getString(devicePolicy.getTextId(), providerName);
54             UrlUtils.setUrlText(devicePolicyItemView, policyText);
55             // Focus is set to false because we want all the views to fall under the parent
56             // container when it is focused
57             devicePolicyItemView.setFocusable(false);
58             devicePolicyItemView.setCompoundDrawablesRelativeWithIntrinsicBounds(
59                     devicePolicy.getDrawableId(),
60                     /* top=*/ 0,
61                     /* end=*/ 0,
62                     /* bottom=*/ 0);
63             devicePolicyItemView.setVisibility(View.VISIBLE);
64         }
65         // not every DevicePolicyGroup has the maximum number of DevicePolicy, hide the extra views
66         for (int i = devicePolicyGroup.getDevicePolicyList().size(); i < maxDevicePolicy; ++i) {
67             TextView devicePolicyItemView = (TextView) mDevicePolicyItems.getChildAt(i);
68             devicePolicyItemView.setVisibility(View.GONE);
69         }
70     }
71 }
72