package cgeo.geocaching.playservices;
import cgeo.geocaching.CgeoApplication;
import cgeo.geocaching.Intents;
import cgeo.geocaching.R;
import cgeo.geocaching.SearchActivity;
import cgeo.geocaching.models.Geocache;
import cgeo.geocaching.utils.ProcessUtils;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.google.android.gms.appinvite.AppInviteInvitation;
import com.google.android.gms.appinvite.AppInviteInvitation.IntentBuilder;
public class AppInvite {
private AppInvite() {
// utility class
}
public static boolean isAvailable() {
return ProcessUtils.isIntentAvailable("com.google.android.gms.appinvite.ACTION_APP_INVITE");
}
public static void send(@NonNull final Activity activity, @NonNull final String message) {
sendInvite(activity, message, null);
}
private static void sendInvite(@NonNull final Activity activity, @NonNull final String message, @Nullable final String deepLink) {
final IntentBuilder builder = new AppInviteInvitation.IntentBuilder(activity.getString(R.string.invitation_title)).setMessage(message).setCustomImage(Uri.parse("http://www.cgeo.org/images/cgeo-logo.png"));
if (deepLink != null) {
builder.setDeepLink(Uri.parse(deepLink));
}
final Intent intent = builder.build();
activity.startActivityForResult(intent, Intents.APP_INVITE_REQUEST_CODE);
}
public static void send(@NonNull final Activity activity, @NonNull final Geocache cache) {
final StringBuilder message = new StringBuilder();
final String lineBreak = "\n";
final String separator = ": ";
message.append(cache.getName()).append(lineBreak);
message.append(activity.getString(R.string.cache_type)).append(separator).append(cache.getType().getL10n()).append(lineBreak);
message.append(activity.getString(R.string.cache_terrain)).append(separator).append(cache.getTerrain()).append(lineBreak);
message.append(activity.getString(R.string.cache_difficulty)).append(separator).append(cache.getDifficulty()).append(lineBreak);
message.append(cache.getUrl());
// there is a limit of 100 characters
while (message.length() > AppInviteInvitation.IntentBuilder.MAX_MESSAGE_LENGTH && message.lastIndexOf(lineBreak) > 0) {
message.delete(message.lastIndexOf(lineBreak), message.length());
}
final Intent searchIntent = new Intent(CgeoApplication.getInstance(), SearchActivity.class);
searchIntent.setAction(Intent.ACTION_SEARCH).putExtra(SearchManager.QUERY, cache.getGeocode()).putExtra(Intents.EXTRA_KEYWORD_SEARCH, false);
final String deepLink = searchIntent.toUri(0);
sendInvite(activity, message.toString(), deepLink);
}
}