From 482348613954ab0e096b5d53cff272463a38cb3c Mon Sep 17 00:00:00 2001 From: maskara Date: Sat, 20 May 2017 13:09:16 +0200 Subject: [PATCH] Add popup menu in nearby info dialog --- app/build.gradle | 1 + .../nrw/commons/nearby/NearbyInfoDialog.java | 67 +++++++++++++++++-- .../fr/free/nrw/commons/nearby/Sitelinks.java | 2 +- .../res/drawable/ic_more_vert_white_24dp.xml | 9 +++ .../main/res/layout/dialog_nearby_info.xml | 12 +++- .../res/menu/nearby_info_dialog_options.xml | 9 +++ app/src/main/res/values/strings.xml | 3 + 7 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/drawable/ic_more_vert_white_24dp.xml create mode 100644 app/src/main/res/menu/nearby_info_dialog_options.xml diff --git a/app/build.gradle b/app/build.gradle index 15ac63d9e..bd203477b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,6 +44,7 @@ android { minSdkVersion project.minSdkVersion targetSdkVersion project.targetSdkVersion testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + vectorDrawables.useSupportLibrary = true } buildTypes { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java index a4b9a74cb..5f9ebc950 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java @@ -4,9 +4,12 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; +import android.support.v7.widget.PopupMenu; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import butterknife.BindView; @@ -34,10 +37,13 @@ public class NearbyInfoDialog extends OverlayDialog { @BindView(R.id.link_preview_go_button) TextView goToButton; + @BindView(R.id.link_preview_overflow_button) + ImageView overflowButton; + private Unbinder unbinder; private LatLng location; - private Uri articleLink; + private Sitelinks sitelinks; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -56,15 +62,60 @@ public class NearbyInfoDialog extends OverlayDialog { } private void getArticleLink(Bundle bundle) { - Sitelinks sitelinks = bundle.getParcelable(ARG_SITE_LINK); + this.sitelinks = bundle.getParcelable(ARG_SITE_LINK); - if (sitelinks.getWikipediaLink() != null) { - this.articleLink = sitelinks.getWikipediaLink(); - } else { + if (sitelinks.getWikipediaLink() == null) { goToButton.setVisibility(View.GONE); } + + overflowButton.setVisibility(showMenu() ? View.VISIBLE : View.GONE); + + overflowButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + popupMenuListener(v); + } + }); } + private void popupMenuListener(View v) { + PopupMenu popupMenu = new PopupMenu(getActivity(), overflowButton); + 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); + + commonsArticle.setEnabled(sitelinks.getCommonsLink() != null); + wikiDataArticle.setEnabled(sitelinks.getWikidataLink() != null); + + popupMenu.setOnMenuItemClickListener(menuListener); + popupMenu.show(); + } + + private boolean showMenu() { + return sitelinks.getCommonsLink() != null || + sitelinks.getWikidataLink() != null; + } + + private PopupMenu.OnMenuItemClickListener menuListener = new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.nearby_info_menu_commons_article: + openWebView(sitelinks.getCommonsLink()); + return true; + case R.id.nearby_info_menu_wikidata_article: + openWebView(sitelinks.getWikidataLink()); + return true; + default: + break; + } + return false; + } + }; + public static void showYourself(FragmentActivity fragmentActivity, Place place) { NearbyInfoDialog mDialog = new NearbyInfoDialog(); Bundle bundle = new Bundle(); @@ -96,7 +147,11 @@ public class NearbyInfoDialog extends OverlayDialog { @OnClick(R.id.link_preview_go_button) void onReadArticleClick() { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, articleLink); + openWebView(sitelinks.getWikipediaLink()); + } + + private void openWebView(Uri link) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, link); startActivity(browserIntent); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/Sitelinks.java b/app/src/main/java/fr/free/nrw/commons/nearby/Sitelinks.java index 6222ec909..2e044221f 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/Sitelinks.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/Sitelinks.java @@ -63,7 +63,7 @@ public class Sitelinks implements Parcelable { stringUrl = stringUrl .replaceAll("<", "") .replaceAll(">", "") - .replaceAll("\n", ""); + .replaceAll("[\n\r]", ""); if (!Utils.isNullOrWhiteSpace(stringUrl) && stringUrl != null) { return Uri.parse(stringUrl); } diff --git a/app/src/main/res/drawable/ic_more_vert_white_24dp.xml b/app/src/main/res/drawable/ic_more_vert_white_24dp.xml new file mode 100644 index 000000000..d73c8d86c --- /dev/null +++ b/app/src/main/res/drawable/ic_more_vert_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/dialog_nearby_info.xml b/app/src/main/res/layout/dialog_nearby_info.xml index 1dc5c29f4..a4918c760 100644 --- a/app/src/main/res/layout/dialog_nearby_info.xml +++ b/app/src/main/res/layout/dialog_nearby_info.xml @@ -33,7 +33,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" - android:clickable="true" + android:orientation="horizontal" android:minHeight="64dp"> + + + + + + \ 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 5930cbc36..ba833ebb2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -195,4 +195,7 @@ Tap this message (or hit back) to skip this step. Settings Feedback Logout + + Commons Article + WikiData Article