add labels at the home screen icons
This commit is contained in:
parent
e0a17f48b4
commit
d60ae7dd8b
|
@ -11,6 +11,9 @@ interface HomeScreenGridItemsDao {
|
||||||
@Query("SELECT * FROM home_screen_grid_items")
|
@Query("SELECT * FROM home_screen_grid_items")
|
||||||
fun getAllItems(): List<HomeScreenGridItem>
|
fun getAllItems(): List<HomeScreenGridItem>
|
||||||
|
|
||||||
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
|
fun insert(item: HomeScreenGridItem)
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
fun insertAll(items: List<HomeScreenGridItem>)
|
fun insertAll(items: List<HomeScreenGridItem>)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,10 @@ import android.graphics.Canvas
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
import android.text.Layout
|
||||||
|
import android.text.StaticLayout
|
||||||
|
import android.text.TextPaint
|
||||||
|
import android.text.TextUtils
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
@ -20,7 +24,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
||||||
|
|
||||||
private var iconMargin = context.resources.getDimension(R.dimen.icon_side_margin).toInt()
|
private var iconMargin = context.resources.getDimension(R.dimen.icon_side_margin).toInt()
|
||||||
private var textPaint: Paint
|
private var labelSideMargin = context.resources.getDimension(R.dimen.small_margin).toInt()
|
||||||
|
private var textPaint: TextPaint
|
||||||
|
|
||||||
// let's use a 6x5 grid for now with 1 special row at the bottom, prefilled with default apps
|
// let's use a 6x5 grid for now with 1 special row at the bottom, prefilled with default apps
|
||||||
private var rowXCoords = ArrayList<Int>(COLUMN_COUNT)
|
private var rowXCoords = ArrayList<Int>(COLUMN_COUNT)
|
||||||
|
@ -33,9 +38,10 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
private var appIconDrawables = HashMap<String, Drawable>()
|
private var appIconDrawables = HashMap<String, Drawable>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
textPaint = TextPaint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||||
color = Color.WHITE
|
color = Color.WHITE
|
||||||
textSize = context.resources.getDimension(R.dimen.normal_text_size)
|
textSize = context.resources.getDimension(R.dimen.smaller_text_size)
|
||||||
|
setShadowLayer(.5f, 0f, 0f, Color.BLACK)
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchAppIcons()
|
fetchAppIcons()
|
||||||
|
@ -76,9 +82,29 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
val drawable = appIconDrawables[icon.packageName]
|
val drawable = appIconDrawables[icon.packageName]
|
||||||
if (drawable != null) {
|
if (drawable != null) {
|
||||||
val drawableX = rowXCoords[icon.left] + iconMargin
|
val drawableX = rowXCoords[icon.left] + iconMargin
|
||||||
val drawableY = rowYCoords[icon.top] + rowHeight - iconSize - iconMargin * 2
|
|
||||||
|
|
||||||
drawable.setBounds(drawableX, drawableY, drawableX + iconSize, drawableY + iconSize)
|
// icons at the bottom are drawn at the bottom of the grid and they have no label
|
||||||
|
if (icon.top == ROW_COUNT - 1) {
|
||||||
|
val drawableY = rowYCoords[icon.top] + rowHeight - iconSize - iconMargin * 2
|
||||||
|
drawable.setBounds(drawableX, drawableY, drawableX + iconSize, drawableY + iconSize)
|
||||||
|
} else {
|
||||||
|
val drawableY = rowYCoords[icon.top] + iconSize / 2
|
||||||
|
drawable.setBounds(drawableX, drawableY, drawableX + iconSize, drawableY + iconSize)
|
||||||
|
|
||||||
|
val textY = rowYCoords[icon.top] + iconSize * 1.5f + labelSideMargin
|
||||||
|
val staticLayout = StaticLayout.Builder
|
||||||
|
.obtain(icon.title, 0, icon.title.length, textPaint, rowWidth - 2 * labelSideMargin)
|
||||||
|
.setMaxLines(2)
|
||||||
|
.setEllipsize(TextUtils.TruncateAt.END)
|
||||||
|
.setAlignment(Layout.Alignment.ALIGN_CENTER)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
canvas.save()
|
||||||
|
canvas.translate(rowXCoords[icon.left].toFloat() + labelSideMargin, textY)
|
||||||
|
staticLayout.draw(canvas)
|
||||||
|
canvas.restore()
|
||||||
|
}
|
||||||
|
|
||||||
drawable.draw(canvas)
|
drawable.draw(canvas)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue