hwui: Fix a sporadic crash seen during CTS runs

 * It's possible (due to race conditions) that a patch might be
   scheduled for removal twice. Just print a warning and continue
   instead of asserting and crashing.

Change-Id: I42865f6717816a743cc49ba15b839e6c3b57ed83
Fix attribute resolution in theme lookup

[Fixes Known Issues]
1. (CM) Chrome beta crashing w/ Hexo applied and menu button is pressed.
2. (AOSP) TextAppearance - fontFamily attr is incorrect (looked up in wrong package!) when
    a string value is defined in a style, and that style is set as the app's theme.

[Terminology]
1) Theme:    is the standard android definition of a theme.
             e.g in your manifest you may set android:theme="@style/foo"
2) CM-Theme: will be a Cyanogen theme. e.g. "Hexo"

3) Block: Also called index. Can be considered the cookie or ID to lookup a package in the resources.
          When a CM-Theme is applied, block 0 is framework, block 1 is the app, and block 2 is the
          CM-Theme.

[Background]
When a value for an attribute has not been found, the last resort is to look at a theme's base value.
This is done by using theme->getAttribute(...) which will return the value. The value is
unresolved if its a reference type. The block value will also be returned.

Since the value may be a reference and therefore unresolved, a call is then made to
ResTable::resolveReference(..) to do the final resolution. As part of its input, resolveReference
takes a block as a starting point.

In the case where resolveReference(...) is asked to resolve something that is not a reference,
for example, a string type, then it will simply return the same value and block. *Important* The block
value is then saved for the next call to get an attribute value. So if this block value is wrong
it will remain incorrect.

Therefore if resolveReference is passed the wrong starting block with a string value, then the wrong
block will be returned.

[Example]
1. 0x0101009b (android:attr/textColorLink) is first attribute to be looked up.
2. textColorLink has a value of 0x01020123 which maps to theme id 0x01020111. The block for theme
is "2" so block is set to 2. The value for this attribute is put into the array.
3. 0x010103ac (android:attr/fontFamily) is the next attribute to be looked up.
4. fontFamily is found in the theme as type string. The value is 0x7b9 (1977) and newblock variable
   is set to 1 since this value is found in the app's string pool. The block variable still == 2.
5. resolveReference() is called with block=2. The function does nothing and returns block=2.
   The fontFamily thus is stored wtih value=1977 and a block value of "2" instead of "0".

Change-Id: I2b979911b1b8ffb79c4cf310ae60682c84c11fcb
[1/2] Base: Squashed commits for 4.4 active display

Add active display to ChameleonOS [1/2]
Change-Id: I51c17cec33b65dc60111a10c5ca2c449596ebe63

Correct active display settings naming
Change-Id: Ibfa2d41eed01d8987df52f013b111a0ce4e70739

Active display: Add options for date and am/pm [1/2]
Change-Id: Idc09772829cc6aa9bcfb064459fb3557c7b37f6b

Active display: Add sunlight mode. [1/2]
Change-Id: I541e74c5a1a7e6ce5028ab00cf998bba1d4fe0f9

Delay hiding systemui by 100ms
Change-Id: Iad432f75195983837d643fa38495e6beb54f3e22

Active display: make sure mNotificaiton is set correctly
Change-Id: I4111ca843e340cca4d6dac4b2c2922ce3039e487

Active display: register/unregister recievers and listeners when enabled/disabled
Change-Id: Ic73e63da2c9634bc864ab1a1387eb9145eb0b5b0

Active display: Unify (un)registering callbacks and add proper checks.
Change-Id: Ie4c4660a54d2c60831f7a3bcc66b3a9ca1d035f2

Active display: allow hiding low priority notifications. [1/2]
Change-Id: I4831d6864b509e62b449c25619c59f5d6760ec47

Active display: Enable proximity sensor only when screen is off
Change-Id: I70979b5931815adb74bd8bc42e32886a6d829a12

Active display: Use a default notificaiton icon.
Change-Id: I4087ef3e407cf976f7bfb2bb89f850641101bc73

Active display: Only fetch next notification if mNotification is null.
Change-Id: Ife8511d4a4b8c448bc7aa8997a250068bec5fae7

Active display: Don't show active display if call state is not idle.
Change-Id: I2cb79e097ae24dc6ad6c8a33be88eb19f7d8d235

Active display: Allow apps to be excluded from being displayed [1/2]
Change-Id: I5c334833b78325733ae076c07afccebb02758ead

4.4 implementation of active display

Settings: https://gerrit.omnirom.org/#/c/2586/
OmniGears: https://gerrit.omnirom.org/#/c/2584/
Change-Id: I08330a28d0880f82c09ccaec7e36844d9e6570d5
Active display: Ability to turn off the screen, when a not clearable notification is present

Removing the last clearable notification in AD turns of the screen. But if there is a not clearable notification, there is no ability to turn it off directly.
This patch adds a power target on place of the 'clear notification' target of AD.

Change-Id: I807cca4c293ed732b441cfdcca50957b427809fa
[1/2] Base: Pimp up ActiveDisplay

This is a squashed commit of the following:

- Active display: turn off display if device gets pocketed again
  https://github.com/CyanKang/android_frameworks_base/commit/3c139633e2cb341452320207e93fd10b480b65ed

- Active display: Option to change display timeout
  https://github.com/CyanKang/android_frameworks_base/commit/31a3c7dced93bda9501915ea87f28f8fd541b650

- Active display: Add some log output
  https://github.com/CyanKang/android_frameworks_base/commit/5be6bd59c27b0994b2459e4fe360d35c43349929

- Active display: Add threshold to proximity sensor
  https://github.com/CyanKang/android_frameworks_base/commit/fc4561bf1e78d656e37b6bc51340767e1ffa03f6

  Display will only be activated if the proximity sensor was covered for 5 seconds or more.

OmniGears part: https://gerrit.omnirom.org/#/c/2818/

Change-Id: Ib934157da195eb307c3c852de3d0549ad06bd004
[1/2] Base: Fix pimp up ActiveDisplay

This is a fix for the new features added with change: https://gerrit.omnirom.org/#/c/2819/

1. Fix the bug when Pocket mode is set to Notifications only and you
unlock your device with power key and if you put your hands over
proximity sensor the device will turn off (very annoying). The problem
was that mWakedByPocketMode it was put in wrong place.

2. Added an option in active display settings for "turn off display if
device gets pocketed again" (it's annoying for me, because i cover
the proximity very often).

3. Added an option in active display settings for proximity threshold.
I use this active display feature as an replacement for "sweep2wake",
and when my phone it's on the table, i just want to pass my hand over
it to show me the clock or notification (this was ok before the pimp up
commit), and now, you can choose how many seconds for proximity
threshold.

Practicaly, this commit fix one bug, and add settings for the
features added in 'pimp up' commit.

[2/2] part: https://gerrit.omnirom.org/#/c/3381/

Change-Id: I9e49ddb89002699714dcc3b3d2b1df87dc4bab4b
base: ActiveDisplay: fix for disappearing notification bar

What a derp
http://jira.omnirom.org/browse/OMNI-158
http://jira.omnirom.org/browse/OMNI-101

PS2
dont do it on secure lockscreens

PS4
check if lookscreen is enabled

Change-Id: Idf7fd7c15fcd87e2efb62f0a234e15f1df1921e8
Base: Fix ActiveDisplay problem

follow kitkat changes
fix ActiveDisplay never disabled after using turn off display option

Change-Id: I1d178875c2643e872da40cae9781313fca53a6a5
Base: Fix for fix ActiveDisplay (Emergency)

this an emergency fix for last patch was merger

using another logic to determine, when need to hide Statusbar and Navigationbar
we dont want systemui visibility reset if lockscreen still enable and ActiveDisplay force to Turn Off

Correct ActiveDisplay visibility when launch Ongoing Notifications

fix Back button navbar cant work on some conditions

since AD detect User Activity, we dont want to override UserActivity inside View, so do only if AD visibilty are Gone

also add patch to keyguard, do not reset if ActiveDisplay visibility Visible
taken from Lockscreen Notification by David L.-W <david.leppla.weber@gmail.com>

Change-Id: I9d4001870db28ee04bdd622fa7147543b658251f
Base: ActiveDisplay check for Immersive Mode Enable

As we know, Immersive Mode will force StatusBar and NavigationBar to Hide
while ActivieDisplay always setSystemUiVisibility flags for Both if enabled,
and will cause a conflict for that flags

// how to reproduce bug:
// set ImmersiveMode enable
// set ActiveDisplay enable
// Turn Off screen, swipe to sensor, ActiveDisplay showing
// Turn Off screen again (using Power button)
// Turn On screen (using Power button)
// pull Quicksettings, disable ImmersiveMode from ImmersiveTile
// Turn Off screen again, swipe to sensor, ActiveDisplay showing
// unlock via ActiveDisplay
// voila.... random flags will be set into setSystemUiVisibility
// (sometimes navbar or statusbar or both are gone)

lets make ActiveDisplay check for ImmersiveMode enable/disable,
so ActiveDisplay will not always setSystemUiVisibility flags
if ImmersiveMode enable

also workaround fix for unknown icon (?) sometimes appears
(if Show All Notification enabled)
(based from user report at XDA thread, why they always report there not in JIRA :/)

Change-Id: I550143864d387d7725c018f084e253c1e47cc3c0
Active display: Respect Quiet Hours

PS2: Use QuietHoursHelper

PS4: Fix PS3

Change-Id: Iba6f339e8073fa28ee6b96a6b889cd3faf724111
Base: more fix Active Display

fix http://jira.omnirom.org/browse/OMNI-352
fix http://jira.omnirom.org/browse/OMNI-357

Change-Id: Ibdd9617ce472213520261358bb6b77e9ff5eb523
Base: more fix Active Display (again)

maybe fix
http://jira.omnirom.org/browse/OMNI-313
http://jira.omnirom.org/browse/OMNI-421
http://jira.omnirom.org/browse/OMNI-401

Change-Id: Id947e18a9299200f1ccd41aa70e56534fdbb4b57
Base: Disable proximity sensor when screen goes on in ActiveDisplay/PocketMode.

Active Display (in Pocket Mode) currently only switches off the proximity sensor in some cases.
If the user switches on the screen itself, the sensor is left running. This change
stops the sensor as soon as the screen goes on. Active Display already started the sensor each
time the screen goes off.

PS2: In the mode that turns the screen off again when the device is pocketed,
the sensor stays on until you leave ActiveDisplay.

Change-Id: Id7afcd858f341ad929606d302c5741efa99a7c6f
[1/2] Base: ActiveDisplay (rework interface)

really fix AD buggy stuff
tested with Music play
tested with No lockscreen
tested with faster screen turn off
check all sensor going off if AD not Showing or Disabled
fix notification posted/removed
make AD using System Window so it will covered all screen
fix Navbar translucent if Lockscreen Blur merged :P
now using Rounded Image
also introduce new RoundedImageView widget
 courtesy of @vinc3m1 (thanks)
fix build
fix sometimes screen turn off after unlock because screen timeout (hopefully)
now using new parser to get Notification data (thanks @Achep for the parser)
rework lightsensor manager
add NotificationUtils
fix brightness sometimes not changing

add support applications privacy mode (will not show content message if enable on each app)
see http://jira.omnirom.org/browse/OMNI-600

allow bypass AD if no notification and lockscreen is secure
see http://jira.omnirom.org/browse/OMNI-594

fix proximity always enable after adding new feature allow bypass AD
fix parsing notification data from app with targetSDK < 17

fix excluded app value (no body notice this broken since AD merged into OmniRom xD )

add option to allow bypass AD
make AD multiuser support

Conflicts:
	packages/SystemUI/res/values/custom_dimens.xml
	packages/SystemUI/res/values/custom_styles.xml

Change-Id: I1fc3047496cce71cefc1718b8ef3f4c4fc1605eb
Base: fix ClockView ActiveDisplay

why no body report this bug?

this happen since AD merger into omnirom for the first time
i found this bug after using 24 time format LOL

Change-Id: I85be84914cc8210d9b0612994a4c25a5c6bfdeb6
ActiveDisplay: Fix for flo and other devices

The changes made to layout/active_display_content.xml were not
made to its layout-land and layout-sw600dp counterparts

Make them here too to stop flo from crashlooping in systemui.

These values may need to be tweaked later, but preventing crashloops
is top priority.

Change-Id: If137eaabad735539cc9d50c107a1733bef71538d
[1/2] Base: fix ActiveDisplay for WifiOnly Devices

fix http://jira.omnirom.org/browse/OMNI-637
also fix for devices with unsupported Proximity sensor and Light sensor

Change-Id: I346d4ed0ca02c6f8a6da1f3bf1de59ac9179d7b7
[1/2] Base: more improve Active Display

1. fix http://jira.omnirom.org/browse/OMNI-651
2. fix http://jira.omnirom.org/browse/OMNI-641
3. add http://jira.omnirom.org/browse/OMNI-652
4. Add option Double tap to sleep every where
5. Add option to show wallpaper blur behind active display
6. Allow to show numbers of notification on Handle (only show if notification count is enabled in bar settings)
7. minor improvements
8. add battery circle around handle (only show if battery circle around lockscreen handle enabled, see security settings)
9. fix http://jira.omnirom.org/browse/OMNI-665
10. fix whitespace

Conflicts:
	core/java/android/provider/Settings.java

Change-Id: I1b28041c0245de80b7d09c684f6439b2f8f5bd40
Base: fix SystemUI because ActiveDisplay

fix http://jira.omnirom.org/browse/OMNI-708
fix http://paste.omnirom.org/view/e7039c0b
fix http://paste.omnirom.org/view/6977cb45

Change-Id: Id6688c721bd262df7824183a14fcd0aab145517e