summaryrefslogtreecommitdiffstats
path: root/policy/src
diff options
context:
space:
mode:
authorJim Miller <jaggies@google.com>2011-06-08 23:01:28 -0700
committerJim Miller <jaggies@google.com>2011-06-10 18:02:29 -0700
commitb505074e8273887fbcd1e933738a42e770085fb8 (patch)
treeab7bc23f88ef01d51028fca8afab9200bfe9bb37 /policy/src
parentd408f4a8353e679dab2016e56ed237309d8a7523 (diff)
downloadframeworks_base-b505074e8273887fbcd1e933738a42e770085fb8.zip
frameworks_base-b505074e8273887fbcd1e933738a42e770085fb8.tar.gz
frameworks_base-b505074e8273887fbcd1e933738a42e770085fb8.tar.bz2
Add new MultiWaveView widget and integrate it into LockScreen
This adds a new multi-target widget to the framework and integrates it into LockScreen. Now with updated assets. Change-Id: Ib41595b9e80a7be6d647f44c803a77f9e5bfeca9
Diffstat (limited to 'policy/src')
-rw-r--r--policy/src/com/android/internal/policy/impl/LockScreen.java135
1 files changed, 94 insertions, 41 deletions
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index 6f7a6ee..0178395 100644
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -22,6 +22,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.SlidingTab;
import com.android.internal.widget.WaveView;
import com.android.internal.widget.WaveView.OnTriggerListener;
+import com.android.internal.widget.multiwaveview.MultiWaveView;
import android.app.ActivityManager;
import android.content.Context;
@@ -91,6 +92,8 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
private WaveView mEnergyWave;
private SlidingTabMethods mSlidingTabMethods;
private WaveViewMethods mWaveViewMethods;
+ private MultiWaveView mMultiWaveView;
+ private MultiWaveViewMethods mMultiWaveViewMethods;
/**
* The status of this lock screen.
@@ -166,34 +169,9 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
if (whichHandle == SlidingTab.OnTriggerListener.LEFT_HANDLE) {
mCallback.goToUnlockScreen();
} else if (whichHandle == SlidingTab.OnTriggerListener.RIGHT_HANDLE) {
- // toggle silent mode
- mSilentMode = !mSilentMode;
- if (mSilentMode) {
- final boolean vibe = (Settings.System.getInt(
- getContext().getContentResolver(),
- Settings.System.VIBRATE_IN_SILENT, 1) == 1);
-
- mAudioManager.setRingerMode(vibe
- ? AudioManager.RINGER_MODE_VIBRATE
- : AudioManager.RINGER_MODE_SILENT);
- } else {
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- }
-
+ toggleRingMode();
updateRightTabResources();
-
- String message = mSilentMode ?
- getContext().getString(R.string.global_action_silent_mode_on_status) :
- getContext().getString(R.string.global_action_silent_mode_off_status);
-
- final int toastIcon = mSilentMode
- ? R.drawable.ic_lock_ringer_off
- : R.drawable.ic_lock_ringer_on;
-
- final int toastColor = mSilentMode
- ? getContext().getResources().getColor(R.color.keyguard_text_color_soundoff)
- : getContext().getResources().getColor(R.color.keyguard_text_color_soundon);
- toastMessage(mScreenLocked, message, toastColor, toastIcon);
+ doSilenceRingToast();
mCallback.pokeWakelock();
}
}
@@ -214,19 +192,14 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
}
}
- class WaveViewMethods implements WaveView.OnTriggerListener {
- private static final int WAIT_FOR_ANIMATION_TIMEOUT = 0;
- private static final int STAY_ON_WHILE_GRABBED_TIMEOUT = 30000;
+ private static final int WAIT_FOR_ANIMATION_TIMEOUT = 0;
+ private static final int STAY_ON_WHILE_GRABBED_TIMEOUT = 30000;
+ class WaveViewMethods implements WaveView.OnTriggerListener {
/** {@inheritDoc} */
public void onTrigger(View v, int whichHandle) {
if (whichHandle == WaveView.OnTriggerListener.CENTER_HANDLE) {
- // Delay hiding lock screen long enough for animation to finish
- postDelayed(new Runnable() {
- public void run() {
- mCallback.goToUnlockScreen();
- }
- }, WAIT_FOR_ANIMATION_TIMEOUT);
+ requestUnlockScreen();
}
}
@@ -243,6 +216,80 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
}
}
+ class MultiWaveViewMethods implements MultiWaveView.OnTriggerListener {
+ public void onGrabbed(View v, int handle) {
+
+ }
+ public void onReleased(View v, int handle) {
+
+ }
+ public void onTrigger(View v, int target) {
+ if (target == 0) { // TODO: Use resources to determine which handle was used
+ mCallback.goToUnlockScreen();
+ } else if (target == 2) {
+ toggleRingMode();
+ updateResources();
+ doSilenceRingToast();
+ mCallback.pokeWakelock();
+ }
+
+ }
+
+ private void updateResources() {
+ mMultiWaveView.setTargetResources(mSilentMode ? R.array.lockscreen_targets_when_silent
+ : R.array.lockscreen_targets_when_soundon);
+ }
+
+ public void onGrabbedStateChange(View v, int handle) {
+ // Don't poke the wake lock when returning to a state where the handle is
+ // not grabbed since that can happen when the system (instead of the user)
+ // cancels the grab.
+ if (handle != MultiWaveView.OnTriggerListener.NO_HANDLE) {
+ mCallback.pokeWakelock();
+ }
+ }
+ }
+
+ private void requestUnlockScreen() {
+ // Delay hiding lock screen long enough for animation to finish
+ postDelayed(new Runnable() {
+ public void run() {
+ mCallback.goToUnlockScreen();
+ }
+ }, WAIT_FOR_ANIMATION_TIMEOUT);
+ }
+
+ private void doSilenceRingToast() {
+ String message = mSilentMode ?
+ getContext().getString(R.string.global_action_silent_mode_on_status) :
+ getContext().getString(R.string.global_action_silent_mode_off_status);
+
+ final int toastIcon = mSilentMode
+ ? R.drawable.ic_lock_ringer_off
+ : R.drawable.ic_lock_ringer_on;
+
+ final int toastColor = mSilentMode
+ ? getContext().getResources().getColor(R.color.keyguard_text_color_soundoff)
+ : getContext().getResources().getColor(R.color.keyguard_text_color_soundon);
+ toastMessage(mScreenLocked, message, toastColor, toastIcon);
+ }
+
+ private void toggleRingMode() {
+ // toggle silent mode
+ mSilentMode = !mSilentMode;
+ if (mSilentMode) {
+ final boolean vibe = (Settings.System.getInt(
+ getContext().getContentResolver(),
+ Settings.System.VIBRATE_IN_SILENT, 1) == 1);
+
+ mAudioManager.setRingerMode(vibe
+ ? AudioManager.RINGER_MODE_VIBRATE
+ : AudioManager.RINGER_MODE_SILENT);
+ } else {
+ mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+ }
+ }
+
/**
* In general, we enable unlocking the insecure key guard with the menu key. However, there are
* some cases where we wish to disable it, notably when the menu button placement or technology
@@ -319,9 +366,9 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mSilentMode = isSilentMode();
- mSlidingTab = (SlidingTab) findViewById(R.id.tab_selector);
- mEnergyWave = (WaveView) findViewById(R.id.wave_view);
- if (mSlidingTab != null) {
+ View unlockWidget = findViewById(R.id.unlock_widget);
+ if (unlockWidget instanceof SlidingTab) {
+ mSlidingTab = (SlidingTab) unlockWidget;
mSlidingTab.setHoldAfterTrigger(true, false);
mSlidingTab.setLeftHintText(R.string.lockscreen_unlock_label);
mSlidingTab.setLeftTabResources(
@@ -332,11 +379,17 @@ class LockScreen extends LinearLayout implements KeyguardScreen,
mSlidingTabMethods = new SlidingTabMethods();
mSlidingTab.setOnTriggerListener(mSlidingTabMethods);
mSlidingTabMethods.updateRightTabResources();
- } else if (mEnergyWave != null) {
+ } else if (unlockWidget instanceof WaveView) {
+ mEnergyWave = (WaveView) unlockWidget;
mWaveViewMethods = new WaveViewMethods();
mEnergyWave.setOnTriggerListener(mWaveViewMethods);
+ } else if (unlockWidget instanceof MultiWaveView) {
+ mMultiWaveView = (MultiWaveView) unlockWidget;
+ mMultiWaveViewMethods = new MultiWaveViewMethods();
+ mMultiWaveViewMethods.updateResources(); // update silence/ring resources
+ mMultiWaveView.setOnTriggerListener(mMultiWaveViewMethods);
} else {
- throw new IllegalStateException("Must have either SlidingTab or WaveView defined");
+ throw new IllegalStateException("Unrecognized unlock widget: " + unlockWidget);
}
resetStatusInfo(updateMonitor);