change the way widget resizing frame works

This commit is contained in:
tibbi
2022-10-02 21:26:59 +02:00
parent 626a553331
commit 2a5909573d
6 changed files with 45 additions and 26 deletions

View File

@ -211,7 +211,6 @@ class MainActivity : SimpleActivity(), FlingListener {
private fun hasFingerMoved(event: MotionEvent) = mLastTouchCoords.first != -1f && mLastTouchCoords.second != -1f &&
(mLastTouchCoords.first != event.x || mLastTouchCoords.second != event.y)
private fun refetchLaunchers() {
val launchers = getAllAppLaunchers()
(all_apps_fragment as AllAppsFragment).gotLaunchers(launchers)
@ -262,6 +261,7 @@ class MainActivity : SimpleActivity(), FlingListener {
window.navigationBarColor = resources.getColor(R.color.semitransparent_navigation)
home_screen_grid.fragmentExpanded()
home_screen_grid.hideResizeLines()
}
private fun hideFragment(fragment: View) {
@ -287,8 +287,7 @@ class MainActivity : SimpleActivity(), FlingListener {
main_holder.performHapticFeedback()
}
val yOffset = resources.getDimension(R.dimen.long_press_anchor_button_offset_y)
val anchorY = home_screen_grid.sideMargins.top + (clickedGridItem.top * home_screen_grid.rowHeight.toFloat()) - yOffset
val anchorY = home_screen_grid.sideMargins.top + (clickedGridItem.top * home_screen_grid.rowHeight.toFloat())
showHomeIconMenu(x, anchorY, clickedGridItem, false)
return
}
@ -298,6 +297,7 @@ class MainActivity : SimpleActivity(), FlingListener {
}
fun homeScreenClicked(x: Float, y: Float) {
home_screen_grid.hideResizeLines()
val clickedGridItem = home_screen_grid.isClickingGridItem(x.toInt(), y.toInt())
if (clickedGridItem != null) {
launchApp(clickedGridItem.packageName)
@ -305,6 +305,7 @@ class MainActivity : SimpleActivity(), FlingListener {
}
fun showHomeIconMenu(x: Float, y: Float, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean) {
home_screen_grid.hideResizeLines()
mLongPressedIcon = gridItem
val anchorY = if (isOnAllAppsFragment || gridItem.type == ITEM_TYPE_WIDGET) {
y
@ -329,6 +330,7 @@ class MainActivity : SimpleActivity(), FlingListener {
}
private fun showMainLongPressMenu(x: Float, y: Float) {
home_screen_grid.hideResizeLines()
home_screen_popup_menu_anchor.x = x
home_screen_popup_menu_anchor.y = y - resources.getDimension(R.dimen.long_press_anchor_button_offset_y)
val contextTheme = ContextThemeWrapper(this, getPopupMenuTheme())
@ -345,32 +347,34 @@ class MainActivity : SimpleActivity(), FlingListener {
}
private fun handleGridItemPopupMenu(anchorView: View, gridItem: HomeScreenGridItem, isOnAllAppsFragment: Boolean): PopupMenu {
var visibleMenuButtons = 3
var visibleMenuButtons = 4
if (gridItem.type != ITEM_TYPE_ICON) {
visibleMenuButtons -= 2
}
if (isOnAllAppsFragment) {
visibleMenuButtons -= 1
visibleMenuButtons--
}
if (gridItem.type != ITEM_TYPE_WIDGET) {
visibleMenuButtons--
}
val yOffset = resources.getDimension(R.dimen.long_press_anchor_button_offset_y) * (visibleMenuButtons - 1)
anchorView.y -= yOffset
if (gridItem.type == ITEM_TYPE_WIDGET) {
home_screen_grid.widgetLongPressed(gridItem)
}
val contextTheme = ContextThemeWrapper(this, getPopupMenuTheme())
return PopupMenu(contextTheme, anchorView, Gravity.TOP or Gravity.END).apply {
setForceShowIcon(true)
inflate(R.menu.menu_app_icon)
menu.findItem(R.id.resize).isVisible = gridItem.type == ITEM_TYPE_WIDGET
menu.findItem(R.id.app_info).isVisible = gridItem.type == ITEM_TYPE_ICON
menu.findItem(R.id.uninstall).isVisible = gridItem.type == ITEM_TYPE_ICON
menu.findItem(R.id.remove).isVisible = !isOnAllAppsFragment
setOnMenuItemClickListener { item ->
(all_apps_fragment as AllAppsFragment).ignoreTouches = false
when (item.itemId) {
R.id.resize -> home_screen_grid.widgetLongPressed(gridItem)
R.id.app_info -> launchAppInfo(gridItem.packageName)
R.id.remove -> home_screen_grid.removeAppIcon(gridItem)
R.id.uninstall -> uninstallApp(gridItem.packageName)
@ -381,10 +385,6 @@ class MainActivity : SimpleActivity(), FlingListener {
setOnDismissListener {
mOpenPopupMenu = null
(all_apps_fragment as AllAppsFragment).ignoreTouches = false
if (gridItem.type == ITEM_TYPE_WIDGET) {
home_screen_grid.hideResizeLines()
}
}
show()

View File

@ -23,6 +23,7 @@ import com.simplemobiletools.launcher.extensions.getDrawableForPackageName
import com.simplemobiletools.launcher.extensions.homeScreenGridItemsDB
import com.simplemobiletools.launcher.helpers.*
import com.simplemobiletools.launcher.models.HomeScreenGridItem
import kotlinx.android.synthetic.main.activity_main.view.*
class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) {
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
@ -35,14 +36,13 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
private var draggedItem: HomeScreenGridItem? = null
private var resizedWidget: HomeScreenGridItem? = null
private var isFirstDraw = true
private var resizeWidgetFrame: MyAppWidgetResizeFrame
private var iconSize = 0
// 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 rowYCoords = ArrayList<Int>(ROW_COUNT)
var rowWidth = 0
var rowHeight = 0
private var iconSize = 0
// apply fake margins at the home screen. Real ones would cause the icons be cut at dragging at screen sides
var sideMargins = Rect()
@ -77,7 +77,6 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
}
fetchGridItems()
resizeWidgetFrame = MyAppWidgetResizeFrame(context)
}
fun fetchGridItems() {
@ -172,19 +171,23 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
redrawGrid()
val widgetView = widgetViews.firstOrNull { it.tag == resizedWidget!!.widgetId }
removeView(resizeWidgetFrame)
resize_frame.beGone()
if (widgetView != null) {
val viewX = widgetView.x.toInt()
val viewY = widgetView.y.toInt()
val frameRect = Rect(viewX, viewY, viewX + widgetView.width, viewY + widgetView.height)
resizeWidgetFrame.updateFrameCoords(frameRect)
addView(resizeWidgetFrame)
resize_frame.updateFrameCoords(frameRect)
resize_frame.beVisible()
}
}
fun hideResizeLines() {
if (resizedWidget == null) {
return
}
resizedWidget = null
removeView(resizeWidgetFrame)
resize_frame.beGone()
}
private fun addAppIcon() {
@ -381,8 +384,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel
widgetView.tag = appWidgetId
widgetView.setAppWidget(appWidgetId, appWidgetProviderInfo)
widgetView.longPressListener = { x, y ->
val yOffset = resources.getDimension(R.dimen.long_press_anchor_button_offset_y)
(context as? MainActivity)?.showHomeIconMenu(x, widgetView.y - yOffset, item, false)
(context as? MainActivity)?.showHomeIconMenu(x, widgetView.y, item, false)
}
widgetView.x = calculateWidgetX(item.left)

View File

@ -7,16 +7,17 @@ import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.drawable.ColorDrawable
import android.widget.FrameLayout
import android.util.AttributeSet
import android.widget.RelativeLayout
import com.simplemobiletools.launcher.R
@SuppressLint("ViewConstructor")
class MyAppWidgetResizeFrame(context: Context) : FrameLayout(context) {
class MyAppWidgetResizeFrame(context: Context, attrs: AttributeSet, defStyle: Int) : RelativeLayout(context, attrs, defStyle) {
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
private var resizeWidgetLinePaint: Paint
init {
layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)
background = ColorDrawable(Color.TRANSPARENT)
resizeWidgetLinePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {