diff --git a/CHANGELOG.md b/CHANGELOG.md index 402e54c52..8e43c8862 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ ### Significant bug fixes +## v27.2 + +### Significant bug fixes + +- The title of a hashtag tab now shows the actual hashtags again (instead of just "Hashtags") https://github.com/tuskyapp/Tusky/pull/4868 +- Makes sure the background color of a dialogs is correct https://github.com/tuskyapp/Tusky/pull/4864 +- Fixes an issue where Tusky would freeze while loading a timeline gap https://github.com/tuskyapp/Tusky/pull/4865 + ## v27.1 ### New features and other improvements diff --git a/app/build.gradle b/app/build.gradle index 5c640026a..b970cc7e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,8 +29,8 @@ android { namespace "com.keylesspalace.tusky" minSdk 24 targetSdk 34 - versionCode 128 - versionName "27.1" + versionCode 129 + versionName "27.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountsInListFragment.kt b/app/src/main/java/com/keylesspalace/tusky/AccountsInListFragment.kt index 4bb46939b..d92b92ab0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountsInListFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/AccountsInListFragment.kt @@ -75,7 +75,7 @@ class AccountsInListFragment : DialogFragment() { viewModel.load(listId) } - override fun getTheme() = R.style.TuskyDialogOverlay + override fun getTheme() = R.style.TuskyDialogFragment override fun onStart() { super.onStart() diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt index f63da1551..e2721f162 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt @@ -886,10 +886,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider { tabLayoutMediator = TabLayoutMediator(activeTabLayout, binding.viewPager, true) { tab: TabLayout.Tab, position: Int -> tab.icon = AppCompatResources.getDrawable(this@MainActivity, tabs[position].icon) - tab.contentDescription = when (tabs[position].id) { - LIST -> tabs[position].arguments[1] - else -> getString(tabs[position].text) - } + tab.contentDescription = tabs[position].title(this) if (tabs[position].id == DIRECT) { val badge = tab.orCreateBadge badge.isVisible = activeAccount.hasDirectMessageBadge diff --git a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt index 38d5b9854..c01aa5be3 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt @@ -308,27 +308,27 @@ class NotificationsViewModel @Inject constructor( ) ) - val response = db.withTransaction { - val idAbovePlaceholder = notificationsDao.getIdAbove(account.id, placeholderId) - val idBelowPlaceholder = notificationsDao.getIdBelow(account.id, placeholderId) - when (readingOrder) { - // Using minId, loads up to LOAD_AT_ONCE statuses with IDs immediately - // after minId and no larger than maxId - ReadingOrder.OLDEST_FIRST -> api.notifications( - maxId = idAbovePlaceholder, - minId = idBelowPlaceholder, - limit = TimelineViewModel.LOAD_AT_ONCE, - excludes = excludes.value - ) - // Using sinceId, loads up to LOAD_AT_ONCE statuses immediately before - // maxId, and no smaller than minId. - ReadingOrder.NEWEST_FIRST -> api.notifications( - maxId = idAbovePlaceholder, - sinceId = idBelowPlaceholder, - limit = TimelineViewModel.LOAD_AT_ONCE, - excludes = excludes.value - ) - } + val (idAbovePlaceholder, idBelowPlaceholder) = db.withTransaction { + notificationsDao.getIdAbove(account.id, placeholderId) to + notificationsDao.getIdBelow(account.id, placeholderId) + } + val response = when (readingOrder) { + // Using minId, loads up to LOAD_AT_ONCE statuses with IDs immediately + // after minId and no larger than maxId + ReadingOrder.OLDEST_FIRST -> api.notifications( + maxId = idAbovePlaceholder, + minId = idBelowPlaceholder, + limit = TimelineViewModel.LOAD_AT_ONCE, + excludes = excludes.value + ) + // Using sinceId, loads up to LOAD_AT_ONCE statuses immediately before + // maxId, and no smaller than minId. + ReadingOrder.NEWEST_FIRST -> api.notifications( + maxId = idAbovePlaceholder, + sinceId = idBelowPlaceholder, + limit = TimelineViewModel.LOAD_AT_ONCE, + excludes = excludes.value + ) } val notifications = response.body() diff --git a/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/CachedTimelineViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/CachedTimelineViewModel.kt index e315d5252..b2b36829e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/CachedTimelineViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/timeline/viewmodel/CachedTimelineViewModel.kt @@ -157,25 +157,25 @@ class CachedTimelineViewModel @Inject constructor( Placeholder(placeholderId, loading = true).toEntity(tuskyAccountId = account.id) ) - val response = db.withTransaction { - val idAbovePlaceholder = timelineDao.getIdAbove(account.id, placeholderId) - val idBelowPlaceholder = timelineDao.getIdBelow(account.id, placeholderId) - when (readingOrder) { - // Using minId, loads up to LOAD_AT_ONCE statuses with IDs immediately - // after minId and no larger than maxId - OLDEST_FIRST -> api.homeTimeline( - maxId = idAbovePlaceholder, - minId = idBelowPlaceholder, - limit = LOAD_AT_ONCE - ) - // Using sinceId, loads up to LOAD_AT_ONCE statuses immediately before - // maxId, and no smaller than minId. - NEWEST_FIRST -> api.homeTimeline( - maxId = idAbovePlaceholder, - sinceId = idBelowPlaceholder, - limit = LOAD_AT_ONCE - ) - } + val (idAbovePlaceholder, idBelowPlaceholder) = db.withTransaction { + timelineDao.getIdAbove(account.id, placeholderId) to + timelineDao.getIdBelow(account.id, placeholderId) + } + val response = when (readingOrder) { + // Using minId, loads up to LOAD_AT_ONCE statuses with IDs immediately + // after minId and no larger than maxId + OLDEST_FIRST -> api.homeTimeline( + maxId = idAbovePlaceholder, + minId = idBelowPlaceholder, + limit = LOAD_AT_ONCE + ) + // Using sinceId, loads up to LOAD_AT_ONCE statuses immediately before + // maxId, and no smaller than minId. + NEWEST_FIRST -> api.homeTimeline( + maxId = idAbovePlaceholder, + sinceId = idBelowPlaceholder, + limit = LOAD_AT_ONCE + ) } val statuses = response.body() diff --git a/app/src/main/res/drawable/dialog_background.xml b/app/src/main/res/drawable/dialog_background.xml new file mode 100644 index 000000000..bde2b56d3 --- /dev/null +++ b/app/src/main/res/drawable/dialog_background.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 21c5a1002..00afb9cf2 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -94,9 +94,9 @@ @style/TuskyButton.TextButton - @style/TuskyDialogOverlay + @style/TuskyMaterialDialogOverlay - @style/TuskyDialogOverlay + @style/TuskyAlertDialog 16dp @style/TuskyTimePickerOverlay @@ -146,12 +146,22 @@ @color/white - - + + + + diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01_timeline.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/01_timeline.png index 439f560b6..0f8e3a1f7 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/01_timeline.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/01_timeline.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/03_profile.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/03_profile.png index a1893f44c..080664578 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/03_profile.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/03_profile.png differ