Loading core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +80 −21 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.Log; import android.util.Log; import android.util.TypedValue; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.MotionEvent; import android.view.View; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent; Loading Loading @@ -99,8 +100,11 @@ public class MultiWaveView extends View { private float mTapRadius; private float mTapRadius; private float mWaveCenterX; private float mWaveCenterX; private float mWaveCenterY; private float mWaveCenterY; private float mVerticalOffset; private int mMaxTargetHeight; private int mMaxTargetWidth; private float mHorizontalOffset; private float mHorizontalOffset; private float mVerticalOffset; private float mOuterRadius = 0.0f; private float mOuterRadius = 0.0f; private float mHitRadius = 0.0f; private float mHitRadius = 0.0f; private float mSnapMargin = 0.0f; private float mSnapMargin = 0.0f; Loading Loading @@ -142,6 +146,9 @@ public class MultiWaveView extends View { private int mTargetDescriptionsResourceId; private int mTargetDescriptionsResourceId; private int mDirectionDescriptionsResourceId; private int mDirectionDescriptionsResourceId; private boolean mAlwaysTrackFinger; private boolean mAlwaysTrackFinger; private int mHorizontalInset; private int mVerticalInset; private int mGravity = Gravity.TOP; public MultiWaveView(Context context) { public MultiWaveView(Context context) { this(context, null); this(context, null); Loading @@ -153,10 +160,9 @@ public class MultiWaveView extends View { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView); mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius); mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius); mHorizontalOffset = a.getDimension(R.styleable.MultiWaveView_horizontalOffset, // mHorizontalOffset = a.getDimension(R.styleable.MultiWaveView_horizontalOffset, mHorizontalOffset); // mHorizontalOffset); mVerticalOffset = a.getDimension(R.styleable.MultiWaveView_verticalOffset, // mVerticalOffset = a.getDimension(R.styleable.MultiWaveView_verticalOffset, mVerticalOffset); mVerticalOffset); mHitRadius = a.getDimension(R.styleable.MultiWaveView_hitRadius, mHitRadius); mHitRadius = a.getDimension(R.styleable.MultiWaveView_hitRadius, mHitRadius); mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin); mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin); mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration, mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration, Loading @@ -169,6 +175,7 @@ public class MultiWaveView extends View { mOuterRing = new TargetDrawable(res, mOuterRing = new TargetDrawable(res, a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId); a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId); mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false); mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false); mGravity = a.getInt(R.styleable.MultiWaveView_gravity, Gravity.TOP); // Read chevron animation drawables // Read chevron animation drawables final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable, final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable, Loading Loading @@ -231,16 +238,16 @@ public class MultiWaveView extends View { @Override @Override protected int getSuggestedMinimumWidth() { protected int getSuggestedMinimumWidth() { // View should be large enough to contain the background + target drawable on either edge // View should be large enough to contain the background + handle and return mOuterRing.getWidth() // target drawable on either edge. + (mTargetDrawables.size() > 0 ? (mTargetDrawables.get(0).getWidth()/2) : 0); return mOuterRing.getWidth() + mMaxTargetWidth; } } @Override @Override protected int getSuggestedMinimumHeight() { protected int getSuggestedMinimumHeight() { // View should be large enough to contain the unlock ring + target drawable on either edge // View should be large enough to contain the unlock ring + target and return mOuterRing.getHeight() // target drawable on either edge + (mTargetDrawables.size() > 0 ? (mTargetDrawables.get(0).getHeight()/2) : 0); return mOuterRing.getHeight() + mMaxTargetHeight; } } private int resolveMeasured(int measureSpec, int desired) private int resolveMeasured(int measureSpec, int desired) Loading @@ -265,9 +272,10 @@ public class MultiWaveView extends View { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int minimumWidth = getSuggestedMinimumWidth(); final int minimumWidth = getSuggestedMinimumWidth(); final int minimumHeight = getSuggestedMinimumHeight(); final int minimumHeight = getSuggestedMinimumHeight(); int viewWidth = resolveMeasured(widthMeasureSpec, minimumWidth); int computedWidth = resolveMeasured(widthMeasureSpec, minimumWidth); int viewHeight = resolveMeasured(heightMeasureSpec, minimumHeight); int computedHeight = resolveMeasured(heightMeasureSpec, minimumHeight); setMeasuredDimension(viewWidth, viewHeight); setupGravity((computedWidth - minimumWidth), (computedHeight - minimumHeight)); setMeasuredDimension(computedWidth, computedHeight); } } private void switchToState(int state, float x, float y) { private void switchToState(int state, float x, float y) { Loading Loading @@ -521,14 +529,25 @@ public class MultiWaveView extends View { TypedArray array = res.obtainTypedArray(resourceId); TypedArray array = res.obtainTypedArray(resourceId); int count = array.length(); int count = array.length(); ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count); ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count); int maxWidth = mHandleDrawable.getWidth(); int maxHeight = mHandleDrawable.getHeight(); for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { TypedValue value = array.peekValue(i); TypedValue value = array.peekValue(i); targetDrawables.add(new TargetDrawable(res, value != null ? value.resourceId : 0)); TargetDrawable target= new TargetDrawable(res, value != null ? value.resourceId : 0); targetDrawables.add(target); maxWidth = Math.max(maxWidth, target.getWidth()); maxHeight = Math.max(maxHeight, target.getHeight()); } if (mMaxTargetWidth != maxWidth || mMaxTargetHeight != maxHeight) { mMaxTargetWidth = maxWidth; mMaxTargetHeight = maxHeight; requestLayout(); // required to resize layout and call updateTargetPositions() } else { updateTargetPositions(); } } array.recycle(); array.recycle(); mTargetResourceId = resourceId; mTargetResourceId = resourceId; mTargetDrawables = targetDrawables; mTargetDrawables = targetDrawables; updateTargetPositions(); } } /** /** Loading Loading @@ -638,23 +657,27 @@ public class MultiWaveView extends View { boolean handled = false; boolean handled = false; switch (action) { switch (action) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN: if (DEBUG) Log.v(TAG, "*** DOWN ***"); handleDown(event); handleDown(event); handled = true; handled = true; break; break; case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE: if (DEBUG) Log.v(TAG, "*** MOVE ***"); handleMove(event); handleMove(event); handled = true; handled = true; break; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP: if (DEBUG) Log.v(TAG, "*** UP ***"); handleMove(event); handleMove(event); handleUp(event); handleUp(event); handled = true; handled = true; break; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_CANCEL: handleMove(event); if (DEBUG) Log.v(TAG, "*** CANCEL ***"); // handleMove(event); handleCancel(event); handleCancel(event); handled = true; handled = true; break; break; Loading Loading @@ -795,6 +818,11 @@ public class MultiWaveView extends View { } } mGrabbedState = newState; mGrabbedState = newState; if (mOnTriggerListener != null) { if (mOnTriggerListener != null) { if (newState == OnTriggerListener.NO_HANDLE) { mOnTriggerListener.onReleased(this, OnTriggerListener.CENTER_HANDLE); } else { mOnTriggerListener.onGrabbed(this, OnTriggerListener.CENTER_HANDLE); } mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState); mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState); } } } } Loading Loading @@ -832,13 +860,45 @@ public class MultiWaveView extends View { moveHandleTo(centerX, centerY, false); moveHandleTo(centerX, centerY, false); } } private void setupGravity(int dx, int dy) { final int layoutDirection = getResolvedLayoutDirection(); final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection); switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: mHorizontalInset = 0; break; case Gravity.RIGHT: mHorizontalInset = dx; break; case Gravity.CENTER_HORIZONTAL: default: mHorizontalInset = dx / 2; break; } switch (absoluteGravity & Gravity.VERTICAL_GRAVITY_MASK) { case Gravity.TOP: mVerticalInset = 0; break; case Gravity.BOTTOM: mVerticalInset = dy; break; case Gravity.CENTER_VERTICAL: default: mVerticalInset = dy / 2; break; } } @Override @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); super.onLayout(changed, left, top, right, bottom); final int width = right - left; final int width = right - left; final int height = bottom - top; final int height = bottom - top; float newWaveCenterX = mHorizontalOffset + Math.max(width, mOuterRing.getWidth() ) / 2; float newWaveCenterX = mHorizontalOffset + mHorizontalInset float newWaveCenterY = mVerticalOffset + Math.max(height, mOuterRing.getHeight()) / 2; + Math.max(width, mMaxTargetWidth + mOuterRing.getWidth()) / 2; float newWaveCenterY = mVerticalOffset + mVerticalInset + Math.max(height, + mMaxTargetHeight + mOuterRing.getHeight()) / 2; if (newWaveCenterX != mWaveCenterX || newWaveCenterY != mWaveCenterY) { if (newWaveCenterX != mWaveCenterX || newWaveCenterY != mWaveCenterY) { if (mWaveCenterX == 0 && mWaveCenterY == 0) { if (mWaveCenterX == 0 && mWaveCenterY == 0) { performInitialLayout(newWaveCenterX, newWaveCenterY); performInitialLayout(newWaveCenterX, newWaveCenterY); Loading @@ -848,9 +908,8 @@ public class MultiWaveView extends View { mOuterRing.setX(mWaveCenterX); mOuterRing.setX(mWaveCenterX); mOuterRing.setY(Math.max(mWaveCenterY, mWaveCenterY)); mOuterRing.setY(Math.max(mWaveCenterY, mWaveCenterY)); updateTargetPositions(); } } updateTargetPositions(); if (DEBUG) dump(); if (DEBUG) dump(); } } Loading core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml +3 −5 Original line number Original line Diff line number Diff line Loading @@ -85,10 +85,10 @@ <com.android.internal.widget.multiwaveview.MultiWaveView <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlock_widget" android:id="@+id/unlock_widget" android:orientation="horizontal" android:orientation="horizontal" android:layout_width="match_parent" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="center" android:layout_gravity="center" android:gravity="center" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -99,8 +99,6 @@ android:snapMargin="@dimen/multiwaveview_snap_margin" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" android:hitRadius="@dimen/multiwaveview_hit_radius" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:horizontalOffset="0dip" android:verticalOffset="60dip" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" /> /> Loading core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml +3 −4 Original line number Original line Diff line number Diff line Loading @@ -84,10 +84,11 @@ <com.android.internal.widget.multiwaveview.MultiWaveView <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlock_widget" android:id="@+id/unlock_widget" android:layout_width="match_parent" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="wrap_content" android:layout_rowSpan="7" android:layout_rowSpan="7" android:layout_gravity="center_vertical|center_horizontal" android:layout_gravity="center_vertical|center_horizontal" android:gravity="center" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -100,8 +101,6 @@ android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" android:horizontalOffset="0dip" android:verticalOffset="0dip" /> /> <!-- emergency call button shown when sim is PUKd and tab_selector is hidden --> <!-- emergency call button shown when sim is PUKd and tab_selector is hidden --> Loading core/res/res/layout/keyguard_screen_tab_unlock.xml +1 −2 Original line number Original line Diff line number Diff line Loading @@ -129,6 +129,7 @@ android:layout_width="match_parent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_alignParentBottom="true" android:gravity="top" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -139,8 +140,6 @@ android:snapMargin="@dimen/multiwaveview_snap_margin" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" android:hitRadius="@dimen/multiwaveview_hit_radius" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:horizontalOffset="0dip" android:verticalOffset="60dip" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" /> /> Loading core/res/res/layout/keyguard_screen_tab_unlock_land.xml +2 −3 Original line number Original line Diff line number Diff line Loading @@ -131,9 +131,10 @@ <!-- Column 2 --> <!-- Column 2 --> <com.android.internal.widget.multiwaveview.MultiWaveView <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlock_widget" android:id="@+id/unlock_widget" android:layout_width="200dip" android:layout_width="302dip" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_rowSpan="7" android:layout_rowSpan="7" android:gravity="center" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -146,8 +147,6 @@ android:topChevronDrawable="@drawable/ic_lockscreen_chevron_up" android:topChevronDrawable="@drawable/ic_lockscreen_chevron_up" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" android:horizontalOffset="0dip" android:verticalOffset="0dip" /> /> <!-- Music transport control --> <!-- Music transport control --> Loading Loading
core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +80 −21 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.text.TextUtils; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.Log; import android.util.Log; import android.util.TypedValue; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; import android.view.MotionEvent; import android.view.View; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent; Loading Loading @@ -99,8 +100,11 @@ public class MultiWaveView extends View { private float mTapRadius; private float mTapRadius; private float mWaveCenterX; private float mWaveCenterX; private float mWaveCenterY; private float mWaveCenterY; private float mVerticalOffset; private int mMaxTargetHeight; private int mMaxTargetWidth; private float mHorizontalOffset; private float mHorizontalOffset; private float mVerticalOffset; private float mOuterRadius = 0.0f; private float mOuterRadius = 0.0f; private float mHitRadius = 0.0f; private float mHitRadius = 0.0f; private float mSnapMargin = 0.0f; private float mSnapMargin = 0.0f; Loading Loading @@ -142,6 +146,9 @@ public class MultiWaveView extends View { private int mTargetDescriptionsResourceId; private int mTargetDescriptionsResourceId; private int mDirectionDescriptionsResourceId; private int mDirectionDescriptionsResourceId; private boolean mAlwaysTrackFinger; private boolean mAlwaysTrackFinger; private int mHorizontalInset; private int mVerticalInset; private int mGravity = Gravity.TOP; public MultiWaveView(Context context) { public MultiWaveView(Context context) { this(context, null); this(context, null); Loading @@ -153,10 +160,9 @@ public class MultiWaveView extends View { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView); mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius); mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius); mHorizontalOffset = a.getDimension(R.styleable.MultiWaveView_horizontalOffset, // mHorizontalOffset = a.getDimension(R.styleable.MultiWaveView_horizontalOffset, mHorizontalOffset); // mHorizontalOffset); mVerticalOffset = a.getDimension(R.styleable.MultiWaveView_verticalOffset, // mVerticalOffset = a.getDimension(R.styleable.MultiWaveView_verticalOffset, mVerticalOffset); mVerticalOffset); mHitRadius = a.getDimension(R.styleable.MultiWaveView_hitRadius, mHitRadius); mHitRadius = a.getDimension(R.styleable.MultiWaveView_hitRadius, mHitRadius); mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin); mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin); mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration, mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration, Loading @@ -169,6 +175,7 @@ public class MultiWaveView extends View { mOuterRing = new TargetDrawable(res, mOuterRing = new TargetDrawable(res, a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId); a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId); mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false); mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false); mGravity = a.getInt(R.styleable.MultiWaveView_gravity, Gravity.TOP); // Read chevron animation drawables // Read chevron animation drawables final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable, final int chevrons[] = { R.styleable.MultiWaveView_leftChevronDrawable, Loading Loading @@ -231,16 +238,16 @@ public class MultiWaveView extends View { @Override @Override protected int getSuggestedMinimumWidth() { protected int getSuggestedMinimumWidth() { // View should be large enough to contain the background + target drawable on either edge // View should be large enough to contain the background + handle and return mOuterRing.getWidth() // target drawable on either edge. + (mTargetDrawables.size() > 0 ? (mTargetDrawables.get(0).getWidth()/2) : 0); return mOuterRing.getWidth() + mMaxTargetWidth; } } @Override @Override protected int getSuggestedMinimumHeight() { protected int getSuggestedMinimumHeight() { // View should be large enough to contain the unlock ring + target drawable on either edge // View should be large enough to contain the unlock ring + target and return mOuterRing.getHeight() // target drawable on either edge + (mTargetDrawables.size() > 0 ? (mTargetDrawables.get(0).getHeight()/2) : 0); return mOuterRing.getHeight() + mMaxTargetHeight; } } private int resolveMeasured(int measureSpec, int desired) private int resolveMeasured(int measureSpec, int desired) Loading @@ -265,9 +272,10 @@ public class MultiWaveView extends View { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int minimumWidth = getSuggestedMinimumWidth(); final int minimumWidth = getSuggestedMinimumWidth(); final int minimumHeight = getSuggestedMinimumHeight(); final int minimumHeight = getSuggestedMinimumHeight(); int viewWidth = resolveMeasured(widthMeasureSpec, minimumWidth); int computedWidth = resolveMeasured(widthMeasureSpec, minimumWidth); int viewHeight = resolveMeasured(heightMeasureSpec, minimumHeight); int computedHeight = resolveMeasured(heightMeasureSpec, minimumHeight); setMeasuredDimension(viewWidth, viewHeight); setupGravity((computedWidth - minimumWidth), (computedHeight - minimumHeight)); setMeasuredDimension(computedWidth, computedHeight); } } private void switchToState(int state, float x, float y) { private void switchToState(int state, float x, float y) { Loading Loading @@ -521,14 +529,25 @@ public class MultiWaveView extends View { TypedArray array = res.obtainTypedArray(resourceId); TypedArray array = res.obtainTypedArray(resourceId); int count = array.length(); int count = array.length(); ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count); ArrayList<TargetDrawable> targetDrawables = new ArrayList<TargetDrawable>(count); int maxWidth = mHandleDrawable.getWidth(); int maxHeight = mHandleDrawable.getHeight(); for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) { TypedValue value = array.peekValue(i); TypedValue value = array.peekValue(i); targetDrawables.add(new TargetDrawable(res, value != null ? value.resourceId : 0)); TargetDrawable target= new TargetDrawable(res, value != null ? value.resourceId : 0); targetDrawables.add(target); maxWidth = Math.max(maxWidth, target.getWidth()); maxHeight = Math.max(maxHeight, target.getHeight()); } if (mMaxTargetWidth != maxWidth || mMaxTargetHeight != maxHeight) { mMaxTargetWidth = maxWidth; mMaxTargetHeight = maxHeight; requestLayout(); // required to resize layout and call updateTargetPositions() } else { updateTargetPositions(); } } array.recycle(); array.recycle(); mTargetResourceId = resourceId; mTargetResourceId = resourceId; mTargetDrawables = targetDrawables; mTargetDrawables = targetDrawables; updateTargetPositions(); } } /** /** Loading Loading @@ -638,23 +657,27 @@ public class MultiWaveView extends View { boolean handled = false; boolean handled = false; switch (action) { switch (action) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN: if (DEBUG) Log.v(TAG, "*** DOWN ***"); handleDown(event); handleDown(event); handled = true; handled = true; break; break; case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE: if (DEBUG) Log.v(TAG, "*** MOVE ***"); handleMove(event); handleMove(event); handled = true; handled = true; break; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP: if (DEBUG) Log.v(TAG, "*** UP ***"); handleMove(event); handleMove(event); handleUp(event); handleUp(event); handled = true; handled = true; break; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_CANCEL: handleMove(event); if (DEBUG) Log.v(TAG, "*** CANCEL ***"); // handleMove(event); handleCancel(event); handleCancel(event); handled = true; handled = true; break; break; Loading Loading @@ -795,6 +818,11 @@ public class MultiWaveView extends View { } } mGrabbedState = newState; mGrabbedState = newState; if (mOnTriggerListener != null) { if (mOnTriggerListener != null) { if (newState == OnTriggerListener.NO_HANDLE) { mOnTriggerListener.onReleased(this, OnTriggerListener.CENTER_HANDLE); } else { mOnTriggerListener.onGrabbed(this, OnTriggerListener.CENTER_HANDLE); } mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState); mOnTriggerListener.onGrabbedStateChange(this, mGrabbedState); } } } } Loading Loading @@ -832,13 +860,45 @@ public class MultiWaveView extends View { moveHandleTo(centerX, centerY, false); moveHandleTo(centerX, centerY, false); } } private void setupGravity(int dx, int dy) { final int layoutDirection = getResolvedLayoutDirection(); final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection); switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.LEFT: mHorizontalInset = 0; break; case Gravity.RIGHT: mHorizontalInset = dx; break; case Gravity.CENTER_HORIZONTAL: default: mHorizontalInset = dx / 2; break; } switch (absoluteGravity & Gravity.VERTICAL_GRAVITY_MASK) { case Gravity.TOP: mVerticalInset = 0; break; case Gravity.BOTTOM: mVerticalInset = dy; break; case Gravity.CENTER_VERTICAL: default: mVerticalInset = dy / 2; break; } } @Override @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); super.onLayout(changed, left, top, right, bottom); final int width = right - left; final int width = right - left; final int height = bottom - top; final int height = bottom - top; float newWaveCenterX = mHorizontalOffset + Math.max(width, mOuterRing.getWidth() ) / 2; float newWaveCenterX = mHorizontalOffset + mHorizontalInset float newWaveCenterY = mVerticalOffset + Math.max(height, mOuterRing.getHeight()) / 2; + Math.max(width, mMaxTargetWidth + mOuterRing.getWidth()) / 2; float newWaveCenterY = mVerticalOffset + mVerticalInset + Math.max(height, + mMaxTargetHeight + mOuterRing.getHeight()) / 2; if (newWaveCenterX != mWaveCenterX || newWaveCenterY != mWaveCenterY) { if (newWaveCenterX != mWaveCenterX || newWaveCenterY != mWaveCenterY) { if (mWaveCenterX == 0 && mWaveCenterY == 0) { if (mWaveCenterX == 0 && mWaveCenterY == 0) { performInitialLayout(newWaveCenterX, newWaveCenterY); performInitialLayout(newWaveCenterX, newWaveCenterY); Loading @@ -848,9 +908,8 @@ public class MultiWaveView extends View { mOuterRing.setX(mWaveCenterX); mOuterRing.setX(mWaveCenterX); mOuterRing.setY(Math.max(mWaveCenterY, mWaveCenterY)); mOuterRing.setY(Math.max(mWaveCenterY, mWaveCenterY)); updateTargetPositions(); } } updateTargetPositions(); if (DEBUG) dump(); if (DEBUG) dump(); } } Loading
core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml +3 −5 Original line number Original line Diff line number Diff line Loading @@ -85,10 +85,10 @@ <com.android.internal.widget.multiwaveview.MultiWaveView <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlock_widget" android:id="@+id/unlock_widget" android:orientation="horizontal" android:orientation="horizontal" android:layout_width="match_parent" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="center" android:layout_gravity="center" android:gravity="center" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -99,8 +99,6 @@ android:snapMargin="@dimen/multiwaveview_snap_margin" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" android:hitRadius="@dimen/multiwaveview_hit_radius" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:horizontalOffset="0dip" android:verticalOffset="60dip" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" /> /> Loading
core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml +3 −4 Original line number Original line Diff line number Diff line Loading @@ -84,10 +84,11 @@ <com.android.internal.widget.multiwaveview.MultiWaveView <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlock_widget" android:id="@+id/unlock_widget" android:layout_width="match_parent" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="wrap_content" android:layout_rowSpan="7" android:layout_rowSpan="7" android:layout_gravity="center_vertical|center_horizontal" android:layout_gravity="center_vertical|center_horizontal" android:gravity="center" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -100,8 +101,6 @@ android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" android:horizontalOffset="0dip" android:verticalOffset="0dip" /> /> <!-- emergency call button shown when sim is PUKd and tab_selector is hidden --> <!-- emergency call button shown when sim is PUKd and tab_selector is hidden --> Loading
core/res/res/layout/keyguard_screen_tab_unlock.xml +1 −2 Original line number Original line Diff line number Diff line Loading @@ -129,6 +129,7 @@ android:layout_width="match_parent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_alignParentBottom="true" android:gravity="top" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -139,8 +140,6 @@ android:snapMargin="@dimen/multiwaveview_snap_margin" android:snapMargin="@dimen/multiwaveview_snap_margin" android:hitRadius="@dimen/multiwaveview_hit_radius" android:hitRadius="@dimen/multiwaveview_hit_radius" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:rightChevronDrawable="@drawable/ic_lockscreen_chevron_right" android:horizontalOffset="0dip" android:verticalOffset="60dip" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" /> /> Loading
core/res/res/layout/keyguard_screen_tab_unlock_land.xml +2 −3 Original line number Original line Diff line number Diff line Loading @@ -131,9 +131,10 @@ <!-- Column 2 --> <!-- Column 2 --> <com.android.internal.widget.multiwaveview.MultiWaveView <com.android.internal.widget.multiwaveview.MultiWaveView android:id="@+id/unlock_widget" android:id="@+id/unlock_widget" android:layout_width="200dip" android:layout_width="302dip" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_rowSpan="7" android:layout_rowSpan="7" android:gravity="center" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDrawables="@array/lockscreen_targets_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera" Loading @@ -146,8 +147,6 @@ android:topChevronDrawable="@drawable/ic_lockscreen_chevron_up" android:topChevronDrawable="@drawable/ic_lockscreen_chevron_up" android:feedbackCount="3" android:feedbackCount="3" android:vibrationDuration="20" android:vibrationDuration="20" android:horizontalOffset="0dip" android:verticalOffset="0dip" /> /> <!-- Music transport control --> <!-- Music transport control --> Loading