mirror of
https://github.com/Dark98/SliceBeam.git
synced 2026-07-03 08:39:04 +00:00
177 lines
6.7 KiB
Java
177 lines
6.7 KiB
Java
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;
|
|
}
|
|
}
|