Replaces the simple copy functionality for the API token with a
bottom sheet that displays the token and provides information about
its security implications.
This change helps with user awareness
regarding the sensitive nature of the API token and promotes
responsible handling of this credential.
• Moved the top spacer into the Column’s padding(top = 16.dp)
• Removed the unnecessary Row—placed the IconButton directly with bottom padding
• Dropped all fixed .height(...) modifiers so fields and the button scale with system font size
- Treat sendInvites() result as List<InviteResponse>
- Branch on InviteResponse.UserInvite vs EmailInvite
- Use isNullOrEmpty() to drive success/failure state transitions
- InviteResponseDeserializer added
- Retain loading > success/failure > content state flow with delays
- In logout(), set PushNotificationManager.user and refreshedToken before calling removePushDeviceUsingStoredToken()
- Add clearUser() to null out in-memory user and remove saved DEVICE_TOKEN_PREFERENCE_KEY
- Invoke clearUser() after database reset to prevent stray notifications post-logout
Remove old applyScrollContentWindowInsets helper and IME listeners
Add ViewCompat.setOnApplyWindowInsetsListener on root view
Translate chatBarView and recyclerView by IME height and pad for nav-bar insets
Force initial inset dispatch with ViewCompat.requestApplyInsets()
- Set MP cost text to medium weight
- Update skill description to 16sp regular
- Fix text size/weight in pause damage bottom sheet
- Adjust 'Use Skill' button for consistency (16sp medium, 12dp radius, 43dp height)
- Reduce horizontal padding on MP cost chip by ~6-7dp per side
- (Also tweak to text for "Pause/Resume Damage" text)
When chatMessages is empty, set the RecyclerView state to EMPTY and fade in the empty-state TextView; otherwise switch back to DISPLAYING_DATA and hide the TextView.
In ChatFragment.setChatMessages(), update the RecyclerViewEmptySupport’s state to EMPTY when the message list is empty or to DISPLAYING_DATA otherwise. This replaces the loading spinner with the correct empty or data UI.
Track last-parsed Spanned in existingMarkdownText/Notes and bail out if identical, so we don’t reset the view’s content (markdown in title/notes) every bind.
View height still recalculates on refresh (minor layout flash), but the markdown text no longer "flickers".