1 /*
2  * Copyright (C) 2019 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.car.developeroptions.localepicker;
18 
19 import android.content.Context;
20 import android.util.AttributeSet;
21 import android.widget.CheckBox;
22 import android.widget.ImageView;
23 import android.widget.RelativeLayout;
24 import android.widget.TextView;
25 
26 import com.android.car.developeroptions.R;
27 
28 class LocaleDragCell extends RelativeLayout {
29     // We need to keep the label and the checkbox "in sync"
30     // The checkbox shows in remove mode, and the label shows in normal mode, in the same position.
31     // So we need to set the same text to both of them, and coordinate the show / hide.
32     private TextView mLabel;
33     private CheckBox mCheckbox;
34     private TextView mMiniLabel;
35     private TextView mLocalized;
36     private ImageView mDragHandle;
37 
LocaleDragCell(Context context, AttributeSet attrs)38     public LocaleDragCell(Context context, AttributeSet attrs) {
39         super(context, attrs);
40     }
41 
42     @Override
onFinishInflate()43     protected void onFinishInflate() {
44         super.onFinishInflate();
45         mLabel = (TextView) findViewById(R.id.label);
46         mLocalized = (TextView) findViewById(R.id.l10nWarn);
47         mMiniLabel = (TextView) findViewById(R.id.miniLabel);
48         mCheckbox = (CheckBox) findViewById(R.id.checkbox);
49         mDragHandle = (ImageView) findViewById(R.id.dragHandle);
50     }
51 
setShowHandle(boolean showHandle)52     public void setShowHandle(boolean showHandle) {
53         // We want invisible, not gone, so that everything else stays the same.
54         // With GONE there is more space for the labels and the text wrapping change.
55         // So the transition between "normal" mode (with numbers) and
56         // "remove mode" (with checkboxes) is not that "smooth"
57         mDragHandle.setVisibility(showHandle ? VISIBLE : INVISIBLE);
58         invalidate();
59         requestLayout();
60     }
61 
setShowCheckbox(boolean showCheckbox)62     public void setShowCheckbox(boolean showCheckbox) {
63         // "Opposite" visibility for label / checkbox
64         if (showCheckbox) {
65             mCheckbox.setVisibility(VISIBLE);
66             mLabel.setVisibility(INVISIBLE);
67         } else {
68             mCheckbox.setVisibility(INVISIBLE);
69             mLabel.setVisibility(VISIBLE);
70         }
71         invalidate();
72         requestLayout();
73     }
74 
setChecked(boolean checked)75     public void setChecked(boolean checked) {
76         mCheckbox.setChecked(checked);
77     }
78 
setShowMiniLabel(boolean showMiniLabel)79     public void setShowMiniLabel(boolean showMiniLabel) {
80         mMiniLabel.setVisibility(showMiniLabel ? VISIBLE : GONE);
81         invalidate();
82         requestLayout();
83     }
84 
setMiniLabel(String miniLabelText)85     public void setMiniLabel(String miniLabelText) {
86         mMiniLabel.setText(miniLabelText);
87         invalidate();
88     }
89 
setLabelAndDescription(String labelText, String description)90     public void setLabelAndDescription(String labelText, String description) {
91         mLabel.setText(labelText);
92         mCheckbox.setText(labelText);
93         mLabel.setContentDescription(description);
94         mCheckbox.setContentDescription(description);
95         invalidate();
96     }
97 
setLocalized(boolean localized)98     public void setLocalized(boolean localized) {
99         mLocalized.setVisibility(localized ? GONE : VISIBLE);
100         invalidate();
101     }
102 
getDragHandle()103     public ImageView getDragHandle() {
104         return mDragHandle;
105     }
106 
getCheckbox()107     public CheckBox getCheckbox() {
108         return mCheckbox;
109     }
110 }
111