diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java index ce888a767..0b768830d 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java @@ -6,8 +6,10 @@ import android.os.CountDownTimer; import android.support.annotation.NonNull; import android.support.transition.TransitionManager; import android.support.v4.view.ViewCompat; +import android.support.v7.widget.PopupMenu; import android.util.Log; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; @@ -36,9 +38,11 @@ class PlaceRenderer extends Renderer { @BindView(R.id.cameraButton) LinearLayout cameraButton; @BindView(R.id.galeryButton) LinearLayout galeryButton; @BindView(R.id.directionsButton) LinearLayout directionsButton; + @BindView(R.id.iconOverflow) LinearLayout iconOverflow; private View view; private static ArrayList openedItems; + private Place place; PlaceRenderer(){ @@ -98,7 +102,7 @@ class PlaceRenderer extends Renderer { @Override public void render() { - Place place = getContent(); + place = getContent(); tvName.setText(place.name); String descriptionText = place.getDescription().getText(); if (descriptionText.equals("?")) { @@ -124,9 +128,56 @@ class PlaceRenderer extends Renderer { } }); - } - - private void startActivity(Intent intent){ + iconOverflow.setVisibility(showMenu() ? View.VISIBLE : View.GONE); + iconOverflow.setOnClickListener(v -> popupMenuListener()); } + + private void popupMenuListener() { + PopupMenu popupMenu = new PopupMenu(view.getContext(), iconOverflow); + popupMenu.inflate(R.menu.nearby_info_dialog_options); + + MenuItem commonsArticle = popupMenu.getMenu() + .findItem(R.id.nearby_info_menu_commons_article); + MenuItem wikiDataArticle = popupMenu.getMenu() + .findItem(R.id.nearby_info_menu_wikidata_article); + MenuItem wikipediaArticle = popupMenu.getMenu() + .findItem(R.id.nearby_info_menu_wikipedia_article); + + commonsArticle.setEnabled(!place.siteLinks.getCommonsLink().equals(Uri.EMPTY)); + wikiDataArticle.setEnabled(!place.siteLinks.getWikidataLink().equals(Uri.EMPTY)); + wikipediaArticle.setEnabled(!place.siteLinks.getWikipediaLink().equals(Uri.EMPTY)); + + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.nearby_info_menu_commons_article: + openWebView(place.siteLinks.getCommonsLink()); + return true; + case R.id.nearby_info_menu_wikidata_article: + openWebView(place.siteLinks.getWikidataLink()); + return true; + case R.id.nearby_info_menu_wikipedia_article: + openWebView(place.siteLinks.getWikipediaLink()); + return true; + default: + break; + } + return false; + } + }); + popupMenu.show(); + } + + private void openWebView(Uri link) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, link); + view.getContext().startActivity(browserIntent); + } + + private boolean showMenu() { + return !place.siteLinks.getCommonsLink().equals(Uri.EMPTY) + || !place.siteLinks.getWikidataLink().equals(Uri.EMPTY); + } + } \ No newline at end of file diff --git a/app/src/main/res/menu/nearby_info_dialog_options.xml b/app/src/main/res/menu/nearby_info_dialog_options.xml index ea9a7344b..ce5891285 100644 --- a/app/src/main/res/menu/nearby_info_dialog_options.xml +++ b/app/src/main/res/menu/nearby_info_dialog_options.xml @@ -6,4 +6,7 @@ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1593f22f0..b1447e55c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -200,6 +200,7 @@ no description found Commons file page Wikidata item + Wikipedia article Error while caching pictures A unique descriptive title for the file, which will serve as a filename. You may use plain language with spaces. Do not include the file extension Please describe the media as much as possible: Where was it taken? What does it show? What is the context? Please describe the objects or persons. Reveal information that can not be easily guessed, for instance the time of day if it is a landscape. If the media shows something unusual, please explain what makes it unusual.