package com.joyplus; import java.text.SimpleDateFormat; import java.util.Date; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import com.joyplus.mediaplayer.MediaInfo; import com.joyplus.mediaplayer.VideoViewInterface.STATE; import com.joyplus.tvhelper.R; import com.joyplus.tvhelper.utils.Log; import com.joyplus.tvhelper.utils.Utils; public class JoyplusMediaPlayerBar implements JoyplusMediaPlayerInterface{ private boolean Debug = true; private String TAG = "JoyplusMediaPlayerBar"; private JoyplusMediaPlayerActivity mActivity; private VideoViewController mBottomBar; private VideoViewTopBar mTopBar; private View mTopMask,mBottomMask; private static final int SHOWTIME = 1500;//1.5s private static final int MSG_BASE = 300; private static final int MSG_SHOWVIEW = MSG_BASE+1; private static final int MSG_HIDEVIEW = MSG_BASE+2; //private static final int MSG_UPDATETIME = MSG_BASE+3; private static final int MSG_REQUESTSHOW = MSG_BASE+4; private static final int MSG_REQUESTHIDE = MSG_BASE+5; private static final int LAYOUT_BAR = MSG_BASE+7; public static final int MSG_SHOWANDKEYLONGPRESS = MSG_BASE+8; public static final int MSG_SHOWANDKEYDOWN = MSG_BASE+9; public static final int MSG_SHOWANDHOLD = MSG_BASE+10; private static final int MSG_UPDATE_SEEKBAR = MSG_BASE+11; private static final int MSG_UPDATE_SEEKBARMODE = MSG_BASE+12; /*use to control seekbar*/ enum SEEKMODE{ NORMAL , LONGPRESS ,PRESS } enum SEEKTYPE{ NORMAL , FORWARD , BACKWARD } enum SPEED{ X0 ("x0"),X1 ("x1"), X2 ("x2"), X3 ("x3"); private String speed; SPEED(String Speed){ speed = Speed; } public String toString(){ return speed; } public int toInt(){ if(speed.equals(SPEED.X0.toString()))return 0; else if(speed.equals(SPEED.X1.toString()))return 1; else if(speed.equals(SPEED.X2.toString()))return 2; else if(speed.equals(SPEED.X3.toString()))return 3; else return 0; } } public float getIntSpeed(SPEED speed){ if(speed == null)return 0; if(speed == SPEED.X3)return 20f; if(speed == SPEED.X2)return 10f; if(speed == SPEED.X1)return 5f; if(speed == SPEED.X0)return 0; return 0; } public SPEED getNextSpeed(SPEED speed){ if(speed == null)return null; if(speed == SPEED.X0){ return SPEED.X1; }else if(speed == SPEED.X1){ return SPEED.X2; }else if(speed == SPEED.X2){ return SPEED.X3; }else if(speed == SPEED.X3){ return SPEED.X3; }else{ return SPEED.X0; } } public void Init(){ mHandler.removeCallbacksAndMessages(null); mBottomBar.Init(); mTopBar.Init(); } private void setMaskVisible(boolean isVisible){ if(!isVisible && mTopMask.getVisibility() == View.VISIBLE) mTopMask.startAnimation(JoyplusMediaPlayerActivity.mAlphaDispear); if(!isVisible && mBottomMask.getVisibility() == View.VISIBLE) mBottomMask.startAnimation(JoyplusMediaPlayerActivity.mAlphaDispear); mTopMask.setVisibility(isVisible?View.VISIBLE:View.GONE); mBottomMask.setVisibility(isVisible?View.VISIBLE:View.GONE); } private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch(msg.what){ case JoyplusMediaPlayerActivity.MSG_MEDIAINFO: mBottomBar.dispatchMessage(msg); break; case MSG_SHOWVIEW: setMaskVisible(true); mTopBar.setVisible(true); mBottomBar.setVisible(true); if(!mBottomBar.SEEKING || !(mBottomBar.mSeekBarState.mSeekBarType == SEEKTYPE.NORMAL)) setVisible(false,SHOWTIME); break; case MSG_HIDEVIEW: mTopBar.setVisible(false); mBottomBar.setVisible(false); setMaskVisible(false); mHandler.removeCallbacksAndMessages(null); break; case MSG_REQUESTSHOW: mHandler.removeCallbacksAndMessages(null); setVisible(true,500); break; case MSG_REQUESTHIDE: mHandler.removeCallbacksAndMessages(null); setVisible(false,0); break; case JoyplusMediaPlayerActivity.MSG_UPDATEPLAYERINFO: mTopBar.UpdatePlayerInfo(); break; case MSG_SHOWANDKEYLONGPRESS: case MSG_SHOWANDKEYDOWN: mHandler.removeCallbacksAndMessages(null); setMaskVisible(true); mTopBar.setVisible(true); mBottomBar.setVisible(true); mBottomBar.dispatchMessage(msg); break; case MSG_SHOWANDHOLD: setMaskVisible(true); mTopBar.setVisible(true); mBottomBar.setVisible(true); mHandler.removeCallbacksAndMessages(null); break; case MSG_UPDATE_SEEKBAR: mBottomBar.UpdateSeekBarUI(); break; case MSG_UPDATE_SEEKBARMODE: if(mBottomBar.mSeekBarState != null){ mBottomBar.mSeekBarState.notifySeekBarMode(); } break; } } }; public JoyplusMediaPlayerBar(JoyplusMediaPlayerActivity context){ mActivity = context; mBottomBar = new VideoViewController(); mTopBar = new VideoViewTopBar(); mTopMask = context.findViewById(R.id.mediacontroller_mask_top); mBottomMask= context.findViewById(R.id.mediacontroller_mask_bottom); setVisible(true,0); } private void setVisible(boolean visible,int delay){ Message m ; if(visible) m=Message.obtain(mHandler,MSG_SHOWVIEW,"MSG_SHOWVIEW"); else m=Message.obtain(mHandler,MSG_HIDEVIEW,"MSG_HIDEVIEW"); mHandler.removeCallbacksAndMessages("MSG_SHOWVIEW"); mHandler.removeCallbacksAndMessages("MSG_HIDEVIEW"); mHandler.sendMessageDelayed(m,delay); } /** * for Mask top and bottom * @author Administrator * */ /*add by Jas@20130812 for TopBar in JoyPlus VideoView * it use to display Media name , media resolution .current time * */ private class VideoViewTopBar { private boolean Debug = true; private String TAG = "VideoViewTopBar"; private ImageView MediaResolution; private TextView MediaName; private TextView Click; private LinearLayout Layout; public void Init(){ Layout.setVisibility(View.VISIBLE); }; public void UpdatePlayerInfo() { // TODO Auto-generated method stub if(Layout.getVisibility() == View.VISIBLE){ InitView(); } } public VideoViewTopBar(){ InitResource(); } private Runnable UpdateTime = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub if(Layout.getVisibility() == View.VISIBLE)InitView(); } }; public void setVisible(boolean Visiblility){ if(Debug)Log.d(TAG,"setVisibility("+Visiblility+")"); if(!Visiblility && Layout.getVisibility()==View.VISIBLE){ Layout.startAnimation(JoyplusMediaPlayerActivity.mAlphaDispear); } Layout.setVisibility(Visiblility?View.VISIBLE:View.GONE); if(Layout.getVisibility() == View.VISIBLE){ InitView(); mHandler.removeCallbacks(UpdateTime); mHandler.postDelayed(UpdateTime, 1000); }else{ mHandler.removeCallbacks(UpdateTime); } } private void InitView() { // TODO Auto-generated method stub if(Layout.getVisibility() != View.VISIBLE)return; Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("H:mm"); Click.setText(format.format(date)); MediaName.setText(JoyplusMediaPlayerActivity.mInfo.mPlayerName); if("hd2".equals(JoyplusMediaPlayerActivity.mInfo.mQua)){ MediaResolution.setImageResource(R.drawable.icon_def_hd2); MediaResolution.setVisibility(View.VISIBLE); }else if("hd".equals(JoyplusMediaPlayerActivity.mInfo.mQua)){ MediaResolution.setImageResource(R.drawable.icon_def_hd); MediaResolution.setVisibility(View.VISIBLE); }else if("mp4".equals(JoyplusMediaPlayerActivity.mInfo.mQua)){ MediaResolution.setImageResource(R.drawable.icon_def_mp4); MediaResolution.setVisibility(View.VISIBLE); }else if("flv".equals(JoyplusMediaPlayerActivity.mInfo.mQua)){ MediaResolution.setImageResource(R.drawable.icon_def_flv); MediaResolution.setVisibility(View.VISIBLE); }else{ MediaResolution.setVisibility(View.GONE); } } private void InitResource() { // TODO Auto-generated method stub Layout = (LinearLayout) mActivity.findViewById(R.id.mediacontroller_topbar); MediaName = (TextView) mActivity.findViewById(R.id.mediacontroller_topbar_playname); MediaResolution = (ImageView) mActivity.findViewById(R.id.mediacontroller_topbar_resolution); Click = (TextView) mActivity.findViewById(R.id.mediacontroller_topbar_time); setVisible(true); } } /*Add by Jas@20130813 for add the BottomBar in JoyPlus VideoView * it depends on the MediaInfo which report from JoyPlusMediaPlayerStateTrack * and depends on the layout of joyplusvideoview.xml * */ private class VideoViewController { private boolean Debug = true; private String TAG = "VideoViewController"; private boolean SEEKING = false; private TextView CurrentTimeView; private TextView TotalTimeView; private SeekBar SeekBar; private RelativeLayout Layout_Time; private RelativeLayout Layout_seek; private RelativeLayout Layout_Speed; private TextView SpeedView; private int DefaultSpeedSpace = 1000; private int OFFSET = 33; private int seekBarWidthOffset = 40; private SeekBarState mSeekBarState; private long LongPressStartTime = 0; private class SeekBarState { private SEEKMODE mSeekBarMode; private SEEKTYPE mSeekBarType; private SPEED mSpeed; private boolean StopFlog = false; private boolean Notify = false; public String toString(){ StringBuffer ap = new StringBuffer(); ap.append("mSeekBarMode="+mSeekBarMode.toString()+"\n"); ap.append("mSeekBarType="+mSeekBarType.toString()+"\n"); ap.append("mSpeed="+mSpeed.toString()+"\n"); ap.append("StopFlog="+StopFlog); return ap.toString(); } public SeekBarState(){ InitSpeed(); this.StopFlog = false; } public void InitSpeed(){ mSeekBarMode = SEEKMODE.NORMAL; mSeekBarType = SEEKTYPE.NORMAL; mSpeed = SPEED.X0; } private void notifySeekBarMode(){ if(Notify)return; if(mSeekBarType != SEEKTYPE.NORMAL){ Notify = true; SEEKING = false; if(mSeekBarMode == SEEKMODE.LONGPRESS){ UpdateLongPress(); } UpdateSeekUI(); Notify = false; mHandler.removeMessages(MSG_HIDEVIEW); mHandler.removeMessages(MSG_UPDATE_SEEKBARMODE); mHandler.sendEmptyMessageDelayed(MSG_UPDATE_SEEKBARMODE, 10); }else{ InitSpeed(); mHandler.removeMessages(MSG_UPDATE_SEEKBARMODE); Notify = false; } } private void UpdateLongPress(){ if(mSeekBarMode != SEEKMODE.LONGPRESS)return; long DelayTime = System.currentTimeMillis()-LongPressStartTime; Log.d("Jas","UpdateLongPress() speed="+mSpeed.toString()+" DelayTime="+DelayTime); if(DelayTime>6*500){ if(mSpeed.toInt()<SPEED.X3.toInt())mSpeed = SPEED.X3; }else if(DelayTime<2*500){ if(mSpeed.toInt()<SPEED.X1.toInt())mSpeed = SPEED.X1; }else{ if(mSpeed.toInt()<SPEED.X2.toInt())mSpeed = SPEED.X2; } } public void UpdateSeekUI(){ mHandler.removeMessages(MSG_UPDATE_SEEKBAR); mHandler.sendEmptyMessage(MSG_UPDATE_SEEKBAR); } } public boolean UpdateUIRunnableRunning = false; public void UpdateSeekBarUI(){ if(UpdateUIRunnableRunning)return; if(mSeekBarState.mSeekBarType == SEEKTYPE.NORMAL) return; UpdateUIRunnableRunning = true; int position =0; if(mSeekBarState.mSeekBarType == SEEKTYPE.FORWARD) position = (int) (SeekBar.getProgress()+getSpeedSpace()*getIntSpeed(mSeekBarState.mSpeed)); else if(mSeekBarState.mSeekBarType == SEEKTYPE.BACKWARD) position = (int) (SeekBar.getProgress()-getSpeedSpace()*getIntSpeed(mSeekBarState.mSpeed)); if(position<0)position = 0; if(position>SeekBar.getMax())position = SeekBar.getMax(); SeekBar.setProgress(position); UpdateProgress(null); UpdateUIRunnableRunning = false; } public void Init(){ SeekBar.setEnabled(false); InitSeekBarState(); setVisible(true); UpdateProgress(null); Layout_Time.setVisibility(View.VISIBLE); } private void InitSeekBarState(){ if(mSeekBarState != null){ mSeekBarState.InitSpeed(); return; } mSeekBarState = new SeekBarState(); } private int getSpeedSpace(){ return 500; // int Space = SeekBar.getMax(); // if(Space == 0) // return 0; // else // return Space/DefaultSpeedSpace; } public void dispatchMessage(Message m){ switch(m.what){ case JoyplusMediaPlayerActivity.MSG_MEDIAINFO: if(Layout_Time.getVisibility() == View.VISIBLE){ if(mSeekBarState.mSeekBarMode != SEEKMODE.NORMAL)return; if(SEEKING && mActivity.mVideoView.hasMediaInfoChange() && mSeekBarState.mSeekBarMode == SEEKMODE.NORMAL){ SEEKING = false; mHandler.sendEmptyMessage(MSG_REQUESTHIDE); } UpdateProgress(((MediaInfo) m.obj).CreateMediaInfo()); } break; case MSG_SHOWANDKEYLONGPRESS: JoyplusonKeyLongPress((Integer) m.obj,null); break; case MSG_SHOWANDKEYDOWN: JoyplusonKeyDown((Integer) m.obj,null); break; } } public boolean JoyplusonKeyLongPress(int keyCode, KeyEvent event){ Log.d("KeyCode","Bar JoyplusonKeyLongPress keyCode="+keyCode); if(Layout_Time.getVisibility() == View.VISIBLE && (mActivity.getPlayer()!=null)){ Log.d("KeyCode","mSeekBarState--->"+mSeekBarState.toString()); SEEKING = false; switch(keyCode){ case KeyEvent.KEYCODE_DPAD_LEFT: LongPressStartTime = System.currentTimeMillis(); mSeekBarState.mSeekBarMode = SEEKMODE.LONGPRESS; if(mSeekBarState.mSpeed == SPEED.X0)mSeekBarState.mSpeed = SPEED.X1; mSeekBarState.mSeekBarType = SEEKTYPE.BACKWARD; mSeekBarState.notifySeekBarMode(); return true; case KeyEvent.KEYCODE_DPAD_RIGHT: LongPressStartTime = System.currentTimeMillis(); mSeekBarState.mSeekBarMode = SEEKMODE.LONGPRESS; if(mSeekBarState.mSpeed == SPEED.X0)mSeekBarState.mSpeed = SPEED.X1; mSeekBarState.mSeekBarType = SEEKTYPE.FORWARD; mSeekBarState.notifySeekBarMode(); return true; } } return false; } public boolean JoyplusonKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub Log.d("KeyCode","Bar JoyplusonKeyDown keyCode="+keyCode); if(Layout_Time.getVisibility() == View.VISIBLE && (mActivity.getPlayer()!=null)){ Log.d("KeyCode","mSeekBarState--->"+mSeekBarState.toString()); SEEKING = false; switch(keyCode){ case KeyEvent.KEYCODE_DPAD_LEFT: if(mSeekBarState.mSeekBarMode == SEEKMODE.LONGPRESS){ JoyplusonKeyDown(KeyEvent.KEYCODE_DPAD_CENTER,null); return true; }else{ mSeekBarState.mSeekBarMode = SEEKMODE.PRESS; if(mSeekBarState.mSeekBarType == SEEKTYPE.FORWARD){ if(mSeekBarState.mSpeed == SPEED.X1)mSeekBarState.mSeekBarType = SEEKTYPE.BACKWARD; mSeekBarState.mSpeed = SPEED.X1; }else if(mSeekBarState.mSpeed == SPEED.X3)return true; else {mSeekBarState.mSpeed = getNextSpeed(mSeekBarState.mSpeed); mSeekBarState.mSeekBarType = SEEKTYPE.BACKWARD;} mSeekBarState.notifySeekBarMode(); } return true; case KeyEvent.KEYCODE_DPAD_RIGHT: if(mSeekBarState.mSeekBarMode == SEEKMODE.LONGPRESS){ JoyplusonKeyDown(KeyEvent.KEYCODE_DPAD_CENTER,null); return true; }else{ mSeekBarState.mSeekBarMode = SEEKMODE.PRESS; if(mSeekBarState.mSeekBarType == SEEKTYPE.BACKWARD){ if(mSeekBarState.mSpeed == SPEED.X1)mSeekBarState.mSeekBarType = SEEKTYPE.FORWARD; mSeekBarState.mSpeed = SPEED.X1; }else if(mSeekBarState.mSpeed == SPEED.X3)return true; else {mSeekBarState.mSpeed = getNextSpeed(mSeekBarState.mSpeed); mSeekBarState.mSeekBarType = SEEKTYPE.FORWARD;} mSeekBarState.notifySeekBarMode(); } return true; case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: if(mSeekBarState.mSeekBarType != SEEKTYPE.NORMAL){ int progress = SeekBar.getProgress(); if(!(progress == SeekBar.getMax())){ mHandler.removeCallbacksAndMessages(null); mActivity.getPlayer().SeekVideo(progress); SEEKING = true; InitSeekBarState(); }else { InitSeekBarState(); UpdateProgress(JoyplusMediaPlayerVideoView.CurrentMediaInfo); mHandler.removeCallbacksAndMessages(null); mHandler.sendEmptyMessage(MSG_REQUESTSHOW); } return true; } return false; case KeyEvent.KEYCODE_BACK: case 111://the keycode was be change to 111 ,but don't know where change if(mSeekBarState.mSeekBarType != SEEKTYPE.NORMAL){ InitSeekBarState(); mSeekBarState.notifySeekBarMode(); UpdateProgress(JoyplusMediaPlayerVideoView.CurrentMediaInfo); mHandler.removeCallbacksAndMessages(null); mHandler.sendEmptyMessage(MSG_REQUESTSHOW); return true; } case KeyEvent.KEYCODE_MENU: if(mSeekBarState.mSpeed!=SPEED.X0){ return true; } } } return false; } public VideoViewController(){ InitResource(); } public void setVisible(boolean Visiblility){ if(Debug)Log.d(TAG,"setVisibility("+Visiblility+")"); if(!Visiblility && Layout_Time.getVisibility()==View.VISIBLE) Layout_Time.startAnimation(JoyplusMediaPlayerActivity.mAlphaDispear); if(!Visiblility && Layout_seek.getVisibility()==View.VISIBLE) Layout_seek.startAnimation(JoyplusMediaPlayerActivity.mAlphaDispear); Layout_Time.setVisibility(Visiblility?View.VISIBLE:View.GONE); Layout_seek.setVisibility(Visiblility?View.VISIBLE:View.GONE); if(Visiblility && mSeekBarState.mSeekBarType == SEEKTYPE.NORMAL) UpdateProgress(JoyplusMediaPlayerVideoView.CurrentMediaInfo); if(!Visiblility && mSeekBarState!=null)InitSeekBarState(); } private void InitResource(){ if(Debug)Log.d(TAG,"VideoViewController InitResource()"); Layout_Time = (RelativeLayout)mActivity.findViewById(R.id.mediacontroller_bottombar); CurrentTimeView = (TextView) mActivity.findViewById(R.id.mediacontroller_bottombar_current_time); TotalTimeView = (TextView) mActivity.findViewById(R.id.mediacontroller_bottombar_total_time); SeekBar = (SeekBar) mActivity.findViewById(R.id.mediacontroller_bottombar_seekbar); Layout_seek = (RelativeLayout)mActivity.findViewById(R.id.mediacontroller_bottombar_seek); Layout_Speed = (RelativeLayout)mActivity.findViewById(R.id.mediacontroller_bottombar_time_fast); SpeedView = (TextView) mActivity.findViewById(R.id.mediacontroller_bottombar_time_fasttext); SeekBar.setEnabled(false); } public void UpdateProgress(MediaInfo info){ if(Layout_seek.getVisibility() != View.VISIBLE)return; if(mSeekBarState.mSeekBarType == SEEKTYPE.BACKWARD || mSeekBarState.mSeekBarType == SEEKTYPE.FORWARD){ Layout_Speed.setVisibility(View.VISIBLE); if(mSeekBarState.mSeekBarType == SEEKTYPE.FORWARD) Layout_Speed.setBackgroundResource(R.drawable.play_time_right); else if(mSeekBarState.mSeekBarType == SEEKTYPE.BACKWARD) Layout_Speed.setBackgroundResource(R.drawable.play_time_left); CurrentTimeView.setText(getTimeString(SeekBar.getProgress())); SpeedView.setText(mSeekBarState.mSpeed.toString()); updateSeekBar(null); return; } if(mSeekBarState.mSeekBarType != SEEKTYPE.NORMAL)return; Layout_Speed.setVisibility(View.GONE); if(SEEKING)return; if(info != null){ if(info.getState() == STATE.MEDIA_STATE_PLAYING ||info.getState() == STATE.MEDIA_STATE_INITED){ CurrentTimeView.setText(getTimeString((int)info.getCurrentTime())); if(info.getTotleTime()<=0){ TotalTimeView.setText("--:--"); }else{ TotalTimeView.setText(getTimeString((int)info.getTotleTime())); } updateSeekBar(info); } }else{ CurrentTimeView.setText(getTimeString(0)); TotalTimeView.setText("--:--"); SeekBar.setMax(100); SeekBar.setProgress(0); updateSeekBar(null); } } private void updateSeekBar(MediaInfo info){ if (info != null && (info.getState().toInt()>=STATE.MEDIA_STATE_INITED.toInt()) && mSeekBarState.mSeekBarType == SEEKTYPE.NORMAL){ SeekBar.setMax((int) info.getTotleTime()); SeekBar.setProgress((int) info.getCurrentTime()); }else if(info == null && mSeekBarState.mSeekBarType == SEEKTYPE.NORMAL){ SeekBar.setMax(100); SeekBar.setProgress(0); } UpdateSeekTime(); } private void UpdateSeekTime(){ RelativeLayout.LayoutParams parms = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); parms.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); if (SeekBar.getProgress()>0){ double mLeft = (double) SeekBar.getProgress() / SeekBar.getMax()* (SeekBar.getMeasuredWidth() - Utils.getStandardValue(mActivity, seekBarWidthOffset)) + Utils.getStandardValue(mActivity, OFFSET); parms.leftMargin = (int) mLeft; }else{ parms.leftMargin = Utils.getStandardValue(mActivity, OFFSET); } parms.bottomMargin = Utils.getStandardValue(mActivity,(20 + 10)); Layout_Time.setLayoutParams(parms); } private String getTimeString(int time){ if(time<0)time = 0; StringBuffer sb = new StringBuffer(); time/=1000; sb.append(getString(time/(60*60))); sb.append(":"); time%=(60*60); sb.append(getString(time/60)); sb.append(":"); time%=60; sb.append(getString(time)); return sb.toString(); } private String getString(int time){ StringBuffer sb = new StringBuffer(); sb.append(time/10).append(time%10); return sb.toString(); } } @Override public boolean JoyplusdispatchMessage(Message msg) { // TODO Auto-generated method stub mHandler.dispatchMessage(msg); return false; } @Override public boolean JoyplusonKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(mBottomBar.Layout_Time.getVisibility()== View.VISIBLE){ if(mBottomBar.JoyplusonKeyDown(keyCode, event)){ return true; } } return false; } @Override public void JoyplussetVisible(boolean visible,int layout) { // TODO Auto-generated method stub if(Debug)Log.d(TAG,"setVisible("+visible+")"); setVisible(visible,0); } @Override public int JoyplusgetLayout() { // TODO Auto-generated method stub return LAYOUT_BAR; } @Override public boolean JoyplusonKeyLongPress(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(mBottomBar.Layout_Time.getVisibility()== View.VISIBLE){ if(mBottomBar.JoyplusonKeyLongPress(keyCode, event)){ return true; } } return false; } }