diff --git a/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingHorizontalLayout.java b/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingHorizontalLayout.java index 22dd348..b7e4d15 100644 --- a/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingHorizontalLayout.java +++ b/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingHorizontalLayout.java @@ -42,7 +42,7 @@ import java.util.ArrayList; import java.util.List; -import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; @@ -52,7 +52,7 @@ */ public class FloatingHorizontalLayout implements OnFloatingTouchListener, OnItemClickListener { - private LayoutParams mParams; + private LayoutParams mParams, rParams; private WindowManager windowManager; private Context context; private LayoutParams paramsF; @@ -67,7 +67,6 @@ public class FloatingHorizontalLayout implements OnFloatingTouchListener, OnItem private MyPopupAppsLoader onMyAppsLoader; private Tracker tracker = AppController.getController().tracker(); private View view; - private RecyclerView recyclerView; public FloatingHorizontalLayout(Context context) { this.context = context; @@ -90,35 +89,46 @@ private void initWindows() { windowManager.getDefaultDisplay().getSize(szWindow); mParams = new LayoutParams(TYPE_PRIORITY_PHONE /* to appear on top of keyboard */, FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, PixelFormat.TRANSLUCENT); + rParams = new LayoutParams(TYPE_PRIORITY_PHONE /* to appear on top of keyboard */, FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, + PixelFormat.TRANSLUCENT); setupParams(); mParams.gravity = Gravity.LEFT | Gravity.TOP; + rParams.gravity = Gravity.LEFT | Gravity.TOP; initView(); } private void setupParams() { - int gapSize = AppHelper.getFinalSize(context); - mParams.width = WRAP_CONTENT; - mParams.height = gapSize * 2; + int iconSize = AppHelper.getFinalSize(context); + int pX = AppHelper.getPositionX(context); + int pY = AppHelper.getPositionY(context); + rParams.width = MATCH_PARENT; + rParams.height = iconSize; + mParams.width = iconSize; + mParams.height = iconSize; if (AppHelper.isSavePositionEnabled(context)) { - mParams.x = AppHelper.getPositionX(context); - mParams.y = AppHelper.getPositionY(context); + mParams.x = pX; + mParams.y = pY; + rParams.y = pY + iconSize; + rParams.x = pX; } else { mParams.x = 0; mParams.y = 100; + rParams.x = 0; + rParams.y = 100 + iconSize; } } private void initView() { view = LayoutInflater.from(context).inflate(R.layout.floating_layout_list, null); - floatingImage = (ImageView) view.findViewById(R.id.floatingImage); - recyclerView = (RecyclerView) view.findViewById(R.id.recycler); + RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler); recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)); recyclerView.setItemAnimator(new DefaultItemAnimator()); setupBackground(); hideRecycler(); recyclerView.setAdapter(adapter); + windowManager.addView(view, rParams); + if (floatingImage == null) floatingImage = new ImageView(context); setupFloatingImage(false); - windowManager.addView(view, mParams); floatingImage.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { @@ -126,24 +136,35 @@ public boolean onTouch(View v, MotionEvent event) { return FloatingHorizontalLayout.this.onTouch(v, event); } }); + windowManager.addView(floatingImage, mParams); onMyAppsLoader = new MyPopupAppsLoader(context, this); onMyAppsLoader.registerListener(3, onLoadCompleteListener); onMyAppsLoader.startLoading(); } private void hideRecycler() { - recyclerView.setVisibility(View.GONE); + view.setVisibility(View.GONE); } private void showRecycler() { - recyclerView.setVisibility(View.VISIBLE); + int iconSize = AppHelper.getFinalSize(context); + if (paramsF != null) { + rParams.x = paramsF.x; + if (paramsF.y + iconSize / 2 > szWindow.y / 2) { + rParams.y = paramsF.y - iconSize; + } else if (paramsF.y + iconSize / 2 <= szWindow.y / 2) { + rParams.y = paramsF.y + iconSize; + } + windowManager.updateViewLayout(view, rParams); + } + view.setVisibility(View.VISIBLE); } private void setupBackground() { Drawable drawable = AppHelper.getColorDrawable(AppHelper.getFABackground(context)); drawable.setAlpha(AppHelper.getBackgroundAlpha(context)); - if (recyclerView != null) { - recyclerView.setBackground(drawable); + if (view != null) { + view.setBackground(drawable); showRecycler(); } } @@ -154,14 +175,12 @@ private void setupFloatingImage(boolean update) { } else { floatingImage.setImageResource(R.mipmap.ic_launcher); } - int gapSize = AppHelper.getFinalSize(context); - floatingImage.getLayoutParams().width = gapSize; - floatingImage.requestLayout(); if (adapter != null) adapter.notifyDataSetChanged(); if (update) { if (windowManager != null) try { - windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, mParams); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.floatingImage, mParams); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, rParams); } catch (Exception e) { e.printStackTrace(); } @@ -169,7 +188,8 @@ private void setupFloatingImage(boolean update) { } public void onDestroy() { - if (windowManager != null && view != null) { + if (windowManager != null && floatingImage != null) { + windowManager.removeViewImmediate(floatingImage); windowManager.removeViewImmediate(view); } if (onMyAppsLoader != null) { @@ -193,7 +213,7 @@ public void onClick() { animateShowing(); try { HitBuilders.EventBuilder eventBuilder = new HitBuilders.EventBuilder(); - if (recyclerView.isShown()) { + if (view.isShown()) { hideRecycler(); eventBuilder.setCategory("FloatingHorizontalLayout") .setAction("hide") @@ -231,7 +251,6 @@ public void onDoubleClick() { context.startActivity(startMain); } HitBuilders.EventBuilder eventBuilder = new HitBuilders.EventBuilder(); - eventBuilder .setCategory("FloatingHorizontalLayout") .setAction("onDoubleClick") @@ -249,7 +268,7 @@ public boolean onTouch(View v, MotionEvent event) { initialTouchX = event.getRawX(); initialTouchY = event.getRawY(); animateShowing(); - return true; + break; case MotionEvent.ACTION_UP: if (AppHelper.isEdged(context)) { moveToEdge(); @@ -259,17 +278,25 @@ public boolean onTouch(View v, MotionEvent event) { } } animateHidden(); - return true; + break; case MotionEvent.ACTION_MOVE: - paramsF.x = initialX + (int) (event.getRawX() - initialTouchX); - paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); - try { - windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, paramsF); - } catch (Exception e) { - e.printStackTrace(); + if (paramsF.y >= 0 && paramsF.y < (szWindow.y - AppHelper.getFinalSize(context))) { + paramsF.x = initialX + (int) (event.getRawX() - initialTouchX); + paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); + try { + windowManager.updateViewLayout(FloatingHorizontalLayout.this.floatingImage, paramsF); + rParams.x = paramsF.x; + rParams.y = paramsF.y + AppHelper.getFinalSize(context); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, rParams); + } catch (Exception e) { + e.printStackTrace(); + } + animateShowing(); } - animateShowing(); - return true; + if (paramsF.y < 0) { + paramsF.y = 0; + } + break; } return false; } @@ -284,14 +311,14 @@ public void onTick(long t) { long step = (500 - t) / 5; paramsF.x = (int) (double) bounceValue(step, x) - floatingImage.getWidth(); try { - windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, paramsF); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.floatingImage, paramsF); } catch (Exception ignored) {} } public void onFinish() { paramsF.x = 0; try { - windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, paramsF); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.floatingImage, paramsF); } catch (Exception ignored) {} if (AppHelper.isSavePositionEnabled(context)) { AppHelper.savePosition(context, paramsF.y, paramsF.x); @@ -306,14 +333,14 @@ public void onTick(long t) { long step = (500 - t) / 5; paramsF.x = szWindow.x + (int) (double) bounceValue(step, x); try { - windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, paramsF); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.floatingImage, paramsF); } catch (Exception ignored) {} } public void onFinish() { paramsF.x = szWindow.x - floatingImage.getWidth(); try { - windowManager.updateViewLayout(FloatingHorizontalLayout.this.view, paramsF); + windowManager.updateViewLayout(FloatingHorizontalLayout.this.floatingImage, paramsF); } catch (Exception ignored) {} if (AppHelper.isSavePositionEnabled(context)) { AppHelper.savePosition(context, paramsF.y, paramsF.x); diff --git a/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingLayout.java b/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingLayout.java index 2c6b970..990aa72 100644 --- a/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingLayout.java +++ b/app/src/main/java/com/styleme/floating/toolbox/pro/widget/floating/FloatingLayout.java @@ -269,7 +269,7 @@ public boolean onTouch(View v, MotionEvent event) { initialTouchX = event.getRawX(); initialTouchY = event.getRawY(); animateShowing(); - return true; + break; case MotionEvent.ACTION_UP: if (AppHelper.isEdged(context)) { moveToEdge(); @@ -279,7 +279,7 @@ public boolean onTouch(View v, MotionEvent event) { } } animateHidden(); - return true; + break; case MotionEvent.ACTION_MOVE: paramsF.x = initialX + (int) (event.getRawX() - initialTouchX); paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); @@ -299,7 +299,7 @@ public boolean onTouch(View v, MotionEvent event) { e.printStackTrace(); } animateShowing(); - return true; + break; } return false; } diff --git a/app/src/main/res/layouts/main_layout/layout/floating_layout_list.xml b/app/src/main/res/layouts/main_layout/layout/floating_layout_list.xml index e1c2a1c..2a7bdd8 100644 --- a/app/src/main/res/layouts/main_layout/layout/floating_layout_list.xml +++ b/app/src/main/res/layouts/main_layout/layout/floating_layout_list.xml @@ -7,11 +7,11 @@ android:animateLayoutChanges="true" android:orientation="horizontal"> - + + + + +