0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-20 20:03:05 +02:00

Merge pull request #3755 from timrae/custom-tabs-min-sdk

Don't use any of the customtabs support library methods if below SDK 16
This commit is contained in:
Tim Rae 2015-10-26 11:04:43 +09:00
commit b65d09cc96
6 changed files with 48 additions and 16 deletions

View File

@ -7,12 +7,10 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.support.design.widget.Snackbar;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
@ -36,9 +34,8 @@ import com.ichi2.anki.dialogs.AsyncDialogFragment;
import com.ichi2.anki.dialogs.DialogHandler;
import com.ichi2.anki.dialogs.SimpleMessageDialog;
import com.ichi2.async.CollectionLoader;
import com.ichi2.compat.CompatHelper;
import com.ichi2.compat.customtabs.CustomTabActivityHelper;
import com.ichi2.compat.customtabs.CustomTabsFallback;
import com.ichi2.compat.customtabs.CustomTabsHelper;
import com.ichi2.libanki.Collection;
import com.ichi2.themes.Themes;
@ -325,14 +322,11 @@ public class AnkiActivity extends AppCompatActivity implements LoaderManager.Loa
}
protected void openUrl(Uri url) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(mCustomTabActivityHelper.getSession());
builder.setToolbarColor(getResources().getColor(R.color.theme_primary)).setShowTitle(true);
builder.setStartAnimations(this, R.anim.slide_right_in, R.anim.slide_left_out);
builder.setExitAnimations(this, R.anim.slide_left_in, R.anim.slide_right_out);
builder.setCloseButtonIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_arrow_back_white_24dp));
CustomTabsIntent customTabsIntent = builder.build();
CustomTabsHelper.addKeepAliveExtra(this, customTabsIntent.intent);
CustomTabActivityHelper.openCustomTab(this, customTabsIntent, url, new CustomTabsFallback());
CompatHelper.getCompat().openUrl(this, url);
}
public CustomTabActivityHelper getCustomTabActivityHelper() {
return mCustomTabActivityHelper;
}

View File

@ -18,6 +18,7 @@ package com.ichi2.compat;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.RemoteViews;
@ -55,5 +56,6 @@ public interface Compat {
void restartActivityInvalidateBackstack(AnkiActivity activity);
void setFullScreen(NavigationDrawerActivity activity);
void setSelectableBackground(View view);
void openUrl(AnkiActivity activity, Uri uri);
}

View File

@ -7,6 +7,7 @@ import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
import android.view.View;
@ -18,6 +19,7 @@ import com.ichi2.anki.DeckPicker;
import com.ichi2.anki.NavigationDrawerActivity;
import com.ichi2.anki.R;
import com.ichi2.anki.ReadText;
import com.ichi2.compat.customtabs.CustomTabsFallback;
import timber.log.Timber;
@ -95,4 +97,9 @@ public class CompatV10 implements Compat {
view.setBackgroundColor(ta.getColor(0, res.getColor(R.color.white)));
ta.recycle();
}
@Override
public void openUrl(AnkiActivity activity, Uri uri) {
new CustomTabsFallback().openUri(activity, uri);
}
}

View File

@ -8,13 +8,20 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.res.Configuration;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.text.Html;
import android.util.TypedValue;
import android.widget.RemoteViews;
import com.ichi2.anki.AnkiActivity;
import com.ichi2.anki.AnkiDroidApp;
import com.ichi2.anki.R;
import com.ichi2.compat.customtabs.CustomTabActivityHelper;
import com.ichi2.compat.customtabs.CustomTabsFallback;
import com.ichi2.compat.customtabs.CustomTabsHelper;
/** Implementation of {@link Compat} for SDK level 16 */
@TargetApi(16)
@ -44,7 +51,6 @@ public class CompatV16 extends CompatV15 implements Compat {
AppWidgetManager manager = AppWidgetManager.getInstance(context);
int[] ids = manager.getAppWidgetIds(new ComponentName(context, cls));
for (int id : ids) {
AppWidgetProviderInfo providerInfo = manager.getAppWidgetInfo(id);
final float scale = context.getResources().getDisplayMetrics().density;
Bundle options = manager.getAppWidgetOptions(id);
float width, height;
@ -70,7 +76,20 @@ public class CompatV16 extends CompatV15 implements Compat {
updateViews.setTextViewTextSize(R.id.widget_due, TypedValue.COMPLEX_UNIT_SP, text);
updateViews.setTextViewTextSize(R.id.widget_eta, TypedValue.COMPLEX_UNIT_SP, text);
updateViews.setViewPadding(R.id.ankidroid_widget_text_layout, horizontal, vertical, horizontal, vertical);
}
}
}
}
@Override
public void openUrl(AnkiActivity activity, Uri uri) {
CustomTabActivityHelper helper = activity.getCustomTabActivityHelper();
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(helper.getSession());
builder.setToolbarColor(activity.getResources().getColor(R.color.theme_primary)).setShowTitle(true);
builder.setStartAnimations(activity, R.anim.slide_right_in, R.anim.slide_left_out);
builder.setExitAnimations(activity, R.anim.slide_left_in, R.anim.slide_right_out);
builder.setCloseButtonIcon(BitmapFactory.decodeResource(activity.getResources(), R.drawable.ic_arrow_back_white_24dp));
CustomTabsIntent customTabsIntent = builder.build();
CustomTabsHelper.addKeepAliveExtra(activity, customTabsIntent.intent);
CustomTabActivityHelper.openCustomTab(activity, customTabsIntent, uri, new CustomTabsFallback());
}
}

View File

@ -24,6 +24,8 @@ import android.support.customtabs.CustomTabsSession;
import java.util.List;
import timber.log.Timber;
/**
* This is a helper class to manage the connection to the Custom Tabs Service.
@ -52,6 +54,8 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback {
if (packageName == null) {
if (fallback != null) {
fallback.openUri(activity, uri);
} else {
Timber.e("A version of Chrome supporting custom tabs was not available, and the fallback was null");
}
} else {
customTabsIntent.intent.setPackage(packageName);

View File

@ -24,6 +24,8 @@ import android.support.customtabs.CustomTabsService;
import android.text.TextUtils;
import android.util.Log;
import com.ichi2.compat.CompatHelper;
import java.util.ArrayList;
import java.util.List;
@ -40,6 +42,7 @@ public class CustomTabsHelper {
"android.support.customtabs.extra.KEEP_ALIVE";
private static String sPackageNameToUse;
private static final int MIN_SDK = 16;
private CustomTabsHelper() {}
@ -60,6 +63,9 @@ public class CustomTabsHelper {
* @return The package name recommended to use for connecting to custom tabs related components.
*/
public static String getPackageNameToUse(Context context) {
if (CompatHelper.getSdkVersion() < MIN_SDK) {
return null;
}
if (sPackageNameToUse != null) return sPackageNameToUse;
PackageManager pm = context.getPackageManager();