Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc0f4f05 authored by Jim Miller's avatar Jim Miller Committed by Android (Google) Code Review
Browse files

Merge "Fix 2584857: Reset grabbed state when SlidingTab visibility changes"

parents c6b9311a 92c1571f
Loading
Loading
Loading
Loading
+29 −15
Original line number Original line Diff line number Diff line
@@ -17,10 +17,8 @@
package com.android.internal.widget;
package com.android.internal.widget;


import android.content.Context;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.Vibrator;
import android.os.Vibrator;
@@ -38,6 +36,7 @@ import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TextView;
import android.widget.ImageView.ScaleType;
import android.widget.ImageView.ScaleType;

import com.android.internal.R;
import com.android.internal.R;


/**
/**
@@ -69,21 +68,21 @@ public class SlidingTab extends ViewGroup {
    private int mGrabbedState = OnTriggerListener.NO_HANDLE;
    private int mGrabbedState = OnTriggerListener.NO_HANDLE;
    private boolean mTriggered = false;
    private boolean mTriggered = false;
    private Vibrator mVibrator;
    private Vibrator mVibrator;
    private float mDensity; // used to scale dimensions for bitmaps.
    private final float mDensity; // used to scale dimensions for bitmaps.


    /**
    /**
     * Either {@link #HORIZONTAL} or {@link #VERTICAL}.
     * Either {@link #HORIZONTAL} or {@link #VERTICAL}.
     */
     */
    private int mOrientation;
    private final int mOrientation;


    private Slider mLeftSlider;
    private final Slider mLeftSlider;
    private Slider mRightSlider;
    private final Slider mRightSlider;
    private Slider mCurrentSlider;
    private Slider mCurrentSlider;
    private boolean mTracking;
    private boolean mTracking;
    private float mThreshold;
    private float mThreshold;
    private Slider mOtherSlider;
    private Slider mOtherSlider;
    private boolean mAnimating;
    private boolean mAnimating;
    private Rect mTmpRect;
    private final Rect mTmpRect;


    /**
    /**
     * Listener used to reset the view when the current animation completes.
     * Listener used to reset the view when the current animation completes.
@@ -608,6 +607,15 @@ public class SlidingTab extends ViewGroup {


                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_CANCEL:
                    cancelGrab();
                    break;
            }
        }

        return mTracking || super.onTouchEvent(event);
    }

    private void cancelGrab() {
        mTracking = false;
        mTracking = false;
        mTriggered = false;
        mTriggered = false;
        mOtherSlider.show(true);
        mOtherSlider.show(true);
@@ -616,11 +624,6 @@ public class SlidingTab extends ViewGroup {
        mCurrentSlider = null;
        mCurrentSlider = null;
        mOtherSlider = null;
        mOtherSlider = null;
        setGrabbedState(OnTriggerListener.NO_HANDLE);
        setGrabbedState(OnTriggerListener.NO_HANDLE);
                    break;
            }
        }

        return mTracking || super.onTouchEvent(event);
    }
    }


    void startAnimating(final boolean holdAfter) {
    void startAnimating(final boolean holdAfter) {
@@ -832,6 +835,17 @@ public class SlidingTab extends ViewGroup {
        }
        }
    }
    }


    @Override
    protected void onVisibilityChanged(View changedView, int visibility) {
        super.onVisibilityChanged(changedView, visibility);
        // When visibility changes and the user has a tab selected, unselect it and
        // make sure their callback gets called.
        if (changedView == this && visibility != VISIBLE
                && mGrabbedState != OnTriggerListener.NO_HANDLE) {
            cancelGrab();
        }
    }

    /**
    /**
     * Sets the current grabbed state, and dispatches a grabbed state change
     * Sets the current grabbed state, and dispatches a grabbed state change
     * event to our listener.
     * event to our listener.