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();
+ }
}
}