diff options
| author | Winson Chung <winsonc@google.com> | 2011-06-27 13:15:32 -0700 | 
|---|---|---|
| committer | Winson Chung <winsonc@google.com> | 2011-07-01 10:47:07 -0700 | 
| commit | 9112ec3039dda4186c6f957981237c0691db2269 (patch) | |
| tree | 684de37f923204e28db85f85b336b68d59dc58e9 /policy | |
| parent | e2474bc711c5534ab20949206c54eb364d9a8ac5 (diff) | |
| download | frameworks_base-9112ec3039dda4186c6f957981237c0691db2269.zip frameworks_base-9112ec3039dda4186c6f957981237c0691db2269.tar.gz frameworks_base-9112ec3039dda4186c6f957981237c0691db2269.tar.bz2  | |
Binding Pwr+VolDown to take screenshot.
Change-Id: I77b018538f6bc870f59df0b5336ba95f4582beec
Diffstat (limited to 'policy')
| -rwxr-xr-x | policy/src/com/android/internal/policy/impl/PhoneWindowManager.java | 56 | 
1 files changed, 56 insertions, 0 deletions
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index b52e7e1..ad6cebb 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -28,6 +28,7 @@ import android.content.ContentResolver;  import android.content.Context;  import android.content.Intent;  import android.content.IntentFilter; +import android.content.ServiceConnection;  import android.content.pm.ActivityInfo;  import android.content.pm.PackageManager;  import android.content.res.CompatibilityInfo; @@ -372,6 +373,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {      // What we do when the user long presses on home      private int mLongPressOnHomeBehavior = -1; +    // Screenshot trigger states +    private boolean mVolumeDownTriggered; +    private boolean mPowerDownTriggered; +      ShortcutManager mShortcutManager;      PowerManager.WakeLock mBroadcastWakeLock; @@ -2339,6 +2344,26 @@ public class PhoneWindowManager implements WindowManagerPolicy {          }      } +    private void takeScreenshot() { +        mHandler.post(new Runnable() { +            @Override +            public void run() { +                ComponentName cn = new ComponentName("com.android.systemui", +                        "com.android.systemui.screenshot.TakeScreenshotService"); +                Intent intent = new Intent(); +                intent.setComponent(cn); +                ServiceConnection conn = new ServiceConnection() { +                    @Override +                    public void onServiceConnected(ComponentName name, IBinder service) {} +                    @Override +                    public void onServiceDisconnected(ComponentName name) {} +                }; +                mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE); +                mContext.unbindService(conn); +            } +        }); +    } +      /** {@inheritDoc} */      @Override      public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) { @@ -2398,6 +2423,24 @@ public class PhoneWindowManager implements WindowManagerPolicy {          // Handle special keys.          switch (keyCode) {              case KeyEvent.KEYCODE_VOLUME_DOWN: +                if (down) { +                    // If the power key down was already triggered, take the screenshot +                    if (mPowerDownTriggered) { +                        // Dismiss the power-key longpress +                        mHandler.removeCallbacks(mPowerLongPress); +                        mPowerKeyHandled = true; + +                        // Take the screenshot +                        takeScreenshot(); + +                        // Prevent the event from being passed through to the current activity +                        result &= ~ACTION_PASS_TO_USER; +                        break; +                    } +                    mVolumeDownTriggered = true; +                } else { +                    mVolumeDownTriggered = false; +                }              case KeyEvent.KEYCODE_VOLUME_UP:              case KeyEvent.KEYCODE_VOLUME_MUTE: {                  if (down) { @@ -2478,6 +2521,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {              case KeyEvent.KEYCODE_POWER: {                  result &= ~ACTION_PASS_TO_USER;                  if (down) { +                    // If the volume down key has been triggered, then just take the screenshot +                    if (mVolumeDownTriggered) { +                        // Take the screenshot +                        takeScreenshot(); +                        mPowerKeyHandled = true; + +                        // Prevent the event from being passed through to the current activity +                        break; +                    } +                    mPowerDownTriggered = true; + +                      ITelephony telephonyService = getTelephonyService();                      boolean hungUp = false;                      if (telephonyService != null) { @@ -2499,6 +2554,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {                      }                      interceptPowerKeyDown(!isScreenOn || hungUp);                  } else { +                    mPowerDownTriggered = false;                      if (interceptPowerKeyUp(canceled)) {                          result = (result & ~ACTION_POKE_USER_ACTIVITY) | ACTION_GO_TO_SLEEP;                      }  | 
