The problem was due to a race condition between removing a prebound
widget view from the drag layer and adding the same view to the
workspace upon dropping it; if you let go of the widget immediately
after picking it up, the latter happened before the former.
Specifically, the flow was: long-click a widget --> drop --> remove
the view from the drag layer if it's not null (it is, so nothing
happens) --> the view is finally bound/inflated and added to the drag
layer --> add the view to the workspace --> already has a parent.
There are actually 2 problems here: one is that the bind/inflate is
asynchronous, and can therefore happen after dropping the widget view
being inflated, and the other is that the view is added to the
workspace even though the transition has barely started (we usually
ignore drops if the transition is less than half complete). It turns
out that this second problem was also due to a race condition, this
time between dropping a widget or app onto the workspace and calling
LauncherStateTransitionAnimation.dispatchOnLauncherTransitionStart().
If the drop happened before the dispatch, as in the case of the
crash, then the drop was accepted because the transition progress was
still 1.0 from the previous transition.
I fixed the first problem by removing the drag layer widget view
in Launcher where it is potentially used instead of Workspace. And I
fixed the second problem by setting mTransitionProgress to 0 in
Workspace.onLauncherTransitionPrepare().
I also added some debugging logs.
Bug: 23896857
Change-Id: I66944e6d3f23b70dea15f7fb01af0763a1bfcbda
The search bar can now be be normal or tall. When it is set to tall,
the hotseat and page indicators move down so that the workspace isn't
compressed quite as much.
Change-Id: Id92a946eab3a93524999f92efd847a501a95f002
Previously, it was only called at the start and end of the transition;
now it is called as the animation interpolates. Specifically, a dummy
ValueAnimator is played alongside the transition animation and calls
dispatchOnLauncherTransitionStep() as it goes.
One place where this is important is in Workspace, where
mTransitionProgress is used to determine things like whether the
workspace should accept a drop - hence the bug that caused apps dragged
from All Apps to vanish when dropped before the transition ended.
Bug: 24215358
Change-Id: I32cd633c53557305caf84e87c9a4d4f07eef2223
Using itemId instead of generating a new id for each item. This is because
if the process gets killed, View.generateId will get reset but we will still
receive the generated item id map in onRestoreInstance. This will cause
conflicts with newly generated item ids.
We wrap all the generated homescreen views inside a single sparse array. This
ensures that we do not cause any conflict with dynamically generated views in
other parts of the UI.
Bug: 16840760
Change-Id: I6fe69c2e1dd463402f51222715fae31b9d4dd240
- Regression was introduced in ag/765323, but not visible in normal
drag and drop because the view is already removed from the parent.
However, when accessibility is enabled, it was only removing it from
the db, but not from the parents.
Change-Id: I37483d0cd6306d270441b11e6f05247d58b88521
- This CL fixes an old assumption we had about the height
of rows in AllApps, and ensures that we account for the
difference in height between the predictive icons and the
normal icons.
- In addition, we refactor FastBitmapDrawable to have multiple
states, which it manages in drawing itself, including the
press state and fast scroll focus states. And we also refactor
some of the fast scroll logic in the all apps recycler view
out to its own class.
Change-Id: I1988159b2767df733bbbfc7dc601859cde6c9943
- Hitting a ctrl key combo will actually call onPrepareOptionsMenu(), which
will change the state of the workspace incorrectly. Instead, listen for
the menu button, and only allow the user to enter overview mode if they
are currently not dragging or in an overlay state (like all apps or
widgets).
- Also making the overview buttons focusable so that they are focused when
you go into overview mode.
Bug: 22483367
Change-Id: Ie6e9febd8a5a4e7ad25d745639d42d1c7b9801b4
-> In some instances, onResume would incorrectly call onShow
-> When pressing Home from CustomContent, we'd get a sequence of onHide,
onShow, and then onHide due to some deferred actions in onNewIntent.
Got rid of the onShow.
issue 17629011
Change-Id: I9b4f2ef682f5a7060e68210866fa05452076e428