The demonstrated example includes the following steps.
1. Getting authentication from Google Account using OAuth.
2. Listing out the Number calenders associated with your account.
3. Adding the event to the selected calendar from the list.
4. User can Add a new calendar and add the event to that also.
package com.example.eventtogooglecalendar;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
import com.google.android.gms.auth.UserRecoverableAuthException;
import com.google.android.gms.common.GooglePlayServicesUtil;
public class CalendarActivity extends Activity{
// Account[] accounts;
static final int MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST = 1;
static final int MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR = 2;
static String accountName = "";
static String calendarID = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getGoogleAccounts();
}
private void getGoogleAccounts() {
// TODO Auto-generated method stub
final AccountManager manager = AccountManager.get(CalendarActivity.this);
final Account[] accounts = manager.getAccountsByType("com.google");
final ArrayList<String> possibleEmails = new ArrayList<String>();
for (Account account : accounts) {
possibleEmails.add(account.name);
}
if(possibleEmails.size() > 0)
{
List<String> list = possibleEmails;
final CharSequence[] chars = list.toArray(new CharSequence[possibleEmails.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(CalendarActivity.this);
builder.setTitle("Please select an account to which agenda has to get sync.");
/*builder.setMultiChoiceItems(chars, null, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
}
});*/
builder.setSingleChoiceItems(chars, -1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
accountName = possibleEmails.get(which).trim();
}
});
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if(accountName.trim().length() > 0)
getAndUseAuthTokenInAsyncTask(accountName);
else
Toast.makeText(CalendarActivity.this, "Please select an account.", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
}
}
void getAndUseAuthTokenInAsyncTask(final String accountname) {
AsyncTask task = new AsyncTask() {
ProgressDialog dialog;
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(CalendarActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.setMessage("Authenticating....");
dialog.show();
}
@Override
protected Object doInBackground(Object... params) {
getAndUseAuthTokenBlockingforCalendar(accountname);
return null;
}
};
task.execute((Void)null);
}
void getAndUseAuthTokenBlockingforCalendar(String accountname) {
try {
final String token = GoogleAuthUtil.getToken(CalendarActivity.this, accountname, "oauth2:https://www.googleapis.com/auth/calendar"); //oauth2:https://www.googleapis.com/auth/calendar
if (token.contains("invalid") ){
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(CalendarActivity.this, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
else if(token.length() > 0)
{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://www.googleapis.com/calendar/v3/users/me/calendarList??maxResults=50&access_token="+token);
org.apache.http.HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
final ArrayList<String> ids = new ArrayList<String>();
final ArrayList<String> names = new ArrayList<String>();
if(entity!=null) {
try {
String data = EntityUtils.toString(entity);
System.out.println("data :"+data);
JSONObject mainobject = new JSONObject(data);
JSONArray objectarray = mainobject.getJSONArray("items");
for(int i = 0; i < objectarray.length(); i++)
{
JSONObject subObject = (JSONObject) objectarray.get(i);
String id = subObject.getString("id");
String name = subObject.getString("summary");
ids.add(id);
names.add(name);
}
ids.add("111");
names.add("Create New Calendar.");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ids.size() > 0 && names.size() > 0)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
showCalendarsList(ids, names);
}
});
}
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(playEx.getConnectionStatusCode(), this, MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST);
System.out.println("GooglePlayServicesAvailabilityException :");
playEx.printStackTrace();
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST);
System.out.println("UserRecoverableAuthException :");
userAuthEx.printStackTrace();
return;
} catch (IOException transientEx) {
System.out.println("IOException :");
transientEx.printStackTrace();
return;
} catch (GoogleAuthException authEx) {
System.out.println("GoogleAuthException :");
authEx.printStackTrace();
return;
}
}
private void showCalendarsList(final ArrayList<String> ids, ArrayList<String> names) {
List<String> list = names;
final CharSequence[] chars = list.toArray(new CharSequence[list.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(CalendarActivity.this);
builder.setTitle("Please select an account to which agenda has to get sync.");
builder.setSingleChoiceItems(chars, -1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
calendarID = ids.get(which).toString();
}
});
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if(!calendarID.trim().equals("111"))
{
if(calendarID.trim().length() > 0)
addEventToCalendar(calendarID);
else
Toast.makeText(CalendarActivity.this, "Please select any one of the calendar.", Toast.LENGTH_SHORT).show();
}
else
{
AlertDialog.Builder builder1 = new AlertDialog.Builder(CalendarActivity.this);
builder1.setTitle("Please enter calendar name.");
final EditText etxt = new EditText(CalendarActivity.this);
builder1.setView(etxt);
builder1.setPositiveButton("Create", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(etxt.getEditableText().toString().trim().length() > 0)
{
System.out.println("calendar name :"+etxt.getEditableText().toString().trim());
createNewCalendar(etxt.getEditableText().toString().trim());
}
else
{
Toast.makeText(CalendarActivity.this, "Please enter calendar name.", Toast.LENGTH_SHORT).show();
}
}
});
builder1.setNegativeButton("Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
builder1.show();
}
System.out.println("selected calendar :"+calendarID);
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
}
void addEventToCalendar(final String mailid) {
AsyncTask task = new AsyncTask() {
ProgressDialog dialog;
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(CalendarActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.setMessage("Adding event to calendar....");
dialog.show();
}
@Override
protected Object doInBackground(Object... params) {
addtoCalendar(mailid);
return null;
}
};
task.execute((Void)null);
}
protected void addtoCalendar(String mailid) {
try {
final String token = GoogleAuthUtil.getToken(CalendarActivity.this, accountName, "oauth2:https://www.googleapis.com/auth/calendar"); //oauth2:https://www.googleapis.com/auth/calendar
if (token.contains("invalid") ){
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(CalendarActivity.this, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
else if(token.length() > 0)
{
String jsonString = "{\"end\": {\"dateTime\": \"2013-10-02T17:10:00\",\"timeZone\": \"Asia/Kolkata\" }, \"start\": { \"dateTime\": \"2013-10-02T16:15:00\",\"timeZone\": \"Asia/Kolkata\" }, \"creator\": { \"self\": true }, \"description\": \"New Event Description\", \"location\": \"Hyderabad\", \"reminders\": { \"useDefault\": true }, \"status\": \"confirmed\", \"summary\": \"Event1 Summery\", \"visibility\": \"default\"}";
String url = "https://www.googleapis.com/calendar/v3/calendars/"+ mailid + "/events?access_token=" + token;
URL u = new URL(url);
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
String a = connection.getRequestMethod();
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept-Charset", "utf-8");
connection.setRequestProperty("Authorization", "OAuth" + token);
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(jsonString);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println("respose after adding event:"+line);
}
wr.close();
rd.close();
if(connection.getResponseCode() == 200)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(CalendarActivity.this, "Event added successfully", Toast.LENGTH_SHORT).show();
return;
}
});
}
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(playEx.getConnectionStatusCode(), this, MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("GooglePlayServicesAvailabilityException :");
playEx.printStackTrace();
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("UserRecoverableAuthException :");
userAuthEx.printStackTrace();
return;
} catch (IOException transientEx) {
System.out.println("IOException :");
transientEx.printStackTrace();
return;
} catch (GoogleAuthException authEx) {
System.out.println("GoogleAuthException :");
authEx.printStackTrace();
return;
}
}
void createNewCalendar(final String calendarName) {
AsyncTask task = new AsyncTask() {
ProgressDialog dialog;
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(CalendarActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.setMessage("Creating calendar....");
dialog.show();
}
@Override
protected Object doInBackground(Object... params) {
createCalendar(calendarName);
return null;
}
};
task.execute((Void)null);
}
protected void createCalendar(String calendarName) {
try {
final String token = GoogleAuthUtil.getToken(CalendarActivity.this, accountName, "oauth2:https://www.googleapis.com/auth/calendar"); //oauth2:https://www.googleapis.com/auth/calendar
if (token.contains("invalid") ){
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(CalendarActivity.this, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
else if(token.length() > 0)
{
String jsonString = "{\"summary\": \""+calendarName+"\"}";
String url = "https://www.googleapis.com/calendar/v3/calendars?access_token=" + token;
URL u = new URL(url);
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
String a = connection.getRequestMethod();
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept-Charset", "utf-8");
connection.setRequestProperty("Authorization", "OAuth" + token);
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(jsonString);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println("respose :"+line);
}
wr.close();
rd.close();
if(connection.getResponseCode() == 200)
{
String calendarID = "";
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(CalendarActivity.this, "Calendar added successfully", Toast.LENGTH_SHORT).show();
return;
}
});
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://www.googleapis.com/calendar/v3/users/me/calendarList??maxResults=50&access_token="+token);
org.apache.http.HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if(entity!=null) {
try {
String data = EntityUtils.toString(entity);
System.out.println("data :"+data);
JSONObject mainobject = new JSONObject(data);
JSONArray objectarray = mainobject.getJSONArray("items");
for(int i = 0; i < objectarray.length(); i++)
{
JSONObject subObject = (JSONObject) objectarray.get(i);
String id = subObject.getString("id");
String name = subObject.getString("summary");
if(name.equalsIgnoreCase(calendarName.trim()))
{
calendarID = id;
addEventToCalendar(calendarID);
return;
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(playEx.getConnectionStatusCode(), this, MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("GooglePlayServicesAvailabilityException :");
playEx.printStackTrace();
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("UserRecoverableAuthException :");
userAuthEx.printStackTrace();
return;
} catch (IOException transientEx) {
System.out.println("IOException :");
transientEx.printStackTrace();
return;
} catch (GoogleAuthException authEx) {
System.out.println("GoogleAuthException :");
authEx.printStackTrace();
return;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST:
System.out.println("on activity result :"+resultCode);
if (resultCode == RESULT_OK) {
getAndUseAuthTokenInAsyncTask(accountName);
}
case MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR:
System.out.println("on activity result :"+resultCode);
if (resultCode == RESULT_OK) {
addEventToCalendar(calendarID);
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
1. Getting authentication from Google Account using OAuth.
2. Listing out the Number calenders associated with your account.
3. Adding the event to the selected calendar from the list.
4. User can Add a new calendar and add the event to that also.
package com.example.eventtogooglecalendar;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
import com.google.android.gms.auth.UserRecoverableAuthException;
import com.google.android.gms.common.GooglePlayServicesUtil;
public class CalendarActivity extends Activity{
// Account[] accounts;
static final int MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST = 1;
static final int MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR = 2;
static String accountName = "";
static String calendarID = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getGoogleAccounts();
}
private void getGoogleAccounts() {
// TODO Auto-generated method stub
final AccountManager manager = AccountManager.get(CalendarActivity.this);
final Account[] accounts = manager.getAccountsByType("com.google");
final ArrayList<String> possibleEmails = new ArrayList<String>();
for (Account account : accounts) {
possibleEmails.add(account.name);
}
if(possibleEmails.size() > 0)
{
List<String> list = possibleEmails;
final CharSequence[] chars = list.toArray(new CharSequence[possibleEmails.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(CalendarActivity.this);
builder.setTitle("Please select an account to which agenda has to get sync.");
/*builder.setMultiChoiceItems(chars, null, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
}
});*/
builder.setSingleChoiceItems(chars, -1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
accountName = possibleEmails.get(which).trim();
}
});
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if(accountName.trim().length() > 0)
getAndUseAuthTokenInAsyncTask(accountName);
else
Toast.makeText(CalendarActivity.this, "Please select an account.", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
}
}
void getAndUseAuthTokenInAsyncTask(final String accountname) {
AsyncTask task = new AsyncTask() {
ProgressDialog dialog;
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(CalendarActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.setMessage("Authenticating....");
dialog.show();
}
@Override
protected Object doInBackground(Object... params) {
getAndUseAuthTokenBlockingforCalendar(accountname);
return null;
}
};
task.execute((Void)null);
}
void getAndUseAuthTokenBlockingforCalendar(String accountname) {
try {
final String token = GoogleAuthUtil.getToken(CalendarActivity.this, accountname, "oauth2:https://www.googleapis.com/auth/calendar"); //oauth2:https://www.googleapis.com/auth/calendar
if (token.contains("invalid") ){
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(CalendarActivity.this, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
else if(token.length() > 0)
{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://www.googleapis.com/calendar/v3/users/me/calendarList??maxResults=50&access_token="+token);
org.apache.http.HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
final ArrayList<String> ids = new ArrayList<String>();
final ArrayList<String> names = new ArrayList<String>();
if(entity!=null) {
try {
String data = EntityUtils.toString(entity);
System.out.println("data :"+data);
JSONObject mainobject = new JSONObject(data);
JSONArray objectarray = mainobject.getJSONArray("items");
for(int i = 0; i < objectarray.length(); i++)
{
JSONObject subObject = (JSONObject) objectarray.get(i);
String id = subObject.getString("id");
String name = subObject.getString("summary");
ids.add(id);
names.add(name);
}
ids.add("111");
names.add("Create New Calendar.");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ids.size() > 0 && names.size() > 0)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
showCalendarsList(ids, names);
}
});
}
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(playEx.getConnectionStatusCode(), this, MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST);
System.out.println("GooglePlayServicesAvailabilityException :");
playEx.printStackTrace();
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST);
System.out.println("UserRecoverableAuthException :");
userAuthEx.printStackTrace();
return;
} catch (IOException transientEx) {
System.out.println("IOException :");
transientEx.printStackTrace();
return;
} catch (GoogleAuthException authEx) {
System.out.println("GoogleAuthException :");
authEx.printStackTrace();
return;
}
}
private void showCalendarsList(final ArrayList<String> ids, ArrayList<String> names) {
List<String> list = names;
final CharSequence[] chars = list.toArray(new CharSequence[list.size()]);
AlertDialog.Builder builder = new AlertDialog.Builder(CalendarActivity.this);
builder.setTitle("Please select an account to which agenda has to get sync.");
builder.setSingleChoiceItems(chars, -1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
calendarID = ids.get(which).toString();
}
});
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if(!calendarID.trim().equals("111"))
{
if(calendarID.trim().length() > 0)
addEventToCalendar(calendarID);
else
Toast.makeText(CalendarActivity.this, "Please select any one of the calendar.", Toast.LENGTH_SHORT).show();
}
else
{
AlertDialog.Builder builder1 = new AlertDialog.Builder(CalendarActivity.this);
builder1.setTitle("Please enter calendar name.");
final EditText etxt = new EditText(CalendarActivity.this);
builder1.setView(etxt);
builder1.setPositiveButton("Create", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(etxt.getEditableText().toString().trim().length() > 0)
{
System.out.println("calendar name :"+etxt.getEditableText().toString().trim());
createNewCalendar(etxt.getEditableText().toString().trim());
}
else
{
Toast.makeText(CalendarActivity.this, "Please enter calendar name.", Toast.LENGTH_SHORT).show();
}
}
});
builder1.setNegativeButton("Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
builder1.show();
}
System.out.println("selected calendar :"+calendarID);
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
}
void addEventToCalendar(final String mailid) {
AsyncTask task = new AsyncTask() {
ProgressDialog dialog;
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(CalendarActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.setMessage("Adding event to calendar....");
dialog.show();
}
@Override
protected Object doInBackground(Object... params) {
addtoCalendar(mailid);
return null;
}
};
task.execute((Void)null);
}
protected void addtoCalendar(String mailid) {
try {
final String token = GoogleAuthUtil.getToken(CalendarActivity.this, accountName, "oauth2:https://www.googleapis.com/auth/calendar"); //oauth2:https://www.googleapis.com/auth/calendar
if (token.contains("invalid") ){
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(CalendarActivity.this, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
else if(token.length() > 0)
{
String jsonString = "{\"end\": {\"dateTime\": \"2013-10-02T17:10:00\",\"timeZone\": \"Asia/Kolkata\" }, \"start\": { \"dateTime\": \"2013-10-02T16:15:00\",\"timeZone\": \"Asia/Kolkata\" }, \"creator\": { \"self\": true }, \"description\": \"New Event Description\", \"location\": \"Hyderabad\", \"reminders\": { \"useDefault\": true }, \"status\": \"confirmed\", \"summary\": \"Event1 Summery\", \"visibility\": \"default\"}";
String url = "https://www.googleapis.com/calendar/v3/calendars/"+ mailid + "/events?access_token=" + token;
URL u = new URL(url);
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
String a = connection.getRequestMethod();
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept-Charset", "utf-8");
connection.setRequestProperty("Authorization", "OAuth" + token);
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(jsonString);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println("respose after adding event:"+line);
}
wr.close();
rd.close();
if(connection.getResponseCode() == 200)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(CalendarActivity.this, "Event added successfully", Toast.LENGTH_SHORT).show();
return;
}
});
}
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(playEx.getConnectionStatusCode(), this, MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("GooglePlayServicesAvailabilityException :");
playEx.printStackTrace();
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("UserRecoverableAuthException :");
userAuthEx.printStackTrace();
return;
} catch (IOException transientEx) {
System.out.println("IOException :");
transientEx.printStackTrace();
return;
} catch (GoogleAuthException authEx) {
System.out.println("GoogleAuthException :");
authEx.printStackTrace();
return;
}
}
void createNewCalendar(final String calendarName) {
AsyncTask task = new AsyncTask() {
ProgressDialog dialog;
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(CalendarActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.setMessage("Creating calendar....");
dialog.show();
}
@Override
protected Object doInBackground(Object... params) {
createCalendar(calendarName);
return null;
}
};
task.execute((Void)null);
}
protected void createCalendar(String calendarName) {
try {
final String token = GoogleAuthUtil.getToken(CalendarActivity.this, accountName, "oauth2:https://www.googleapis.com/auth/calendar"); //oauth2:https://www.googleapis.com/auth/calendar
if (token.contains("invalid") ){
// invalidate the token that we found is bad so that GoogleAuthUtil won't
// return it next time (it may have cached it)
GoogleAuthUtil.invalidateToken(CalendarActivity.this, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
else if(token.length() > 0)
{
String jsonString = "{\"summary\": \""+calendarName+"\"}";
String url = "https://www.googleapis.com/calendar/v3/calendars?access_token=" + token;
URL u = new URL(url);
HttpURLConnection connection = (HttpURLConnection) u.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
String a = connection.getRequestMethod();
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept-Charset", "utf-8");
connection.setRequestProperty("Authorization", "OAuth" + token);
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(jsonString);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println("respose :"+line);
}
wr.close();
rd.close();
if(connection.getResponseCode() == 200)
{
String calendarID = "";
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(CalendarActivity.this, "Calendar added successfully", Toast.LENGTH_SHORT).show();
return;
}
});
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("https://www.googleapis.com/calendar/v3/users/me/calendarList??maxResults=50&access_token="+token);
org.apache.http.HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if(entity!=null) {
try {
String data = EntityUtils.toString(entity);
System.out.println("data :"+data);
JSONObject mainobject = new JSONObject(data);
JSONArray objectarray = mainobject.getJSONArray("items");
for(int i = 0; i < objectarray.length(); i++)
{
JSONObject subObject = (JSONObject) objectarray.get(i);
String id = subObject.getString("id");
String name = subObject.getString("summary");
if(name.equalsIgnoreCase(calendarName.trim()))
{
calendarID = id;
addEventToCalendar(calendarID);
return;
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(playEx.getConnectionStatusCode(), this, MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("GooglePlayServicesAvailabilityException :");
playEx.printStackTrace();
} catch (UserRecoverableAuthException userAuthEx) {
startActivityForResult( userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR);
System.out.println("UserRecoverableAuthException :");
userAuthEx.printStackTrace();
return;
} catch (IOException transientEx) {
System.out.println("IOException :");
transientEx.printStackTrace();
return;
} catch (GoogleAuthException authEx) {
System.out.println("GoogleAuthException :");
authEx.printStackTrace();
return;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case MY_ACTIVITYS_AUTH_REQUEST_CODE_CALENDARSLIST:
System.out.println("on activity result :"+resultCode);
if (resultCode == RESULT_OK) {
getAndUseAuthTokenInAsyncTask(accountName);
}
case MY_ACTIVITYS_AUTH_REQUEST_CODE_ADDTOCALENDAR:
System.out.println("on activity result :"+resultCode);
if (resultCode == RESULT_OK) {
addEventToCalendar(calendarID);
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
No comments:
Post a Comment