Commit Graph

108 Commits

Author SHA1 Message Date
Jeff Brown
088663e846 am a829e166: Merge "Handle orientation changes more systematically. Bug: 4981385"
* commit 'a829e16681903e6a41901145195f88bf9d952f88':
  Handle orientation changes more systematically. Bug: 4981385
2011-09-21 21:11:37 -07:00
Jeff Brown
01a98ddbdf Handle orientation changes more systematically.
Bug: 4981385

Simplify the orientation changing code path in the
WindowManager.  Instead of the policy calling setRotation()
when the sensor determined orientation changes, it calls
updateRotation(), which figures everything out.  For the most
part, the rotation actually passed to setRotation() was
more or less ignored and just added confusion, particularly
when handling deferred orientation changes.

Ensure that 180 degree rotations are disallowed even when
the application specifies SCREEN_ORIENTATION_SENSOR_*.
These rotations are only enabled when docked upside-down for
some reason or when the application specifies
SCREEN_ORIENTATION_FULL_SENSOR.

Ensure that special modes like HDMI connected, lid switch,
dock and rotation lock all cause the sensor to be ignored
even when the application asks for sensor-based orientation
changes.  The sensor is not relevant in these modes because
some external factor (or the user) is determining the
preferred rotation.

Currently, applications can still override the preferred
rotation even when there are special modes in play that
might say otherwise.  We could tweak this so that some
special modes trump application choices completely
(resulting in a letter-boxed application, perhaps).
I tested this sort of tweak (not included in the patch)
and it seems to work fine, including transitions between
applications with varying orientation.

Delete dead code related to animFlags.

Handle pausing/resuming orientation changes more precisely.
Ensure that a deferred orientation change is performed when
a drag completes, even if endDragLw() is not called because the
drag was aborted before the drop happened.  We pause
the orientation change in register() and resume in unregister()
because those methods appear to always be called as needed.

Change-Id: If0a31de3d057251e581fdee64819f2b19e676e9a
2011-09-21 19:26:15 -07:00
Jason Simmons
8d3538d016 resolved conflicts for merge of 0799e951 to ics-aah
Change-Id: I4f968fa84aa395c63c28053ef0f489161530bf86
2011-09-20 14:36:22 -07:00
Dianne Hackborn
bc1aa7bbc7 Fix issue #5312624: Lock screen very flickery
The key thing was to fix isVisibleOrBehindKeyguardLw() so that it
wouldn't count a window as not visible if it was just currently
in the process of drawing due to an orientation change.

Also improve logic in deciding when to turn screen on to better ensure
the screen is in a stable state, in particular treating screen off
as a frozen screen and not allowing it to turn on until the
update of the screen due to any config change is done.

Change-Id: If82199f3773270b2d07f9c7de9da2dad8c7b28d7
2011-09-20 11:20:31 -07:00
Mike Lockwood
1e0207674d resolved conflicts for merge of 2f7d7c9b to ics-aah
Conflicts:
	policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

Change-Id: I851866d74ff9674bfb7ff652d8be65da342273c0
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-09-18 18:25:44 -04:00
Dianne Hackborn
38e29a61d0 Fix issue #5242779: Device not responding to touch on unlock screen
Rework how we decide when it is okay to turn on the screen by having
the policy call back to the power manager when it knows the lock screen
has been drawn.

Change-Id: Ie8f3f72111dcf7f168723e6dce24e0343b4afe5d
2011-09-18 14:52:52 -07:00
Dianne Hackborn
1a30857a89 am 09bd49a8: Fix issue #5328235: Wrong values for smallestScreenWidthDp
* commit '09bd49a8a74cafe7f03aee769bfe0748bf3c2b51':
  Fix issue #5328235: Wrong values for smallestScreenWidthDp
2011-09-16 00:16:48 -07:00
Dianne Hackborn
09bd49a8a7 Fix issue #5328235: Wrong values for smallestScreenWidthDp
Maybe.

Change-Id: I88dfde1626376b3003bdd7a8068c55545255851e
2011-09-15 19:12:01 -07:00
Dianne Hackborn
7b50e27ad2 am ca7b6568: Merge "Fix issue #5283365: Rotating the device to portrait mode, hides the keyboard partly"
* commit 'ca7b6568333e1446b8357a89f6bdf757fee29768':
  Fix issue #5283365: Rotating the device to portrait mode, hides the keyboard partly
2011-09-14 17:59:44 -07:00
Dianne Hackborn
1f903c3b57 Fix issue #5283365: Rotating the device to portrait mode, hides the keyboard partly
PhoneWindowManager now takes full responsibility for deciding where the
navigation bar goes.  This gets rid of a bunch of race conditions with
determining layout while the nav bar is moving itself at the same time
the window manager is computing a new configuration.

Note that this breaks the "nav bar on left" option.  The current nav
bar code could also be cleaned up some more to completely drive its
behavior based on onSizeChanged() happening during relayout.

Change-Id: I1651d74c3464ba0d588aab3049e099c78420146a
2011-09-14 17:56:40 -07:00
Mike Lockwood
1d29e2129f Fix problems dispatching media button events on headless devices
Change-Id: Ib0f8ca008c7e1325d5dc6f6534f08960c527eeac
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-09-13 16:29:38 -04:00
Dianne Hackborn
4c34eed9ab am 1cd955b0: Merge "Get rid of some animation flickers and other bad things."
* commit '1cd955b01d8ea72009be56f4c4a93d4d79e902df':
  Get rid of some animation flickers and other bad things.
2011-09-12 14:44:11 -07:00
Dianne Hackborn
d02a9e95f4 Get rid of some animation flickers and other bad things.
Change-Id: If7606286bf0bd01cf023d57719ccb27e39d5564c
2011-09-12 13:47:31 -07:00
Dianne Hackborn
54869071db am fe75cb34: Merge "Fix inflating of animations."
* commit 'fe75cb342e33e7c465709bb34ab7abae9e9871f6':
  Fix inflating of animations.
2011-09-11 13:09:40 -07:00
Dianne Hackborn
8962028b6e Fix inflating of animations.
Need to define attributes for animation set, to have correct indices.

Also small fixes elsewhere.

Change-Id: If596147e8aee4ebffe4e184872070341eff6df73
2011-09-11 12:47:45 -07:00
Dianne Hackborn
569857cd44 am 4ee36669: Merge "Fix issue #5263361: Browser instance not created in application picker"
* commit '4ee366690111e5f71a248a2af10301db425162d5':
  Fix issue #5263361: Browser instance not created in application picker
2011-09-08 10:41:59 -07:00
Dianne Hackborn
905577f634 Fix issue #5263361: Browser instance not created in application picker
The resolver activity was hiding the following activity from recents.

Also some other fixes: a little better memory use debugging, removed
some unneeded code from window manager, moved some system activities
into their own process, added some more running process information for
manage apps.

Change-Id: I66687d16989ff965d524b92dc360f37c19199717
2011-09-08 10:35:11 -07:00
Dianne Hackborn
0d772c766f am 7de6578f: Merge "Fix issue #4974633: Block the HOME button using TYPE_KEYGUARD"
* commit '7de6578f1c4bf97c9f856f819d4985d25163012a':
  Fix issue #4974633: Block the HOME button using TYPE_KEYGUARD
2011-09-01 16:54:31 -07:00
Dianne Hackborn
7cbbb8b1a3 am 69666e07: Merge "Fix issue #5229575: Youtube link shared through messaging is not..."
* commit '69666e078152362b19d02d9ee79bbd5fc69e09c3':
  Fix issue #5229575: Youtube link shared through messaging is not...
2011-09-01 16:54:23 -07:00
Dianne Hackborn
7de6578f1c Merge "Fix issue #4974633: Block the HOME button using TYPE_KEYGUARD" 2011-09-01 15:56:36 -07:00
Dianne Hackborn
ba24e4d8bb Fix issue #5229575: Youtube link shared through messaging is not...
...opening after selecting option "Youtube" as a luncher.

Also:

* Tweak window animations so that the wallpaper exist animations do not
stop too early (causing the wallpaper to suddenly disappear).
* Make sure no input is being processed while booting, to avoid
accidentally doing things especially in the upgrade dialog.
* Some other small cleanup.

Change-Id: I40a6b53731991d4e31ac4502e3d85f0e47507481
2011-09-01 12:39:17 -07:00
Dianne Hackborn
0e60db221c Fix issue #4974633: Block the HOME button using TYPE_KEYGUARD
Applications shouldn't be able to change their window type after
the window is added to the window manager.

Change-Id: Iac63da65f96fb30683f68f8d89c3fd29199a750c
2011-09-01 11:17:57 -07:00
Dianne Hackborn
8aab8b5759 am 1434ab98: Merge "Use floating point window positions."
* commit '1434ab98e690cbcfcdcd2296b491a44bff14cc55':
  Use floating point window positions.
2011-08-31 14:22:37 -07:00
Dianne Hackborn
d040edbae9 Use floating point window positions.
Gets rid of gapps between windows during animations.

Change-Id: I17d2ef0af214008f0eabd7eb19268f145fe83b39
2011-08-31 14:18:32 -07:00
Jeff Brown
79753f387a am 9d4bc852: Merge "Fix input channel leak. Bug: 5156144"
* commit '9d4bc852ea459c2a4347a87ce0357b3328a25db8':
  Fix input channel leak. Bug: 5156144
2011-08-31 13:03:26 -07:00
Jeff Brown
9d4bc852ea Merge "Fix input channel leak. Bug: 5156144" 2011-08-31 13:01:16 -07:00
Jeff Brown
cc4f7db698 Fix input channel leak.
Bug: 5156144

Input channels could leak or simply live longer than they should
in some cases.

1. Monitor channels (used by the pointer location overlay) are never
   unregistered, so they would leak.

   Added code to handle failures in the receive callback by closing
   the input channel.

2. The DragState held onto its input window and application handles
   even after the input channel was disposed.

   Added code to null these handles out when they are no longer needed.

3. Input channels previously used as input event targets would stick
   around until the targets were cleared (usually on the next
   event).

   Added code to detect when the input dispatcher is in
   an idle state and to proactively clear the targets then
   to ensure that resources are released promptly.

4. Native input window handles held onto the input channel even
   after the input window was removed from the input dispatcher.
   Consequently, the input channel would not be disposed until
   the input window handle itself was freed.  Since the input
   window handle is held from managed code, this meant that the
   window's input channel could stick around until the next GC.

   Refactored the input window handle to separate the properties
   (info) and identify (handle) state into different objects.
   Then modified the dispatcher to release the properties (info)
   when no longer needed, including the input channel.

7. The pointer location overlay does not actually use its
   standard input channel, only the monitor input channel.

   Added INPUT_FEATURE_NO_INPUT_CHANNEL to allow windows to
   request that they not be provided with an input channel
   at all.

Improved some of the error handling logic to emit the status
code as part of the exception message.

Change-Id: I01988d4391a70c6678c8b0e936ca051af680b1a5
2011-08-30 21:40:28 -07:00
Dianne Hackborn
9a3fe4744e am 9c93db60: Merge "Fix issues #5233826 and #5209847 -- live wallpapers."
* commit '9c93db60e6d9172e1957e5e31a6c5b82e2494420':
  Fix issues #5233826 and #5209847 -- live wallpapers.
2011-08-30 15:50:35 -07:00
Dianne Hackborn
9e4e727b4a Fix issues #5233826 and #5209847 -- live wallpapers.
5233826	when a live wallpaper starts, it does so regardless of its visibility

The WallpaperService is now very forceful about telling a wallpaper it is
not visible when it first starts.

5209847	Make launcher turn off the wallpaper in all apps.

Fix a bug in the window manager that would not correctly handle the wallpaper
flag changing.

Change-Id: Ie3314043a84664be72a1304a1705408efd789a15
2011-08-30 14:56:31 -07:00
Adam Powell
dfab05095f am 63543e29: Merge "Fix bug 5133509 - Align holo menu panel windows along the bottom of the screen"
* commit '63543e299764ac5a904dadd8b45e9ce301ea1023':
  Fix bug 5133509 - Align holo menu panel windows along the bottom of the screen
2011-08-28 17:00:19 -07:00
Adam Powell
67ed6c7224 Fix bug 5133509 - Align holo menu panel windows along the bottom of
the screen

Alter preferred options panel gravity policy.

Integrate new menu panel assets for holo apps.

Change-Id: I9fa98ed9359148ea6d1f1d1e727ddcd437b16e2f
2011-08-28 13:23:02 -07:00
Dianne Hackborn
42a6f9e002 am 2da59ffb: Merge "Fix issue #5192141: systemui asplodes after enough tapping on the windowlist button"
* commit '2da59ffbda80594e6312f400341810f91e1d333a':
  Fix issue #5192141: systemui asplodes after enough tapping on the windowlist button
2011-08-25 13:06:03 -07:00
Jason Simmons
df6bb0a7ee resolved conflicts for merge of 33264596 to ics-aah
Change-Id: I1b0b2c3a63d97d49940666ceec71293bdbab4e2e
2011-08-25 09:57:48 -07:00
Dianne Hackborn
cfb9f2bca3 Fix issue #5192141: systemui asplodes after enough tapping on the windowlist button
Change-Id: I5afb2d54b531d9eac9435660616579324f239812
2011-08-24 12:06:15 -07:00
Dianne Hackborn
29aae6f36e Fix issue #4279860: previous UI flashes before showing lock screen...
...(when turning display on after recently turning it off)

Also clean up when we decide to turn the screen on to improve that
transition.  There are still problems here with turning it on
before the wallpaper gets dispayed.

Change-Id: I2bc56c12e5ad75a1ce5a0546f43a845bf0823e66
2011-08-23 17:44:52 -07:00
Jason Simmons
4fbb071fe8 resolved conflicts for merge of 661cd52e to ics-aah
Change-Id: I5eb4154ab969a5367e9f597595c09b5e499174d0
2011-08-22 16:39:16 -07:00
Dianne Hackborn
661cd52e0e Add progress dialog for booting after an upgrade.
This introduces a new facility for code during the boot process
to display messages to the user through a progress dialog.  This
is only for use when performing longer-than-usual post-upgrade
operations such as running dexopt on applications or upgrading
databases.

Change-Id: I0e78439ccec3850fb67872c22f235bf12a158dae
2011-08-22 13:42:05 -07:00
Christopher Tate
f7a14376e2 am 755bd67a: Merge "Don\'t crash if a drag recipient throws an uncaught exception"
* commit '755bd67a5081727ae1bbee2d39863b464a8b4f35':
  Don't crash if a drag recipient throws an uncaught exception
2011-08-16 17:05:33 -07:00
Christopher Tate
d9be36c897 Don't crash if a drag recipient throws an uncaught exception
There turn out to be two distinct bugs leading to runtime restarts.

The first, dating from at least Android 3.1, is that following certain kinds
of app crashes we properly clean up the drag-state bookkeeping, but aren't
prepared in the case of the drag-target timeout clock firing with a now-
null drag state in effect.  We now catch that edge condition and don't NPE
(and note that there was already similar code around the separate timeout
when an app is *starting* the drag process).

The second bug is that some new-in-ICS code in the input channel management
wasn't prepared for certain cases where the current touch window could have
become unusable and its input channel torn down summarily in the case of the
aforesaid app crash during drag.  The code now makes sure that there really
is an input channel that needs to be flushed / cancelled prior to attempting
that operation.

Fixes bug 5173534

Change-Id: Idaae158ecfb4b93456ab1425769b669962893c00
2011-08-16 16:09:33 -07:00
Mike Lockwood
1c40327c7c Add headless mode for running the framework without the surface flinger
Enabled by setting system property ro.config.headless to 1
This will allow the framework to run without starting activities,
system UI and the keyguard.
Framework can still run services, content providers and broadcast receivers.

Change-Id: I507d461f937f9ae4e0cfc1067d66b83e58904d54
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-08-15 18:22:21 -07:00
Jeff Brown
8b65c902ee Merge "Use PARCELABLE_WIRTE_RETURN_VALUE flag in InputChannel. Bug: 5161290" 2011-08-14 20:13:19 -07:00
Jeff Brown
0a0ab128a6 Use PARCELABLE_WIRTE_RETURN_VALUE flag in InputChannel.
Bug: 5161290

Replace mDisposeAfterWriteToParcel with code that takes advantage
of the standard Parcel API support for releasing resources after
writing a Binder reply.

This change makes it less likely that InputChannels will leak
accidentally when passed across a Binder.

Change-Id: Id37706e7b88d074e8e4ac687c88f0db8963200f2
2011-08-12 18:08:08 -07:00
Dianne Hackborn
7c0d8472d0 Merge "Fix some crashes that are happening in the system process." 2011-08-12 15:22:32 -07:00
Dianne Hackborn
8e8d65ff5f Fix some crashes that are happening in the system process.
- When shutting down, if the screen goes to sleep there is code
  that tries to do a notifyAll without holding the lock:

java.lang.IllegalMonitorStateException: object not locked by thread before notifyAll()
	at java.lang.Object.notifyAll(Native Method)
	at com.android.server.am.ActivityStack.checkReadyForSleepLocked(ActivityStack.java:776)
	at com.android.server.am.ActivityStack$1.handleMessage(ActivityStack.java:282)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at com.android.server.ServerThread.run(SystemServer.java:603)

- If an invalid Uri object is sent to the system process it can crash because
  the Uri class throws an assertion while unmarshalling.  Change this to an
  IllegalArgumentException so it gets sent back to the caller:

java.lang.AssertionError
	at android.net.Uri$PathPart.readFrom(Uri.java:2224)
	at android.net.Uri$HierarchicalUri.readFrom(Uri.java:1106)
	at android.net.Uri$1.createFromParcel(Uri.java:1689)
	at android.net.Uri$1.createFromParcel(Uri.java:1681)
	at android.content.IContentService$Stub.onTransact(IContentService.java:53)
	at android.content.ContentService.onTransact(ContentService.java:120)
	at android.os.Binder.execTransact(Binder.java:338)
	at dalvik.system.NativeStart.run(Native Method)

- StrictMode can try to access the first index in the stack crawl of a stack crawl
  array of length 0.  Not sure why this happens, but make the code more robust:

java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
	at android.app.ApplicationErrorReport$CrashInfo.<init>(ApplicationErrorReport.java:341)
	at android.os.StrictMode$ViolationInfo.<init>(StrictMode.java:1978)
	at android.os.StrictMode$AndroidBlockGuardPolicy.startHandlingViolationException(StrictMode.java:1097)
	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1068)
	at libcore.io.BlockGuardOs.read(BlockGuardOs.java:137)
	at libcore.io.IoBridge.read(IoBridge.java:426)
	at java.io.FileInputStream.read(FileInputStream.java:179)
	at java.io.InputStream.read(InputStream.java:148)
	at com.android.internal.os.ProcessStats.readFile(ProcessStats.java:804)
	at com.android.internal.os.ProcessStats.getCpuSpeedTimes(ProcessStats.java:564)
	at com.android.internal.os.ProcessStats.getLastCpuSpeedTimes(ProcessStats.java:545)
	at com.android.server.am.ActivityManagerService.updateCpuStatsNow(ActivityManagerService.java:1470)
	at com.android.server.am.ActivityManagerService.batteryNeedsCpuUpdate(ActivityManagerService.java:1522)
	at com.android.internal.os.BatteryStatsImpl$MyHandler.handleMessage(BatteryStatsImpl.java:110)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at com.android.server.am.ActivityManagerService$AThread.run(ActivityManagerService.java:1302)

(Also fix this code to not cause strict mode to trigger at all, because there is
no need, because this is just reading stuff from /proc.)

- The system seems to crash during boot if it thinks it needs to rotate
  the screen, when it is trying to take the freeze snapshot way too early.
  There is no need to freeze the screen during boot or if the screen is off:

java.lang.NullPointerException
	at android.view.Surface.init(Native Method)
	at android.view.Surface.<init>(Surface.java:256)
	at com.android.server.wm.ScreenRotationAnimation.<init>(ScreenRotationAnimation.java:91)
	at com.android.server.wm.WindowManagerService.startFreezingDisplayLocked(WindowManagerService.java:8758)
	at com.android.server.wm.WindowManagerService.startAppFreezingScreenLocked(WindowManagerService.java:3971)
	at com.android.server.wm.WindowManagerService.startAppFreezingScreen(WindowManagerService.java:4003)
	at com.android.server.am.ActivityRecord.startFreezingScreenLocked(ActivityRecord.java:515)
	at com.android.server.am.ActivityStack.ensureActivityConfigurationLocked(ActivityStack.java:3997)
	at com.android.server.am.ActivityManagerService.updateConfigurationLocked(ActivityManagerService.java:12535)
	at com.android.server.am.ActivityManagerService.updateConfiguration(ActivityManagerService.java:12439)
	at com.android.server.wm.WindowManagerService.systemReady(WindowManagerService.java:6161)
	at com.android.server.ServerThread.run(SystemServer.java:521)

Change-Id: I85062bb5f6b0909a0f52feedaa75e7611d9d7fbd
2011-08-12 14:20:59 -07:00
Michael Jurka
e99adc70c8 On device startup, be in touch mode
- Solves bug where an icon showed focus state on startup in Launcher. Once the keyboard arrows are used, Launcher enters non-touch mode as usual

Change-Id: I0080f3b72f6c22833c600a1026af0abc35024510
2011-08-11 18:28:01 -07:00
Dianne Hackborn
a44abeb125 Improve window manager debug output.
Cleaned this up while I was debugging another issue.

Change-Id: I0663b9ed581c6868b59655a0f994d870971ec1a6
2011-08-08 19:24:28 -07:00
Dianne Hackborn
7d608423b7 Move OOM kernel settings to activity manager.
The activity manager now take care of plugging the correct settings
into the OOM killer in the kernel.  This is a lot cleaner because
it is really central to how the activity manager works, and nobody
else cares about them.

Taking advantage of this, the activity manager computes what it
thinks are appropriate OOM levels based on the RAM and display
size of the device.

Also a small optization to the package manager to keep a binding
to the package install helper for a bit after done using it, to
avoid thrashing on it.

And some new APIs that are now needed by Settings.

Change-Id: I2b2d379194445d8305bde331c19bde91c8f24751
2011-08-07 20:20:56 -07:00
Adam Powell
dfee59afb3 Fix bug 5011824 - New Holo overflow menu for physical menu key devices
The new Holo-style overflow menu now appears from the edge of the screen
where the device's physical menu key can be found. The policy determining
this lives in getPreferredOptionsPanelGravity() in WindowManagerService.

Change-Id: I8851a2265547156591e82044e50b5cfc58d3eefa
2011-08-07 14:17:30 -07:00
Dianne Hackborn
6311d0a079 Clear the bitmap from the canvas in a lot of places.
Change-Id: I6b2071ac7b348c473b9bdd1b972d095aebbb4fb3
2011-08-02 16:37:58 -07:00
Jeff Brown
bc68a59c02 Report the external display size to the input reader.
The input reader needs this information so that it knows how to
interpolate touches on an external touch screen.

Changed Display so that it asks the WindowManager what the real
display size is (as opposed to the raw display size).  This means
it now takes into the forced display size set by
adb shell am display-size.

Replaced all calls to getRealWidth() / getRealHeight() /
getRealMetrics() in the WindowManager and replaced them with direct
usages of the mCurDisplayWidth / mCurDisplayHeight so that the WM
doesn't end up making a reentrant Binder call into itself.

Fixed the table status bar HeightReceiver so that it updates the
height on all configuration changes since it is possible that the
display size changed independently of an external HDMI display
being plugged / unplugged.

Improved the Display class documentation to make the distinctions
betweeen the various sizes clearer.

Change-Id: I3f75de559d3ebffed532ab46c4ae52c5e7f1da2b
2011-07-25 20:10:12 -07:00