diff --git a/app/src/main/java/eu/faircode/email/ActivityBase.java b/app/src/main/java/eu/faircode/email/ActivityBase.java index 8789cd258e..6424f63f3d 100644 --- a/app/src/main/java/eu/faircode/email/ActivityBase.java +++ b/app/src/main/java/eu/faircode/email/ActivityBase.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ import android.Manifest; +import android.animation.Animator; import android.animation.ValueAnimator; import android.app.ActivityManager; import android.content.ComponentName; @@ -81,6 +82,8 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc private boolean contacts; private List keyPressedListeners = new ArrayList<>(); + private static final long ACTIONBAR_ANIMATION_DURATION = 250L; + @Override protected void attachBaseContext(Context base) { originalContext = base; @@ -843,43 +846,69 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc public void showActionBar(boolean show) { ViewGroup abv = findViewById(R.id.action_bar); - if (abv == null) { - ActionBar ab = getSupportActionBar(); - if (ab == null) - return; - if (show) - ab.show(); - else - ab.hide(); - } else { - if (abShowing == show) - return; - abShowing = show; - - int height = Helper.getActionBarHeight(this); - int current = abv.getLayoutParams().height; - int target = (show ? height : 0); - if (abAnimator == null) { - abAnimator = ValueAnimator.ofInt(current, target); - abAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator anim) { - try { - abv.getLayoutParams().height = (Integer) anim.getAnimatedValue(); - abv.requestLayout(); - } catch (Throwable ex) { - Log.e(ex); - } + if (abv == null) + return; + + if (abShowing == show) + return; + abShowing = show; + + int height = Helper.getActionBarHeight(this); + int current = abv.getLayoutParams().height; + int target = (show ? height : 0); + Log.i("ActionBar height=" + current + "..." + target); + + + if (abAnimator != null) + abAnimator.cancel(); + + abAnimator = ValueAnimator.ofInt(current, target); + + abAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator anim) { + try { + Integer v = (Integer) anim.getAnimatedValue(); + Log.i("ActionBar height=" + v); + ViewGroup.LayoutParams lparam = abv.getLayoutParams(); + if (lparam.height == v) + Log.i("ActionBar ---"); + else { + lparam.height = v; + abv.requestLayout(); } - }); - } else { - abAnimator.cancel(); - abAnimator.setIntValues(current, target); + } catch (Throwable ex) { + Log.e(ex); + } } + }); - abAnimator.setDuration(250L * Math.abs(current - target) / height); - abAnimator.start(); - } + abAnimator.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(@NonNull Animator animation) { + Log.i("ActionBar start"); + } + + @Override + public void onAnimationEnd(@NonNull Animator animation) { + Log.i("ActionBar end"); + abAnimator = null; + } + + @Override + public void onAnimationCancel(@NonNull Animator animation) { + Log.i("ActionBar cancel"); + abAnimator = null; + } + + @Override + public void onAnimationRepeat(@NonNull Animator animation) { + Log.i("ActionBar repeat"); + } + }); + + abAnimator.setDuration(ACTIONBAR_ANIMATION_DURATION * Math.abs(current - target) / height); + abAnimator.start(); } Handler getMainHandler() {