Adjusting the dialog style & better RTL support (#1838)

* Adjusting the dialog style

* Fix alignment

* Separate appPackageName and appVersionName from appDescription
This commit is contained in:
Howard Wu 2022-04-13 20:12:40 +08:00 committed by GitHub
parent 1e2973beb3
commit abfac93510
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 188 additions and 115 deletions

View File

@ -50,7 +50,6 @@ import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -257,7 +256,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
int itemId = item.getItemId();
if (itemId == R.id.use_recommended) {
if (!checkedList.isEmpty()) {
new BlurBehindDialogBuilder(activity)
new BlurBehindDialogBuilder(activity, R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
.setMessage(R.string.use_recommended_message)
.setPositiveButton(android.R.string.ok, (dialog, which) -> checkRecommended())
.setNegativeButton(android.R.string.cancel, null)
@ -328,7 +327,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
if (info.packageName.equals("android")) {
ConfigManager.reboot(false);
} else {
new BlurBehindDialogBuilder(activity)
new BlurBehindDialogBuilder(activity, R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
.setTitle(R.string.force_stop_dlg_title)
.setMessage(R.string.force_stop_dlg_text)
.setPositiveButton(android.R.string.ok, (dialog, which) -> ConfigManager.forceStopPackage(info.packageName, info.uid / 100000))
@ -416,12 +415,15 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
holder.appIcon.setImageDrawable(pm.getDefaultActivityIcon());
}
});
SpannableStringBuilder sb = new SpannableStringBuilder(android ? "" : activity.getString(R.string.app_description, appInfo.packageName, appInfo.packageInfo.versionName));
if (android) holder.appDescription.setVisibility(View.GONE);
else {
holder.appDescription.setVisibility(View.VISIBLE);
holder.appDescription.setText(sb);
sb = new SpannableStringBuilder();
SpannableStringBuilder sb = new SpannableStringBuilder();
if (android) {
holder.appPackageName.setVisibility(View.GONE);
holder.appVersionName.setVisibility(View.GONE);
} else {
holder.appPackageName.setVisibility(View.VISIBLE);
holder.appVersionName.setVisibility(View.VISIBLE);
holder.appPackageName.setText(appInfo.packageName);
holder.appVersionName.setText(activity.getString(R.string.app_version, appInfo.packageInfo.versionName));
}
if (!recommendedList.isEmpty() && recommendedList.contains(appInfo.application)) {
String recommended = activity.getString(R.string.requested_by_module);
@ -601,7 +603,8 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
ConstraintLayout root;
ImageView appIcon;
TextView appName;
TextView appDescription;
TextView appPackageName;
TextView appVersionName;
TextView hint;
MaterialCheckBox checkbox;
@ -610,7 +613,8 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
root = binding.itemRoot;
appIcon = binding.appIcon;
appName = binding.appName;
appDescription = binding.description;
appPackageName = binding.appPackageName;
appVersionName = binding.appVersionName;
checkbox = binding.checkbox;
hint = binding.hint;
checkbox.setVisibility(View.VISIBLE);
@ -665,7 +669,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
public void onBackPressed() {
fragment.searchView.clearFocus();
if (isLoaded && enabled && checkedList.isEmpty()) {
var builder = new BlurBehindDialogBuilder(activity);
var builder = new BlurBehindDialogBuilder(activity, R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons);
builder.setMessage(!recommendedList.isEmpty() ? R.string.no_scope_selected_has_recommended : R.string.no_scope_selected);
if (!recommendedList.isEmpty()) {
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> checkRecommended());
@ -674,7 +678,7 @@ public class ScopeAdapter extends EmptyStateRecyclerView.EmptyStateAdapter<Scope
}
builder.setNegativeButton(!recommendedList.isEmpty() ? android.R.string.cancel : android.R.string.ok, (dialog, which) -> {
moduleUtil.setModuleEnabled(module.packageName, false);
Toast.makeText(activity, activity.getString(R.string.module_disabled_no_selection, module.getAppName()), Toast.LENGTH_LONG).show();
fragment.showHint(activity.getString(R.string.module_disabled_no_selection, module.getAppName()), true);
fragment.getNavController().navigateUp();
});
builder.show();

View File

@ -44,7 +44,11 @@ public class BlurBehindDialogBuilder extends MaterialAlertDialogBuilder {
private static final boolean supportBlur = getSystemProperty("ro.surface_flinger.supports_background_blur", false) && !getSystemProperty("persist.sys.sf.disable_blurs", false);
public BlurBehindDialogBuilder(@NonNull Context context) {
super(context, com.google.android.material.R.style.ThemeOverlay_Material3_MaterialAlertDialog_Centered);
super(context);
}
public BlurBehindDialogBuilder(@NonNull Context context, int overrideThemeResId) {
super(context, overrideThemeResId);
}
@NonNull
@ -57,16 +61,15 @@ public class BlurBehindDialogBuilder extends MaterialAlertDialogBuilder {
private void setBackgroundBlurRadius(AlertDialog dialog) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
ValueAnimator animator = ValueAnimator.ofInt(1, 150);
animator.setInterpolator(new DecelerateInterpolator());
animator.setDuration(150);
Window window = dialog.getWindow();
View view = window.getDecorView();
if (Build.VERSION.SDK_INT >= 31) {
window.addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
window.getAttributes().setBlurBehindRadius(50);
window.getAttributes().setBlurBehindRadius(53); //android.R.styleable.Window_windowBlurBehindRadius
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
} else if (supportBlur) {
View view = window.getDecorView();
ValueAnimator animator = ValueAnimator.ofInt(1, 153);
animator.setInterpolator(new DecelerateInterpolator());
try {
Object viewRootImpl = view.getClass().getMethod("getViewRootImpl").invoke(view);
if (viewRootImpl == null) {
@ -87,19 +90,18 @@ public class BlurBehindDialogBuilder extends MaterialAlertDialogBuilder {
} catch (Throwable t) {
Log.e(App.TAG, "Blur behind dialog builder", t);
}
view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
}
@Override
public void onViewDetachedFromWindow(View v) {
animator.cancel();
}
});
animator.start();
}
view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
}
@Override
public void onViewDetachedFromWindow(View v) {
animator.cancel();
}
});
animator.start();
}
}

View File

@ -36,7 +36,7 @@ public class FlashDialogBuilder extends BlurBehindDialogBuilder {
private final BorderNestedScrollView rootView;
public FlashDialogBuilder(@NonNull Context context, DialogInterface.OnClickListener cancel) {
super(context);
super(context, R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons);
var pref = App.getPreferences();
var notes = pref.getString("release_notes", "");
this.zipPath = pref.getString("zip_file", null);

View File

@ -39,7 +39,7 @@ public class ShortcutDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
return new BlurBehindDialogBuilder(requireContext())
return new BlurBehindDialogBuilder(requireContext(), R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
.setTitle(R.string.parasitic_recommend)
.setMessage(R.string.parasitic_recommend_summary)
.setNegativeButton(R.string.never_show, (dialog, which) ->

View File

@ -63,6 +63,7 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
FragmentCompileDialogBinding binding = FragmentCompileDialogBinding.inflate(LayoutInflater.from(requireActivity()), null, false);
final PackageManager pm = requireContext().getPackageManager();
var builder = new BlurBehindDialogBuilder(requireActivity())
.setIcon(appInfo.loadIcon(pm))
.setTitle(appInfo.loadLabel(pm))
.setView(binding.getRoot());

View File

@ -264,7 +264,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
}
void installModuleToUser(ModuleUtil.InstalledModule module, UserInfo user) {
new BlurBehindDialogBuilder(requireActivity())
new BlurBehindDialogBuilder(requireActivity(), R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
.setTitle(getString(R.string.install_to_user, user.name))
.setMessage(getString(R.string.install_to_user_message, module.getAppName(), user.name))
.setPositiveButton(android.R.string.ok, (dialog, which) ->
@ -308,7 +308,8 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
ConfigManager.startActivityAsUserWithFeature(new Intent(ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", selectedModule.packageName, null)), selectedModule.userId);
return true;
} else if (itemId == R.id.menu_uninstall) {
new BlurBehindDialogBuilder(requireActivity())
new BlurBehindDialogBuilder(requireActivity(), R.style.ThemeOverlay_MaterialAlertDialog_FullWidthButtons)
.setIcon(selectedModule.app.loadIcon(pm))
.setTitle(selectedModule.getAppName())
.setMessage(R.string.module_uninstall_message)
.setPositiveButton(android.R.string.ok, (dialog, which) ->
@ -541,7 +542,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
sb.append(getString(R.string.module_empty_description));
}
holder.appDescription.setText(sb);
holder.appDescription.setVisibility(View.VISIBLE);
sb = new SpannableStringBuilder();
int installXposedVersion = ConfigManager.getXposedApiVersion();

View File

@ -65,7 +65,7 @@ public class RecyclerViewDialogFragment extends AppCompatDialogFragment {
pickAdaptor.refresh();
var title = DialogTitleBinding.inflate(getLayoutInflater()).getRoot();
title.setText(getString(R.string.install_to_user, user.name));
var dialog = new BlurBehindDialogBuilder(requireActivity())
var dialog = new BlurBehindDialogBuilder(requireActivity(), R.style.ThemeOverlay_MaterialAlertDialog_FullWidthButtons)
.setCustomTitle(title)
.setView(binding.getRoot())
.setNegativeButton(android.R.string.cancel, null)

View File

@ -282,12 +282,12 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene
public void onBindViewHolder(@NonNull RepoAdapter.ViewHolder holder, int position) {
OnlineModule module = showList.get(position);
holder.appName.setText(module.getDescription());
holder.appPackageName.setText(module.getName());
SpannableStringBuilder sb = new SpannableStringBuilder(module.getName());
SpannableStringBuilder sb = new SpannableStringBuilder();
String summary = module.getSummary();
if (summary != null) {
sb.append("\n");
sb.append(summary);
}
holder.appDescription.setVisibility(View.VISIBLE);
@ -389,6 +389,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene
class ViewHolder extends RecyclerView.ViewHolder {
ConstraintLayout root;
TextView appName;
TextView appPackageName;
TextView appDescription;
TextView hint;
@ -396,6 +397,7 @@ public class RepoFragment extends BaseFragment implements RepoLoader.RepoListene
super(binding.getRoot());
root = binding.itemRoot;
appName = binding.appName;
appPackageName=binding.appPackageName;
appDescription = binding.description;
hint = binding.hint;
}

View File

@ -337,8 +337,11 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.RepoLis
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
var args = getArguments();
if (args == null) throw new IllegalArgumentException();
return new BlurBehindDialogBuilder(requireActivity())
.setItems(args.getCharSequenceArray("names"), (dialog, which) -> NavUtil.startURL(requireActivity(), args.getStringArrayList("urls").get(which)))
return new BlurBehindDialogBuilder(requireActivity(), R.style.ThemeOverlay_MaterialAlertDialog_Centered_FullWidthButtons)
.setTitle(R.string.module_release_view_assets)
.setPositiveButton(android.R.string.cancel, null)
.setItems(args.getCharSequenceArray("names"),
(dialog, which) -> NavUtil.startURL(requireActivity(), args.getStringArrayList("urls").get(which)))
.create();
}

View File

@ -34,8 +34,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/item_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="RtlSymmetry">
android:layout_height="wrap_content">
<ImageView
android:id="@+id/app_icon"
@ -49,7 +48,7 @@
<com.google.android.material.textview.MaterialTextView
android:id="@+id/app_name"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:ellipsize="marquee"
@ -57,39 +56,87 @@
android:textAppearance="?android:attr/textAppearanceListItem"
android:textIsSelectable="false"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/app_Package_Name"
app:layout_constraintStart_toEndOf="@id/app_icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="@tools:sample/first_names" />
app:layout_constraintWidth_max="wrap"
tools:text="LSPosed Manager" />
<org.lsposed.manager.ui.widget.ExpandableTextView
android:id="@+id/description"
android:layout_width="0dp"
<com.google.android.material.textview.MaterialTextView
android:id="@+id/app_Package_Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="5"
android:ellipsize="marquee"
android:maxLines="1"
android:scrollbars="none"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
app:layout_constraintBottom_toBottomOf="@id/hint"
android:visibility="gone"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/app_Version_Name"
app:layout_constraintEnd_toStartOf="@id/checkbox"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@id/app_name"
app:layout_constraintTop_toBottomOf="@id/app_name"
tools:text="@tools:sample/lorem" />
app:layout_constraintWidth_max="wrap"
tools:text="com.lsposed.manager" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/app_Version_Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:maxLines="1"
android:scrollbars="none"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:visibility="gone"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constraintEnd_toStartOf="@id/checkbox"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@id/app_Package_Name"
app:layout_constraintTop_toBottomOf="@id/app_Package_Name"
app:layout_constraintWidth_max="wrap"
tools:text="Version :1.8.1" />
<org.lsposed.manager.ui.widget.ExpandableTextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="5"
android:scrollbars="none"
android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:visibility="gone"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="@id/hint"
app:layout_constraintEnd_toStartOf="@id/checkbox"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@id/app_Version_Name"
app:layout_constraintTop_toBottomOf="@id/app_Version_Name"
app:layout_constraintWidth_max="wrap"
tools:ignore="RtlCompat"
tools:text="A very very very very very very very very very very very very long string" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/hint"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorPrimary"
android:visibility="gone"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/checkbox"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@id/description"
app:layout_constraintTop_toBottomOf="@id/description"
app:layout_constraintWidth_max="wrap"
tools:ignore="RtlCompat"
tools:text="@tools:sample/lorem" />
<com.google.android.material.textview.MaterialTextView
@ -105,11 +152,12 @@
android:textColor="?android:attr/textColorSecondary"
android:textIsSelectable="false"
android:visibility="gone"
app:layout_constrainedWidth="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@id/app_name"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlHardcoded"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/last_names" />
<com.google.android.material.checkbox.MaterialCheckBox

View File

@ -35,48 +35,75 @@
android:id="@+id/item_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
tools:ignore="RtlSymmetry">
android:layout_gravity="center">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/app_name"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:maxLines="1"
android:scrollbars="none"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textSize="16sp"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constraintBottom_toTopOf="@id/app_Package_Name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/lorem" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/app_Package_Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:maxLines="1"
android:scrollbars="none"
android:textAppearance="?android:attr/textAppearanceSmall"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/app_name"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/lorem" />
<org.lsposed.manager.ui.widget.ExpandableTextView
android:id="@+id/description"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:maxLines="6"
android:scrollbars="none"
android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceSmall"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/hint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/app_name"
app:layout_constraintTop_toBottomOf="@id/app_name"
tools:text="@tools:sample/lorem" />
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/app_Package_Name"
app:layout_constraintWidth_max="wrap"
tools:ignore="RtlCompat"
tools:text="A very very very very very very very very very very very very \n long string" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/hint"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorPrimary"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/description"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/lorem" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -37,19 +37,20 @@
android:id="@+id/item_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
tools:ignore="RtlSymmetry">
android:layout_gravity="center">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textSize="16sp"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/lorem" />
<org.lsposed.manager.ui.widget.ScrollWebView

View File

@ -33,33 +33,35 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/item_root"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="RtlSymmetry">
android:layout_gravity="center">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/description"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/lorem" />
<org.lsposed.manager.ui.widget.LinkifyTextView
android:id="@+id/description"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textAppearance="?android:attr/textAppearanceSmall"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/title"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintWidth_max="wrap"
tools:text="@tools:sample/lorem" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Modules</string>
<string name="menu_show_denylist">Ontkenlys</string>
<string name="failed_to_save_scope_list">Kon nie omvanglys stoor nie</string>
<string name="app_description">%1$s\nWeergawe %2$s</string>
<string name="use_recommended">Aanbeveel</string>
<string name="no_scope_selected_has_recommended">Jy het geen toepassing gekies nie. Kies aanbevole programme?</string>
<string name="use_recommended_message">Kies aanbevole programme?</string>

View File

@ -136,7 +136,6 @@ Ali Samir</string>
<string name="menu_show_modules">وحدات</string>
<string name="menu_show_denylist">قائمة الرفض</string>
<string name="failed_to_save_scope_list">فشل في حفظ قائمة النطاق</string>
<string name="app_description">%1$s\nإصدار %2$s</string>
<string name="use_recommended">مُوصى به</string>
<string name="no_scope_selected_has_recommended">أنت لم تحدد أي تطبيق. تحديد التطبيقات الموصى بها؟</string>
<string name="use_recommended_message">تحديد التطبيقات الموصى بها؟</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Mòduls</string>
<string name="menu_show_denylist">Llista de denegació</string>
<string name="failed_to_save_scope_list">No s\'ha pogut desar la llista d\'àmbits</string>
<string name="app_description">%1$s\nVersió %2$s</string>
<string name="use_recommended">Recomanat</string>
<string name="no_scope_selected_has_recommended">No heu seleccionat cap aplicació. Seleccioneu aplicacions recomanades?</string>
<string name="use_recommended_message">Vols seleccionar aplicacions recomanades?</string>

View File

@ -131,7 +131,6 @@
<string name="menu_show_modules">Moduly</string>
<string name="menu_show_denylist">Seznam zakázaných</string>
<string name="failed_to_save_scope_list">Nepodařilo se uložit seznam</string>
<string name="app_description">%1$s\nVerze %2$s</string>
<string name="use_recommended">Zvolit doporučené</string>
<string name="no_scope_selected_has_recommended">Nevybrali jste žádnou aplikaci. Vybrat doporučené aplikace?</string>
<string name="use_recommended_message">Vybrat doporučené aplikace?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Moduler</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Kunne ikke gemme scope-liste</string>
<string name="app_description">%1$s\nVersion %2$s</string>
<string name="use_recommended">Anbefalet</string>
<string name="no_scope_selected_has_recommended">Du valgte ikke nogen app. Vælg anbefalede apps?</string>
<string name="use_recommended_message">Vælg anbefalede apps?</string>

View File

@ -128,7 +128,6 @@ JJ108</string>
<string name="menu_show_modules">Module</string>
<string name="menu_show_denylist">Verweigerungsliste</string>
<string name="failed_to_save_scope_list">Das Speichern der Scope-Liste ist fehlgeschlagen</string>
<string name="app_description">%1$s\nVersion %2$s</string>
<string name="use_recommended">Empfohlen</string>
<string name="no_scope_selected_has_recommended">Sie haben keine App ausgewählt. Empfohlene Apps auswählen?</string>
<string name="use_recommended_message">Empfohlene Apps auswählen?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Πρόσθετα</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Αποτυχία αποθήκευσης της λίστας πεδίου</string>
<string name="app_description">%1$s\nΈκδοση %2$s</string>
<string name="use_recommended">Προτεινόμενο</string>
<string name="no_scope_selected_has_recommended">Δεν έχετε επιλέξει καμία εφαρμογή. Επιλέξτε τις προτεινόμενες εφαρμογές?</string>
<string name="use_recommended_message">Επιλέξτε προτεινόμενες εφαρμογές?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Módulos</string>
<string name="menu_show_denylist">Lista de denegación</string>
<string name="failed_to_save_scope_list">Fallo al guardar la lista de scopes</string>
<string name="app_description">%1$s\nVersión %2$s</string>
<string name="use_recommended">Recomendado</string>
<string name="no_scope_selected_has_recommended">No seleccionaste ninguna aplicación. ¿Quieres seleccionar las aplicaciones recomendadas?</string>
<string name="use_recommended_message">¿Quieres seleccionar las aplicaciones recomendadas?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">ماژول ها</string>
<string name="menu_show_denylist">انکار کننده</string>
<string name="failed_to_save_scope_list">ناموفق در ذخیره لیست محدوده</string>
<string name="app_description">%1$s\n نسخه %2$s</string>
<string name="use_recommended">نیازمنده</string>
<string name="no_scope_selected_has_recommended">شما هیچ برنامه ای را انتخاب نکردید. انتخاب برنامه های نیازمند؟</string>
<string name="use_recommended_message">انتخاب برنامه های نیازمند؟</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Moduulit</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Valmistelulistan tallentaminen epäonnistui</string>
<string name="app_description">%1$s\nVersio %2$s</string>
<string name="use_recommended">Suositeltu</string>
<string name="no_scope_selected_has_recommended">Et valinnut yhtään sovellusta. Valitse suositellut sovellukset?</string>
<string name="use_recommended_message">Valitse suositellut sovellukset?</string>

View File

@ -128,7 +128,6 @@ https://github.com/tclement0922</string>
<string name="menu_show_modules">Modules</string>
<string name="menu_show_denylist">Liste de refus</string>
<string name="failed_to_save_scope_list">Échec de l\'enregistrement de la liste des périmètres d\'applications</string>
<string name="app_description">%1$s\nVersion %2$s</string>
<string name="use_recommended">Recommandé</string>
<string name="no_scope_selected_has_recommended">Vous n\'avez sélectionné aucune application. Sélectionner les applications recommandées?</string>
<string name="use_recommended_message">Sélectionner les applications recommandées?</string>

View File

@ -128,7 +128,6 @@
<string name="menu_show_modules">Modulok</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Nem sikerült elmenteni a hatókör listát</string>
<string name="app_description">%1$s\nVerzió %2$s</string>
<string name="use_recommended">Ajánlott</string>
<string name="no_scope_selected_has_recommended">Nem választott ki egyetlen alkalmazást sem. Válassza ki az ajánlott alkalmazásokat?</string>
<string name="use_recommended_message">Válassza ki az ajánlott alkalmazásokat?</string>

View File

@ -125,7 +125,6 @@
<string name="menu_show_modules">Modul</string>
<string name="menu_show_denylist">Penyangkalan</string>
<string name="failed_to_save_scope_list">Gagal menyimpan ke daftar cakupan</string>
<string name="app_description">%1$s\nVersi %2$s</string>
<string name="use_recommended">Direkomendasikan</string>
<string name="no_scope_selected_has_recommended">Anda tidak memilih aplikasi apapun. Pilih aplikasi yang disarankan?</string>
<string name="use_recommended_message">Pilih aplikasi yang disarankan?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Moduli</string>
<string name="menu_show_denylist">Lista di blocco</string>
<string name="failed_to_save_scope_list">Impossibile salvare l\'elenco delle attivazioni</string>
<string name="app_description">%1$s\nVersione %2$s</string>
<string name="use_recommended">Seleziona consigliate</string>
<string name="no_scope_selected_has_recommended">Non hai selezionato nessuna app. Selezionare le app consigliate?</string>
<string name="use_recommended_message">Selezionare le app consigliate?</string>

View File

@ -132,7 +132,6 @@
<string name="menu_show_modules">מודולים</string>
<string name="menu_show_denylist">רשימת דחיה</string>
<string name="failed_to_save_scope_list">נכשל לשמור רשימת תחומים</string>
<string name="app_description">%1$s\nגרסה %2$s</string>
<string name="use_recommended">מומלץ</string>
<string name="no_scope_selected_has_recommended">אתה לא בחרת שום אפליקציה. לבחור אפליקציות מומלצות?</string>
<string name="use_recommended_message">בחר אפליקציות מומלצות?</string>

View File

@ -125,7 +125,6 @@
<string name="menu_show_modules">モジュール</string>
<string name="menu_show_denylist">拒否リスト</string>
<string name="failed_to_save_scope_list">スコープリストの保存に失敗</string>
<string name="app_description">%1$s\nバージョン %2$s</string>
<string name="use_recommended">おすすめ</string>
<string name="no_scope_selected_has_recommended">アプリが選択されていません。おすすめのアプリを選択しますか?</string>
<string name="use_recommended_message">おすすめのアプリを選択しますか?</string>

View File

@ -125,7 +125,6 @@
<string name="menu_show_modules">모듈</string>
<string name="menu_show_denylist">거부자</string>
<string name="failed_to_save_scope_list">범위 목록 저장에 실패했습니다.</string>
<string name="app_description">%1$s\n버전 %2$s</string>
<string name="use_recommended">권장된</string>
<string name="no_scope_selected_has_recommended">앱을 선택하지 않았습니다. 권장 앱을 선택하시겠습니까?</string>
<string name="use_recommended_message">권장 앱을 선택하시겠습니까?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Modules</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Hilbijartina navnîşa çarçovê bi ser neket</string>
<string name="app_description">%1$s\nGuhertoya %2$s</string>
<string name="use_recommended">Pêşniyar kirin</string>
<string name="no_scope_selected_has_recommended">Te tu sepanê hilnebijart. Serlêdanên pêşniyarkirî hilbijêrin?</string>
<string name="use_recommended_message">Serlêdanên pêşniyarkirî hilbijêrin?</string>

View File

@ -131,7 +131,6 @@
<string name="menu_show_modules">Moduliai</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Nepavyko išsaugoti srities sąrašo</string>
<string name="app_description">%1$s\nVersija %2$s</string>
<string name="use_recommended">Rekomenduojama</string>
<string name="no_scope_selected_has_recommended">Nepasirinkote jokios programos. Pasirinkti rekomenduojamas programas?</string>
<string name="use_recommended_message">Pasirinkite rekomenduojamas programas?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Modules</string>
<string name="menu_show_denylist">Weigerlijst</string>
<string name="failed_to_save_scope_list">Scopelijst opslaan is mislukt</string>
<string name="app_description">%1$s\nVersie %2$s</string>
<string name="use_recommended">Aanbevolen</string>
<string name="no_scope_selected_has_recommended">U heeft geen app geselecteerd. Aanbevolen apps selecteren?</string>
<string name="use_recommended_message">Aanbevolen apps selecteren?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Moduler</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Kan ikke lagre områdeliste</string>
<string name="app_description">%1$s\nVersjon %2$s</string>
<string name="use_recommended">Anbefalt</string>
<string name="no_scope_selected_has_recommended">Du valgte ingen applikasjoner. Velg anbefalte apper?</string>
<string name="use_recommended_message">Velg anbefalte apper?</string>

View File

@ -131,7 +131,6 @@
<string name="menu_show_modules">Moduły</string>
<string name="menu_show_denylist">Lista zabronionych</string>
<string name="failed_to_save_scope_list">Nie udało się zapisać listy zakresu</string>
<string name="app_description">%1$s\nWersja %2$s</string>
<string name="use_recommended">Rekomendowane</string>
<string name="no_scope_selected_has_recommended">Nie wybrałeś żadnej aplikacji. Wybrać rekomendowane aplikacje?</string>
<string name="use_recommended_message">Wybrać rekomendowane aplikacje?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Módulos</string>
<string name="menu_show_denylist">Lista de Negação</string>
<string name="failed_to_save_scope_list">Falha ao salvar lista de escopos</string>
<string name="app_description">%1$s\nVersão %2$s</string>
<string name="use_recommended">Recomendações</string>
<string name="no_scope_selected_has_recommended">Você não selecionou nenhum aplicativo. Deseja selecionar os aplicativos recomendados?</string>
<string name="use_recommended_message">Selecionar os aplicativos recomendados?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Módulos</string>
<string name="menu_show_denylist">Lista de Negação</string>
<string name="failed_to_save_scope_list">Falha ao salvar lista de escopos</string>
<string name="app_description">%1$s\nVersão %2$s</string>
<string name="use_recommended">Recomendações</string>
<string name="no_scope_selected_has_recommended">Você não selecionou nenhum aplicativo. Deseja selecionar os aplicativos recomendados?</string>
<string name="use_recommended_message">Selecionar os aplicativos recomendados?</string>

View File

@ -129,7 +129,6 @@
<string name="menu_show_modules">Module</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Salvare eșuată listă de scop</string>
<string name="app_description">%1$s\nVersiunea %2$s</string>
<string name="use_recommended">Recomandate</string>
<string name="no_scope_selected_has_recommended">Nu ați selectat nicio aplicație. Selectați aplicațiile recomandate?</string>
<string name="use_recommended_message">Selectaţi aplicaţiile recomandate?</string>

View File

@ -131,7 +131,6 @@
<string name="menu_show_modules">Мои модули</string>
<string name="menu_show_denylist">DenyList</string>
<string name="failed_to_save_scope_list">Не удалось сохранить список выбранных приложений для модуля</string>
<string name="app_description">%1$s\nВерсия: %2$s</string>
<string name="use_recommended">Рекомендуемые</string>
<string name="no_scope_selected_has_recommended">Вы не выбрали ни одного приложения. Выбрать рекомендуемые приложения?</string>
<string name="use_recommended_message">Выбрать рекомендуемые приложения?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Moduler</string>
<string name="menu_show_denylist">Neka</string>
<string name="failed_to_save_scope_list">Det gick inte att spara omfattningslistan</string>
<string name="app_description">%1$s\nVersion %2$s</string>
<string name="use_recommended">Rekommenderad</string>
<string name="no_scope_selected_has_recommended">Du valde inte någon app. Välj rekommenderade appar?</string>
<string name="use_recommended_message">Välj rekommenderade appar?</string>

View File

@ -125,7 +125,6 @@
<string name="menu_show_modules">โมดูล</string>
<string name="menu_show_denylist">ปฏิเสธ</string>
<string name="failed_to_save_scope_list">ไม่สามารถบันทึกรายการขอบเขต</string>
<string name="app_description">%1$s\nเวอร์ชัน %2$s</string>
<string name="use_recommended">ที่แนะนำ</string>
<string name="no_scope_selected_has_recommended">คุณไม่ได้เลือกแอพใด ๆ เลือกแอพที่แนะนำ?</string>
<string name="use_recommended_message">เลือกแอพที่แนะนำ?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">Modüller</string>
<string name="menu_show_denylist">Reddetme Listesi</string>
<string name="failed_to_save_scope_list">Kapsam listesi kaydedilemedi</string>
<string name="app_description">%1$s\nSürüm %2$s</string>
<string name="use_recommended">Önerilen</string>
<string name="no_scope_selected_has_recommended">Herhangi bir uygulama seçmediniz. Önerilen uygulamalar seçilsin mi?</string>
<string name="use_recommended_message">Önerilen uygulamalar seçilsin mi?</string>

View File

@ -131,7 +131,6 @@
<string name="menu_show_modules">Модулі</string>
<string name="menu_show_denylist">Показати чорний список</string>
<string name="failed_to_save_scope_list">Не вдалося зберегти список областей</string>
<string name="app_description">%1$s\nВерсія %2$s</string>
<string name="use_recommended">Рекомендовано</string>
<string name="no_scope_selected_has_recommended">Ви не вибрали жодної програми. Вибрати рекомендовані програми?</string>
<string name="use_recommended_message">Вибрати рекомендовані програми?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">ماڈیولز</string>
<string name="menu_show_denylist">انکار کرنے والا</string>
<string name="failed_to_save_scope_list">دائرہ کار کی فہرست کو محفوظ کرنے میں ناکام</string>
<string name="app_description">%1$s\nورژن %2$s</string>
<string name="use_recommended">سفارش کریں۔</string>
<string name="no_scope_selected_has_recommended">آپ نے کوئی ایپ منتخب نہیں کی۔ تجویز کردہ ایپس کو منتخب کریں؟</string>
<string name="use_recommended_message">تجویز کردہ ایپس کو منتخب کریں?</string>

View File

@ -125,7 +125,6 @@
<string name="menu_show_modules">Mô-đun</string>
<string name="menu_show_denylist">Danh sách từ chối</string>
<string name="failed_to_save_scope_list">Lưu danh sách phạm vi thất bại</string>
<string name="app_description">%1$s\nPhiên bản %2$s</string>
<string name="use_recommended">Được khuyến cáo</string>
<string name="no_scope_selected_has_recommended">Bạn đã không lựa chọn bất kỳ ứng dụng nào. Lựa chọn những ứng dụng được khuyến nghị?</string>
<string name="use_recommended_message">Lựa chọn những ứng dụng được khuyến cáo?</string>

View File

@ -125,7 +125,7 @@
<string name="menu_show_modules">模块</string>
<string name="menu_show_denylist">排除列表</string>
<string name="failed_to_save_scope_list">作用域列表保存失败</string>
<string name="app_description">%1$s\n版本%2$s</string>
<string name="app_version">版本:%1$s</string>
<string name="use_recommended">勾选推荐</string>
<string name="no_scope_selected_has_recommended">未选择任何应用。选择推荐的应用?</string>
<string name="use_recommended_message">选择推荐的应用?</string>

View File

@ -127,7 +127,6 @@
<string name="menu_show_modules">模組</string>
<string name="menu_show_denylist">拒絕名單</string>
<string name="failed_to_save_scope_list">作用域名單保存失敗</string>
<string name="app_description">%1$s\n版本%2$s</string>
<string name="use_recommended">推薦應用程式</string>
<string name="no_scope_selected_has_recommended">未選擇任何應用程式。選擇推薦的?</string>
<string name="use_recommended_message">選擇推薦的應用程式?</string>

View File

@ -125,7 +125,6 @@
<string name="menu_show_modules">模組</string>
<string name="menu_show_denylist">Magisk 排除列表</string>
<string name="failed_to_save_scope_list">作用域列表儲存失敗</string>
<string name="app_description">%1$s\n版本 %2$s</string>
<string name="use_recommended">推薦程式</string>
<string name="no_scope_selected_has_recommended">未選擇任何程式,選擇推薦的程式?</string>
<string name="use_recommended_message">選擇推薦的程式?</string>

View File

@ -131,7 +131,7 @@
<string name="menu_show_modules">Modules</string>
<string name="menu_show_denylist">Denylist</string>
<string name="failed_to_save_scope_list">Failed to save scope list</string>
<string name="app_description">%1$s\nVersion %2$s</string>
<string name="app_version">Version: %1$s</string>
<string name="use_recommended">Recommended</string>
<string name="no_scope_selected_has_recommended">You did not select any app. Select recommended apps?</string>
<string name="use_recommended_message">Select recommended apps?</string>

View File

@ -34,5 +34,23 @@
<style name="language_menu_style" parent="ThemeOverlay.Preference.SimpleMenuPreference.PopupMenu">
<item name="android:textAlignment">textStart</item>
</style>
<style name="Widget.Button.TextButton.Dialog.FullWidth" parent="Widget.Material3.Button.TextButton.Dialog.Flush">
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:maxWidth">@null</item>
</style>
<style name="ThemeOverlay.MaterialAlertDialog.Centered.FullWidthButtons" parent="ThemeOverlay.Material3.MaterialAlertDialog.Centered">
<!-- Mark spacer as gone when showing full width buttons -->
<item name="materialAlertDialogButtonSpacerVisibility">2</item>
<item name="buttonBarPositiveButtonStyle">@style/Widget.Button.TextButton.Dialog.FullWidth</item>
<item name="buttonBarNegativeButtonStyle">@style/Widget.Button.TextButton.Dialog.FullWidth</item>
<item name="buttonBarNeutralButtonStyle">@style/Widget.Button.TextButton.Dialog.FullWidth</item>
</style>
<style name="ThemeOverlay.MaterialAlertDialog.FullWidthButtons" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<!-- Mark spacer as gone when showing full width buttons -->
<item name="materialAlertDialogButtonSpacerVisibility">2</item>
<item name="buttonBarPositiveButtonStyle">@style/Widget.Button.TextButton.Dialog.FullWidth</item>
<item name="buttonBarNegativeButtonStyle">@style/Widget.Button.TextButton.Dialog.FullWidth</item>
<item name="buttonBarNeutralButtonStyle">@style/Widget.Button.TextButton.Dialog.FullWidth</item>
</style>
</resources>

View File

@ -35,7 +35,6 @@
<item name="android:colorAccent">?colorPrimary</item>
<!-- Preference switch -->
<item name="android:colorControlActivated">?colorPrimary</item>
<item name="android:textAlignment">viewStart</item>
</style>
<style name="Theme.Light" parent="Base.AppTheme.Light" />
@ -52,7 +51,6 @@
<item name="android:colorAccent">?colorPrimary</item>
<!-- Preference switch -->
<item name="android:colorControlActivated">?colorPrimary</item>
<item name="android:textAlignment">viewStart</item>
</style>
<style name="Theme" parent="Base.AppTheme" />