mirror of
				https://github.com/SimpleMobileTools/Simple-Launcher.git
				synced 2025-06-05 21:59:15 +02:00 
			
		
		
		
	Fade page change indicators when not needed
This commit is contained in:
		| @@ -74,6 +74,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|     private var pageChangeLastAreaEntryTime = 0L |     private var pageChangeLastAreaEntryTime = 0L | ||||||
|     private var pageChangeAnimLeftPercentage = 0f |     private var pageChangeAnimLeftPercentage = 0f | ||||||
|     private var pageChangeEnabled = true |     private var pageChangeEnabled = true | ||||||
|  |     private var pageChangeIndicatorsAlpha = 0f | ||||||
|  |  | ||||||
|     // apply fake margins at the home screen. Real ones would cause the icons be cut at dragging at screen sides |     // apply fake margins at the home screen. Real ones would cause the icons be cut at dragging at screen sides | ||||||
|     var sideMargins = Rect() |     var sideMargins = Rect() | ||||||
| @@ -99,6 +100,17 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private val startFadingIndicators: Runnable = Runnable { | ||||||
|  |         ValueAnimator.ofFloat(1f, 0f) | ||||||
|  |             .apply { | ||||||
|  |                 addUpdateListener { | ||||||
|  |                     pageChangeIndicatorsAlpha = it.animatedValue as Float | ||||||
|  |                     redrawGrid() | ||||||
|  |                 } | ||||||
|  |                 start() | ||||||
|  |             } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     init { |     init { | ||||||
|         ViewCompat.setAccessibilityDelegate(this, HomeScreenGridTouchHelper(this)) |         ViewCompat.setAccessibilityDelegate(this, HomeScreenGridTouchHelper(this)) | ||||||
|  |  | ||||||
| @@ -109,7 +121,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         dragShadowCirclePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { |         dragShadowCirclePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { | ||||||
|             color = context.resources.getColor(R.color.light_grey_stroke) |             color = context.resources.getColor(R.color.hint_white) | ||||||
|             strokeWidth = context.resources.getDimension(R.dimen.small_margin) |             strokeWidth = context.resources.getDimension(R.dimen.small_margin) | ||||||
|             style = Paint.Style.STROKE |             style = Paint.Style.STROKE | ||||||
|         } |         } | ||||||
| @@ -118,7 +130,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|             strokeWidth = context.resources.getDimension(R.dimen.page_indicator_stroke_width) |             strokeWidth = context.resources.getDimension(R.dimen.page_indicator_stroke_width) | ||||||
|         } |         } | ||||||
|         currentPageIndicatorPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { |         currentPageIndicatorPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply { | ||||||
|             color = context.resources.getColor(R.color.hint_white) |             color = context.resources.getColor(R.color.white) | ||||||
|             style = Paint.Style.FILL |             style = Paint.Style.FILL | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -250,6 +262,11 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|         postDelayed(checkAndExecuteDelayedPageChange, PAGE_CHANGE_HOLD_THRESHOLD) |         postDelayed(checkAndExecuteDelayedPageChange, PAGE_CHANGE_HOLD_THRESHOLD) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private fun scheduleIndicatorsFade() { | ||||||
|  |         pageChangeIndicatorsAlpha = 1f | ||||||
|  |         postDelayed(startFadingIndicators, PAGE_INDICATORS_FADE_DELAY) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private fun doWithPageChangeDelay(needed: PageChangeArea, pageChangeFunction: () -> Boolean) { |     private fun doWithPageChangeDelay(needed: PageChangeArea, pageChangeFunction: () -> Boolean) { | ||||||
|         if (pageChangeLastArea != needed) { |         if (pageChangeLastArea != needed) { | ||||||
|             pageChangeLastArea = needed |             pageChangeLastArea = needed | ||||||
| @@ -746,7 +763,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Only draw page indicators when there is a need for it |         // Only draw page indicators when there is a need for it | ||||||
|         if (getMaxPage() > 0 || currentPage > 0) { |         if (pageChangeAnimLeftPercentage > 0f || pageChangeIndicatorsAlpha != 0f) { | ||||||
|             val pageCount = max(getMaxPage(), currentPage) + 1 |             val pageCount = max(getMaxPage(), currentPage) + 1 | ||||||
|             val pageIndicatorsRequiredWidth = pageCount * pageIndicatorRadius * 2 + pageCount * (pageIndicatorMargin - 1) |             val pageIndicatorsRequiredWidth = pageCount * pageIndicatorRadius * 2 + pageCount * (pageIndicatorMargin - 1) | ||||||
|             val usableWidth = getFakeWidth() |             val usableWidth = getFakeWidth() | ||||||
| @@ -754,6 +771,11 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|             var currentPageIndicatorLeft = pageIndicatorsStart |             var currentPageIndicatorLeft = pageIndicatorsStart | ||||||
|             val pageIndicatorY = cellYCoords[rowCount - 1].toFloat() + sideMargins.top + extraYMargin + iconMargin |             val pageIndicatorY = cellYCoords[rowCount - 1].toFloat() + sideMargins.top + extraYMargin + iconMargin | ||||||
|             val pageIndicatorStep = pageIndicatorRadius * 2 + pageIndicatorMargin |             val pageIndicatorStep = pageIndicatorRadius * 2 + pageIndicatorMargin | ||||||
|  |             if (pageChangeIndicatorsAlpha != 0f) { | ||||||
|  |                 emptyPageIndicatorPaint.alpha = (pageChangeIndicatorsAlpha * 255.0f).toInt() | ||||||
|  |             } else { | ||||||
|  |                 emptyPageIndicatorPaint.alpha = 255 | ||||||
|  |             } | ||||||
|             // Draw empty page indicators |             // Draw empty page indicators | ||||||
|             for (page in 0 until pageCount) { |             for (page in 0 until pageCount) { | ||||||
|                 canvas.drawCircle(currentPageIndicatorLeft + pageIndicatorRadius, pageIndicatorY, pageIndicatorRadius, emptyPageIndicatorPaint) |                 canvas.drawCircle(currentPageIndicatorLeft + pageIndicatorRadius, pageIndicatorY, pageIndicatorRadius, emptyPageIndicatorPaint) | ||||||
| @@ -764,6 +786,11 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|             val currentIndicatorRangeStart = pageIndicatorsStart + lastPage * pageIndicatorStep |             val currentIndicatorRangeStart = pageIndicatorsStart + lastPage * pageIndicatorStep | ||||||
|             val currentIndicatorRangeEnd = pageIndicatorsStart + currentPage * pageIndicatorStep |             val currentIndicatorRangeEnd = pageIndicatorsStart + currentPage * pageIndicatorStep | ||||||
|             val currentIndicatorPosition = MathUtils.lerp(currentIndicatorRangeStart, currentIndicatorRangeEnd, 1 - pageChangeAnimLeftPercentage) |             val currentIndicatorPosition = MathUtils.lerp(currentIndicatorRangeStart, currentIndicatorRangeEnd, 1 - pageChangeAnimLeftPercentage) | ||||||
|  |             if (pageChangeIndicatorsAlpha != 0f) { | ||||||
|  |                 currentPageIndicatorPaint.alpha = (pageChangeIndicatorsAlpha * 255.0f).toInt() | ||||||
|  |             } else { | ||||||
|  |                 currentPageIndicatorPaint.alpha = 255 | ||||||
|  |             } | ||||||
|             canvas.drawCircle(currentIndicatorPosition + pageIndicatorRadius, pageIndicatorY, pageIndicatorRadius, currentPageIndicatorPaint) |             canvas.drawCircle(currentIndicatorPosition + pageIndicatorRadius, pageIndicatorY, pageIndicatorRadius, currentPageIndicatorPaint) | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -1052,6 +1079,8 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|  |  | ||||||
|     private fun handlePageChange(redraw: Boolean = false) { |     private fun handlePageChange(redraw: Boolean = false) { | ||||||
|         pageChangeEnabled = false |         pageChangeEnabled = false | ||||||
|  |         pageChangeIndicatorsAlpha = 0f | ||||||
|  |         removeCallbacks(startFadingIndicators) | ||||||
|         if (redraw) { |         if (redraw) { | ||||||
|             redrawGrid() |             redrawGrid() | ||||||
|         } |         } | ||||||
| @@ -1068,6 +1097,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|                         pageChangeEnabled = true |                         pageChangeEnabled = true | ||||||
|                         lastPage = currentPage |                         lastPage = currentPage | ||||||
|                         schedulePageChange() |                         schedulePageChange() | ||||||
|  |                         scheduleIndicatorsFade() | ||||||
|                         redrawGrid() |                         redrawGrid() | ||||||
|                     } |                     } | ||||||
|                 }) |                 }) | ||||||
| @@ -1077,6 +1107,7 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) : Rel | |||||||
|  |  | ||||||
|     companion object { |     companion object { | ||||||
|         private const val PAGE_CHANGE_HOLD_THRESHOLD = 500L |         private const val PAGE_CHANGE_HOLD_THRESHOLD = 500L | ||||||
|  |         private const val PAGE_INDICATORS_FADE_DELAY = PAGE_CHANGE_HOLD_THRESHOLD + 300L | ||||||
|  |  | ||||||
|         private enum class PageChangeArea { |         private enum class PageChangeArea { | ||||||
|             LEFT, |             LEFT, | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
|     <dimen name="icon_side_margin">10dp</dimen> |     <dimen name="icon_side_margin">10dp</dimen> | ||||||
|     <dimen name="resize_frame_dot_radius">8dp</dimen> |     <dimen name="resize_frame_dot_radius">8dp</dimen> | ||||||
|     <dimen name="move_gesture_threshold">20dp</dimen> |     <dimen name="move_gesture_threshold">20dp</dimen> | ||||||
|     <dimen name="page_indicator_dot_radius">4dp</dimen> |     <dimen name="page_indicator_dot_radius">6dp</dimen> | ||||||
|     <dimen name="page_indicator_stroke_width">1dp</dimen> |     <dimen name="page_indicator_stroke_width">1dp</dimen> | ||||||
|     <dimen name="page_indicator_margin">4dp</dimen> |     <dimen name="page_indicator_margin">6dp</dimen> | ||||||
| </resources> | </resources> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user