From 85d630020a29c24f3d51f00b5ce3f701c16f0a45 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Wed, 30 Sep 2009 02:50:02 -0700 Subject: [PATCH] Fix for 2139014: Allow platform customization of vibration pattern in LockScreenView. Can be configured by config_virtualKeyVibePattern. --- .../internal/widget/LockPatternView.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 0d0a3c21dd73a..6adce6deb7652 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -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; }