Dynamic colors [1/2]

This commit is contained in:
Rahul Patel
2024-08-31 02:33:07 +05:30
parent 4107eed2d9
commit 3546ed8a54
119 changed files with 676 additions and 2321 deletions

View File

@@ -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(

View File

@@ -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) {

View File

@@ -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))
}

View File

@@ -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>>

View File

@@ -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")

View File

@@ -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)) {

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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)
}
}

View File

@@ -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) {

View File

@@ -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
}

View File

@@ -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()))
}
}

View File

@@ -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
}

View File

@@ -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)
}
}