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

Commit 85d63002 authored by Jim Miller's avatar Jim Miller
Browse files

Fix for 2139014: Allow platform customization of vibration pattern in LockScreenView.

Can be configured by config_virtualKeyVibePattern.
parent 3ba35126
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ package com.android.internal.widget;
import com.android.internal.R;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -34,6 +35,7 @@ import android.os.Parcelable;
import android.os.SystemClock;
import android.os.Vibrator;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

@@ -49,7 +51,7 @@ import java.util.List;
 */
public class LockPatternView extends View {
    // Vibrator pattern for creating a tactile bump
    private static final long[] VIBE_PATTERN = {0, 1, 40, 41};
    private static final long[] DEFAULT_VIBE_PATTERN = {0, 1, 40, 41};

    private static final boolean PROFILE_DRAWING = false;
    private boolean mDrawingProfilingStarted = false;
@@ -118,6 +120,8 @@ public class LockPatternView extends View {

    private Vibrator vibe; // Vibrator for creating tactile feedback

    private long[] mVibePattern;

    /**
     * Represents a cell in the 3 X 3 matrix of the unlock pattern view.
     */
@@ -256,6 +260,27 @@ public class LockPatternView extends View {
        // we assume all bitmaps have the same size
        mBitmapWidth = mBitmapBtnDefault.getWidth();
        mBitmapHeight = mBitmapBtnDefault.getHeight();

        // allow vibration pattern to be customized
        mVibePattern = loadVibratePattern(com.android.internal.R.array.config_virtualKeyVibePattern);
    }

    private long[] loadVibratePattern(int id) {
        int[] pattern = null;
        try {
            pattern = getResources().getIntArray(id);
        } catch (Resources.NotFoundException e) {
            Log.e("LockPatternView", "Vibrate pattern missing, using default", e);
        }
        if (pattern == null) {
            return DEFAULT_VIBE_PATTERN;
        }

        long[] tmpPattern = new long[pattern.length];
        for (int i = 0; i < pattern.length; i++) {
            tmpPattern[i] = pattern[i];
        }
        return tmpPattern;
    }

    private Bitmap getBitmapFor(int resId) {
@@ -443,7 +468,7 @@ public class LockPatternView extends View {
            }
            addCellToPattern(cell);
            if (mTactileFeedbackEnabled){
                vibe.vibrate(VIBE_PATTERN, -1); // Generate tactile feedback
                vibe.vibrate(mVibePattern, -1); // Generate tactile feedback
            }
            return cell;
        }