mirror of https://github.com/NekoX-Dev/NekoX.git
207 lines
9.8 KiB
Java
Executable File
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);
|
|
}
|
|
}
|
|
}
|