diff options
4 files changed, 79 insertions, 43 deletions
diff --git a/packages/SystemUI/res/layout/qs_carrier.xml b/packages/SystemUI/res/layout/qs_carrier.xml index 8dd06f040d09..28b2d21d0043 100644 --- a/packages/SystemUI/res/layout/qs_carrier.xml +++ b/packages/SystemUI/res/layout/qs_carrier.xml @@ -35,7 +35,7 @@ android:layout_marginEnd="@dimen/qs_carrier_margin_width" android:visibility="gone" /> - <view class="com.android.systemui.qs.QSCarrier$QSCarrierText" + <com.android.systemui.util.AutoMarqueeTextView android:id="@+id/qs_carrier_text" android:layout_width="wrap_content" android:layout_height="wrap_content" diff --git a/packages/SystemUI/res/layout/quick_settings_header_info.xml b/packages/SystemUI/res/layout/quick_settings_header_info.xml index 3582d391271c..5a0ecdb23d94 100644 --- a/packages/SystemUI/res/layout/quick_settings_header_info.xml +++ b/packages/SystemUI/res/layout/quick_settings_header_info.xml @@ -47,7 +47,7 @@ android:contentDescription="@string/accessibility_quick_settings_alarm_set" android:visibility="gone"/> - <TextView + <com.android.systemui.util.AutoMarqueeTextView android:id="@+id/next_alarm_text" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -80,7 +80,7 @@ android:layout_height="@dimen/qs_header_alarm_icon_size" android:visibility="gone"/> - <TextView + <com.android.systemui.util.AutoMarqueeTextView android:id="@+id/ringer_mode_text" android:layout_width="wrap_content" android:layout_height="wrap_content" diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java b/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java index c5bf402783e3..4d18312731a5 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSCarrier.java @@ -33,7 +33,7 @@ import com.android.systemui.R; public class QSCarrier extends LinearLayout { private View mMobileGroup; - private QSCarrierText mCarrierText; + private TextView mCarrierText; private ImageView mMobileSignal; private ImageView mMobileRoaming; private DualToneHandler mDualToneHandler; @@ -111,43 +111,4 @@ public class QSCarrier extends LinearLayout { public void setCarrierText(CharSequence text) { mCarrierText.setText(text); } - - /** - * TextView that changes its ellipsize value with its visibility. - */ - public static class QSCarrierText extends TextView { - - public QSCarrierText(Context context) { - super(context); - } - - public QSCarrierText(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public QSCarrierText(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public QSCarrierText(Context context, AttributeSet attrs, int defStyleAttr, - int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - @Override - protected void onFinishInflate() { - setSelected(true); - } - - @Override - protected void onVisibilityChanged(View changedView, int visibility) { - super.onVisibilityChanged(changedView, visibility); - // Only show marquee when visible - if (visibility == VISIBLE) { - setEllipsize(TextUtils.TruncateAt.MARQUEE); - } else { - setEllipsize(TextUtils.TruncateAt.END); - } - } - } } diff --git a/packages/SystemUI/src/com/android/systemui/util/AutoMarqueeTextView.java b/packages/SystemUI/src/com/android/systemui/util/AutoMarqueeTextView.java new file mode 100644 index 000000000000..d9d410dc4b89 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/util/AutoMarqueeTextView.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 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.systemui.util; + +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * TextView that changes its ellipsize value with its visibility. + * + * The View responds to changes in user-visibility to change its ellipsize from MARQUEE to END + * and back. Useful for TextView that need to marquee forever. + */ +public class AutoMarqueeTextView extends TextView { + + private boolean mAggregatedVisible = false; + + public AutoMarqueeTextView(Context context) { + super(context); + } + + public AutoMarqueeTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AutoMarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public AutoMarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + setSelected(true); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + setSelected(false); + } + + @Override + public void onVisibilityAggregated(boolean isVisible) { + super.onVisibilityAggregated(isVisible); + if (isVisible == mAggregatedVisible) return; + + mAggregatedVisible = isVisible; + if (mAggregatedVisible) { + setEllipsize(TextUtils.TruncateAt.MARQUEE); + } else { + setEllipsize(TextUtils.TruncateAt.END); + } + } +} |