Merge "Limit bluetooth broadcast password to single byte characters" into main am: abe501085b

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2728234

Change-Id: Idca058c3f3d2de4324d51c9bfd0225cd44c2dbf5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-09-04 13:15:08 +00:00
committed by Automerger Merge Worker

View File

@@ -30,10 +30,16 @@ import android.bluetooth.le.ScanFilter;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.Spanned;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
@@ -467,9 +473,64 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
.create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
addTextWatcher(alertDialog, editText);
alertDialog.show();
updateBtnState(alertDialog, false);
}
private void addTextWatcher(AlertDialog alertDialog, EditText editText) {
if (alertDialog == null || editText == null) {
return;
}
final InputFilter[] filter = new InputFilter[] {mInputFilter};
editText.setFilters(filter);
editText.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
TextWatcher bCodeTextWatcher = 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) {
boolean breakBroadcastCodeRuleTextLengthLessThanMin =
s.length() > 0 && s.toString().getBytes().length < 4;
boolean breakBroadcastCodeRuleTextLengthMoreThanMax =
s.toString().getBytes().length > 16;
boolean breakRule = breakBroadcastCodeRuleTextLengthLessThanMin
|| breakBroadcastCodeRuleTextLengthMoreThanMax;
updateBtnState(alertDialog, !breakRule);
}
};
editText.addTextChangedListener(bCodeTextWatcher);
}
private void updateBtnState(AlertDialog alertDialog, boolean isEnable) {
Button positiveBtn = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
if (positiveBtn != null) {
positiveBtn.setEnabled(isEnable ? true : false);
}
}
private InputFilter mInputFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
byte[] bytes = source.toString().getBytes(StandardCharsets.UTF_8);
if (bytes.length == source.length()) {
return source;
} else {
return "";
}
}
};
private void handleSearchStarted() {
cacheRemoveAllPrefs(mBroadcastSourceListCategory);
addConnectedSourcePreference();