Commit Graph

16 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
Sunny Shao
f0b0d46106 Remove the isCustomCard and related codes
Bug: 143058171
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.homepage
Change-Id: I9d9ab16f327aef65599150e2f58b23bcb9986b30
2020-02-15 13:46:22 +08:00
Yi-Ling Chuang
acb50f2c6a Force the adapter to rebind cards with a toggle.
A card dismissal and scheduled card collection trigger a reload. During
card reloading, we perform slices pre check. The pre check goes through
the whole slice binding process, which means slices will be pinned and unpinned.
Hence, the on screen slices will gets unpinned resulting to the
unresponsive toggling.

As we have DiffCallbck implmented, if the card list are the same, then
bindView in the renderer will be ignored, which means the unpinned slice
will have no chance to re-register slice callback. So here we force it
to rebind the views.

Fixes: 123174237
Test: robotests
Change-Id: Id98bc16632bf024cbb611b40890e4d2629f08d7b
2019-04-23 17:19:56 +08:00
Yi-Ling Chuang
620d6aeccb Log latency and timeout occurrence for contextual cards.
Fixes: 124492762
Test: rebuild
Change-Id: I552adf7e6d76e8576a790e83792d067ed5716dc2
2019-03-19 18:31:01 +08:00
Fan Zhang
0d093fd1e1 Make settings do nothing if ranking for a card is invalid
Fixes: 124386997
Test: robotests
Change-Id: Ib01c75ec0490cdc034255300a09e8099e05fc389
2019-03-11 16:17:58 -07:00
Yi-Ling Chuang
dde76e6d5c Make slices precheck executes in parallel.
Slice binding takes up sometime which may cause latency.
Thus, making it run in parallel instead of sequentially to improve the
performance and avoid hitting the timeout problem.

Bug: 124366297
Fixes: 123668403
Test: robotests, unit tests
Change-Id: I5d9fa4605f59e2acef65aadf6fce85df36d8fff1
2019-02-21 15:24:28 +08:00