/*
* Copyright (C) 2011 The original author or authors.
*
* 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.zapta.apps.maniana.util;
import javax.annotation.Nullable;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import com.zapta.apps.maniana.annotations.MainActivityScope;
/**
* Google Calendar related utility methods.
*
* @author Tal Dayan
*/
@MainActivityScope
public final class CalendarUtil {
/** Do not instantiate */
private CalendarUtil() {
}
/**
* Try constructing an intent to launch google calendar for time = now.
* <p>
* Note: we could cache the intent or the intent type for better performance.
*/
@Nullable
public static Intent maybeConstructGoogleCalendarIntent(Context context) {
// Try first variant 2. Newer.
{
final Intent intent = constructGoogleCalendarIntentVariant2();
if (IntentUtil.isIntentAvailable(context, intent)) {
return intent;
}
}
// Else, try variant 1. Older.
{
final Intent intent = constructGoogleCalendarIntentVariant1();
if (IntentUtil.isIntentAvailable(context, intent)) {
return intent;
}
}
// Fail
return null;
}
// For debugging only.
public static String debugGoogleCalendarVariants(Context context) {
final StringBuilder sb = new StringBuilder();
if (IntentUtil.isIntentAvailable(context, constructGoogleCalendarIntentVariant2())) {
sb.append("V2");
}
if (IntentUtil.isIntentAvailable(context, constructGoogleCalendarIntentVariant1())) {
if (sb.length() != 0) {
sb.append(", ");
}
sb.append("V1");
}
if (sb.length() == 0) {
sb.append("(none found)");
}
return sb.toString();
}
/** Google calendar intent variant 1 */
private static Intent constructGoogleCalendarIntentVariant1() {
final Intent intent = new Intent();
return intent.setClassName("com.android.calendar", "com.android.calendar.AgendaActivity");
}
/** Google calendar intent variant 1 */
private static Intent constructGoogleCalendarIntentVariant2() {
final Intent intent = new Intent();
// Newer calendar have API for launching the google calendar. See documentation at:
// http://developer.android.com/guide/topics/providers/calendar-provider.html#intents
final long startTimeMillis = System.currentTimeMillis();
final String url = "content://com.android.calendar/time/" + startTimeMillis;
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
return intent;
}
}