mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Unifying various model update callbacks into one
Making the BubbleTextView.applyItem stateless so that it does not depend on the order of events
Bug: 390572144
Flag: EXEMPT refactor
Test: atest LauncherBindableItemsContainerTest
atest BubbleTextViewTest
Change-Id: Ib9c0ac6c330d6f4e08c3db5772d35787fa056b65
This commit is contained in:
@@ -53,8 +53,6 @@ import android.graphics.Point;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.os.Parcelable;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
@@ -125,13 +123,9 @@ import com.android.launcher3.util.RunnableList;
|
||||
import com.android.launcher3.util.Thunk;
|
||||
import com.android.launcher3.util.WallpaperOffsetInterpolator;
|
||||
import com.android.launcher3.widget.LauncherAppWidgetHostView;
|
||||
import com.android.launcher3.widget.LauncherWidgetHolder;
|
||||
import com.android.launcher3.widget.LauncherWidgetHolder.ProviderChangedListener;
|
||||
import com.android.launcher3.widget.NavigableAppWidgetHostView;
|
||||
import com.android.launcher3.widget.PendingAddShortcutInfo;
|
||||
import com.android.launcher3.widget.PendingAddWidgetInfo;
|
||||
import com.android.launcher3.widget.PendingAppWidgetHostView;
|
||||
import com.android.launcher3.widget.WidgetManagerHelper;
|
||||
import com.android.launcher3.widget.util.WidgetSizes;
|
||||
import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayCallbacks;
|
||||
import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayTouchProxy;
|
||||
@@ -664,9 +658,6 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
bindAndInitFirstWorkspaceScreen();
|
||||
}
|
||||
|
||||
// Remove any deferred refresh callbacks
|
||||
mLauncher.mHandler.removeCallbacksAndMessages(DeferredWidgetRefresh.class);
|
||||
|
||||
// Re-enable the layout transitions
|
||||
enableLayoutTransitions();
|
||||
}
|
||||
@@ -3465,43 +3456,6 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
removeItemsByMatcher(matcher);
|
||||
}
|
||||
|
||||
public void widgetsRestored(final ArrayList<LauncherAppWidgetInfo> changedInfo) {
|
||||
if (!changedInfo.isEmpty()) {
|
||||
DeferredWidgetRefresh widgetRefresh = new DeferredWidgetRefresh(changedInfo,
|
||||
mLauncher.getAppWidgetHolder());
|
||||
|
||||
LauncherAppWidgetInfo item = changedInfo.get(0);
|
||||
final AppWidgetProviderInfo widgetInfo;
|
||||
WidgetManagerHelper widgetHelper = new WidgetManagerHelper(getContext());
|
||||
if (item.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_ID_NOT_VALID)) {
|
||||
widgetInfo = widgetHelper.findProvider(item.providerName, item.user);
|
||||
} else {
|
||||
widgetInfo = widgetHelper.getLauncherAppWidgetInfo(item.appWidgetId,
|
||||
item.getTargetComponent());
|
||||
}
|
||||
|
||||
if (widgetInfo != null) {
|
||||
// Re-inflate the widgets which have changed status
|
||||
widgetRefresh.run();
|
||||
} else {
|
||||
// widgetRefresh will automatically run when the packages are updated.
|
||||
// For now just update the progress bars
|
||||
mapOverItems(new ItemOperator() {
|
||||
@Override
|
||||
public boolean evaluate(ItemInfo info, View view) {
|
||||
if (view instanceof PendingAppWidgetHostView
|
||||
&& changedInfo.contains(info)) {
|
||||
((LauncherAppWidgetInfo) info).installProgress = 100;
|
||||
((PendingAppWidgetHostView) view).applyState();
|
||||
}
|
||||
// process all the shortcuts
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isOverlayShown() {
|
||||
return mOverlayShown;
|
||||
}
|
||||
@@ -3608,62 +3562,6 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
|
||||
return mLauncher.getCellPosMapper();
|
||||
}
|
||||
|
||||
/**
|
||||
* Used as a workaround to ensure that the AppWidgetService receives the
|
||||
* PACKAGE_ADDED broadcast before updating widgets.
|
||||
*/
|
||||
private class DeferredWidgetRefresh implements Runnable, ProviderChangedListener {
|
||||
private final ArrayList<LauncherAppWidgetInfo> mInfos;
|
||||
private final LauncherWidgetHolder mWidgetHolder;
|
||||
private final Handler mHandler;
|
||||
|
||||
private boolean mRefreshPending;
|
||||
|
||||
DeferredWidgetRefresh(ArrayList<LauncherAppWidgetInfo> infos,
|
||||
LauncherWidgetHolder holder) {
|
||||
mInfos = infos;
|
||||
mWidgetHolder = holder;
|
||||
mHandler = mLauncher.mHandler;
|
||||
mRefreshPending = true;
|
||||
|
||||
mWidgetHolder.addProviderChangeListener(this);
|
||||
// Force refresh after 10 seconds, if we don't get the provider changed event.
|
||||
// This could happen when the provider is no longer available in the app.
|
||||
Message msg = Message.obtain(mHandler, this);
|
||||
msg.obj = DeferredWidgetRefresh.class;
|
||||
mHandler.sendMessageDelayed(msg, 10000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
mWidgetHolder.removeProviderChangeListener(this);
|
||||
mHandler.removeCallbacks(this);
|
||||
|
||||
if (!mRefreshPending) {
|
||||
return;
|
||||
}
|
||||
|
||||
mRefreshPending = false;
|
||||
|
||||
ArrayList<PendingAppWidgetHostView> views = new ArrayList<>(mInfos.size());
|
||||
mapOverItems((info, view) -> {
|
||||
if (view instanceof PendingAppWidgetHostView && mInfos.contains(info)) {
|
||||
views.add((PendingAppWidgetHostView) view);
|
||||
}
|
||||
// process all children
|
||||
return false;
|
||||
});
|
||||
for (PendingAppWidgetHostView view : views) {
|
||||
view.reInflate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyWidgetProvidersChanged() {
|
||||
run();
|
||||
}
|
||||
}
|
||||
|
||||
private class StateTransitionListener extends AnimatorListenerAdapter
|
||||
implements AnimatorUpdateListener {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user