PermissionBottomSheet: Highlight new permissions using accent color

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-03-30 13:29:59 +05:30
parent 37c49637d7
commit 4790ae1d83
2 changed files with 17 additions and 4 deletions

View File

@@ -27,6 +27,7 @@ import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.aurora.extensions.accentColor
import com.aurora.extensions.showDialog import com.aurora.extensions.showDialog
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.model.PermissionGroupInfo import com.aurora.store.data.model.PermissionGroupInfo
@@ -76,7 +77,7 @@ class PermissionGroup : LinearLayout {
//imageView.setColorFilter(getContext().getStyledAttributeColor(imageView.getContext(), android.R.attr.colorAccent)); //imageView.setColorFilter(getContext().getStyledAttributeColor(imageView.getContext(), android.R.attr.colorAccent));
} }
fun addPermission(permissionInfo: PermissionInfo) { fun addPermission(permissionInfo: PermissionInfo, currentPerms: List<String> = emptyList()) {
val title = permissionInfo.loadLabel(packageManager) val title = permissionInfo.loadLabel(packageManager)
val description = permissionInfo.loadDescription(packageManager) val description = permissionInfo.loadDescription(packageManager)
@@ -97,7 +98,8 @@ class PermissionGroup : LinearLayout {
addPermissionLabel( addPermissionLabel(
permissionLabelsView, permissionLabelsView,
it, it,
permissionMap[it] permissionMap[it],
if (currentPerms.isNotEmpty()) permissionInfo.name !in currentPerms else false
) )
} }
} }
@@ -105,10 +107,12 @@ class PermissionGroup : LinearLayout {
private fun addPermissionLabel( private fun addPermissionLabel(
permissionLabelsView: LinearLayout, permissionLabelsView: LinearLayout,
label: String, label: String,
description: String? description: String?,
isNewPerm: Boolean = false
) { ) {
val textView = TextView(context) val textView = TextView(context)
textView.text = label textView.text = label
if (isNewPerm) textView.setTextColor(context.accentColor())
textView.setOnClickListener { textView.setOnClickListener {
var title: String = permissionGroupInfo.label var title: String = permissionGroupInfo.label

View File

@@ -42,13 +42,22 @@ class PermissionBottomSheet : BottomSheetDialogFragment(R.layout.sheet_permissio
private val binding get() = _binding!! private val binding get() = _binding!!
private lateinit var packageManager: PackageManager private lateinit var packageManager: PackageManager
private lateinit var currentPerms: List<String>
private val args: PermissionBottomSheetArgs by navArgs() private val args: PermissionBottomSheetArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = SheetPermissionsBinding.bind(view) _binding = SheetPermissionsBinding.bind(view)
packageManager = requireContext().packageManager packageManager = requireContext().packageManager
currentPerms = try {
packageManager.getPackageInfo(
args.app.packageName, PackageManager.GET_PERMISSIONS
).requestedPermissions.toList()
} catch (_: Exception) {
emptyList()
}
val permissionGroupWidgets: MutableMap<String, PermissionGroup?> = val permissionGroupWidgets: MutableMap<String, PermissionGroup?> =
HashMap<String, PermissionGroup?>() HashMap<String, PermissionGroup?>()
@@ -70,7 +79,7 @@ class PermissionBottomSheet : BottomSheetDialogFragment(R.layout.sheet_permissio
permissionGroupWidgets[permissionGroupInfo.name] = permissionGroup permissionGroupWidgets[permissionGroupInfo.name] = permissionGroup
} }
permissionGroup?.addPermission(permissionInfo) permissionGroup?.addPermission(permissionInfo, currentPerms)
} }
binding.permissionsContainer.removeAllViews() binding.permissionsContainer.removeAllViews()