package org.ebookdroid.ui.viewer.viewers; import org.ebookdroid.common.settings.AppSettings; import android.app.Activity; import android.os.Handler; import android.view.View; import java.util.concurrent.atomic.AtomicBoolean; import org.emdev.common.android.AndroidVersion; import org.emdev.ui.uimanager.IUIManager; public class FullScreenCallback implements Runnable { private static final int TIMEOUT = 2000; protected final AtomicBoolean added = new AtomicBoolean(); protected final Activity activity; protected final View view; protected volatile long time; private FullScreenCallback(final Activity activity, final View view) { this.activity = activity; this.view = view; } public static FullScreenCallback get(final Activity activity, final View view) { return AndroidVersion.is4x ? /* Creates full-screen callback devices with Android 4.x */ new FullScreenCallback(activity, view) : null; } @Override public void run() { if (!AppSettings.current().fullScreen) { // System.out.println("fullScreenCallback: full-screen mode off"); added.set(false); return; } final long now = System.currentTimeMillis(); // Check if checkFullScreenMode() was called if (added.compareAndSet(false, true)) { // Only adds delayed message this.time = System.currentTimeMillis(); // System.out.println("fullScreenCallback: postDelayed(): " + TIMEOUT); final Handler handler = view != null ? view.getHandler() : null; if (handler != null) { handler.postDelayed(this, TIMEOUT); } return; } // Process delayed message final long expected = time + TIMEOUT; if (expected <= now) { // System.out.println("fullScreenCallback: setFullScreenMode()"); if (view != null) { IUIManager.instance.setFullScreenMode(activity, view, true); } added.set(false); return; } final Handler handler = view != null ? view.getHandler() : null; if (handler != null) { added.set(true); final long delta = expected - now; // System.out.println("fullScreenCallback: postDelayed(): " + delta); handler.postDelayed(this, delta); return; } added.set(false); } public void checkFullScreenMode() { // System.out.println("fullScreenCallback: checkFullScreenMode()"); this.time = System.currentTimeMillis(); if (!added.get()) { if (view != null) { view.post(this); } } } }