package org.emdev.ui.uimanager; import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; import android.annotation.TargetApi; import android.app.Activity; import android.content.ComponentName; import android.content.res.Configuration; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.Window; import android.widget.ProgressBar; import org.emdev.common.android.AndroidVersion; import java.util.HashMap; import java.util.Map; @TargetApi(14) public class UIManager40x implements IUIManager { protected static final int STANDARD_SYS_UI_FLAGS = /**/ View.SYSTEM_UI_FLAG_LOW_PROFILE | /**/ View.SYSTEM_UI_FLAG_FULLSCREEN | /**/ View.SYSTEM_UI_FLAG_LAYOUT_STABLE; protected static final Map<ComponentName, Data> data = new HashMap<ComponentName, Data>() { /** * Serial version UID. */ private static final long serialVersionUID = 742779545837272718L; @Override public Data get(final Object key) { Data existing = super.get(key); if (existing == null) { existing = new Data(); put((ComponentName) key, existing); } return existing; } }; @Override public void setFullScreenMode(final Activity activity, final View view, final boolean fullScreen) { data.get(activity.getComponentName()).statusBarHidden = fullScreen; final Window w = activity.getWindow(); if (!isTabletUi(activity)) { if (fullScreen) { w.setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); } else { w.clearFlags(FLAG_FULLSCREEN); } } if (view != null) { if (fullScreen) { view.setSystemUiVisibility(getHideSysUIFlags(activity)); } else { view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); } } } protected int getHideSysUIFlags(final Activity activity) { return STANDARD_SYS_UI_FLAGS; } @Override public void onMenuOpened(final Activity activity) { if (!isTabletUi(activity)) { if (data.get(activity.getComponentName()).statusBarHidden) { activity.getWindow().clearFlags(FLAG_FULLSCREEN); } } } @Override public void onMenuClosed(final Activity activity) { if (!isTabletUi(activity)) { if (data.get(activity.getComponentName()).statusBarHidden) { activity.getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN); } } } @Override public void onPause(final Activity activity) { } @Override public void onResume(final Activity activity) { } @Override public void onDestroy(final Activity activity) { } @Override public boolean isTabletUi(final Activity activity) { final Configuration c = activity.getResources().getConfiguration(); return 0 != (Configuration.SCREENLAYOUT_SIZE_XLARGE & c.screenLayout); } private static class Data { boolean statusBarHidden = false; } }