diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 53f1227383b7f..422b04973d352 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2348,7 +2348,10 @@ Can\u2019t save. Try again. Can\u2019t save. - + + Use at least 4 characters + + Use fewer than 16 characters Build number diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java index 35baf0131b9d8..12d6b7ccf5cd0 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java @@ -20,6 +20,8 @@ import android.app.AlertDialog; import android.content.Context; import android.graphics.Bitmap; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.util.Log; @@ -64,11 +66,51 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog { private String mCurrentBroadcastName; private String mCurrentBroadcastCode; private boolean mIsStopbyUpdateBroadcastCode = false; + private TextWatcher mTextWatcher = new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // Do nothing + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // Do nothing + } + + @Override + public void afterTextChanged(Editable s) { + if (mAlertDialog == null || mBroadcastErrorMessage == null) { + return; + } + boolean breakBroadcastCodeRuleTextLengthLessThanMin = + s.length() > 0 && s.length() < BROADCAST_CODE_MIN_LENGTH; + boolean breakBroadcastCodeRuleTextLengthMoreThanMax = + s.length() > BROADCAST_CODE_MAX_LENGTH; + boolean breakRule = breakBroadcastCodeRuleTextLengthLessThanMin + || breakBroadcastCodeRuleTextLengthMoreThanMax; + + if (breakBroadcastCodeRuleTextLengthLessThanMin) { + mBroadcastErrorMessage.setText( + R.string.media_output_broadcast_code_hint_no_less_than_min); + } else if (breakBroadcastCodeRuleTextLengthMoreThanMax) { + mBroadcastErrorMessage.setText( + R.string.media_output_broadcast_code_hint_no_more_than_max); + } + + mBroadcastErrorMessage.setVisibility(breakRule ? View.VISIBLE : View.INVISIBLE); + Button positiveBtn = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE); + if (positiveBtn != null) { + positiveBtn.setEnabled(breakRule ? false : true); + } + } + }; static final int METADATA_BROADCAST_NAME = 0; static final int METADATA_BROADCAST_CODE = 1; private static final int MAX_BROADCAST_INFO_UPDATE = 3; + private static final int BROADCAST_CODE_MAX_LENGTH = 16; + private static final int BROADCAST_CODE_MIN_LENGTH = 4; MediaOutputBroadcastDialog(Context context, boolean aboveStatusbar, BroadcastSender broadcastSender, MediaOutputController mediaOutputController) { @@ -219,6 +261,9 @@ public class MediaOutputBroadcastDialog extends MediaOutputBaseDialog { R.layout.media_output_broadcast_update_dialog, null); final EditText editText = layout.requireViewById(R.id.broadcast_edit_text); editText.setText(editString); + if (isBroadcastCode) { + editText.addTextChangedListener(mTextWatcher); + } mBroadcastErrorMessage = layout.requireViewById(R.id.broadcast_error_message); mAlertDialog = new Builder(mContext) .setTitle(isBroadcastCode ? R.string.media_output_broadcast_code