This reverts commit 73afb042dc.
Reason for revert: Publish the fix in Slice lib and revert the workaround.
Bug: 157387583
Change-Id: Icb150b4f69bffe8af4c3fcb26501020c8fe8432b
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
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
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
- 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
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
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
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
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
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
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
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