From 69645885f39a4717fb971347e17dd12319c1845f Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 13 Aug 2016 20:33:41 +0200 Subject: [PATCH] list all installed apps at the Add launcher dialog --- .../applauncher/adapters/MyCursorAdapter.kt | 4 +- .../applauncher/adapters/RecyclerAdapter.kt | 37 +++++++++++++++++++ .../applauncher/dialogs/AddAppDialog.kt | 31 +++++++++++++++- .../applauncher/models/AppLauncher.kt | 4 +- app/src/main/res/layout/launcher_picker.xml | 11 ++++++ 5 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/RecyclerAdapter.kt create mode 100644 app/src/main/res/layout/launcher_picker.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/MyCursorAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/MyCursorAdapter.kt index d4ebf23..8c310c5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/MyCursorAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/MyCursorAdapter.kt @@ -25,7 +25,7 @@ class MyCursorAdapter(cxt: Context, dataCursor: Cursor, val itemClick: (AppLaunc val name = cursor.getString(cursor.getColumnIndex(DbHelper.NAME)) val pkgName = cursor.getString(cursor.getColumnIndex(DbHelper.PKG_NAME)) val icon = cursor.getInt(cursor.getColumnIndex(DbHelper.ICON_ID)) - val launcher = AppLauncher(name, icon, pkgName) + val launcher = AppLauncher(name, pkgName, icon, null) holder.bindView(context, launcher) } @@ -37,7 +37,7 @@ class MyCursorAdapter(cxt: Context, dataCursor: Cursor, val itemClick: (AppLaunc fun bindView(context: Context, launcher: AppLauncher) { with(launcher) { itemView.launcher_label.text = launcher.name - itemView.launcher_icon.setImageDrawable(context.resources.getDrawable(launcher.icon)) + itemView.launcher_icon.setImageDrawable(context.resources.getDrawable(launcher.iconId)) itemView.setOnClickListener { itemClick(this) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/RecyclerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/RecyclerAdapter.kt new file mode 100644 index 0000000..c11f490 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/applauncher/adapters/RecyclerAdapter.kt @@ -0,0 +1,37 @@ +package com.simplemobiletools.applauncher.adapters + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.applauncher.R +import com.simplemobiletools.applauncher.models.AppLauncher +import kotlinx.android.synthetic.main.app_launcher_item.view.* +import java.util.* + +class RecyclerAdapter(val launchers: ArrayList, val itemClick: (AppLauncher) -> Unit) : + RecyclerView.Adapter() { + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bindView(launchers[position]) + } + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { + val view = LayoutInflater.from(parent?.context).inflate(R.layout.app_launcher_item, parent, false) + return ViewHolder(view, itemClick) + } + + override fun getItemCount(): Int { + return launchers.count() + } + + class ViewHolder(view: View, val itemClick: (AppLauncher) -> Unit) : RecyclerView.ViewHolder(view) { + fun bindView(launcher: AppLauncher) { + with(launcher) { + itemView.launcher_label.text = launcher.name + itemView.launcher_icon.setImageDrawable(launcher.drawable) + itemView.setOnClickListener { itemClick(this) } + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/applauncher/dialogs/AddAppDialog.kt b/app/src/main/kotlin/com/simplemobiletools/applauncher/dialogs/AddAppDialog.kt index 39b584d..6f3c082 100644 --- a/app/src/main/kotlin/com/simplemobiletools/applauncher/dialogs/AddAppDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/applauncher/dialogs/AddAppDialog.kt @@ -1,15 +1,27 @@ package com.simplemobiletools.applauncher.dialogs -import android.app.AlertDialog import android.app.Dialog import android.app.DialogFragment +import android.content.Intent +import android.content.pm.PackageManager import android.os.Bundle +import android.support.v7.app.AlertDialog +import android.view.View import com.simplemobiletools.applauncher.R +import com.simplemobiletools.applauncher.adapters.RecyclerAdapter +import com.simplemobiletools.applauncher.models.AppLauncher +import kotlinx.android.synthetic.main.launcher_picker.view.* +import java.util.* class AddAppDialog() : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val builder = AlertDialog.Builder(activity) builder.setTitle(R.string.add_apps) + + val recyclerView = View.inflate(activity, R.layout.launcher_picker, null) + fillGrid(recyclerView) + builder.setView(recyclerView) + builder.setPositiveButton(android.R.string.ok, { dialogInterface, i -> }) @@ -17,4 +29,21 @@ class AddAppDialog() : DialogFragment() { builder.setNegativeButton(android.R.string.cancel, null) return builder.create() } + + private fun fillGrid(recyclerView: View) { + val apps = ArrayList() + val packageManager = activity.packageManager + val intent = Intent(Intent.ACTION_MAIN, null) + intent.addCategory(Intent.CATEGORY_LAUNCHER) + val list = packageManager.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED) + for (info in list) { + val componentInfo = info.activityInfo.applicationInfo + apps.add(AppLauncher(componentInfo.loadLabel(packageManager).toString(), componentInfo.packageName, 0, componentInfo.loadIcon(packageManager))) + } + + apps.sortBy { it.name } + recyclerView.launchers_holder.adapter = RecyclerAdapter(apps) { + + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/applauncher/models/AppLauncher.kt b/app/src/main/kotlin/com/simplemobiletools/applauncher/models/AppLauncher.kt index 25789c4..e5d974f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/applauncher/models/AppLauncher.kt +++ b/app/src/main/kotlin/com/simplemobiletools/applauncher/models/AppLauncher.kt @@ -1,3 +1,5 @@ package com.simplemobiletools.applauncher.models -data class AppLauncher(val name: String, val icon: Int, val pkgName: String) +import android.graphics.drawable.Drawable + +data class AppLauncher(val name: String, val pkgName: String, val iconId: Int, val drawable: Drawable?) diff --git a/app/src/main/res/layout/launcher_picker.xml b/app/src/main/res/layout/launcher_picker.xml new file mode 100644 index 0000000..6abea1f --- /dev/null +++ b/app/src/main/res/layout/launcher_picker.xml @@ -0,0 +1,11 @@ + +