1/*
2 * Copyright (C) 2016 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
17package com.android.settings.localepicker;
18
19import android.content.Context;
20import android.util.AttributeSet;
21import android.widget.CheckBox;
22import android.widget.ImageView;
23import android.widget.RelativeLayout;
24import android.widget.TextView;
25
26import com.android.settings.R;
27
28class 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
38    public LocaleDragCell(Context context, AttributeSet attrs) {
39        super(context, attrs);
40    }
41
42    @Override
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
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
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
75    public void setChecked(boolean checked) {
76        mCheckbox.setChecked(checked);
77    }
78
79    public void setShowMiniLabel(boolean showMiniLabel) {
80        mMiniLabel.setVisibility(showMiniLabel ? VISIBLE : GONE);
81        invalidate();
82        requestLayout();
83    }
84
85    public void setMiniLabel(String miniLabelText) {
86        mMiniLabel.setText(miniLabelText);
87        invalidate();
88    }
89
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
98    public void setLocalized(boolean localized) {
99        mLocalized.setVisibility(localized ? GONE : VISIBLE);
100        invalidate();
101    }
102
103    public ImageView getDragHandle() {
104        return mDragHandle;
105    }
106
107    public CheckBox getCheckbox() {
108        return mCheckbox;
109    }
110}
111