package com.google.samples.apps.iosched.explore;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.annotation.Nullable;
import android.view.View;
import com.google.samples.apps.iosched.R;
import com.google.samples.apps.iosched.explore.data.MessageData;
import com.google.samples.apps.iosched.messaging.MessagingRegistration;
import com.google.samples.apps.iosched.messaging.MessagingRegistrationWithGCM;
import com.google.samples.apps.iosched.settings.ConfMessageCardUtils;
import com.google.samples.apps.iosched.settings.SettingsUtils;
import com.google.samples.apps.iosched.util.WiFiUtils;
import static com.google.samples.apps.iosched.util.LogUtils.LOGD;
import static com.google.samples.apps.iosched.util.LogUtils.makeLogTag;
/**
* Helper class to create message data view objects representing MessageCards for the Explore I/O
* stream.
*/
public class MessageCardHelper {
private static final String TAG = makeLogTag(MessageCardHelper.class);
private static final String TWITTER_PACKAGE_NAME = "com.twitter.android";
private static final String GPLUS_PACKAGE_NAME = "com.google.android.apps.plus";
public static MessageData getSimpleMessageCardData(
final ConfMessageCardUtils.ConfMessageCard card) {
MessageData messageData = new MessageData();
messageData.setEndButtonStringResourceId(R.string.ok);
messageData.setMessage(card.getSimpleMessage());
messageData.setEndButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
ConfMessageCardUtils.markDismissedConfMessageCard(v.getContext(), card);
}
});
return messageData;
}
/**
* Return the conference messages opt-in data.
*/
public static MessageData getConferenceOptInMessageData() {
MessageData messageData = new MessageData();
messageData.setStartButtonStringResourceId(R.string.explore_io_msgcards_answer_no);
messageData.setMessageStringResourceId(R.string.explore_io_msgcards_ask_opt_in);
messageData.setEndButtonStringResourceId(R.string.explore_io_msgcards_answer_yes);
messageData.setStartButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LOGD(TAG, "Marking conference messages question answered with decline.");
ConfMessageCardUtils.markAnsweredConfMessageCardsPrompt(view.getContext(), true);
ConfMessageCardUtils.setConfMessageCardsEnabled(view.getContext(), false);
Activity activity;
if ((activity = getActivity(view)) != null) {
// This will activate re-registering with the correct GCM topic(s).
new MessagingRegistrationWithGCM(activity).registerDevice();
}
}
});
messageData.setEndButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LOGD(TAG, "Marking conference messages question answered with affirmation.");
ConfMessageCardUtils.markAnsweredConfMessageCardsPrompt(view.getContext(), true);
ConfMessageCardUtils.setConfMessageCardsEnabled(view.getContext(), true);
Activity activity;
if ((activity = getActivity(view)) != null) {
// This will activate re-registering with the correct GCM topic(s).
new MessagingRegistrationWithGCM(activity).registerDevice();
}
}
});
return messageData;
}
/**
* Return the notifications messages opt-in data.
*/
public static MessageData getNotificationsOptInMessageData() {
MessageData messageData = new MessageData();
messageData.setStartButtonStringResourceId(R.string.explore_io_msgcards_answer_no);
messageData.setMessageStringResourceId(R.string.explore_io_notifications_ask_opt_in);
messageData.setEndButtonStringResourceId(R.string.explore_io_msgcards_answer_yes);
messageData.setStartButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LOGD(TAG, "Marking notifications question answered with decline.");
ConfMessageCardUtils.setDismissedConfMessageCard(view.getContext(),
ConfMessageCardUtils.ConfMessageCard.SESSION_NOTIFICATIONS, false);
SettingsUtils.setShowSessionReminders(view.getContext(), false);
SettingsUtils.setShowSessionFeedbackReminders(view.getContext(), false);
}
});
messageData.setEndButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LOGD(TAG, "Marking notifications messages question answered with affirmation.");
ConfMessageCardUtils.setDismissedConfMessageCard(view.getContext(),
ConfMessageCardUtils.ConfMessageCard.SESSION_NOTIFICATIONS, true);
SettingsUtils.setShowSessionReminders(view.getContext(), true);
SettingsUtils.setShowSessionFeedbackReminders(view.getContext(), true);
}
});
return messageData;
}
/**
* Return the wifi setup card data.
*/
public static MessageData getWifiSetupMessageData() {
MessageData messageData = new MessageData();
messageData.setStartButtonStringResourceId(R.string.explore_io_msgcards_answer_no);
messageData.setMessageStringResourceId(R.string.question_setup_wifi_card_text);
messageData.setEndButtonStringResourceId(R.string.explore_io_msgcards_answer_yes);
messageData.setIconDrawableId(R.drawable.message_card_wifi);
messageData.setStartButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LOGD(TAG, "Marking wifi setup declined.");
// Switching like this ensure the value change listener is fired.
SettingsUtils.markDeclinedWifiSetup(view.getContext(), false);
SettingsUtils.markDeclinedWifiSetup(view.getContext(), true);
}
});
messageData.setEndButtonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LOGD(TAG, "Installing conference wifi.");
WiFiUtils.installConferenceWiFi(view.getContext());
// Switching like this ensure the value change listener is fired.
SettingsUtils.markDeclinedWifiSetup(view.getContext(), true);
SettingsUtils.markDeclinedWifiSetup(view.getContext(), false);
}
});
return messageData;
}
/**
* Return whether a package is installed.
*/
public static boolean isPackageInstalledAndEnabled(Context context, String packageName) {
PackageManager pm = context.getPackageManager();
PackageInfo info;
try {
info = pm.getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
info = null;
}
return info != null &&
info.applicationInfo != null &&
info.applicationInfo.enabled;
}
@Nullable()
private static Activity getActivity(View view) {
Context context = view.getContext();
while (context instanceof ContextWrapper) {
if (context instanceof Activity) {
return (Activity)context;
}
context = ((ContextWrapper)context).getBaseContext();
}
return null;
}
}