Commit Graph

474 Commits

Author SHA1 Message Date
Yi-Ling Chuang
631465df31 [DO NOT MERGE] Pre-allocate height for contextual cards. am: 228bc78bf9
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/12343231

Change-Id: Iefb77041715dba0cc2a19210e1353f935e25a8a8
2020-08-15 02:08:53 +00:00
Jason Chiu
b824187524 [DO NOT MERGE] Update contextual cards display mechanism
1. Make Wi-Fi card default to collapse.
2. Support showing a default card when there's no displayable card.
3. Solve the problem of icon not showing for cached slices in card
renderer

Bug: 163288869
Fixes: 159092915
Test: manual, robotest
Change-Id: Ie8b61ad58410337334e29b7a794353b0c6a6ba8c
2020-08-13 17:58:55 +08:00
Yi-Ling Chuang
228bc78bf9 [DO NOT MERGE] Pre-allocate height for contextual cards.
To prevent the UI jank causing by the async card loads, we pre-allocate
some space for the card to fill in. After this change, only one card can
be shown at a time.

More details:
- When the card number configuration is set to 0, don't trigger the card
loader.
- The height adjusting logic is as follows.
When Settings is opened, pre-allocate a space first.
After the RV finish laying out, reset the RV to wrap_content. So if the
card has to be expanded(eg. wifi large mode or dismissal view), then it
will adjust the height accordingly. While if a card previously shown
becomes unavailable(dismissed or conditions not meet), we also reset the
RV so the space can be gone.

Bug: 163288869
Test: robotest
Change-Id: I0dcb2dae8f0533e562ad06f664b7ae7a9afecd21
2020-08-12 21:40:06 +08:00
Jason Chiu
eaf1564d9f Guard against SecurityException of accessing to slice uri
- Sometimes unregistering a Slice callback will have no permission to
unpin the Slice uri and throw an exception.
- Guard against the exception as the first solution.

Bug: 159722324
Test: robotest
Change-Id: Ic227331fef64c3fa6fe3e4442fba2a9b754d520d
2020-07-08 11:28:33 +00:00
TreeHugger Robot
15a62defd0 Merge "Revert "Revert "Workaround of Slice not pinned bug when using Sl..."" into rvc-dev 2020-06-26 16:41:52 +00:00
Andrii Kulian
f11088a886 Revert "Revert "Workaround of Slice not pinned bug when using Sl..."
Revert "Import AndroidX from build 6620107"

Revert submission 11970208-update_slice_view

Reason for revert: b/159943588
Reverted Changes:
Id09f4f6aa:Import AndroidX from build 6620107
Icb150b4f6:Revert "Workaround of Slice not pinned bug when us...

Bug: 157387583
Bug: 159943588
Change-Id: Iedd9883ea144395b9d4afb011a218fe5dcb6b560
2020-06-25 23:50:53 +00:00
TreeHugger Robot
77dcc34b26 Merge "Revert "Workaround of Slice not pinned bug when using SliceCallback"" into rvc-dev 2020-06-25 17:19:44 +00:00
Jason Chiu
1b514c3f37 Revert "Workaround of Slice not pinned bug when using SliceCallback"
This reverts commit 73afb042dc.

Reason for revert: Publish the fix in Slice lib and revert the workaround.

Bug: 157387583
Change-Id: Icb150b4f69bffe8af4c3fcb26501020c8fe8432b
2020-06-24 03:53:47 +00:00
Jason Chiu
98a8640de2 Fix failed test cases
Test: robotest
Fixes: 159688624
Change-Id: I28d53e38000d2dfb00bde900647eb38eda279c9a
2020-06-24 10:55:31 +08:00
TreeHugger Robot
72dac6e5be Merge "Disable the defulat animation of the RecyclerView to avoid UI jank." into rvc-dev 2020-06-22 10:40:46 +00:00
Jason Chiu
c548288a51 Merge "Workaround of Slice not pinned bug when using SliceCallback" into rvc-dev 2020-06-22 07:58:25 +00:00
Jason Chiu
73afb042dc Workaround of Slice not pinned bug when using SliceCallback
When a client registers a SliceCallback, it starts to observe Slice
changes. The observer is running in the main looper and binds Slice
in AsyncTask.

However, when the client unregisters the callback, it unpins the Slice
in the client's thread. Thus, if the AsyncTask has pinned the slice but
hasn't bound it yet, it may be unpinned by the client, and an exception
occurs.

This fix is to unpin the Slice in the same SerialExecutor of AsyncTask,
which is to ensure bindSlice() and unpinSlice() are called in the same
thread one after another without the race condition.

Bug: 157387583
Test: robotest
Change-Id: If5f4b4bc0d8c5a2800cad8ff2afd7084426a6c96
2020-06-22 07:38:50 +00:00
Yi-Ling Chuang
b54f9b4921 Disable the defulat animation of the RecyclerView to avoid UI jank.
When users go to a sub page in Settings and come back to the homepage
again, those sticky cards flicker which makes the UI janky. This is
because we rebind sticky cards to ensure it's always up-to-date, where
the recyclerView has its default animation while notifyItemInserted(),
ane thus introduce the jank.

Fixes: 158627602
Test: Open Settings -> go to sub pages -> back to the homepage -> cards
are not flickering.

Change-Id: I2104dbe0bed8b2486c35521bcc0b5c8b54efb995
2020-06-22 14:53:10 +08:00
Jason Chiu
3ee13ce4d6 Fix homepage cards show up problem after first launch
ContextualCardLoader was waiting for eligible card checkers with a 300
ms timeout one by one in a loop. So if more than four checkers expire,
the total waiting time will exceed the 1 sec homepage content loading
timeout, which causes no card shows up.

The solution is to leverage all the checkers' timeout starting time,
and increase the timeout for all checkers. So that ContextualCardLoader
just needs to wait for all checkers for at most 400 ms and then can get
the results.

Bug: 159236069
Test: robotest
Change-Id: I601ac4151bf8be68b30eaabdb45a4e1ace95653f
2020-06-20 18:36:38 +08:00
TreeHugger Robot
cab1329f0f Merge "Revert "Revert "Fix SecurityException while accessing Slice Uris""" into rvc-dev 2020-06-20 09:42:23 +00:00
Jason Chiu
ad9a214fff Revert "Revert "Fix SecurityException while accessing Slice Uris""
This reverts commit 52ac47d9c8.

Reason for revert: This CL is what we wanted to merge in RVC and has already got Code-Review +2, Owner-Approval, and DrNo-Review from other folks regardless of the accident.

Bug: 159195420
Change-Id: I6c646269cd3e13e015dcc06418e21db66372e680
2020-06-20 07:04:52 +00:00
Akshay Thakker
826459695f Merge "Revert "Fix SecurityException while accessing Slice Uris"" into rvc-dev 2020-06-20 02:56:49 +00:00
Akshay Thakker
52ac47d9c8 Revert "Fix SecurityException while accessing Slice Uris"
This reverts commit 2e790e1859.

Reason for revert: I accidentally +2'd this CL and it got merged. Sorry about that.

Change-Id: Ia1b2e0a264e16b368601bbb7a32148ec6c183e84
Bug: 159195420
Exempt-From-Owner-Approval: Just a revert
2020-06-20 02:56:09 +00:00
Jason Chiu
4b6e900e64 Merge "Fix SecurityException while accessing Slice Uris" into rvc-dev 2020-06-20 02:39:21 +00:00
Jason Chiu
2e790e1859 Fix SecurityException while accessing Slice Uris
- There is SecurityException when accessing Slice Uris which are not in
  Settings app.
- Rollback to the original mechanism, remove an unused latch, and
  register a trivial callback

Fixes: 159195420
Test: robotest
Change-Id: Ice2cf5f928b0e6d0367bcc41c3912526e8f7bd7f
2020-06-19 04:17:43 +00:00
Jason Chiu
d489acb2e3 Remove the feature flag of contextual home V2
Bug: 159393461
Test: robotest & rebuild
Change-Id: If5f030b4c8bd5ef61bb722da9ae7f3ace0ac6e0e
2020-06-19 11:23:57 +08:00
Jason Chiu
85f03668a5 Merge "Improve BT slice card loading performance" into rvc-dev 2020-06-14 17:14:11 +00:00
Jason Chiu
8cbee49d28 Merge "Fix Slice not pinned error" into rvc-dev 2020-06-12 11:31:23 +00:00
Jason Chiu
f7afded1d1 Fix Slice not pinned error
Slices should be pinned before being bound. The original design calls
registerSliceCallback() to pin a slice, and then calls bindSlice() and
passes the result to the callback directly. When the callback is
called, it executes unregisterSliceCallback() and unpins the slice.

However, registerSliceCallback() starts to observe the slice change and
then rebind it in an AsyncTask. If the slice is updating via its
background worker and the timing of the binding overlaps the callback
execution, it's possible to bind the slice right after unpinning it and
causes the error.

The solution is to remove the callback mechanism, and just to pin, bind
and unpin the slice directly.

Fixes: 157387583
Test: robotest
Change-Id: I8748dd3038a3662599935f07420d07cf254a4073
2020-06-12 04:14:46 +08:00
Jason Chiu
3c3f362125 Improve BT slice card loading performance
The bottleneck is getting LocalBluetoothManager the first time.
1. Initialize LocalBluetoothManager earlier and asynchronously.
2. Don't block in slice's constructor and getSlice().
  - Initialize the bt updaters until the manager is ready.
  - Just show a header if the manager is not ready yet.

Fixes: 157702021
Test: robotest
Change-Id: I427df55f259b45ba4c37557b22e09dcc24079e93
2020-06-11 18:39:29 +08:00
Hiroki Sato
8870dcb421 Fix keyboard navigation work in Settings home page
Bug: 156196960
Bug: 156565546
Test: manually confirmed tab or arrow key moves input focus.
Change-Id: Ic2eb6395b490c97c8d82722ce1ba3a79d535ade2
2020-06-05 14:42:34 +09:00
Yi-Ling Chuang
3e9fb7c765 Remove High usage battery tip from Settings homepage.
Remove this card since it is not actionable.

Fixes: 157131344
Test: robotests
Change-Id: I562e4bec84429f885911bd99461edbe10bad537a
2020-06-01 19:06:16 +08:00
TreeHugger Robot
ff35a3e641 Merge "Fix the janky transition of contextual cards." into rvc-dev 2020-05-29 11:51:51 +00:00
Yi-Ling Chuang
bed0f23940 Fix the janky transition of contextual cards.
When contextual cards are being laid out, there are two separate layout
transitions, which brings users the feeling of slowness.

In the current design, we bind slices in the adapter's
onBindViewHolder(), where slice's binding is acutally done in the
background thread and it's time consuming. So before getting the
callback from the slice framework to have actual contents, the view is
empty but the viewholder is already created. So the RecyclerView would
treat it as completed and starts to lay them out. This introduces the
first time transition. Once we get the actual slice content, the view
will be refreshed and laid out, which is the second time transition.

To tackle this, this CL caches slices that are created at pre-check
time, and use them to render before getting updated slices to fill up
the gap.

Fixes: 156372414
Test: robotest and launch settings to see the transition being smooth.
Change-Id: Ic0a27ff36f1824de499b75ec73b2635de9cbe6b5
2020-05-29 18:28:45 +08:00
Jason Chiu
d06333167d Cleanup notification channel slice
Fixes: 144897605
Test: robotest

Change-Id: I1b654f31c6b001ef6f1eed95a87ca0b2dd1afc2e
2020-05-29 17:35:22 +08:00
TreeHugger Robot
591d761d43 Merge "Revert "Do not prebind sticky slices."" into rvc-dev 2020-05-28 15:42:28 +00:00
Yi-Ling Chuang
740db33c5c Revert "Do not prebind sticky slices."
This reverts commit ac59ea8e23.

Reason for revert: Fix it using another approach in ag/11629780. The prebind part will be helpful to cache slice data.

Bug: 152365480
Change-Id: Iebed42027552a923907647b61480f135ac4f4097
2020-05-28 15:42:15 +00:00
Yi-Ling Chuang
9d789ee7ba Increase the timeout for contextual card loading.
Some cards require a bit more time to be loaded, so relax the timeout a
bit. After tweaking the time, the overall loading time seems decreased.

Fixes: 152365480
Test: rebuild and launch
Change-Id: Icc2f66b28a377bd8ce230f8a9918b8f1f164f4ff
2020-05-28 20:05:15 +08:00
Jason Chiu
07767907d5 Show subtext for previously connected devices on BT card
Fixes: 157089483
Test: visual, robotest
Change-Id: If4f2dec9df802a80a686827de7e61115e85d54a7
2020-05-20 17:02:43 +08:00
TreeHugger Robot
fa1e102af7 Merge "Do not prebind sticky slices." into rvc-dev 2020-05-14 11:37:45 +00:00
Yi-Ling Chuang
ac59ea8e23 Do not prebind sticky slices.
We have a precheck mechanism to filter out slices that are not eligible
to be displayed on the homepage. Since sticky cards are designed to
be always available, which implies they will never be null, so skip
prechecking on them.

This allows us to prevent from the precheck timeout which usually leads
to the disappearance of cards.

Fixes: 152365480
Test: robotests
Change-Id: Ic9e3df8b55609e9b5d1d3fd3a8d95e4086d3d7a4
2020-05-14 11:38:47 +08:00
Jason Chiu
8ac1e4d49d Update icon tint color when the user toggles Dark theme
- Reload theme in slice provider when Dark theme mode changes for slices
- Reload theme in onCreate of Panel activity for its non-slice header
- Remove applyTheme from individual slices

Test: robotest
Fixes: 153700819
Change-Id: I40a7d2817c4b9100d7b2f2962a69c8a9ce6f7906
2020-05-12 10:58:54 +08:00
Jason Chiu
e0327ee583 Reload homepage cards when necessary
Many users leave Settings app by pressing Home key, but Settings remains
in the same card status and doesn't update when users come back, which
may lead to a bad UX.

This change reloads cards and resets the UI session for some events,
including home key, recent app key, and screen off.

Fixes: 151789260
Test: robotest
Change-Id: Idb575cef4a58894984cb42238d7b3b43c49389a3
2020-05-05 10:03:49 +00:00
Jason Chiu
d304c20a15 Refine contextual Bluetooth card behavior when Bluetooth is off
When bluetooth is off, show the specific layout for enabling Bluetooth.

Bug: 154691520
Test: robotest
Change-Id: If3fd493558dcf2a47183345bbe175dfe257574d1
2020-04-29 16:29:41 +08:00
Yi-Ling Chuang
5a554ccbfa Add Dismiss action in Talkback Local Context Menu
- Add dismiss action for cards that can be dismissed.
- Remove importantForAccessibility from sliceView so Talkback can
recognise this view in order to generate Local Context Menu.

Fixes: 146910157
Test: Enable Talkback -> Move focus to removeable contextual card -> use
up-right gesture -> see Local Context Menu

Change-Id: I75a7394e94e6939d48cc379f62eab66f7903fd98
2020-04-14 14:02:04 +08:00
Jason Chiu
4e6841e7b5 Move sticky cards to the bottom
Sticky cards have higher scores and were on the top of homepage.

Bug: 149274976
Test: visual
Change-Id: I5fc2303ac42fff5bc4d44e355112ea4529253acd
2020-03-25 02:27:43 +00:00
Yi-Ling Chuang
6950877b7a Fix ContextualAdaptiveSleepSliceTest
ADAPTIVE_SLEEP has been moved from Settings.System to Settings.Secure
but the main logic hasn't synced with the change which leads to the
failure.

Fixes: 139319542
Test: robotests
Change-Id: I56f58cc3da5a4034e2bf2ed5a63ae3bc2fec2a21
2020-03-20 17:29:03 +08:00
TreeHugger Robot
b436d149e4 Merge "Update string for Adaptive sleep slice title." into rvc-dev 2020-03-20 01:16:53 +00:00
Yi-Ling Chuang
617e86c0a2 Update string for Adaptive sleep slice title.
The previous change of the slice title will also impact the title in
Display setting, so this CL creates a new string for the slice title and
revert the change of the normal preference.

Fixes: 151746621
Test: check the titile on Adaptive sleep slice and Display setting.
Change-Id: I2955f4c78b7bf689078deaabcc4148bd5e37b573
2020-03-19 18:21:51 +08:00
Hall Liu
45e4b8948c Rename NotificationChannel#setBlockableSystem
Rename the method to setBlockable. Also rename isBlockableSystem in the
same way.

Bug: 151311073
Test: atest NotificationChannelTest
Change-Id: I0504f8043dc864fe6677f2e65783068ffa3437ba
2020-03-13 13:54:10 -07:00
Yi-Ling Chuang
a591d7a082 Fix NPE when coming back to settings homepage.
When users navigate back to the homepage, if there is a slice being
displayed, slice callback will be triggered. It will then check if this
slice has any error hint, where NPE would occur if the slice turns out
to be null. Hence, add a null check before checking slice hint.

Fixes: 148158780
Test: rebuild and navigate back to the homepage.
Change-Id: I2b04dc0d64a223cc85f6af55b2ae2dbc5f3e1f40
2020-03-11 16:52:44 +08:00
Jason Chiu
b85cfc812b Change sticky card UI back to homepage card style
Fixes: 149371123
Test: visual
Change-Id: Ie1c2bc7b806b818000e9a2e88753f9904a3f30f4
2020-03-10 11:17:28 +08:00
Jason Chiu
130629b1db Show paired devices on Bluetooth device slice card
- support tapping to activate for all available media devices including
  Hearing aid and Headset
- support tapping to connect for previously connected devices

Bug: 149667096
Test: robotest
Change-Id: I25f74b1b20fbb1876200a561775aa675ff60ac37
2020-03-09 17:43:29 +08:00
TreeHugger Robot
520cb5851c Merge "Keep contextual card dismissal info upon deletion" into rvc-dev 2020-02-24 11:07:19 +00:00
Yi-Ling Chuang
5f8a084909 Keep contextual card dismissal info upon deletion
Add a config for contextual dismissal. This config is used to
determine whether the existing dismissal timestamp should be
kept before an insertion.

The new dismissal behaviour design replaces the boolean
value(isDismissed) with a long value(dismissedTimestamp) to give
this behaviour more flexibility. Utilizing the timestamp allows
developers to define new criteria of card's display (e.g cards being
dismissed can be shown again after a period of time).

While newly inserted data from SettingsIntelligence or other clients
may not have dismissal timestamp recorded. Turning on the config gives
the capability to persist dismissal timestamp, and more customized
behaviour can be created.

Bug: 143055685
Test: robotests
Change-Id: I9d095955e9c51f2aa3332d49ee230d3ded9ae744
Merged-In: I9d095955e9c51f2aa3332d49ee230d3ded9ae744
(cherry picked from commit 377125bf96)
2020-02-24 07:14:12 +00:00