Inline reply text

make inline reply comply with material next
Fixes: 182577304

Test: Manual
Change-Id: Ic19c94e61858497a033a080bac454ff40cb0082d
This commit is contained in:
Jay Aliomer
2021-03-10 15:14:17 -05:00
parent d3035fe485
commit eceb96bbfc
7 changed files with 107 additions and 35 deletions

View File

@@ -16,6 +16,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:color="@android:color/white" />
<item android:color="#4dffffff" /> <!-- 30% white -->
<item android:state_enabled="true" android:color="?android:attr/colorAccent" />
<item android:color="?android:attr/colorAccent" android:alpha=".3" />
</selector>

View File

@@ -16,6 +16,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:color="@color/remote_input_text_enabled" /> <!-- white -->
<item android:color="#99ffffff" /> <!-- 60% white -->
<item android:state_enabled="true" android:color="?android:attr/textColorTertiary" />
<item android:color="?android:attr/textColorTertiary" android:alpha=".6" />
</selector>

View File

@@ -19,7 +19,6 @@
<!-- LinearLayout -->
<com.android.systemui.statusbar.policy.RemoteInputView
xmlns:android="http://schemas.android.com/apk/res/android"
android:theme="@style/systemui_theme_remote_input"
android:id="@+id/remote_input"
android:layout_height="match_parent"
android:layout_width="match_parent">
@@ -33,6 +32,10 @@
android:paddingBottom="4dp"
android:paddingStart="16dp"
android:paddingEnd="12dp"
android:layout_marginRight="5dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="20dp"
android:gravity="start|center_vertical"
android:textAppearance="?android:attr/textAppearance"
android:textColor="@color/remote_input_text"
@@ -53,6 +56,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:paddingBottom="20dp"
android:paddingStart="12dp"
android:paddingEnd="24dp"
android:id="@+id/remote_input_send"
@@ -66,6 +70,7 @@
android:id="@+id/remote_input_progress"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginBottom="10dp"
android:layout_marginEnd="6dp"
android:layout_gravity="center"
android:visibility="invisible"

View File

@@ -153,10 +153,9 @@
<color name="minimize_dock_shadow_end">#00000000</color>
<color name="default_remote_input_background">@*android:color/notification_default_color</color>
<color name="remote_input_text_enabled">#ffffffff</color>
<color name="remote_input_hint">#99ffffff</color>
<color name="remote_input_accent">#eeeeee</color>
<color name="remote_input_accent">?android:attr/colorAccent</color>
<color name="quick_step_track_background_background_dark">#1F000000</color>
<color name="quick_step_track_background_background_light">#33FFFFFF</color>

View File

@@ -384,10 +384,6 @@
<!-- Overridden by values-television/styles.xml with tv-specific settings -->
<style name="volume_dialog_theme" parent="qs_theme"/>
<style name="systemui_theme_remote_input" parent="@android:style/Theme.DeviceDefault.Light">
<item name="android:colorAccent">@color/remote_input_accent</item>
</style>
<style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog" />
<style name="Theme.SystemUI.Dialog.Alert" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" />

View File

@@ -22,8 +22,6 @@ import android.annotation.Nullable;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
@@ -32,7 +30,6 @@ import android.util.ArrayMap;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.NotificationHeaderView;
@@ -44,7 +41,6 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ContrastColorUtil;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
@@ -1272,23 +1268,6 @@ public class NotificationContentView extends FrameLayout {
}
}
if (hasRemoteInput) {
int color = entry.getSbn().getNotification().color;
if (color == Notification.COLOR_DEFAULT) {
color = mContext.getColor(R.color.default_remote_input_background);
}
if (mContext.getResources().getBoolean(
com.android.internal.R.bool.config_tintNotificationsWithTheme)) {
Resources.Theme theme = new ContextThemeWrapper(mContext,
com.android.internal.R.style.Theme_DeviceDefault_DayNight).getTheme();
TypedArray ta = theme.obtainStyledAttributes(
new int[]{com.android.internal.R.attr.colorAccent});
color = ta.getColor(0, color);
ta.recycle();
}
existing.setBackgroundColor(ContrastColorUtil.ensureTextBackgroundColor(color,
mContext.getColor(R.color.remote_input_text_enabled),
mContext.getColor(R.color.remote_input_hint)));
existing.setWrapper(wrapper);
existing.setOnVisibilityChangedListener(this::setRemoteInputVisible);
@@ -1310,6 +1289,10 @@ public class NotificationContentView extends FrameLayout {
}
}
}
if (existing != null && entry.getSbn().getNotification().isColorized()) {
existing.overrideBackgroundTintColor(entry.getSbn().getNotification().color);
}
return existing;
}
return null;

View File

@@ -31,8 +31,15 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ShortcutManager;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.ServiceManager;
@@ -70,6 +77,7 @@ import androidx.annotation.NonNull;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.ContrastColorUtil;
import com.android.systemui.Dependency;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
@@ -137,12 +145,40 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
}
/**
* The remote view needs to adapt to colorized notifications when set
* @param color colorized notification color
*/
public void overrideBackgroundTintColor(int color) {
mEditText.setBackgroundTintColor(color);
final boolean dark = !ContrastColorUtil.isColorLight(color);
int[][] states = new int[][] {
new int[] {android.R.attr.state_enabled},
new int[] {},
};
final int finalColor = dark
? Color.WHITE
: Color.BLACK;
int[] colors = new int[] {
finalColor,
finalColor & 0x4DFFFFFF // %30 opacity
};
final ColorStateList tint = new ColorStateList(states, colors);
mSendButton.setImageTintList(tint);
mProgressBar.setProgressTintList(tint);
mProgressBar.setIndeterminateTintList(tint);
mProgressBar.setSecondaryProgressTintList(tint);
mEditText.setForegroundColor(finalColor);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mProgressBar = findViewById(R.id.remote_input_progress);
mSendButton = findViewById(R.id.remote_input_send);
mSendButton.setOnClickListener(this);
@@ -362,6 +398,12 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
}
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mEditText.updateCornerRadius(heightMeasureSpec / 2);
}
/** Populates the text field of the remote input with the given content. */
public void setEditTextContent(@Nullable CharSequence editTextContent) {
mEditText.setText(editTextContent);
@@ -651,17 +693,47 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
private final OnReceiveContentListener mOnReceiveContentListener = this::onReceiveContent;
private final Drawable mBackground;
private RemoteInputView mRemoteInputView;
private GradientDrawable mTextBackground;
private ColorDrawable mBackgroundColor;
private LayerDrawable mBackground;
boolean mShowImeOnInputConnection;
private LightBarController mLightBarController;
private InputMethodManager mInputMethodManager;
private int mColor = Notification.COLOR_DEFAULT;
UserHandle mUser;
private int mStokeWidth;
public RemoteEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mBackground = getBackground();
mLightBarController = Dependency.get(LightBarController.class);
mTextBackground = createBackground(context, attrs);
mBackgroundColor = new ColorDrawable();
mBackground = new LayerDrawable(new Drawable[] {mBackgroundColor, mTextBackground});
float density = context.getResources().getDisplayMetrics().density;
mStokeWidth = (int) (2 * density);
setDefaultColors();
}
private void setDefaultColors() {
Resources.Theme theme = getContext().getTheme();
TypedArray ta = theme.obtainStyledAttributes(
new int[]{android.R.attr.colorAccent,
com.android.internal.R.attr.colorBackgroundFloating});
mTextBackground.setStroke(mStokeWidth,
ta.getColor(0, Notification.COLOR_DEFAULT));
mColor = ta.getColor(1, Notification.COLOR_DEFAULT);
mTextBackground.setColor(mColor);
}
private GradientDrawable createBackground(Context context, AttributeSet attrs) {
float density = context.getResources().getDisplayMetrics().density;
int padding = (int) (12 * density);
GradientDrawable d = new GradientDrawable();
d.setShape(GradientDrawable.RECTANGLE);
d.setPadding(padding, padding, padding, padding);
d.setCornerRadius(padding);
return d;
}
void setSupportedMimeTypes(@Nullable Collection<String> mimeTypes) {
@@ -724,6 +796,19 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
}
}
protected void setBackgroundTintColor(int color) {
mBackgroundColor.setColor(color);
mTextBackground.setColor(color);
}
protected void setForegroundColor(int color) {
mTextBackground.setStroke(mStokeWidth, color);
setTextColor(color);
// %60
setHintTextColor(color & 0x99FFFFFF);
setTextCursorDrawable(null);
}
@Override
public void getFocusedRect(Rect r) {
super.getFocusedRect(r);
@@ -811,6 +896,10 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
setSelection(getText().length());
}
void updateCornerRadius(float radius) {
mTextBackground.setCornerRadius(radius);
}
void setInnerFocusable(boolean focusable) {
setFocusableInTouchMode(focusable);
setFocusable(focusable);