package moe.feng.nhentai.util; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Build; import android.view.View; import android.view.ViewConfiguration; import android.view.Window; import android.view.WindowManager; @SuppressLint("InlinedApi") public final class FullScreenHelper implements View.OnSystemUiVisibilityChangeListener { private static final String TAG = FullScreenHelper.class.getSimpleName(); private final int NOT_FULL_SCREEN_JELLY_BEAN = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; private final int FULL_SCREEN_JELLY_BEAN = NOT_FULL_SCREEN_JELLY_BEAN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN; private final int FULL_SCREEN_FLAG_JELLY_BEAN = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN; private final int NOT_FULL_SCREEN_KITKAT = NOT_FULL_SCREEN_JELLY_BEAN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; private final int FULL_SCREEN_KITKAT = NOT_FULL_SCREEN_KITKAT | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; private boolean mFullScreen; private final Activity mActivity; private final Window mWindow; private final View mDecorView; private boolean mHasNavBar; private OnFullScreenBrokenListener mListener; private final int TEST_SDK = Build.VERSION.SDK_INT; public interface OnFullScreenBrokenListener { /** * FullScreen state should be fullScreen or not, * but user or system broke it * * @param fullScreen support to be */ public void onFullScreenBroken(boolean fullScreen); } public FullScreenHelper(Activity activity) { mFullScreen = false; mActivity = activity; mWindow = mActivity.getWindow(); mDecorView = mWindow.getDecorView(); mDecorView.setOnSystemUiVisibilityChangeListener(this); String mainKey = Utility.getSystemProperties("qemu.hw.mainkeys"); int resourceId = activity.getResources().getIdentifier("config_showNavigationBar", "bool", "android"); if (resourceId != 0) { mHasNavBar = activity.getResources().getBoolean(resourceId); // check override flag (see static block) if ("1".equals(mainKey)) { mHasNavBar = false; } else if ("0".equals(mainKey)) { mHasNavBar = true; } } else { mHasNavBar = !ViewConfiguration.get(activity).hasPermanentMenuKey(); } } public boolean willHideNavBar() { if (TEST_SDK >= Build.VERSION_CODES.KITKAT && mHasNavBar) return true; else return false; } @Override public void onSystemUiVisibilityChange(int visibility) { if (TEST_SDK >= Build.VERSION_CODES.JELLY_BEAN && TEST_SDK < Build.VERSION_CODES.KITKAT) { if ((mFullScreen && visibility != FULL_SCREEN_FLAG_JELLY_BEAN) || (!mFullScreen && visibility != 0)) { // User or system change visibility if (mListener != null) mListener.onFullScreenBroken(mFullScreen); } } } public void setOnFullScreenBrokenListener(OnFullScreenBrokenListener l) { mListener = l; } public boolean getFullScreen() { return mFullScreen; } public void setFullScreen(boolean fullScreen) { mFullScreen = fullScreen; if (fullScreen) { if (TEST_SDK < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { // Empty } else if (TEST_SDK < Build.VERSION_CODES.JELLY_BEAN) { mWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } else if (TEST_SDK < Build.VERSION_CODES.KITKAT) { mDecorView.setSystemUiVisibility(FULL_SCREEN_JELLY_BEAN); } else { mDecorView.setSystemUiVisibility(FULL_SCREEN_KITKAT); } } else { if (TEST_SDK < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { // Empty } else if (TEST_SDK < Build.VERSION_CODES.JELLY_BEAN) { mWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else if (TEST_SDK < Build.VERSION_CODES.KITKAT) { mDecorView.setSystemUiVisibility(NOT_FULL_SCREEN_JELLY_BEAN); } else { mDecorView.setSystemUiVisibility(NOT_FULL_SCREEN_KITKAT); } } } }