返回键关闭阅读快速设置面板,若要隐藏 navigation bar 则延迟全屏
This commit is contained in:
1 parent
9f94a9142a
commit
a76f8a56a7
4 files changed
+126
-12
No files matched your search
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user