1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Added basic Chrome custom tabs integration to open browser links with a more integrated look when available

This commit is contained in:
Christophe Beyls 2017-05-06 19:07:48 +02:00
parent 033ce7ebcf
commit 1519401b54
9 changed files with 55 additions and 13 deletions

View file

@ -36,5 +36,6 @@ dependencies {
compile "com.android.support:appcompat-v7:$supportLibraryVersion" compile "com.android.support:appcompat-v7:$supportLibraryVersion"
compile "com.android.support:recyclerview-v7:$supportLibraryVersion" compile "com.android.support:recyclerview-v7:$supportLibraryVersion"
compile "com.android.support:cardview-v7:$supportLibraryVersion" compile "com.android.support:cardview-v7:$supportLibraryVersion"
compile "com.android.support:customtabs:$supportLibraryVersion"
compile 'com.github.chrisbanes.photoview:library:1.2.4' compile 'com.github.chrisbanes.photoview:library:1.2.4'
} }

View file

@ -1,9 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest <manifest
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="be.digitalia.fosdem" package="be.digitalia.fosdem"
android:installLocation="auto"> android:installLocation="auto">
<uses-sdk tools:overrideLibrary="android.support.customtabs"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.NFC"/> <uses-permission android:name="android.permission.NFC"/>

View file

@ -1,9 +1,12 @@
package be.digitalia.fosdem.activities; package be.digitalia.fosdem.activities;
import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; 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.app.AppCompatActivity;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.text.TextUtils; import android.text.TextUtils;
@ -34,10 +37,10 @@ public class RoomImageDialogActivity extends AppCompatActivity {
setContentView(R.layout.dialog_room_image); setContentView(R.layout.dialog_room_image);
((ImageView) findViewById(R.id.room_image)).setImageResource(intent.getIntExtra(EXTRA_ROOM_IMAGE_RESOURCE_ID, 0)); ((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); toolbar.setTitle(roomName);
if (!TextUtils.isEmpty(roomName)) { if (!TextUtils.isEmpty(roomName)) {
toolbar.inflateMenu(R.menu.room_image_dialog); toolbar.inflateMenu(R.menu.room_image_dialog);
@ -47,9 +50,12 @@ public class RoomImageDialogActivity extends AppCompatActivity {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.navigation: case R.id.navigation:
String localNavigationUrl = FosdemUrls.getLocalNavigationToLocation(StringUtils.toSlug(roomName)); String localNavigationUrl = FosdemUrls.getLocalNavigationToLocation(StringUtils.toSlug(roomName));
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(localNavigationUrl));
try { 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) { } catch (ActivityNotFoundException ignore) {
} }
break; break;

View file

@ -11,10 +11,12 @@ import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.CalendarContract; import android.provider.CalendarContract;
import android.support.customtabs.CustomTabsIntent;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.app.ShareCompat; import android.support.v4.app.ShareCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableString; 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; private final Link link;
@ -505,9 +507,15 @@ public class EventDetailsFragment extends Fragment {
public void onClick(View v) { public void onClick(View v) {
String url = link.getUrl(); String url = link.getUrl();
if (url != null) { if (url != null) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
try { 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) { } catch (ActivityNotFoundException ignore) {
} }
} }

View file

@ -1,10 +1,13 @@
package be.digitalia.fosdem.fragments; package be.digitalia.fosdem.fragments;
import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -66,9 +69,13 @@ public class MapFragment extends Fragment {
} }
private void launchLocalNavigation() { private void launchLocalNavigation() {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(FosdemUrls.getLocalNavigation()));
try { 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) { } catch (ActivityNotFoundException ignore) {
} }
} }

View file

@ -1,12 +1,14 @@
package be.digitalia.fosdem.fragments; package be.digitalia.fosdem.fragments;
import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import android.support.v7.widget.ConcatAdapter; import android.support.v7.widget.ConcatAdapter;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
@ -60,9 +62,14 @@ public class PersonInfoListFragment extends RecyclerViewFragment implements Load
case R.id.more_info: case R.id.more_info:
String url = person.getUrl(); String url = person.getUrl();
if (url != null) { if (url != null) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
try { 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) { } catch (ActivityNotFoundException ignore) {
} }
} }

View file

@ -41,7 +41,7 @@ public class RoomImageDialogFragment extends DialogFragment {
View contentView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_room_image, null); 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)); ((ImageView) contentView.findViewById(R.id.room_image)).setImageResource(args.getInt(ARG_ROOM_IMAGE_RESOURCE_ID));
Toolbar toolbar = (Toolbar) contentView.findViewById(R.id.toolbar); 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()) Dialog dialog = new AlertDialog.Builder(getActivity())
.setView(contentView) .setView(contentView)

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-100%p"
android:toXDelta="0" />

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="0"
android:toXDelta="-100%p" />