diff --git a/mastodon/src/main/AndroidManifest.xml b/mastodon/src/main/AndroidManifest.xml
index d7a6af99..5d24a64d 100644
--- a/mastodon/src/main/AndroidManifest.xml
+++ b/mastodon/src/main/AndroidManifest.xml
@@ -19,6 +19,10 @@
+
+
+
+
{
- private ListItem languageItem;
- private CheckableListItem altTextItem, playGifsItem, customTabsItem, confirmUnfollowItem, confirmBoostItem, confirmDeleteItem;
+ private ListItem languageItem, customTabsItem;
+ private CheckableListItem altTextItem, playGifsItem, confirmUnfollowItem, confirmBoostItem, confirmDeleteItem;
private Locale postLanguage;
private ComposeLanguageAlertViewController.SelectedOption newPostLanguage;
@@ -33,9 +44,9 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment{
onDataLoaded(List.of(
languageItem=new ListItem<>(getString(R.string.default_post_language), postLanguage!=null ? postLanguage.getDisplayName(Locale.getDefault()) : null, R.drawable.ic_language_24px, this::onDefaultLanguageClick),
+ customTabsItem=new ListItem<>(R.string.settings_custom_tabs, GlobalUserPreferences.useCustomTabs ? R.string.in_app_browser : R.string.system_browser, R.drawable.ic_open_in_browser_24px, this::onCustomTabsClick),
altTextItem=new CheckableListItem<>(R.string.settings_alt_text_reminders, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.altTextReminders, R.drawable.ic_alt_24px, this::toggleCheckableItem),
playGifsItem=new CheckableListItem<>(R.string.settings_gif, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.playGifs, R.drawable.ic_animation_24px, this::toggleCheckableItem),
- customTabsItem=new CheckableListItem<>(R.string.settings_custom_tabs, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.useCustomTabs, R.drawable.ic_open_in_browser_24px, this::toggleCheckableItem),
confirmUnfollowItem=new CheckableListItem<>(R.string.settings_confirm_unfollow, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmUnfollow, R.drawable.ic_person_remove_24px, this::toggleCheckableItem),
confirmBoostItem=new CheckableListItem<>(R.string.settings_confirm_boost, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmBoost, R.drawable.ic_repeat_24px, this::toggleCheckableItem),
confirmDeleteItem=new CheckableListItem<>(R.string.settings_confirm_delete_post, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmDeletePost, R.drawable.ic_delete_24px, this::toggleCheckableItem)
@@ -62,13 +73,54 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment{
.show();
}
+ private void onCustomTabsClick(ListItem> item){
+// GlobalUserPreferences.useCustomTabs=customTabsItem.checked;
+ Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com"));
+ ResolveInfo info=getActivity().getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
+ final String browserName;
+ if(info==null){
+ browserName="??";
+ }else{
+ browserName=info.loadLabel(getActivity().getPackageManager()).toString();
+ }
+ ArrayAdapter adapter=new ArrayAdapter<>(getActivity(), R.layout.item_alert_single_choice_2lines_but_different, R.id.text,
+ new String[]{getString(R.string.in_app_browser), getString(R.string.system_browser)}){
+ @Override
+ public boolean hasStableIds(){
+ return true;
+ }
+
+ @NonNull
+ @Override
+ public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent){
+ View view=super.getView(position, convertView, parent);
+ TextView subtitle=view.findViewById(R.id.subtitle);
+ if(position==0){
+ subtitle.setVisibility(View.GONE);
+ }else{
+ subtitle.setVisibility(View.VISIBLE);
+ subtitle.setText(browserName);
+ }
+ return view;
+ }
+ };
+ new M3AlertDialogBuilder(getActivity())
+ .setTitle(R.string.settings_custom_tabs)
+ .setSingleChoiceItems(adapter, GlobalUserPreferences.useCustomTabs ? 0 : 1, (dlg, which)->{
+ GlobalUserPreferences.useCustomTabs=which==0;
+ customTabsItem.subtitleRes=GlobalUserPreferences.useCustomTabs ? R.string.in_app_browser : R.string.system_browser;
+ rebindItem(customTabsItem);
+ dlg.dismiss();
+ })
+ .show();
+ }
+
@Override
protected void onHidden(){
super.onHidden();
GlobalUserPreferences.playGifs=playGifsItem.checked;
- GlobalUserPreferences.useCustomTabs=customTabsItem.checked;
GlobalUserPreferences.altTextReminders=altTextItem.checked;
- GlobalUserPreferences.confirmUnfollow=customTabsItem.checked;
+ GlobalUserPreferences.confirmUnfollow=confirmUnfollowItem.checked;
GlobalUserPreferences.confirmBoost=confirmBoostItem.checked;
GlobalUserPreferences.confirmDeletePost=confirmDeleteItem.checked;
GlobalUserPreferences.save();
diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsFiltersFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsFiltersFragment.java
index be9ba8a6..4fa9b3f3 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsFiltersFragment.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsFiltersFragment.java
@@ -44,6 +44,8 @@ public class SettingsFiltersFragment extends BaseSettingsFragment{
.setCallback(new SimpleCallback<>(this){
@Override
public void onSuccess(List result){
+ if(getActivity()==null)
+ return;
onDataLoaded(result.stream().map(f->makeListItem(f)).collect(Collectors.toList()));
}
})
diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java b/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java
index 0f386d50..7c54c920 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/ui/M3AlertDialogBuilder.java
@@ -6,6 +6,7 @@ import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
+import android.widget.ListView;
import android.widget.TextView;
import org.joinmastodon.android.R;
@@ -59,6 +60,12 @@ public class M3AlertDialogBuilder extends AlertDialog.Builder{
buttonBar.setPadding(V.dp(16), V.dp(16), V.dp(16), V.dp(16));
((View)buttonBar.getParent()).setPadding(0, 0, 0, 0);
}
+ if(btn==null || btn.getVisibility()==View.GONE){
+ ListView list=alert.getListView();
+ if(list!=null){
+ list.setPadding(list.getPaddingLeft(), list.getPaddingTop(), list.getPaddingRight(), V.dp(24));
+ }
+ }
// hacc
int titleID=getContext().getResources().getIdentifier("title_template", "id", "android");
if(titleID!=0){
diff --git a/mastodon/src/main/res/layout/item_alert_single_choice_2lines_but_different.xml b/mastodon/src/main/res/layout/item_alert_single_choice_2lines_but_different.xml
new file mode 100644
index 00000000..ea798e38
--- /dev/null
+++ b/mastodon/src/main/res/layout/item_alert_single_choice_2lines_but_different.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml
index adedf985..5fd69b52 100644
--- a/mastodon/src/main/res/values/strings.xml
+++ b/mastodon/src/main/res/values/strings.xml
@@ -194,7 +194,7 @@
Dark
Behavior
Play animated avatars and emoji
- Use in-app browser
+ Open links in
Notifications
Contribute to Mastodon
Terms of service
@@ -710,4 +710,6 @@
%s on Mastodon
%1$s on Mastodon: ā%2$sā
Copy link to profile
+ In-app browser
+ System browser
\ No newline at end of file