package tv.danmaku.android.support;
import java.lang.ref.WeakReference;
import tv.danmaku.android.BuildHelper;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Handler;
import android.view.View;
@TargetApi(11)
public class SystemUINavHider_HoneyComb extends SystemUINavHider {
private WeakReference<Activity> mWeakActivity;
private boolean mEnableHide;
private OnSystemUiVisibilityChangeListener mOnSystemUiVisibilityChangeListener;
private Handler mHandler = new Handler();
private boolean mShouldHide;
private boolean mIsReadyToHide;
public SystemUINavHider_HoneyComb(Activity activity) {
super(activity);
mWeakActivity = new WeakReference<Activity>(activity);
}
@Override
public void setEnableHide(boolean enableHide) {
mEnableHide = enableHide;
}
@Override
public boolean shouldHide() {
return mShouldHide;
}
@Override
public void show() {
mShouldHide = false;
if (!mEnableHide)
return;
Activity activity = mWeakActivity.get();
if (activity == null)
return;
mHandler.removeCallbacks(mDelayedHide);
mHandler.removeCallbacks(mReadyToHide);
mHandler.postDelayed(mReadyToHide, 5000);
SystemUIHelper.showNavigation(activity);
}
@Override
public void hide() {
mShouldHide = true;
if (!mEnableHide)
return;
// do not need activity here, but check if activity is alive
Activity activity = mWeakActivity.get();
if (activity == null)
return;
mHandler.removeCallbacks(mDelayedHide);
mHandler.postDelayed(mDelayedHide, 500);
}
@Override
public void forceHideImmediately() {
mShouldHide = true;
mIsReadyToHide = true;
doHide();
}
private void doHide() {
if (!mShouldHide)
return;
if (!mEnableHide)
return;
Activity activity = mWeakActivity.get();
if (activity == null)
return;
if (mIsReadyToHide) {
mHandler.removeCallbacks(mDelayedHide);
SystemUIHelper.hideNavigation(activity);
} else {
mHandler.removeCallbacks(mDelayedHide);
mHandler.postDelayed(mDelayedHide, 1000);
}
}
private Runnable mDelayedHide = new Runnable() {
@Override
public void run() {
doHide();
}
};
private Runnable mReadyToHide = new Runnable() {
@Override
public void run() {
if (!mShouldHide)
return;
mIsReadyToHide = true;
}
};
@Override
public void setOnSystemUiVisibilityChangeListener(
OnSystemUiVisibilityChangeListener listener) {
if (BuildHelper.isApi14_IceCreamSandwichOrLater()) {
Activity activity = mWeakActivity.get();
if (activity == null)
return;
mOnSystemUiVisibilityChangeListener = listener;
SystemUIHelper.setOnSystemUiVisibilityChangeListener(activity,
mPrivateListener);
}
}
private View.OnSystemUiVisibilityChangeListener mPrivateListener = new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (BuildHelper.isApi11_HoneyCombOrLater()) {
if (mEnableHide && mOnSystemUiVisibilityChangeListener != null) {
mOnSystemUiVisibilityChangeListener
.onSystemUiVisibilityChange(visibility);
}
}
}
};
}