Cordova calendar plugin for Windows Phone 8

If you worked with Cordova/Phonegap and came across calendar plugin for Windows Phone 8 you must be knowing that Windows Phone 8 does not support calendar plugin officially and there is no plugin in Cordova plugin registry. As a workaround I wrote native plugin to add appointments to device calendar and thought to share it with my readers in quickie blog. 🙂

Create a new cs file in plugins directory named AddCalendarEvents.cs and add following code-

using Microsoft.Phone.Tasks;
using Microsoft.Phone.UserData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using WPCordovaClassLib.Cordova;
using WPCordovaClassLib.Cordova.Commands;
using WPCordovaClassLib.Cordova.JSON;

namespace Cordova.Extension.Commands {
	public class AddCalendarEvents: BaseCommand {
		public void addCalendarEvents(String str) {
			string[] calendarValues = str.Split('|');

			SaveAppointmentTask saveAppointmentTask = new SaveAppointmentTask();

			int appointmentYear = Int32.Parse(calendarValues[3]);
			int appointmentMonth = Int32.Parse(calendarValues[4]);
			int appointmentDate = Int32.Parse(calendarValues[5]);
			float appointmentTime = float.Parse(calendarValues[6]);

			DateTime scheduleApptDateStart = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 0, 0)).AddHours(appointmentTime);
			DateTime scheduleApptDateEnd = (new DateTime(appointmentYear, appointmentMonth, appointmentDate, 7, 30, 0)).AddHours(appointmentTime);
			saveAppointmentTask.StartTime = scheduleApptDateStart;
			saveAppointmentTask.EndTime = scheduleApptDateEnd;
			saveAppointmentTask.Subject = calendarValues[1];
			saveAppointmentTask.Location = calendarValues[2];
			saveAppointmentTask.Details = "";
			saveAppointmentTask.IsAllDayEvent = false;
			saveAppointmentTask.Reminder = Reminder.FifteenMinutes;
			saveAppointmentTask.AppointmentStatus = Microsoft.Phone.UserData.AppointmentStatus.Busy;
			saveAppointmentTask.Show();
		}

		public void getCalendarEventData(String str) {
			ButtonAppointments_Click();
		}

		private void ButtonAppointments_Click() {
			Appointments appts = new Appointments();

			//Identify the method that runs after the asynchronous search completes.
			appts.SearchCompleted += new EventHandler < AppointmentsSearchEventArgs > (Appointments_SearchCompleted);

			DateTime start = DateTime.Now;
			DateTime end = start.AddDays(7);
			int max = 20;

			//Start the asynchronous search.
			appts.SearchAsync(start, end, max, "Appointments Test #1");
		}

		void Appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e) {
			//Do something with the results.
			//MessageBox.Show(e.Results.Count().ToString());
			try {
				e.Results.ToList();
				MessageBox.Show("Success");
			} catch (System.Exception) {}

		}
	}
}

Refer plugin in config.xml-

<feature name="AddCalendarEvents">
        <param name="wp-package" value="AddCalendarEvents" />
        <param name="onload" value="true" />
    </feature>

 

If you have basic knowledge of Cordova it should not be tough.

You can call it using

var inputCalendarString = notes + '|' + title + '|' + location + '|' + appointmentDate.getFullYear() + '|' + (appointmentDate.getMonth() + 1) + '|' + appointmentDate.getDate() + '|' + '1.0' + '|' + ' ';
cordova.exec(null, null, "AddCalendarEvents", "addCalendarEvents", inputCalendarString);

It works for one event but if you have loop of events it will not work. To support multiple events, you can maintain Localstorage flag & data with current index of events data. Use resume callback to add rest of the events using custom appointment plugin that you wrote. Each time your app resumes you increment index and add events data from next index.

document.addEventListener('resume', this.resumeApp, false)
resumeApp: function () {
if (localStorage.getItem('updatecalendar') == 'false') {
syncUpdatedCalendarWP8();
      }
}

Happy Coding!

Advertisements

Book Review- Wordpress Mobile Applications with PhoneGap

WordPress Mobile applications with PhoneGap
Title: WordPress Mobile Applications with PhoneGap
Author: Yuxian Eugene Liang
Publisher: Packt Publishing
Language: English
ISBN: 978-1849519861
Paperback: 96 pages
Publishing Date: December 21, 2012
Rating: 4
Reviewed by: Nikhil Mishra

Topics Covered:

  • WordPress environment setup
  • WordPress themes and plugins installation
  • Google Maps API with GeoPlaces theme to provide geographic capabilities to the theme
  • WordPress JSON API to GET, POST and UPDATE blog content
  • Theming content using jQuery Mobile
  • Deploying application on Android using PhoneGap

My Thoughts
I was somewhat confused when I got to review a book which weighs in at just over 50 pages plus index but I have to say I was pretty much impressed by its contents. The book covers the use of the WordPress JSON API plugin for embedding WordPress blog in mobile applications. The author spends time in explaining basics of WordPress installation, installing WordPress themes and plugins, theming using jQuery Mobile, and building applications for Android using Eclipse and PhoneGap. Could have been better if Yuxian explained iOS deployment and used some open source theme to explain GeoPlaces. Overall, a great guide for beginners.

To read more about this book visit link.

PhoneGap Build is out of Beta- now pay to build your apps!

This is for all the users who used phonegap build to build their mobile apps. Now, pay to build your apps using Phonegap build. However Phonegap is giving 3 months of the paid plan on them for their BETA users.