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

Commit c2733db4 authored by Doris Ling's avatar Doris Ling Committed by Android (Google) Code Review
Browse files

Merge "Fix janky scrolling for Gestures Settings." into nyc-mr1-dev

parents bd3ac3bf 9345e4b3
Loading
Loading
Loading
Loading
+37 −30
Original line number Diff line number Diff line
@@ -17,22 +17,16 @@ package com.android.settings.gestures;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.PorterDuff;
import android.graphics.SurfaceTexture;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.PreferenceViewHolder;
import android.view.MotionEvent;
import android.view.View;
import android.view.Surface;
import android.view.TextureView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.util.AttributeSet;
import android.util.Log;

@@ -52,6 +46,7 @@ public final class GesturePreference extends SwitchPreference {
    private MediaMetadataRetriever mMediaMetadata;
    private boolean mAnimationAvailable;
    private boolean mPreviewReady;
    private boolean mScrolling;

    public GesturePreference(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -69,6 +64,23 @@ public final class GesturePreference extends SwitchPreference {
                    .build();
            mMediaMetadata = new MediaMetadataRetriever();
            mMediaMetadata.setDataSource(mContext, mVideoPath);
            mMediaPlayer = MediaPlayer.create(mContext, mVideoPath);
            if (mMediaPlayer != null) {
                mMediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
                    @Override
                    public void onSeekComplete(MediaPlayer mp) {
                        mPreviewReady = true;
                        mMediaPlayer.setOnSeekCompleteListener(null);
                    }
                });

                mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mediaPlayer) {
                        mediaPlayer.setLooping(true);
                    }
                });
            }
            mAnimationAvailable = true;
        } catch (Exception e) {
            Log.w(TAG, "Animation resource not found. Will not show animation.");
@@ -111,25 +123,9 @@ public final class GesturePreference extends SwitchPreference {
            @Override
            public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width,
                    int height) {
                mMediaPlayer = MediaPlayer.create(mContext, mVideoPath);
                if (mMediaPlayer != null) {
                    mMediaPlayer.setSurface(new Surface(surfaceTexture));
                    mMediaPlayer.setOnSeekCompleteListener(
                            new MediaPlayer.OnSeekCompleteListener() {
                                @Override
                                public void onSeekComplete(MediaPlayer mp) {
                                    mPreviewReady = true;
                                    mMediaPlayer.setOnSeekCompleteListener(null);
                                }
                            });

                    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mediaPlayer) {
                            mediaPlayer.seekTo(0);
                            mediaPlayer.setLooping(true);
                        }
                    });
                    mMediaPlayer.seekTo(0);
                }
            }

@@ -140,12 +136,6 @@ public final class GesturePreference extends SwitchPreference {

            @Override
            public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
                imageView.setVisibility(View.VISIBLE);
                if (mMediaPlayer != null) {
                    mMediaPlayer.stop();
                    mMediaPlayer.reset();
                    mMediaPlayer.release();
                }
                return false;
            }

@@ -153,6 +143,12 @@ public final class GesturePreference extends SwitchPreference {
            public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
                if (mPreviewReady && imageView.getVisibility() == View.VISIBLE) {
                    imageView.setVisibility(View.GONE);
                } else if (mScrolling) {
                    mScrolling = false;
                    if (mMediaPlayer != null && mMediaPlayer.isPlaying()) {
                        mMediaPlayer.pause();
                        playButton.setVisibility(View.VISIBLE);
                    }
                }
            }
        });
@@ -161,8 +157,19 @@ public final class GesturePreference extends SwitchPreference {

    @Override
    public void onDetached() {
        if (mMediaMetadata != null) {
            mMediaMetadata.release();
        }
        if (mMediaPlayer != null) {
            mMediaPlayer.stop();
            mMediaPlayer.reset();
            mMediaPlayer.release();
        }
        super.onDetached();
    }

    void setScrolling(boolean scrolling) {
        mScrolling = scrolling;
    }

}
+33 −18
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.provider.Settings.Secure;
import android.support.v7.preference.Preference;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -59,42 +58,35 @@ public class GestureSettings extends SettingsPreferenceFragment implements
    private static final String ARG_SCROLL_TO_PREFERENCE = "gesture_scroll_to_preference";

    private int mScrollPosition = -1;
    private List<GesturePreference> mPreferences;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.gesture_settings);
        Context context = getActivity();
        mPreferences = new ArrayList();

         // Double tap power for camera
        if (isCameraDoubleTapPowerGestureAvailable(getResources())) {
            int cameraDisabled = Secure.getInt(
                    getContentResolver(), Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0);
            GesturePreference preference =
                    (GesturePreference) findPreference(PREF_KEY_DOUBLE_TAP_POWER);
            preference.setChecked(cameraDisabled == 0);
            preference.setOnPreferenceChangeListener(this);
            addPreference(PREF_KEY_DOUBLE_TAP_POWER, cameraDisabled == 0);
        } else {
            removePreference(PREF_KEY_DOUBLE_TAP_POWER);
        }

        // Ambient Display
        if (isDozeAvailable(context)) {
            GesturePreference preference =
                    (GesturePreference) findPreference(PREF_KEY_PICK_UP_AND_NUDGE);
            int dozeEnabled = Secure.getInt(getContentResolver(), Secure.DOZE_ENABLED, 1);
            preference.setChecked(dozeEnabled != 0);
            preference.setOnPreferenceChangeListener(this);
            addPreference(PREF_KEY_PICK_UP_AND_NUDGE, dozeEnabled != 0);
        } else {
            removePreference(PREF_KEY_PICK_UP_AND_NUDGE);
        }

        // Fingerprint slide for notifications
        if (isSystemUINavigationAvailable(context)) {
            GesturePreference preference =
                    (GesturePreference) findPreference(PREF_KEY_SWIPE_DOWN_FINGERPRINT);
            preference.setChecked(isSystemUINavigationEnabled(context));
            preference.setOnPreferenceChangeListener(this);
            addPreference(PREF_KEY_SWIPE_DOWN_FINGERPRINT, isSystemUINavigationEnabled(context));
        } else {
            removePreference(PREF_KEY_SWIPE_DOWN_FINGERPRINT);
        }
@@ -103,10 +95,7 @@ public class GestureSettings extends SettingsPreferenceFragment implements
        if (isDoubleTwistAvailable(context)) {
            int doubleTwistEnabled = Secure.getInt(
                    getContentResolver(), Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 1);
            GesturePreference preference =
                    (GesturePreference) findPreference(PREF_KEY_DOUBLE_TWIST);
            preference.setChecked(doubleTwistEnabled != 0);
            preference.setOnPreferenceChangeListener(this);
            addPreference(PREF_KEY_DOUBLE_TWIST, doubleTwistEnabled != 0);
        } else {
            removePreference(PREF_KEY_DOUBLE_TWIST);
        }
@@ -128,9 +117,28 @@ public class GestureSettings extends SettingsPreferenceFragment implements
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);
        RecyclerView listview = getListView();
        if (mScrollPosition >= 0) {
            getListView().scrollToPosition(mScrollPosition);
            listview.scrollToPosition(mScrollPosition);
        }
        listview.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
                    for (GesturePreference pref : mPreferences) {
                        pref.setScrolling(true);
                    }
                } else if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                    for (GesturePreference pref : mPreferences) {
                        pref.setScrolling(false);
                    }
                }
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            }
        });
        return view;
    }

@@ -203,6 +211,13 @@ public class GestureSettings extends SettingsPreferenceFragment implements
        return false;
    }

    private void addPreference(String key, boolean enabled) {
        GesturePreference preference = (GesturePreference) findPreference(key);
        preference.setChecked(enabled);
        preference.setOnPreferenceChangeListener(this);
        mPreferences.add(preference);
    }

    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
        new BaseSearchIndexProvider() {
            @Override