diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-07-02 22:22:21 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-07-15 12:52:17 +0000 |
| commit | 6238299c288f36d909a6166e4ef8b371cc43e065 (patch) | |
| tree | 5cccc42f5d29c1a6dab7de1e66877f6707bb18c5 /android/src | |
| parent | 0ff4ef7b385af6d01122cf4559f143e178033d1b (diff) | |
| download | mullvadvpn-6238299c288f36d909a6166e4ef8b371cc43e065.tar.xz mullvadvpn-6238299c288f36d909a6166e4ef8b371cc43e065.zip | |
Show app icons in the app list
Diffstat (limited to 'android/src')
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) } } } |
