Java Code Examples for android.appwidget.AppWidgetManager#ACTION_APPWIDGET_BIND

The following examples show how to use android.appwidget.AppWidgetManager#ACTION_APPWIDGET_BIND . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AddItemActivity.java    From LaunchEnr with GNU General Public License v3.0 5 votes vote down vote up
/**
 * Called when place-automatically button is clicked.
 */
public void onPlaceAutomaticallyClick(View v) {
    if (mRequest.getRequestType() == PinItemRequestCompat.REQUEST_TYPE_SHORTCUT) {
        InstallShortcutReceiver.queueShortcut(
                new ShortcutInfoCompat(mRequest.getShortcutInfo()), this);
        mRequest.accept();
        finish();
        return;
    }

    mPendingBindWidgetId = mAppWidgetHost.allocateAppWidgetId();
    boolean success = mAppWidgetManager.bindAppWidgetIdIfAllowed(
            mPendingBindWidgetId, mRequest.getAppWidgetProviderInfo(this), mWidgetOptions);
    if (success) {
        acceptWidget(mPendingBindWidgetId);
        return;
    }

    // request bind widget
    Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mPendingBindWidgetId);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER,
            mPendingWidgetInfo.componentName);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER_PROFILE,
            mRequest.getAppWidgetProviderInfo(this).getProfile());
    startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
}
 
Example 2
Source File: WidgetAddFlowHandler.java    From LaunchEnr with GNU General Public License v3.0 5 votes vote down vote up
public void startBindFlow(Launcher launcher, int appWidgetId, ItemInfo info, int requestCode) {
    launcher.setWaitingForResult(PendingRequestArgs.forWidgetInfo(appWidgetId, this, info));

    Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, mProviderInfo.provider);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER_PROFILE,
            mProviderInfo.getProfile());
    // TODO: we need to make sure that this accounts for the options bundle.
    // intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options);
    launcher.startActivityForResult(intent, requestCode);
}
 
Example 3
Source File: ItemViewFactory.java    From openlauncher with Apache License 2.0 4 votes vote down vote up
public static View getWidgetView(final Context context, final DesktopCallback callback, final DragAction.Action type, final Item item) {
    if (HomeActivity._appWidgetHost == null) return null;

    AppWidgetProviderInfo appWidgetInfo = HomeActivity._appWidgetManager.getAppWidgetInfo(item.getWidgetValue());

    // If we can't find the Widget, we don't want to proceed or we'll end up with a phantom on the home screen.
    if (appWidgetInfo == null) {
        int appWidgetId = HomeActivity._appWidgetHost.allocateAppWidgetId();
        if (item._label.contains(Definitions.DELIMITER)) {
            String[] cnSplit = item._label.split(Definitions.DELIMITER);
            ComponentName cn = new ComponentName(cnSplit[0], cnSplit[1]);

            if (HomeActivity._appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, cn)) {
                appWidgetInfo = HomeActivity._appWidgetManager.getAppWidgetInfo(appWidgetId);
                item.setWidgetValue(appWidgetId);
                HomeActivity._db.updateItem(item);
            } else {
                LOG.error("Unable to bind app widget id: {} ", cn);
                Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, cn);

                HomeActivity._launcher.startActivityForResult(intent, HomeActivity.REQUEST_PICK_APPWIDGET);
                return null;
            }
        } else {
            // Delete the Widget if we don't have enough information to rehydrate it.
            LOG.debug("Unable to identify Widget for rehydration; removing from database");
            HomeActivity._db.deleteItem(item, false);
            return null;
        }
    }

    final WidgetView widgetView = (WidgetView) HomeActivity._appWidgetHost.createView(context, item.getWidgetValue(), appWidgetInfo);
    widgetView.setAppWidget(item.getWidgetValue(), appWidgetInfo);

    final WidgetContainer widgetContainer = new WidgetContainer(context, widgetView, item);

    // TODO move this to standard DragHandler.getLongClick() method
    // needs to be set on widgetView but use widgetContainer inside
    widgetView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            if (Setup.appSettings().getDesktopLock()) {
                return false;
            }
            if (Setup.appSettings().getGestureFeedback()) {
                Tool.vibrate(view);
            }
            DragHandler.startDrag(widgetContainer, item, DragAction.Action.DESKTOP, callback);
            return true;
        }
    });

    widgetView.post(new Runnable() {
        @Override
        public void run() {
            widgetContainer.updateWidgetOption(item);
        }
    });

    return widgetContainer;
}
 
Example 4
Source File: Launcher.java    From TurboLauncher with Apache License 2.0 4 votes vote down vote up
/**
 * Process a widget drop.
 * 
 * @param info
 *            The PendingAppWidgetInfo of the widget being added.
 * @param screenId
 *            The ID of the screen where it should be added
 * @param cell
 *            The cell it should be added to, optional
 * @param position
 *            The location on the screen where it was dropped, optional
 */
void addAppWidgetFromDrop(PendingAddWidgetInfo info, long container,
		long screenId, int[] cell, int[] span, int[] loc) {
	resetAddInfo();
	mPendingAddInfo.container = info.container = container;
	mPendingAddInfo.screenId = info.screenId = screenId;
	mPendingAddInfo.dropPos = loc;
	mPendingAddInfo.minSpanX = info.minSpanX;
	mPendingAddInfo.minSpanY = info.minSpanY;

	if (cell != null) {
		mPendingAddInfo.cellX = cell[0];
		mPendingAddInfo.cellY = cell[1];
	}
	if (span != null) {
		mPendingAddInfo.spanX = span[0];
		mPendingAddInfo.spanY = span[1];
	}

	AppWidgetHostView hostView = info.boundWidget;
	int appWidgetId;
	if (hostView != null) {
		appWidgetId = hostView.getAppWidgetId();
		addAppWidgetImpl(appWidgetId, info, hostView, info.info);
	} else {
		// In this case, we either need to start an activity to get
		// permission to bind
		// the widget, or we need to start an activity to configure the
		// widget, or both.
		appWidgetId = getAppWidgetHost().allocateAppWidgetId();
		Bundle options = info.bindOptions;

		boolean success = false;
		if (options != null) {
			success = mAppWidgetManager.bindAppWidgetIdIfAllowed(
					appWidgetId, info.componentName, options);
		} else {
			success = mAppWidgetManager.bindAppWidgetIdIfAllowed(
					appWidgetId, info.componentName);
		}
		if (success) {
			addAppWidgetImpl(appWidgetId, info, null, info.info);
		} else {
			mPendingAddWidgetInfo = info.info;
			Intent intent = new Intent(
					AppWidgetManager.ACTION_APPWIDGET_BIND);
			intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
					appWidgetId);
			intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER,
					info.componentName);
			// TODO: we need to make sure that this accounts for the options
			// bundle.
			// intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS,
			// options);
			startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
		}
	}
}