From 0bf1685db46a017686f21c0de8b1e70408eb8237 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 30 Mar 2019 15:18:40 +0100 Subject: [PATCH] remove CustomTabsHelper & ResourcesUtils (#1157) --- .../com/keylesspalace/tusky/LoginActivity.kt | 21 +-- .../tusky/util/CustomTabsHelper.java | 122 ------------------ .../keylesspalace/tusky/util/LinkHelper.java | 28 ++-- .../tusky/util/ResourcesUtils.java | 29 ----- .../keylesspalace/tusky/util/ThemeUtils.java | 5 - 5 files changed, 17 insertions(+), 188 deletions(-) delete mode 100644 app/src/main/java/com/keylesspalace/tusky/util/CustomTabsHelper.java delete mode 100644 app/src/main/java/com/keylesspalace/tusky/util/ResourcesUtils.java diff --git a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.kt b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.kt index 1b9810a9..659e7654 100644 --- a/app/src/main/java/com/keylesspalace/tusky/LoginActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/LoginActivity.kt @@ -33,7 +33,6 @@ import com.keylesspalace.tusky.di.Injectable import com.keylesspalace.tusky.entity.AccessToken import com.keylesspalace.tusky.entity.AppCredentials import com.keylesspalace.tusky.network.MastodonApi -import com.keylesspalace.tusky.util.CustomTabsHelper import com.keylesspalace.tusky.util.ThemeUtils import kotlinx.android.synthetic.main.activity_login.* import okhttp3.HttpUrl @@ -346,22 +345,14 @@ class LoginActivity : BaseActivity(), Injectable { private fun openInCustomTab(uri: Uri, context: Context): Boolean { - val toolbarColor = ThemeUtils.getColorById(context, "custom_tab_toolbar") - val builder = CustomTabsIntent.Builder() - builder.setToolbarColor(toolbarColor) - val customTabsIntent = builder.build() + val toolbarColor = ThemeUtils.getColor(context, R.attr.custom_tab_toolbar) + val customTabsIntent = CustomTabsIntent.Builder() + .setToolbarColor(toolbarColor) + .build() try { - val packageName = CustomTabsHelper.getPackageNameToUse(context) - /* If we cant find a package name, it means theres no browser that supports - * Chrome Custom Tabs installed. So, we fallback to the webview */ - if (packageName == null) { - return false - } else { - customTabsIntent.intent.`package` = packageName - customTabsIntent.launchUrl(context, uri) - } + customTabsIntent.launchUrl(context, uri) } catch (e: ActivityNotFoundException) { - Log.w(TAG, "Activity was not found for intent, " + customTabsIntent.toString()) + Log.w(TAG, "Activity was not found for intent $customTabsIntent") return false } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/CustomTabsHelper.java b/app/src/main/java/com/keylesspalace/tusky/util/CustomTabsHelper.java deleted file mode 100644 index 0e494ff0..00000000 --- a/app/src/main/java/com/keylesspalace/tusky/util/CustomTabsHelper.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.keylesspalace.tusky.util; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.net.Uri; -import android.text.TextUtils; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; - -/** - * stolen from https://github.com/GoogleChrome/custom-tabs-client/blob/master/shared/src/main/java/org/chromium/customtabsclient/shared/CustomTabsHelper.java - */ - -public class CustomTabsHelper { - private static final String TAG = "CustomTabsHelper"; - private static final String STABLE_PACKAGE = "com.android.chrome"; - private static final String BETA_PACKAGE = "com.chrome.beta"; - private static final String DEV_PACKAGE = "com.chrome.dev"; - private static final String LOCAL_PACKAGE = "com.google.android.apps.chrome"; - private static final String EXTRA_CUSTOM_TABS_KEEP_ALIVE = - "android.support.customtabs.extra.KEEP_ALIVE"; - private static final String ACTION_CUSTOM_TABS_CONNECTION = - "android.support.customtabs.action.CustomTabsService"; - - private static String sPackageNameToUse; - - private CustomTabsHelper() {} - - /** - * Goes through all apps that handle VIEW intents and have a warmup service. Picks - * the one chosen by the user if there is one, otherwise makes a best effort to return a - * valid package name. - * - * This is not threadsafe. - * - * @param context {@link Context} to use for accessing {@link PackageManager}. - * @return The package name recommended to use for connecting to custom tabs related components. - */ - public static String getPackageNameToUse(Context context) { - if (sPackageNameToUse != null) return sPackageNameToUse; - - PackageManager pm = context.getPackageManager(); - // Get default VIEW intent handler. - Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); - ResolveInfo defaultViewHandlerInfo = pm.resolveActivity(activityIntent, 0); - String defaultViewHandlerPackageName = null; - if (defaultViewHandlerInfo != null) { - defaultViewHandlerPackageName = defaultViewHandlerInfo.activityInfo.packageName; - } - - // Get all apps that can handle VIEW intents. - List resolvedActivityList = pm.queryIntentActivities(activityIntent, 0); - List packagesSupportingCustomTabs = new ArrayList<>(); - for (ResolveInfo info : resolvedActivityList) { - Intent serviceIntent = new Intent(); - serviceIntent.setAction(ACTION_CUSTOM_TABS_CONNECTION); - serviceIntent.setPackage(info.activityInfo.packageName); - if (pm.resolveService(serviceIntent, 0) != null) { - packagesSupportingCustomTabs.add(info.activityInfo.packageName); - } - } - - // Now packagesSupportingCustomTabs contains all apps that can handle both VIEW intents - // and service calls. - if (packagesSupportingCustomTabs.isEmpty()) { - sPackageNameToUse = null; - } else if (packagesSupportingCustomTabs.size() == 1) { - sPackageNameToUse = packagesSupportingCustomTabs.get(0); - } else if (!TextUtils.isEmpty(defaultViewHandlerPackageName) - && !hasSpecializedHandlerIntents(context, activityIntent) - && packagesSupportingCustomTabs.contains(defaultViewHandlerPackageName)) { - sPackageNameToUse = defaultViewHandlerPackageName; - } else if (packagesSupportingCustomTabs.contains(STABLE_PACKAGE)) { - sPackageNameToUse = STABLE_PACKAGE; - } else if (packagesSupportingCustomTabs.contains(BETA_PACKAGE)) { - sPackageNameToUse = BETA_PACKAGE; - } else if (packagesSupportingCustomTabs.contains(DEV_PACKAGE)) { - sPackageNameToUse = DEV_PACKAGE; - } else if (packagesSupportingCustomTabs.contains(LOCAL_PACKAGE)) { - sPackageNameToUse = LOCAL_PACKAGE; - } - return sPackageNameToUse; - } - - /** - * Used to check whether there is a specialized handler for a given intent. - * @param intent The intent to check with. - * @return Whether there is a specialized handler for the given intent. - */ - private static boolean hasSpecializedHandlerIntents(Context context, Intent intent) { - try { - PackageManager pm = context.getPackageManager(); - List handlers = pm.queryIntentActivities( - intent, - PackageManager.GET_RESOLVED_FILTER); - if (handlers == null || handlers.size() == 0) { - return false; - } - for (ResolveInfo resolveInfo : handlers) { - IntentFilter filter = resolveInfo.filter; - if (filter == null) continue; - if (filter.countDataAuthorities() == 0 || filter.countDataPaths() == 0) continue; - if (resolveInfo.activityInfo == null) continue; - return true; - } - } catch (RuntimeException e) { - Log.e(TAG, "Runtime exception while getting specialized handlers"); - } - return false; - } - - /** - * @return All possible chrome package names that provide custom tabs feature. - */ - public static String[] getPackages() { - return new String[]{"", STABLE_PACKAGE, BETA_PACKAGE, DEV_PACKAGE, LOCAL_PACKAGE}; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java index 0c23c132..ddd08d82 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java +++ b/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.java @@ -18,6 +18,7 @@ package com.keylesspalace.tusky.util; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; +import android.graphics.Color; import android.net.Uri; import android.preference.PreferenceManager; import androidx.annotation.Nullable; @@ -31,6 +32,7 @@ import android.util.Log; import android.view.View; import android.widget.TextView; +import com.keylesspalace.tusky.R; import com.keylesspalace.tusky.entity.Status; import com.keylesspalace.tusky.interfaces.LinkListener; @@ -203,7 +205,7 @@ public class LinkHelper { try { context.startActivity(intent); } catch (ActivityNotFoundException e) { - Log.w("URLSpan", "Actvity was not found for intent, " + intent.toString()); + Log.w("LinkHelper", "Actvity was not found for intent, " + intent.toString()); } } @@ -215,27 +217,19 @@ public class LinkHelper { * @param context context */ public static void openLinkInCustomTab(Uri uri, Context context) { - int toolbarColor = ThemeUtils.getColorById(context, "custom_tab_toolbar"); + int toolbarColor = ThemeUtils.getColor(context, R.attr.custom_tab_toolbar); - CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); - builder.setToolbarColor(toolbarColor); - CustomTabsIntent customTabsIntent = builder.build(); + CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder() + .setToolbarColor(toolbarColor) + .setShowTitle(true) + .build(); try { - String packageName = CustomTabsHelper.getPackageNameToUse(context); - - //If we cant find a package name, it means theres no browser that supports - //Chrome Custom Tabs installed. So, we fallback to the webview - if (packageName == null) { - openLinkInBrowser(uri, context); - } else { - customTabsIntent.intent.setPackage(packageName); - customTabsIntent.launchUrl(context, uri); - } + customTabsIntent.launchUrl(context, uri); } catch (ActivityNotFoundException e) { - Log.w("URLSpan", "Activity was not found for intent, " + customTabsIntent.toString()); + Log.w("LinkHelper", "Activity was not found for intent " + customTabsIntent.toString()); + openLinkInBrowser(uri, context); } } - } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ResourcesUtils.java b/app/src/main/java/com/keylesspalace/tusky/util/ResourcesUtils.java deleted file mode 100644 index 4b7ac9dc..00000000 --- a/app/src/main/java/com/keylesspalace/tusky/util/ResourcesUtils.java +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright 2017 Andrew Dawson - * - * This file is a part of Tusky. - * - * This program is free software; you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation; either version 3 of the - * License, or (at your option) any later version. - * - * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even - * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. - * - * You should have received a copy of the GNU General Public License along with Tusky; if not, - * see . */ - -package com.keylesspalace.tusky.util; - -import android.content.Context; -import androidx.annotation.AnyRes; - -/** - * Created by remi on 1/14/18. - */ - -public class ResourcesUtils { - public static @AnyRes int getResourceIdentifier(Context context, String defType, String name) { - return context.getResources().getIdentifier(name, defType, context.getPackageName()); - } -} diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java b/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java index 2831e281..93a1b322 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java +++ b/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java @@ -87,11 +87,6 @@ public class ThemeUtils { return value.resourceId; } - public static @ColorInt int getColorById(@NonNull Context context, String name) { - return getColor(context, - ResourcesUtils.getResourceIdentifier(context, "attr", name)); - } - /** this can be replaced with drawableTint in xml once minSdkVersion >= 23 */ public static @Nullable Drawable getTintedDrawable(@NonNull Context context, @DrawableRes int drawableId, @AttrRes int colorAttr) { Drawable drawable = context.getDrawable(drawableId);