1 package js.kbars; 2 3 import android.content.Context; 4 import android.media.MediaPlayer; 5 import android.media.MediaPlayer.OnPreparedListener; 6 import android.net.Uri; 7 import android.util.Log; 8 import android.view.View; 9 import android.view.View.OnClickListener; 10 import android.view.View.OnSystemUiVisibilityChangeListener; 11 import android.widget.Button; 12 import android.widget.FrameLayout; 13 import android.widget.FrameLayout.LayoutParams; 14 import android.widget.VideoView; 15 16 public final class MediaModeToggleButton extends Button { 17 private static final int MEDIA_FLAGS = 1798; 18 private final FrameLayout mFrame; 19 private boolean mMediaMode; 20 private VideoView mVideo; 21 22 public MediaModeToggleButton(Context context, FrameLayout frame) { 23 super(context); 24 this.mFrame = frame; 25 setText("Enter media mode"); 26 setOnClickListener(new OnClickListener() { 27 public void onClick(View v) { 28 MediaModeToggleButton.this.setSystemUiVisibility(MediaModeToggleButton.MEDIA_FLAGS); 29 } 30 }); 31 setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() { 32 public void onSystemUiVisibilityChange(int vis) { 33 MediaModeToggleButton.this.updateSysUi(vis); 34 } 35 }); 36 initVideo(); 37 updateSysUi(0); 38 } 39 40 private void initVideo() { 41 this.mVideo = new VideoView(getContext()); 42 this.mVideo.setVisibility(8); 43 LayoutParams videoLP = new LayoutParams(-1, -1); 44 videoLP.gravity = 17; 45 this.mFrame.addView(this.mVideo, videoLP); 46 this.mVideo.setOnPreparedListener(new OnPreparedListener() { 47 public void onPrepared(MediaPlayer mp) { 48 mp.setLooping(true); 49 } 50 }); 51 this.mVideo.setVideoURI(Uri.parse("android.resource://" + getContext().getPackageName() + "/" + R.raw.clipcanvas)); 52 this.mVideo.setBackgroundColor(0); 53 } 54 55 private void updateSysUi(int vis) { 56 boolean requested; 57 boolean hideStatus; 58 boolean hideNav; 59 boolean hideSomething; 60 if (getSystemUiVisibility() == MEDIA_FLAGS) { 61 requested = true; 62 } else { 63 requested = false; 64 } 65 if ((vis & 4) != 0) { 66 hideStatus = true; 67 } else { 68 hideStatus = false; 69 } 70 if ((vis & 2) != 0) { 71 hideNav = true; 72 } else { 73 hideNav = false; 74 } 75 if (hideStatus || hideNav) { 76 hideSomething = true; 77 } else { 78 hideSomething = false; 79 } 80 Log.d(KBarsActivity.TAG, String.format("vis change hideStatus=%s hideNav=%s hideSomething=%s mMediaMode=%s", new Object[]{Boolean.valueOf(hideStatus), Boolean.valueOf(hideNav), Boolean.valueOf(hideSomething), Boolean.valueOf(this.mMediaMode)})); 81 this.mMediaMode = false; 82 if (requested && hideStatus && hideNav) { 83 this.mMediaMode = true; 84 } else { 85 setSystemUiVisibility(KBarsActivity.BASE_FLAGS); 86 } 87 if (this.mMediaMode) { 88 this.mVideo.setVisibility(0); 89 this.mVideo.start(); 90 return; 91 } 92 this.mVideo.setVisibility(8); 93 this.mVideo.stopPlayback(); 94 } 95 } 96