2021-07-09 05:18:48 +02:00
|
|
|
package org.thoughtcrime.securesms.util
|
2020-03-12 05:57:53 +01:00
|
|
|
|
2020-05-29 03:16:52 +02:00
|
|
|
import android.animation.Animator
|
|
|
|
import android.animation.AnimatorListenerAdapter
|
2020-05-29 01:43:03 +02:00
|
|
|
import android.animation.FloatEvaluator
|
|
|
|
import android.animation.ValueAnimator
|
2022-09-30 05:32:07 +02:00
|
|
|
import android.content.Context
|
2023-05-09 14:56:36 +02:00
|
|
|
import android.graphics.Bitmap
|
2020-03-12 05:57:53 +01:00
|
|
|
import android.graphics.PointF
|
|
|
|
import android.graphics.Rect
|
2023-06-02 08:05:35 +02:00
|
|
|
import android.util.Size
|
2020-03-12 05:57:53 +01:00
|
|
|
import android.view.View
|
New app theming (#913)
* feat: start new app theming feature
* feat: add some theming colours
* refactor: start refactoring themes and colours to use dynamic attributes
* feat: adding more colours and switching over default colours to be theme based instead of hard-coded or day/night specific
* refactor: take a look at ocean light and logo colour
* feat: global search colours for light and dark ocean
* feat: more styling
* feat: adding themes to conversation activity and refactoring the base theme to apply over the top of the activity's theme so it retains noActionBar etc
* feat: add dynamic accent color
* docs: add todo for changing how accent colour is applied
* feat: update new theming to use override primary style so that the regular colorAccent attribute can be used in existing layouts
* feat: coordinating styles across layouts, fixing up pinned icons and naming for conversation list items
* refactor: re-styling layouts to match new themes and attributes. Need to figure out action mode close button
* refactor: remove @color/text and replace with ?android:textColorPrimary to override in themes
* refactor: add context theme wrapper to bottom sheet dialog that references accent color
* fix: input bar bug fix and preference activity themes
* refactor: new settings menu options
* fix: crash for PNModeActivity.kt
refactor: move ordering in seed dialog to match designs, copy changes to match new settings menu
* feat: add new appearance settings activity
* refactor: title and VM changes
* fix: correct override
* feat: add theme appearance screen UI features and start VM implementation. re-add legacy theme utils to get default for migration
* fix: compile errors and missing themes from emoji features
* refactor: remove background shape alteration and old bottom sheet styles, re-add the theme mode attr
* feat: appearance screen wired up, just need to refresh theme
* feat: add theme state recreation and fix match system settings option
* refactor: add bottom margin
* feat: explore custom preference category
* feat: add the customized session theme for CorrectedPreferenceFragment
* feat: replace AppProtectionPreferenceFragment to extend ListSummaryPreferenceFragment
* refactor: change drawable style and remove explicit dividers
* refactor: remove divider in CorrectedPreferenceFragment
* feat: add theme state check on resume, might be jarring currently
* feat: add preference divider elements for settings menu
* refactor: settings menu redesigns
* refactor: change led preference to integer and refactor TextSecurePreferences.kt
* feat: add scroll parcel to save/restore hierarchy on restart with appearance changes
* feat: add the conversations blocked contacts and refactor preference order and copy
* feat: add blocked contacts activity, basic layout and vm
* feat: add unblock DB functions and storage protocol, start working on the DB query state flow, might have to just implement recipient on modified listener
* feat: add blocked contacts and notif recipient listeners
* feat: add recipient db reader
* feat: add blocked contact interactions and fix a theming crash for notifications
* feat: introduce better equals and hashcode implementations to recipient, replace home diff util content check with hashcode-based comparison
* feat: add settings menu vectors
* fix: preview compile error
* refactor: migrating settings menu to new designs
* feat: help menu
* refactor: simplify link opening
* refactor: remove space
* feat: refactor preferences and start theming for light mode options
* refactor: fixing dark and light modes with dialogs
* refactor: popup dialogs use proper themes now
* refactor: alert dialogs and media edit fragments use attribute references
* refactor: use input bar button attribute instead color control normal in vector tint
* refactor: transparency, dialog fixes, notification fix
* refactor: attrs and styles for buttons
* fix: use prominent button color on the outline button's border
* fix: fix the trash
* refactor: remove the appearance
* refactor: avatar placeholder generation, chips and element border styles
* refactor: use colors instead of style references
* refactor: theming changes to match designs and feedback
* refactor: the titles are bold and the categories are tertiary coloured now
* fix: appearance settings match preferences, search bottom bar uses themed attributes
* refactor: increase setting button height
* Update clear all data dialog
* Update seed dialog
* refactor: more qa feedback changes
* feat: add new TLs and fa-rIR TLs
* Update notification content dialog
* Fix message requests clear all button text color
* feat: re-add screenshot observer
* refactor: make send tint accent color
* feat: add unread background differences
* fix: change unread count indicator
* build: upgrade build numbers
* Fix message requests popupmenu background color
* fix: crash from attr reference in color attribute
* build: upgrade build number
* fix: message bubbles, thumbnail backgrounds, search bar visibility with input bar, attachment buttons
* fix: tertiary text for keyboard page search view
* fix: emoji overflow colour differences
* fix: reaction pill dialog background is now correct colour
* Add style to reactions tab layout
* fix: appearance activity reverting primary color at correct time
* fix: show call privacy warning every time instead of just once
* fix: gradient background(?) and audio autoplay disable
* fix: crash in all media containing documents
* fix: reaction dialog heading fixes
* Add style to reactions tab layout
* fix: remove gradient backgrounds
* fix: adding new reaction normal text attribute to try correct the tab layout
* fix: ocean dark unread/read colours
* build; update build number
* build: update build number
Co-authored-by: charles <charles@oxen.io>
2022-10-12 08:05:55 +02:00
|
|
|
import androidx.annotation.ColorInt
|
|
|
|
import androidx.annotation.DimenRes
|
|
|
|
import network.loki.messenger.R
|
|
|
|
import org.session.libsession.utilities.getColorFromAttr
|
2022-09-30 05:32:07 +02:00
|
|
|
import android.view.inputmethod.InputMethodManager
|
2023-05-09 14:56:36 +02:00
|
|
|
import androidx.core.graphics.applyCanvas
|
2023-06-02 08:05:35 +02:00
|
|
|
import kotlin.math.roundToInt
|
2020-03-12 05:57:53 +01:00
|
|
|
|
|
|
|
fun View.contains(point: PointF): Boolean {
|
|
|
|
return hitRect.contains(point.x.toInt(), point.y.toInt())
|
|
|
|
}
|
|
|
|
|
|
|
|
val View.hitRect: Rect
|
|
|
|
get() {
|
|
|
|
val rect = Rect()
|
|
|
|
getHitRect(rect)
|
|
|
|
return rect
|
2020-05-29 01:43:03 +02:00
|
|
|
}
|
|
|
|
|
New app theming (#913)
* feat: start new app theming feature
* feat: add some theming colours
* refactor: start refactoring themes and colours to use dynamic attributes
* feat: adding more colours and switching over default colours to be theme based instead of hard-coded or day/night specific
* refactor: take a look at ocean light and logo colour
* feat: global search colours for light and dark ocean
* feat: more styling
* feat: adding themes to conversation activity and refactoring the base theme to apply over the top of the activity's theme so it retains noActionBar etc
* feat: add dynamic accent color
* docs: add todo for changing how accent colour is applied
* feat: update new theming to use override primary style so that the regular colorAccent attribute can be used in existing layouts
* feat: coordinating styles across layouts, fixing up pinned icons and naming for conversation list items
* refactor: re-styling layouts to match new themes and attributes. Need to figure out action mode close button
* refactor: remove @color/text and replace with ?android:textColorPrimary to override in themes
* refactor: add context theme wrapper to bottom sheet dialog that references accent color
* fix: input bar bug fix and preference activity themes
* refactor: new settings menu options
* fix: crash for PNModeActivity.kt
refactor: move ordering in seed dialog to match designs, copy changes to match new settings menu
* feat: add new appearance settings activity
* refactor: title and VM changes
* fix: correct override
* feat: add theme appearance screen UI features and start VM implementation. re-add legacy theme utils to get default for migration
* fix: compile errors and missing themes from emoji features
* refactor: remove background shape alteration and old bottom sheet styles, re-add the theme mode attr
* feat: appearance screen wired up, just need to refresh theme
* feat: add theme state recreation and fix match system settings option
* refactor: add bottom margin
* feat: explore custom preference category
* feat: add the customized session theme for CorrectedPreferenceFragment
* feat: replace AppProtectionPreferenceFragment to extend ListSummaryPreferenceFragment
* refactor: change drawable style and remove explicit dividers
* refactor: remove divider in CorrectedPreferenceFragment
* feat: add theme state check on resume, might be jarring currently
* feat: add preference divider elements for settings menu
* refactor: settings menu redesigns
* refactor: change led preference to integer and refactor TextSecurePreferences.kt
* feat: add scroll parcel to save/restore hierarchy on restart with appearance changes
* feat: add the conversations blocked contacts and refactor preference order and copy
* feat: add blocked contacts activity, basic layout and vm
* feat: add unblock DB functions and storage protocol, start working on the DB query state flow, might have to just implement recipient on modified listener
* feat: add blocked contacts and notif recipient listeners
* feat: add recipient db reader
* feat: add blocked contact interactions and fix a theming crash for notifications
* feat: introduce better equals and hashcode implementations to recipient, replace home diff util content check with hashcode-based comparison
* feat: add settings menu vectors
* fix: preview compile error
* refactor: migrating settings menu to new designs
* feat: help menu
* refactor: simplify link opening
* refactor: remove space
* feat: refactor preferences and start theming for light mode options
* refactor: fixing dark and light modes with dialogs
* refactor: popup dialogs use proper themes now
* refactor: alert dialogs and media edit fragments use attribute references
* refactor: use input bar button attribute instead color control normal in vector tint
* refactor: transparency, dialog fixes, notification fix
* refactor: attrs and styles for buttons
* fix: use prominent button color on the outline button's border
* fix: fix the trash
* refactor: remove the appearance
* refactor: avatar placeholder generation, chips and element border styles
* refactor: use colors instead of style references
* refactor: theming changes to match designs and feedback
* refactor: the titles are bold and the categories are tertiary coloured now
* fix: appearance settings match preferences, search bottom bar uses themed attributes
* refactor: increase setting button height
* Update clear all data dialog
* Update seed dialog
* refactor: more qa feedback changes
* feat: add new TLs and fa-rIR TLs
* Update notification content dialog
* Fix message requests clear all button text color
* feat: re-add screenshot observer
* refactor: make send tint accent color
* feat: add unread background differences
* fix: change unread count indicator
* build: upgrade build numbers
* Fix message requests popupmenu background color
* fix: crash from attr reference in color attribute
* build: upgrade build number
* fix: message bubbles, thumbnail backgrounds, search bar visibility with input bar, attachment buttons
* fix: tertiary text for keyboard page search view
* fix: emoji overflow colour differences
* fix: reaction pill dialog background is now correct colour
* Add style to reactions tab layout
* fix: appearance activity reverting primary color at correct time
* fix: show call privacy warning every time instead of just once
* fix: gradient background(?) and audio autoplay disable
* fix: crash in all media containing documents
* fix: reaction dialog heading fixes
* Add style to reactions tab layout
* fix: remove gradient backgrounds
* fix: adding new reaction normal text attribute to try correct the tab layout
* fix: ocean dark unread/read colours
* build; update build number
* build: update build number
Co-authored-by: charles <charles@oxen.io>
2022-10-12 08:05:55 +02:00
|
|
|
@ColorInt
|
|
|
|
fun Context.getAccentColor() = getColorFromAttr(R.attr.colorAccent)
|
|
|
|
|
2020-05-29 01:43:03 +02:00
|
|
|
fun View.animateSizeChange(@DimenRes startSizeID: Int, @DimenRes endSizeID: Int, animationDuration: Long = 250) {
|
|
|
|
val startSize = resources.getDimension(startSizeID)
|
|
|
|
val endSize = resources.getDimension(endSizeID)
|
2021-06-16 07:49:39 +02:00
|
|
|
animateSizeChange(startSize, endSize)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun View.animateSizeChange(startSize: Float, endSize: Float, animationDuration: Long = 250) {
|
|
|
|
val layoutParams = this.layoutParams
|
2020-05-29 01:43:03 +02:00
|
|
|
val animation = ValueAnimator.ofObject(FloatEvaluator(), startSize, endSize)
|
|
|
|
animation.duration = animationDuration
|
|
|
|
animation.addUpdateListener { animator ->
|
|
|
|
val size = animator.animatedValue as Float
|
|
|
|
layoutParams.width = size.toInt()
|
|
|
|
layoutParams.height = size.toInt()
|
|
|
|
this.layoutParams = layoutParams
|
|
|
|
}
|
|
|
|
animation.start()
|
2020-05-29 03:16:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun View.fadeIn(duration: Long = 150) {
|
|
|
|
visibility = View.VISIBLE
|
|
|
|
animate().setDuration(duration).alpha(1.0f).start()
|
|
|
|
}
|
|
|
|
|
|
|
|
fun View.fadeOut(duration: Long = 150) {
|
|
|
|
animate().setDuration(duration).alpha(0.0f).setListener(object : AnimatorListenerAdapter() {
|
2023-06-28 03:04:48 +02:00
|
|
|
override fun onAnimationEnd(animation: Animator) {
|
2020-05-29 03:16:52 +02:00
|
|
|
super.onAnimationEnd(animation)
|
|
|
|
visibility = View.GONE
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2022-09-30 05:32:07 +02:00
|
|
|
|
|
|
|
fun View.hideKeyboard() {
|
|
|
|
val imm = this.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
|
|
imm.hideSoftInputFromWindow(this.windowToken, 0)
|
|
|
|
}
|
2023-05-09 14:56:36 +02:00
|
|
|
|
2023-06-02 08:05:35 +02:00
|
|
|
|
|
|
|
fun View.drawToBitmap(config: Bitmap.Config = Bitmap.Config.ARGB_8888, longestWidth: Int = 2000): Bitmap {
|
|
|
|
val size = Size(measuredWidth, measuredHeight).coerceAtMost(longestWidth)
|
|
|
|
val scale = size.width / measuredWidth.toFloat()
|
|
|
|
|
|
|
|
return Bitmap.createBitmap(size.width, size.height, config).applyCanvas {
|
|
|
|
scale(scale, scale)
|
2023-05-09 14:56:36 +02:00
|
|
|
translate(-scrollX.toFloat(), -scrollY.toFloat())
|
|
|
|
draw(this)
|
|
|
|
}
|
2023-06-02 08:05:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun Size.coerceAtMost(longestWidth: Int): Size =
|
|
|
|
(width.toFloat() / height).let { aspect ->
|
|
|
|
if (aspect > 1) {
|
|
|
|
width.coerceAtMost(longestWidth).let { Size(it, (it / aspect).roundToInt()) }
|
|
|
|
} else {
|
|
|
|
height.coerceAtMost(longestWidth).let { Size((it * aspect).roundToInt(), it) }
|
|
|
|
}
|
|
|
|
}
|