Loading app/src/main/java/foundation/e/blisslauncher/core/customviews/LauncherPagedView.java +29 −11 Original line number Diff line number Diff line Loading @@ -724,18 +724,26 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V * @param screenId The screen in which to add the child. * @param x The X position of the child in the screen's grid. * @param y The Y position of the child in the screen's grid. * @param animate If the view should start to animate after drag and drop. */ private void addInScreen(View child, long container, long screenId, int x, int y) { Log.d( TAG, "addInScreen() called with: child = [" + child + "], container = [" + container + "], screenId = [" + screenId + "], x = [" + x + "], y = [" + y + "]" ); private void addInScreen(View child, long container, long screenId, int x, int y, boolean animate) { int index = y * mLauncher.getDeviceProfile().getInv().getNumColumns() + x; addInScreen( child, container, screenId, y * mLauncher.getDeviceProfile().getInv().getNumColumns() + x index ); post(() -> { if(animate) { if(index % 2 == 0) { child.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.wobble)); } else { child.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.wobble_reverse)); } } }); } /** Loading Loading @@ -1406,8 +1414,6 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V boolean foundCell = mTargetCell[0] >= 0 && mTargetCell[1] >= 0; Log.d(TAG, "Found cell " + foundCell + " " + mTargetCell[0] + " " + mTargetCell[0]); if (foundCell) { if (getScreenIdForPageIndex(mCurrentPage) != screenId && !hasMovedIntoHotseat) { snapScreen = getPageIndexForScreenId(screenId); Loading @@ -1419,12 +1425,13 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V // Reparent the view CellLayout parentCell = getParentCellLayoutForView(cell); if (parentCell != null) { cell.clearAnimation(); parentCell.removeView(cell); } else if (BuildConfig.DEBUG) { throw new NullPointerException("mDragInfo.cell has null parent"); } addInScreen(cell, container, screenId, mTargetCell[0], mTargetCell[1]); addInScreen(cell, container, screenId, mTargetCell[0], mTargetCell[1], true); } // update the item's position after drop Loading Loading @@ -1456,7 +1463,7 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V // spring-loaded mode so the page meets the icon where it was picked up. mLauncher.getDragController().animateDragViewToOriginalPosition( onCompleteRunnable, cell, SPRING_LOADED_TRANSITION_MS); //mLauncher.getStateManager().goToState(NORMAL); mLauncher.getStateManager().goToState(NORMAL); parent.onDropChild(cell); return; } Loading Loading @@ -1907,7 +1914,18 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V mSpringLoadedDragController.cancel(); // Reset the grid state by stopping the animation and removing uninstall icon after 25 seconds wobbleExpireAlarm.setAlarm(WOBBLE_EXPIRATION_TIMEOUT); setWobbleExpirationAlarm(WOBBLE_EXPIRATION_TIMEOUT); } /** * @param timeoutInMillis Expire wobble animation after the given timeout * @return true if there was any pending alarm otherwise false. */ public boolean setWobbleExpirationAlarm(long timeoutInMillis) { boolean alarmPending = wobbleExpireAlarm.alarmPending(); wobbleExpireAlarm.cancelAlarm(); wobbleExpireAlarm.setAlarm(timeoutInMillis); return alarmPending; } @Override Loading app/src/main/java/foundation/e/blisslauncher/features/test/CellLayout.kt +14 −10 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ import android.util.AttributeSet import android.util.Log import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils import android.widget.GridLayout import androidx.annotation.IntDef import foundation.e.blisslauncher.R Loading Loading @@ -785,7 +786,7 @@ open class CellLayout @JvmOverloads constructor( minSpanY: Int, spanX: Int, spanY: Int, dragView: View?, dragView: View, result: IntArray?, resultSpan: IntArray?, mode: Int Loading @@ -812,7 +813,7 @@ open class CellLayout @JvmOverloads constructor( // committing anything or animating anything as we just want to determine if a solution // exists if (mode == MODE_DRAG_OVER || mode == MODE_ON_DROP || mode == MODE_ON_DROP_EXTERNAL) { val parent = (dragView?.parent as ViewGroup?) val parent = (dragView.parent as ViewGroup?) parent?.removeView(dragView) if (childCount == mCountX * mCountY) { Loading @@ -835,10 +836,10 @@ open class CellLayout @JvmOverloads constructor( iconLayoutParams.height = if (mContainerType == HOTSEAT) dp.hotseatCellHeightPx else dp.cellHeightPx iconLayoutParams.width = dp.cellWidthPx dragView?.also { dragView.also { if (it is IconTextView) it.setTextVisibility(mContainerType != HOTSEAT) } dragView?.setLayoutParams(iconLayoutParams) dragView.layoutParams = iconLayoutParams addView(dragView, index) /*copySolutionToTempState(finalSolution, dragView) Loading @@ -856,13 +857,16 @@ open class CellLayout @JvmOverloads constructor( ReorderPreviewAnimation.MODE_PREVIEW ) }*/ } // May consider this later. /*if ((mode == MODE_ON_DROP || !foundSolution)) { setUseTempCoords(false) }*/ // requestLayout() if ((mode == MODE_ON_DROP)) { if (index % 2 == 0) { dragView.startAnimation(AnimationUtils.loadAnimation(context, R.anim.wobble)) } else { dragView.startAnimation(AnimationUtils.loadAnimation(context, R.anim.wobble_reverse)) } } } requestLayout() return result } Loading app/src/main/java/foundation/e/blisslauncher/features/test/TestActivity.kt +6 −1 Original line number Diff line number Diff line Loading @@ -1228,11 +1228,16 @@ class TestActivity : BaseDraggingActivity(), AutoCompleteAdapter.OnSuggestionCli return } if (dragController.isDragging()) { if (dragController.isDragging) { dragController.cancelDrag() return } // We expire wobble animation as soon a back press is done and return if the animation was running. if(getLauncherPagedView().setWobbleExpirationAlarm(0)) { return } // Note: There should be at most one log per method call. This is enforced implicitly // by using if-else statements. val topView = AbstractFloatingView.getTopOpenView(this) Loading Loading
app/src/main/java/foundation/e/blisslauncher/core/customviews/LauncherPagedView.java +29 −11 Original line number Diff line number Diff line Loading @@ -724,18 +724,26 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V * @param screenId The screen in which to add the child. * @param x The X position of the child in the screen's grid. * @param y The Y position of the child in the screen's grid. * @param animate If the view should start to animate after drag and drop. */ private void addInScreen(View child, long container, long screenId, int x, int y) { Log.d( TAG, "addInScreen() called with: child = [" + child + "], container = [" + container + "], screenId = [" + screenId + "], x = [" + x + "], y = [" + y + "]" ); private void addInScreen(View child, long container, long screenId, int x, int y, boolean animate) { int index = y * mLauncher.getDeviceProfile().getInv().getNumColumns() + x; addInScreen( child, container, screenId, y * mLauncher.getDeviceProfile().getInv().getNumColumns() + x index ); post(() -> { if(animate) { if(index % 2 == 0) { child.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.wobble)); } else { child.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.wobble_reverse)); } } }); } /** Loading Loading @@ -1406,8 +1414,6 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V boolean foundCell = mTargetCell[0] >= 0 && mTargetCell[1] >= 0; Log.d(TAG, "Found cell " + foundCell + " " + mTargetCell[0] + " " + mTargetCell[0]); if (foundCell) { if (getScreenIdForPageIndex(mCurrentPage) != screenId && !hasMovedIntoHotseat) { snapScreen = getPageIndexForScreenId(screenId); Loading @@ -1419,12 +1425,13 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V // Reparent the view CellLayout parentCell = getParentCellLayoutForView(cell); if (parentCell != null) { cell.clearAnimation(); parentCell.removeView(cell); } else if (BuildConfig.DEBUG) { throw new NullPointerException("mDragInfo.cell has null parent"); } addInScreen(cell, container, screenId, mTargetCell[0], mTargetCell[1]); addInScreen(cell, container, screenId, mTargetCell[0], mTargetCell[1], true); } // update the item's position after drop Loading Loading @@ -1456,7 +1463,7 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V // spring-loaded mode so the page meets the icon where it was picked up. mLauncher.getDragController().animateDragViewToOriginalPosition( onCompleteRunnable, cell, SPRING_LOADED_TRANSITION_MS); //mLauncher.getStateManager().goToState(NORMAL); mLauncher.getStateManager().goToState(NORMAL); parent.onDropChild(cell); return; } Loading Loading @@ -1907,7 +1914,18 @@ public class LauncherPagedView extends PagedView<PageIndicatorDots> implements V mSpringLoadedDragController.cancel(); // Reset the grid state by stopping the animation and removing uninstall icon after 25 seconds wobbleExpireAlarm.setAlarm(WOBBLE_EXPIRATION_TIMEOUT); setWobbleExpirationAlarm(WOBBLE_EXPIRATION_TIMEOUT); } /** * @param timeoutInMillis Expire wobble animation after the given timeout * @return true if there was any pending alarm otherwise false. */ public boolean setWobbleExpirationAlarm(long timeoutInMillis) { boolean alarmPending = wobbleExpireAlarm.alarmPending(); wobbleExpireAlarm.cancelAlarm(); wobbleExpireAlarm.setAlarm(timeoutInMillis); return alarmPending; } @Override Loading
app/src/main/java/foundation/e/blisslauncher/features/test/CellLayout.kt +14 −10 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ import android.util.AttributeSet import android.util.Log import android.view.View import android.view.ViewGroup import android.view.animation.AnimationUtils import android.widget.GridLayout import androidx.annotation.IntDef import foundation.e.blisslauncher.R Loading Loading @@ -785,7 +786,7 @@ open class CellLayout @JvmOverloads constructor( minSpanY: Int, spanX: Int, spanY: Int, dragView: View?, dragView: View, result: IntArray?, resultSpan: IntArray?, mode: Int Loading @@ -812,7 +813,7 @@ open class CellLayout @JvmOverloads constructor( // committing anything or animating anything as we just want to determine if a solution // exists if (mode == MODE_DRAG_OVER || mode == MODE_ON_DROP || mode == MODE_ON_DROP_EXTERNAL) { val parent = (dragView?.parent as ViewGroup?) val parent = (dragView.parent as ViewGroup?) parent?.removeView(dragView) if (childCount == mCountX * mCountY) { Loading @@ -835,10 +836,10 @@ open class CellLayout @JvmOverloads constructor( iconLayoutParams.height = if (mContainerType == HOTSEAT) dp.hotseatCellHeightPx else dp.cellHeightPx iconLayoutParams.width = dp.cellWidthPx dragView?.also { dragView.also { if (it is IconTextView) it.setTextVisibility(mContainerType != HOTSEAT) } dragView?.setLayoutParams(iconLayoutParams) dragView.layoutParams = iconLayoutParams addView(dragView, index) /*copySolutionToTempState(finalSolution, dragView) Loading @@ -856,13 +857,16 @@ open class CellLayout @JvmOverloads constructor( ReorderPreviewAnimation.MODE_PREVIEW ) }*/ } // May consider this later. /*if ((mode == MODE_ON_DROP || !foundSolution)) { setUseTempCoords(false) }*/ // requestLayout() if ((mode == MODE_ON_DROP)) { if (index % 2 == 0) { dragView.startAnimation(AnimationUtils.loadAnimation(context, R.anim.wobble)) } else { dragView.startAnimation(AnimationUtils.loadAnimation(context, R.anim.wobble_reverse)) } } } requestLayout() return result } Loading
app/src/main/java/foundation/e/blisslauncher/features/test/TestActivity.kt +6 −1 Original line number Diff line number Diff line Loading @@ -1228,11 +1228,16 @@ class TestActivity : BaseDraggingActivity(), AutoCompleteAdapter.OnSuggestionCli return } if (dragController.isDragging()) { if (dragController.isDragging) { dragController.cancelDrag() return } // We expire wobble animation as soon a back press is done and return if the animation was running. if(getLauncherPagedView().setWobbleExpirationAlarm(0)) { return } // Note: There should be at most one log per method call. This is enforced implicitly // by using if-else statements. val topView = AbstractFloatingView.getTopOpenView(this) Loading