Frameworks: SlimPie (1/2)

Well first I want to thanks again for the ideas Jens Doll, Kyrylo Mikos and PA gave us
on 4.3 allready to make our own SlimPie possible. We used partly code from them and added
and changed it in our Slim way to have it for us most usefull.

Well as known SlimPie advantage to other PIEs is that it can bind on every button
press and longpress action like the user want. All SlimActions are available for
every button (so all possible shortcuts we have + apps etc). Of course as well
available are custom icon images or system icons. Other unique thing of SlimPie
is that 2 rows are available. First row user can setup up to 5 buttons. On the second
row up to 7 Buttons.
Of course the user can setup the style to their like and still theme engine related
things are respected.
Pie is activated present on non expanded Desktop as well

For 4.4 we reworked a lot of the frameworks base code mainly. Changes compared to 4.3

- We use now a edge detection service (thanks a ton to Jens and Kyrylo). We tweaked it only
  very minor due that it works allready out of the box. Two reasons why we want to use it.

  1. We do not have detection overlays on the borders anymore. Means the user is not disturbed
     by it and we do not need to add workarounds like we did before to avoid accidental swipe ups
     (eg old IME reduce triggers). As well it is not needed anymore that the user can setup
     thikness etc. The default values are allready quiet good. If a device has detection problems
     the dm can adjust them via overlay. As said main main main advantage  that no dead zones are present
     anymore.

  2. we will use this service for other upcomming features as well (eg new Recents)

- Centralized and adapted the code to 4.4 and some changes we did in our central classes
- reduced observer to an absolutly minimum. If PIE is disabled it does not observe any value
- A lot small fixes and tweaks
- Change default colors to KK style
- If navbar is present the navbar gets animated with the background to give a full screen overlay
  feeling to the user. Especially now with kk transparency way better.
- Full keyguard support
- complete reworked edge disable detection
- and a lot more

PS:
- add and fix the callbacks
PS:
- cleanup
- multiuser support
- reworked complete observer and attach detach handling
PS:
- fix some detection corner cases
PS
- fix derp
PS
- for pie add higher default sensivity. As well give an option
  to overlay it in device tree to set it even higher.
PS
- refresh settings if user changed
- small cleanup
PS
- fix another derp :(
PS
- add disable activation edges logic

  if navbar or statusbar is present (either visible or as swipe in expanded the bottom and top are disabled)
  is notification drawer is down top left right is enabled
  if one of the different navbar modes or the navbar in the current view has 0 height this edge is enabled
  if navbar is off navbar edge is enabled
PS
- our service is always present
- cleanup commandque as well aosp and our code
- some minor tweaks
PS
- animate navigationbar on non expanded to overlay the background on pie over the complete screen
PS
- add recents preloader logic
PS
- space out a bit the clock
PS
- change default colors
PS
- use our color classes and fix it that they can handle our new logic
PS
- cleanup
PS
- fix second layer disable
PS
- reflect new sensitivy steps in edge service patchset
  (1 minimum, 10 maxium)....pie default to 8 high sensitivy
  if someone need mor increase it
- in general made it per default a bit more sensitiv
- fix bug with trds switch on reconstruing statusbar to
  restore last correct state
- cleanup the inline comments
PS
- minor tweaks
PS
- fix reported wrong icon sizing of some apps which do not follow
aosp default sizes
PS
- fix race conditions on init
PS
- attach basestatusbar directly to PieController and pass to PieView to simplify
  recents loading
- cleaned up some method and var definitions
PS
- remove obsolete null check

Change-Id: I3b28b8155a668f2c9b32aac4cd294b79ac3f3eb9
Frameworks: fix navbar and pie icons for tablets and RTL

well due that we use a completly other attempt then googles navbar we do not
need to rely on different sized icons for portrait and landscape. So just a square
icon fits our needs perfect (which is so or so everwhere in AOSP default to use square ones).

Whatever recents pie feature showed us that we still forgot to size the pictures for our tablets
and as well for RTL user.

So let us do it now to fix any resizing issues on navbar and or SlimPie

Change-Id: I5257b789a5450754a296141b0af63d2eacaa87c9
Framworks: clean up the AOSP tablet icon mess

well.....on grouper the overlay size for the navbar is/was 56dp...so
google added bigger icons then the usual ones into the sw600dp folders.
Well newer tablets have 48dp as default like the phones so the slightly bigger
icons do not fit 100% correct. It is not much but it is noticable.

So all devices have same navbar default height...so all icons should have same size
as well. Just remove the overlay icons so that the system automatically chooses the right
one from the default screen qualifier.

Change-Id: I4e4d87d70996ed1def359149cea829b5794f2448
Frameworks: EdgeGestureService give abbility to reduce the left and right trigger height if IME shows up

This patch gives the abbility that features can set the IME_CONTROL flag in addition to the position flags
to enable reducing trigger heights on the left and right edge to avoid conflicts with swipe keyboard.

Although the inputfilter lets come presses to the application trough the normal user behaviour is to start keyboard swiping
before they really even pressed the char button which results in conflicts with whatever feature is using the left and right
edge as trigger.

Features who want to use it need to set IME_CONTROL flag. As well if notification drawer was pulled down or global menu is
shown on top of the IME keyboard the original size gets restored till they are dismissed/closed

This patch adds only the support for it.

PS
- Fix small logic derp in BaseStatusBar
PS
- follow Josues suggestion and make the trigger a bit bigger

Change-Id: I51804d6e0768cc7770a6e52fac454dbad0ab632b
Frameworks: SlimPie give user ability to reduce trigger heights if IME keyboard shows (1/2)

Add a user option to reduce left and right trigger of SlimPie if keyboard shows up
(especially usefull for swipe keyboard which most keyboards are nowadays). Enabled
by default user can disable it in settings.

Change-Id: I5dce4f36f5b14320f806ac60ad75931fa7f2873b
Fix QS Layout

Change-Id: I93c647e3a6b4028cfad75a46670f301380f173b0
Fix "Frameworks: EdgeGestureService give abbility to reduce the left and right trigger height if IME shows up"

Change-Id: I049c77c9adc7092e1b6677686a35a5fc6cc04483
SystemUI: Cleanup and enhance notification drawer header

- Crop properly images on tablets and landscale
- Use a separate layer instead of breaking header background
- Fix bug where you couldn't turn header back on after turning it off
- Added a gradient overlay

Change-Id: Ife399b82a3f272fb2ecc8e738c5f274f7682a556
Update AOKP custom system animations (1/2)

Credits to Stevespear426

Change-Id: I8d2618f99765c9d2cfef271db200800a30eb0820
fb: restore navbar compatibility with several xposed modules

I am tired of the complains....

Xposed use the emulator overwrite to enable/disable navbar...this results
into showing up navbar on reboot even if the user has set it to off in settings.

This fixes the issue and still keeps for emulator tests the basic overwrite functionallity
alive as long the provider value was not set.

We may should reflect that in settings as well.

Change-Id: Id60b45645d489c08539d56b8e05d135c36d38990
Frameworks: Slim recent app screen

One of the parts on AOSP google missed to update/improve in the last
couple of releases is the recent app screen to allow better and faster
multitasking. I had always a special vision how it could/should look
and gives the user a faster workflow.

This commit is now our new recent screen. It is a complete new implementation
and replaces googles AOSP recent app screen. The code changes in the base itself
are quiet miniml to call the new recent screen.

Some notes:

1. This patch needs a new repo: frameworks_opt_cards which is a central repo
   to get any kind of googles cards style. Thanks Gabrielle Mariotti a ton who
   made the base for this library and hellped a lot out.  We just fixed together with him some parts
   and mad it useable as AOSP central library. So we can use it later for other
   changes as well

2. Preload needs to work 100%. So it is needed to check that the calling parts
   (like hw key rebinding, pie, navigation bar) do a proper preload. If they do not
   recent screen will just not show up. To follow what they are doing you can enable
   debug in RecentController.java which exactly shows what was called.

Some notes to the patch itself:

- Recent app  screen slides from the right edge into the screen

- Show recent apps in new google card style. Most recent apps show
  expanded with the app screenshot. Other are collapsed. Of course
  the user can change expanded/collapse of each app during the session where the state
  will be restored on next access.

- Compared to AOSP recents we do a 3 stage loading
  1. step: preload the task list and build or update the cards (does not load any content at this point)
  2. step: User actually toggled the recent screen....icons, text and screenshot thumbnail which will get visible are loaded now
  3. step: Recent screen is fully animated in. All other non visible content at this time are loaded now.
  This allows a smooth experience for the user and a minimal load on the first 2 steps. Especially important due that we handle
  a lot animations which are very picky when it comes to background loads. last 2 steps are async multithreaded loading tasks.

- We are using for the app icons and thumbnails a bitmap LRU cache controller to have fast access to the bitmaps we need. This improves especially
  the scrolling and as well the loading time due that allready loaded app icons are holded in the LRU cache.

- Theme support is included as well for all items the recent screen has

- Most important point: Way faster workflow now. The recent screen neither freezes the underlaying app nor it does interrupt the current process the
  user is in. It just slides over the current app about 40% of the screen. Back button as well just an outside touch (which will be passed trough to the app)
  allows to immediatelly go ahead in your workflow.

- Normal click opens an app, longpress opens app detail screen (note: we have only one hidden action on our current recents. If we later decide there could be
  other actions as well...showing a google card menu button on the top right is a very easy task and allready provided from the frameworks_opt_cards lib)
  swipe left or right removes the app from the current tasks

- Pinch to zoom out gesture provides the ability to remove all tasks with a big red warning!!

- All above mentioned actions are animated.

- As usual it is multiDpi compatible

- A lot work went into the optimizing especially for low end non gfx devices where animations
  as well listview scrolling is not that easy. We got the maximum out of optimization here which
  gives acceptable results on low end devices and amazing one on the gfx capable devices.

- A small side note this patch contains as well a fix on navigation bar preload.

Thats the short description.....user need to see it to get the real benefits of this new way.

cheers

kufi

Change-Id: I1925cd9ea37f2239585445142bd37370f137eabd
Fix HALO showing wrong icon on recreating statusbar

Change-Id: If7ab371704ac72586bac9a414a5e8bc0a4b9aa73
Frameworks: slimrecents: call app details screen correctly

So feedback shows that we only have 2 bugs. For the one patch is up. The other
one is fixed here.

two problems

1. Longpress opened the detail screen twice and wrong

2. It shows up in the task list which it should not. Going inline
   with the AOSP implementation of it.

use TaskStackBuilder to call it proper with our animation on top.

Change-Id: I18ba0a23ee91fe259143567d157bf24a72e1036a
Frameworks: slimrecents: allow closing recents in middle of the open animation

As reported by Tejus Kandachar steps to reproduce:

Press Recents button and very quicky tap on one of the apps in the recents list,
just as recents list is sliding in. If done fast, the app opens but recents screen does not close.
If done normally it slides away as expected.

Fix it with allowing to close the pannel as well on animation in state.

Change-Id: I4c52e6e6a4fd4b3a2a63bc364ead055f0e619faf
Frameworks: Slimrecents: cover bad 3rd party apps behaviour

Recent app screen as well the original AOSP one needs a proper preloading.
We discovered due of reports that a lot apps (launcher etc) just call over
the SystemUIService some even with reflection :/ just the toggle and no
preload at all.

Whatever we cover this behaviour due that we do not want to break 3rd party
apps. If someone calls the toggle without proper preload we preload them first before
the recent starts animating. Listener takes already care on it for low end devices. We
just use this now and let the taskloader in this case decide when the recent app screen
can be shown.

As well this commit disables the logcat spam lol. Forgot to disable debug on the relase
commit

PS:
- fixed code style issue
- go on out animation down in the runable delay. Not needed to be that long at all

PS:
- add another safety check

PS
- another one

Change-Id: I43a47185da446b9ecaec114c1835ecfd20c3ac73
Frameworks: keep IME keyboard alive due recent is showing

Change-Id: Ieae9b899afa99739cc5cfa536a03d6827567c24b
Frameworks: make recent multiuser compatible

wondering how it worked at all on AOSP recents. Whatever call the
list dependent on the user who is using it

Change-Id: Ieae1d8ee2b71597bcb2025222c22d4514220ecc3
Frameworks: SlimRecents: go more inline with AOSP and add menu + new googly shortcuts

This commit changes the longpress behaviour. Like on stock aosp longpress opens the menu with this options

1. App info (like stock)

2. Play Store link to the app

3. Amazon store link to the app

Note: the store links are only shown if the app has the info that it was installed by one of this
stores. So stock apps (installed by system) or sideloaded apps do not show this link.

As well some backup apps break this entry on restore lol.

As well a bit cleanup on here and there and remove the close panel call on cancelPreload. Not needed

PS
- disable debug

PS
- set correct style
- disable one default debug

Change-Id: I29769f48ce6073acb6105f5590b93c671d6fc0d4
Frameworks: fix the random fc on pinch

Well logic error from me which can lead in an recycle bitmap fc due of a race
condition. Reason is simple it the animation needs for whatever reason longer then
the removing the tasks the view is probably still visible and recycle of the bitmap
results in a fc.

To fix it just remove the tasks after the animation is done and we definitly know
that no items are visble which are recycled.

Change-Id: I7878e02e6fb1887f8d11304550e083d107095a4a
Frameworks: go kitkat + style tweaks and follow googles color sheme

Googles color sheme on cards is

card: ffffff
aditional content: f5f5f5
background: e5e5e5

first two we did...background not. Follow the color sheme due it has a better contrast.

As well remove the non google rounded edges.

Allow drawing behin status and navigation bar if the bars are translucent

PS:
- due it is now a system window ensure that all other system windows are closed when opening recents.
PS
- minor tweaks
PS
- remove one unused flag
PS
- respect app system ui visibility status and reflect it for smoother experience
PS
- bring back TYPE_RECENT_OVERLAY window layouparams back to live. It was never documented
nor depreciated. Was used in the past for GB recents and is even updated till today although
nothing in the system is using it.

Make it fully functionall (it is basically just an extended TYPE_SYSTEM_DIALOG) and allow
this window type to extend its content behind navigation bar.

PS
- minor fix...init the systemUI flags for the view allready on preload to prevent positioning
of the listview.
PS
- draw always behind navigation bar as long it is not immersive mode or hide navigation bar mode
- add more margin to the delete icon for kill all

Change-Id: If38036dded961fcf0a6d8c2e7d2ba44a8e1dd08a