summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-07-02 22:22:21 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-07-15 12:52:17 +0000
commit6238299c288f36d909a6166e4ef8b371cc43e065 (patch)
tree5cccc42f5d29c1a6dab7de1e66877f6707bb18c5 /android/src
parent0ff4ef7b385af6d01122cf4559f143e178033d1b (diff)
downloadmullvadvpn-6238299c288f36d909a6166e4ef8b371cc43e065.tar.xz
mullvadvpn-6238299c288f36d909a6166e4ef8b371cc43e065.zip
Show app icons in the app list
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppInfo.kt5
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListAdapter.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListItemHolder.kt42
3 files changed, 46 insertions, 3 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppInfo.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppInfo.kt
index 4992123a4d..f7b7986993 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppInfo.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppInfo.kt
@@ -1,5 +1,8 @@
package net.mullvad.mullvadvpn.applist
import android.content.pm.ApplicationInfo
+import android.graphics.drawable.Drawable
-data class AppInfo(val info: ApplicationInfo, val label: String)
+data class AppInfo(val info: ApplicationInfo, val label: String) {
+ var icon: Drawable? = null
+}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListAdapter.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListAdapter.kt
index 2bd9935c2f..769d39417e 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListAdapter.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListAdapter.kt
@@ -24,7 +24,7 @@ class AppListAdapter(context: Context) : Adapter<AppListItemHolder>() {
val inflater = LayoutInflater.from(parentView.context)
val view = inflater.inflate(R.layout.app_list_item, parentView, false)
- return AppListItemHolder(packageManager, view)
+ return AppListItemHolder(packageManager, jobTracker, view)
}
override fun onBindViewHolder(holder: AppListItemHolder, position: Int) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListItemHolder.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListItemHolder.kt
index 84b2775ba9..a4df0518a5 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListItemHolder.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/AppListItemHolder.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.applist
import android.content.pm.PackageManager
+import android.graphics.drawable.Drawable
import android.support.v7.widget.RecyclerView.ViewHolder
import android.view.View
import android.widget.ImageView
@@ -8,17 +9,56 @@ import android.widget.TextView
import kotlin.properties.Delegates.observable
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.ui.CellSwitch
+import net.mullvad.mullvadvpn.util.JobTracker
-class AppListItemHolder(private val packageManager: PackageManager, view: View) : ViewHolder(view) {
+class AppListItemHolder(
+ private val packageManager: PackageManager,
+ private val jobTracker: JobTracker,
+ view: View
+) : ViewHolder(view) {
+ private val loading: View = view.findViewById(R.id.loading)
private val icon: ImageView = view.findViewById(R.id.icon)
private val name: TextView = view.findViewById(R.id.name)
private val excluded: CellSwitch = view.findViewById(R.id.excluded)
var appInfo by observable<AppInfo?>(null) { _, _, info ->
if (info != null) {
+ val iconImage = info.icon
+
name.text = info.label
+
+ if (iconImage != null) {
+ showIcon(iconImage)
+ } else {
+ hideIcon()
+ loadIcon(info)
+ }
} else {
name.text = ""
+ hideIcon()
+ }
+ }
+
+ private fun hideIcon() {
+ icon.visibility = View.GONE
+ loading.visibility = View.VISIBLE
+ }
+
+ private fun showIcon(iconImage: Drawable) {
+ loading.visibility = View.GONE
+ icon.setImageDrawable(iconImage)
+ icon.visibility = View.VISIBLE
+ }
+
+ private fun loadIcon(info: AppInfo) {
+ jobTracker.newUiJob("load icon for ${info.info.packageName}") {
+ val iconImage = jobTracker.runOnBackground {
+ packageManager.getApplicationIcon(info.info)
+ }
+
+ info.icon = iconImage
+
+ showIcon(iconImage)
}
}
}