adding an initial version of home screen widget drawing
This commit is contained in:
parent
28e7db1ec7
commit
8e79a9ccf5
|
@ -12,7 +12,7 @@ import android.text.StaticLayout
|
||||||
import android.text.TextPaint
|
import android.text.TextPaint
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.View
|
import android.widget.RelativeLayout
|
||||||
import com.simplemobiletools.commons.extensions.navigationBarHeight
|
import com.simplemobiletools.commons.extensions.navigationBarHeight
|
||||||
import com.simplemobiletools.commons.extensions.performHapticFeedback
|
import com.simplemobiletools.commons.extensions.performHapticFeedback
|
||||||
import com.simplemobiletools.commons.extensions.statusBarHeight
|
import com.simplemobiletools.commons.extensions.statusBarHeight
|
||||||
|
@ -24,10 +24,11 @@ import com.simplemobiletools.launcher.extensions.homeScreenGridItemsDB
|
||||||
import com.simplemobiletools.launcher.helpers.*
|
import com.simplemobiletools.launcher.helpers.*
|
||||||
import com.simplemobiletools.launcher.models.HomeScreenGridItem
|
import com.simplemobiletools.launcher.models.HomeScreenGridItem
|
||||||
|
|
||||||
class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) {
|
||||||
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 widgetMargin = context.resources.getDimension(R.dimen.widget_side_margin).toInt()
|
||||||
private var labelSideMargin = context.resources.getDimension(R.dimen.small_margin).toInt()
|
private var labelSideMargin = context.resources.getDimension(R.dimen.small_margin).toInt()
|
||||||
private var roundedCornerRadius = context.resources.getDimension(R.dimen.activity_margin)
|
private var roundedCornerRadius = context.resources.getDimension(R.dimen.activity_margin)
|
||||||
private var textPaint: TextPaint
|
private var textPaint: TextPaint
|
||||||
|
@ -78,7 +79,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
item.drawable = context.getDrawableForPackageName(item.packageName)
|
item.drawable = context.getDrawableForPackageName(item.packageName)
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
context.homeScreenGridItemsDB.deleteById(iconId)
|
context.homeScreenGridItemsDB.deleteById(iconId)
|
||||||
gridItems.removeIf { it.id == iconId }
|
gridItems.removeIf { it.id == iconId }
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +97,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
draggedItem!!.drawable = context.getDrawableForPackageName(draggedGridItem.packageName)
|
draggedItem!!.drawable = context.getDrawableForPackageName(draggedGridItem.packageName)
|
||||||
}
|
}
|
||||||
|
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun draggedItemMoved(x: Int, y: Int) {
|
fun draggedItemMoved(x: Int, y: Int) {
|
||||||
|
@ -105,7 +106,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
}
|
}
|
||||||
|
|
||||||
draggedItemCurrentCoords = Pair(x, y)
|
draggedItemCurrentCoords = Pair(x, y)
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
|
|
||||||
// figure out at which cell was the item dropped, if it is empty
|
// figure out at which cell was the item dropped, if it is empty
|
||||||
|
@ -120,7 +121,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
ITEM_TYPE_SHORTCUT -> {
|
ITEM_TYPE_SHORTCUT -> {
|
||||||
// replace this with real shortcut handling
|
// replace this with real shortcut handling
|
||||||
draggedItem = null
|
draggedItem = null
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,7 +190,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
val newId = context.homeScreenGridItemsDB.insert(newHomeScreenGridItem)
|
val newId = context.homeScreenGridItemsDB.insert(newHomeScreenGridItem)
|
||||||
newHomeScreenGridItem.id = newId
|
newHomeScreenGridItem.id = newId
|
||||||
gridItems.add(newHomeScreenGridItem)
|
gridItems.add(newHomeScreenGridItem)
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -201,7 +202,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
draggedItem = null
|
draggedItem = null
|
||||||
draggedItemCurrentCoords = Pair(-1, -1)
|
draggedItemCurrentCoords = Pair(-1, -1)
|
||||||
if (redrawIcons) {
|
if (redrawIcons) {
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,6 +246,13 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
if (canCreateWidget) {
|
if (canCreateWidget) {
|
||||||
if (appWidgetProviderInfo.configure != null) {
|
if (appWidgetProviderInfo.configure != null) {
|
||||||
appWidgetHost.startAppWidgetConfigureActivityForResult(context as MainActivity, appWidgetId, 0, REQUEST_CONFIGURE_WIDGET, null)
|
appWidgetHost.startAppWidgetConfigureActivityForResult(context as MainActivity, appWidgetId, 0, REQUEST_CONFIGURE_WIDGET, null)
|
||||||
|
} else {
|
||||||
|
val widgetView = appWidgetHost.createView(context, appWidgetId, appWidgetProviderInfo)
|
||||||
|
widgetView.x = widgetRect.left * rowWidth + sideMargins.left.toFloat() + widgetMargin
|
||||||
|
widgetView.y = widgetRect.top * rowHeight + sideMargins.top.toFloat() + widgetMargin
|
||||||
|
val widgetWidth = draggedItem!!.widthCells * rowWidth - widgetMargin * 2
|
||||||
|
val widgetHeight = draggedItem!!.heightCells * rowHeight - widgetMargin * 2
|
||||||
|
addView(widgetView, widgetWidth, widgetHeight)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -255,7 +263,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
|
|
||||||
draggedItem = null
|
draggedItem = null
|
||||||
draggedItemCurrentCoords = Pair(-1, -1)
|
draggedItemCurrentCoords = Pair(-1, -1)
|
||||||
invalidate()
|
redrawGrid()
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert stuff like 102x192 to grid cells like 0x1
|
// convert stuff like 102x192 to grid cells like 0x1
|
||||||
|
@ -271,6 +279,11 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun redrawGrid() {
|
||||||
|
setWillNotDraw(false)
|
||||||
|
invalidate()
|
||||||
|
}
|
||||||
|
|
||||||
private fun getFakeWidth() = width - sideMargins.left - sideMargins.right
|
private fun getFakeWidth() = width - sideMargins.left - sideMargins.right
|
||||||
|
|
||||||
private fun getFakeHeight() = height - sideMargins.top - sideMargins.bottom
|
private fun getFakeHeight() = height - sideMargins.top - sideMargins.bottom
|
||||||
|
|
|
@ -4,4 +4,5 @@
|
||||||
<dimen name="home_long_press_anchor_offset_y">50dp</dimen>
|
<dimen name="home_long_press_anchor_offset_y">50dp</dimen>
|
||||||
<dimen name="widget_preview_size">140dp</dimen>
|
<dimen name="widget_preview_size">140dp</dimen>
|
||||||
<dimen name="icon_side_margin">10dp</dimen>
|
<dimen name="icon_side_margin">10dp</dimen>
|
||||||
|
<dimen name="widget_side_margin">6dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue