From 50ed7209256ab988fce2c20c19b63f9f9f87734a Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Fri, 15 May 2020 17:41:48 +0200 Subject: [PATCH] Improve app choosing layout, sort launchable apps --- .../com/finnmglas/launcher/ChooseActivity.kt | 40 +++++++------------ app/src/main/res/layout/activity_choose.xml | 31 ++++++++++++-- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt b/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt index 869d1ef..ee64b1e 100644 --- a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt @@ -2,9 +2,9 @@ package com.finnmglas.launcher import android.annotation.SuppressLint import android.content.Intent -import android.content.pm.ApplicationInfo import android.graphics.Color import android.os.Bundle +import android.view.View import android.view.WindowManager import android.widget.TextView import androidx.appcompat.app.AppCompatActivity @@ -13,6 +13,10 @@ import kotlinx.android.synthetic.main.activity_choose.* class ChooseActivity : AppCompatActivity() { + fun backHome(view: View) { + finish() + } + @SuppressLint("SetTextI18n") // I do not care override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -26,38 +30,27 @@ class ChooseActivity : AppCompatActivity() { val action = bundle!!.getString("action") // why choose an app val forApp = bundle.getString("forApp") // which app we choose - // Build Layout + /* Build Layout */ + + // TODO: Make this more efficient, faster, generate the list before val mainIntent = Intent(Intent.ACTION_MAIN, null) mainIntent.addCategory(Intent.CATEGORY_LAUNCHER) val pm = packageManager - val apps = pm.getInstalledApplications(0) + val i = Intent(Intent.ACTION_MAIN) + i.addCategory(Intent.CATEGORY_LAUNCHER) + val apps = pm.queryIntentActivities(i, 0) - val installedApps: MutableList = ArrayList() + apps.sortBy { it.activityInfo.loadLabel(pm).toString() } - // list - for (app in apps) { - - if (app.flags and ApplicationInfo.FLAG_UPDATED_SYSTEM_APP != 0) { - //checks for flags; if flagged, check if updated system app - installedApps.add(app) - } else if (app.flags and ApplicationInfo.FLAG_SYSTEM != 0) { - //it's a system app, not interested - } else { - //in this case, it should be a user-installed app - installedApps.add(app) - } - } - - // ui - for (app in installedApps) { - //packageInfo.sourceDir + for (resolveInfo in apps) { + val app = resolveInfo.activityInfo pm.getLaunchIntentForPackage(app.packageName) // creating TextView programmatically val tvdynamic = TextView(this) - tvdynamic.textSize = 20f + tvdynamic.textSize = 24f tvdynamic.text = app.loadLabel(pm).toString() tvdynamic.setTextColor(Color.parseColor("#cccccc")) @@ -66,7 +59,6 @@ class ChooseActivity : AppCompatActivity() { } else if (action == "pick"){ tvdynamic.setOnClickListener { - val returnIntent = Intent() returnIntent.putExtra("value", app.packageName) returnIntent.putExtra("forApp", forApp) @@ -74,11 +66,9 @@ class ChooseActivity : AppCompatActivity() { 5000, returnIntent ) - finish() } } - apps_list.addView(tvdynamic) } } diff --git a/app/src/main/res/layout/activity_choose.xml b/app/src/main/res/layout/activity_choose.xml index 21cfda0..5183bf0 100644 --- a/app/src/main/res/layout/activity_choose.xml +++ b/app/src/main/res/layout/activity_choose.xml @@ -7,19 +7,33 @@ android:background="?attr/colorPrimaryDark" tools:context=".ChooseActivity"> + + + app:layout_constraintTop_toTopOf="@id/heading"> +