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:
parent
033ce7ebcf
commit
1519401b54
9 changed files with 55 additions and 13 deletions
|
@ -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'
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"/>
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
5
app/src/main/res/anim/slide_in_left.xml
Normal file
5
app/src/main/res/anim/slide_in_left.xml
Normal 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" />
|
5
app/src/main/res/anim/slide_out_left.xml
Normal file
5
app/src/main/res/anim/slide_out_left.xml
Normal 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" />
|
Loading…
Reference in a new issue