From 1519401b5433be4562b4584350e9fe9428429e3c Mon Sep 17 00:00:00 2001 From: Christophe Beyls Date: Sat, 6 May 2017 19:07:48 +0200 Subject: [PATCH] Added basic Chrome custom tabs integration to open browser links with a more integrated look when available --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 3 +++ .../fosdem/activities/RoomImageDialogActivity.java | 14 ++++++++++---- .../fosdem/fragments/EventDetailsFragment.java | 14 +++++++++++--- .../be/digitalia/fosdem/fragments/MapFragment.java | 11 +++++++++-- .../fosdem/fragments/PersonInfoListFragment.java | 13 ++++++++++--- .../fosdem/fragments/RoomImageDialogFragment.java | 2 +- app/src/main/res/anim/slide_in_left.xml | 5 +++++ app/src/main/res/anim/slide_out_left.xml | 5 +++++ 9 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/anim/slide_in_left.xml create mode 100644 app/src/main/res/anim/slide_out_left.xml diff --git a/app/build.gradle b/app/build.gradle index 226e7fe..458403e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -36,5 +36,6 @@ dependencies { compile "com.android.support:appcompat-v7:$supportLibraryVersion" compile "com.android.support:recyclerview-v7:$supportLibraryVersion" compile "com.android.support:cardview-v7:$supportLibraryVersion" + compile "com.android.support:customtabs:$supportLibraryVersion" compile 'com.github.chrisbanes.photoview:library:1.2.4' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 898a426..4ef34a0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,9 +1,12 @@ + + diff --git a/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java b/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java index d24d0c4..47d445b 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java @@ -1,9 +1,12 @@ package be.digitalia.fosdem.activities; +import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.customtabs.CustomTabsIntent; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.text.TextUtils; @@ -34,10 +37,10 @@ public class RoomImageDialogActivity extends AppCompatActivity { setContentView(R.layout.dialog_room_image); ((ImageView) findViewById(R.id.room_image)).setImageResource(intent.getIntExtra(EXTRA_ROOM_IMAGE_RESOURCE_ID, 0)); - configureToolbar((Toolbar) findViewById(R.id.toolbar), roomName); + configureToolbar(this, (Toolbar) findViewById(R.id.toolbar), roomName); } - public static void configureToolbar(final Toolbar toolbar, final String roomName) { + public static void configureToolbar(final Activity context, final Toolbar toolbar, final String roomName) { toolbar.setTitle(roomName); if (!TextUtils.isEmpty(roomName)) { toolbar.inflateMenu(R.menu.room_image_dialog); @@ -47,9 +50,12 @@ public class RoomImageDialogActivity extends AppCompatActivity { switch (item.getItemId()) { case R.id.navigation: String localNavigationUrl = FosdemUrls.getLocalNavigationToLocation(StringUtils.toSlug(roomName)); - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(localNavigationUrl)); try { - toolbar.getContext().startActivity(intent); + new CustomTabsIntent.Builder() + .setToolbarColor(ContextCompat.getColor(context, R.color.color_primary)) + .setShowTitle(true) + .build() + .launchUrl(context, Uri.parse(localNavigationUrl)); } catch (ActivityNotFoundException ignore) { } break; diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/EventDetailsFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/EventDetailsFragment.java index 78cddbd..ea173e4 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/EventDetailsFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/EventDetailsFragment.java @@ -11,10 +11,12 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.provider.CalendarContract; +import android.support.customtabs.CustomTabsIntent; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.ShareCompat; +import android.support.v4.content.ContextCompat; import android.support.v4.content.Loader; import android.text.Spannable; import android.text.SpannableString; @@ -493,7 +495,7 @@ public class EventDetailsFragment extends Fragment { } } - private static class LinkClickListener implements View.OnClickListener { + private class LinkClickListener implements View.OnClickListener { private final Link link; @@ -505,9 +507,15 @@ public class EventDetailsFragment extends Fragment { public void onClick(View v) { String url = link.getUrl(); if (url != null) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); try { - v.getContext().startActivity(intent); + Activity context = getActivity(); + new CustomTabsIntent.Builder() + .setToolbarColor(ContextCompat.getColor(context, event.getTrack().getType().getColorResId())) + .setShowTitle(true) + .setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left) + .setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right) + .build() + .launchUrl(context, Uri.parse(url)); } catch (ActivityNotFoundException ignore) { } } diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java index 2cc4aaf..f83b2fc 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java @@ -1,10 +1,13 @@ package be.digitalia.fosdem.fragments; +import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.customtabs.CustomTabsIntent; import android.support.v4.app.Fragment; +import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -66,9 +69,13 @@ public class MapFragment extends Fragment { } private void launchLocalNavigation() { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(FosdemUrls.getLocalNavigation())); try { - startActivity(intent); + Activity context = getActivity(); + new CustomTabsIntent.Builder() + .setToolbarColor(ContextCompat.getColor(context, R.color.color_primary)) + .setShowTitle(true) + .build() + .launchUrl(context, Uri.parse(FosdemUrls.getLocalNavigation())); } catch (ActivityNotFoundException ignore) { } } diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/PersonInfoListFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/PersonInfoListFragment.java index 6126d9a..8b61120 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/PersonInfoListFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/PersonInfoListFragment.java @@ -1,12 +1,14 @@ package be.digitalia.fosdem.fragments; +import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; -import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; +import android.support.customtabs.CustomTabsIntent; import android.support.v4.app.LoaderManager.LoaderCallbacks; +import android.support.v4.content.ContextCompat; import android.support.v4.content.Loader; import android.support.v7.widget.ConcatAdapter; import android.support.v7.widget.LinearLayoutManager; @@ -60,9 +62,14 @@ public class PersonInfoListFragment extends RecyclerViewFragment implements Load case R.id.more_info: String url = person.getUrl(); if (url != null) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); try { - startActivity(intent); + Activity context = getActivity(); + new CustomTabsIntent.Builder() + .setToolbarColor(ContextCompat.getColor(context, R.color.color_primary)) + .setStartAnimations(context, R.anim.slide_in_right, R.anim.slide_out_left) + .setExitAnimations(context, R.anim.slide_in_left, R.anim.slide_out_right) + .build() + .launchUrl(context, Uri.parse(url)); } catch (ActivityNotFoundException ignore) { } } diff --git a/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java b/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java index b30d0fb..9ee9e1d 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java @@ -41,7 +41,7 @@ public class RoomImageDialogFragment extends DialogFragment { View contentView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_room_image, null); ((ImageView) contentView.findViewById(R.id.room_image)).setImageResource(args.getInt(ARG_ROOM_IMAGE_RESOURCE_ID)); Toolbar toolbar = (Toolbar) contentView.findViewById(R.id.toolbar); - RoomImageDialogActivity.configureToolbar(toolbar, args.getString(ARG_ROOM_NAME)); + RoomImageDialogActivity.configureToolbar(getActivity(), toolbar, args.getString(ARG_ROOM_NAME)); Dialog dialog = new AlertDialog.Builder(getActivity()) .setView(contentView) diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 0000000..eb4615f --- /dev/null +++ b/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,5 @@ + + diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000..8306841 --- /dev/null +++ b/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,5 @@ + +