commit a63eba0e5ddeb66c0cfc1be759fd22423b7a56f6 from: darkwolf date: Fri Jul 10 05:55:23 2026 UTC add conversation visibility commit - a4fe986347f75ccf54bf12f9ba41fbf52e140284 commit + a63eba0e5ddeb66c0cfc1be759fd22423b7a56f6 blob - 3d6e1800c8b38c105c3160e90c2db9bbefc53170 blob + ad93be035808924561c55e39e9dcd69f84987f4c --- mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -500,6 +500,7 @@ public class ComposeFragment extends MastodonToolbarFr case PRIVATE -> R.id.vis_followers; case DIRECT -> R.id.vis_private; case LOCAL -> R.id.vis_local; + case CONVERSATION -> R.id.vis_conversation; }).setChecked(true); visibilityPopup.getMenu().findItem(R.id.local_only).setChecked(localOnly); @@ -725,6 +726,7 @@ public class ComposeFragment extends MastodonToolbarFr case PRIVATE -> R.drawable.ic_fluent_lock_closed_20_filled; case DIRECT -> R.drawable.ic_fluent_mention_20_regular; case LOCAL -> R.drawable.ic_fluent_eye_20_regular; + case CONVERSATION -> R.drawable.ic_fluent_lock_closed_16_filled; }); ImageView moreBtn = view.findViewById(R.id.more); moreBtn.setImageDrawable(visibilityIcon); @@ -773,6 +775,7 @@ public class ComposeFragment extends MastodonToolbarFr case PRIVATE -> R.string.visibility_followers_only; case DIRECT -> R.string.visibility_private; case LOCAL -> R.string.sk_local_only; + case CONVERSATION -> R.string.sk_conversation; }; replyText.setContentDescription(getString(R.string.in_reply_to, status.account.getDisplayName()) + ", " + getString(visibilityNameRes)); replyText.setOnClickListener(v->{ @@ -1684,6 +1687,8 @@ public class ComposeFragment extends MastodonToolbarFr statusVisibility=StatusPrivacy.DIRECT; }else if(id==R.id.vis_local){ statusVisibility=StatusPrivacy.LOCAL; + }else if(id==R.id.vis_conversation){ + statusVisibility=StatusPrivacy.CONVERSATION; } if(id==R.id.local_only){ localOnly=!item.isChecked(); @@ -1774,6 +1779,7 @@ public class ComposeFragment extends MastodonToolbarFr case PRIVATE -> R.string.visibility_followers_only; case DIRECT -> R.string.visibility_private; case LOCAL -> R.string.sk_local_only; + case CONVERSATION -> R.string.sk_conversation; }); Drawable icon=getResources().getDrawable(switch(statusVisibility){ case PUBLIC -> R.drawable.ic_fluent_planet_16_regular; @@ -1781,6 +1787,7 @@ public class ComposeFragment extends MastodonToolbarFr case PRIVATE -> R.drawable.ic_fluent_lock_closed_16_filled; case DIRECT -> R.drawable.ic_fluent_mention_16_regular; case LOCAL -> R.drawable.ic_fluent_eye_16_regular; + case CONVERSATION -> R.drawable.ic_fluent_lock_closed_16_filled; }, getActivity().getTheme()).mutate(); icon.setBounds(0, 0, V.dp(18), V.dp(18)); visibilityBtn.setCompoundDrawableTintList(getContext().getResources().getColorStateList(R.color.m3_primary_selector, getContext().getTheme())); blob - fab0e373cece8719fcc58cc94b9188be0d36921c blob + 5f0abe64da019156712dfe61787d15440a3a48b7 --- mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsPrivacyFragment.java +++ mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsPrivacyFragment.java @@ -64,6 +64,7 @@ public class SettingsPrivacyFragment extends BaseSetti case PRIVATE -> R.string.visibility_followers_only; case DIRECT -> R.string.visibility_private; case LOCAL -> R.string.sk_local_only; + case CONVERSATION -> R.string.sk_conversation; }; } blob - bf8daf4cfcba6817095ba20555d3d5720049d31f blob + 049ff94b7d51f5b24fa50e1c8f1e4cb542faafd4 --- mastodon/src/main/java/org/joinmastodon/android/model/StatusPrivacy.java +++ mastodon/src/main/java/org/joinmastodon/android/model/StatusPrivacy.java @@ -12,7 +12,9 @@ public enum StatusPrivacy{ @SerializedName("direct") DIRECT(3), @SerializedName("local") - LOCAL(4); // akkoma + LOCAL(4), // akkoma + @SerializedName("conversation") + CONVERSATION(5); // mitra private final int privacy; blob - 61b8d1ce2c98d7e126ea175ec468c208387fcc8c blob + 115a39d5b4c2cb2eee2e61ca8bb24fc0d45d576e --- mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java +++ mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java @@ -128,6 +128,7 @@ public class ExtendedFooterStatusDisplayItem extends S case PRIVATE -> R.drawable.ic_fluent_lock_closed_20_filled; case DIRECT -> R.drawable.ic_fluent_mention_20_regular; case LOCAL -> R.drawable.ic_fluent_eye_20_regular; + case CONVERSATION -> R.drawable.ic_fluent_lock_closed_20_filled; }); } blob - 70904bbeb480f84a07752920217fc5c9515c76e1 blob + e86336db1537dd493aab2cd3262c126dd57ef2a5 --- mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewerInfoSheet.java +++ mastodon/src/main/java/org/joinmastodon/android/ui/photoviewer/PhotoViewerInfoSheet.java @@ -146,7 +146,7 @@ public class PhotoViewerInfoSheet extends BottomSheet{ public void setStatus(Status status){ statusID=status.id; boostBtn.setCompoundDrawablesWithIntrinsicBounds(0, switch(status.visibility){ - case DIRECT -> R.drawable.ic_boost_disabled_24px; + case DIRECT, CONVERSATION -> R.drawable.ic_boost_disabled_24px; case PUBLIC, UNLISTED, LOCAL -> R.drawable.ic_boost; case PRIVATE -> R.drawable.ic_boost_private; }, 0, 0); blob - e44dab9190bf59869014974c2b4010012187c66d blob + 4908cb5bc4317d8e032b8c1e968b4b77ec6b62fd --- mastodon/src/main/res/menu/compose_visibility.xml +++ mastodon/src/main/res/menu/compose_visibility.xml @@ -24,5 +24,8 @@ + \ No newline at end of file blob - e701d86380b4f04e15c923e5b61d1cab16ddd668 blob + 1906e018e79838339ff0e0fc61387c9e486cb8e1 --- mastodon/src/main/res/values/strings.xml +++ mastodon/src/main/res/values/strings.xml @@ -183,6 +183,7 @@ Public Followers only Only people mentioned + Conversation Recents Skip New followers blob - 9795f7cc98b15460caf71ffae9b3de925eeda529 blob + 7a258a06b5be8f19ecfdaee3226c1e3ba1f59611 --- mastodon/src/main/res/values/strings_sk.xml +++ mastodon/src/main/res/values/strings_sk.xml @@ -282,6 +282,7 @@ mentioned-only · Local instance only + Conversation Instance features Server supports local-only posting Your home instance must support local-only posting for this to work. Most modified versions of Mastodon do, but Mastodon doesn’t.