package androidx.browser.customtabs; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; import android.util.SparseArray; import android.widget.RemoteViews; import androidx.annotation.AnimRes; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RestrictTo; import androidx.browser.customtabs.CustomTabColorSchemeParams; import androidx.browser.customtabs.CustomTabsSession; import androidx.core.app.ActivityOptionsCompat; import androidx.core.app.BundleCompat; import androidx.core.content.ContextCompat; import c.d.b.a.a; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; public final class CustomTabsIntent { public static final int COLOR_SCHEME_DARK = 2; public static final int COLOR_SCHEME_LIGHT = 1; private static final int COLOR_SCHEME_MAX = 2; public static final int COLOR_SCHEME_SYSTEM = 0; public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE"; public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON"; public static final String EXTRA_COLOR_SCHEME = "androidx.browser.customtabs.extra.COLOR_SCHEME"; public static final String EXTRA_COLOR_SCHEME_PARAMS = "androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS"; @Deprecated public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM"; public static final String EXTRA_ENABLE_INSTANT_APPS = "android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS"; public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING"; public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE"; public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS"; public static final String EXTRA_NAVIGATION_BAR_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_COLOR"; public static final String EXTRA_NAVIGATION_BAR_DIVIDER_COLOR = "androidx.browser.customtabs.extra.NAVIGATION_BAR_DIVIDER_COLOR"; public static final String EXTRA_REMOTEVIEWS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS"; public static final String EXTRA_REMOTEVIEWS_CLICKED_ID = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_CLICKED_ID"; public static final String EXTRA_REMOTEVIEWS_PENDINGINTENT = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT"; public static final String EXTRA_REMOTEVIEWS_VIEW_IDS = "android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS"; public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR"; public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String EXTRA_SESSION_ID = "android.support.customtabs.extra.SESSION_ID"; public static final String EXTRA_SHARE_STATE = "androidx.browser.customtabs.extra.SHARE_STATE"; public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON"; public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY"; public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR"; public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS"; private static final String EXTRA_USER_OPT_OUT_FROM_CUSTOM_TABS = "android.support.customtabs.extra.user_opt_out"; public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION"; public static final String KEY_ICON = "android.support.customtabs.customaction.ICON"; public static final String KEY_ID = "android.support.customtabs.customaction.ID"; public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE"; public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT"; private static final int MAX_TOOLBAR_ITEMS = 5; public static final int NO_TITLE = 0; public static final int SHARE_STATE_DEFAULT = 0; private static final int SHARE_STATE_MAX = 2; public static final int SHARE_STATE_OFF = 2; public static final int SHARE_STATE_ON = 1; public static final int SHOW_PAGE_TITLE = 1; public static final int TOOLBAR_ACTION_BUTTON_ID = 0; @NonNull public final Intent intent; @Nullable public final Bundle startAnimationBundle; public static final class Builder { @Nullable private ArrayList mActionButtons; @Nullable private SparseArray mColorSchemeParamBundles; private final CustomTabColorSchemeParams.Builder mDefaultColorSchemeBuilder = new CustomTabColorSchemeParams.Builder(); @Nullable private Bundle mDefaultColorSchemeBundle; private boolean mInstantAppsEnabled = true; private final Intent mIntent = new Intent("android.intent.action.VIEW"); @Nullable private ArrayList mMenuItems; private int mShareState = 0; @Nullable private Bundle mStartAnimationBundle; public Builder() { } public Builder(@Nullable CustomTabsSession customTabsSession) { if (customTabsSession != null) { setSession(customTabsSession); } } private void setSessionParameters(@Nullable IBinder iBinder, @Nullable PendingIntent pendingIntent) { Bundle bundle = new Bundle(); BundleCompat.putBinder(bundle, "android.support.customtabs.extra.SESSION", iBinder); if (pendingIntent != null) { bundle.putParcelable("android.support.customtabs.extra.SESSION_ID", pendingIntent); } this.mIntent.putExtras(bundle); } @NonNull @Deprecated public Builder addDefaultShareMenuItem() { setShareState(1); return this; } @NonNull public Builder addMenuItem(@NonNull String str, @NonNull PendingIntent pendingIntent) { if (this.mMenuItems == null) { this.mMenuItems = new ArrayList<>(); } Bundle bundle = new Bundle(); bundle.putString("android.support.customtabs.customaction.MENU_ITEM_TITLE", str); bundle.putParcelable("android.support.customtabs.customaction.PENDING_INTENT", pendingIntent); this.mMenuItems.add(bundle); return this; } @NonNull @Deprecated public Builder addToolbarItem(int i, @NonNull Bitmap bitmap, @NonNull String str, @NonNull PendingIntent pendingIntent) throws IllegalStateException { if (this.mActionButtons == null) { this.mActionButtons = new ArrayList<>(); } if (this.mActionButtons.size() < 5) { Bundle bundle = new Bundle(); bundle.putInt("android.support.customtabs.customaction.ID", i); bundle.putParcelable("android.support.customtabs.customaction.ICON", bitmap); bundle.putString("android.support.customtabs.customaction.DESCRIPTION", str); bundle.putParcelable("android.support.customtabs.customaction.PENDING_INTENT", pendingIntent); this.mActionButtons.add(bundle); return this; } throw new IllegalStateException("Exceeded maximum toolbar item count of 5"); } @NonNull public CustomTabsIntent build() { if (!this.mIntent.hasExtra("android.support.customtabs.extra.SESSION")) { setSessionParameters(null, null); } ArrayList arrayList = this.mMenuItems; if (arrayList != null) { this.mIntent.putParcelableArrayListExtra("android.support.customtabs.extra.MENU_ITEMS", arrayList); } ArrayList arrayList2 = this.mActionButtons; if (arrayList2 != null) { this.mIntent.putParcelableArrayListExtra("android.support.customtabs.extra.TOOLBAR_ITEMS", arrayList2); } this.mIntent.putExtra("android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS", this.mInstantAppsEnabled); this.mIntent.putExtras(this.mDefaultColorSchemeBuilder.build().toBundle()); Bundle bundle = this.mDefaultColorSchemeBundle; if (bundle != null) { this.mIntent.putExtras(bundle); } if (this.mColorSchemeParamBundles != null) { Bundle bundle2 = new Bundle(); bundle2.putSparseParcelableArray("androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS", this.mColorSchemeParamBundles); this.mIntent.putExtras(bundle2); } this.mIntent.putExtra("androidx.browser.customtabs.extra.SHARE_STATE", this.mShareState); return new CustomTabsIntent(this.mIntent, this.mStartAnimationBundle); } @NonNull @Deprecated public Builder enableUrlBarHiding() { this.mIntent.putExtra("android.support.customtabs.extra.ENABLE_URLBAR_HIDING", true); return this; } @NonNull public Builder setActionButton(@NonNull Bitmap bitmap, @NonNull String str, @NonNull PendingIntent pendingIntent) { return setActionButton(bitmap, str, pendingIntent, false); } @NonNull public Builder setActionButton(@NonNull Bitmap bitmap, @NonNull String str, @NonNull PendingIntent pendingIntent, boolean z2) { Bundle bundle = new Bundle(); bundle.putInt("android.support.customtabs.customaction.ID", 0); bundle.putParcelable("android.support.customtabs.customaction.ICON", bitmap); bundle.putString("android.support.customtabs.customaction.DESCRIPTION", str); bundle.putParcelable("android.support.customtabs.customaction.PENDING_INTENT", pendingIntent); this.mIntent.putExtra("android.support.customtabs.extra.ACTION_BUTTON_BUNDLE", bundle); this.mIntent.putExtra("android.support.customtabs.extra.TINT_ACTION_BUTTON", z2); return this; } @NonNull public Builder setCloseButtonIcon(@NonNull Bitmap bitmap) { this.mIntent.putExtra("android.support.customtabs.extra.CLOSE_BUTTON_ICON", bitmap); return this; } @NonNull public Builder setColorScheme(int i) { if (i < 0 || i > 2) { throw new IllegalArgumentException("Invalid value for the colorScheme argument"); } this.mIntent.putExtra("androidx.browser.customtabs.extra.COLOR_SCHEME", i); return this; } @NonNull public Builder setColorSchemeParams(int i, @NonNull CustomTabColorSchemeParams customTabColorSchemeParams) { if (i < 0 || i > 2 || i == 0) { throw new IllegalArgumentException(a.k("Invalid colorScheme: ", i)); } if (this.mColorSchemeParamBundles == null) { this.mColorSchemeParamBundles = new SparseArray<>(); } this.mColorSchemeParamBundles.put(i, customTabColorSchemeParams.toBundle()); return this; } @NonNull public Builder setDefaultColorSchemeParams(@NonNull CustomTabColorSchemeParams customTabColorSchemeParams) { this.mDefaultColorSchemeBundle = customTabColorSchemeParams.toBundle(); return this; } @NonNull @Deprecated public Builder setDefaultShareMenuItemEnabled(boolean z2) { if (z2) { setShareState(1); } else { setShareState(2); } return this; } @NonNull public Builder setExitAnimations(@NonNull Context context, @AnimRes int i, @AnimRes int i2) { this.mIntent.putExtra("android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE", ActivityOptionsCompat.makeCustomAnimation(context, i, i2).toBundle()); return this; } @NonNull public Builder setInstantAppsEnabled(boolean z2) { this.mInstantAppsEnabled = z2; return this; } @NonNull @Deprecated public Builder setNavigationBarColor(@ColorInt int i) { this.mDefaultColorSchemeBuilder.setNavigationBarColor(i); return this; } @NonNull @Deprecated public Builder setNavigationBarDividerColor(@ColorInt int i) { this.mDefaultColorSchemeBuilder.setNavigationBarDividerColor(i); return this; } @NonNull @RestrictTo({RestrictTo.Scope.LIBRARY}) public Builder setPendingSession(@NonNull CustomTabsSession.PendingSession pendingSession) { setSessionParameters(null, pendingSession.getId()); return this; } @NonNull @Deprecated public Builder setSecondaryToolbarColor(@ColorInt int i) { this.mDefaultColorSchemeBuilder.setSecondaryToolbarColor(i); return this; } @NonNull public Builder setSecondaryToolbarViews(@NonNull RemoteViews remoteViews, @Nullable int[] iArr, @Nullable PendingIntent pendingIntent) { this.mIntent.putExtra("android.support.customtabs.extra.EXTRA_REMOTEVIEWS", remoteViews); this.mIntent.putExtra("android.support.customtabs.extra.EXTRA_REMOTEVIEWS_VIEW_IDS", iArr); this.mIntent.putExtra("android.support.customtabs.extra.EXTRA_REMOTEVIEWS_PENDINGINTENT", pendingIntent); return this; } @NonNull public Builder setSession(@NonNull CustomTabsSession customTabsSession) { this.mIntent.setPackage(customTabsSession.getComponentName().getPackageName()); setSessionParameters(customTabsSession.getBinder(), customTabsSession.getId()); return this; } @NonNull public Builder setShareState(int i) { if (i < 0 || i > 2) { throw new IllegalArgumentException("Invalid value for the shareState argument"); } this.mShareState = i; if (i == 1) { this.mIntent.putExtra("android.support.customtabs.extra.SHARE_MENU_ITEM", true); } else if (i == 2) { this.mIntent.putExtra("android.support.customtabs.extra.SHARE_MENU_ITEM", false); } else { this.mIntent.removeExtra("android.support.customtabs.extra.SHARE_MENU_ITEM"); } return this; } @NonNull public Builder setShowTitle(boolean z2) { this.mIntent.putExtra("android.support.customtabs.extra.TITLE_VISIBILITY", z2 ? 1 : 0); return this; } @NonNull public Builder setStartAnimations(@NonNull Context context, @AnimRes int i, @AnimRes int i2) { this.mStartAnimationBundle = ActivityOptionsCompat.makeCustomAnimation(context, i, i2).toBundle(); return this; } @NonNull @Deprecated public Builder setToolbarColor(@ColorInt int i) { this.mDefaultColorSchemeBuilder.setToolbarColor(i); return this; } @NonNull public Builder setUrlBarHidingEnabled(boolean z2) { this.mIntent.putExtra("android.support.customtabs.extra.ENABLE_URLBAR_HIDING", z2); return this; } } @Retention(RetentionPolicy.SOURCE) @RestrictTo({RestrictTo.Scope.LIBRARY}) public @interface ColorScheme { } @Retention(RetentionPolicy.SOURCE) @RestrictTo({RestrictTo.Scope.LIBRARY}) public @interface ShareState { } public CustomTabsIntent(@NonNull Intent intent, @Nullable Bundle bundle) { this.intent = intent; this.startAnimationBundle = bundle; } @NonNull public static CustomTabColorSchemeParams getColorSchemeParams(@NonNull Intent intent, int i) { Bundle bundle; if (i < 0 || i > 2 || i == 0) { throw new IllegalArgumentException(a.k("Invalid colorScheme: ", i)); } Bundle extras = intent.getExtras(); if (extras == null) { return CustomTabColorSchemeParams.fromBundle(null); } CustomTabColorSchemeParams fromBundle = CustomTabColorSchemeParams.fromBundle(extras); SparseArray sparseParcelableArray = extras.getSparseParcelableArray("androidx.browser.customtabs.extra.COLOR_SCHEME_PARAMS"); return (sparseParcelableArray == null || (bundle = (Bundle) sparseParcelableArray.get(i)) == null) ? fromBundle : CustomTabColorSchemeParams.fromBundle(bundle).withDefaults(fromBundle); } public static int getMaxToolbarItems() { return 5; } @NonNull public static Intent setAlwaysUseBrowserUI(@Nullable Intent intent) { if (intent == null) { intent = new Intent("android.intent.action.VIEW"); } intent.addFlags(268435456); intent.putExtra("android.support.customtabs.extra.user_opt_out", true); return intent; } public static boolean shouldAlwaysUseBrowserUI(@NonNull Intent intent) { return intent.getBooleanExtra("android.support.customtabs.extra.user_opt_out", false) && (intent.getFlags() & 268435456) != 0; } public void launchUrl(@NonNull Context context, @NonNull Uri uri) { this.intent.setData(uri); ContextCompat.startActivity(context, this.intent, this.startAnimationBundle); } }