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