Public source code release

This commit is contained in:
YTKAB0BP
2024-11-01 08:28:55 +03:00
parent 20b730b1c8
commit 0b2ba24c7f
6691 changed files with 2325292 additions and 1 deletions
@@ -0,0 +1,176 @@
package ru.ytkab0bp.slicebeam.components;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.ColorStateList;
import android.database.DataSetObserver;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatCheckedTextView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import ru.ytkab0bp.slicebeam.R;
import ru.ytkab0bp.slicebeam.theme.ThemesRepo;
import ru.ytkab0bp.slicebeam.utils.ViewUtils;
public class BeamAlertDialogBuilder extends MaterialAlertDialogBuilder {
public BeamAlertDialogBuilder(@NonNull Context context) {
super(context);
}
public BeamAlertDialogBuilder(@NonNull Context context, int overrideThemeResId) {
super(context, overrideThemeResId);
}
@NonNull
@Override
public AlertDialog create() {
AlertDialog dialog = super.create();
dialog.getWindow().setBackgroundDrawable(new GradientDrawable() {{
setCornerRadius(ViewUtils.dp(32));
setColor(ThemesRepo.getColor(R.attr.dialogBackground));
}});
return dialog;
}
@Override
public AlertDialog show() {
AlertDialog dialog = super.show();
View v = dialog.getWindow().getDecorView();
TextView v2;
int id = getContext().getResources().getIdentifier("alertTitle", "id", getContext().getPackageName());
if (id > 0) {
v2 = v.findViewById(id);
if (v2 != null) {
v2.setTextColor(ThemesRepo.getColor(android.R.attr.textColorPrimary));
}
}
v2 = v.findViewById(android.R.id.message);
if (v2 != null) {
v2.setTextColor(ThemesRepo.getColor(android.R.attr.textColorSecondary));
}
v2 = v.findViewById(android.R.id.button1);
if (v2 != null) {
v2.setTextColor(ThemesRepo.getColor(android.R.attr.colorAccent));
}
v2 = v.findViewById(android.R.id.button2);
if (v2 != null) {
v2.setTextColor(ThemesRepo.getColor(android.R.attr.colorAccent));
}
v2 = v.findViewById(android.R.id.button3);
if (v2 != null) {
v2.setTextColor(ThemesRepo.getColor(android.R.attr.colorAccent));
}
id = getContext().getResources().getIdentifier("select_dialog_listview", "id", getContext().getPackageName());
if (id > 0) {
ListView lv = v.findViewById(id);
if (lv != null) {
ListAdapter wrapped = lv.getAdapter();
SparseBooleanArray checked = lv.getCheckedItemPositions() != null ? lv.getCheckedItemPositions().clone() : null;
lv.setAdapter(new ListAdapter() {
@Override
public boolean areAllItemsEnabled() {
return wrapped.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int position) {
return wrapped.isEnabled(position);
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
wrapped.registerDataSetObserver(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
wrapped.unregisterDataSetObserver(observer);
}
@Override
public int getCount() {
return wrapped.getCount();
}
@Override
public Object getItem(int position) {
return wrapped.getItem(position);
}
@Override
public long getItemId(int position) {
return wrapped.getItemId(position);
}
@Override
public boolean hasStableIds() {
return wrapped.hasStableIds();
}
@SuppressLint("RestrictedApi")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = wrapped.getView(position, convertView, parent);
TextView text = v.findViewById(android.R.id.text1);
if (text != null) {
text.setTextColor(ThemesRepo.getColor(android.R.attr.textColorPrimary));
if (text instanceof AppCompatCheckedTextView) {
((AppCompatCheckedTextView) text).setSupportCompoundDrawablesTintList(new ColorStateList(new int[][]{
{android.R.attr.state_enabled, android.R.attr.state_checked},
{android.R.attr.state_enabled, -android.R.attr.state_checked}
}, new int[]{
ThemesRepo.getColor(android.R.attr.colorAccent),
ThemesRepo.getColor(R.attr.dividerContrastColor)
}));
}
}
return v;
}
@Override
public int getItemViewType(int position) {
return wrapped.getItemViewType(position);
}
@Override
public int getViewTypeCount() {
return wrapped.getViewTypeCount();
}
@Override
public boolean isEmpty() {
return wrapped.isEmpty();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Nullable
@Override
public CharSequence[] getAutofillOptions() {
return wrapped.getAutofillOptions();
}
});
if (checked != null) {
for (int i = 0; i < checked.size(); i++) {
lv.setItemChecked(checked.keyAt(i), checked.valueAt(i));
}
}
}
}
return dialog;
}
}