merge settings changes
This commit is contained in:
parent
53f0e2a933
commit
09577074a9
|
@ -115,7 +115,7 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
|
||||||
onDataLoaded(results.stream().map(sr->{
|
onDataLoaded(results.stream().map(sr->{
|
||||||
SearchResultViewModel vm=new SearchResultViewModel(sr, accountID, true);
|
SearchResultViewModel vm=new SearchResultViewModel(sr, accountID, true);
|
||||||
if(sr.type==SearchResult.Type.HASHTAG){
|
if(sr.type==SearchResult.Type.HASHTAG){
|
||||||
vm.hashtagItem.onClick=()->openHashtag(sr);
|
vm.hashtagItem.setOnClick(i->openHashtag(sr));
|
||||||
}
|
}
|
||||||
return vm;
|
return vm;
|
||||||
}).collect(Collectors.toList()), false);
|
}).collect(Collectors.toList()), false);
|
||||||
|
@ -132,7 +132,7 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
|
||||||
.map(sr->{
|
.map(sr->{
|
||||||
SearchResultViewModel vm=new SearchResultViewModel(sr, accountID, false);
|
SearchResultViewModel vm=new SearchResultViewModel(sr, accountID, false);
|
||||||
if(sr.type==SearchResult.Type.HASHTAG){
|
if(sr.type==SearchResult.Type.HASHTAG){
|
||||||
vm.hashtagItem.onClick=()->openHashtag(sr);
|
vm.hashtagItem.setOnClick(i->openHashtag(sr));
|
||||||
}
|
}
|
||||||
return vm;
|
return vm;
|
||||||
})
|
})
|
||||||
|
@ -429,11 +429,11 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
|
||||||
wrapSuicideDialog(()->deliverResult(currentQuery, null));
|
wrapSuicideDialog(()->deliverResult(currentQuery, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onOpenURLClick(){
|
private void onOpenURLClick(ListItem<?> item_){
|
||||||
UiUtils.openURL(getContext(), accountID, searchViewHelper.getQuery(), false);
|
UiUtils.openURL(getContext(), accountID, searchViewHelper.getQuery(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGoToHashtagClick(){
|
private void onGoToHashtagClick(ListItem<?> item_){
|
||||||
wrapSuicideDialog(()->{
|
wrapSuicideDialog(()->{
|
||||||
String q=searchViewHelper.getQuery();
|
String q=searchViewHelper.getQuery();
|
||||||
if(q.startsWith("#"))
|
if(q.startsWith("#"))
|
||||||
|
@ -442,7 +442,7 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGoToAccountClick(){
|
private void onGoToAccountClick(ListItem<?> item_){
|
||||||
String q=searchViewHelper.getQuery();
|
String q=searchViewHelper.getQuery();
|
||||||
if(!q.startsWith("@")){
|
if(!q.startsWith("@")){
|
||||||
q="@"+q;
|
q="@"+q;
|
||||||
|
@ -459,11 +459,11 @@ public class SearchQueryFragment extends MastodonRecyclerFragment<SearchResultVi
|
||||||
}).ifPresent(progress -> progress.wrapProgress((Activity) getContext(), R.string.loading, true));
|
}).ifPresent(progress -> progress.wrapProgress((Activity) getContext(), R.string.loading, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGoToStatusSearchClick(){
|
private void onGoToStatusSearchClick(ListItem<?> item_){
|
||||||
wrapSuicideDialog(()->deliverResult(searchViewHelper.getQuery(), SearchResult.Type.STATUS));
|
wrapSuicideDialog(()->deliverResult(searchViewHelper.getQuery(), SearchResult.Type.STATUS));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGoToAccountSearchClick(){
|
private void onGoToAccountSearchClick(ListItem<?> item_){
|
||||||
wrapSuicideDialog(()->deliverResult(searchViewHelper.getQuery(), SearchResult.Type.ACCOUNT));
|
wrapSuicideDialog(()->deliverResult(searchViewHelper.getQuery(), SearchResult.Type.ACCOUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ public class EditFilterFragment extends BaseSettingsFragment<Void> implements On
|
||||||
durationItem=new ListItem<>(R.string.settings_filter_duration, 0, this::onDurationClick),
|
durationItem=new ListItem<>(R.string.settings_filter_duration, 0, this::onDurationClick),
|
||||||
wordsItem=new ListItem<>(R.string.settings_filter_muted_words, 0, this::onWordsClick),
|
wordsItem=new ListItem<>(R.string.settings_filter_muted_words, 0, this::onWordsClick),
|
||||||
contextItem=new ListItem<>(R.string.settings_filter_context, 0, this::onContextClick),
|
contextItem=new ListItem<>(R.string.settings_filter_context, 0, this::onContextClick),
|
||||||
cwItem=new CheckableListItem<>(R.string.settings_filter_show_cw, R.string.settings_filter_show_cw_explanation, CheckableListItem.Style.SWITCH, filter==null || filter.filterAction==FilterAction.WARN, ()->toggleCheckableItem(cwItem))
|
cwItem=new CheckableListItem<>(R.string.settings_filter_show_cw, R.string.settings_filter_show_cw_explanation, CheckableListItem.Style.SWITCH, filter==null || filter.filterAction==FilterAction.WARN, this::toggleCheckableItem)
|
||||||
));
|
));
|
||||||
|
|
||||||
if(filter!=null){
|
if(filter!=null){
|
||||||
|
@ -113,7 +113,7 @@ public class EditFilterFragment extends BaseSettingsFragment<Void> implements On
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDurationClick(){
|
private void onDurationClick(ListItem<Void> item_){
|
||||||
int[] durationOptions={
|
int[] durationOptions={
|
||||||
1800,
|
1800,
|
||||||
3600,
|
3600,
|
||||||
|
@ -182,21 +182,21 @@ public class EditFilterFragment extends BaseSettingsFragment<Void> implements On
|
||||||
alert.setOnDismissListener(dialog->callback.accept(null));
|
alert.setOnDismissListener(dialog->callback.accept(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onWordsClick(){
|
private void onWordsClick(ListItem<Void> item){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
args.putParcelableArrayList("words", (ArrayList<? extends Parcelable>) keywords.stream().map(Parcels::wrap).collect(Collectors.toCollection(ArrayList::new)));
|
args.putParcelableArrayList("words", (ArrayList<? extends Parcelable>) keywords.stream().map(Parcels::wrap).collect(Collectors.toCollection(ArrayList::new)));
|
||||||
Nav.goForResult(getActivity(), FilterWordsFragment.class, args, WORDS_RESULT, this);
|
Nav.goForResult(getActivity(), FilterWordsFragment.class, args, WORDS_RESULT, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onContextClick(){
|
private void onContextClick(ListItem<Void> item){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
args.putSerializable("context", context);
|
args.putSerializable("context", context);
|
||||||
Nav.goForResult(getActivity(), FilterContextFragment.class, args, CONTEXT_RESULT, this);
|
Nav.goForResult(getActivity(), FilterContextFragment.class, args, CONTEXT_RESULT, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDeleteClick(){
|
private void onDeleteClick(ListItem<Void> item_){
|
||||||
AlertDialog alert=new M3AlertDialogBuilder(getActivity())
|
AlertDialog alert=new M3AlertDialogBuilder(getActivity())
|
||||||
.setTitle(getString(R.string.settings_delete_filter_title, filter.title))
|
.setTitle(getString(R.string.settings_delete_filter_title, filter.title))
|
||||||
.setMessage(R.string.settings_delete_filter_confirmation)
|
.setMessage(R.string.settings_delete_filter_confirmation)
|
||||||
|
|
|
@ -22,10 +22,9 @@ public class FilterContextFragment extends BaseSettingsFragment<FilterContext> i
|
||||||
setTitle(R.string.settings_filter_context);
|
setTitle(R.string.settings_filter_context);
|
||||||
context=(EnumSet<FilterContext>) getArguments().getSerializable("context");
|
context=(EnumSet<FilterContext>) getArguments().getSerializable("context");
|
||||||
onDataLoaded(Arrays.stream(FilterContext.values()).map(c->{
|
onDataLoaded(Arrays.stream(FilterContext.values()).map(c->{
|
||||||
CheckableListItem<FilterContext> item=new CheckableListItem<>(c.getDisplayNameRes(), 0, CheckableListItem.Style.CHECKBOX, context.contains(c), null);
|
CheckableListItem<FilterContext> item=new CheckableListItem<>(c.getDisplayNameRes(), 0, CheckableListItem.Style.CHECKBOX, context.contains(c), this::toggleCheckableItem);
|
||||||
item.parentObject=c;
|
item.parentObject=c;
|
||||||
item.isEnabled=true;
|
item.isEnabled=true;
|
||||||
item.onClick=()->toggleCheckableItem(item);
|
|
||||||
return item;
|
return item;
|
||||||
}).collect(Collectors.toList()));
|
}).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
package org.joinmastodon.android.fragments.settings;
|
package org.joinmastodon.android.fragments.settings;
|
||||||
|
|
||||||
import android.animation.Animator;
|
|
||||||
import android.animation.AnimatorListenerAdapter;
|
|
||||||
import android.animation.IntEvaluator;
|
|
||||||
import android.animation.ObjectAnimator;
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
@ -27,6 +22,7 @@ import org.joinmastodon.android.model.FilterKeyword;
|
||||||
import org.joinmastodon.android.model.viewmodel.CheckableListItem;
|
import org.joinmastodon.android.model.viewmodel.CheckableListItem;
|
||||||
import org.joinmastodon.android.model.viewmodel.ListItem;
|
import org.joinmastodon.android.model.viewmodel.ListItem;
|
||||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||||
|
import org.joinmastodon.android.ui.utils.ActionModeHelper;
|
||||||
import org.joinmastodon.android.ui.utils.SimpleTextWatcher;
|
import org.joinmastodon.android.ui.utils.SimpleTextWatcher;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
import org.joinmastodon.android.ui.views.FloatingHintEditTextLayout;
|
import org.joinmastodon.android.ui.views.FloatingHintEditTextLayout;
|
||||||
|
@ -37,7 +33,6 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import me.grishka.appkit.FragmentStackActivity;
|
|
||||||
import me.grishka.appkit.fragments.OnBackPressedListener;
|
import me.grishka.appkit.fragments.OnBackPressedListener;
|
||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
|
@ -60,7 +55,7 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
FilterKeyword word=Parcels.unwrap(p);
|
FilterKeyword word=Parcels.unwrap(p);
|
||||||
ListItem<FilterKeyword> item=new ListItem<>(word.keyword, null, null, word);
|
ListItem<FilterKeyword> item=new ListItem<>(word.keyword, null, null, word);
|
||||||
item.isEnabled=true;
|
item.isEnabled=true;
|
||||||
item.onClick=()->onWordClick(item);
|
item.setOnClick(this::onWordClick);
|
||||||
return item;
|
return item;
|
||||||
}).collect(Collectors.toList()));
|
}).collect(Collectors.toList()));
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
|
@ -114,7 +109,7 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
|
||||||
inflater.inflate(R.menu.settings_filter_words, menu);
|
inflater.inflate(R.menu.selectable_list, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -174,7 +169,7 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
w.keyword=input;
|
w.keyword=input;
|
||||||
ListItem<FilterKeyword> item=new ListItem<>(w.keyword, null, null, w);
|
ListItem<FilterKeyword> item=new ListItem<>(w.keyword, null, null, w);
|
||||||
item.isEnabled=true;
|
item.isEnabled=true;
|
||||||
item.onClick=()->onWordClick(item);
|
item.setOnClick(this::onWordClick);
|
||||||
data.add(item);
|
data.add(item);
|
||||||
itemsAdapter.notifyItemInserted(data.size()-1);
|
itemsAdapter.notifyItemInserted(data.size()-1);
|
||||||
}else{
|
}else{
|
||||||
|
@ -228,29 +223,15 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
return;
|
return;
|
||||||
V.setVisibilityAnimated(fab, View.GONE);
|
V.setVisibilityAnimated(fab, View.GONE);
|
||||||
|
|
||||||
actionMode=getActivity().startActionMode(new ActionMode.Callback(){
|
actionMode=ActionModeHelper.startActionMode(this, ()->elevationOnScrollListener.getCurrentStatusBarColor(), new ActionMode.Callback(){
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateActionMode(ActionMode mode, Menu menu){
|
public boolean onCreateActionMode(ActionMode mode, Menu menu){
|
||||||
ObjectAnimator anim=ObjectAnimator.ofInt(getActivity().getWindow(), "statusBarColor", elevationOnScrollListener.getCurrentStatusBarColor(), UiUtils.getThemeColor(getActivity(), R.attr.colorM3Primary));
|
|
||||||
anim.setEvaluator(new IntEvaluator(){
|
|
||||||
@Override
|
|
||||||
public Integer evaluate(float fraction, Integer startValue, Integer endValue){
|
|
||||||
return UiUtils.alphaBlendColors(startValue, endValue, fraction);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
anim.start();
|
|
||||||
((FragmentStackActivity) getActivity()).invalidateSystemBarColors(FilterWordsFragment.this);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPrepareActionMode(ActionMode mode, Menu menu){
|
public boolean onPrepareActionMode(ActionMode mode, Menu menu){
|
||||||
mode.getMenuInflater().inflate(R.menu.settings_filter_words_action_mode, menu);
|
mode.getMenuInflater().inflate(R.menu.settings_filter_words_action_mode, menu);
|
||||||
for(int i=0;i<menu.size();i++){
|
|
||||||
Drawable icon=menu.getItem(i).getIcon().mutate();
|
|
||||||
icon.setTint(UiUtils.getThemeColor(getActivity(), R.attr.colorM3OnPrimary));
|
|
||||||
menu.getItem(i).setIcon(icon);
|
|
||||||
}
|
|
||||||
deleteItem=menu.findItem(R.id.delete);
|
deleteItem=menu.findItem(R.id.delete);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -266,21 +247,6 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyActionMode(ActionMode mode){
|
public void onDestroyActionMode(ActionMode mode){
|
||||||
leaveSelectionMode(true);
|
leaveSelectionMode(true);
|
||||||
ObjectAnimator anim=ObjectAnimator.ofInt(getActivity().getWindow(), "statusBarColor", UiUtils.getThemeColor(getActivity(), R.attr.colorM3Primary), elevationOnScrollListener.getCurrentStatusBarColor());
|
|
||||||
anim.setEvaluator(new IntEvaluator(){
|
|
||||||
@Override
|
|
||||||
public Integer evaluate(float fraction, Integer startValue, Integer endValue){
|
|
||||||
return UiUtils.alphaBlendColors(startValue, endValue, fraction);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
anim.addListener(new AnimatorListenerAdapter(){
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animator animation){
|
|
||||||
getActivity().getWindow().setStatusBarColor(0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
anim.start();
|
|
||||||
((FragmentStackActivity) getActivity()).invalidateSystemBarColors(FilterWordsFragment.this);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -289,7 +255,7 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
ListItem<FilterKeyword> item=data.get(i);
|
ListItem<FilterKeyword> item=data.get(i);
|
||||||
CheckableListItem<FilterKeyword> newItem=new CheckableListItem<>(item.title, null, CheckableListItem.Style.CHECKBOX, selectAll, null);
|
CheckableListItem<FilterKeyword> newItem=new CheckableListItem<>(item.title, null, CheckableListItem.Style.CHECKBOX, selectAll, null);
|
||||||
newItem.isEnabled=true;
|
newItem.isEnabled=true;
|
||||||
newItem.onClick=()->onSelectionModeWordClick(newItem);
|
newItem.setOnClick(this::onSelectionModeWordClick);
|
||||||
newItem.parentObject=item.parentObject;
|
newItem.parentObject=item.parentObject;
|
||||||
if(selectAll)
|
if(selectAll)
|
||||||
selectedItems.add(newItem);
|
selectedItems.add(newItem);
|
||||||
|
@ -313,7 +279,7 @@ public class FilterWordsFragment extends BaseSettingsFragment<FilterKeyword> imp
|
||||||
ListItem<FilterKeyword> item=data.get(i);
|
ListItem<FilterKeyword> item=data.get(i);
|
||||||
ListItem<FilterKeyword> newItem=new ListItem<>(item.title, null, null);
|
ListItem<FilterKeyword> newItem=new ListItem<>(item.title, null, null);
|
||||||
newItem.isEnabled=true;
|
newItem.isEnabled=true;
|
||||||
newItem.onClick=()->onWordClick(newItem);
|
newItem.setOnClick(this::onWordClick);
|
||||||
newItem.parentObject=item.parentObject;
|
newItem.parentObject=item.parentObject;
|
||||||
data.set(i, newItem);
|
data.set(i, newItem);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,10 +33,10 @@ public class SettingsAboutAppFragment extends BaseSettingsFragment<Void>{
|
||||||
setTitle(getString(R.string.about_app, getString(R.string.sk_app_name)));
|
setTitle(getString(R.string.about_app, getString(R.string.sk_app_name)));
|
||||||
AccountSession s=AccountSessionManager.get(accountID);
|
AccountSession s=AccountSessionManager.get(accountID);
|
||||||
onDataLoaded(List.of(
|
onDataLoaded(List.of(
|
||||||
new ListItem<>(R.string.sk_settings_donate, 0, R.drawable.ic_fluent_heart_24_regular, ()->UiUtils.openHashtagTimeline(getActivity(), accountID, getString(R.string.donate_hashtag))),
|
new ListItem<>(R.string.sk_settings_donate, 0, R.drawable.ic_fluent_heart_24_regular, i->UiUtils.openHashtagTimeline(getActivity(), accountID, getString(R.string.donate_hashtag))),
|
||||||
new ListItem<>(R.string.sk_settings_contribute, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), getString(R.string.repo_url))),
|
new ListItem<>(R.string.sk_settings_contribute, 0, R.drawable.ic_fluent_open_24_regular, i->UiUtils.launchWebBrowser(getActivity(), getString(R.string.repo_url))),
|
||||||
new ListItem<>(R.string.settings_tos, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/terms")),
|
new ListItem<>(R.string.settings_tos, 0, R.drawable.ic_fluent_open_24_regular, i->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/terms")),
|
||||||
new ListItem<>(R.string.settings_privacy_policy, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), getString(R.string.privacy_policy_url)), 0, true),
|
new ListItem<>(R.string.settings_privacy_policy, 0, R.drawable.ic_fluent_open_24_regular, i->UiUtils.launchWebBrowser(getActivity(), getString(R.string.privacy_policy_url)), 0, true),
|
||||||
mediaCacheItem=new ListItem<>(R.string.settings_clear_cache, 0, this::onClearMediaCacheClick)
|
mediaCacheItem=new ListItem<>(R.string.settings_clear_cache, 0, this::onClearMediaCacheClick)
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ public class SettingsAboutAppFragment extends BaseSettingsFragment<Void>{
|
||||||
return adapter;
|
return adapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onClearMediaCacheClick(){
|
private void onClearMediaCacheClick(ListItem<?> item){
|
||||||
MastodonAPIController.runInBackground(()->{
|
MastodonAPIController.runInBackground(()->{
|
||||||
Activity activity=getActivity();
|
Activity activity=getActivity();
|
||||||
ImageCache.getInstance(getActivity()).clear();
|
ImageCache.getInstance(getActivity()).clear();
|
||||||
|
|
|
@ -46,20 +46,20 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment<Void> impleme
|
||||||
|
|
||||||
List<ListItem<Void>> items = new ArrayList<>(List.of(
|
List<ListItem<Void>> items = new ArrayList<>(List.of(
|
||||||
languageItem=new ListItem<>(getString(R.string.default_post_language), postLanguage!=null ? postLanguage.getDisplayName(getContext()) : null, R.drawable.ic_fluent_local_language_24_regular, this::onDefaultLanguageClick),
|
languageItem=new ListItem<>(getString(R.string.default_post_language), postLanguage!=null ? postLanguage.getDisplayName(getContext()) : null, R.drawable.ic_fluent_local_language_24_regular, this::onDefaultLanguageClick),
|
||||||
altTextItem=new CheckableListItem<>(R.string.settings_alt_text_reminders, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.altTextReminders, R.drawable.ic_fluent_image_alt_text_24_regular, ()->toggleCheckableItem(altTextItem)),
|
altTextItem=new CheckableListItem<>(R.string.settings_alt_text_reminders, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.altTextReminders, R.drawable.ic_fluent_image_alt_text_24_regular, i->toggleCheckableItem(altTextItem)),
|
||||||
playGifsItem=new CheckableListItem<>(R.string.settings_gif, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.playGifs, R.drawable.ic_fluent_gif_24_regular, ()->toggleCheckableItem(playGifsItem)),
|
playGifsItem=new CheckableListItem<>(R.string.settings_gif, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.playGifs, R.drawable.ic_fluent_gif_24_regular, i->toggleCheckableItem(playGifsItem)),
|
||||||
overlayMediaItem=new CheckableListItem<>(R.string.sk_settings_continues_playback, R.string.sk_settings_continues_playback_summary, CheckableListItem.Style.SWITCH, GlobalUserPreferences.overlayMedia, R.drawable.ic_fluent_play_circle_hint_24_regular, ()->toggleCheckableItem(overlayMediaItem)),
|
overlayMediaItem=new CheckableListItem<>(R.string.sk_settings_continues_playback, R.string.sk_settings_continues_playback_summary, CheckableListItem.Style.SWITCH, GlobalUserPreferences.overlayMedia, R.drawable.ic_fluent_play_circle_hint_24_regular, i->toggleCheckableItem(overlayMediaItem)),
|
||||||
customTabsItem=new CheckableListItem<>(R.string.settings_custom_tabs, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.useCustomTabs, R.drawable.ic_fluent_link_24_regular, ()->toggleCheckableItem(customTabsItem)),
|
customTabsItem=new CheckableListItem<>(R.string.settings_custom_tabs, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.useCustomTabs, R.drawable.ic_fluent_link_24_regular, i->toggleCheckableItem(customTabsItem)),
|
||||||
confirmUnfollowItem=new CheckableListItem<>(R.string.settings_confirm_unfollow, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmUnfollow, R.drawable.ic_fluent_person_delete_24_regular, ()->toggleCheckableItem(confirmUnfollowItem)),
|
confirmUnfollowItem=new CheckableListItem<>(R.string.settings_confirm_unfollow, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmUnfollow, R.drawable.ic_fluent_person_delete_24_regular, i->toggleCheckableItem(confirmUnfollowItem)),
|
||||||
confirmBoostItem=new CheckableListItem<>(R.string.settings_confirm_boost, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmBoost, R.drawable.ic_fluent_arrow_repeat_all_24_regular, ()->toggleCheckableItem(confirmBoostItem)),
|
confirmBoostItem=new CheckableListItem<>(R.string.settings_confirm_boost, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmBoost, R.drawable.ic_fluent_arrow_repeat_all_24_regular, i->toggleCheckableItem(confirmBoostItem)),
|
||||||
confirmDeleteItem=new CheckableListItem<>(R.string.settings_confirm_delete_post, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmDeletePost, R.drawable.ic_fluent_delete_24_regular, ()->toggleCheckableItem(confirmDeleteItem)),
|
confirmDeleteItem=new CheckableListItem<>(R.string.settings_confirm_delete_post, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.confirmDeletePost, R.drawable.ic_fluent_delete_24_regular, i->toggleCheckableItem(confirmDeleteItem)),
|
||||||
prefixRepliesItem=new ListItem<>(R.string.sk_settings_prefix_reply_cw_with_re, getPrefixWithRepliesString(), R.drawable.ic_fluent_arrow_reply_24_regular, this::onPrefixRepliesClick),
|
prefixRepliesItem=new ListItem<>(R.string.sk_settings_prefix_reply_cw_with_re, getPrefixWithRepliesString(), R.drawable.ic_fluent_arrow_reply_24_regular, this::onPrefixRepliesClick),
|
||||||
forwardReportsItem=new CheckableListItem<>(R.string.sk_settings_forward_report_default, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.forwardReportDefault, R.drawable.ic_fluent_arrow_forward_24_regular, ()->toggleCheckableItem(forwardReportsItem)),
|
forwardReportsItem=new CheckableListItem<>(R.string.sk_settings_forward_report_default, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.forwardReportDefault, R.drawable.ic_fluent_arrow_forward_24_regular, i->toggleCheckableItem(forwardReportsItem)),
|
||||||
loadNewPostsItem=new CheckableListItem<>(R.string.sk_settings_load_new_posts, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.loadNewPosts, R.drawable.ic_fluent_arrow_sync_24_regular, this::onLoadNewPostsClick),
|
loadNewPostsItem=new CheckableListItem<>(R.string.sk_settings_load_new_posts, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.loadNewPosts, R.drawable.ic_fluent_arrow_sync_24_regular, i->onLoadNewPostsClick()),
|
||||||
seeNewPostsBtnItem=new CheckableListItem<>(R.string.sk_settings_see_new_posts_button, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNewPostsButton, R.drawable.ic_fluent_arrow_up_24_regular, ()->toggleCheckableItem(seeNewPostsBtnItem)),
|
seeNewPostsBtnItem=new CheckableListItem<>(R.string.sk_settings_see_new_posts_button, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNewPostsButton, R.drawable.ic_fluent_arrow_up_24_regular, i->toggleCheckableItem(seeNewPostsBtnItem)),
|
||||||
remoteLoadingItem=new CheckableListItem<>(R.string.sk_settings_allow_remote_loading, R.string.sk_settings_allow_remote_loading_explanation, CheckableListItem.Style.SWITCH, GlobalUserPreferences.allowRemoteLoading, R.drawable.ic_fluent_communication_24_regular, ()->toggleCheckableItem(remoteLoadingItem), true),
|
remoteLoadingItem=new CheckableListItem<>(R.string.sk_settings_allow_remote_loading, R.string.sk_settings_allow_remote_loading_explanation, CheckableListItem.Style.SWITCH, GlobalUserPreferences.allowRemoteLoading, R.drawable.ic_fluent_communication_24_regular, i->toggleCheckableItem(remoteLoadingItem), true),
|
||||||
showBoostsItem=new CheckableListItem<>(R.string.sk_settings_show_boosts, 0, CheckableListItem.Style.SWITCH, lp.showBoosts, R.drawable.ic_fluent_arrow_repeat_all_24_regular, ()->toggleCheckableItem(showBoostsItem)),
|
showBoostsItem=new CheckableListItem<>(R.string.sk_settings_show_boosts, 0, CheckableListItem.Style.SWITCH, lp.showBoosts, R.drawable.ic_fluent_arrow_repeat_all_24_regular, i->toggleCheckableItem(showBoostsItem)),
|
||||||
showRepliesItem=new CheckableListItem<>(R.string.sk_settings_show_replies, 0, CheckableListItem.Style.SWITCH, lp.showReplies, R.drawable.ic_fluent_arrow_reply_24_regular, ()->toggleCheckableItem(showRepliesItem))
|
showRepliesItem=new CheckableListItem<>(R.string.sk_settings_show_replies, 0, CheckableListItem.Style.SWITCH, lp.showReplies, R.drawable.ic_fluent_arrow_reply_24_regular, i->toggleCheckableItem(showRepliesItem))
|
||||||
));
|
));
|
||||||
|
|
||||||
if(isInstanceAkkoma()) items.add(
|
if(isInstanceAkkoma()) items.add(
|
||||||
|
@ -93,7 +93,7 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment<Void> impleme
|
||||||
@Override
|
@Override
|
||||||
protected void doLoadData(int offset, int count){}
|
protected void doLoadData(int offset, int count){}
|
||||||
|
|
||||||
private void onDefaultLanguageClick(){
|
private void onDefaultLanguageClick(ListItem<?> item){
|
||||||
if (languageResolver == null) return;
|
if (languageResolver == null) return;
|
||||||
ComposeLanguageAlertViewController vc=new ComposeLanguageAlertViewController(getActivity(), null, new ComposeLanguageAlertViewController.SelectedOption(postLanguage), null, languageResolver);
|
ComposeLanguageAlertViewController vc=new ComposeLanguageAlertViewController(getActivity(), null, new ComposeLanguageAlertViewController.SelectedOption(postLanguage), null, languageResolver);
|
||||||
new M3AlertDialogBuilder(getActivity())
|
new M3AlertDialogBuilder(getActivity())
|
||||||
|
@ -112,14 +112,14 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment<Void> impleme
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onPrefixRepliesClick(){
|
private void onPrefixRepliesClick(ListItem<?> item){
|
||||||
int selected=GlobalUserPreferences.prefixReplies.ordinal();
|
int selected=GlobalUserPreferences.prefixReplies.ordinal();
|
||||||
int[] newSelected={selected};
|
int[] newSelected={selected};
|
||||||
new M3AlertDialogBuilder(getActivity())
|
new M3AlertDialogBuilder(getActivity())
|
||||||
.setTitle(R.string.sk_settings_prefix_reply_cw_with_re)
|
.setTitle(R.string.sk_settings_prefix_reply_cw_with_re)
|
||||||
.setSingleChoiceItems((String[]) IntStream.of(R.string.sk_settings_prefix_replies_never, R.string.sk_settings_prefix_replies_always, R.string.sk_settings_prefix_replies_to_others).mapToObj(this::getString).toArray(String[]::new),
|
.setSingleChoiceItems((String[]) IntStream.of(R.string.sk_settings_prefix_replies_never, R.string.sk_settings_prefix_replies_always, R.string.sk_settings_prefix_replies_to_others).mapToObj(this::getString).toArray(String[]::new),
|
||||||
selected, (dlg, item)->newSelected[0]=item)
|
selected, (dlg, which)->newSelected[0]=which)
|
||||||
.setPositiveButton(R.string.ok, (dlg, item)->{
|
.setPositiveButton(R.string.ok, (dlg, which)->{
|
||||||
GlobalUserPreferences.prefixReplies=GlobalUserPreferences.PrefixRepliesMode.values()[newSelected[0]];
|
GlobalUserPreferences.prefixReplies=GlobalUserPreferences.PrefixRepliesMode.values()[newSelected[0]];
|
||||||
prefixRepliesItem.subtitleRes=getPrefixWithRepliesString();
|
prefixRepliesItem.subtitleRes=getPrefixWithRepliesString();
|
||||||
rebindItem(prefixRepliesItem);
|
rebindItem(prefixRepliesItem);
|
||||||
|
@ -128,7 +128,7 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment<Void> impleme
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onReplyVisibilityClick(){
|
private void onReplyVisibilityClick(ListItem<?> item){
|
||||||
AccountLocalPreferences lp=getLocalPrefs();
|
AccountLocalPreferences lp=getLocalPrefs();
|
||||||
int selected=lp.timelineReplyVisibility==null ? 2 : switch(lp.timelineReplyVisibility){
|
int selected=lp.timelineReplyVisibility==null ? 2 : switch(lp.timelineReplyVisibility){
|
||||||
case "following" -> 0;
|
case "following" -> 0;
|
||||||
|
@ -139,8 +139,8 @@ public class SettingsBehaviorFragment extends BaseSettingsFragment<Void> impleme
|
||||||
new M3AlertDialogBuilder(getActivity())
|
new M3AlertDialogBuilder(getActivity())
|
||||||
.setTitle(R.string.sk_settings_prefix_reply_cw_with_re)
|
.setTitle(R.string.sk_settings_prefix_reply_cw_with_re)
|
||||||
.setSingleChoiceItems((String[]) IntStream.of(R.string.sk_settings_reply_visibility_following, R.string.sk_settings_reply_visibility_self, R.string.sk_settings_reply_visibility_all).mapToObj(this::getString).toArray(String[]::new),
|
.setSingleChoiceItems((String[]) IntStream.of(R.string.sk_settings_reply_visibility_following, R.string.sk_settings_reply_visibility_self, R.string.sk_settings_reply_visibility_all).mapToObj(this::getString).toArray(String[]::new),
|
||||||
selected, (dlg, item)->newSelected[0]=item)
|
selected, (dlg, which)->newSelected[0]=which)
|
||||||
.setPositiveButton(R.string.ok, (dlg, item)->{
|
.setPositiveButton(R.string.ok, (dlg, which)->{
|
||||||
lp.timelineReplyVisibility=switch(newSelected[0]){
|
lp.timelineReplyVisibility=switch(newSelected[0]){
|
||||||
case 0 -> "following";
|
case 0 -> "following";
|
||||||
case 1 -> "self";
|
case 1 -> "self";
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class SettingsDebugFragment extends BaseSettingsFragment<Void>{
|
||||||
@Override
|
@Override
|
||||||
protected void doLoadData(int offset, int count){}
|
protected void doLoadData(int offset, int count){}
|
||||||
|
|
||||||
private void onTestEmailConfirmClick(){
|
private void onTestEmailConfirmClick(ListItem<?> item){
|
||||||
AccountSession sess=AccountSessionManager.getInstance().getAccount(accountID);
|
AccountSession sess=AccountSessionManager.getInstance().getAccount(accountID);
|
||||||
sess.activated=false;
|
sess.activated=false;
|
||||||
sess.activationInfo=new AccountActivationInfo("test@email", System.currentTimeMillis());
|
sess.activationInfo=new AccountActivationInfo("test@email", System.currentTimeMillis());
|
||||||
|
@ -49,18 +49,18 @@ public class SettingsDebugFragment extends BaseSettingsFragment<Void>{
|
||||||
Nav.goClearingStack(getActivity(), AccountActivationFragment.class, args);
|
Nav.goClearingStack(getActivity(), AccountActivationFragment.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onForceSelfUpdateClick(){
|
private void onForceSelfUpdateClick(ListItem<?> item){
|
||||||
GithubSelfUpdater.forceUpdate=true;
|
GithubSelfUpdater.forceUpdate=true;
|
||||||
GithubSelfUpdater.getInstance().maybeCheckForUpdates();
|
GithubSelfUpdater.getInstance().maybeCheckForUpdates();
|
||||||
restartUI();
|
restartUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onResetUpdaterClick(){
|
private void onResetUpdaterClick(ListItem<?> item){
|
||||||
GithubSelfUpdater.getInstance().reset();
|
GithubSelfUpdater.getInstance().reset();
|
||||||
restartUI();
|
restartUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onResetDiscoverBannersClick(){
|
private void onResetDiscoverBannersClick(ListItem<?> item){
|
||||||
DiscoverInfoBannerHelper.reset();
|
DiscoverInfoBannerHelper.reset();
|
||||||
restartUI();
|
restartUI();
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,29 +56,29 @@ public class SettingsDisplayFragment extends BaseSettingsFragment<Void>{
|
||||||
onDataLoaded(List.of(
|
onDataLoaded(List.of(
|
||||||
themeItem=new ListItem<>(R.string.settings_theme, getAppearanceValue(), R.drawable.ic_fluent_weather_moon_24_regular, this::onAppearanceClick),
|
themeItem=new ListItem<>(R.string.settings_theme, getAppearanceValue(), R.drawable.ic_fluent_weather_moon_24_regular, this::onAppearanceClick),
|
||||||
colorItem=new ListItem<>(getString(R.string.sk_settings_color_palette), getColorPaletteValue(), R.drawable.ic_fluent_color_24_regular, this::onColorClick),
|
colorItem=new ListItem<>(getString(R.string.sk_settings_color_palette), getColorPaletteValue(), R.drawable.ic_fluent_color_24_regular, this::onColorClick),
|
||||||
trueBlackModeItem=new CheckableListItem<>(R.string.sk_settings_true_black, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.trueBlackTheme, R.drawable.ic_fluent_dark_theme_24_regular, this::onTrueBlackModeClick, true),
|
trueBlackModeItem=new CheckableListItem<>(R.string.sk_settings_true_black, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.trueBlackTheme, R.drawable.ic_fluent_dark_theme_24_regular, i->onTrueBlackModeClick(), true),
|
||||||
publishTextItem=new ListItem<>(getString(R.string.sk_settings_publish_button_text), getPublishButtonText(), R.drawable.ic_fluent_send_24_regular, this::onPublishTextClick),
|
publishTextItem=new ListItem<>(getString(R.string.sk_settings_publish_button_text), getPublishButtonText(), R.drawable.ic_fluent_send_24_regular, this::onPublishTextClick),
|
||||||
autoRevealCWsItem=new ListItem<>(R.string.sk_settings_auto_reveal_equal_spoilers, getAutoRevealSpoilersText(), R.drawable.ic_fluent_eye_24_regular, this::onAutoRevealSpoilersClick),
|
autoRevealCWsItem=new ListItem<>(R.string.sk_settings_auto_reveal_equal_spoilers, getAutoRevealSpoilersText(), R.drawable.ic_fluent_eye_24_regular, this::onAutoRevealSpoilersClick),
|
||||||
revealCWsItem=new CheckableListItem<>(R.string.sk_settings_always_reveal_content_warnings, 0, CheckableListItem.Style.SWITCH, lp.revealCWs, R.drawable.ic_fluent_chat_warning_24_regular, ()->toggleCheckableItem(revealCWsItem)),
|
revealCWsItem=new CheckableListItem<>(R.string.sk_settings_always_reveal_content_warnings, 0, CheckableListItem.Style.SWITCH, lp.revealCWs, R.drawable.ic_fluent_chat_warning_24_regular, i->toggleCheckableItem(revealCWsItem)),
|
||||||
hideSensitiveMediaItem=new CheckableListItem<>(R.string.settings_hide_sensitive_media, 0, CheckableListItem.Style.SWITCH, lp.hideSensitiveMedia, R.drawable.ic_fluent_flag_24_regular, ()->toggleCheckableItem(hideSensitiveMediaItem)),
|
hideSensitiveMediaItem=new CheckableListItem<>(R.string.settings_hide_sensitive_media, 0, CheckableListItem.Style.SWITCH, lp.hideSensitiveMedia, R.drawable.ic_fluent_flag_24_regular, i->toggleCheckableItem(hideSensitiveMediaItem)),
|
||||||
interactionCountsItem=new CheckableListItem<>(R.string.settings_show_interaction_counts, 0, CheckableListItem.Style.SWITCH, lp.showInteractionCounts, R.drawable.ic_fluent_number_row_24_regular, ()->toggleCheckableItem(interactionCountsItem)),
|
interactionCountsItem=new CheckableListItem<>(R.string.settings_show_interaction_counts, 0, CheckableListItem.Style.SWITCH, lp.showInteractionCounts, R.drawable.ic_fluent_number_row_24_regular, i->toggleCheckableItem(interactionCountsItem)),
|
||||||
emojiInNamesItem=new CheckableListItem<>(R.string.settings_show_emoji_in_names, 0, CheckableListItem.Style.SWITCH, lp.customEmojiInNames, R.drawable.ic_fluent_emoji_24_regular, ()->toggleCheckableItem(emojiInNamesItem)),
|
emojiInNamesItem=new CheckableListItem<>(R.string.settings_show_emoji_in_names, 0, CheckableListItem.Style.SWITCH, lp.customEmojiInNames, R.drawable.ic_fluent_emoji_24_regular, i->toggleCheckableItem(emojiInNamesItem)),
|
||||||
marqueeItem=new CheckableListItem<>(R.string.sk_settings_enable_marquee, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.toolbarMarquee, R.drawable.ic_fluent_text_more_24_regular, ()->toggleCheckableItem(marqueeItem)),
|
marqueeItem=new CheckableListItem<>(R.string.sk_settings_enable_marquee, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.toolbarMarquee, R.drawable.ic_fluent_text_more_24_regular, i->toggleCheckableItem(marqueeItem)),
|
||||||
reduceMotionItem=new CheckableListItem<>(R.string.sk_settings_reduce_motion, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.reduceMotion, R.drawable.ic_fluent_star_emphasis_24_regular, ()->toggleCheckableItem(reduceMotionItem)),
|
reduceMotionItem=new CheckableListItem<>(R.string.sk_settings_reduce_motion, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.reduceMotion, R.drawable.ic_fluent_star_emphasis_24_regular, i->toggleCheckableItem(reduceMotionItem)),
|
||||||
disableSwipeItem=new CheckableListItem<>(R.string.sk_settings_tabs_disable_swipe, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.disableSwipe, R.drawable.ic_fluent_swipe_right_24_regular, ()->toggleCheckableItem(disableSwipeItem)),
|
disableSwipeItem=new CheckableListItem<>(R.string.sk_settings_tabs_disable_swipe, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.disableSwipe, R.drawable.ic_fluent_swipe_right_24_regular, i->toggleCheckableItem(disableSwipeItem)),
|
||||||
altIndicatorItem=new CheckableListItem<>(R.string.sk_settings_show_alt_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showAltIndicator, R.drawable.ic_fluent_scan_text_24_regular, ()->toggleCheckableItem(altIndicatorItem)),
|
altIndicatorItem=new CheckableListItem<>(R.string.sk_settings_show_alt_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showAltIndicator, R.drawable.ic_fluent_scan_text_24_regular, i->toggleCheckableItem(altIndicatorItem)),
|
||||||
noAltIndicatorItem=new CheckableListItem<>(R.string.sk_settings_show_no_alt_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNoAltIndicator, R.drawable.ic_fluent_important_24_regular, ()->toggleCheckableItem(noAltIndicatorItem)),
|
noAltIndicatorItem=new CheckableListItem<>(R.string.sk_settings_show_no_alt_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNoAltIndicator, R.drawable.ic_fluent_important_24_regular, i->toggleCheckableItem(noAltIndicatorItem)),
|
||||||
collapsePostsItem=new CheckableListItem<>(R.string.sk_settings_collapse_long_posts, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.collapseLongPosts, R.drawable.ic_fluent_chevron_down_24_regular, ()->toggleCheckableItem(collapsePostsItem)),
|
collapsePostsItem=new CheckableListItem<>(R.string.sk_settings_collapse_long_posts, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.collapseLongPosts, R.drawable.ic_fluent_chevron_down_24_regular, i->toggleCheckableItem(collapsePostsItem)),
|
||||||
spectatorModeItem=new CheckableListItem<>(R.string.sk_settings_hide_interaction, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.spectatorMode, R.drawable.ic_fluent_star_off_24_regular, ()->toggleCheckableItem(spectatorModeItem)),
|
spectatorModeItem=new CheckableListItem<>(R.string.sk_settings_hide_interaction, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.spectatorMode, R.drawable.ic_fluent_star_off_24_regular, i->toggleCheckableItem(spectatorModeItem)),
|
||||||
hideFabItem=new CheckableListItem<>(R.string.sk_settings_hide_fab, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.autoHideFab, R.drawable.ic_fluent_edit_24_regular, ()->toggleCheckableItem(hideFabItem)),
|
hideFabItem=new CheckableListItem<>(R.string.sk_settings_hide_fab, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.autoHideFab, R.drawable.ic_fluent_edit_24_regular, i->toggleCheckableItem(hideFabItem)),
|
||||||
translateOpenedItem=new CheckableListItem<>(R.string.sk_settings_translate_only_opened, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.translateButtonOpenedOnly, R.drawable.ic_fluent_translate_24_regular, ()->toggleCheckableItem(translateOpenedItem)),
|
translateOpenedItem=new CheckableListItem<>(R.string.sk_settings_translate_only_opened, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.translateButtonOpenedOnly, R.drawable.ic_fluent_translate_24_regular, i->toggleCheckableItem(translateOpenedItem)),
|
||||||
likeIconItem=new CheckableListItem<>(R.string.sk_settings_like_icon, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.likeIcon, R.drawable.ic_fluent_heart_24_regular, ()->toggleCheckableItem(likeIconItem)),
|
likeIconItem=new CheckableListItem<>(R.string.sk_settings_like_icon, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.likeIcon, R.drawable.ic_fluent_heart_24_regular, i->toggleCheckableItem(likeIconItem)),
|
||||||
underlinedLinksItem=new CheckableListItem<>(R.string.sk_settings_underlined_links, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.underlinedLinks, R.drawable.ic_fluent_text_underline_24_regular, ()->toggleCheckableItem(underlinedLinksItem)),
|
underlinedLinksItem=new CheckableListItem<>(R.string.sk_settings_underlined_links, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.underlinedLinks, R.drawable.ic_fluent_text_underline_24_regular, i->toggleCheckableItem(underlinedLinksItem)),
|
||||||
disablePillItem=new CheckableListItem<>(R.string.sk_disable_pill_shaped_active_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.disableM3PillActiveIndicator, R.drawable.ic_fluent_pill_24_regular, ()->toggleCheckableItem(disablePillItem)),
|
disablePillItem=new CheckableListItem<>(R.string.sk_disable_pill_shaped_active_indicator, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.disableM3PillActiveIndicator, R.drawable.ic_fluent_pill_24_regular, i->toggleCheckableItem(disablePillItem)),
|
||||||
showNavigationLabelsItem=new CheckableListItem<>(R.string.sk_settings_show_labels_in_navigation_bar, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNavigationLabels, R.drawable.ic_fluent_tag_24_regular, ()->toggleCheckableItem(showNavigationLabelsItem), true),
|
showNavigationLabelsItem=new CheckableListItem<>(R.string.sk_settings_show_labels_in_navigation_bar, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.showNavigationLabels, R.drawable.ic_fluent_tag_24_regular, i->toggleCheckableItem(showNavigationLabelsItem), true),
|
||||||
pronounsInTimelinesItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_timelines, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInTimelines, 0, ()->toggleCheckableItem(pronounsInTimelinesItem)),
|
pronounsInTimelinesItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_timelines, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInTimelines, 0, i->toggleCheckableItem(pronounsInTimelinesItem)),
|
||||||
pronounsInThreadsItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_threads, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInThreads, 0, ()->toggleCheckableItem(pronounsInThreadsItem)),
|
pronounsInThreadsItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_threads, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInThreads, 0, i->toggleCheckableItem(pronounsInThreadsItem)),
|
||||||
pronounsInUserListingsItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_user_listings, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInUserListings, 0, ()->toggleCheckableItem(pronounsInUserListingsItem))
|
pronounsInUserListingsItem=new CheckableListItem<>(R.string.sk_settings_display_pronouns_in_user_listings, 0, CheckableListItem.Style.CHECKBOX, GlobalUserPreferences.displayPronounsInUserListings, 0, i->toggleCheckableItem(pronounsInUserListingsItem))
|
||||||
));
|
));
|
||||||
trueBlackModeItem.checkedChangeListener=checked->onTrueBlackModeClick();
|
trueBlackModeItem.checkedChangeListener=checked->onTrueBlackModeClick();
|
||||||
}
|
}
|
||||||
|
@ -166,7 +166,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment<Void>{
|
||||||
maybeApplyNewThemeRightNow(null, null, prev);
|
maybeApplyNewThemeRightNow(null, null, prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAppearanceClick(){
|
private void onAppearanceClick(ListItem<?> item_){
|
||||||
int selected=switch(GlobalUserPreferences.theme){
|
int selected=switch(GlobalUserPreferences.theme){
|
||||||
case LIGHT -> 0;
|
case LIGHT -> 0;
|
||||||
case DARK -> 1;
|
case DARK -> 1;
|
||||||
|
@ -197,7 +197,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment<Void>{
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onColorClick(){
|
private void onColorClick(ListItem<?> item_){
|
||||||
boolean multiple=AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1;
|
boolean multiple=AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1;
|
||||||
int indexOffset=multiple ? 1 : 0;
|
int indexOffset=multiple ? 1 : 0;
|
||||||
int selected=lp.color==null ? 0 : lp.color.ordinal() + indexOffset;
|
int selected=lp.color==null ? 0 : lp.color.ordinal() + indexOffset;
|
||||||
|
@ -234,7 +234,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment<Void>{
|
||||||
alert.show();
|
alert.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onPublishTextClick(){
|
private void onPublishTextClick(ListItem<?> item_){
|
||||||
TextInputFrameLayout input = new TextInputFrameLayout(
|
TextInputFrameLayout input = new TextInputFrameLayout(
|
||||||
getContext(),
|
getContext(),
|
||||||
getString(R.string.publish),
|
getString(R.string.publish),
|
||||||
|
@ -257,7 +257,7 @@ public class SettingsDisplayFragment extends BaseSettingsFragment<Void>{
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAutoRevealSpoilersClick(){
|
private void onAutoRevealSpoilersClick(ListItem<?> item_){
|
||||||
int selected=GlobalUserPreferences.autoRevealEqualSpoilers.ordinal();
|
int selected=GlobalUserPreferences.autoRevealEqualSpoilers.ordinal();
|
||||||
int[] newSelected={selected};
|
int[] newSelected={selected};
|
||||||
new M3AlertDialogBuilder(getActivity())
|
new M3AlertDialogBuilder(getActivity())
|
||||||
|
|
|
@ -67,16 +67,14 @@ public class SettingsFiltersFragment extends BaseSettingsFragment<Filter>{
|
||||||
Nav.go(getActivity(), EditFilterFragment.class, args);
|
Nav.go(getActivity(), EditFilterFragment.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAddFilterClick(){
|
private void onAddFilterClick(ListItem<?> item){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
Nav.go(getActivity(), EditFilterFragment.class, args);
|
Nav.go(getActivity(), EditFilterFragment.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ListItem<Filter> makeListItem(Filter f){
|
private ListItem<Filter> makeListItem(Filter f){
|
||||||
ListItem<Filter> item=new ListItem<>(f.title, getString(f.isActive() ? R.string.filter_active : R.string.filter_inactive), null, f);
|
ListItem<Filter> item=new ListItem<>(f.title, getString(f.isActive() ? R.string.filter_active : R.string.filter_inactive), this::onFilterClick, f);
|
||||||
item.onClick=()->onFilterClick(item);
|
|
||||||
item.isEnabled=true;
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,15 +36,15 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||||
lp=s.getLocalPreferences();
|
lp=s.getLocalPreferences();
|
||||||
onDataLoaded(List.of(
|
onDataLoaded(List.of(
|
||||||
new ListItem<>(AccountSessionManager.get(accountID).domain, getString(R.string.settings_server_explanation), R.drawable.ic_fluent_server_24_regular, this::onServerClick),
|
new ListItem<>(AccountSessionManager.get(accountID).domain, getString(R.string.settings_server_explanation), R.drawable.ic_fluent_server_24_regular, this::onServerClick),
|
||||||
new ListItem<>(R.string.sk_settings_profile, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/settings/profile")),
|
new ListItem<>(R.string.sk_settings_profile, 0, R.drawable.ic_fluent_open_24_regular, i->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/settings/profile")),
|
||||||
new ListItem<>(R.string.sk_settings_posting, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/settings/preferences/other")),
|
new ListItem<>(R.string.sk_settings_posting, 0, R.drawable.ic_fluent_open_24_regular, i->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/settings/preferences/other")),
|
||||||
new ListItem<>(R.string.sk_settings_auth, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/auth/edit"), 0, true),
|
new ListItem<>(R.string.sk_settings_auth, 0, R.drawable.ic_fluent_open_24_regular, i->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/auth/edit"), 0, true),
|
||||||
contentTypesItem=new CheckableListItem<>(R.string.sk_settings_content_types, R.string.sk_settings_content_types_explanation, CheckableListItem.Style.SWITCH, lp.contentTypesEnabled, R.drawable.ic_fluent_text_edit_style_24_regular, this::onContentTypeClick),
|
contentTypesItem=new CheckableListItem<>(R.string.sk_settings_content_types, R.string.sk_settings_content_types_explanation, CheckableListItem.Style.SWITCH, lp.contentTypesEnabled, R.drawable.ic_fluent_text_edit_style_24_regular, i->onContentTypeClick()),
|
||||||
defaultContentTypeItem=new ListItem<>(R.string.sk_settings_default_content_type, lp.defaultContentType.getName(), R.drawable.ic_fluent_text_bold_24_regular, this::onDefaultContentTypeClick, 0, true),
|
defaultContentTypeItem=new ListItem<>(R.string.sk_settings_default_content_type, lp.defaultContentType.getName(), R.drawable.ic_fluent_text_bold_24_regular, this::onDefaultContentTypeClick, 0, true),
|
||||||
emojiReactionsItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions, R.string.sk_settings_emoji_reactions_explanation, CheckableListItem.Style.SWITCH, lp.emojiReactionsEnabled, R.drawable.ic_fluent_emoji_laugh_24_regular, this::onEmojiReactionsClick),
|
emojiReactionsItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions, R.string.sk_settings_emoji_reactions_explanation, CheckableListItem.Style.SWITCH, lp.emojiReactionsEnabled, R.drawable.ic_fluent_emoji_laugh_24_regular, i->onEmojiReactionsClick()),
|
||||||
showEmojiReactionsItem=new ListItem<>(R.string.sk_settings_show_emoji_reactions, getShowEmojiReactionsString(), R.drawable.ic_fluent_emoji_24_regular, this::onShowEmojiReactionsClick, 0, true),
|
showEmojiReactionsItem=new ListItem<>(R.string.sk_settings_show_emoji_reactions, getShowEmojiReactionsString(), R.drawable.ic_fluent_emoji_24_regular, this::onShowEmojiReactionsClick, 0, true),
|
||||||
localOnlyItem=new CheckableListItem<>(R.string.sk_settings_support_local_only, R.string.sk_settings_local_only_explanation, CheckableListItem.Style.SWITCH, lp.localOnlySupported, R.drawable.ic_fluent_eye_24_regular, this::onLocalOnlyClick),
|
localOnlyItem=new CheckableListItem<>(R.string.sk_settings_support_local_only, R.string.sk_settings_local_only_explanation, CheckableListItem.Style.SWITCH, lp.localOnlySupported, R.drawable.ic_fluent_eye_24_regular, i->onLocalOnlyClick()),
|
||||||
glitchModeItem=new CheckableListItem<>(R.string.sk_settings_glitch_instance, R.string.sk_settings_glitch_mode_explanation, CheckableListItem.Style.SWITCH, lp.glitchInstance, R.drawable.ic_fluent_eye_24_filled, ()->toggleCheckableItem(glitchModeItem))
|
glitchModeItem=new CheckableListItem<>(R.string.sk_settings_glitch_instance, R.string.sk_settings_glitch_mode_explanation, CheckableListItem.Style.SWITCH, lp.glitchInstance, R.drawable.ic_fluent_eye_24_filled, i->toggleCheckableItem(glitchModeItem))
|
||||||
));
|
));
|
||||||
contentTypesItem.checkedChangeListener=checked->onContentTypeClick();
|
contentTypesItem.checkedChangeListener=checked->onContentTypeClick();
|
||||||
defaultContentTypeItem.isEnabled=contentTypesItem.checked;
|
defaultContentTypeItem.isEnabled=contentTypesItem.checked;
|
||||||
|
@ -68,7 +68,7 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||||
E.post(new StatusDisplaySettingsChangedEvent(accountID));
|
E.post(new StatusDisplaySettingsChangedEvent(accountID));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onServerClick(){
|
private void onServerClick(ListItem<?> item){
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
Nav.go(getActivity(), SettingsServerFragment.class, args);
|
Nav.go(getActivity(), SettingsServerFragment.class, args);
|
||||||
|
@ -87,7 +87,7 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||||
defaultContentTypeItem.subtitleRes=lp.defaultContentType.getName();
|
defaultContentTypeItem.subtitleRes=lp.defaultContentType.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDefaultContentTypeClick(){
|
private void onDefaultContentTypeClick(ListItem<?> item_){
|
||||||
int selected=lp.defaultContentType.ordinal();
|
int selected=lp.defaultContentType.ordinal();
|
||||||
int[] newSelected={selected};
|
int[] newSelected={selected};
|
||||||
ContentType[] supportedContentTypes=Arrays.stream(ContentType.values())
|
ContentType[] supportedContentTypes=Arrays.stream(ContentType.values())
|
||||||
|
@ -112,7 +112,7 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onShowEmojiReactionsClick(){
|
private void onShowEmojiReactionsClick(ListItem<?> item_){
|
||||||
int selected=lp.showEmojiReactions.ordinal();
|
int selected=lp.showEmojiReactions.ordinal();
|
||||||
int[] newSelected={selected};
|
int[] newSelected={selected};
|
||||||
new M3AlertDialogBuilder(getActivity())
|
new M3AlertDialogBuilder(getActivity())
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.events.SelfUpdateStateChangedEvent;
|
import org.joinmastodon.android.events.SelfUpdateStateChangedEvent;
|
||||||
import org.joinmastodon.android.model.Instance;
|
import org.joinmastodon.android.model.Instance;
|
||||||
import org.joinmastodon.android.model.viewmodel.ListItem;
|
import org.joinmastodon.android.model.viewmodel.ListItem;
|
||||||
|
import org.joinmastodon.android.ui.AccountSwitcherSheet;
|
||||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||||
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
|
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
@ -59,6 +60,7 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
|
||||||
new ListItem<>(R.string.settings_notifications, 0, R.drawable.ic_fluent_alert_24_regular, this::onNotificationsClick),
|
new ListItem<>(R.string.settings_notifications, 0, R.drawable.ic_fluent_alert_24_regular, this::onNotificationsClick),
|
||||||
new ListItem<>(R.string.sk_settings_instance, 0, R.drawable.ic_fluent_server_24_regular, this::onInstanceClick),
|
new ListItem<>(R.string.sk_settings_instance, 0, R.drawable.ic_fluent_server_24_regular, this::onInstanceClick),
|
||||||
new ListItem<>(getString(R.string.about_app, getString(R.string.sk_app_name)), null, R.drawable.ic_fluent_info_24_regular, this::onAboutClick, null, 0, true),
|
new ListItem<>(getString(R.string.about_app, getString(R.string.sk_app_name)), null, R.drawable.ic_fluent_info_24_regular, this::onAboutClick, null, 0, true),
|
||||||
|
new ListItem<>(R.string.manage_accounts, 0, R.drawable.ic_fluent_person_swap_24_regular, this::onManageAccountsClick),
|
||||||
new ListItem<>(R.string.log_out, 0, R.drawable.ic_fluent_sign_out_24_regular, this::onLogOutClick, R.attr.colorM3Error, false)
|
new ListItem<>(R.string.log_out, 0, R.drawable.ic_fluent_sign_out_24_regular, this::onLogOutClick, R.attr.colorM3Error, false)
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -67,7 +69,7 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
|
||||||
data.add(3, new ListItem<>(R.string.settings_filters, 0, R.drawable.ic_fluent_filter_24_regular, this::onFiltersClick));
|
data.add(3, new ListItem<>(R.string.settings_filters, 0, R.drawable.ic_fluent_filter_24_regular, this::onFiltersClick));
|
||||||
|
|
||||||
if(BuildConfig.DEBUG || BuildConfig.BUILD_TYPE.equals("appcenterPrivateBeta")){
|
if(BuildConfig.DEBUG || BuildConfig.BUILD_TYPE.equals("appcenterPrivateBeta")){
|
||||||
data.add(0, new ListItem<>("Debug settings", null, R.drawable.ic_fluent_wrench_screwdriver_24_regular, ()->Nav.go(getActivity(), SettingsDebugFragment.class, makeFragmentArgs()), null, 0, true));
|
data.add(0, new ListItem<>("Debug settings", null, R.drawable.ic_fluent_wrench_screwdriver_24_regular, i->Nav.go(getActivity(), SettingsDebugFragment.class, makeFragmentArgs()), null, 0, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
AccountSession session=AccountSessionManager.get(accountID);
|
AccountSession session=AccountSessionManager.get(accountID);
|
||||||
|
@ -128,35 +130,39 @@ public class SettingsMainFragment extends BaseSettingsFragment<Void>{
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onBehaviorClick(){
|
private void onBehaviorClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsBehaviorFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsBehaviorFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDisplayClick(){
|
private void onDisplayClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsDisplayFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsDisplayFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onPrivacyClick(){
|
private void onPrivacyClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsPrivacyFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsPrivacyFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onFiltersClick(){
|
private void onFiltersClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsFiltersFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsFiltersFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onNotificationsClick(){
|
private void onNotificationsClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsNotificationsFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsNotificationsFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onInstanceClick(){
|
private void onInstanceClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsInstanceFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsInstanceFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onAboutClick(){
|
private void onAboutClick(ListItem<?> item_){
|
||||||
Nav.go(getActivity(), SettingsAboutAppFragment.class, makeFragmentArgs());
|
Nav.go(getActivity(), SettingsAboutAppFragment.class, makeFragmentArgs());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onLogOutClick(){
|
private void onManageAccountsClick(ListItem<?> item){
|
||||||
|
new AccountSwitcherSheet(getActivity(), null).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onLogOutClick(ListItem<?> item_){
|
||||||
AccountSession session=AccountSessionManager.getInstance().getAccount(accountID);
|
AccountSession session=AccountSessionManager.getInstance().getAccount(accountID);
|
||||||
new M3AlertDialogBuilder(getActivity())
|
new M3AlertDialogBuilder(getActivity())
|
||||||
.setMessage(getString(R.string.confirm_log_out, session.getFullUsername()))
|
.setMessage(getString(R.string.confirm_log_out, session.getFullUsername()))
|
||||||
|
|
|
@ -27,7 +27,6 @@ import org.joinmastodon.android.model.viewmodel.ListItem;
|
||||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||||
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
|
import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
import org.unifiedpush.android.connector.RegistrationDialogContent;
|
|
||||||
import org.unifiedpush.android.connector.UnifiedPush;
|
import org.unifiedpush.android.connector.UnifiedPush;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
@ -73,21 +72,21 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
||||||
useUnifiedPush=!getDistributor(getContext()).isEmpty();
|
useUnifiedPush=!getDistributor(getContext()).isEmpty();
|
||||||
|
|
||||||
onDataLoaded(List.of(
|
onDataLoaded(List.of(
|
||||||
pauseItem=new CheckableListItem<>(getString(R.string.pause_all_notifications), getPauseItemSubtitle(), CheckableListItem.Style.SWITCH, false, R.drawable.ic_fluent_alert_snooze_24_regular, ()->onPauseNotificationsClick(false)),
|
pauseItem=new CheckableListItem<>(getString(R.string.pause_all_notifications), getPauseItemSubtitle(), CheckableListItem.Style.SWITCH, false, R.drawable.ic_fluent_alert_snooze_24_regular, i->onPauseNotificationsClick(false)),
|
||||||
policyItem=new ListItem<>(R.string.settings_notifications_policy, 0, R.drawable.ic_fluent_people_24_regular, this::onNotificationsPolicyClick, 0, true),
|
policyItem=new ListItem<>(R.string.settings_notifications_policy, 0, R.drawable.ic_fluent_people_24_regular, this::onNotificationsPolicyClick, 0, true),
|
||||||
|
|
||||||
mentionsItem=new CheckableListItem<>(R.string.notification_type_mentions_and_replies, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.mention, R.drawable.ic_fluent_mention_24_regular, ()->toggleCheckableItem(mentionsItem)),
|
mentionsItem=new CheckableListItem<>(R.string.notification_type_mentions_and_replies, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.mention, R.drawable.ic_fluent_mention_24_regular, i->toggleCheckableItem(mentionsItem)),
|
||||||
boostsItem=new CheckableListItem<>(R.string.notification_type_reblog, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.reblog, R.drawable.ic_fluent_arrow_repeat_all_24_regular, ()->toggleCheckableItem(boostsItem)),
|
boostsItem=new CheckableListItem<>(R.string.notification_type_reblog, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.reblog, R.drawable.ic_fluent_arrow_repeat_all_24_regular, i->toggleCheckableItem(boostsItem)),
|
||||||
favoritesItem=new CheckableListItem<>(R.string.notification_type_favorite, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.favourite, R.drawable.ic_fluent_star_24_regular, ()->toggleCheckableItem(favoritesItem)),
|
favoritesItem=new CheckableListItem<>(R.string.notification_type_favorite, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.favourite, R.drawable.ic_fluent_star_24_regular, i->toggleCheckableItem(favoritesItem)),
|
||||||
followersItem=new CheckableListItem<>(R.string.notification_type_follow, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.follow, R.drawable.ic_fluent_person_add_24_regular, ()->toggleCheckableItem(followersItem)),
|
followersItem=new CheckableListItem<>(R.string.notification_type_follow, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.follow, R.drawable.ic_fluent_person_add_24_regular, i->toggleCheckableItem(followersItem)),
|
||||||
pollsItem=new CheckableListItem<>(R.string.notification_type_poll, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.poll, R.drawable.ic_fluent_poll_24_regular, ()->toggleCheckableItem(pollsItem)),
|
pollsItem=new CheckableListItem<>(R.string.notification_type_poll, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.poll, R.drawable.ic_fluent_poll_24_regular, i->toggleCheckableItem(pollsItem)),
|
||||||
updateItem=new CheckableListItem<>(R.string.sk_notification_type_update, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.update, R.drawable.ic_fluent_history_24_regular, ()->toggleCheckableItem(updateItem)),
|
updateItem=new CheckableListItem<>(R.string.sk_notification_type_update, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.update, R.drawable.ic_fluent_history_24_regular, i->toggleCheckableItem(updateItem)),
|
||||||
postsItem=new CheckableListItem<>(R.string.sk_notification_type_posts, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.status, R.drawable.ic_fluent_chat_24_regular, ()->toggleCheckableItem(postsItem), true),
|
postsItem=new CheckableListItem<>(R.string.sk_notification_type_posts, 0, CheckableListItem.Style.CHECKBOX, pushSubscription.alerts.status, R.drawable.ic_fluent_chat_24_regular, i->toggleCheckableItem(postsItem), true),
|
||||||
|
|
||||||
uniformIconItem=new CheckableListItem<>(R.string.sk_settings_uniform_icon_for_notifications, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.uniformNotificationIcon, R.drawable.ic_ntf_logo, ()->toggleCheckableItem(uniformIconItem)),
|
uniformIconItem=new CheckableListItem<>(R.string.sk_settings_uniform_icon_for_notifications, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.uniformNotificationIcon, R.drawable.ic_ntf_logo, i->toggleCheckableItem(uniformIconItem)),
|
||||||
deleteItem=new CheckableListItem<>(R.string.sk_settings_enable_delete_notifications, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.enableDeleteNotifications, R.drawable.ic_fluent_mail_inbox_dismiss_24_regular, ()->toggleCheckableItem(deleteItem)),
|
deleteItem=new CheckableListItem<>(R.string.sk_settings_enable_delete_notifications, 0, CheckableListItem.Style.SWITCH, GlobalUserPreferences.enableDeleteNotifications, R.drawable.ic_fluent_mail_inbox_dismiss_24_regular, i->toggleCheckableItem(deleteItem)),
|
||||||
onlyLatestItem=new CheckableListItem<>(R.string.sk_settings_single_notification, 0, CheckableListItem.Style.SWITCH, lp.keepOnlyLatestNotification, R.drawable.ic_fluent_convert_range_24_regular, ()->toggleCheckableItem(onlyLatestItem), true),
|
onlyLatestItem=new CheckableListItem<>(R.string.sk_settings_single_notification, 0, CheckableListItem.Style.SWITCH, lp.keepOnlyLatestNotification, R.drawable.ic_fluent_convert_range_24_regular, i->toggleCheckableItem(onlyLatestItem), true),
|
||||||
unifiedPushItem=new CheckableListItem<>(R.string.sk_settings_unifiedpush, 0, CheckableListItem.Style.SWITCH, useUnifiedPush, R.drawable.ic_fluent_alert_arrow_up_24_regular, this::onUnifiedPush, true)
|
unifiedPushItem=new CheckableListItem<>(R.string.sk_settings_unifiedpush, 0, CheckableListItem.Style.SWITCH, useUnifiedPush, R.drawable.ic_fluent_alert_arrow_up_24_regular, i->onUnifiedPushClick(), true)
|
||||||
));
|
));
|
||||||
|
|
||||||
//only enable when distributors, who can receive notifications, are available
|
//only enable when distributors, who can receive notifications, are available
|
||||||
|
@ -98,7 +97,7 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
||||||
|
|
||||||
typeItems=List.of(mentionsItem, boostsItem, favoritesItem, followersItem, pollsItem, updateItem, postsItem);
|
typeItems=List.of(mentionsItem, boostsItem, favoritesItem, followersItem, pollsItem, updateItem, postsItem);
|
||||||
pauseItem.checkedChangeListener=checked->onPauseNotificationsClick(true);
|
pauseItem.checkedChangeListener=checked->onPauseNotificationsClick(true);
|
||||||
unifiedPushItem.checkedChangeListener=checked->onUnifiedPush();
|
unifiedPushItem.checkedChangeListener=checked->onUnifiedPushClick();
|
||||||
updatePolicyItem(null);
|
updatePolicyItem(null);
|
||||||
updatePauseItem();
|
updatePauseItem();
|
||||||
}
|
}
|
||||||
|
@ -254,7 +253,7 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
||||||
alert.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
|
alert.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onNotificationsPolicyClick(){
|
private void onNotificationsPolicyClick(ListItem<?> item_){
|
||||||
String[] items=Stream.of(
|
String[] items=Stream.of(
|
||||||
R.string.notifications_policy_anyone,
|
R.string.notifications_policy_anyone,
|
||||||
R.string.notifications_policy_followed,
|
R.string.notifications_policy_followed,
|
||||||
|
@ -328,7 +327,7 @@ public class SettingsNotificationsFragment extends BaseSettingsFragment<Void>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onUnifiedPush(){
|
private void onUnifiedPushClick(){
|
||||||
if(getDistributor(getContext()).isEmpty()){
|
if(getDistributor(getContext()).isEmpty()){
|
||||||
List<String> distributors = UnifiedPush.getDistributors(getContext(), new ArrayList<>());
|
List<String> distributors = UnifiedPush.getDistributors(getContext(), new ArrayList<>());
|
||||||
showUnifiedPushRegisterDialog(distributors);
|
showUnifiedPushRegisterDialog(distributors);
|
||||||
|
|
|
@ -18,8 +18,8 @@ public class SettingsPrivacyFragment extends BaseSettingsFragment<Void>{
|
||||||
setTitle(R.string.settings_privacy);
|
setTitle(R.string.settings_privacy);
|
||||||
Account self=AccountSessionManager.get(accountID).self;
|
Account self=AccountSessionManager.get(accountID).self;
|
||||||
onDataLoaded(List.of(
|
onDataLoaded(List.of(
|
||||||
discoverableItem=new CheckableListItem<>(R.string.settings_discoverable, 0, CheckableListItem.Style.SWITCH, self.discoverable, R.drawable.ic_fluent_thumb_like_dislike_24_regular, ()->toggleCheckableItem(discoverableItem)),
|
discoverableItem=new CheckableListItem<>(R.string.settings_discoverable, 0, CheckableListItem.Style.SWITCH, self.discoverable, R.drawable.ic_fluent_thumb_like_dislike_24_regular, i->toggleCheckableItem(discoverableItem)),
|
||||||
indexableItem=new CheckableListItem<>(R.string.settings_indexable, 0, CheckableListItem.Style.SWITCH, self.source.indexable!=null ? self.source.indexable : true, R.drawable.ic_fluent_search_24_regular, ()->toggleCheckableItem(indexableItem))
|
indexableItem=new CheckableListItem<>(R.string.settings_indexable, 0, CheckableListItem.Style.SWITCH, self.source.indexable!=null ? self.source.indexable : true, R.drawable.ic_fluent_search_24_regular, i->toggleCheckableItem(indexableItem))
|
||||||
));
|
));
|
||||||
if(self.source.indexable==null)
|
if(self.source.indexable==null)
|
||||||
indexableItem.isEnabled=false;
|
indexableItem.isEnabled=false;
|
||||||
|
|
|
@ -145,7 +145,7 @@ public class SettingsServerAboutFragment extends LoaderFragment{
|
||||||
if(!TextUtils.isEmpty(instance.email)){
|
if(!TextUtils.isEmpty(instance.email)){
|
||||||
needDivider=true;
|
needDivider=true;
|
||||||
SimpleListItemViewHolder holder=new SimpleListItemViewHolder(getActivity(), scrollingLayout);
|
SimpleListItemViewHolder holder=new SimpleListItemViewHolder(getActivity(), scrollingLayout);
|
||||||
ListItem<Void> item=new ListItem<>(R.string.send_email_to_server_admin, 0, R.drawable.ic_fluent_mail_24_regular, ()->{});
|
ListItem<Void> item=new ListItem<>(R.string.send_email_to_server_admin, 0, R.drawable.ic_fluent_mail_24_regular, i->{});
|
||||||
holder.bind(item);
|
holder.bind(item);
|
||||||
holder.itemView.setBackground(UiUtils.getThemeDrawable(getActivity(), android.R.attr.selectableItemBackground));
|
holder.itemView.setBackground(UiUtils.getThemeDrawable(getActivity(), android.R.attr.selectableItemBackground));
|
||||||
holder.itemView.setOnClickListener(v->openAdminEmail());
|
holder.itemView.setOnClickListener(v->openAdminEmail());
|
||||||
|
|
|
@ -9,42 +9,42 @@ public class CheckableListItem<T> extends ListItem<T>{
|
||||||
public boolean checked;
|
public boolean checked;
|
||||||
public Consumer<Boolean> checkedChangeListener;
|
public Consumer<Boolean> checkedChangeListener;
|
||||||
|
|
||||||
public CheckableListItem(String title, String subtitle, Style style, boolean checked, int iconRes, Runnable onClick, T parentObject, boolean dividerAfter){
|
public CheckableListItem(String title, String subtitle, Style style, boolean checked, int iconRes, Consumer<CheckableListItem<T>> onClick, T parentObject, boolean dividerAfter){
|
||||||
super(title, subtitle, iconRes, onClick, parentObject, 0, dividerAfter);
|
super(title, subtitle, iconRes, (Consumer<ListItem<T>>)(Object)onClick, parentObject, 0, dividerAfter);
|
||||||
this.style=style;
|
this.style=style;
|
||||||
this.checked=checked;
|
this.checked=checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(String title, String subtitle, Style style, boolean checked, Runnable onClick){
|
public CheckableListItem(String title, String subtitle, Style style, boolean checked, Consumer<CheckableListItem<T>> onClick){
|
||||||
this(title, subtitle, style, checked, 0, onClick, null, false);
|
this(title, subtitle, style, checked, 0, onClick, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(String title, String subtitle, Style style, boolean checked, Runnable onClick, T parentObject){
|
public CheckableListItem(String title, String subtitle, Style style, boolean checked, Consumer<CheckableListItem<T>> onClick, T parentObject){
|
||||||
this(title, subtitle, style, checked, 0, onClick, parentObject, false);
|
this(title, subtitle, style, checked, 0, onClick, parentObject, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(String title, String subtitle, Style style, boolean checked, int iconRes, Runnable onClick){
|
public CheckableListItem(String title, String subtitle, Style style, boolean checked, int iconRes, Consumer<CheckableListItem<T>> onClick){
|
||||||
this(title, subtitle, style, checked, iconRes, onClick, null, false);
|
this(title, subtitle, style, checked, iconRes, onClick, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(String title, String subtitle, Style style, boolean checked, int iconRes, Runnable onClick, T parentObject){
|
public CheckableListItem(String title, String subtitle, Style style, boolean checked, int iconRes, Consumer<CheckableListItem<T>> onClick, T parentObject){
|
||||||
this(title, subtitle, style, checked, iconRes, onClick, parentObject, false);
|
this(title, subtitle, style, checked, iconRes, onClick, parentObject, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, Runnable onClick){
|
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, Consumer<CheckableListItem<T>> onClick){
|
||||||
this(titleRes, subtitleRes, style, checked, 0, onClick, false);
|
this(titleRes, subtitleRes, style, checked, 0, onClick, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, Runnable onClick, boolean dividerAfter){
|
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, Consumer<CheckableListItem<T>> onClick, boolean dividerAfter){
|
||||||
this(titleRes, subtitleRes, style, checked, 0, onClick, dividerAfter);
|
this(titleRes, subtitleRes, style, checked, 0, onClick, dividerAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, int iconRes, Runnable onClick){
|
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, int iconRes, Consumer<CheckableListItem<T>> onClick){
|
||||||
this(titleRes, subtitleRes, style, checked, iconRes, onClick, false);
|
this(titleRes, subtitleRes, style, checked, iconRes, onClick, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, int iconRes, Runnable onClick, boolean dividerAfter){
|
public CheckableListItem(int titleRes, int subtitleRes, Style style, boolean checked, int iconRes, Consumer<CheckableListItem<T>> onClick, boolean dividerAfter){
|
||||||
super(titleRes, subtitleRes, iconRes, onClick, 0, dividerAfter);
|
super(titleRes, subtitleRes, iconRes, (Consumer<ListItem<T>>)(Object)onClick, 0, dividerAfter);
|
||||||
this.style=style;
|
this.style=style;
|
||||||
this.checked=checked;
|
this.checked=checked;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@ package org.joinmastodon.android.model.viewmodel;
|
||||||
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
|
|
||||||
|
@ -16,11 +18,11 @@ public class ListItem<T>{
|
||||||
public int iconRes;
|
public int iconRes;
|
||||||
public int colorOverrideAttr;
|
public int colorOverrideAttr;
|
||||||
public boolean dividerAfter;
|
public boolean dividerAfter;
|
||||||
public Runnable onClick;
|
private Consumer<ListItem<T>> onClick;
|
||||||
public boolean isEnabled=true;
|
public boolean isEnabled=true;
|
||||||
public T parentObject;
|
public T parentObject;
|
||||||
|
|
||||||
public ListItem(String title, String subtitle, int iconRes, Runnable onClick, T parentObject, int colorOverrideAttr, boolean dividerAfter){
|
public ListItem(String title, String subtitle, int iconRes, Consumer<ListItem<T>> onClick, T parentObject, int colorOverrideAttr, boolean dividerAfter){
|
||||||
this.title=title;
|
this.title=title;
|
||||||
this.subtitle=subtitle;
|
this.subtitle=subtitle;
|
||||||
this.iconRes=iconRes;
|
this.iconRes=iconRes;
|
||||||
|
@ -32,45 +34,41 @@ public class ListItem<T>{
|
||||||
isEnabled=false;
|
isEnabled=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(String title, String subtitle, Runnable onClick){
|
public ListItem(String title, String subtitle, Consumer<ListItem<T>> onClick){
|
||||||
this(title, subtitle, 0, onClick, null, 0, false);
|
this(title, subtitle, 0, onClick, null, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(String title, String subtitle, Runnable onClick, T parentObject){
|
public ListItem(String title, String subtitle, Consumer<ListItem<T>> onClick, T parentObject){
|
||||||
this(title, subtitle, 0, onClick, parentObject, 0, false);
|
this(title, subtitle, 0, onClick, parentObject, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(String title, String subtitle, @DrawableRes int iconRes, Runnable onClick){
|
public ListItem(String title, String subtitle, @DrawableRes int iconRes, Consumer<ListItem<T>> onClick){
|
||||||
this(title, subtitle, iconRes, onClick, null, 0, false);
|
this(title, subtitle, iconRes, onClick, null, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(String title, String subtitle, @DrawableRes int iconRes, Runnable onClick, boolean dividerAfter){
|
public ListItem(String title, String subtitle, @DrawableRes int iconRes, Consumer<ListItem<T>> onClick, T parentObject){
|
||||||
this(title, subtitle, iconRes, onClick, null, 0, dividerAfter);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ListItem(String title, String subtitle, @DrawableRes int iconRes, Runnable onClick, T parentObject){
|
|
||||||
this(title, subtitle, iconRes, onClick, parentObject, 0, false);
|
this(title, subtitle, iconRes, onClick, parentObject, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, Runnable onClick){
|
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, Consumer<ListItem<T>> onClick){
|
||||||
this(null, null, 0, onClick, null, 0, false);
|
this(null, null, 0, onClick, null, 0, false);
|
||||||
this.titleRes=titleRes;
|
this.titleRes=titleRes;
|
||||||
this.subtitleRes=subtitleRes;
|
this.subtitleRes=subtitleRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, Runnable onClick, int colorOverrideAttr, boolean dividerAfter){
|
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, Consumer<ListItem<T>> onClick, int colorOverrideAttr, boolean dividerAfter){
|
||||||
this(null, null, 0, onClick, null, colorOverrideAttr, dividerAfter);
|
this(null, null, 0, onClick, null, colorOverrideAttr, dividerAfter);
|
||||||
this.titleRes=titleRes;
|
this.titleRes=titleRes;
|
||||||
this.subtitleRes=subtitleRes;
|
this.subtitleRes=subtitleRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, @DrawableRes int iconRes, Runnable onClick){
|
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, @DrawableRes int iconRes, Consumer<ListItem<T>> onClick){
|
||||||
this(null, null, iconRes, onClick, null, 0, false);
|
this(null, null, iconRes, onClick, null, 0, false);
|
||||||
this.titleRes=titleRes;
|
this.titleRes=titleRes;
|
||||||
this.subtitleRes=subtitleRes;
|
this.subtitleRes=subtitleRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, @DrawableRes int iconRes, Runnable onClick, int colorOverrideAttr, boolean dividerAfter){
|
public ListItem(@StringRes int titleRes, @StringRes int subtitleRes, @DrawableRes int iconRes, Consumer<ListItem<T>> onClick, int colorOverrideAttr, boolean dividerAfter){
|
||||||
this(null, null, iconRes, onClick, null, colorOverrideAttr, dividerAfter);
|
this(null, null, iconRes, onClick, null, colorOverrideAttr, dividerAfter);
|
||||||
this.titleRes=titleRes;
|
this.titleRes=titleRes;
|
||||||
this.subtitleRes=subtitleRes;
|
this.subtitleRes=subtitleRes;
|
||||||
|
@ -79,4 +77,13 @@ public class ListItem<T>{
|
||||||
public int getItemViewType(){
|
public int getItemViewType(){
|
||||||
return colorOverrideAttr==0 ? R.id.list_item_simple : R.id.list_item_simple_tinted;
|
return colorOverrideAttr==0 ? R.id.list_item_simple : R.id.list_item_simple_tinted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void performClick(){
|
||||||
|
if(onClick!=null)
|
||||||
|
onClick.accept(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <I extends ListItem<T>> void setOnClick(Consumer<I> onClick){
|
||||||
|
this.onClick=(Consumer<ListItem<T>>) onClick;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
package org.joinmastodon.android.ui.utils;
|
||||||
|
|
||||||
|
import android.animation.Animator;
|
||||||
|
import android.animation.AnimatorListenerAdapter;
|
||||||
|
import android.animation.IntEvaluator;
|
||||||
|
import android.animation.ObjectAnimator;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.view.ActionMode;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
import org.joinmastodon.android.R;
|
||||||
|
|
||||||
|
import java.util.function.IntSupplier;
|
||||||
|
|
||||||
|
import me.grishka.appkit.FragmentStackActivity;
|
||||||
|
import me.grishka.appkit.fragments.AppKitFragment;
|
||||||
|
|
||||||
|
public class ActionModeHelper{
|
||||||
|
public static ActionMode startActionMode(AppKitFragment fragment, IntSupplier statusBarColorSupplier, ActionMode.Callback callback){
|
||||||
|
FragmentStackActivity activity=(FragmentStackActivity) fragment.getActivity();
|
||||||
|
return activity.startActionMode(new ActionMode.Callback(){
|
||||||
|
@Override
|
||||||
|
public boolean onCreateActionMode(ActionMode mode, Menu menu){
|
||||||
|
if(!callback.onCreateActionMode(mode, menu))
|
||||||
|
return false;
|
||||||
|
ObjectAnimator anim=ObjectAnimator.ofInt(activity.getWindow(), "statusBarColor", statusBarColorSupplier.getAsInt(), UiUtils.getThemeColor(activity, R.attr.colorM3Primary));
|
||||||
|
anim.setEvaluator(new IntEvaluator(){
|
||||||
|
@Override
|
||||||
|
public Integer evaluate(float fraction, Integer startValue, Integer endValue){
|
||||||
|
return UiUtils.alphaBlendColors(startValue, endValue, fraction);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
anim.start();
|
||||||
|
activity.invalidateSystemBarColors(fragment);
|
||||||
|
View fakeView=new View(activity);
|
||||||
|
// mode.setCustomView(fakeView);
|
||||||
|
// int buttonID=activity.getResources().getIdentifier("action_mode_close_button", "id", "android");
|
||||||
|
// View btn=activity.getWindow().getDecorView().findViewById(buttonID);
|
||||||
|
// if(btn!=null){
|
||||||
|
// ((ViewGroup.MarginLayoutParams)btn.getLayoutParams()).setMarginEnd(0);
|
||||||
|
// }
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPrepareActionMode(ActionMode mode, Menu menu){
|
||||||
|
if(!callback.onPrepareActionMode(mode, menu))
|
||||||
|
return false;
|
||||||
|
for(int i=0;i<menu.size();i++){
|
||||||
|
Drawable icon=menu.getItem(i).getIcon();
|
||||||
|
if(icon!=null){
|
||||||
|
icon=icon.mutate();
|
||||||
|
icon.setTint(UiUtils.getThemeColor(activity, R.attr.colorM3OnPrimary));
|
||||||
|
menu.getItem(i).setIcon(icon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onActionItemClicked(ActionMode mode, MenuItem item){
|
||||||
|
return callback.onActionItemClicked(mode, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyActionMode(ActionMode mode){
|
||||||
|
ObjectAnimator anim=ObjectAnimator.ofInt(activity.getWindow(), "statusBarColor", UiUtils.getThemeColor(activity, R.attr.colorM3Primary), statusBarColorSupplier.getAsInt());
|
||||||
|
anim.setEvaluator(new IntEvaluator(){
|
||||||
|
@Override
|
||||||
|
public Integer evaluate(float fraction, Integer startValue, Integer endValue){
|
||||||
|
return UiUtils.alphaBlendColors(startValue, endValue, fraction);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
anim.addListener(new AnimatorListenerAdapter(){
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation){
|
||||||
|
activity.getWindow().setStatusBarColor(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
anim.start();
|
||||||
|
activity.invalidateSystemBarColors(fragment);
|
||||||
|
callback.onDestroyActionMode(mode);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -73,6 +73,6 @@ public abstract class ListItemViewHolder<T extends ListItem<?>> extends Bindable
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(){
|
public void onClick(){
|
||||||
item.onClick.run();
|
item.performClick();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -610,4 +610,44 @@
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<string name="error_playing_video">Error playing video</string>
|
<string name="error_playing_video">Error playing video</string>
|
||||||
|
<string name="timeline_following">Following</string>
|
||||||
|
<string name="lists">Lists</string>
|
||||||
|
<string name="followed_hashtags">Followed hashtags</string>
|
||||||
|
<string name="no_lists">You don\'t have any lists yet.</string>
|
||||||
|
<string name="no_followed_hashtags">You don\'t follow any hashtags.</string>
|
||||||
|
<string name="manage_lists">Manage lists</string>
|
||||||
|
<string name="manage_hashtags">Manage hashtags</string>
|
||||||
|
<!-- Screen reader description for the menu on the home timeline screen -->
|
||||||
|
<string name="dropdown_menu">Dropdown menu</string>
|
||||||
|
<string name="edit_list">Edit list</string>
|
||||||
|
<string name="list_members">List members</string>
|
||||||
|
<string name="delete_list">Delete list</string>
|
||||||
|
<!-- %s is the name of the list -->
|
||||||
|
<string name="delete_list_confirm">Delete “%s”?</string>
|
||||||
|
<string name="list_exclusive">Hide members in Following</string>
|
||||||
|
<string name="list_exclusive_subtitle">If someone is on this list, hide them in your Following timeline to avoid seeing their posts twice.</string>
|
||||||
|
<string name="list_name">List name</string>
|
||||||
|
<string name="list_show_replies_to">Show replies to</string>
|
||||||
|
<string name="list_replies_no_one">No one</string>
|
||||||
|
<string name="list_replies_members">Members of the list</string>
|
||||||
|
<string name="list_replies_anyone">Anyone I follow</string>
|
||||||
|
<string name="confirm_remove_list_members">Remove members?</string>
|
||||||
|
<string name="remove">Remove</string>
|
||||||
|
<string name="add_list_member">Add member</string>
|
||||||
|
<string name="search_among_people_you_follow">Search among people you follow</string>
|
||||||
|
<string name="add_user_to_list">Add to list…</string>
|
||||||
|
<string name="add_user_to_list_title">Add to list</string>
|
||||||
|
<!-- %s is a username -->
|
||||||
|
<string name="manage_user_lists">Manage the lists %s appears on</string>
|
||||||
|
<string name="remove_from_list">Remove from list</string>
|
||||||
|
<string name="confirm_remove_list_member">Remove member?</string>
|
||||||
|
<string name="no_followed_hashtags_title">Keep up with interests by following hashtags</string>
|
||||||
|
<string name="no_followed_hashtags_subtitle">Follows will appear here</string>
|
||||||
|
<string name="no_lists_title">Organize your home feed with Lists</string>
|
||||||
|
<string name="no_lists_subtitle">Yours will appear here</string>
|
||||||
|
<string name="manage_accounts">Manage accounts</string>
|
||||||
|
<plurals name="x_posts_recently">
|
||||||
|
<item quantity="one">%,d post recently</item>
|
||||||
|
<item quantity="other">%,d posts recently</item>
|
||||||
|
</plurals>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue