返回键关闭阅读快速设置面板,若要隐藏 navigation bar 则延迟全屏

This commit is contained in:
seven332 committed 2014-12-19 17:52:46 +08:00
1 parent 9f94a9142a
commit a76f8a56a7
4 files changed
+126 -12

No files matched your search

+32 -1
View File
@@ -35,6 +35,7 @@ import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import com.hippo.ehviewer.AppHandler;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.app.DirSelectDialog;
import com.hippo.ehviewer.app.MaterialAlertDialog;
@@ -109,6 +110,20 @@ public class GalleryActivity extends AbsActivity
private Dialog mSendDialog;
private final Runnable mFullScreenTask = new Runnable() {
@Override public void run() {
mFullScreenHelper.setFullScreen(true);
}
};
private void startFullScreenTask() {
AppHandler.getInstance().postDelayed(mFullScreenTask, 2000);
}
private void cancelFullScreenTask() {
AppHandler.getInstance().removeCallbacks(mFullScreenTask);
}
@Override
public void onCopyOver(boolean success, File src, File dst) {
MaterialToast.showToast(success ? String.format(getString(R.string.save_successful), dst.getPath())
@@ -371,6 +386,17 @@ public class GalleryActivity extends AbsActivity
mGalleryView.free();
}
@Override
public void onBackPressed() {
if (mConfigSliding.isInHideAnimate())
return;
if (mConfigSliding.isShowing())
mConfigSliding.toBaseLevel();
else
finish();
}
@Override
public void onClick(View v) {
if (v == mRefresh) {
@@ -391,6 +417,8 @@ public class GalleryActivity extends AbsActivity
@Override
public void onTapCenter() {
if (!mConfigSliding.isShowing()) {
if (mFullScreenHelper.willHideNavBar())
cancelFullScreenTask();
mFullScreenHelper.setFullScreen(false);
boolean firstTime = Config.getBoolean(KEY_FIRST_READ_CONFIG_V1, DEFAULT_FIRST_READ_CONFIG_V1);
@@ -461,7 +489,10 @@ public class GalleryActivity extends AbsActivity
@Override
public void onChildHide() {
mFullScreenHelper.setFullScreen(true);
if (mFullScreenHelper.willHideNavBar())
startFullScreenTask();
else
mFullScreenHelper.setFullScreen(true);
}
@Override
@@ -20,6 +20,7 @@ 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;
@@ -57,8 +58,12 @@ public final class FullScreenHelper implements View.OnSystemUiVisibilityChangeLi
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,
@@ -69,19 +74,39 @@ public final class FullScreenHelper implements View.OnSystemUiVisibilityChangeLi
public void onFullScreenBroken(boolean fullScreen);
}
public FullScreenHelper(Activity activity) {
mFullScreen = false;
mActivity = activity;
mWindow = mActivity.getWindow();
mDecorView = mWindow.getDecorView();
mDecorView.setOnSystemUiVisibilityChangeListener(this);
String mainKey = Utils.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 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN &&
Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
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
@@ -102,25 +127,25 @@ public final class FullScreenHelper implements View.OnSystemUiVisibilityChangeLi
public void setFullScreen(boolean fullScreen) {
mFullScreen = fullScreen;
if (fullScreen) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
if (TEST_SDK < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// Empty
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
} else if (TEST_SDK < Build.VERSION_CODES.JELLY_BEAN) {
mWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
} else if (TEST_SDK < Build.VERSION_CODES.KITKAT) {
mDecorView.setSystemUiVisibility(FULL_SCREEN_JELLY_BEAN);
} else {
mDecorView.setSystemUiVisibility(FULL_SCREEN_KITKAT);
}
} else {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
if (TEST_SDK < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// Empty
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
} else if (TEST_SDK < Build.VERSION_CODES.JELLY_BEAN) {
mWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
} else if (TEST_SDK < Build.VERSION_CODES.KITKAT) {
mDecorView.setSystemUiVisibility(NOT_FULL_SCREEN_JELLY_BEAN);
} else {
+50
View File
@@ -25,6 +25,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collection;
@@ -713,4 +714,53 @@ public final class Utils {
}
return type;
}
/**
* If get error return "";
*
* @param key
* @return
*/
public static String getSystemProperties(String key) {
try {
Class c = Class.forName("android.os.SystemProperties");
Method m = c.getDeclaredMethod("get", String.class);
m.setAccessible(true);
return (String) m.invoke(null, key);
} catch (Throwable e) {
return "";
}
}
/*
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
sNavBarOverride =
} catch (Throwable e) {
sNavBarOverride = null;
}
}
public static boolean hasNavBar(Context context) {
Resources res = context.getResources();
int resourceId = res.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android");
if (resourceId != 0) {
boolean hasNav = res.getBoolean(resourceId);
// check override flag (see static block)
if ("1".equals(sNavBarOverride)) {
hasNav = false;
} else if ("0".equals(sNavBarOverride)) {
hasNav = true;
}
return hasNav;
} else { // fallback
return !ViewConfiguration.get(context).hasPermanentMenuKey();
}
}
*/
}
@@ -103,6 +103,8 @@ public class SlidingLayout extends ViewGroup {
private int m5Top;
private int mFullScreenTop;
private boolean mInHideAnimate = false;
private OnChildHideListener mOnChildHideListener;
private static final ZInterpolator ZINTERPOLATOR = new ZInterpolator();
@@ -142,7 +144,7 @@ public class SlidingLayout extends ViewGroup {
mToBaseLevelAnimate.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
// Empty
mInHideAnimate = true;
}
@Override
@@ -153,11 +155,13 @@ public class SlidingLayout extends ViewGroup {
if (mOnChildHideListener != null)
mOnChildHideListener.onChildHide();
mInHideAnimate = false;
}
@Override
public void onAnimationCancel(Animator animation) {
// Empty
mInHideAnimate = false;
}
@Override
@@ -476,6 +480,10 @@ public class SlidingLayout extends ViewGroup {
return mChild.getVisibility() == View.VISIBLE;
}
public boolean isInHideAnimate() {
return mInHideAnimate;
}
public void toReservedLevel(boolean withShake) {
cancelAnimator();
// Show child