mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
fixed : add retry count mechanism for widget configuration
- closes : #5765 - closes : #5764 - closes : #5534 - closes : #5505 - closes : #4533
This commit is contained in:
@@ -226,11 +226,31 @@ public class LauncherWidgetHolder {
|
||||
*/
|
||||
public void startConfigActivity(@NonNull BaseDraggingActivity activity, int widgetId,
|
||||
int requestCode) {
|
||||
startConfigActivity(activity, widgetId, requestCode, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the configuration activity for the widget with retry counter
|
||||
*
|
||||
* @param activity The activity in which to start the configuration page
|
||||
* @param widgetId The ID of the widget
|
||||
* @param requestCode The request code
|
||||
* @param retryCount The number of retries attempted
|
||||
*/
|
||||
private void startConfigActivity(@NonNull BaseDraggingActivity activity, int widgetId,
|
||||
int requestCode, int retryCount) {
|
||||
if (!WIDGETS_ENABLED) {
|
||||
sendActionCancelled(activity, requestCode);
|
||||
return;
|
||||
}
|
||||
|
||||
// Prevent infinite loops by limiting retries
|
||||
if (retryCount >= 3) {
|
||||
Log.e(this.getClass().getName(), "Too many retries for widget configuration, cancelling");
|
||||
sendActionCancelled(activity, requestCode);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: startConfigActivity");
|
||||
mWidgetHost.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode,
|
||||
@@ -240,18 +260,22 @@ public class LauncherWidgetHolder {
|
||||
sendActionCancelled(activity, requestCode);
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Widget ID became invalid, possibly due to two-step configuration some cases
|
||||
Log.e(this.getClass().getName(), "Widget ID became invalid during configuration", e);
|
||||
handleInvalidWidgetId(activity, widgetId, requestCode);
|
||||
Log.e(this.getClass().getName(), "Widget ID became invalid during configuration (retry " + retryCount + ")", e);
|
||||
handleInvalidWidgetId(activity, widgetId, requestCode, retryCount + 1);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleInvalidWidgetId(BaseDraggingActivity activity, int widgetId, int requestCode) {
|
||||
handleInvalidWidgetId(activity, widgetId, requestCode, 0);
|
||||
}
|
||||
|
||||
private void handleInvalidWidgetId(BaseDraggingActivity activity, int widgetId, int requestCode, int retryCount) {
|
||||
// Remove the invalid widget
|
||||
deleteAppWidgetId(widgetId);
|
||||
|
||||
int newWidgetId = allocateAppWidgetId();
|
||||
if (newWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
|
||||
startConfigActivity(activity, newWidgetId, requestCode);
|
||||
startConfigActivity(activity, newWidgetId, requestCode, retryCount);
|
||||
} else {
|
||||
sendActionCancelled(activity, requestCode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user