diff options
Diffstat (limited to 'android')
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) } } } |
