mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
Merge "Disabling auto restore of widgets. > Always show "Setup" button for a widget which has a config activity." into ub-launcher3-burnaby
This commit is contained in:
@@ -13,6 +13,7 @@ import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.launcher3.LauncherSettings.Favorites;
|
||||
import com.android.launcher3.compat.AppWidgetManagerCompat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -48,7 +49,8 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
|
||||
final AppWidgetProviderInfo provider = widgets.getAppWidgetInfo(newWidgetIds[i]);
|
||||
final int state;
|
||||
if (LauncherModel.isValidProvider(provider)) {
|
||||
state = LauncherAppWidgetInfo.RESTORE_COMPLETED;
|
||||
// This will ensure that we show 'Click to setup' UI if required.
|
||||
state = LauncherAppWidgetInfo.FLAG_UI_NOT_READY;
|
||||
} else {
|
||||
state = LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY;
|
||||
}
|
||||
|
||||
@@ -3889,7 +3889,8 @@ public class Launcher extends Activity
|
||||
|
||||
if (!mIsSafeModeEnabled
|
||||
&& ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY) == 0)
|
||||
&& ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) != 0)) {
|
||||
&& (item.restoreStatus != LauncherAppWidgetInfo.RESTORE_COMPLETED)) {
|
||||
|
||||
if (appWidgetInfo == null) {
|
||||
if (DEBUG_WIDGETS) {
|
||||
Log.d(TAG, "Removing restored widget: id=" + item.appWidgetId
|
||||
@@ -3899,42 +3900,51 @@ public class Launcher extends Activity
|
||||
LauncherModel.deleteItemFromDatabase(this, item);
|
||||
return;
|
||||
}
|
||||
// Note: This assumes that the id remap broadcast is received before this step.
|
||||
// If that is not the case, the id remap will be ignored and user may see the
|
||||
// click to setup view.
|
||||
PendingAddWidgetInfo pendingInfo = new PendingAddWidgetInfo(this, appWidgetInfo, null);
|
||||
pendingInfo.spanX = item.spanX;
|
||||
pendingInfo.spanY = item.spanY;
|
||||
pendingInfo.minSpanX = item.minSpanX;
|
||||
pendingInfo.minSpanY = item.minSpanY;
|
||||
Bundle options = null;
|
||||
WidgetHostViewLoader.getDefaultOptionsForWidget(this, pendingInfo);
|
||||
|
||||
int newWidgetId = mAppWidgetHost.allocateAppWidgetId();
|
||||
boolean success = mAppWidgetManager.bindAppWidgetIdIfAllowed(
|
||||
newWidgetId, appWidgetInfo, options);
|
||||
// If we do not have a valid id, try to bind an id.
|
||||
if ((item.restoreStatus & LauncherAppWidgetInfo.FLAG_ID_NOT_VALID) != 0) {
|
||||
// Note: This assumes that the id remap broadcast is received before this step.
|
||||
// If that is not the case, the id remap will be ignored and user may see the
|
||||
// click to setup view.
|
||||
PendingAddWidgetInfo pendingInfo = new PendingAddWidgetInfo(this, appWidgetInfo, null);
|
||||
pendingInfo.spanX = item.spanX;
|
||||
pendingInfo.spanY = item.spanY;
|
||||
pendingInfo.minSpanX = item.minSpanX;
|
||||
pendingInfo.minSpanY = item.minSpanY;
|
||||
Bundle options = null;
|
||||
WidgetHostViewLoader.getDefaultOptionsForWidget(this, pendingInfo);
|
||||
|
||||
// TODO consider showing a permission dialog when the widget is clicked.
|
||||
if (!success) {
|
||||
mAppWidgetHost.deleteAppWidgetId(newWidgetId);
|
||||
if (DEBUG_WIDGETS) {
|
||||
Log.d(TAG, "Removing restored widget: id=" + item.appWidgetId
|
||||
+ " belongs to component " + item.providerName
|
||||
+ ", as the launcher is unable to bing a new widget id");
|
||||
int newWidgetId = mAppWidgetHost.allocateAppWidgetId();
|
||||
boolean success = mAppWidgetManager.bindAppWidgetIdIfAllowed(
|
||||
newWidgetId, appWidgetInfo, options);
|
||||
|
||||
// TODO consider showing a permission dialog when the widget is clicked.
|
||||
if (!success) {
|
||||
mAppWidgetHost.deleteAppWidgetId(newWidgetId);
|
||||
if (DEBUG_WIDGETS) {
|
||||
Log.d(TAG, "Removing restored widget: id=" + item.appWidgetId
|
||||
+ " belongs to component " + item.providerName
|
||||
+ ", as the launcher is unable to bing a new widget id");
|
||||
}
|
||||
LauncherModel.deleteItemFromDatabase(this, item);
|
||||
return;
|
||||
}
|
||||
LauncherModel.deleteItemFromDatabase(this, item);
|
||||
return;
|
||||
|
||||
item.appWidgetId = newWidgetId;
|
||||
|
||||
// If the widget has a configure activity, it is still needs to set it up, otherwise
|
||||
// the widget is ready to go.
|
||||
item.restoreStatus = (appWidgetInfo.configure == null)
|
||||
? LauncherAppWidgetInfo.RESTORE_COMPLETED
|
||||
: LauncherAppWidgetInfo.FLAG_UI_NOT_READY;
|
||||
|
||||
LauncherModel.updateItemInDatabase(this, item);
|
||||
} else if (((item.restoreStatus & LauncherAppWidgetInfo.FLAG_UI_NOT_READY) != 0)
|
||||
&& (appWidgetInfo.configure == null)) {
|
||||
// If the ID is already valid, verify if we need to configure or not.
|
||||
item.restoreStatus = LauncherAppWidgetInfo.RESTORE_COMPLETED;
|
||||
LauncherModel.updateItemInDatabase(this, item);
|
||||
}
|
||||
|
||||
item.appWidgetId = newWidgetId;
|
||||
|
||||
// If the widget has a configure activity, it is still needs to set it up, otherwise
|
||||
// the widget is ready to go.
|
||||
item.restoreStatus = (appWidgetInfo.configure == null)
|
||||
? LauncherAppWidgetInfo.RESTORE_COMPLETED
|
||||
: LauncherAppWidgetInfo.FLAG_UI_NOT_READY;
|
||||
|
||||
LauncherModel.updateItemInDatabase(this, item);
|
||||
}
|
||||
|
||||
if (!mIsSafeModeEnabled && item.restoreStatus == LauncherAppWidgetInfo.RESTORE_COMPLETED) {
|
||||
|
||||
@@ -2195,7 +2195,7 @@ public class LauncherModel extends BroadcastReceiver
|
||||
|
||||
// Id would be valid only if the widget restore broadcast was received.
|
||||
if (isIdValid) {
|
||||
status = LauncherAppWidgetInfo.RESTORE_COMPLETED;
|
||||
status = LauncherAppWidgetInfo.FLAG_UI_NOT_READY;
|
||||
} else {
|
||||
status &= ~LauncherAppWidgetInfo
|
||||
.FLAG_PROVIDER_NOT_READY;
|
||||
@@ -3197,6 +3197,12 @@ public class LauncherModel extends BroadcastReceiver
|
||||
widgetInfo.restoreStatus &=
|
||||
~LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY &
|
||||
~LauncherAppWidgetInfo.FLAG_RESTORE_STARTED;
|
||||
|
||||
// adding this flag ensures that launcher shows 'click to setup'
|
||||
// if the widget has a config activity. In case there is no config
|
||||
// activity, it will be marked as 'restored' during bind.
|
||||
widgetInfo.restoreStatus |= LauncherAppWidgetInfo.FLAG_UI_NOT_READY;
|
||||
|
||||
widgets.add(widgetInfo);
|
||||
updateItemInDatabase(context, widgetInfo);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user