Добавление виджета на домашний экран моего кастомного Launcher без разрешения привязки - PullRequest
0 голосов
/ 29 марта 2019

Я создаю пользовательский Launcher на основе Launcher 3. Я хочу добавить виджет на домашний экран Launcher при установке Launcher, но избегайте диалогового окна разрешения привязки. Launcher 3 предоставляет файл default_launcher.xml, куда вы можете поместить Тег appwidget, но он удаляет appwidgetid в методе AppWidgetParser defaultLayoutparser из-за «ложного» возврата из bindAppWidgetIdIfAllowed. Как добавить предварительно сконфигурированный виджет на домашний экран Launcher

Класс AppWidgetParser расширяет PendingWidgetParser {

    protected long verifyAndInsert(ComponentName cn, Bundle extras) {
        try {
            mPackageManager.getReceiverInfo(cn, 0);
        } catch (Exception e) {
            String[] packages = mPackageManager.currentToCanonicalPackageNames(
                    new String[] { cn.getPackageName() });
            cn = new ComponentName(packages[0], cn.getClassName());
            try {
                mPackageManager.getReceiverInfo(cn, 0);
            } catch (Exception e1) {
                Log.d(TAG, "Can't find widget provider: " + cn.getClassName());
                return -1;
            }
        }

        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext);
        long insertedId = -1;
        try {
            int appWidgetId = mAppWidgetHost.allocateAppWidgetId();

            if (!appWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, cn)) {
                Log.e(TAG, "Unable to bind app widget id " + cn);
                mAppWidgetHost.deleteAppWidgetId(appWidgetId);// here it removes the appWidgetId
                return -1;
            }

            mValues.put(Favorites.APPWIDGET_ID, appWidgetId);
            mValues.put(Favorites.APPWIDGET_PROVIDER, cn.flattenToString());
            mValues.put(Favorites._ID, mCallback.generateNewItemId());
            insertedId = mCallback.insertAndCheck(mDb, mValues);
            if (insertedId < 0) {
                mAppWidgetHost.deleteAppWidgetId(appWidgetId);
                return insertedId;
            }

            // Send a broadcast to configure the widget
            if (!extras.isEmpty()) {
                Intent intent = new Intent(ACTION_APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE);
                intent.setComponent(cn);
                intent.putExtras(extras);
                intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
                mContext.sendBroadcast(intent);
            }
        } catch (RuntimeException ex) {
            Log.e(TAG, "Problem allocating appWidgetId", ex);
        }
        return insertedId;
    }
}
...