1 package js.kbars; 2 3 import android.util.Log; 4 import android.view.View; 5 import android.view.View.OnClickListener; 6 import android.view.View.OnSystemUiVisibilityChangeListener; 7 import android.widget.Button; 8 9 public final class ImmersiveModeToggleButton extends Button { 10 private final KBarsActivity mActivity; 11 private final String mCaption; 12 private final int mImmersiveFlags; 13 private boolean mImmersiveMode; 14 15 public ImmersiveModeToggleButton(KBarsActivity activity, String caption, int immersiveFlags) { 16 super(activity); 17 this.mActivity = activity; 18 this.mCaption = caption; 19 this.mImmersiveFlags = immersiveFlags; 20 setOnClickListener(new OnClickListener() { 21 public void onClick(View v) { 22 ImmersiveModeToggleButton.this.toggleImmersiveMode("clicked"); 23 } 24 }); 25 updateImmersiveModeButton(); 26 setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() { 27 public void onSystemUiVisibilityChange(int visibility) { 28 ImmersiveModeToggleButton.this.onSysuiChanged(visibility); 29 } 30 }); 31 } 32 33 private void toggleImmersiveMode(String reason) { 34 boolean z; 35 boolean z2 = false; 36 Log.d(KBarsActivity.TAG, "toggleImmersiveMode reason=" + reason); 37 if (this.mImmersiveMode) { 38 z = false; 39 } else { 40 z = true; 41 } 42 this.mImmersiveMode = z; 43 updateImmersiveModeButton(); 44 KBarsActivity kBarsActivity = this.mActivity; 45 if (!this.mImmersiveMode) { 46 z2 = true; 47 } 48 kBarsActivity.setSoloButton(z2, this, true); 49 } 50 51 private void updateImmersiveModeButton() { 52 Log.d(KBarsActivity.TAG, "updateButtons mImmersiveMode=" + this.mImmersiveMode); 53 setText(this.mImmersiveMode ? "Exit " + this.mCaption + " mode" : "Enter " + this.mCaption + " mode"); 54 setSystemUiVisibility(this.mImmersiveMode ? this.mImmersiveFlags : KBarsActivity.BASE_FLAGS); 55 } 56 57 private void onSysuiChanged(int vis) { 58 boolean hideStatus; 59 boolean hideSomething = false; 60 Log.d(KBarsActivity.TAG, "sysui changed: " + Integer.toHexString(vis)); 61 if ((vis & 4) != 0) { 62 hideStatus = true; 63 } else { 64 hideStatus = false; 65 } 66 boolean hideNav; 67 if ((vis & 2) != 0) { 68 hideNav = true; 69 } else { 70 hideNav = false; 71 } 72 if (hideStatus || hideNav) { 73 hideSomething = true; 74 } 75 if (this.mImmersiveMode && !hideSomething) { 76 toggleImmersiveMode("sysui_changed"); 77 } 78 } 79 } 80