Android Open Source - DashClockWidget Widget Renderer






From Project

Back to project page DashClockWidget.

License

The source code is released under:

Apache License

If you think the Android project DashClockWidget listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2013 Google Inc.//from   w  w w  .j a v a2 s  . co m
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.android.apps.dashclock.render;

import net.nurik.roman.dashclock.R;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.RemoteViews;

import com.google.android.apps.dashclock.WidgetProvider;
import com.google.android.apps.dashclock.configuration.AppearanceConfig;

/**
 * Class in charge of rendering DashClock to {@link android.widget.RemoteViews},
 * along with {@link WidgetRemoteViewsFactoryService}.
 */
public class WidgetRenderer extends DashClockRenderer {
    protected WidgetRenderer(Context context) {
        super(context);
    }

    @Override
    protected ViewBuilder onCreateViewBuilder() {
        return new WidgetViewBuilder(mContext);
    }

    /**
     * Renders the DashClock UI to the given app widget IDs.
     */
    public static void renderWidgets(Context context, int[] appWidgetIds) {
        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

        WidgetRenderer renderer = new WidgetRenderer(context);
        for (int appWidgetId : appWidgetIds) {
            Options options = new Options();
            options.appWidgetId = appWidgetId;
            options.target = Options.TARGET_HOME_SCREEN;
            options.minWidthDp= Integer.MAX_VALUE;
            options.minHeightDp = Integer.MAX_VALUE;
            Bundle widgetOptions = appWidgetManager.getAppWidgetOptions(appWidgetId);
            if (widgetOptions != null) {
                options.minWidthDp = widgetOptions
                        .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
                options.minHeightDp = widgetOptions
                        .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
                options.target = (AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD ==
                        widgetOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY))
                        ? Options.TARGET_LOCK_SCREEN : Options.TARGET_HOME_SCREEN;
            }
            options.foregroundColor = AppearanceConfig.getForegroundColor(context, options.target);

            renderer.setOptions(options);
            appWidgetManager.updateAppWidget(appWidgetId,
                    (RemoteViews) renderer.renderWidget(null));

            // During an update to an existing expanded widget, setRemoteAdapter does nothing,
            // so we need to explicitly call notifyAppWidgetViewDataChanged to update data.
            appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId,
                    R.id.expanded_extensions);
        }
    }

    public static void notifyDataSetChanged(Context context) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(
                new ComponentName(context, WidgetProvider.class));
        appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds,
                R.id.expanded_extensions);
    }

    @Override
    protected void builderSetExpandedExtensionsAdapter(ViewBuilder vb, int viewId,
            boolean mini, Intent clickTemplateIntent) {
        Intent remoteAdapterIntent = new Intent(mContext, WidgetRemoteViewsFactoryService.class);
        if (mOptions.appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
            remoteAdapterIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                    mOptions.appWidgetId);
            remoteAdapterIntent.putExtra(WidgetRemoteViewsFactoryService.EXTRA_TARGET,
                    mOptions.target);
            remoteAdapterIntent.putExtra(WidgetRemoteViewsFactoryService.EXTRA_IS_MINI,
                    mini);
        }

        // TODO: is this setData call really necessary?
        remoteAdapterIntent.setData(Uri.parse(remoteAdapterIntent.toUri(Intent.URI_INTENT_SCHEME)));
        RemoteViews root = (RemoteViews) vb.getRoot();
        root.setRemoteAdapter(viewId, remoteAdapterIntent);
        root.setPendingIntentTemplate(viewId,
                PendingIntent.getActivity(mContext, 0,
                        clickTemplateIntent, PendingIntent.FLAG_UPDATE_CURRENT));
    }
}




Java Source Code List

com.example.dashclock.exampleextension.ExampleExtension.java
com.example.dashclock.exampleextension.ExampleSettingsActivity.java
com.google.android.apps.dashclock.BackupAgent.java
com.google.android.apps.dashclock.DashClockService.java
com.google.android.apps.dashclock.DaydreamService.java
com.google.android.apps.dashclock.ExtensionHost.java
com.google.android.apps.dashclock.ExtensionManager.java
com.google.android.apps.dashclock.ExtensionPackageChangeReceiver.java
com.google.android.apps.dashclock.HelpUtils.java
com.google.android.apps.dashclock.LogAttachmentProvider.java
com.google.android.apps.dashclock.LogUtils.java
com.google.android.apps.dashclock.PeriodicExtensionRefreshReceiver.java
com.google.android.apps.dashclock.Utils.java
com.google.android.apps.dashclock.WidgetClickProxyActivity.java
com.google.android.apps.dashclock.WidgetProvider.java
com.google.android.apps.dashclock.api.DashClockExtension.java
com.google.android.apps.dashclock.api.ExtensionData.java
com.google.android.apps.dashclock.api.VisibleExtension.java
com.google.android.apps.dashclock.api.package-info.java
com.google.android.apps.dashclock.calendar.CalendarExtension.java
com.google.android.apps.dashclock.calendar.CalendarSelectionPreference.java
com.google.android.apps.dashclock.calendar.CalendarSettingsActivity.java
com.google.android.apps.dashclock.configuration.AppChooserPreference.java
com.google.android.apps.dashclock.configuration.AppearanceConfig.java
com.google.android.apps.dashclock.configuration.BaseSettingsActivity.java
com.google.android.apps.dashclock.configuration.ColorPreference.java
com.google.android.apps.dashclock.configuration.ConfigurationActivity.java
com.google.android.apps.dashclock.configuration.ConfigureAdvancedFragment.java
com.google.android.apps.dashclock.configuration.ConfigureAppearanceFragment.java
com.google.android.apps.dashclock.configuration.ConfigureDaydreamFragment.java
com.google.android.apps.dashclock.configuration.ConfigureExtensionsFragment.java
com.google.android.apps.dashclock.configuration.DaydreamProxyActivity.java
com.google.android.apps.dashclock.gmail.GmailContract.java
com.google.android.apps.dashclock.gmail.GmailExtension.java
com.google.android.apps.dashclock.gmail.GmailSettingsActivity.java
com.google.android.apps.dashclock.nextalarm.NextAlarmExtension.java
com.google.android.apps.dashclock.nextalarm.NextAlarmSettingsActivity.java
com.google.android.apps.dashclock.phone.MissedCallsExtension.java
com.google.android.apps.dashclock.phone.SmsExtension.java
com.google.android.apps.dashclock.phone.TelephonyProviderConstants.java
com.google.android.apps.dashclock.render.DashClockRenderer.java
com.google.android.apps.dashclock.render.SimpleRenderer.java
com.google.android.apps.dashclock.render.SimpleViewBuilder.java
com.google.android.apps.dashclock.render.ViewBuilder.java
com.google.android.apps.dashclock.render.WidgetRemoteViewsFactoryService.java
com.google.android.apps.dashclock.render.WidgetRenderer.java
com.google.android.apps.dashclock.render.WidgetViewBuilder.java
com.google.android.apps.dashclock.ui.DragGripView.java
com.google.android.apps.dashclock.ui.EdgeEffectUtil.java
com.google.android.apps.dashclock.ui.PagerPositionStrip.java
com.google.android.apps.dashclock.ui.SimplePagedTabsHelper.java
com.google.android.apps.dashclock.ui.SwipeDismissListViewTouchListener.java
com.google.android.apps.dashclock.ui.UndoBarController.java
com.google.android.apps.dashclock.weather.CantGetWeatherException.java
com.google.android.apps.dashclock.weather.WeatherData.java
com.google.android.apps.dashclock.weather.WeatherExtension.java
com.google.android.apps.dashclock.weather.WeatherLocationPreference.java
com.google.android.apps.dashclock.weather.WeatherRetryReceiver.java
com.google.android.apps.dashclock.weather.WeatherSettingsActivity.java
com.google.android.apps.dashclock.weather.YahooWeatherApiClient.java
com.google.android.apps.dashclock.weather.YahooWeatherApiConfig.java