Android Open Source - DashClockWidget Calendar Selection Preference






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 av a2  s. c om*/
 *
 * 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.calendar;

import net.nurik.roman.dashclock.R;

import android.app.AlertDialog.Builder;
import android.content.AsyncQueryHandler;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.database.Cursor;
import android.preference.MultiSelectListPreference;
import android.preference.PreferenceManager;
import android.provider.CalendarContract;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ResourceCursorAdapter;
import android.widget.TextView;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CalendarSelectionPreference extends MultiSelectListPreference {
    private CalendarListAdapter mAdapter;

    private QueryHandler mQueryHandler;
    private Set<String> mSelectedCalendars;

    public CalendarSelectionPreference(Context context) {
        this(context, null);
    }

    public CalendarSelectionPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        List<Pair<String, Boolean>> allCalendars = CalendarExtension.getAllCalendars(context);
        Set<String> allVisibleCalendarsSet = new HashSet<String>();
        for (Pair<String, Boolean> pair : allCalendars) {
            if (pair.second) {
                allVisibleCalendarsSet.add(pair.first);
            }
        }

        mSelectedCalendars = new HashSet<String>(PreferenceManager
                .getDefaultSharedPreferences(context)
                .getStringSet(CalendarExtension.PREF_SELECTED_CALENDARS, allVisibleCalendarsSet));

        mAdapter = new CalendarListAdapter(context);
        mQueryHandler = new QueryHandler(context, mAdapter);

        mQueryHandler.startQuery(0,
                null,
                CalendarContract.Calendars.CONTENT_URI,
                CalendarQuery.PROJECTION,
                CalendarContract.Calendars.SYNC_EVENTS + "=1",
                null,
                CalendarContract.Calendars.CALENDAR_DISPLAY_NAME);
    }

    @Override
    protected void onPrepareDialogBuilder(Builder builder) {
        builder.setAdapter(mAdapter, null);
        builder.setTitle(R.string.pref_calendar_selected_title);
        builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
                sp.edit().putStringSet(CalendarExtension.PREF_SELECTED_CALENDARS,
                        mSelectedCalendars).commit();

                // since we have extended the list preference, it is our responsibility to inform the change listener.
                if (getOnPreferenceChangeListener() != null) {
                    getOnPreferenceChangeListener()
                            .onPreferenceChange(CalendarSelectionPreference.this,
                                    mSelectedCalendars);
                }
            }
        });
    }

    static class QueryHandler extends AsyncQueryHandler {
        private final CalendarListAdapter mAdapter;

        public QueryHandler(Context context, CalendarListAdapter adapter) {
            super(context.getContentResolver());
            mAdapter = adapter;
        }

        @Override
        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
            mAdapter.swapCursor(cursor);
        }
    }

    @Override
    protected Object onGetDefaultValue(TypedArray a, int index) {
        // No support for default value attribute
        return null;
    }

    public class CalendarListAdapter extends ResourceCursorAdapter {
        public CalendarListAdapter(Context context) {
            super(context, R.layout.list_item_calendar, null, false);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            TextView calendarNameView = (TextView) view.findViewById(android.R.id.text1);
            calendarNameView.setText(cursor.getString(CalendarQuery.CALENDAR_DISPLAY_NAME));

            TextView accountNameView = (TextView) view.findViewById(android.R.id.text2);
            accountNameView.setText(cursor.getString(CalendarQuery.ACCOUNT_NAME));

            final String calendarId = cursor.getString(CalendarQuery.ID);

            final CheckBox checkBox = (CheckBox) view.findViewById(R.id.calendar_checkbox);
            checkBox.setChecked(mSelectedCalendars.contains(calendarId));

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mSelectedCalendars.contains(calendarId)) {
                        mSelectedCalendars.remove(calendarId);
                        checkBox.setChecked(false);
                    } else {
                        mSelectedCalendars.add(calendarId);
                        checkBox.setChecked(true);
                    }
                }
            });
        }
    }

    interface CalendarQuery {
        public String[] PROJECTION = new String[] {
                CalendarContract.Calendars._ID,
                CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
                CalendarContract.Calendars.ACCOUNT_NAME,
        };

        public int ID = 0;
        public int CALENDAR_DISPLAY_NAME = 1;
        public int ACCOUNT_NAME = 2;
    }
}




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