Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a9453de authored by The Android Open Source Project's avatar The Android Open Source Project
Browse files

auto import from //branches/cupcake/...@131421

parent 67826416
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -340,7 +340,6 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM
    }

    public void onOrientationChange(boolean inPortrait) {
	mCallback.pokeWakelock();
    }

    public void onKeyboardChange(boolean isKeyboardOpen) {
+4 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.util.EventLog;
import android.util.Log;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -164,6 +165,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                case MSG_MENU_LONG_PRESS: {
                    if (mPanelChordingKey == 0) return;
                    mPanelChordingKey = 0;
                    mDecor.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
                    InputMethodManager imm = (InputMethodManager)
                            getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm != null) {
@@ -173,6 +175,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                case MSG_CALL_LONG_PRESS: {
                    if (!mKeycodeCallTimeoutActive) return;
                    mKeycodeCallTimeoutActive = false;
                    mDecor.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
                    // launch the VoiceDialer
                    Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -186,6 +189,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                case MSG_CAMERA_LONG_PRESS: {
                    if (!mKeycodeCameraTimeoutActive) return;
                    mKeycodeCameraTimeoutActive = false;
                    mDecor.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
                    // Broadcast an intent that the Camera button was longpressed
                    Intent intent = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
                    intent.putExtra(Intent.EXTRA_KEY_EVENT, (KeyEvent) msg.obj);
+82 −41
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import android.util.Config;
import android.util.EventLog;
import android.util.Log;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.IWindowManager;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -86,12 +87,10 @@ import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import android.view.WindowManagerImpl;
import android.view.WindowManagerPolicy;
import android.view.WindowManagerPolicy.WindowState;
import android.media.IAudioService;
import android.media.AudioManager;

import java.util.Observable;
import java.util.Observer;

/**
 * WindowManagerPolicy implementation for the Android phone UI.
 */
@@ -139,8 +138,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
    static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";

    // Vibrator pattern for indicating when the orientation has changed
    private static final long[] VIBE_PATTERN = {0, 1, 40, 41};
    // Vibrator pattern for haptic feedback of a long press.
    private static final long[] LONG_PRESS_VIBE_PATTERN = {0, 1, 40, 41};
    // Vibrator pattern for haptic feedback of a zoom ring tick
    private static final long[] ZOOM_RING_TICK_VIBE_PATTERN = {0, 1, 40, 41};
    
    Context mContext;
    IWindowManager mWindowManager;
@@ -276,7 +277,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    // it needs to call back and get the sensor orientation.
                    mSensorRotation = rotation;
                    try {
                        mWindowManager.setRotation(USE_LAST_ROTATION, false);
                        mWindowManager.setRotation(rotation, false);
                    } catch (RemoteException e) {
                        // Ignore
                    }
@@ -298,6 +299,26 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        return false;
    }
    
    boolean needSensorRunning() {
        if(mCurrentAppOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR) {
            // If the application has explicitly requested to follow the
            // orientation, then we need to turn the sensor or.
            return true;
        }
        if (mAccelerometerDefault != 0) {
            // If the setting for using the sensor by default is enabled, then
            // we will always leave it on.  Note that the user could go to
            // a window that forces an orientation that does not use the
            // sensor and in theory we could turn it off... however, when next
            // turning it on we won't have a good value for the current
            // orientation for a little bit, which can cause orientation
            // changes to lag, so we'd like to keep it always on.  (It will
            // still be turned off when the screen is off.)
            return true;
        }
        return false;
    }
    
    /*
     * Various use cases for invoking this function
     * screen turning off, should always disable listeners if already enabled
@@ -316,12 +337,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                ", SensorEnabled="+mOrientationSensorEnabled);
        boolean disable = true;
        if(mScreenOn) {
            if(useSensorForOrientation()) {
            if(needSensorRunning()) {
                disable = false;
                //enable listener if not already enabled
                if(!mOrientationSensorEnabled) {
                    mOrientationListener.enable();
                    if(localLOGV) Log.i(TAG, "Enabling listeners");
                    // We haven't had the sensor on, so don't yet know
                    // the rotation.
                    mSensorRotation = -1;
                    mOrientationSensorEnabled = true;
                }
            } 
@@ -330,6 +354,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if(disable && mOrientationSensorEnabled) {
            mOrientationListener.disable();
            if(localLOGV) Log.i(TAG, "Disabling listeners");
            mSensorRotation = -1;
            mOrientationSensorEnabled = false;
        }
    }
@@ -337,6 +362,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    Runnable mEndCallLongPress = new Runnable() {
        public void run() {
            mShouldTurnOffOnKeyUp = false;
            performHapticFeedback(null, HapticFeedbackConstants.LONG_PRESS, false);
            sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
            showGlobalActionsDialog();
        }
@@ -370,6 +396,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
             * the user lets go of the home key
             */
            mHomePressed = false;
            performHapticFeedback(null, HapticFeedbackConstants.LONG_PRESS, false);
            sendCloseSystemWindows(SYSTEM_DIALOG_REASON_RECENT_APPS);
            showRecentAppsDialog();
        }
@@ -477,16 +504,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        config.hardKeyboardHidden = lidOpen
            ? Configuration.KEYBOARDHIDDEN_NO
            : Configuration.KEYBOARDHIDDEN_YES;
        if (keyguardIsShowingTq()) {
            if (mLidOpen) {
                // only do this if it's opening -- closing the device shouldn't turn it
                // off, but it also shouldn't turn it on.
                mKeyguardMediator.pokeWakelock();
            }
        } else {
            mPowerManager.userActivity(SystemClock.uptimeMillis(), false,
                    LocalPowerManager.OTHER_EVENT);
        }
    }
    
    public boolean isCheekPressedAgainstScreen(MotionEvent ev) {
@@ -595,11 +612,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {

        win.setType(
            WindowManager.LayoutParams.TYPE_APPLICATION_STARTING);
        // Force the window flags: this is a fake window, so it is not really
        // touchable or focusable by the user.  We also add in the ALT_FOCUSABLE_IM
        // flag because we do know that the next window will take input
        // focus, so we want to get the IME window up on top of us right away.
        win.setFlags(
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE|
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
            WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE|
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
            WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

        win.setLayout(WindowManager.LayoutParams.FILL_PARENT,
                            WindowManager.LayoutParams.FILL_PARENT);
@@ -965,7 +988,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            pf.bottom = df.bottom = vf.bottom = displayHeight;
            
            mStatusBar.computeFrameLw(pf, df, vf, vf);
            if (mStatusBar.isDisplayedLw()) {
            if (mStatusBar.isVisibleLw()) {
                // If the status bar is hidden, we don't want to cause
                // windows behind it to scroll.
                mDockTop = mContentTop = mCurTop = mStatusBar.getFrameLw().bottom;
@@ -1210,6 +1233,22 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    // lid changed state
                    mLidOpen = event.value == 0;
                    updateRotation();
                    if (keyguardIsShowingTq()) {
                        if (mLidOpen) {
                            // only do this if it's opening -- closing the device shouldn't turn it
                            // off, but it also shouldn't turn it on.
                            mKeyguardMediator.pokeWakelock();
                        }
                    } else {
                        // Light up the keyboard if we are sliding up.
                        if (mLidOpen) {
                            mPowerManager.userActivity(SystemClock.uptimeMillis(), false,
                                    LocalPowerManager.BUTTON_EVENT);
                        } else {
                            mPowerManager.userActivity(SystemClock.uptimeMillis(), false,
                                    LocalPowerManager.OTHER_EVENT);
                        }
                    }
                }
        }
        return false;
@@ -1556,11 +1595,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        } else {
            if (useSensorForOrientation()) {
                // If the user has enabled auto rotation by default, do it.
                int rotation = mSensorRotation >= 0 ? mSensorRotation : Surface.ROTATION_0;
                if (displayEnabled && rotation != lastRotation) {
                    mVibrator.vibrate(VIBE_PATTERN, -1);
                }
                return rotation;
                return mSensorRotation >= 0 ? mSensorRotation : lastRotation;
            }
            return Surface.ROTATION_0;
        }
@@ -1617,22 +1652,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        } catch (RemoteException e) {
            // Ignore
        }
        if (keyguardIsShowingTq()) {
            if (mLidOpen) {
                // only do this if it's opening -- closing the device shouldn't turn it
                // off, but it also shouldn't turn it on.
                mKeyguardMediator.pokeWakelock();
            }
        } else {
            // Light up the keyboard if we are sliding up.
            if (mLidOpen) {
                mPowerManager.userActivity(SystemClock.uptimeMillis(), false,
                        LocalPowerManager.BUTTON_EVENT);
            } else {
                mPowerManager.userActivity(SystemClock.uptimeMillis(), false,
                        LocalPowerManager.OTHER_EVENT);
            }
        }
    }

    /**
@@ -1668,4 +1687,26 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            updateOrientationListener();
        }
    }
    
    public boolean performHapticFeedback(WindowState win, int effectId, boolean always) {
        if (!always && Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) == 0) {
            return false;
        }
        switch (effectId) {
            case HapticFeedbackConstants.LONG_PRESS:
                mVibrator.vibrate(LONG_PRESS_VIBE_PATTERN, -1);
                return true;
            case HapticFeedbackConstants.ZOOM_RING_TICK:
                mVibrator.vibrate(ZOOM_RING_TICK_VIBE_PATTERN, -1);
        }
        return false;
    }
    
    public void screenOnStopped() {
        if (!mKeyguardMediator.isShowing()) {
            long curTime = SystemClock.uptimeMillis();
            mPowerManager.userActivity(curTime, false, LocalPowerManager.OTHER_EVENT);
        }
    }
}