diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt index f097f0e6..bc3b2b68 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt @@ -834,7 +834,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje header.clear() header.profiles = profiles header.setActiveProfile(accountManager.activeAccount!!.id) - binding.mainToolbar.subtitle = if (accountManager.accounts.size > 1) { + binding.mainToolbar.subtitle = if (accountManager.shouldDisplaySelfUsername(this)) { accountManager.activeAccount!!.fullName } else null } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt index cd4b57dd..46870895 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt @@ -244,7 +244,7 @@ class ComposeActivity : viewModel.setup(composeOptions) - if (accountManager.accounts.size > 1) { + if (accountManager.shouldDisplaySelfUsername(this)) { binding.composeUsernameView.text = getString( R.string.compose_active_account_description, activeAccount.fullName diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt index a650f76b..8ae4e056 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt @@ -125,7 +125,7 @@ class PreferencesActivity : this.restartCurrentActivity() } "statusTextSize", "absoluteTimeView", "showBotOverlay", "animateGifAvatars", "useBlurhash", - "showCardsInTimelines", "confirmReblogs", "confirmFavourites", + "showSelfUsername", "showCardsInTimelines", "confirmReblogs", "confirmFavourites", "enableSwipeForTabs", "mainNavPosition", PrefKeys.HIDE_TOP_TOOLBAR -> { restartActivitiesOnExit = true } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt index 74d8c815..ce28a414 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt @@ -96,6 +96,16 @@ class PreferencesFragment : PreferenceFragmentCompat(), Injectable { setTitle(R.string.pref_main_nav_position) } + listPreference { + setDefaultValue("disambiguate") + setEntries(R.array.pref_show_self_username_names) + setEntryValues(R.array.pref_show_self_username_values) + key = PrefKeys.SHOW_SELF_USERNAME + setSummaryProvider { entry } + setTitle(R.string.pref_title_show_self_username) + isSingleLineTitle = false + } + switchPreference { setDefaultValue(false) key = PrefKeys.HIDE_TOP_TOOLBAR diff --git a/app/src/main/java/com/keylesspalace/tusky/db/AccountManager.kt b/app/src/main/java/com/keylesspalace/tusky/db/AccountManager.kt index 9c5e118b..951cb977 100644 --- a/app/src/main/java/com/keylesspalace/tusky/db/AccountManager.kt +++ b/app/src/main/java/com/keylesspalace/tusky/db/AccountManager.kt @@ -15,9 +15,12 @@ package com.keylesspalace.tusky.db +import android.content.Context import android.util.Log +import androidx.preference.PreferenceManager import com.keylesspalace.tusky.entity.Account import com.keylesspalace.tusky.entity.Status +import com.keylesspalace.tusky.settings.PrefKeys import java.util.Locale import javax.inject.Inject import javax.inject.Singleton @@ -225,4 +228,18 @@ class AccountManager @Inject constructor(db: AppDatabase) { identifier == it.identifier } } + + /** + * @return true if the name of the currently-selected account should be displayed in UIs + */ + fun shouldDisplaySelfUsername(context: Context): Boolean { + val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + val showUsernamePreference = sharedPreferences.getString(PrefKeys.SHOW_SELF_USERNAME, "disambiguate") + if (showUsernamePreference == "always") + return true + if (showUsernamePreference == "never") + return false + + return accounts.size > 1 // "disambiguate" + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt index ee92fc2d..52c6f8a1 100644 --- a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt +++ b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsConstants.kt @@ -27,6 +27,7 @@ object PrefKeys { const val SHOW_BOT_OVERLAY = "showBotOverlay" const val ANIMATE_GIF_AVATARS = "animateGifAvatars" const val USE_BLURHASH = "useBlurhash" + const val SHOW_SELF_USERNAME = "showSelfUsername" const val SHOW_NOTIFICATIONS_FILTER = "showNotificationsFilter" const val SHOW_CARDS_IN_TIMELINES = "showCardsInTimelines" const val CONFIRM_REBLOGS = "confirmReblogs" diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 3e1f033d..5562b20f 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -144,6 +144,12 @@ bottom + + always + disambiguate + never + + %1$s; %2$s; %3$s, %14$s %4$s, %5$s; %6$s, %7$s, %8$s, %9$s, %10$s; %11$s, %12$s, %13$s diff --git a/app/src/main/res/values/string-arrays.xml b/app/src/main/res/values/string-arrays.xml index c97fbb3d..2a2bd224 100644 --- a/app/src/main/res/values/string-arrays.xml +++ b/app/src/main/res/values/string-arrays.xml @@ -23,4 +23,10 @@ @string/post_text_size_largest + + @string/pref_show_self_username_always + @string/pref_show_self_username_disambiguate + @string/pref_show_self_username_never + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 75824a9a..b999d5ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -293,6 +293,10 @@ Large Largest + Always + When multiple accounts logged in + Never + New Mentions Notifications about new mentions New Followers @@ -618,6 +622,7 @@ You don\'t have any scheduled posts. There are no announcements. Mastodon has a minimum scheduling interval of 5 minutes. + Show username in toolbars Show link previews in timelines Show confirmation dialog before boosting Show confirmation dialog before favoriting