package com.hellodev.lightme.view; import com.hellodev.lightme.FlashController; import com.hellodev.lightme.R; import com.hellodev.lightme.service.ServiceHelper; import com.hellodev.lightme.util.MPreferenceManager; import android.graphics.drawable.Drawable; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class LauncherPanelManager extends BasePanelManager implements OnTouchListener { private final static String TAG = "LauncherPanelManager"; private int PANEL_VIEW_NORMAL_MOVE_Y_MAX; private int mLastX = -1; private int mLastY = -1; public LauncherPanelManager() { super(); mPanelView = new View(mContext); mPanelView.setOnTouchListener(this); mPanelView.setBackgroundResource(R.drawable.launcher_off); Drawable panelDrawable = mContext.getResources().getDrawable( R.drawable.launcher_off); PANEL_VIEW_WIDTH = panelDrawable.getIntrinsicWidth(); PANEL_VIEW_HEIGHT = panelDrawable.getIntrinsicHeight(); PANEL_VIEW_NORMAL_MOVE_Y_MAX = SCREEN_HEIGHT - CLEAR_PANEL_VIEW_HEIGHT - PANEL_VIEW_HEIGHT - PANEL_PRESSED_INCREMENT; mPanelParams.width = PANEL_VIEW_WIDTH; mPanelParams.height = PANEL_VIEW_HEIGHT; } @Override public void showPanel() { if (!isPanelShown) { if (mLastX == -1 || mLastY == -1) { mLastX = 0; mLastY = SCREEN_HEIGHT / 2; } addPanel(mLastX, mLastY); flashController.addObserver(this); } if(flashController.hasCameraReleased()) { flashController.turnFlashOffIfCameraReleased(); } setFlashLevel(flashController.getCurrentLevel()); } /* * hide的时候不需要removeObserver,减少release */ @Override public void hidePanel() { if (isPanelShown) { removeWindow(); PANEL_VIEW_NORMAL_MOVE_Y_MAX = SCREEN_HEIGHT - CLEAR_PANEL_VIEW_HEIGHT - PANEL_VIEW_HEIGHT; closeClearPanel(); mLastX = mPanelParams.x; mLastY = mPanelParams.y; flashController.removeObserver(this); } } private void dock() { int curX = mPanelParams.x; int centerMark = (SCREEN_WIDTH - PANEL_VIEW_WIDTH) / 2; if (curX < centerMark) { smoothMoveToLeft(); } else { smoothMoveToRight(); } } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mDownX = event.getRawX(); mDownY = event.getRawY(); mInitialX = mPanelParams.x; mInitialY = mPanelParams.y; mIsLongPressing = false; break; case MotionEvent.ACTION_MOVE: float x = mInitialX + (event.getRawX() - mDownX); float y = mInitialY + (event.getRawY() - mDownY); if (mIsLongPressing) { // show clear panel float panelBottom = y + PANEL_VIEW_HEIGHT; toggleClearPanelFocusChanged(panelBottom); if (flashController.isFlashOn()) changeFlashLightWithMove(mDownY, y); } else if (y > PANEL_VIEW_NORMAL_MOVE_Y_MAX) { // 普通移动无法移动到clearPanel区域 y = PANEL_VIEW_NORMAL_MOVE_Y_MAX; } moveTo(x, y); break; case MotionEvent.ACTION_UP: if (mIsLongPressing) { if (isClearPanelFocused) { MPreferenceManager.getInstance().toggleLauncherPanel(false, true); ServiceHelper.stopLauncherPanelService(); } else { smoothMoveTo((int) mInitialX, (int) mInitialY); } onLongPressStateEnd(); } else { dock(); } break; } return mPanelGestureDetector == null ? true : mPanelGestureDetector .onTouchEvent(event); } @Override public void setFlashLevel(int currentLevel) { if(currentLevel != mCurrentLevel) { mCurrentLevel = currentLevel; if (currentLevel == FlashController.LEVEL_OFF) mPanelView.setBackgroundResource(R.drawable.launcher_off); else if (currentLevel > FlashController.LEVEL_OFF) mPanelView.setBackgroundResource(R.drawable.launcher_on); } } @Override protected int getPanelWidth() { return PANEL_VIEW_WIDTH; } @Override protected int getPanelHeight() { return PANEL_VIEW_HEIGHT; } @Override protected int getPanelLayoutGravity() { return Gravity.LEFT | Gravity.TOP; } }