package com.ichi2.compat;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.content.SharedPreferences;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.ichi2.anki.AbstractFlashcardViewer;
import com.ichi2.anki.AnkiActivity;
import com.ichi2.anki.AnkiDroidApp;
import com.ichi2.anki.R;
import com.ichi2.themes.Themes;
/** Implementation of {@link Compat} for SDK level 19 */
@TargetApi(19)
public class CompatV19 extends CompatV17 implements Compat {
private static final int ANIMATION_DURATION = 200;
private static final float TRANSPARENCY = 0.90f;
@Override
public void setFullScreen(final AbstractFlashcardViewer a) {
// Set appropriate flags to enable Sticky Immersive mode.
a.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
// Show / hide the Action bar together with the status bar
SharedPreferences prefs = AnkiDroidApp.getSharedPrefs(a);
final int fullscreenMode = Integer.parseInt(prefs.getString("fullscreenMode", "0"));
CompatHelper.getCompat().setStatusBarColor(a.getWindow(), Themes.getColorFromAttr(a, R.attr.colorPrimaryDark));
View decorView = a.getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int flags) {
final Toolbar toolbar = (Toolbar) a.findViewById(R.id.toolbar);
final LinearLayout answerButtons = (LinearLayout) a.findViewById(R.id.answer_options_layout);
final RelativeLayout topbar = (RelativeLayout) a.findViewById(R.id.top_bar);
if (toolbar == null || topbar == null || answerButtons == null) {
return;
}
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
boolean visible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
if (visible) {
showViewWithAnimation(toolbar);
if (fullscreenMode >= FULLSCREEN_ALL_GONE) {
showViewWithAnimation(topbar);
showViewWithAnimation(answerButtons);
}
} else {
hideViewWithAnimation(toolbar);
if (fullscreenMode >= FULLSCREEN_ALL_GONE) {
hideViewWithAnimation(topbar);
hideViewWithAnimation(answerButtons);
}
}
}
});
}
private void showViewWithAnimation(final View view) {
view.setAlpha(0.0f);
view.setVisibility(View.VISIBLE);
view.animate().alpha(TRANSPARENCY).setDuration(ANIMATION_DURATION).setListener(null);
}
private void hideViewWithAnimation(final View view) {
view.animate()
.alpha(0f)
.setDuration(ANIMATION_DURATION)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(View.GONE);
}
});
}
@Override
public boolean isImmersiveSystemUiVisible(AnkiActivity activity) {
return (activity.getWindow().getDecorView().getSystemUiVisibility() & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
}
}