Fix 5045008: replace "ring/silence" target in LockScreen with camera app
This change replaces the ring/silence target with a camera target. It is disabled and falls back to the old behavior when any device policy disables the camera. Updated with latest icons. Change-Id: I2374eba08f85ff1d1b0bad2859efa30bb166fb60
@@ -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.
|
||||
*
|
||||
|
||||
BIN
core/res/res/drawable-hdpi/ic_lockscreen_camera_activated.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
core/res/res/drawable-hdpi/ic_lockscreen_camera_normal.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.6 KiB |
BIN
core/res/res/drawable-mdpi/ic_lockscreen_camera_activated.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
core/res/res/drawable-mdpi/ic_lockscreen_camera_normal.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 4.1 KiB |
BIN
core/res/res/drawable-xhdpi/ic_lockscreen_camera_activated.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
core/res/res/drawable-xhdpi/ic_lockscreen_camera_normal.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.4 KiB |
30
core/res/res/drawable/ic_lockscreen_camera.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2011 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:state_enabled="true"
|
||||
android:state_active="false"
|
||||
android:state_focused="false"
|
||||
android:drawable="@drawable/ic_lockscreen_camera_normal" />
|
||||
|
||||
<item
|
||||
android:state_enabled="true"
|
||||
android:state_active="true"
|
||||
android:state_focused="false"
|
||||
android:drawable="@drawable/ic_lockscreen_camera_activated" />
|
||||
|
||||
</selector>
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -34,4 +34,11 @@
|
||||
<item>@drawable/ic_lockscreen_silent</item>
|
||||
</array>
|
||||
|
||||
<array name="lockscreen_targets_with_camera">
|
||||
<item>@null</item>
|
||||
<item>@drawable/ic_lockscreen_unlock</item>
|
||||
<item>@null</item>
|
||||
<item>@drawable/ic_lockscreen_camera</item>
|
||||
</array>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -358,4 +358,11 @@
|
||||
<item>@null</item>"
|
||||
</array>
|
||||
|
||||
<array name="lockscreen_targets_with_camera">
|
||||
<item>@drawable/ic_lockscreen_unlock</item>
|
||||
<item>@null</item>
|
||||
<item>@drawable/ic_lockscreen_camera</item>
|
||||
<item>@null</item>"
|
||||
</array>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||