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);