diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index 0510023b8d049..ec926e4fdfe9f 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -127,6 +127,7 @@ public class MultiWaveView extends View { mAnimatingTargets = false; } }; + private int mTargetResourceId; public MultiWaveView(Context context) { this(context, null); @@ -474,6 +475,7 @@ public class MultiWaveView extends View { Drawable drawable = array.getDrawable(i); targetDrawables.add(new TargetDrawable(res, drawable)); } + mTargetResourceId = resourceId; mTargetDrawables = targetDrawables; updateTargetPositions(); } @@ -492,6 +494,10 @@ public class MultiWaveView extends View { } } + public int getTargetResourceId() { + return mTargetResourceId; + } + /** * Enable or disable vibrate on touch. * diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png new file mode 100644 index 0000000000000..d510e1dd710ca Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png new file mode 100644 index 0000000000000..36d766d76a941 Binary files /dev/null and b/core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png index fce4980c74b89..d1938b99bcced 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png and b/core/res/res/drawable-hdpi/ic_lockscreen_silent_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png index 73f01c9e859cc..f6ccbd29a8cd0 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png and b/core/res/res/drawable-hdpi/ic_lockscreen_soundon_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png index d01bdb273f7e7..10b32682c185d 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png and b/core/res/res/drawable-hdpi/ic_lockscreen_text_activated.png differ diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png index d333946642aab..d1f30156f1631 100644 Binary files a/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png and b/core/res/res/drawable-hdpi/ic_lockscreen_unlock_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png new file mode 100644 index 0000000000000..1437798cb9d74 Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png new file mode 100644 index 0000000000000..b71825855a89e Binary files /dev/null and b/core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_silent_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_silent_activated.png index 3b2f3fc8579bc..2bc3f52b86b9f 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_silent_activated.png and b/core/res/res/drawable-mdpi/ic_lockscreen_silent_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png index 03f524dea92a5..637eec6fb0cd4 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png and b/core/res/res/drawable-mdpi/ic_lockscreen_soundon_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_text_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_text_activated.png index dbfc5babbc035..878ff1fea101a 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_text_activated.png and b/core/res/res/drawable-mdpi/ic_lockscreen_text_activated.png differ diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png index df479932ca8bd..0d3f756cb99a2 100644 Binary files a/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png and b/core/res/res/drawable-mdpi/ic_lockscreen_unlock_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png new file mode 100644 index 0000000000000..d54588336fdbb Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png new file mode 100644 index 0000000000000..8de7b8416db1d Binary files /dev/null and b/core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_silent_activated.png index fd812116d7f51..2900045963a82 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_silent_activated.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_silent_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png index 9edc70bc09afc..da2adc2e50fc1 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_soundon_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_text_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_text_activated.png index 29c4572b59274..ddebe3ee7f745 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_text_activated.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_text_activated.png differ diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png index fa0be9656ec3b..73d7af3cd51bc 100644 Binary files a/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png and b/core/res/res/drawable-xhdpi/ic_lockscreen_unlock_activated.png differ diff --git a/core/res/res/drawable/ic_lockscreen_camera.xml b/core/res/res/drawable/ic_lockscreen_camera.xml new file mode 100644 index 0000000000000..0e3ef37cfffbc --- /dev/null +++ b/core/res/res/drawable/ic_lockscreen_camera.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml index 05c768d19f885..6016d4e3dc6a6 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml @@ -129,7 +129,7 @@ android:layout_height="match_parent" android:layout_alignParentBottom="true" - android:targetDrawables="@array/lockscreen_targets_when_silent" + android:targetDrawables="@array/lockscreen_targets_with_camera" android:handleDrawable="@drawable/ic_lockscreen_handle" android:waveDrawable="@drawable/ic_lockscreen_outerring" android:outerRadius="@dimen/multiwaveview_target_placement_radius" diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml index 6440726eb84bf..168bd1a3173e1 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml @@ -131,7 +131,7 @@ android:layout_height="match_parent" android:layout_rowSpan="7" - android:targetDrawables="@array/lockscreen_targets_when_silent" + android:targetDrawables="@array/lockscreen_targets_with_camera" android:handleDrawable="@drawable/ic_lockscreen_handle" android:waveDrawable="@drawable/ic_lockscreen_outerring" android:outerRadius="@dimen/multiwaveview_target_placement_radius" diff --git a/core/res/res/values-land/arrays.xml b/core/res/res/values-land/arrays.xml index 92d5a87d5c06f..fd492ec081fe2 100644 --- a/core/res/res/values-land/arrays.xml +++ b/core/res/res/values-land/arrays.xml @@ -34,4 +34,11 @@ @drawable/ic_lockscreen_silent + + @null + @drawable/ic_lockscreen_unlock + @null + @drawable/ic_lockscreen_camera + + diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 73103a625ecc3..fa9f1d1f63910 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -358,4 +358,11 @@ @null" + + @drawable/ic_lockscreen_unlock + @null + @drawable/ic_lockscreen_camera + @null" + + diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java index 4a14dd9aca47a..9d360aca07cdf 100644 --- a/policy/src/com/android/internal/policy/impl/LockScreen.java +++ b/policy/src/com/android/internal/policy/impl/LockScreen.java @@ -23,7 +23,9 @@ import com.android.internal.widget.WaveView; import com.android.internal.widget.multiwaveview.MultiWaveView; import android.app.ActivityManager; +import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.view.KeyEvent; @@ -181,14 +183,33 @@ class LockScreen extends LinearLayout implements KeyguardScreen { UnlockWidgetCommonMethods { private final MultiWaveView mMultiWaveView; + private boolean mCameraDisabled; MultiWaveViewMethods(MultiWaveView multiWaveView) { mMultiWaveView = multiWaveView; + final boolean cameraDisabled = mLockPatternUtils.getDevicePolicyManager() + .getCameraDisabled(null); + if (cameraDisabled) { + Log.v(TAG, "Camera disabled by Device Policy"); + mCameraDisabled = true; + } else { + // Camera is enabled if resource is initially defined for MultiWaveView + // in the lockscreen layout file + mCameraDisabled = mMultiWaveView.getTargetResourceId() + != R.array.lockscreen_targets_with_camera; + } } public void updateResources() { - mMultiWaveView.setTargetResources(mSilentMode ? R.array.lockscreen_targets_when_silent - : R.array.lockscreen_targets_when_soundon); + int resId; + if (mCameraDisabled) { + // Fall back to showing ring/silence if camera is disabled by DPM... + resId = mSilentMode ? R.array.lockscreen_targets_when_silent + : R.array.lockscreen_targets_when_soundon; + } else { + resId = R.array.lockscreen_targets_with_camera; + } + mMultiWaveView.setTargetResources(resId); } public void onGrabbed(View v, int handle) { @@ -200,12 +221,19 @@ class LockScreen extends LinearLayout implements KeyguardScreen { } public void onTrigger(View v, int target) { - if (target == 0) { // TODO: Use resources to determine which handle was used + if (target == 0 || target == 1) { // 0 = unlock/portrait, 1 = unlock/landscape mCallback.goToUnlockScreen(); - } else if (target == 2) { - toggleRingMode(); - mUnlockWidgetMethods.updateResources(); - mCallback.pokeWakelock(); + } else if (target == 2 || target == 3) { // 2 = alt/portrait, 3 = alt/landscape + if (!mCameraDisabled) { + // Broadcast an intent to start the Camera + Intent intent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); + mContext.sendOrderedBroadcast(intent, null); + mCallback.goToUnlockScreen(); + } else { + toggleRingMode(); + mUnlockWidgetMethods.updateResources(); + mCallback.pokeWakelock(); + } } }