diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 232fa6605..0abd8d603 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -17,6 +17,8 @@ import androidx.browser.customtabs.CustomTabColorSchemeParams; import androidx.browser.customtabs.CustomTabsIntent; import androidx.core.content.ContextCompat; +import fr.free.nrw.commons.kvstore.JsonKvStore; +import java.util.Date; import org.wikipedia.dataclient.WikiSite; import org.wikipedia.page.PageTitle; @@ -29,6 +31,7 @@ import fr.free.nrw.commons.utils.ViewUtil; import timber.log.Timber; import static android.widget.Toast.LENGTH_SHORT; +import static fr.free.nrw.commons.campaigns.CampaignView.CAMPAIGNS_DEFAULT_PREFERENCE; public class Utils { @@ -210,4 +213,35 @@ public class Utils { textView.setText(content); } + /** + * For now we are enabling the monuments only when the date lies between 1 Sept & 31 OCt + * @param date + * @return + */ + public static boolean isMonumentsEnabled(final Date date, final JsonKvStore store){ + if(date.getDay()>=1 && date.getMonth()>=9 && date.getDay()<=31 && date.getMonth()<=10 ){ + return true; + } + + return store.getBoolean(CAMPAIGNS_DEFAULT_PREFERENCE) || true ; + } + + /** + * Util function to get the start date of wlm monument + * For this release we are hardcoding it to be 1st September + * @return + */ + public static String getWLMStartDate() { + return "1 Sep"; + } + + /*** + * Util function to get the end date of wlm monument + * For this release we are hardcoding it to be 31st October + * @return + */ + public static String getWLMEndDate() { + return "31 Oct"; + } + } diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java index 0aff8d2aa..b3fcfeebe 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java @@ -147,25 +147,25 @@ public class BookmarkLocationsDao { } @NonNull - Place fromCursor(Cursor cursor) { - LatLng location = new LatLng(cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LAT)), + Place fromCursor(final Cursor cursor) { + final LatLng location = new LatLng(cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LAT)), cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LONG)), 1F); - Sitelinks.Builder builder = new Sitelinks.Builder(); + final Sitelinks.Builder builder = new Sitelinks.Builder(); builder.setWikipediaLink(cursor.getString(cursor.getColumnIndex(Table.COLUMN_WIKIPEDIA_LINK))); builder.setWikidataLink(cursor.getString(cursor.getColumnIndex(Table.COLUMN_WIKIDATA_LINK))); builder.setCommonsLink(cursor.getString(cursor.getColumnIndex(Table.COLUMN_COMMONS_LINK))); return new Place( - cursor.getString(cursor.getColumnIndex(Table.COLUMN_LANGUAGE)), - cursor.getString(cursor.getColumnIndex(Table.COLUMN_NAME)), - Label.fromText((cursor.getString(cursor.getColumnIndex(Table.COLUMN_LABEL_TEXT)))), - cursor.getString(cursor.getColumnIndex(Table.COLUMN_DESCRIPTION)), - location, - cursor.getString(cursor.getColumnIndex(Table.COLUMN_CATEGORY)), - builder.build(), - cursor.getString(cursor.getColumnIndex(Table.COLUMN_PIC)), - Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(Table.COLUMN_EXISTS))) + cursor.getString(cursor.getColumnIndex(Table.COLUMN_LANGUAGE)), + cursor.getString(cursor.getColumnIndex(Table.COLUMN_NAME)), + Label.fromText((cursor.getString(cursor.getColumnIndex(Table.COLUMN_LABEL_TEXT)))), + cursor.getString(cursor.getColumnIndex(Table.COLUMN_DESCRIPTION)), + location, + cursor.getString(cursor.getColumnIndex(Table.COLUMN_CATEGORY)), + builder.build(), + cursor.getString(cursor.getColumnIndex(Table.COLUMN_PIC)), + Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(Table.COLUMN_EXISTS))) ); } @@ -220,7 +220,7 @@ public class BookmarkLocationsDao { COLUMN_WIKIDATA_LINK, COLUMN_COMMONS_LINK, COLUMN_PIC, - COLUMN_EXISTS + COLUMN_EXISTS, }; static final String DROP_TABLE_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME; @@ -251,7 +251,7 @@ public class BookmarkLocationsDao { onCreate(db); } - public static void onUpdate(SQLiteDatabase db, int from, int to) { + public static void onUpdate(final SQLiteDatabase db, int from, final int to) { Timber.d("bookmarksLocations db is updated from:"+from+", to:"+to); if (from == to) { return; diff --git a/app/src/main/java/fr/free/nrw/commons/campaigns/Campaign.kt b/app/src/main/java/fr/free/nrw/commons/campaigns/Campaign.kt index bab54fbc1..985b84105 100644 --- a/app/src/main/java/fr/free/nrw/commons/campaigns/Campaign.kt +++ b/app/src/main/java/fr/free/nrw/commons/campaigns/Campaign.kt @@ -7,4 +7,5 @@ data class Campaign(var title: String? = null, var description: String? = null, var startDate: String? = null, var endDate: String? = null, - var link: String? = null) \ No newline at end of file + var link: String? = null, + var isWLMCampaign: Boolean = false) \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java index fed6617b4..b641dabd6 100644 --- a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java +++ b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java @@ -4,11 +4,13 @@ import android.content.Context; import android.net.Uri; import android.util.AttributeSet; import android.view.View; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import fr.free.nrw.commons.theme.BaseActivity; import org.wikipedia.util.DateUtil; import java.text.ParseException; @@ -27,9 +29,14 @@ import fr.free.nrw.commons.utils.ViewUtil; * A view which represents a single campaign */ public class CampaignView extends SwipableCardView { - Campaign campaign = null; + Campaign campaign; private ViewHolder viewHolder; + public static final String CAMPAIGNS_DEFAULT_PREFERENCE = "displayCampaignsCardView"; + public static final String WLM_CARD_PREFERENCE = "displayWLMCardView"; + + private String campaignPreference = CAMPAIGNS_DEFAULT_PREFERENCE; + public CampaignView(@NonNull Context context) { super(context); init(); @@ -45,37 +52,46 @@ public class CampaignView extends SwipableCardView { init(); } - public void setCampaign(Campaign campaign) { + public void setCampaign(final Campaign campaign) { this.campaign = campaign; if (campaign != null) { - this.setVisibility(View.VISIBLE); + if (campaign.isWLMCampaign()) { + campaignPreference = WLM_CARD_PREFERENCE; + } + setVisibility(View.VISIBLE); viewHolder.init(); } else { this.setVisibility(View.GONE); } } - @Override public boolean onSwipe(View view) { + @Override public boolean onSwipe(final View view) { view.setVisibility(View.GONE); - ((MainActivity) getContext()).defaultKvStore - .putBoolean("displayCampaignsCardView", false); + ((BaseActivity) getContext()).defaultKvStore + .putBoolean(campaignPreference, false); ViewUtil.showLongToast(getContext(), getResources().getString(R.string.nearby_campaign_dismiss_message)); return true; } private void init() { - View rootView = inflate(getContext(), R.layout.layout_campagin, this); + final View rootView = inflate(getContext(), R.layout.layout_campagin, this); viewHolder = new ViewHolder(rootView); setOnClickListener(view -> { if (campaign != null) { - Utils.handleWebUrl(getContext(), Uri.parse(campaign.getLink())); + if (campaign.isWLMCampaign()) { + ((MainActivity)(getContext())).showNearby(); + } else { + Utils.handleWebUrl(getContext(), Uri.parse(campaign.getLink())); + } } }); } public class ViewHolder { + @BindView(R.id.iv_campaign) + ImageView ivCampaign; @BindView(R.id.tv_title) TextView tvTitle; @BindView(R.id.tv_description) TextView tvDescription; @BindView(R.id.tv_dates) TextView tvDates; @@ -86,14 +102,26 @@ public class CampaignView extends SwipableCardView { public void init() { if (campaign != null) { + ivCampaign.setImageDrawable( + getResources().getDrawable(R.drawable.ic_campaign)); + tvTitle.setText(campaign.getTitle()); tvDescription.setText(campaign.getDescription()); try { - Date startDate = CommonsDateUtil.getIso8601DateFormatShort().parse(campaign.getStartDate()); - Date endDate = CommonsDateUtil.getIso8601DateFormatShort().parse(campaign.getEndDate()); - tvDates.setText(String.format("%1s - %2s", DateUtil.getExtraShortDateString(startDate), - DateUtil.getExtraShortDateString(endDate))); - } catch (ParseException e) { + if (campaign.isWLMCampaign()) { + tvDates.setText( + String.format("%1s - %2s", campaign.getStartDate(), + campaign.getEndDate())); + } else { + final Date startDate = CommonsDateUtil.getIso8601DateFormatShort() + .parse(campaign.getStartDate()); + final Date endDate = CommonsDateUtil.getIso8601DateFormatShort() + .parse(campaign.getEndDate()); + tvDates.setText( + String.format("%1s - %2s", startDate, + endDate)); + } + } catch (final ParseException e) { e.printStackTrace(); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java index 617f096b6..1f5a86a9c 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java @@ -2,14 +2,13 @@ package fr.free.nrw.commons.contributions; import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED; import static fr.free.nrw.commons.contributions.Contribution.STATE_PAUSED; +import static fr.free.nrw.commons.nearby.fragments.NearbyParentFragment.WLM_URL; import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween; import android.Manifest; import android.annotation.SuppressLint; -import android.content.ComponentName; import android.content.Context; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -27,21 +26,21 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager.OnBackStackChangedListener; import androidx.fragment.app.FragmentTransaction; import fr.free.nrw.commons.CommonsApplication; +import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.notification.Notification; import fr.free.nrw.commons.notification.NotificationController; import fr.free.nrw.commons.theme.BaseActivity; +import java.text.ParseException; +import java.util.Date; import java.util.List; import javax.inject.Inject; import javax.inject.Named; -import androidx.work.WorkInfo; import androidx.work.WorkManager; import butterknife.BindView; import butterknife.ButterKnife; -import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; -import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.campaigns.Campaign; import fr.free.nrw.commons.campaigns.CampaignView; import fr.free.nrw.commons.campaigns.CampaignsPresenter; @@ -59,10 +58,7 @@ import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import fr.free.nrw.commons.nearby.NearbyController; import fr.free.nrw.commons.nearby.NearbyNotificationCardView; import fr.free.nrw.commons.nearby.Place; -import fr.free.nrw.commons.notification.Notification; import fr.free.nrw.commons.notification.NotificationActivity; -import fr.free.nrw.commons.notification.NotificationController; -import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.upload.worker.UploadWorker; import fr.free.nrw.commons.utils.ConfigUtils; import fr.free.nrw.commons.utils.DialogUtil; @@ -73,9 +69,6 @@ import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; -import java.util.List; -import javax.inject.Inject; -import javax.inject.Named; import timber.log.Timber; public class ContributionsFragment @@ -118,6 +111,8 @@ public class ContributionsFragment public TextView notificationCount; + private Campaign wlmCampaign; + @NonNull public static ContributionsFragment newInstance() { ContributionsFragment fragment = new ContributionsFragment(); @@ -137,6 +132,7 @@ public class ContributionsFragment public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_contributions, container, false); ButterKnife.bind(this, view); + initWLMCampaign(); presenter.onAttachView(this); contributionsPresenter.onAttachView(this); campaignView.setVisibility(View.GONE); @@ -177,6 +173,15 @@ public class ContributionsFragment return view; } + /** + * Initialise the campaign object for WML + */ + private void initWLMCampaign() { + wlmCampaign = new Campaign(getString(R.string.wlm_campaign_title), + getString(R.string.wlm_campaign_description), Utils.getWLMStartDate().toString(), + Utils.getWLMEndDate().toString(), WLM_URL, true); + } + @Override public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { inflater.inflate(R.menu.contribution_activity_notification_menu, menu); @@ -518,13 +523,17 @@ public class ContributionsFragment } /** - * ask the presenter to fetch the campaigns only if user has not manually disabled it + * As the home screen has limited space, we have choosen to show either campaigns or WLM card. + * The WLM Card gets the priority over monuments, so if the WLM is going on we show that instead + * of campaigns on the campaigns card */ private void fetchCampaigns() { - if (store.getBoolean("displayCampaignsCardView", true)) { + if (Utils.isMonumentsEnabled(new Date(), store)) { + campaignView.setCampaign(wlmCampaign); + campaignView.setVisibility(View.VISIBLE); + } else if (store.getBoolean(CampaignView.CAMPAIGNS_DEFAULT_PREFERENCE, true)) { presenter.getCampaigns(); - } - else{ + } else { campaignView.setVisibility(View.GONE); } } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 6637f8834..5cc900931 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -90,7 +90,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl private ContributionsListAdapter adapter; - private Callback callback; + @Nullable private Callback callback; private final int SPAN_COUNT_LANDSCAPE = 3; private final int SPAN_COUNT_PORTRAIT = 1; @@ -150,7 +150,9 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl contributionsListPresenter.contributionList.observe(this.getViewLifecycleOwner(), list -> { contributionsSize = list.size(); adapter.submitList(list); - callback.notifyDataSetChanged(); + if (callback != null) { + callback.notifyDataSetChanged(); + } }); rvContributionsList.setAdapter(adapter); adapter.registerAdapterDataObserver(new AdapterDataObserver() { @@ -172,7 +174,9 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl @Override public void onItemRangeChanged(final int positionStart, final int itemCount) { super.onItemRangeChanged(positionStart, itemCount); - callback.viewPagerNotifyDataSetChanged(); + if (callback != null) { + callback.viewPagerNotifyDataSetChanged(); + } } }); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java index c357c5598..c973be361 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java @@ -373,6 +373,13 @@ public class MainActivity extends BaseActivity super.onDestroy(); } + /** + * Public method to show nearby from the reference of this. + */ + public void showNearby() { + tabLayout.setSelectedItemId(NavTab.NEARBY.code()); + } + public enum ActiveFragment { CONTRIBUTIONS, NEARBY, diff --git a/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java b/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java index d5989e1b3..315bafe41 100644 --- a/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java +++ b/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.java @@ -13,7 +13,7 @@ import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao; public class DBOpenHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "commons.db"; - private static final int DATABASE_VERSION = 15; + private static final int DATABASE_VERSION = 17; public static final String CONTRIBUTIONS_TABLE = "contributions"; private final String DROP_TABLE_STATEMENT="DROP TABLE IF EXISTS %s"; diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java index 4b7146487..3f272a41a 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java @@ -265,7 +265,9 @@ public class OkHttpJsonApiClient { } public Observable> getNearbyPlaces(LatLng cur, String language, double radius) - throws IOException { + throws Exception { + + Timber.d("Fetching nearby items at radius %s", radius); String wikidataQuery = FileUtils.readFromResource("/queries/nearby_query.rq"); String query = wikidataQuery .replace("${RAD}", String.format(Locale.ROOT, "%.2f", radius)) @@ -302,6 +304,67 @@ public class OkHttpJsonApiClient { }); } + /** + * Wikidata query to fetch monuments + * + * @param cur : The current location coordinates + * @param language : The language + * @param radius : The radius around the current location within which we expect the results + * @return + * @throws IOException + */ + public Observable> getNearbyMonuments(LatLng cur, String language, final double radius){ + Timber.d("Fetching monuments at radius %s", radius); + final String wikidataQuery; + try { + wikidataQuery = FileUtils.readFromResource("/queries/monuments_query.rq"); + if (TextUtils.isEmpty(language)) { + language = "en"; + } + String query = wikidataQuery + .replace("${RAD}", String.format(Locale.ROOT, "%.2f", radius)) + .replace("${LAT}", String.format(Locale.ROOT, "%.4f", cur.getLatitude())) + .replace("${LONG}", String.format(Locale.ROOT, "%.4f", cur.getLongitude())) + .replace("${LANG}", language); + + HttpUrl.Builder urlBuilder = HttpUrl + .parse(sparqlQueryUrl) + .newBuilder() + .addQueryParameter("query", query) + .addQueryParameter("format", "json"); + + Request request = new Request.Builder() + .url(urlBuilder.build()) + .build(); + + Timber.d("Monuments URL: %s", request.url().toString()); + + return Observable.fromCallable(() -> { + final Response response = okHttpClient.newCall(request).execute(); + if (response != null && response.body() != null && response.isSuccessful()) { + final String json = response.body().string(); + if (json == null) { + return new ArrayList<>(); + } + + final NearbyResponse nearbyResponse = gson.fromJson(json, NearbyResponse.class); + final List bindings = nearbyResponse.getResults().getBindings(); + final List places = new ArrayList<>(); + for (final NearbyResultItem item : bindings) { + final Place place = Place.from(item); + place.setMonument(true); + places.add(place); + } + return places; + } + return new ArrayList<>(); + }); + } catch (final IOException e) { + e.printStackTrace(); + return Observable.error(e); + } + } + /** * Get the QIDs of all Wikidata items that are subclasses of the given Wikidata item. Example: * bridge -> suspended bridge, aqueduct, etc diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyBaseMarker.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyBaseMarker.java index fb50c36dc..0bb097ce9 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyBaseMarker.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyBaseMarker.java @@ -8,14 +8,17 @@ import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; import com.mapbox.mapboxsdk.annotations.Icon; import com.mapbox.mapboxsdk.annotations.IconFactory; import com.mapbox.mapboxsdk.geometry.LatLng; +import java.util.Objects; public class NearbyBaseMarker extends BaseMarkerOptions { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override public NearbyBaseMarker createFromParcel(Parcel in) { return new NearbyBaseMarker(in); } + @Override public NearbyBaseMarker[] newArray(int size) { return new NearbyBaseMarker[size]; } @@ -70,4 +73,21 @@ public class NearbyBaseMarker extends BaseMarkerOptions> queryWikiDataForMonuments( + final LatLng latLng, final String language) { + return nearbyPlaces.queryWikiDataForMonuments(latLng, language); + } + /** * Loads attractions from location for list view, we need to return Place data type. * @@ -168,6 +174,7 @@ public class NearbyController { VectorDrawableCompat vectorDrawable = null; VectorDrawableCompat vectorDrawableGreen = null; VectorDrawableCompat vectorDrawableGrey = null; + VectorDrawableCompat vectorDrawableMonuments = null; vectorDrawable = null; try { vectorDrawable = VectorDrawableCompat.create( @@ -176,6 +183,9 @@ public class NearbyController { context.getResources(), R.drawable.ic_custom_map_marker_green, context.getTheme()); vectorDrawableGrey = VectorDrawableCompat.create( context.getResources(), R.drawable.ic_custom_map_marker_grey, context.getTheme()); + vectorDrawableMonuments = VectorDrawableCompat + .create(context.getResources(), R.drawable.ic_custom_map_marker_monuments, + context.getTheme()); } catch (Resources.NotFoundException e) { // ignore when running tests. } @@ -183,34 +193,39 @@ public class NearbyController { Bitmap icon = UiUtils.getBitmap(vectorDrawable); Bitmap iconGreen = UiUtils.getBitmap(vectorDrawableGreen); Bitmap iconGrey = UiUtils.getBitmap(vectorDrawableGrey); + Bitmap iconMonuments = UiUtils.getBitmap(vectorDrawableMonuments); for (Place place : placeList) { + NearbyBaseMarker nearbyBaseMarker = new NearbyBaseMarker(); String distance = formatDistanceBetween(curLatLng, place.location); place.setDistance(distance); - NearbyBaseMarker nearbyBaseMarker = new NearbyBaseMarker(); nearbyBaseMarker.title(place.name); nearbyBaseMarker.position( - new com.mapbox.mapboxsdk.geometry.LatLng( - place.location.getLatitude(), - place.location.getLongitude())); + new com.mapbox.mapboxsdk.geometry.LatLng( + place.location.getLatitude(), + place.location.getLongitude())); nearbyBaseMarker.place(place); // Check if string is only spaces or empty, if so place doesn't have any picture - if (!place.pic.trim().isEmpty()) { + + if (place.isMonument()) { + nearbyBaseMarker.icon(IconFactory.getInstance(context) + .fromBitmap(iconMonuments)); + } + else if (!place.pic.trim().isEmpty()) { if (iconGreen != null) { nearbyBaseMarker.icon(IconFactory.getInstance(context) - .fromBitmap(iconGreen)); + .fromBitmap(iconGreen)); } } else if (!place.exists) { // Means that the topic of the Wikidata item does not exist in the real world anymore, for instance it is a past event, or a place that was destroyed if (iconGrey != null) { nearbyBaseMarker.icon(IconFactory.getInstance(context) - .fromBitmap(iconGrey)); + .fromBitmap(iconGrey)); } } else { nearbyBaseMarker.icon(IconFactory.getInstance(context) - .fromBitmap(icon)); + .fromBitmap(icon)); } - baseMarkerOptions.add(nearbyBaseMarker); } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java index b139595f2..3497b88c5 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java @@ -5,6 +5,7 @@ import java.util.ArrayList; public class NearbyFilterState { private boolean existsSelected; private boolean needPhotoSelected; + private boolean wlmSelected; private int checkBoxTriState; private ArrayList