blob: 15b1651f52e01ef4e6d2a033a4ea35465f702b77 [file] [log] [blame]
/*
* Copyright 2019 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.car.ui;
import android.text.SpannableStringBuilder;
import androidx.annotation.NonNull;
import java.util.Collections;
import java.util.List;
/**
* Text that includes rendering information.
*/
public class CarUiText {
private final int mMaxLines;
private final int mMaxChars;
private final List<CharSequence> mVariants;
/**
* Convenience method that returns a single {@link CharSequence} that is a combination of the
* preferred text of a list of {@link CarUiText}, separated by line breaks.
*/
public static CharSequence combineMultiLine(@NonNull List<CarUiText> lines) {
SpannableStringBuilder builder = new SpannableStringBuilder();
CharSequence delimiter = "";
for (CarUiText line : lines) {
builder.append(delimiter)
.append(line.getPreferredText() == null ? " " : line.getPreferredText());
delimiter = "\n";
}
return builder;
}
private CarUiText(Builder builder) {
mVariants = builder.mVariants;
mMaxChars = builder.mMaxChars;
mMaxLines = builder.mMaxLines;
}
/**
* Create a new {@link CarUiText}.
*
* @param text text to display
*
* @deprecated Use {@link Builder} to instantiate {@link CarUiText} instances
*/
@Deprecated
public CarUiText(@NonNull CharSequence text) {
this(text, Integer.MAX_VALUE);
}
/**
* Create a new {@link CarUiText}.
*
* @param text text to display
* @param maxLines the maximum number of lines the text should be displayed on when width
* constraints force the text to be wrapped. Text that exceeds the maximum
* number of lines is ellipsized
*
* @deprecated Use {@link Builder} to instantiate {@link CarUiText} instances
*/
@Deprecated
public CarUiText(@NonNull CharSequence text, int maxLines) {
mVariants = Collections.singletonList(text);
mMaxLines = maxLines;
mMaxChars = Integer.MAX_VALUE;
}
/**
* Create a new {@link CarUiText}.
*
* @param variants list of text variants. Variants provide alternative text to be used to avoid
* truncation. Provide variants in order of preference.
* @param maxLines the maximum number of lines the text should be displayed on when width
* constraints force the text to be wrapped. Text that exceeds the maximum
* number of lines is ellipsized
*
* @deprecated Use {@link Builder} to instantiate {@link CarUiText} instances
*/
@Deprecated
public CarUiText(@NonNull List<CharSequence> variants, int maxLines) {
mVariants = variants;
mMaxLines = maxLines;
mMaxChars = Integer.MAX_VALUE;
}
/**
* Create a new {@link CarUiText}.
*
* @param variants list of text variants. Variants provide alternative text to be used to avoid
* truncation. Provide variants in order of preference.
* @param maxLines the maximum number of lines the text should be displayed on when width
* constraints force the text to be wrapped. Text that exceeds the maximum
* number of lines is ellipsized
* @param maxChars the maximum number of characters that should be displayed
*
* @deprecated Use {@link Builder} to instantiate {@link CarUiText} instances
*/
@Deprecated
public CarUiText(@NonNull List<CharSequence> variants, int maxLines, int maxChars) {
mVariants = variants;
mMaxLines = maxLines;
mMaxChars = maxChars;
}
/**
* Returns the maximum number of lines the text should be displayed on when width constraints
* force the text to be wrapped
*/
public int getMaxLines() {
return mMaxLines;
}
/**
* Returns the maximum number of characters that should be displayed for the text
*/
public int getMaxChars() {
return mMaxChars;
}
/**
* Returns the list of text variants for this {@link CarUiText}.
*/
public List<CharSequence> getTextVariants() {
return mVariants;
}
/**
* Returns the preferred text to render for this {@link CarUiText}.
*/
public CharSequence getPreferredText() {
return mVariants.get(0);
}
/**
* A builder of {@link CarUiText}.
*/
public static final class Builder {
private int mMaxLines = Integer.MAX_VALUE;
private int mMaxChars = Integer.MAX_VALUE;
private final List<CharSequence> mVariants;
/**
* Returns a new instance of a {@link Builder}.
*
* @param text text to display
*/
public Builder(@NonNull CharSequence text) {
this(Collections.singletonList(text));
}
/**
* Returns a new instance of a {@link Builder}.
*
* @param variants list of text variants. Variants provide alternative text to be used to
* avoid truncation. Provide variants in order of preference.
*/
public Builder(@NonNull List<CharSequence> variants) {
mVariants = variants;
}
/**
* Sets the maximum number of characters that should be displayed.
*/
public Builder setMaxChars(int chars) {
mMaxChars = chars;
return this;
}
/**
* Sets the maximum number of lines the text should be displayed on when width constraints
* force the text to be wrapped. Text that exceeds the maximum number of lines is
* ellipsized.
*/
public Builder setMaxLines(int lines) {
mMaxLines = lines;
return this;
}
/**
* Returns a {@link CarUiText} for this {@link Builder}.
*/
public CarUiText build() {
return new CarUiText(this);
}
}
}