From 889e70468e8bfc1f9f53e2153dc63f117c19e232 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 17 Sep 2022 18:58:28 +0200 Subject: [PATCH] adding an initial implementation of the home screen grid --- .../launcher/activities/MainActivity.kt | 6 ++ .../launcher/extensions/Context.kt | 25 ++++++++ .../launcher/fragments/AllAppsFragment.kt | 23 +------ .../launcher/views/HomeScreenGrid.kt | 62 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 7 +++ app/src/main/res/values/dimens.xml | 1 + 6 files changed, 103 insertions(+), 21 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt index 94e38754..c706a6cf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt @@ -7,6 +7,7 @@ import android.os.Bundle import android.view.* import android.view.animation.DecelerateInterpolator import android.widget.PopupMenu +import android.widget.RelativeLayout import androidx.core.view.GestureDetectorCompat import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.launcher.BuildConfig @@ -42,6 +43,11 @@ class MainActivity : SimpleActivity(), FlingListener { fragment.y = mScreenHeight.toFloat() fragment.beVisible() } + + (home_screen_grid.layoutParams as RelativeLayout.LayoutParams).apply { + topMargin = statusBarHeight + bottomMargin = navigationBarHeight + } } override fun onResume() { diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt index dafa0d6d..62c2ea43 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/extensions/Context.kt @@ -1,6 +1,9 @@ package com.simplemobiletools.launcher.extensions import android.content.Context +import android.content.pm.LauncherApps +import android.graphics.drawable.Drawable +import android.os.Process import com.simplemobiletools.commons.extensions.portrait import com.simplemobiletools.launcher.R import com.simplemobiletools.launcher.helpers.Config @@ -14,3 +17,25 @@ fun Context.getColumnCount(): Int { resources.getInteger(R.integer.landscape_column_count) } } + +fun Context.getDrawableForPackageName(packageName: String): Drawable? { + var drawable: Drawable? = null + try { + // try getting the properly colored launcher icons + val launcher = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps + val activityList = launcher.getActivityList(packageName, Process.myUserHandle())[0] + drawable = activityList.getBadgedIcon(0) + } catch (e: Exception) { + } catch (e: Error) { + } + + if (drawable == null) { + drawable = try { + packageManager.getApplicationIcon(packageName) + } catch (ignored: Exception) { + null + } + } + + return drawable +} diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt index ff9c29c0..39c0d778 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/AllAppsFragment.kt @@ -3,11 +3,8 @@ package com.simplemobiletools.launcher.fragments import android.annotation.SuppressLint import android.content.Context import android.content.Intent -import android.content.pm.LauncherApps import android.content.pm.PackageManager -import android.graphics.drawable.Drawable import android.net.Uri -import android.os.Process import android.provider.Settings import android.util.AttributeSet import android.view.* @@ -20,6 +17,7 @@ import com.simplemobiletools.launcher.R import com.simplemobiletools.launcher.activities.MainActivity import com.simplemobiletools.launcher.adapters.LaunchersAdapter import com.simplemobiletools.launcher.extensions.getColumnCount +import com.simplemobiletools.launcher.extensions.getDrawableForPackageName import com.simplemobiletools.launcher.interfaces.AllAppsListener import com.simplemobiletools.launcher.models.AppLauncher import kotlinx.android.synthetic.main.all_apps_fragment.view.* @@ -82,24 +80,7 @@ class AllAppsFragment(context: Context, attributeSet: AttributeSet) : MyFragment val componentInfo = info.activityInfo.applicationInfo val label = componentInfo.loadLabel(context.packageManager).toString() val packageName = componentInfo.packageName - - var drawable: Drawable? = null - try { - // try getting the properly colored launcher icons - val launcher = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - val activityList = launcher.getActivityList(packageName, Process.myUserHandle())[0] - drawable = activityList.getBadgedIcon(0) - } catch (e: Exception) { - } catch (e: Error) { - } - - if (drawable == null) { - drawable = try { - context.packageManager.getApplicationIcon(packageName) - } catch (ignored: Exception) { - continue - } - } + val drawable = context.getDrawableForPackageName(packageName) ?: continue allPackageNames.add(packageName) allApps.add(AppLauncher(0, label, packageName, 0, drawable)) diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt new file mode 100644 index 00000000..b36012ee --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/views/HomeScreenGrid.kt @@ -0,0 +1,62 @@ +package com.simplemobiletools.launcher.views + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.telecom.TelecomManager +import android.util.AttributeSet +import android.view.View +import com.simplemobiletools.launcher.R +import com.simplemobiletools.launcher.extensions.getDrawableForPackageName + +class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) { + constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0) + + private val ROW_COUNT = 6 + private val COLUMN_COUNT = 6 + + private var iconMargin = context.resources.getDimension(R.dimen.icon_side_margin).toInt() + private var textPaint: Paint + private var defaultDialerPackage = (context.getSystemService(Context.TELECOM_SERVICE) as TelecomManager).defaultDialerPackage + private var dialerDrawable = context.getDrawableForPackageName(defaultDialerPackage) + + // let's use a 5x5 grid for now with 1 special row at the bottom, prefilled with default apps + private var rowXCoords = ArrayList(COLUMN_COUNT) + private var rowYCoords = ArrayList(ROW_COUNT) + private var rowWidth = 0 + private var rowHeight = 0 + private var iconSize = 0 + + init { + textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.WHITE + textSize = context.resources.getDimension(R.dimen.normal_text_size) + } + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + if (rowXCoords.isEmpty()) { + rowWidth = width / (COLUMN_COUNT - 1) + rowHeight = height / ROW_COUNT + iconSize = rowWidth - 2 * iconMargin + for (i in 0 until COLUMN_COUNT - 1) { + rowXCoords.add(i, i * rowWidth) + } + + for (i in 0 until ROW_COUNT) { + rowYCoords.add(i, i * rowHeight) + } + } + + if (dialerDrawable != null) { + for (i in 0 until COLUMN_COUNT - 1) { + val drawableX = rowXCoords[i] + iconMargin + val drawableY = rowYCoords[COLUMN_COUNT - 1] + rowHeight - iconSize - iconMargin * 2 + dialerDrawable!!.setBounds(drawableX, drawableY, drawableX + iconSize, drawableY + iconSize) + dialerDrawable!!.draw(canvas) + } + } + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 47b1947c..107bb6c8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,6 +4,13 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + 55dp 70dp 140dp + 10dp