blob: 00ef819f84f4d62766e5b49d44bd7cb86fc7f66a [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.documentsui.inspector;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Paint;
import android.text.Selection;
import android.text.Spannable;
import android.util.AttributeSet;
import android.view.View;
import android.view.textclassifier.TextClassifier;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.android.documentsui.R;
/**
* Class representing a row in the table.
*/
public class KeyValueRow extends LinearLayout {
private final Resources mRes;
private @Nullable ColorStateList mDefaultTextColor;
private @Nullable TextClassifier mClassifier;
public KeyValueRow(Context context) {
this(context, null);
}
public KeyValueRow(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public KeyValueRow(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mRes = context.getResources();
}
public void setTextClassifier(TextClassifier classifier) {
mClassifier = classifier;
}
/**
* Sets the raw value of the key. Only localized values
* should be passed.
*/
public void setKey(CharSequence key) {
((TextView) findViewById(R.id.table_row_key)).setText(key);
}
public void setKey(@StringRes int id) {
setKey(mRes.getString(id));
}
public void setValue(CharSequence value) {
TextView text = ((TextView) findViewById(R.id.table_row_value));
text.setText(value);
text.setTextClassifier(mClassifier);
text.setOnLongClickListener((View view) -> {
CharSequence textValue = text.getText();
if (textValue instanceof Spannable) {
Spannable spn = (Spannable) textValue;
Selection.selectAll(spn);
}
// we still want the default selection arrows and menu after we specified to select
// all text in the TextView.
return false;
});
}
@Override
public boolean hasOnClickListeners() {
TextView value = findViewById(R.id.table_row_value);
return value.hasOnClickListeners();
}
@Override
public void setOnClickListener(OnClickListener callback) {
TextView clickable = ((TextView) findViewById(R.id.table_row_value));
mDefaultTextColor = clickable.getTextColors();
TypedArray ta = getContext().obtainStyledAttributes(R.styleable.TextAppearance);
int linkColor = ta.getColor(R.styleable.TextAppearance_android_textColorLink,
mDefaultTextColor.getDefaultColor());
ta.recycle();
clickable.setTextColor(linkColor);
clickable.setPaintFlags(clickable.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
clickable.setOnClickListener(callback);
}
public void removeOnClickListener() {
TextView reset = ((TextView) findViewById(R.id.table_row_value));
if (mDefaultTextColor != null) {
reset.setTextColor(mDefaultTextColor);
}
reset.setPaintFlags(reset.getPaintFlags() & ~Paint.UNDERLINE_TEXT_FLAG);
reset.setOnClickListener(null);
reset.setClickable(false);
}
}