NekoX/TMessagesProj/src/main/java/org/telegram/messenger/support/customtabs/CustomTabsIntent.java

207 lines
9.8 KiB
Java
Executable File

/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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 org.telegram.messenger.support.customtabs;
import android.app.Activity;
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.support.annotation.AnimRes;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.app.BundleCompat;
import java.util.ArrayList;
/**
* Class holding the {@link Intent} and start bundle for a Custom Tabs Activity.
*
* <p>
* <strong>Note:</strong> The constants below are public for the browser implementation's benefit.
* You are strongly encouraged to use {@link CustomTabsIntent.Builder}.</p>
*/
public final class CustomTabsIntent {
public static final String EXTRA_SESSION = "android.support.customtabs.extra.SESSION";
public static final String EXTRA_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
public static final String EXTRA_ENABLE_URLBAR_HIDING = "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
public static final String EXTRA_CLOSE_BUTTON_ICON = "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
public static final String EXTRA_TITLE_VISIBILITY_STATE = "android.support.customtabs.extra.TITLE_VISIBILITY";
public static final int NO_TITLE = 0;
public static final int SHOW_PAGE_TITLE = 1;
public static final String EXTRA_ACTION_BUTTON_BUNDLE = "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
public static final String EXTRA_TOOLBAR_ITEMS = "android.support.customtabs.extra.TOOLBAR_ITEMS";
public static final String EXTRA_SECONDARY_TOOLBAR_COLOR = "android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR";
public static final String KEY_ICON = "android.support.customtabs.customaction.ICON";
public static final String KEY_DESCRIPTION = "android.support.customtabs.customaction.DESCRIPTION";
public static final String KEY_PENDING_INTENT = "android.support.customtabs.customaction.PENDING_INTENT";
public static final String EXTRA_TINT_ACTION_BUTTON = "android.support.customtabs.extra.TINT_ACTION_BUTTON";
public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.extra.MENU_ITEMS";
public static final String KEY_MENU_ITEM_TITLE = "android.support.customtabs.customaction.MENU_ITEM_TITLE";
public static final String EXTRA_EXIT_ANIMATION_BUNDLE = "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
public static final String EXTRA_DEFAULT_SHARE_MENU_ITEM = "android.support.customtabs.extra.SHARE_MENU_ITEM";
public static final String KEY_ID = "android.support.customtabs.customaction.ID";
public static final int TOOLBAR_ACTION_BUTTON_ID = 0;
private static final int MAX_TOOLBAR_ITEMS = 5;
@NonNull
public final Intent intent;
@Nullable
public final Bundle startAnimationBundle;
public void launchUrl(Activity context, Uri url) {
this.intent.setData(url);
ActivityCompat.startActivity(context, this.intent, this.startAnimationBundle);
}
private CustomTabsIntent(Intent intent, Bundle startAnimationBundle) {
this.intent = intent;
this.startAnimationBundle = startAnimationBundle;
}
public static int getMaxToolbarItems() {
return 5;
}
public static final class Builder {
private final Intent mIntent;
private ArrayList<Bundle> mMenuItems;
private Bundle mStartAnimationBundle;
private ArrayList<Bundle> mActionButtons;
public Builder() {
this(null);
}
public Builder(@Nullable CustomTabsSession session) {
this.mIntent = new Intent("android.intent.action.VIEW");
this.mMenuItems = null;
this.mStartAnimationBundle = null;
this.mActionButtons = null;
if (session != null) {
this.mIntent.setPackage(session.getComponentName().getPackageName());
}
Bundle bundle = new Bundle();
BundleCompat.putBinder(bundle, "android.support.customtabs.extra.SESSION", session == null ? null : session.getBinder());
this.mIntent.putExtras(bundle);
}
public CustomTabsIntent.Builder setToolbarColor(@ColorInt int color) {
this.mIntent.putExtra("android.support.customtabs.extra.TOOLBAR_COLOR", color);
return this;
}
public CustomTabsIntent.Builder enableUrlBarHiding() {
this.mIntent.putExtra("android.support.customtabs.extra.ENABLE_URLBAR_HIDING", true);
return this;
}
public CustomTabsIntent.Builder setCloseButtonIcon(@NonNull Bitmap icon) {
this.mIntent.putExtra("android.support.customtabs.extra.CLOSE_BUTTON_ICON", icon);
return this;
}
public CustomTabsIntent.Builder setShowTitle(boolean showTitle) {
this.mIntent.putExtra("android.support.customtabs.extra.TITLE_VISIBILITY", showTitle ? 1 : 0);
return this;
}
public CustomTabsIntent.Builder addMenuItem(@NonNull String label, @NonNull PendingIntent pendingIntent) {
if (this.mMenuItems == null) {
this.mMenuItems = new ArrayList();
}
Bundle bundle = new Bundle();
bundle.putString("android.support.customtabs.customaction.MENU_ITEM_TITLE", label);
bundle.putParcelable("android.support.customtabs.customaction.PENDING_INTENT", pendingIntent);
this.mMenuItems.add(bundle);
return this;
}
public CustomTabsIntent.Builder addDefaultShareMenuItem() {
this.mIntent.putExtra("android.support.customtabs.extra.SHARE_MENU_ITEM", true);
return this;
}
public CustomTabsIntent.Builder setActionButton(@NonNull Bitmap icon, @NonNull String description, @NonNull PendingIntent pendingIntent, boolean shouldTint) {
Bundle bundle = new Bundle();
bundle.putInt("android.support.customtabs.customaction.ID", 0);
bundle.putParcelable("android.support.customtabs.customaction.ICON", icon);
bundle.putString("android.support.customtabs.customaction.DESCRIPTION", description);
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", shouldTint);
return this;
}
public CustomTabsIntent.Builder setActionButton(@NonNull Bitmap icon, @NonNull String description, @NonNull PendingIntent pendingIntent) {
return this.setActionButton(icon, description, pendingIntent, false);
}
public CustomTabsIntent.Builder addToolbarItem(int id, @NonNull Bitmap icon, @NonNull String description, PendingIntent pendingIntent) throws IllegalStateException {
if (this.mActionButtons == null) {
this.mActionButtons = new ArrayList();
}
if (this.mActionButtons.size() >= 5) {
throw new IllegalStateException("Exceeded maximum toolbar item count of 5");
} else {
Bundle bundle = new Bundle();
bundle.putInt("android.support.customtabs.customaction.ID", id);
bundle.putParcelable("android.support.customtabs.customaction.ICON", icon);
bundle.putString("android.support.customtabs.customaction.DESCRIPTION", description);
bundle.putParcelable("android.support.customtabs.customaction.PENDING_INTENT", pendingIntent);
this.mActionButtons.add(bundle);
return this;
}
}
public CustomTabsIntent.Builder setSecondaryToolbarColor(@ColorInt int color) {
this.mIntent.putExtra("android.support.customtabs.extra.SECONDARY_TOOLBAR_COLOR", color);
return this;
}
public CustomTabsIntent.Builder setStartAnimations(@NonNull Context context, @AnimRes int enterResId, @AnimRes int exitResId) {
this.mStartAnimationBundle = ActivityOptionsCompat.makeCustomAnimation(context, enterResId, exitResId).toBundle();
return this;
}
public CustomTabsIntent.Builder setExitAnimations(@NonNull Context context, @AnimRes int enterResId, @AnimRes int exitResId) {
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(context, enterResId, exitResId).toBundle();
this.mIntent.putExtra("android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE", bundle);
return this;
}
public CustomTabsIntent build() {
if (this.mMenuItems != null) {
this.mIntent.putParcelableArrayListExtra("android.support.customtabs.extra.MENU_ITEMS", this.mMenuItems);
}
if (this.mActionButtons != null) {
this.mIntent.putParcelableArrayListExtra("android.support.customtabs.extra.TOOLBAR_ITEMS", this.mActionButtons);
}
return new CustomTabsIntent(this.mIntent, this.mStartAnimationBundle);
}
}
}