I want to fucking die

This commit is contained in:
sk 2022-12-27 20:53:06 -03:00 committed by LucasGGamerM
parent d2be917bd4
commit 71c80dd381
30 changed files with 291 additions and 82 deletions

View File

@ -74,15 +74,26 @@ public class NotificationsFragment extends MastodonToolbarFragment implements Sc
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
inflater.inflate(R.menu.notifications, menu);
menu.findItem(R.id.clear_notifications).setVisible(GlobalUserPreferences.enableDeleteNotifications);
UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.follow_requests);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() != R.id.follow_requests) return false;
Bundle args=new Bundle();
args.putString("account", accountID);
Nav.go(getActivity(), FollowRequestsListFragment.class, args);
return true;
if (item.getItemId() == R.id.follow_requests) {
Bundle args=new Bundle();
args.putString("account", accountID);
Nav.go(getActivity(), FollowRequestsListFragment.class, args);
return true;
} else if (item.getItemId() == R.id.clear_notifications) {
UiUtils.confirmDeleteNotification(getActivity(), accountID, null, ()->{
for (int i = 0; i < tabViews.length; i++) {
getFragmentForPage(i).reload();
}
});
return true;
}
return false;
}
@Override

View File

@ -553,16 +553,24 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
if(relationship==null && !isOwnProfile)
return;
inflater.inflate(isOwnProfile ? R.menu.profile_own : R.menu.profile, menu);
UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags);
menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.getDisplayUsername()));
if(isOwnProfile)
return;
menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
MenuItem mute = menu.findItem(R.id.mute);
mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_2_24_regular : R.drawable.ic_fluent_speaker_mute_24_regular);
UiUtils.insetPopupMenuIcon(getContext(), mute);
menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername()));
MenuItem manageUserLists=menu.findItem(R.id.manage_user_lists);
if(relationship.following) {
menu.findItem(R.id.hide_boosts).setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getDisplayUsername()));
MenuItem hideBoosts = menu.findItem(R.id.hide_boosts);
hideBoosts.setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getDisplayUsername()));
hideBoosts.setIcon(relationship.showingReblogs ? R.drawable.ic_fluent_arrow_repeat_all_off_24_regular : R.drawable.ic_fluent_arrow_repeat_all_24_regular);
UiUtils.insetPopupMenuIcon(getContext(), hideBoosts);
manageUserLists.setTitle(getString(R.string.sk_lists_with_user, account.getDisplayUsername()));
manageUserLists.setVisible(true);
}else {

View File

@ -60,7 +60,14 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
private static final Animation opacityOut, opacityIn;
private View touchingView = null;
private final Runnable longClickRunnable = () -> { if (touchingView != null) touchingView.performLongClick(); };
private boolean longClickPerformed = false;
private final Runnable longClickRunnable = () -> {
longClickPerformed = touchingView != null && touchingView.performLongClick();
if (longClickPerformed && touchingView != null) {
touchingView.startAnimation(opacityIn);
touchingView.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
}
};
private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){
@Override
@ -72,12 +79,12 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
};
static {
opacityOut = new AlphaAnimation(1, 0.7f);
opacityOut.setDuration(200);
opacityOut = new AlphaAnimation(1, 0.55f);
opacityOut.setDuration(300);
opacityOut.setInterpolator(CubicBezierInterpolator.DEFAULT);
opacityOut.setFillAfter(true);
opacityIn = new AlphaAnimation(0.7f, 1);
opacityIn.setDuration(300);
opacityIn = new AlphaAnimation(0.55f, 1);
opacityIn.setDuration(500);
opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT);
}
@ -101,6 +108,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
View bookmark=findViewById(R.id.bookmark_btn);
reply.setOnTouchListener(this::onButtonTouch);
reply.setOnClickListener(this::onReplyClick);
reply.setOnLongClickListener(this::onReplyLongClick);
reply.setAccessibilityDelegate(buttonAccessibilityDelegate);
boost.setOnTouchListener(this::onButtonTouch);
boost.setOnClickListener(this::onBoostClick);
@ -108,9 +116,11 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
boost.setAccessibilityDelegate(buttonAccessibilityDelegate);
favorite.setOnTouchListener(this::onButtonTouch);
favorite.setOnClickListener(this::onFavoriteClick);
favorite.setOnLongClickListener(this::onFavoriteLongClick);
favorite.setAccessibilityDelegate(buttonAccessibilityDelegate);
bookmark.setOnTouchListener(this::onButtonTouch);
bookmark.setOnClickListener(this::onBookmarkClick);
bookmark.setOnLongClickListener(this::onBookmarkLongClick);
bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate);
share.setOnTouchListener(this::onButtonTouch);
share.setOnClickListener(this::onShareClick);
@ -144,15 +154,15 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
boolean disabled = !v.isEnabled() || (v instanceof FrameLayout parentFrame &&
parentFrame.getChildCount() > 0 && !parentFrame.getChildAt(0).isEnabled());
int action = event.getAction();
long eventDuration = event.getEventTime() - event.getDownTime();
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
touchingView = null;
v.removeCallbacks(longClickRunnable);
v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
if (!longClickPerformed) v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
if (disabled) return true;
if (action == MotionEvent.ACTION_UP && eventDuration <= ViewConfiguration.getLongPressTimeout()) v.performClick();
else v.startAnimation(opacityIn);
if (action == MotionEvent.ACTION_UP && !longClickPerformed) v.performClick();
else if (!longClickPerformed) v.startAnimation(opacityIn);
} else if (action == MotionEvent.ACTION_DOWN) {
longClickPerformed = false;
touchingView = v;
// 20dp to center in middle of icon, because: (icon width = 24dp) / 2 + (paddingStart = 8dp)
v.setPivotX(V.dp(20));
@ -172,6 +182,20 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
}
private boolean onReplyLongClick(View v) {
if (AccountSessionManager.getInstance().getLoggedInAccounts().size() < 2) return false;
UiUtils.pickAccount(v.getContext(), item.accountID, R.string.sk_reply_as, R.drawable.ic_fluent_arrow_reply_28_regular, session -> {
Bundle args=new Bundle();
String accountID = session.getID();
args.putString("account", accountID);
UiUtils.lookupStatus(v.getContext(), item.status, accountID, item.accountID, status -> {
args.putParcelable("replyTo", Parcels.wrap(status));
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
});
}, null);
return true;
}
private void onBoostClick(View v){
boost.setSelected(!item.status.reblogged);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged, null, r->boostConsumer(v, r));
@ -198,6 +222,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
View separator = menu.findViewById(R.id.separator);
TextView reblogHeader = menu.findViewById(R.id.reblog_header);
TextView undoReblog = menu.findViewById(R.id.delete_reblog);
TextView reblogAs = menu.findViewById(R.id.reblog_as);
TextView itemPublic = menu.findViewById(R.id.vis_public);
TextView itemUnlisted = menu.findViewById(R.id.vis_unlisted);
TextView itemFollowers = menu.findViewById(R.id.vis_followers);
@ -205,6 +230,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
undoReblog.setVisibility(item.status.reblogged ? View.VISIBLE : View.GONE);
separator.setVisibility(item.status.reblogged ? View.GONE : View.VISIBLE);
reblogHeader.setVisibility(item.status.reblogged ? View.GONE : View.VISIBLE);
reblogAs.setVisibility(AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1 ? View.VISIBLE : View.GONE);
itemPublic.setVisibility(item.status.reblogged || item.status.visibility.isLessVisibleThan(StatusPrivacy.PUBLIC) ? View.GONE : View.VISIBLE);
itemUnlisted.setVisibility(item.status.reblogged || item.status.visibility.isLessVisibleThan(StatusPrivacy.UNLISTED) ? View.GONE : View.VISIBLE);
@ -215,10 +241,10 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
Drawable unlistedDrawable = ctx.getDrawable(R.drawable.ic_fluent_people_community_24_regular);
Drawable followersDrawable = ctx.getDrawable(R.drawable.ic_fluent_people_checkmark_24_regular);
StatusPrivacy defaultVisibility = session.preferences.postingDefaultVisibility;
StatusPrivacy defaultVisibility = session.preferences != null ? session.preferences.postingDefaultVisibility : null;
// e.g. post visibility is unlisted, but default is public
// in this case, we want to display the check mark on the most visible visibility
if (item.status.visibility.isLessVisibleThan(defaultVisibility)) {
if (defaultVisibility != null && item.status.visibility.isLessVisibleThan(defaultVisibility)) {
for (StatusPrivacy vis : StatusPrivacy.values()) {
if (vis.equals(item.status.visibility)) {
defaultVisibility = vis;
@ -234,6 +260,19 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
itemPublic.setOnClickListener(c->doReblog.accept(StatusPrivacy.PUBLIC));
itemUnlisted.setOnClickListener(c->doReblog.accept(StatusPrivacy.UNLISTED));
itemFollowers.setOnClickListener(c->doReblog.accept(StatusPrivacy.PRIVATE));
reblogAs.setOnClickListener(c->{
dialog.dismiss();
UiUtils.pickInteractAs(v.getContext(),
item.accountID, item.status,
s -> s.reblogged,
(ic, status, consumer) -> ic.setReblogged(status, true, null, consumer),
R.string.sk_reblog_as,
R.string.sk_reblogged_as,
R.string.sk_already_reblogged,
// TODO: replace once available: https://raw.githubusercontent.com/microsoft/fluentui-system-icons/main/android/library/src/main/res/drawable/ic_fluent_arrow_repeat_all_28_regular.xml
R.drawable.ic_fluent_arrow_repeat_all_24_regular
);
});
menu.findViewById(R.id.quote).setOnClickListener(c->{
dialog.dismiss();
@ -257,13 +296,41 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
});
}
private boolean onFavoriteLongClick(View v) {
if (AccountSessionManager.getInstance().getLoggedInAccounts().size() < 2) return false;
UiUtils.pickInteractAs(v.getContext(),
item.accountID, item.status,
s -> s.favourited,
(ic, status, consumer) -> ic.setFavorited(status, true, consumer),
R.string.sk_favorite_as,
R.string.sk_favorited_as,
R.string.sk_already_favorited,
R.drawable.ic_fluent_star_28_regular
);
return true;
}
private void onBookmarkClick(View v){
bookmark.setSelected(item.status.bookmarked);
bookmark.setSelected(!item.status.bookmarked);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
v.startAnimation(opacityIn);
});
}
private boolean onBookmarkLongClick(View v) {
if (AccountSessionManager.getInstance().getLoggedInAccounts().size() < 2) return false;
UiUtils.pickInteractAs(v.getContext(),
item.accountID, item.status,
s -> s.bookmarked,
(ic, status, consumer) -> ic.setBookmarked(status, true, consumer),
R.string.sk_bookmark_as,
R.string.sk_bookmarked_as,
R.string.sk_already_bookmarked,
R.drawable.ic_fluent_bookmark_28_regular
);
return true;
}
private void onShareClick(View v){
v.startAnimation(opacityIn);
Intent intent=new Intent(Intent.ACTION_SEND);
@ -273,7 +340,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private boolean onShareLongClick(View v){
UiUtils.copyText(v.getContext(), item.status.url);
UiUtils.copyText(v, item.status.url);
return true;
}

View File

@ -222,6 +222,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
}
return true;
});
UiUtils.enablePopupMenuIcons(activity, optionsMenu);
}
private void openWithAccount() {
@ -323,6 +324,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
menu.findItem(R.id.open_in_browser).setVisible(item.status!=null);
MenuItem blockDomain=menu.findItem(R.id.block_domain);
MenuItem mute=menu.findItem(R.id.mute);
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
MenuItem block=menu.findItem(R.id.block);
MenuItem report=menu.findItem(R.id.report);
MenuItem follow=menu.findItem(R.id.follow);
@ -338,6 +340,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
*/
if(isOwnPost){
mute.setVisible(false);
hideBoosts.setVisible(false);
block.setVisible(false);
report.setVisible(false);
follow.setVisible(false);
@ -348,6 +351,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
report.setVisible(true);
follow.setVisible(relationship==null || relationship.following || (!relationship.blocking && !relationship.blockedBy && !relationship.domainBlocking && !relationship.muting));
mute.setTitle(item.parentFragment.getString(relationship!=null && relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
mute.setIcon(relationship!=null && relationship.muting ? R.drawable.ic_fluent_speaker_2_24_regular : R.drawable.ic_fluent_speaker_mute_24_regular);
UiUtils.insetPopupMenuIcon(item.parentFragment.getContext(), mute);
block.setTitle(item.parentFragment.getString(relationship!=null && relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
report.setTitle(item.parentFragment.getString(R.string.report_user, account.getDisplayUsername()));
// disabled in megalodon. domain blocks from a post clutters the context menu and looks out of place
@ -357,7 +362,10 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
// }else{
blockDomain.setVisible(false);
// }
follow.setTitle(item.parentFragment.getString(relationship!=null && relationship.following ? R.string.unfollow_user : R.string.follow_user, account.getDisplayUsername()));
boolean following = relationship!=null && relationship.following;
follow.setTitle(item.parentFragment.getString(following ? R.string.unfollow_user : R.string.follow_user, account.getDisplayUsername()));
follow.setIcon(following ? R.drawable.ic_fluent_person_delete_24_regular : R.drawable.ic_fluent_person_add_24_regular);
UiUtils.insetPopupMenuIcon(item.parentFragment.getContext(), follow);
}
}
}

View File

@ -105,6 +105,7 @@ import java.util.stream.Collectors;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.IdRes;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.browser.customtabs.CustomTabsIntent;
@ -348,22 +349,29 @@ public class UiUtils{
}
public static void showConfirmationAlert(Context context, @StringRes int title, @StringRes int message, @StringRes int confirmButton, Runnable onConfirmed){
showConfirmationAlert(context, context.getString(title), context.getString(message), context.getString(confirmButton), onConfirmed);
showConfirmationAlert(context, title, message, confirmButton, 0, onConfirmed);
}
public static void showConfirmationAlert(Context context, CharSequence title, CharSequence message, CharSequence confirmButton, Runnable onConfirmed){
public static void showConfirmationAlert(Context context, @StringRes int title, @StringRes int message, @StringRes int confirmButton, @DrawableRes int icon, Runnable onConfirmed){
showConfirmationAlert(context, context.getString(title), context.getString(message), context.getString(confirmButton), icon, onConfirmed);
}
public static void showConfirmationAlert(Context context, CharSequence title, CharSequence message, CharSequence confirmButton, int icon, Runnable onConfirmed){
new M3AlertDialogBuilder(context)
.setTitle(title)
.setMessage(message)
.setPositiveButton(confirmButton, (dlg, i)->onConfirmed.run())
.setNegativeButton(R.string.cancel, null)
.setIcon(icon)
.show();
}
public static void confirmToggleBlockUser(Activity activity, String accountID, Account account, boolean currentlyBlocked, Consumer<Relationship> resultCallback){
showConfirmationAlert(activity, activity.getString(currentlyBlocked ? R.string.confirm_unblock_title : R.string.confirm_block_title),
activity.getString(currentlyBlocked ? R.string.confirm_unblock : R.string.confirm_block, account.displayName),
activity.getString(currentlyBlocked ? R.string.do_unblock : R.string.do_block), ()->{
activity.getString(currentlyBlocked ? R.string.do_unblock : R.string.do_block),
currentlyBlocked ? R.drawable.ic_fluent_person_28_regular : R.drawable.ic_fluent_person_prohibited_28_regular,
()->{
new SetAccountBlocked(account.id, !currentlyBlocked)
.setCallback(new Callback<>(){
@Override
@ -387,7 +395,9 @@ public class UiUtils{
public static void confirmToggleBlockDomain(Activity activity, String accountID, String domain, boolean currentlyBlocked, Runnable resultCallback){
showConfirmationAlert(activity, activity.getString(currentlyBlocked ? R.string.confirm_unblock_domain_title : R.string.confirm_block_domain_title),
activity.getString(currentlyBlocked ? R.string.confirm_unblock : R.string.confirm_block, domain),
activity.getString(currentlyBlocked ? R.string.do_unblock : R.string.do_block), ()->{
activity.getString(currentlyBlocked ? R.string.do_unblock : R.string.do_block),
R.drawable.ic_fluent_shield_28_regular,
()->{
new SetDomainBlocked(domain, !currentlyBlocked)
.setCallback(new Callback<>(){
@Override
@ -408,7 +418,9 @@ public class UiUtils{
public static void confirmToggleMuteUser(Activity activity, String accountID, Account account, boolean currentlyMuted, Consumer<Relationship> resultCallback){
showConfirmationAlert(activity, activity.getString(currentlyMuted ? R.string.confirm_unmute_title : R.string.confirm_mute_title),
activity.getString(currentlyMuted ? R.string.confirm_unmute : R.string.confirm_mute, account.displayName),
activity.getString(currentlyMuted ? R.string.do_unmute : R.string.do_mute), ()->{
activity.getString(currentlyMuted ? R.string.do_unmute : R.string.do_mute),
currentlyMuted ? R.drawable.ic_fluent_speaker_2_28_regular : R.drawable.ic_fluent_speaker_mute_28_regular,
()->{
new SetAccountMuted(account.id, !currentlyMuted)
.setCallback(new Callback<>(){
@Override
@ -433,24 +445,28 @@ public class UiUtils{
}
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback, boolean forRedraft){
showConfirmationAlert(activity, forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title, forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete, forRedraft ? R.string.sk_delete_and_redraft : R.string.delete, ()->{
new DeleteStatus(status.id)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Status result){
resultCallback.accept(result);
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().deleteStatus(status.id);
E.post(new StatusDeletedEvent(status.id, accountID));
}
showConfirmationAlert(activity,
forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title,
forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete,
forRedraft ? R.string.sk_delete_and_redraft : R.string.delete,
forRedraft ? R.drawable.ic_fluent_arrow_clockwise_28_regular : R.drawable.ic_fluent_delete_28_regular,
() -> new DeleteStatus(status.id)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Status result){
resultCallback.accept(result);
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().deleteStatus(status.id);
E.post(new StatusDeletedEvent(status.id, accountID));
}
@Override
public void onError(ErrorResponse error){
error.showToast(activity);
}
})
.wrapProgress(activity, R.string.deleting, false)
.exec(accountID);
});
@Override
public void onError(ErrorResponse error){
error.showToast(activity);
}
})
.wrapProgress(activity, R.string.deleting, false)
.exec(accountID)
);
}
public static void confirmPinPost(Activity activity, String accountID, Status status, boolean pinned, Consumer<Status> resultCallback){
@ -458,6 +474,7 @@ public class UiUtils{
pinned ? R.string.sk_confirm_pin_post_title : R.string.sk_confirm_unpin_post_title,
pinned ? R.string.sk_confirm_pin_post : R.string.sk_confirm_unpin_post,
pinned ? R.string.sk_pin_post : R.string.sk_unpin_post,
pinned ? R.drawable.ic_fluent_pin_off_28_regular : R.drawable.ic_fluent_pin_28_regular,
()->{
new SetStatusPinned(status.id, pinned)
.setCallback(new Callback<>() {
@ -485,7 +502,8 @@ public class UiUtils{
notification == null ? R.string.sk_clear_all_notifications : R.string.sk_delete_notification,
notification == null ? R.string.sk_clear_all_notifications_confirm : R.string.sk_delete_notification_confirm,
notification == null ? R.string.sk_clear_all_notifications_confirm_action : R.string.sk_delete_notification_confirm_action,
()-> new DismissNotification(notification != null ? notification.id : null).setCallback(new Callback<>() {
notification == null ? R.drawable.ic_fluent_mail_inbox_dismiss_28_regular : R.drawable.ic_fluent_delete_28_regular,
() -> new DismissNotification(notification != null ? notification.id : null).setCallback(new Callback<>() {
@Override
public void onSuccess(Object o) {
callback.run();
@ -666,6 +684,42 @@ public class UiUtils{
return bitmap;
}
public static void insetPopupMenuIcon(Context context, MenuItem item) {
ColorStateList iconTint=ColorStateList.valueOf(UiUtils.getThemeColor(context, android.R.attr.textColorSecondary));
insetPopupMenuIcon(item, iconTint);
}
public static void insetPopupMenuIcon(MenuItem item, ColorStateList iconTint) {
Drawable icon=item.getIcon().mutate();
if(Build.VERSION.SDK_INT>=26) item.setIconTintList(iconTint);
else icon.setTintList(iconTint);
icon=new InsetDrawable(icon, V.dp(8), 0, V.dp(8), 0);
item.setIcon(icon);
SpannableStringBuilder ssb=new SpannableStringBuilder(item.getTitle());
item.setTitle(ssb);
}
public static void enableOptionsMenuIcons(Context context, Menu menu, @IdRes int... asAction) {
if(menu.getClass().getSimpleName().equals("MenuBuilder")){
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
enableMenuIcons(context, menu, asAction);
}
catch(Exception ignored){}
}
}
public static void enableMenuIcons(Context context, Menu m, @IdRes int... exclude) {
ColorStateList iconTint=ColorStateList.valueOf(UiUtils.getThemeColor(context, android.R.attr.textColorSecondary));
for(int i=0;i<m.size();i++){
MenuItem item=m.getItem(i);
if (item.getIcon() == null || Arrays.stream(exclude).anyMatch(id -> id == item.getItemId())) continue;
insetPopupMenuIcon(item, iconTint);
}
}
public static void enablePopupMenuIcons(Context context, PopupMenu menu){
Menu m=menu.getMenu();
if(Build.VERSION.SDK_INT>=29){
@ -677,23 +731,7 @@ public class UiUtils{
setOptionalIconsVisible.invoke(m, true);
}catch(Exception ignore){}
}
ColorStateList iconTint=ColorStateList.valueOf(UiUtils.getThemeColor(context, android.R.attr.textColorSecondary));
for(int i=0;i<m.size();i++){
MenuItem item=m.getItem(i);
Drawable icon=item.getIcon().mutate();
if(Build.VERSION.SDK_INT>=26){
item.setIconTintList(iconTint);
}else{
icon.setTintList(iconTint);
}
icon=new InsetDrawable(icon, V.dp(8), 0, 0, 0);
item.setIcon(icon);
SpannableStringBuilder ssb=new SpannableStringBuilder(item.getTitle());
ssb.insert(0, " ");
ssb.setSpan(new SpacerSpan(V.dp(24), 1), 0, 1, 0);
ssb.append(" ", new SpacerSpan(V.dp(8), 1), 0);
item.setTitle(ssb);
}
enableMenuIcons(context, m);
}
public static void setUserPreferredTheme(Context context){

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M12 4.5c-4.142 0-7.5 3.358-7.5 7.5 0 4.142 3.358 7.5 7.5 7.5 4.142 0 7.5-3.358 7.5-7.5 0-0.376-0.028-0.746-0.081-1.108C19.352 10.438 19.684 10 20.143 10c0.37 0 0.696 0.256 0.752 0.623C20.965 11.072 21 11.532 21 12c0 4.97-4.03 9-9 9s-9-4.03-9-9 4.03-9 9-9c2.305 0 4.408 0.867 6 2.292V4.25c0-0.414 0.336-0.75 0.75-0.75s0.75 0.336 0.75 0.75v3C19.5 7.664 19.164 8 18.75 8h-3C15.336 8 15 7.664 15 7.25s0.336-0.75 0.75-0.75h1.35c-1.34-1.241-3.13-2-5.1-2z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M19.832 6.5c-1.61-1.254-3.634-2-5.832-2-5.247 0-9.5 4.253-9.5 9.5s4.253 9.5 9.5 9.5 9.5-4.253 9.5-9.5c0-0.452-0.03-0.659-0.1-1.139l-0.001-0.002c-0.06-0.41 0.223-0.791 0.633-0.851 0.41-0.06 0.791 0.223 0.851 0.633l0.002 0.012C24.957 13.143 25 13.438 25 14c0 6.075-4.925 11-11 11S3 20.075 3 14 7.925 3 14 3c2.66 0 5.099 0.944 7 2.514V3.75C21 3.336 21.336 3 21.75 3s0.75 0.336 0.75 0.75v3.5C22.5 7.664 22.164 8 21.75 8h-3.5c-0.414 0-0.75-0.336-0.75-0.75s0.336-0.75 0.75-0.75h1.582z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M10.03 5.47c0.293 0.293 0.293 0.767 0 1.06L5.56 11h8.69C20.187 11 25 15.813 25 21.75c0 0.414-0.336 0.75-0.75 0.75s-0.75-0.336-0.75-0.75c0-5.109-4.141-9.25-9.25-9.25H5.56l4.47 4.47c0.293 0.293 0.293 0.767 0 1.06-0.293 0.293-0.767 0.293-1.06 0l-5.75-5.75c-0.293-0.293-0.293-0.767 0-1.06l5.75-5.75c0.293-0.293 0.767-0.293 1.06 0z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M6 6.75C6 4.955 7.455 3.5 9.25 3.5h9.5C20.545 3.5 22 4.955 22 6.75v18c0 0.285-0.161 0.545-0.416 0.672-0.256 0.126-0.56 0.098-0.787-0.075L14 20.192l-6.797 5.157c-0.227 0.172-0.532 0.2-0.787 0.074C6.161 25.295 6 25.035 6 24.75v-18zM9.25 5C8.284 5 7.5 5.784 7.5 6.75v16.49l6.047-4.587c0.268-0.204 0.638-0.204 0.906 0L20.5 23.24V6.75C20.5 5.784 19.716 5 18.75 5h-9.5z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M12 1.998c5.524 0 10.002 4.478 10.002 10.002 0 5.523-4.478 10-10.002 10-5.524 0.001-10.002-4.477-10.002-10C1.998 6.476 6.476 1.998 12 1.998zm2.939 14.501H9.061c0.652 2.415 1.786 4.002 2.94 4.002 1.153 0 2.286-1.588 2.938-4.002zm-7.43 0H4.785c0.958 1.534 2.392 2.74 4.094 3.411-0.522-0.82-0.953-1.846-1.27-3.015L7.508 16.5zm11.705 0h-2.722c-0.324 1.335-0.792 2.5-1.373 3.411 1.597-0.63 2.957-1.729 3.91-3.127l0.185-0.283zM7.094 10H3.735L3.73 10.016C3.58 10.652 3.5 11.316 3.5 12c0 1.056 0.192 2.067 0.544 3h3.173c-0.142-0.95-0.218-1.958-0.218-3 0-0.684 0.033-1.354 0.095-2.001zm8.303 0H8.603c-0.068 0.64-0.104 1.31-0.104 2 0 1.06 0.086 2.07 0.24 3h6.523c0.153-0.93 0.24-1.94 0.24-3 0-0.69-0.037-1.36-0.105-2zm4.868 0h-3.358c0.062 0.647 0.095 1.317 0.095 2 0 1.043-0.076 2.051-0.218 3h3.173c0.352-0.932 0.545-1.943 0.545-3 0-0.689-0.082-1.359-0.237-2zM8.88 4.088L8.858 4.097C6.811 4.912 5.155 6.5 4.25 8.5h3.048c0.314-1.752 0.86-3.278 1.583-4.41zM12 3.497l-0.117 0.005C10.62 3.62 9.396 5.621 8.83 8.5h6.342c-0.566-2.87-1.783-4.869-3.045-4.995L12 3.498zm3.12 0.59l0.106 0.175c0.67 1.112 1.177 2.572 1.475 4.237h3.048c-0.865-1.912-2.416-3.447-4.339-4.29l-0.29-0.121z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M26 7.5c0 3.59-2.91 6.5-6.5 6.5S13 11.09 13 7.5 15.91 1 19.5 1 26 3.91 26 7.5zm-9.146-3.354c-0.196-0.195-0.512-0.195-0.708 0-0.195 0.196-0.195 0.512 0 0.708L18.793 7.5l-2.647 2.646c-0.195 0.196-0.195 0.512 0 0.708 0.196 0.195 0.512 0.195 0.708 0L19.5 8.207l2.646 2.647c0.196 0.195 0.512 0.195 0.708 0 0.195-0.196 0.195-0.512 0-0.708L20.207 7.5l2.647-2.646c0.195-0.196 0.195-0.512 0-0.708-0.196-0.195-0.512-0.195-0.708 0L19.5 6.793l-2.646-2.647zM25 22.75V12.6c-0.443 0.476-0.947 0.896-1.5 1.245V16h-6l-0.102 0.007c-0.366 0.05-0.648 0.363-0.648 0.743 0 1.519-1.231 2.75-2.75 2.75s-2.75-1.231-2.75-2.75l-0.007-0.102C11.193 16.282 10.88 16 10.5 16h-6V7.25c0-0.966 0.784-1.75 1.75-1.75h6.02c0.145-0.525 0.345-1.028 0.595-1.5H6.25C4.455 4 3 5.455 3 7.25v15.5C3 24.545 4.455 26 6.25 26h15.5c1.795 0 3.25-1.455 3.25-3.25zm-20.5 0V17.5h5.316l0.041 0.204C10.291 19.592 11.982 21 14 21l0.215-0.005c1.994-0.1 3.627-1.574 3.969-3.495H23.5v5.25c0 0.966-0.784 1.75-1.75 1.75H6.25c-0.966 0-1.75-0.784-1.75-1.75z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M21 16c1.657 0 3 1.343 3 3v0.715C24 23.292 19.79 26 14 26S4 23.433 4 19.715V19c0-1.657 1.343-3 3-3h14zm0 1.5H7c-0.78 0-1.42 0.595-1.493 1.355L5.5 19v0.715c0 2.674 3.389 4.785 8.5 4.785 4.926 0 8.355-2.105 8.495-4.624l0.005-0.161V19c0-0.78-0.595-1.42-1.355-1.493L21 17.5zM14 2c3.314 0 6 2.686 6 6s-2.686 6-6 6-6-2.686-6-6 2.686-6 6-6zm0 1.5c-2.485 0-4.5 2.015-4.5 4.5s2.015 4.5 4.5 4.5 4.5-2.015 4.5-4.5-2.015-4.5-4.5-4.5z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M17.5 12c3.037 0 5.5 2.463 5.5 5.5 0 3.038-2.463 5.5-5.5 5.5-3.038 0-5.5-2.462-5.5-5.5 0-3.037 2.462-5.5 5.5-5.5zm-5.478 2c-0.297 0.463-0.536 0.966-0.709 1.5h-7.06c-0.414 0-0.75 0.336-0.75 0.75v0.907c0 0.656 0.286 1.28 0.784 1.707C5.545 19.945 7.44 20.5 10 20.5c0.599 0 1.161-0.03 1.688-0.09 0.249 0.5 0.563 0.963 0.929 1.38C11.815 21.93 10.942 22 10 22c-2.89 0-5.128-0.656-6.691-2-0.829-0.712-1.306-1.75-1.306-2.844V16.25c0-1.242 1.008-2.25 2.25-2.25h7.77zm3.07 0.966l-0.068 0.058-0.058 0.07c-0.118 0.17-0.118 0.398 0 0.568l0.058 0.07 1.77 1.769-1.768 1.767-0.058 0.069c-0.118 0.17-0.118 0.398 0 0.569l0.058 0.069 0.07 0.058c0.17 0.118 0.398 0.118 0.568 0l0.07-0.058 1.766-1.767 1.77 1.77 0.069 0.057c0.17 0.118 0.398 0.118 0.568 0l0.07-0.058 0.057-0.07c0.118-0.17 0.118-0.397 0-0.568l-0.058-0.069-1.769-1.77 1.772-1.768 0.058-0.07c0.118-0.17 0.118-0.398 0-0.568l-0.058-0.07-0.07-0.057c-0.17-0.119-0.397-0.119-0.568 0l-0.069 0.057-1.772 1.77-1.77-1.77-0.069-0.057c-0.146-0.102-0.334-0.116-0.492-0.044l-0.076 0.043zM10 2.005c2.761 0 5 2.239 5 5s-2.239 5-5 5-5-2.239-5-5 2.239-5 5-5zm0 1.5c-1.933 0-3.5 1.567-3.5 3.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M17.5 12c3.038 0 5.5 2.463 5.5 5.5 0 3.038-2.462 5.5-5.5 5.5-3.037 0-5.5-2.462-5.5-5.5 0-3.037 2.463-5.5 5.5-5.5zm-5.477 2c-0.297 0.463-0.537 0.966-0.709 1.5h-7.06c-0.414 0-0.75 0.336-0.75 0.75v0.907c0 0.656 0.286 1.28 0.783 1.707C5.545 19.945 7.441 20.5 10 20.5c0.6 0 1.162-0.03 1.688-0.09 0.25 0.5 0.563 0.963 0.93 1.38C11.814 21.93 10.941 22 10 22c-2.89 0-5.128-0.656-6.69-2-0.83-0.712-1.306-1.75-1.306-2.844V16.25c0-1.242 1.007-2.25 2.25-2.25h7.769zm8.787 1.252l-5.557 5.557c0.64 0.436 1.414 0.691 2.247 0.691 2.21 0 4-1.79 4-4 0-0.833-0.255-1.607-0.69-2.248zM17.5 13.5c-2.209 0-4 1.791-4 4 0 0.834 0.255 1.607 0.691 2.248l5.557-5.557c-0.64-0.436-1.414-0.69-2.248-0.69zM10 2.005c2.762 0 5 2.239 5 5s-2.238 5-5 5c-2.761 0-5-2.239-5-5s2.239-5 5-5zm0 1.5c-1.933 0-3.5 1.567-3.5 3.5s1.567 3.5 3.5 3.5 3.5-1.567 3.5-3.5-1.567-3.5-3.5-3.5z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M15.114 25.719c-0.396-0.408-0.746-0.861-1.04-1.35C13.418 24.453 12.725 24.5 12 24.5c-5.111 0-8.5-2.111-8.5-4.785V19l0.007-0.145C3.58 18.095 4.22 17.5 5 17.5h8.624c0.234-0.535 0.529-1.038 0.875-1.5H5c-1.657 0-3 1.343-3 3v0.715C2 23.433 6.21 26 12 26c1.101 0 2.145-0.098 3.114-0.281zM18 8c0-3.314-2.686-6-6-6S6 4.686 6 8s2.686 6 6 6 6-2.686 6-6zM7.5 8c0-2.485 2.015-4.5 4.5-4.5s4.5 2.015 4.5 4.5-2.015 4.5-4.5 4.5S7.5 10.485 7.5 8zM27 20.5c0 3.59-2.91 6.5-6.5 6.5S14 24.09 14 20.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5zm-1.5 0c0-1.11-0.362-2.136-0.974-2.965l-6.991 6.991c0.83 0.612 1.855 0.974 2.965 0.974 2.761 0 5-2.239 5-5zm-9.026 2.965l6.991-6.991C22.635 15.862 21.61 15.5 20.5 15.5c-2.761 0-5 2.239-5 5 0 1.11 0.362 2.136 0.974 2.965z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M16.242 2.932l4.826 4.826c1.327 1.327 0.964 3.564-0.715 4.404l-4.87 2.435c-0.176 0.088-0.31 0.24-0.374 0.426l-1.44 4.166c-0.3 0.873-1.412 1.13-2.065 0.476L8.5 16.561 4.06 21H3v-1.062L7.44 15.5l-3.105-3.104c-0.653-0.653-0.397-1.764 0.476-2.066l4.166-1.439c0.185-0.064 0.338-0.198 0.426-0.373l2.435-4.871c0.84-1.68 3.077-2.042 4.405-0.715zm3.766 5.886l-4.826-4.825c-0.604-0.604-1.62-0.439-2.002 0.324l-2.435 4.871c-0.264 0.526-0.722 0.929-1.278 1.12l-3.789 1.31 6.705 6.704 1.308-3.788c0.192-0.557 0.595-1.015 1.12-1.278l4.872-2.436c0.763-0.381 0.928-1.398 0.325-2.002z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M13.803 4.385c0.963-2.031 3.647-2.496 5.236-0.907l5.483 5.483c1.589 1.59 1.124 4.273-0.907 5.235l-5.39 2.553c-0.406 0.193-0.723 0.534-0.884 0.954l-1.589 4.13c-0.454 1.182-1.975 1.505-2.87 0.609L9.75 19.31 4.06 25H3v-1.06l5.69-5.69-3.132-3.132c-0.896-0.895-0.573-2.416 0.609-2.87l4.13-1.59c0.42-0.16 0.761-0.477 0.953-0.883l2.553-5.39zm4.175 0.154c-0.856-0.856-2.3-0.606-2.819 0.488l-2.553 5.39c-0.357 0.754-0.991 1.342-1.77 1.642l-4.13 1.588c-0.17 0.065-0.216 0.283-0.088 0.41l7.324 7.324c0.128 0.128 0.345 0.082 0.41-0.087l1.589-4.13c0.3-0.779 0.887-1.413 1.642-1.77l5.39-2.553c1.094-0.518 1.344-1.964 0.488-2.82L17.978 4.54z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M3.28 2.22c-0.292-0.293-0.767-0.293-1.06 0-0.293 0.293-0.293 0.767 0 1.06l5.905 5.905L4.81 10.33c-0.873 0.302-1.129 1.413-0.476 2.065L7.439 15.5 3 19.94V21h1.06l4.44-4.44 3.105 3.105c0.652 0.653 1.764 0.397 2.065-0.476l1.145-3.313 5.905 5.904c0.293 0.293 0.767 0.293 1.06 0 0.293-0.293 0.293-0.767 0-1.06L3.28 2.22zm10.355 12.476l-1.252 3.626-6.705-6.705 3.626-1.252 4.331 4.331zm6.048-3.876l-3.787 1.894 1.118 1.118 3.34-1.67c1.679-0.84 2.042-3.077 0.714-4.405l-4.825-4.825c-1.328-1.327-3.565-0.964-4.405 0.715l-1.67 3.34 1.118 1.117 1.894-3.787c0.382-0.763 1.399-0.928 2.002-0.325l4.826 4.826c0.603 0.604 0.438 1.62-0.325 2.002z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M3.28 2.22c-0.293-0.293-0.767-0.293-1.06 0-0.293 0.293-0.293 0.767 0 1.06l7.572 7.573-3.625 1.394c-1.182 0.455-1.505 1.976-0.61 2.871L8.69 18.25 3 23.94V25h1.06l5.69-5.69 3.132 3.132c0.895 0.895 2.416 0.573 2.87-0.61l1.395-3.624 7.572 7.573c0.293 0.292 0.768 0.292 1.061 0 0.293-0.293 0.293-0.768 0-1.061L3.28 2.22zm12.708 14.829l-0.047 0.115-1.589 4.13c-0.065 0.17-0.282 0.215-0.41 0.087l-7.324-7.324c-0.128-0.127-0.081-0.345 0.087-0.41l4.13-1.588c0.04-0.015 0.078-0.03 0.116-0.047l5.037 5.037zm-4.19-8.432l1.127 1.126 2.234-4.716c0.518-1.094 1.963-1.344 2.82-0.488l5.482 5.483c0.856 0.855 0.606 2.3-0.488 2.819l-4.716 2.234 1.126 1.126 4.232-2.005c2.031-0.962 2.496-3.646 0.907-5.235l-5.483-5.483c-1.59-1.59-4.273-1.124-5.236 0.907L11.8 8.617z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M13.56 2.142c0.262-0.19 0.616-0.19 0.878 0 0.643 0.464 2.088 1.312 3.897 2.041 1.81 0.73 3.922 1.317 5.913 1.317 0.414 0 0.75 0.336 0.75 0.75v7.752c0 3.027-1.703 5.841-3.838 7.95-2.133 2.107-4.827 3.64-7.033 4.024L14 25.998l-0.129-0.022c-2.205-0.385-4.9-1.917-7.033-4.024C4.703 19.843 3 17.029 3 14.002V6.25C3 5.836 3.336 5.5 3.75 5.5c1.991 0 4.103-0.587 5.914-1.317 1.808-0.73 3.253-1.576 3.896-2.04zM4.5 6.977v7.025c0 2.47 1.408 4.923 3.391 6.882C9.83 22.8 12.193 24.118 14 24.474c1.806-0.356 4.17-1.675 6.107-3.59 1.983-1.959 3.392-4.411 3.392-6.882V6.977c-2.014-0.124-4.032-0.72-5.724-1.403-1.589-0.64-2.934-1.375-3.775-1.918-0.84 0.543-2.186 1.278-3.774 1.918-1.693 0.683-3.71 1.28-5.725 1.403z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M3.75 5C3.336 5 3 5.336 3 5.75V11c0 5.001 2.958 8.676 8.725 10.948 0.177 0.07 0.373 0.07 0.55 0 0.144-0.057 0.286-0.114 0.426-0.173-0.659-0.475-1.225-1.071-1.667-1.756C6.64 17.962 4.5 14.975 4.5 11V6.478c2.577-0.152 5.08-1.09 7.5-2.8 2.42 1.71 4.923 2.648 7.5 2.8v4.254c0.54 0.282 1.037 0.638 1.475 1.054C20.992 11.528 21 11.266 21 11V5.75C21 5.336 20.664 5 20.25 5c-2.663 0-5.258-0.944-7.8-2.85-0.267-0.2-0.633-0.2-0.9 0C9.008 4.056 6.413 5 3.75 5zM16.5 22c3.038 0 5.5-2.462 5.5-5.5S19.538 11 16.5 11 11 13.462 11 16.5s2.462 5.5 5.5 5.5zm-3.309-3.252c-0.436-0.64-0.691-1.415-0.691-2.248 0-2.21 1.79-4 4-4 0.834 0 1.608 0.255 2.248 0.691l-5.557 5.557zm1.06 1.06l5.558-5.556c0.436 0.64 0.691 1.414 0.691 2.248 0 2.21-1.79 4-4 4-0.834 0-1.607-0.255-2.248-0.691z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M15 4.25c0-1.08-1.274-1.651-2.08-0.935L8.427 7.31C8.29 7.43 8.113 7.499 7.93 7.499H4.25C3.007 7.498 2 8.504 2 9.748v4.497c0 1.243 1.007 2.25 2.25 2.25h3.68c0.183 0 0.36 0.067 0.498 0.19l4.491 3.993C13.725 21.396 15 20.824 15 19.745V4.25zM9.425 8.43L13.5 4.806v14.382l-4.075-3.623c-0.412-0.367-0.944-0.569-1.495-0.569H4.25c-0.414 0-0.75-0.336-0.75-0.75V9.748c0-0.414 0.336-0.75 0.75-0.75h3.68c0.55 0 1.083-0.202 1.495-0.568zm9.567-2.533c0.332-0.247 0.802-0.177 1.049 0.156C21.27 7.715 22 9.773 22 12s-0.728 4.285-1.96 5.947c-0.246 0.333-0.716 0.403-1.048 0.156-0.333-0.246-0.403-0.716-0.157-1.049C19.881 15.641 20.5 13.893 20.5 12c0-1.893-0.619-3.64-1.665-5.053-0.246-0.333-0.176-0.803 0.157-1.05zm-1.849 2.472c0.364-0.197 0.82-0.062 1.017 0.302C18.696 9.662 19 10.796 19 12c0 1.203-0.304 2.337-0.84 3.328-0.198 0.364-0.653 0.5-1.017 0.302-0.364-0.197-0.5-0.652-0.303-1.016 0.42-0.777 0.66-1.667 0.66-2.615 0-0.947-0.24-1.837-0.66-2.614-0.197-0.364-0.061-0.819 0.303-1.016z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M16.5 4.814c0-1.094-1.307-1.66-2.105-0.912l-4.937 4.63C9.134 8.836 8.706 9.005 8.261 9.005H5.25C3.455 9.005 2 10.46 2 12.255v3.492c0 1.795 1.455 3.25 3.25 3.25h3.012c0.444 0 0.872 0.17 1.196 0.473l4.937 4.626c0.799 0.748 2.105 0.182 2.105-0.912V4.814zm-6.016 4.812L15 5.39v17.216l-4.516-4.232c-0.602-0.564-1.397-0.878-2.222-0.878H5.25c-0.966 0-1.75-0.784-1.75-1.75v-3.492c0-0.966 0.784-1.75 1.75-1.75h3.011c0.826 0 1.62-0.314 2.223-0.88zm12.218-4.374c-0.274-0.311-0.747-0.341-1.058-0.068-0.311 0.274-0.342 0.748-0.068 1.059C23.396 8.313 24.5 11.026 24.5 14c0 2.973-1.103 5.687-2.924 7.757-0.274 0.31-0.243 0.785 0.068 1.058 0.31 0.274 0.785 0.243 1.058-0.068C24.754 20.414 26 17.352 26 14c0-3.352-1.245-6.415-3.298-8.748zm-2.35 3.05c-0.248-0.33-0.718-0.398-1.05-0.15-0.33 0.25-0.398 0.72-0.149 1.051C20.156 10.54 20.75 12.199 20.75 14c0 1.8-0.594 3.46-1.597 4.797-0.248 0.33-0.181 0.8 0.15 1.05 0.331 0.248 0.801 0.181 1.05-0.15C21.544 18.11 22.25 16.136 22.25 14c0-2.137-0.706-4.11-1.897-5.697z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M12.92 3.315C13.726 2.6 15 3.171 15 4.25v15.495c0 1.079-1.274 1.651-2.08 0.934l-4.492-3.993c-0.137-0.123-0.315-0.19-0.498-0.19H4.25c-1.243 0-2.25-1.007-2.25-2.25V9.748c0-1.242 1.007-2.25 2.25-2.25h3.68c0.183 0 0.36-0.067 0.498-0.19l4.491-3.993zm0.58 1.491L9.425 8.43C9.013 8.796 8.48 8.998 7.93 8.998H4.25c-0.414 0-0.75 0.336-0.75 0.75v4.498c0 0.414 0.336 0.75 0.75 0.75h3.68c0.55 0 1.083 0.202 1.495 0.569l4.075 3.623V4.806zm2.72 4.413c0.293-0.293 0.767-0.293 1.06 0L19 10.94l1.72-1.72c0.293-0.293 0.767-0.293 1.06 0 0.293 0.293 0.293 0.768 0 1.06L20.06 12l1.72 1.72c0.293 0.293 0.293 0.768 0 1.06-0.293 0.294-0.767 0.294-1.06 0L19 13.06l-1.72 1.72c-0.293 0.293-0.767 0.293-1.06 0-0.293-0.293-0.293-0.768 0-1.06L17.94 12l-1.72-1.72c-0.293-0.293-0.293-0.768 0-1.06z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M14.395 3.902C15.193 3.154 16.5 3.72 16.5 4.814v18.37c0 1.094-1.306 1.66-2.105 0.912L9.458 19.47c-0.324-0.304-0.752-0.473-1.196-0.473H5.25c-1.795 0-3.25-1.455-3.25-3.25v-3.492c0-1.795 1.455-3.25 3.25-3.25h3.011c0.445 0 0.873-0.17 1.197-0.473l4.937-4.63zM15 5.392l-4.516 4.234c-0.602 0.565-1.397 0.879-2.223 0.879H5.25c-0.966 0-1.75 0.784-1.75 1.75v3.492c0 0.966 0.784 1.75 1.75 1.75h3.012c0.825 0 1.62 0.314 2.222 0.878L15 22.607V5.391zm4.782 5.33c-0.291-0.295-0.766-0.296-1.06-0.005-0.294 0.292-0.296 0.767-0.004 1.061l2.218 2.235-2.215 2.205c-0.294 0.293-0.295 0.767-0.002 1.061 0.292 0.294 0.767 0.294 1.06 0.002l2.218-2.208 2.225 2.209c0.294 0.292 0.769 0.29 1.06-0.004 0.292-0.294 0.29-0.769-0.004-1.06l-2.22-2.205 2.224-2.234c0.292-0.293 0.29-0.768-0.003-1.06-0.293-0.293-0.768-0.292-1.06 0.002l-2.223 2.23-2.214-2.23z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="28dp" android:height="28dp" android:viewportWidth="28" android:viewportHeight="28">
<path android:pathData="M12.701 3.908c0.532-1.078 2.069-1.078 2.6 0l2.692 5.452 6.017 0.875c1.19 0.173 1.664 1.634 0.804 2.473l-4.355 4.244 1.028 5.993c0.204 1.185-1.04 2.088-2.103 1.529L14 21.644l-5.381 2.83c-1.064 0.559-2.307-0.344-2.104-1.529l1.028-5.993-4.354-4.244c-0.861-0.839-0.386-2.3 0.803-2.473L10.01 9.36l2.691-5.452zm1.3 0.755l-2.657 5.385c-0.211 0.428-0.62 0.724-1.092 0.793l-5.943 0.864 4.3 4.191c0.342 0.334 0.498 0.813 0.417 1.284l-1.015 5.919 5.316-2.795c0.422-0.222 0.927-0.222 1.35 0l5.315 2.795-1.015-5.92c-0.081-0.47 0.075-0.95 0.417-1.283l4.3-4.191-5.943-0.864c-0.472-0.069-0.88-0.365-1.092-0.793l-2.657-5.385z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M13 17c0-0.551-0.448-0.998-1-0.998-0.55 0-0.998 0.447-0.998 0.998 0 0.552 0.447 1 0.999 1 0.551 0 0.998-0.448 0.998-1zm-0.26-7.853C12.69 8.781 12.376 8.5 11.996 8.5c-0.414 0-0.75 0.337-0.749 0.751l0.004 4.502 0.007 0.101c0.05 0.367 0.364 0.648 0.743 0.648 0.414 0 0.75-0.336 0.75-0.75L12.747 9.25 12.74 9.148zm1.23-5.488c-0.857-1.547-3.082-1.547-3.938 0L2.286 17.661C1.456 19.16 2.541 21 4.256 21h15.49c1.714 0 2.799-1.84 1.969-3.34l-7.746-14zm-2.626 0.727c0.286-0.516 1.027-0.517 1.313 0l7.745 14c0.277 0.5-0.085 1.114-0.656 1.114H4.256c-0.572 0-0.934-0.613-0.657-1.113l7.745-14.002z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--~ Copyright (c) 2022. ~ Microsoft Corporation. All rights reserved.-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_fluent_bookmark_24_filled" android:state_activated="true"/>
<item android:drawable="@drawable/ic_fluent_bookmark_24_filled" android:state_checked="true"/>
<item android:drawable="@drawable/ic_fluent_bookmark_24_filled" android:state_selected="true"/>
<item android:drawable="@drawable/ic_fluent_bookmark_24_regular"/>
</selector>

View File

@ -1,16 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/edit" android:title="@string/edit"/>
<item android:id="@+id/delete" android:title="@string/delete"/>
<item android:id="@+id/delete_and_redraft" android:title="@string/sk_delete_and_redraft"/>
<item android:id="@+id/pin" android:title="@string/sk_pin_post"/>
<item android:id="@+id/unpin" android:title="@string/sk_unpin_post"/>
<item android:id="@+id/open_with_account" android:title="@string/sk_open_in_account"/>
<item android:id="@+id/mute" android:title="@string/mute_user"/>
<item android:id="@+id/block" android:title="@string/block_user"/>
<item android:id="@+id/block_domain" android:title="@string/block_domain"/>
<item android:id="@+id/follow" android:title="@string/follow_user"/>
<item android:id="@+id/report" android:title="@string/report_user"/>
<item android:id="@+id/bookmark" android:title="@string/add_bookmark"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>
<item android:id="@+id/open_with_account" android:title="@string/sk_open_with_account" android:icon="@drawable/ic_fluent_person_swap_24_regular">
<menu android:id="@+id/accounts" />
</item>
<item android:id="@+id/edit" android:title="@string/edit" android:icon="@drawable/ic_fluent_edit_24_regular"/>
<item android:id="@+id/delete" android:title="@string/delete" android:icon="@drawable/ic_fluent_delete_24_regular"/>
<item android:id="@+id/delete_and_redraft" android:title="@string/sk_delete_and_redraft" android:icon="@drawable/ic_fluent_arrow_clockwise_24_regular" />
<item android:id="@+id/pin" android:title="@string/sk_pin_post" android:icon="@drawable/ic_fluent_pin_24_regular"/>
<item android:id="@+id/unpin" android:title="@string/sk_unpin_post" android:icon="@drawable/ic_fluent_pin_off_24_regular"/>
<item android:id="@+id/mute" android:title="@string/mute_user" android:icon="@drawable/ic_fluent_speaker_mute_24_regular"/>
<item android:id="@+id/block" android:title="@string/block_user" android:icon="@drawable/ic_fluent_person_prohibited_24_regular"/>
<item android:id="@+id/block_domain" android:title="@string/block_domain" android:icon="@drawable/ic_fluent_shield_prohibited_24_regular"/>
<item android:id="@+id/follow" android:title="@string/follow_user" android:icon="@drawable/ic_fluent_person_add_24_regular"/>
<item android:id="@+id/report" android:title="@string/report_user" android:icon="@drawable/ic_fluent_warning_24_regular"/>
<item android:id="@+id/bookmark" android:title="@string/add_bookmark" android:icon="@drawable/ic_fluent_bookmark_24_regular"/>
<item android:id="@+id/copy_link" android:title="@string/sk_copy_link_to_post" android:icon="@drawable/ic_fluent_link_24_regular"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser" android:icon="@drawable/ic_fluent_globe_24_regular"/>
</menu>

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/share" android:title="@string/share_user"/>
<item android:id="@+id/mute" android:title="@string/mute_user"/>
<item android:id="@+id/block" android:title="@string/block_user"/>
<item android:id="@+id/report" android:title="@string/report_user"/>
<item android:id="@+id/block_domain" android:title="@string/block_domain"/>
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user"/>
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/>
<item android:id="@+id/mute" android:title="@string/mute_user" android:icon="@drawable/ic_fluent_speaker_mute_24_regular"/>
<item android:id="@+id/block" android:title="@string/block_user" android:icon="@drawable/ic_fluent_person_prohibited_24_regular"/>
<item android:id="@+id/report" android:title="@string/report_user" android:icon="@drawable/ic_fluent_warning_24_regular"/>
<item android:id="@+id/block_domain" android:title="@string/block_domain" android:icon="@drawable/ic_fluent_shield_prohibited_24_regular"/>
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user" android:icon="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/>
<item android:id="@+id/manage_user_lists" android:title="@string/sk_lists_with_user" android:icon="@drawable/ic_fluent_people_community_24_regular"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser" android:icon="@drawable/ic_fluent_globe_24_regular"/>
</menu>