package com.appboy.ui.actions; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.support.annotation.VisibleForTesting; import com.appboy.Constants; import com.appboy.enums.AppStore; import com.appboy.enums.Channel; import com.appboy.support.AppboyLogger; /** * Action that opens the Google Play market to a specific app in either the Google Play store app * or via the AppboyWebViewActivity class. If it is opened in the AppboyWebViewActivity class, the * time spent viewing the app in the web view counts toward the session duration. */ public final class GooglePlayAppDetailsAction implements IAction { private static final String TAG = String.format("%s.%s", Constants.APPBOY_LOG_TAG_PREFIX, GooglePlayAppDetailsAction.class.getName()); private static final String PLAY_STORE_APP_BASE = "market://details?id="; private static final String PLAY_STORE_WEB_BASE = "https://play.google.com/store/apps/details?id="; private static final String AMAZON_STORE_APP_BASE = "amzn://apps/android?asin="; private static final String AMAZON_STORE_WEB_BASE = "http://www.amazon.com/gp/mas/dl/android?asin="; private final String mPackageName; private boolean mUseWebView; private final AppStore mAppStore; private final String mKindleId; private final Channel mChannel; public GooglePlayAppDetailsAction(String packageName, boolean useAppboyWebView, AppStore appStore, String kindleId, Channel channel) { mPackageName = packageName; mUseWebView = useAppboyWebView; mAppStore = appStore; mKindleId = kindleId; mChannel = channel; } @Override public Channel getChannel() { return mChannel; } @Override public void execute(Context context) { if (mAppStore != AppStore.KINDLE_STORE) { try { context.getPackageManager().getPackageInfo(("com.google.android.gsf"), 0); } catch (PackageManager.NameNotFoundException e) { AppboyLogger.i(TAG, "Google Play Store not found, launching Play Store with WebView"); mUseWebView = true; } catch (Exception e) { AppboyLogger.e(TAG, "Unexpected exception while checking for com.google.android.gsf."); mUseWebView = true; } } String uriString; if (mUseWebView) { if (mAppStore == AppStore.KINDLE_STORE) { uriString = AMAZON_STORE_WEB_BASE + mKindleId; } else { uriString = PLAY_STORE_WEB_BASE + mPackageName; } Uri uri = Uri.parse(uriString); UriAction.openUriWithWebView(context, uri, null); } else { if (mAppStore == AppStore.KINDLE_STORE) { uriString = AMAZON_STORE_APP_BASE + mKindleId; } else { uriString = PLAY_STORE_APP_BASE + mPackageName; } Uri uri = Uri.parse(uriString); Intent intent = new Intent(Intent.ACTION_VIEW, uri); context.startActivity(intent); } } @VisibleForTesting public boolean getUseWebView() { return mUseWebView; } }