Dynamic colors [1/2]
This commit is contained in:
@@ -38,11 +38,9 @@ import android.view.LayoutInflater
|
||||
import androidx.browser.customtabs.CustomTabsIntent
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.app.ActivityOptionsCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.aurora.Constants
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.util.Preferences
|
||||
|
||||
private const val TAG = "Context"
|
||||
|
||||
@@ -115,44 +113,6 @@ fun Context.getStyledAttributeColor(id: Int): Int {
|
||||
return styledAttr
|
||||
}
|
||||
|
||||
fun Context.accentColor(): Int {
|
||||
val color = when (Preferences.getInteger(this, Preferences.PREFERENCE_THEME_ACCENT)) {
|
||||
0 -> R.color.colorAccent
|
||||
1 -> R.color.colorAccent01
|
||||
2 -> R.color.colorAccent02
|
||||
3 -> R.color.colorAccent03
|
||||
4 -> R.color.colorAccent04
|
||||
5 -> R.color.colorAccent05
|
||||
6 -> R.color.colorAccent06
|
||||
7 -> R.color.colorAccent07
|
||||
8 -> R.color.colorAccent08
|
||||
9 -> R.color.colorAccent09
|
||||
10 -> R.color.colorAccent10
|
||||
11 -> R.color.colorAccent11
|
||||
12 -> R.color.colorAccent12
|
||||
13 -> R.color.colorAccent13
|
||||
else -> if (isSAndAbove()) R.color.colorAccent else R.color.colorAccent01
|
||||
}
|
||||
return ContextCompat.getColor(this, color)
|
||||
}
|
||||
|
||||
fun Context.backgroundColor(): Int {
|
||||
val color = when (Preferences.getInteger(this, Preferences.PREFERENCE_THEME_TYPE)) {
|
||||
1 -> R.color.colorWhite
|
||||
2 -> R.color.colorDarkBackground
|
||||
3 -> R.color.colorBlack
|
||||
4 -> R.color.colorDarkXBackground
|
||||
5 -> R.color.colorDarkordBackground
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (color == null) {
|
||||
return getStyledAttributeColor(com.google.android.material.R.attr.colorSurface)
|
||||
}
|
||||
|
||||
return ContextCompat.getColor(this, color)
|
||||
}
|
||||
|
||||
fun Context.isIgnoringBatteryOptimizations(): Boolean {
|
||||
return if (isMAndAbove()) {
|
||||
(getSystemService(Context.POWER_SERVICE) as PowerManager).isIgnoringBatteryOptimizations(
|
||||
|
||||
@@ -19,56 +19,10 @@
|
||||
|
||||
package com.aurora.extensions
|
||||
|
||||
import android.app.UiModeManager
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.view.WindowInsetsControllerCompat
|
||||
import com.aurora.store.util.CommonUtil
|
||||
import com.aurora.store.util.Preferences
|
||||
|
||||
fun AppCompatActivity.applyThemeAccent() {
|
||||
val themeId = Preferences.getInteger(this, Preferences.PREFERENCE_THEME_TYPE)
|
||||
val accentId = Preferences.getInteger(this, Preferences.PREFERENCE_THEME_ACCENT)
|
||||
val uiModeManager = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
|
||||
|
||||
val themeStyle = CommonUtil.getThemeStyleById(themeId)
|
||||
val accentStyle = CommonUtil.getAccentStyleById(accentId)
|
||||
|
||||
/*Apply Theme*/
|
||||
setTheme(themeStyle)
|
||||
theme.applyStyle(accentStyle, true)
|
||||
|
||||
when (themeId) {
|
||||
0 -> {
|
||||
if (isSAndAbove()) {
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_CUSTOM)
|
||||
} else {
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||
}
|
||||
}
|
||||
|
||||
1 -> {
|
||||
if (!isVAndAbove()) setSystemBarConfiguration(light = true)
|
||||
if (isSAndAbove()) {
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_NO)
|
||||
} else {
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
if (!isVAndAbove()) setSystemBarConfiguration(light = false)
|
||||
if (isSAndAbove()) {
|
||||
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_YES)
|
||||
} else {
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private fun AppCompatActivity.setSystemBarConfiguration(light: Boolean) {
|
||||
|
||||
@@ -20,10 +20,8 @@
|
||||
package com.aurora.extensions
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.ColorStateList
|
||||
import android.view.View
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
|
||||
fun View.isVisible() = visibility == View.VISIBLE
|
||||
|
||||
@@ -84,10 +82,3 @@ fun View.flip(resetToZero: Boolean = true, duration: Long = 400) {
|
||||
fun View.getString(resourceId: Int): String {
|
||||
return context.getString(resourceId)
|
||||
}
|
||||
|
||||
fun FloatingActionButton.applyColors() {
|
||||
val accentColor = context.accentColor()
|
||||
backgroundTintList = ColorStateList.valueOf(accentColor)
|
||||
imageTintList = ColorStateList.valueOf(contrastingColor(accentColor))
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ import com.aurora.gplayapi.data.models.StreamCluster
|
||||
import com.aurora.gplayapi.helpers.contracts.StreamContract
|
||||
import com.aurora.gplayapi.helpers.contracts.TopChartsContract
|
||||
|
||||
typealias MR = com.google.android.material.R.attr
|
||||
|
||||
typealias TopChartStash = MutableMap<TopChartsContract.Type, MutableMap<TopChartsContract.Chart, StreamCluster>>
|
||||
typealias HomeStash = MutableMap<StreamContract.Category, StreamBundle>
|
||||
typealias CategoryStash = MutableMap<Category.Type, List<Category>>
|
||||
|
||||
@@ -31,6 +31,7 @@ import com.aurora.store.util.CommonUtil
|
||||
import com.aurora.store.util.DownloadWorkerUtil
|
||||
import com.aurora.store.util.NotificationUtil
|
||||
import com.aurora.store.util.PackageUtil
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.cancel
|
||||
@@ -64,6 +65,9 @@ class AuroraApp : Application(), Configuration.Provider {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
// Apply dynamic colors to activities0
|
||||
DynamicColors.applyToActivitiesIfAvailable(this);
|
||||
|
||||
// Required for Shizuku installer
|
||||
if (isPAndAbove()) HiddenApiBypass.addHiddenApiExemptions("I", "L")
|
||||
|
||||
|
||||
@@ -20,13 +20,12 @@
|
||||
|
||||
package com.aurora.store
|
||||
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.activity.addCallback
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.updatePadding
|
||||
@@ -34,8 +33,6 @@ import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.FloatingWindow
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.navigation.ui.setupWithNavController
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.applyThemeAccent
|
||||
import com.aurora.store.data.event.BusEvent
|
||||
import com.aurora.store.data.event.InstallerEvent
|
||||
import com.aurora.store.data.model.NetworkStatus
|
||||
@@ -75,7 +72,7 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
applyThemeAccent()
|
||||
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||
|
||||
B = ActivityMainBinding.inflate(layoutInflater)
|
||||
|
||||
@@ -122,11 +119,7 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
B.navView.apply {
|
||||
val alphaColor = ColorUtils.setAlphaComponent(this@MainActivity.accentColor(), 100)
|
||||
setupWithNavController(navController)
|
||||
itemActiveIndicatorColor = ColorStateList.valueOf(alphaColor)
|
||||
}
|
||||
B.navView.setupWithNavController(navController)
|
||||
|
||||
// Handle quick exit from back actions
|
||||
val defaultTab = when (Preferences.getInteger(this, PREFERENCE_DEFAULT_SELECTED_TAB)) {
|
||||
|
||||
@@ -23,7 +23,6 @@ import android.content.Context
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.ProcessLifecycleOwner
|
||||
import com.aurora.extensions.isSAndAbove
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.ProxyInfo
|
||||
import java.text.DecimalFormat
|
||||
@@ -158,38 +157,6 @@ object CommonUtil {
|
||||
}
|
||||
}
|
||||
|
||||
fun getThemeStyleById(themeId: Int): Int {
|
||||
return when (themeId) {
|
||||
0 -> R.style.AppTheme
|
||||
1 -> R.style.AppTheme_Light
|
||||
2 -> R.style.AppTheme_Dark
|
||||
3 -> R.style.AppTheme_Black
|
||||
4 -> R.style.AppTheme_DarkX
|
||||
5 -> R.style.AppTheme_Darkord
|
||||
else -> R.style.AppTheme
|
||||
}
|
||||
}
|
||||
|
||||
fun getAccentStyleById(accentId: Int): Int {
|
||||
return when (accentId) {
|
||||
0 -> R.style.Accent00
|
||||
1 -> R.style.Accent01
|
||||
2 -> R.style.Accent02
|
||||
3 -> R.style.Accent03
|
||||
4 -> R.style.Accent04
|
||||
5 -> R.style.Accent05
|
||||
6 -> R.style.Accent06
|
||||
7 -> R.style.Accent07
|
||||
8 -> R.style.Accent08
|
||||
9 -> R.style.Accent09
|
||||
10 -> R.style.Accent10
|
||||
11 -> R.style.Accent11
|
||||
12 -> R.style.Accent12
|
||||
13 -> R.style.Accent13
|
||||
else -> if (isSAndAbove()) R.style.Accent00 else R.style.Accent01
|
||||
}
|
||||
}
|
||||
|
||||
fun parseProxyUrl(proxyUrl: String): ProxyInfo? {
|
||||
val pattern = """^(https?|socks)://(?:([^\s:@]+):([^\s:@]+)@)?([^\s:@]+):(\d+)$""".toRegex()
|
||||
val match = pattern.find(proxyUrl)
|
||||
|
||||
@@ -13,12 +13,10 @@ import android.net.Uri
|
||||
import android.os.Build
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.PendingIntentCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.navigation.NavDeepLinkBuilder
|
||||
import androidx.work.WorkManager
|
||||
import com.aurora.Constants
|
||||
import com.aurora.extensions.getStyledAttributeColor
|
||||
import com.aurora.store.MainActivity
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.activity.InstallActivity
|
||||
@@ -74,7 +72,6 @@ object NotificationUtil {
|
||||
fun getDownloadNotification(context: Context): Notification {
|
||||
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_GENERAL)
|
||||
.setSmallIcon(android.R.drawable.stat_sys_download)
|
||||
.setColor(ContextCompat.getColor(context, R.color.colorAccent))
|
||||
.setContentTitle(context.getString(R.string.app_updater_service_notif_title))
|
||||
.setContentText(context.getString(R.string.app_updater_service_notif_text))
|
||||
.setOngoing(true)
|
||||
@@ -89,7 +86,6 @@ object NotificationUtil {
|
||||
): Notification {
|
||||
val builder = NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_GENERAL)
|
||||
builder.setContentTitle(download.displayName)
|
||||
builder.color = ContextCompat.getColor(context, R.color.colorAccent)
|
||||
builder.setContentIntent(getContentIntentForDownloads(context))
|
||||
builder.setLargeIcon(largeIcon)
|
||||
|
||||
@@ -163,7 +159,6 @@ object NotificationUtil {
|
||||
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_ALERT)
|
||||
.setSmallIcon(R.drawable.ic_install)
|
||||
.setLargeIcon(PackageUtil.getIconForPackage(context, packageName))
|
||||
.setColor(context.getStyledAttributeColor(R.color.colorAccent))
|
||||
.setContentTitle(displayName)
|
||||
.setContentText(context.getString(R.string.installer_status_success))
|
||||
.setContentIntent(getContentIntentForDetails(context, packageName))
|
||||
@@ -178,7 +173,6 @@ object NotificationUtil {
|
||||
): Notification {
|
||||
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_ALERT)
|
||||
.setSmallIcon(R.drawable.ic_install)
|
||||
.setColor(context.getStyledAttributeColor(R.color.colorAccent))
|
||||
.setContentTitle(displayName)
|
||||
.setContentText(content)
|
||||
.setContentIntent(getContentIntentForDetails(context, packageName))
|
||||
@@ -254,7 +248,6 @@ object NotificationUtil {
|
||||
fun getExportNotification(context: Context): Notification {
|
||||
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_ALERT)
|
||||
.setSmallIcon(R.drawable.ic_file_copy)
|
||||
.setColor(context.getStyledAttributeColor(R.color.colorAccent))
|
||||
.setContentTitle(context.getString(R.string.export_app_title))
|
||||
.setContentText(context.getString(R.string.export_app_summary))
|
||||
.setOngoing(false)
|
||||
@@ -288,7 +281,6 @@ object NotificationUtil {
|
||||
|
||||
val builder = NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_ALERT)
|
||||
.setSmallIcon(R.drawable.ic_file_copy)
|
||||
.setColor(context.getStyledAttributeColor(R.color.colorAccent))
|
||||
.setContentTitle(displayName).setContentText(content)
|
||||
.setContentIntent(getContentIntentForExport(context, uri))
|
||||
.setAutoCancel(true)
|
||||
|
||||
@@ -21,14 +21,12 @@ package com.aurora.store.view.custom.layouts
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.pm.PermissionInfo
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.util.AttributeSet
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.showDialog
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.PermissionGroupInfo
|
||||
@@ -59,7 +57,6 @@ class PermissionGroup @JvmOverloads constructor(
|
||||
|
||||
val imageView = findViewById<ImageView>(R.id.img)
|
||||
imageView.setImageDrawable(getPermissionGroupIcon(permissionGroupInfo))
|
||||
imageView.imageTintList = ColorStateList.valueOf(context.accentColor())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +95,7 @@ class PermissionGroup @JvmOverloads constructor(
|
||||
) {
|
||||
val textView = TextView(context)
|
||||
textView.text = label
|
||||
if (isNewPerm) textView.setTextColor(context.accentColor())
|
||||
if (isNewPerm) textView.setTextColor(ContextCompat.getColor(context, R.color.colorGreen))
|
||||
textView.setOnClickListener {
|
||||
var title: String = permissionGroupInfo.label
|
||||
|
||||
|
||||
@@ -20,12 +20,8 @@
|
||||
package com.aurora.store.view.custom.layouts.button
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.ColorStateList
|
||||
import android.util.AttributeSet
|
||||
import android.widget.RelativeLayout
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.darkenColor
|
||||
import com.aurora.extensions.lightenColor
|
||||
import com.aurora.extensions.runOnUiThread
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.DownloadStatus
|
||||
@@ -54,15 +50,6 @@ class UpdateButton : RelativeLayout {
|
||||
private fun init(context: Context) {
|
||||
val view = inflate(context, R.layout.view_update_button, this)
|
||||
binding = ViewUpdateButtonBinding.bind(view)
|
||||
|
||||
// Apply primaryColor tint to all buttons with alpha
|
||||
val alphaAccent = lightenColor(context.accentColor(), alpha = 200)
|
||||
binding.btnPositive.backgroundTintList = ColorStateList.valueOf(alphaAccent)
|
||||
binding.btnNegative.backgroundTintList = ColorStateList.valueOf(alphaAccent)
|
||||
|
||||
val textColor = darkenColor(context.accentColor())
|
||||
binding.btnPositive.setTextColor(textColor)
|
||||
binding.btnNegative.setTextColor(textColor)
|
||||
}
|
||||
|
||||
fun updateState(downloadStatus: DownloadStatus) {
|
||||
|
||||
@@ -25,8 +25,6 @@ import com.airbnb.epoxy.CallbackProp
|
||||
import com.airbnb.epoxy.ModelProp
|
||||
import com.airbnb.epoxy.ModelView
|
||||
import com.airbnb.epoxy.OnViewRecycled
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.contrastingColor
|
||||
import com.aurora.store.databinding.ViewHeaderUpdateBinding
|
||||
|
||||
|
||||
@@ -48,7 +46,6 @@ class UpdateHeaderView @JvmOverloads constructor(
|
||||
@ModelProp
|
||||
fun action(action: String) {
|
||||
binding.btnAction.text = action
|
||||
binding.btnAction.setTextColor(contrastingColor(context.accentColor()))
|
||||
}
|
||||
|
||||
@CallbackProp
|
||||
|
||||
@@ -26,8 +26,6 @@ import androidx.core.view.isVisible
|
||||
import com.airbnb.epoxy.CallbackProp
|
||||
import com.airbnb.epoxy.ModelProp
|
||||
import com.airbnb.epoxy.ModelView
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.contrastingColor
|
||||
import com.aurora.store.databinding.ViewNoAppBinding
|
||||
import com.aurora.store.view.epoxy.views.BaseModel
|
||||
import com.aurora.store.view.epoxy.views.BaseView
|
||||
@@ -64,7 +62,6 @@ class NoAppView @JvmOverloads constructor(
|
||||
@ModelProp
|
||||
fun actionMessage(message: String = String()) {
|
||||
binding.button.text = message
|
||||
binding.button.setTextColor(contrastingColor(context.accentColor()))
|
||||
}
|
||||
|
||||
@JvmOverloads
|
||||
|
||||
@@ -26,7 +26,6 @@ import androidx.fragment.app.FragmentManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import com.aurora.extensions.applyColors
|
||||
import com.aurora.store.MobileNavigationDirections
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.providers.AuthProvider
|
||||
@@ -102,11 +101,8 @@ class AppsContainerFragment : BaseFragment<FragmentAppsGamesBinding>() {
|
||||
tab.text = tabTitles[position]
|
||||
}.attach()
|
||||
|
||||
binding.searchFab.apply {
|
||||
applyColors()
|
||||
setOnClickListener {
|
||||
findNavController().navigate(R.id.searchSuggestionFragment)
|
||||
}
|
||||
binding.searchFab.setOnClickListener {
|
||||
findNavController().navigate(R.id.searchSuggestionFragment)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -34,7 +33,6 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
@@ -52,12 +50,9 @@ import coil.compose.SubcomposeAsyncImage
|
||||
import coil.request.ImageRequest
|
||||
import com.aurora.Constants
|
||||
import com.aurora.Constants.URL_TOS
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.backgroundColor
|
||||
import com.aurora.extensions.browse
|
||||
import com.aurora.extensions.darkenColor
|
||||
import com.aurora.extensions.getStyledAttributeColor
|
||||
import com.aurora.extensions.lightenColor
|
||||
import com.aurora.store.MR
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.providers.AuthProvider
|
||||
import com.aurora.store.view.theme.AuroraTheme
|
||||
@@ -93,17 +88,14 @@ class MoreDialogFragment : DialogFragment() {
|
||||
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
||||
setContent {
|
||||
AuroraTheme {
|
||||
if (isSystemInDarkTheme()) {
|
||||
primaryColor = Color(requireContext().backgroundColor())
|
||||
onPrimaryColor = Color(lightenColor(primaryColor.toArgb(), 0.85f))
|
||||
secondaryColor = Color(darkenColor(primaryColor.toArgb(), 0.75f))
|
||||
onSecondaryColor = Color(lightenColor(secondaryColor.toArgb(), 0.85f))
|
||||
} else {
|
||||
primaryColor = Color(lightenColor(requireContext().accentColor(), 0.85f))
|
||||
onPrimaryColor = Color(darkenColor(primaryColor.toArgb(), 0.15f))
|
||||
secondaryColor = Color(lightenColor(primaryColor.toArgb(), 0.75f))
|
||||
onSecondaryColor = Color(darkenColor(secondaryColor.toArgb(), 0.15f))
|
||||
}
|
||||
primaryColor =
|
||||
Color(requireContext().getStyledAttributeColor(MR.colorSurface))
|
||||
onPrimaryColor =
|
||||
Color(requireContext().getStyledAttributeColor(MR.colorOnSurface))
|
||||
secondaryColor =
|
||||
Color(requireContext().getStyledAttributeColor(MR.colorSecondaryContainer))
|
||||
onSecondaryColor =
|
||||
Color(requireContext().getStyledAttributeColor(MR.colorOnSecondaryContainer))
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
|
||||
@@ -39,9 +39,7 @@ import coil.load
|
||||
import coil.transform.RoundedCornersTransformation
|
||||
import com.aurora.Constants
|
||||
import com.aurora.Constants.EXODUS_SUBMIT_PAGE
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.browse
|
||||
import com.aurora.extensions.contrastingColor
|
||||
import com.aurora.extensions.getString
|
||||
import com.aurora.extensions.hide
|
||||
import com.aurora.extensions.runOnUiThread
|
||||
@@ -321,7 +319,6 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
|
||||
if (it != null) {
|
||||
binding.layoutDetailsBeta.btnBetaAction.apply {
|
||||
isEnabled = true
|
||||
setTextColor(contrastingColor(requireContext().accentColor()))
|
||||
}
|
||||
if (it.subscribed) {
|
||||
updateBetaActions(true)
|
||||
@@ -358,8 +355,8 @@ class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
|
||||
setOnClickListener {
|
||||
it.context.browse("${EXODUS_SUBMIT_PAGE}${app.packageName}")
|
||||
}
|
||||
setTextColor(contrastingColor(requireContext().accentColor()))
|
||||
}
|
||||
|
||||
binding.layoutDetailsInstall.progressDownload.clipToOutline = true
|
||||
binding.layoutDetailsInstall.imgCancel.setOnClickListener {
|
||||
viewModel.cancelDownload(app)
|
||||
|
||||
@@ -26,7 +26,6 @@ import androidx.fragment.app.FragmentManager
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import com.aurora.extensions.applyColors
|
||||
import com.aurora.store.MobileNavigationDirections
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.providers.AuthProvider
|
||||
@@ -101,11 +100,8 @@ class GamesContainerFragment : BaseFragment<FragmentAppsGamesBinding>() {
|
||||
tab.text = tabTitles[position]
|
||||
}.attach()
|
||||
|
||||
binding.searchFab.apply {
|
||||
applyColors()
|
||||
setOnClickListener {
|
||||
findNavController().navigate(R.id.searchSuggestionFragment)
|
||||
}
|
||||
binding.searchFab.setOnClickListener {
|
||||
findNavController().navigate(R.id.searchSuggestionFragment)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ package com.aurora.store.view.ui.search
|
||||
|
||||
import android.content.SharedPreferences
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
@@ -31,8 +30,6 @@ import android.view.inputmethod.EditorInfo
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.contrastingColor
|
||||
import com.aurora.extensions.hideKeyboard
|
||||
import com.aurora.extensions.showKeyboard
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
@@ -103,15 +100,8 @@ class SearchResultsFragment : BaseFragment<FragmentSearchResultBinding>(),
|
||||
binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener)
|
||||
|
||||
// Filter
|
||||
binding.filterFab.apply {
|
||||
val onSurfaceColor = contrastingColor(requireContext().accentColor())
|
||||
setTextColor(onSurfaceColor)
|
||||
iconTint = ColorStateList.valueOf(onSurfaceColor)
|
||||
backgroundTintList = ColorStateList.valueOf(requireContext().accentColor())
|
||||
|
||||
setOnClickListener {
|
||||
findNavController().navigate(R.id.filterSheet)
|
||||
}
|
||||
binding.filterFab.setOnClickListener {
|
||||
findNavController().navigate(R.id.filterSheet)
|
||||
}
|
||||
|
||||
viewModel.liveData.observe(viewLifecycleOwner) {
|
||||
|
||||
@@ -20,14 +20,11 @@
|
||||
|
||||
package com.aurora.store.view.ui.sheets
|
||||
|
||||
import android.graphics.drawable.ShapeDrawable
|
||||
import android.graphics.drawable.shapes.RoundRectShape
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.aurora.extensions.backgroundColor
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import java.lang.reflect.ParameterizedType
|
||||
|
||||
@@ -44,25 +41,16 @@ abstract class BaseDialogSheet<ViewBindingType : ViewBinding> : BottomSheetDialo
|
||||
): View? {
|
||||
val type =
|
||||
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<ViewBindingType>
|
||||
|
||||
val method = type.getMethod(
|
||||
"inflate",
|
||||
LayoutInflater::class.java,
|
||||
ViewGroup::class.java,
|
||||
Boolean::class.java
|
||||
)
|
||||
|
||||
_binding = method.invoke(null, inflater, container, false) as ViewBindingType
|
||||
|
||||
val drawable = ShapeDrawable().apply {
|
||||
shape = RoundRectShape(
|
||||
floatArrayOf(64f, 64f, 64f, 64f, 0f, 0f, 0f, 0f),
|
||||
null,
|
||||
null
|
||||
)
|
||||
paint.color = requireContext().backgroundColor()
|
||||
}
|
||||
|
||||
binding.root.background = drawable
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
|
||||
@@ -20,12 +20,8 @@
|
||||
package com.aurora.store.view.ui.sheets
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.content.res.ColorStateList
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.aurora.extensions.accentColor
|
||||
import com.aurora.extensions.backgroundColor
|
||||
import com.aurora.extensions.contrastingColor
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.model.Filter
|
||||
import com.aurora.store.data.providers.FilterProvider
|
||||
@@ -57,7 +53,6 @@ class FilterSheet : BaseDialogSheet<SheetFilterBinding>() {
|
||||
|
||||
private fun attachSingleChips() {
|
||||
binding.filterGfs.apply {
|
||||
applyColors()
|
||||
isChecked = filter.gsfDependentApps
|
||||
setOnCheckedChangeListener { _, checked ->
|
||||
isChecked = checked
|
||||
@@ -66,7 +61,6 @@ class FilterSheet : BaseDialogSheet<SheetFilterBinding>() {
|
||||
}
|
||||
|
||||
binding.filterPaid.apply {
|
||||
applyColors()
|
||||
isChecked = filter.paidApps
|
||||
setOnCheckedChangeListener { _, checked ->
|
||||
isChecked = checked
|
||||
@@ -75,7 +69,6 @@ class FilterSheet : BaseDialogSheet<SheetFilterBinding>() {
|
||||
}
|
||||
|
||||
binding.filterAds.apply {
|
||||
applyColors()
|
||||
isChecked = filter.appsWithAds
|
||||
setOnCheckedChangeListener { _, checked ->
|
||||
isChecked = checked
|
||||
@@ -95,7 +88,6 @@ class FilterSheet : BaseDialogSheet<SheetFilterBinding>() {
|
||||
chip.id = index
|
||||
chip.text = value
|
||||
chip.textColors
|
||||
chip.applyColors()
|
||||
chip.isChecked = filter.downloads == downloadValues[index].toInt()
|
||||
binding.downloadChips.addView(chip)
|
||||
}
|
||||
@@ -108,7 +100,6 @@ class FilterSheet : BaseDialogSheet<SheetFilterBinding>() {
|
||||
val chip = Chip(requireContext())
|
||||
chip.id = index
|
||||
chip.text = value
|
||||
chip.applyColors()
|
||||
chip.isChecked = filter.rating == ratingValues[index].toFloat()
|
||||
binding.ratingChips.addView(chip)
|
||||
}
|
||||
@@ -117,21 +108,4 @@ class FilterSheet : BaseDialogSheet<SheetFilterBinding>() {
|
||||
filter = filter.copy(rating = ratingValues[checkedIds[0]].toFloat())
|
||||
}
|
||||
}
|
||||
|
||||
private fun Chip.applyColors() {
|
||||
setTextColor(
|
||||
ColorStateList(
|
||||
arrayOf(
|
||||
intArrayOf(android.R.attr.state_checked),
|
||||
intArrayOf()
|
||||
),
|
||||
intArrayOf(
|
||||
contrastingColor(requireContext().accentColor()),
|
||||
contrastingColor(requireContext().backgroundColor())
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
checkedIconTint = ColorStateList.valueOf(contrastingColor(requireContext().accentColor()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,9 +45,8 @@ class PermissionBottomSheet : BaseDialogSheet<SheetPermissionsBinding>() {
|
||||
|
||||
packageManager = requireContext().packageManager
|
||||
currentPerms = try {
|
||||
packageManager.getPackageInfo(
|
||||
args.app.packageName, PackageManager.GET_PERMISSIONS
|
||||
).requestedPermissions!!.toList()
|
||||
packageManager.getPackageInfo(args.app.packageName, PackageManager.GET_PERMISSIONS)
|
||||
.requestedPermissions!!.toList()
|
||||
} catch (_: Exception) {
|
||||
emptyList()
|
||||
}
|
||||
@@ -62,7 +61,7 @@ class PermissionBottomSheet : BaseDialogSheet<SheetPermissionsBinding>() {
|
||||
if (permissionGroupWidgets.containsKey(permissionGroupInfo.name)) {
|
||||
permissionGroup = permissionGroupWidgets[permissionGroupInfo.name]
|
||||
} else {
|
||||
permissionGroup = PermissionGroup(context, permissionGroupInfo)
|
||||
permissionGroup = PermissionGroup(requireContext(), permissionGroupInfo)
|
||||
permissionGroupWidgets[permissionGroupInfo.name] = permissionGroup
|
||||
}
|
||||
|
||||
@@ -86,29 +85,34 @@ class PermissionBottomSheet : BaseDialogSheet<SheetPermissionsBinding>() {
|
||||
private fun getPermissionInfo(permissionName: String): PermissionInfo? {
|
||||
return try {
|
||||
packageManager.getPermissionInfo(permissionName, 0)
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
} catch (_: PackageManager.NameNotFoundException) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPermissionGroupInfo(permissionInfo: PermissionInfo): PermissionGroupInfo {
|
||||
val permissionGroupInfo: PermissionGroupInfo = if (null == permissionInfo.group) {
|
||||
getFakePermissionGroupInfo(permissionInfo.packageName)
|
||||
} else {
|
||||
try {
|
||||
val platformGroup = packageManager.getPermissionGroupInfo(permissionInfo.group!!, 0)
|
||||
PermissionGroupInfo(
|
||||
platformGroup.name,
|
||||
platformGroup.icon,
|
||||
platformGroup.loadLabel(packageManager).toString()
|
||||
)
|
||||
} catch (e: PackageManager.NameNotFoundException) {
|
||||
val permissionGroup = permissionInfo.group
|
||||
val permissionGroupInfo: PermissionGroupInfo =
|
||||
if (permissionGroup == null) {
|
||||
getFakePermissionGroupInfo(permissionInfo.packageName)
|
||||
} else {
|
||||
try {
|
||||
val platformGroup = packageManager.getPermissionGroupInfo(permissionGroup, 0)
|
||||
|
||||
PermissionGroupInfo(
|
||||
platformGroup.name,
|
||||
platformGroup.icon,
|
||||
platformGroup.loadLabel(packageManager).toString()
|
||||
)
|
||||
} catch (_: PackageManager.NameNotFoundException) {
|
||||
getFakePermissionGroupInfo(permissionInfo.packageName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (permissionGroupInfo.icon == 0) {
|
||||
permissionGroupInfo.icon = R.drawable.ic_permission_android
|
||||
}
|
||||
|
||||
return permissionGroupInfo
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.aurora.Constants
|
||||
import com.aurora.extensions.applyColors
|
||||
import com.aurora.extensions.browse
|
||||
import com.aurora.store.MobileNavigationDirections
|
||||
import com.aurora.store.PermissionType
|
||||
@@ -104,11 +103,8 @@ class UpdatesFragment : BaseFragment<FragmentUpdatesBinding>() {
|
||||
viewModel.fetchUpdates()
|
||||
}
|
||||
|
||||
binding.searchFab.apply {
|
||||
applyColors()
|
||||
setOnClickListener {
|
||||
findNavController().navigate(R.id.searchSuggestionFragment)
|
||||
}
|
||||
binding.searchFab.setOnClickListener {
|
||||
findNavController().navigate(R.id.searchSuggestionFragment)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user