package com.hellodev.lightme.view; import android.graphics.drawable.Drawable; import android.view.Gravity; import android.view.MotionEvent; import android.view.WindowManager; import android.view.View; import android.view.View.OnTouchListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import com.hellodev.lightme.FlashController; import com.hellodev.lightme.R; import com.hellodev.lightme.service.ServiceHelper; import com.hellodev.lightme.util.MPreferenceManager; public class KeyguardPanelManager extends BasePanelManager implements OnTouchListener { private final static String TAG = "KeyguardPanelManager"; private int PANEL_VIEW_DOCK_OFFSET_Y; private final int PANEL_VIEW_DOCK_X; private final int PANEL_VIEW_DOCK_Y; private Animation hintAnimation; public KeyguardPanelManager() { super(); mPanelView = new KeyguardPanelView(mContext); mPanelView.setOnTouchListener(this); mPanelView.setBackgroundResource(R.drawable.keyguard_off); Drawable panelDrawable = mContext.getResources().getDrawable( R.drawable.keyguard_off); PANEL_VIEW_WIDTH = panelDrawable.getIntrinsicWidth(); PANEL_VIEW_HEIGHT = panelDrawable.getIntrinsicHeight(); PANEL_VIEW_DOCK_OFFSET_Y = mDisplayHelper.dpiToPx(163); PANEL_VIEW_DOCK_X = (SCREEN_WIDTH - PANEL_VIEW_WIDTH) / 2; PANEL_VIEW_DOCK_Y = SCREEN_HEIGHT - PANEL_VIEW_DOCK_OFFSET_Y; mPanelParams.windowAnimations = R.style.keyguard_panel_anim; mPanelParams.width = PANEL_VIEW_WIDTH; mPanelParams.height = PANEL_VIEW_HEIGHT; mPanelParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; mClearPanelParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; } @Override public void showPanel() { if (!isPanelShown) { addPanel(PANEL_VIEW_DOCK_X, PANEL_VIEW_DOCK_Y); flashController.addObserver(this); } setFlashLevel(flashController.getCurrentLevel()); } //FIXME 需要判断动画是否已经执行完毕 public void updatePanelWhenVisiable() { if(hintAnimation == null) hintAnimation = AnimationUtils.loadAnimation(mContext, R.anim.keyguard_shock_hint); mPanelView.startAnimation(hintAnimation); } // 发生在进入桌面时,屏幕关闭应该是要show出来,on的时候应该是shake的重新绑定,on的时候还需要做什么么,把power守护关掉 @Override public void hidePanel() { if (isPanelShown) { removeWindow(); closeClearPanel(); flashController.removeObserver(this); } } @Override public void setFlashLevel(int currentLevel) { if(currentLevel != mCurrentLevel) { mCurrentLevel = currentLevel; if (mCurrentLevel == FlashController.LEVEL_OFF) mPanelView.setBackgroundResource(R.drawable.keyguard_off); else if (mCurrentLevel > FlashController.LEVEL_OFF) mPanelView.setBackgroundResource(R.drawable.keyguard_on); } } @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: if (mIsLongPressing) { float x = mInitialX + (event.getRawX() - mDownX); float y = mInitialY + (event.getRawY() - mDownY); // show clear panel float panelBottom = y + PANEL_VIEW_HEIGHT; toggleClearPanelFocusChanged(panelBottom); moveTo(x, y); if (flashController.isFlashOn()) changeFlashLightWithMove(mDownY, y); } break; case MotionEvent.ACTION_UP: if (mIsLongPressing) { if (isClearPanelFocused) { MPreferenceManager mPrefsMgr = MPreferenceManager .getInstance(); mPrefsMgr.toggleKeyguardPanel(false, true); ServiceHelper.stopKeyguardPanelService(); } else { dock(); } onLongPressStateEnd(); } break; } return mPanelGestureDetector == null ? true : mPanelGestureDetector .onTouchEvent(event); } private void dock() { smoothMoveTo(PANEL_VIEW_DOCK_X, PANEL_VIEW_DOCK_Y); } @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; } }