From 38f15a8466978ce48bdcef3c89cd8f6a03215976 Mon Sep 17 00:00:00 2001 From: Christophe Beyls Date: Sun, 29 Jan 2017 21:37:32 +0100 Subject: [PATCH] Added button linking to the local navigation website on the room image dialog --- app/src/main/AndroidManifest.xml | 2 +- .../activities/RoomImageDialogActivity.java | 45 +++++++++++++++---- .../be/digitalia/fosdem/api/FosdemUrls.java | 13 +++++- .../fosdem/fragments/MapFragment.java | 4 +- .../fragments/RoomImageDialogFragment.java | 26 +++++++---- .../drawable/ic_navigation_grey600_24dp.xml | 9 ++++ app/src/main/res/layout/dialog_room_image.xml | 28 ++++++++++++ app/src/main/res/menu/room_image_dialog.xml | 11 +++++ app/src/main/res/values/styles.xml | 5 +++ 9 files changed, 120 insertions(+), 23 deletions(-) create mode 100644 app/src/main/res/drawable/ic_navigation_grey600_24dp.xml create mode 100644 app/src/main/res/layout/dialog_room_image.xml create mode 100644 app/src/main/res/menu/room_image_dialog.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 824ab07..898a426 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -91,7 +91,7 @@ android:name=".activities.RoomImageDialogActivity" android:excludeFromRecents="true" android:taskAffinity="" - android:theme="@style/AlertDialogTheme"/> + android:theme="@style/AlertDialogTheme.NoActionBar"/> 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 a6b4d44..d24d0c4 100644 --- a/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java +++ b/app/src/main/java/be/digitalia/fosdem/activities/RoomImageDialogActivity.java @@ -1,14 +1,22 @@ package be.digitalia.fosdem.activities; +import android.content.ActivityNotFoundException; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.text.TextUtils; +import android.view.MenuItem; import android.widget.ImageView; import be.digitalia.fosdem.R; +import be.digitalia.fosdem.api.FosdemUrls; +import be.digitalia.fosdem.utils.StringUtils; /** - * A special Activity which is displayed like a dialog and shows a room image. Specify the room name and the room image id as Intent extras. + * A special Activity which is displayed like a dialog and shows a room image. + * Specify the room name and the room image id as Intent extras. * * @author Christophe Beyls */ @@ -21,15 +29,34 @@ public class RoomImageDialogActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); + final String roomName = intent.getStringExtra(EXTRA_ROOM_NAME); + setTitle(roomName); - setTitle(intent.getStringExtra(EXTRA_ROOM_NAME)); + 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); + } - ImageView imageView = new ImageView(this); - imageView.setImageResource(intent.getIntExtra(EXTRA_ROOM_IMAGE_RESOURCE_ID, 0)); - imageView.setContentDescription(getString(R.string.room_map)); - int padding = getResources().getDimensionPixelSize(R.dimen.content_margin); - imageView.setPadding(padding, padding, padding, padding); - - setContentView(imageView); + public static void configureToolbar(final Toolbar toolbar, final String roomName) { + toolbar.setTitle(roomName); + if (!TextUtils.isEmpty(roomName)) { + toolbar.inflateMenu(R.menu.room_image_dialog); + toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + 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); + } catch (ActivityNotFoundException ignore) { + } + break; + } + return false; + } + }); + } } } diff --git a/app/src/main/java/be/digitalia/fosdem/api/FosdemUrls.java b/app/src/main/java/be/digitalia/fosdem/api/FosdemUrls.java index 69ea549..f3d971a 100644 --- a/app/src/main/java/be/digitalia/fosdem/api/FosdemUrls.java +++ b/app/src/main/java/be/digitalia/fosdem/api/FosdemUrls.java @@ -4,15 +4,16 @@ import java.util.Locale; /** * This class contains all FOSDEM Urls - * + * * @author Christophe Beyls - * */ public class FosdemUrls { private static final String SCHEDULE_URL = "https://fosdem.org/schedule/xml"; private static final String EVENT_URL_FORMAT = "https://fosdem.org/%1$d/schedule/event/%2$s/"; private static final String PERSON_URL_FORMAT = "https://fosdem.org/%1$d/schedule/speaker/%2$s/"; + private static final String LOCAL_NAVIGATION_URL = "http://nav.fosdem.org/"; + private static final String LOCAL_NAVIGATION_TO_ROOM_URL_FORMAT = "http://nav.fosdem.org/d/%1$s/"; public static String getSchedule() { return SCHEDULE_URL; @@ -25,4 +26,12 @@ public class FosdemUrls { public static String getPerson(String slug, int year) { return String.format(Locale.US, PERSON_URL_FORMAT, year, slug); } + + public static String getLocalNavigation() { + return LOCAL_NAVIGATION_URL; + } + + public static String getLocalNavigationToLocation(String locationSlug) { + return String.format(Locale.US, LOCAL_NAVIGATION_TO_ROOM_URL_FORMAT, locationSlug); + } } 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 4215adf..2cc4aaf 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/MapFragment.java @@ -15,12 +15,12 @@ import android.view.ViewGroup; import java.util.Locale; import be.digitalia.fosdem.R; +import be.digitalia.fosdem.api.FosdemUrls; public class MapFragment extends Fragment { private static final double DESTINATION_LATITUDE = 50.812375; private static final double DESTINATION_LONGITUDE = 4.380734; - private static final String LOCAL_NAVIGATION_URI = "http://nav.fosdem.org/"; @Override public void onCreate(Bundle savedInstanceState) { @@ -66,7 +66,7 @@ public class MapFragment extends Fragment { } private void launchLocalNavigation() { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(LOCAL_NAVIGATION_URI)); + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(FosdemUrls.getLocalNavigation())); try { startActivity(intent); } 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 6e07387..b30d0fb 100644 --- a/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java +++ b/app/src/main/java/be/digitalia/fosdem/fragments/RoomImageDialogFragment.java @@ -1,5 +1,6 @@ package be.digitalia.fosdem.fragments; +import android.annotation.SuppressLint; import android.app.Dialog; import android.os.Bundle; import android.support.annotation.DrawableRes; @@ -7,37 +8,44 @@ import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.Toolbar; +import android.view.LayoutInflater; +import android.view.View; import android.widget.ImageView; import be.digitalia.fosdem.R; +import be.digitalia.fosdem.activities.RoomImageDialogActivity; public class RoomImageDialogFragment extends DialogFragment { public static final String TAG = "room"; + private static final String ARG_ROOM_NAME = "roomName"; + private static final String ARG_ROOM_IMAGE_RESOURCE_ID = "imageResId"; + public static RoomImageDialogFragment newInstance(String roomName, @DrawableRes int imageResId) { RoomImageDialogFragment f = new RoomImageDialogFragment(); Bundle args = new Bundle(); - args.putString("roomName", roomName); - args.putInt("imageResId", imageResId); + args.putString(ARG_ROOM_NAME, roomName); + args.putInt(ARG_ROOM_IMAGE_RESOURCE_ID, imageResId); f.setArguments(args); return f; } @NonNull @Override + @SuppressLint("InflateParams") public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); - ImageView imageView = new ImageView(getActivity()); - imageView.setImageResource(args.getInt("imageResId")); - imageView.setContentDescription(getString(R.string.room_map)); - int padding = getResources().getDimensionPixelSize(R.dimen.content_margin); - imageView.setPadding(padding, padding, padding, padding); + 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)); Dialog dialog = new AlertDialog.Builder(getActivity()) - .setTitle(args.getString("roomName")) - .setView(imageView).create(); + .setView(contentView) + .create(); dialog.getWindow().getAttributes().windowAnimations = R.style.RoomImageDialogAnimations; return dialog; } diff --git a/app/src/main/res/drawable/ic_navigation_grey600_24dp.xml b/app/src/main/res/drawable/ic_navigation_grey600_24dp.xml new file mode 100644 index 0000000..2e706c3 --- /dev/null +++ b/app/src/main/res/drawable/ic_navigation_grey600_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/dialog_room_image.xml b/app/src/main/res/layout/dialog_room_image.xml new file mode 100644 index 0000000..b704ae3 --- /dev/null +++ b/app/src/main/res/layout/dialog_room_image.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/room_image_dialog.xml b/app/src/main/res/menu/room_image_dialog.xml new file mode 100644 index 0000000..07a1c15 --- /dev/null +++ b/app/src/main/res/menu/room_image_dialog.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index b04254e..8fb96c5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -35,6 +35,11 @@ @color/color_accent + +