diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index c826013f0..53e154eb6 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -72,6 +72,8 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { @Inject MediaWikiApi mwApi; @Inject @Named("default_preferences") SharedPreferences prefs; + @Inject @Named("prefs") SharedPreferences prefsPrefs; + @Inject @Named("direct_nearby_upload_prefs") SharedPreferences directPrefs; @Inject CategoryDao categoryDao; private RVRendererAdapter categoriesAdapter; @@ -79,6 +81,7 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { private HashMap> categoriesCache; private List selectedCategories = new ArrayList<>(); private TitleTextWatcher textWatcher = new TitleTextWatcher(); + private boolean hasDirectCategories = false; private final CategoriesAdapterFactory adapterFactory = new CategoriesAdapterFactory(item -> { if (item.isSelected()) { @@ -127,7 +130,7 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { } public void hideKeyboard(View view) { - InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); + InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } @@ -222,7 +225,7 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { .observeOn(AndroidSchedulers.mainThread()) .subscribe( s -> categoriesAdapter.add(s), - Timber::e, + Timber::e, () -> { categoriesAdapter.notifyDataSetChanged(); categoriesSearchInProgress.setVisibility(View.GONE); @@ -257,9 +260,34 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { } private Observable defaultCategories() { - return gpsCategories() - .concatWith(titleCategories()) - .concatWith(recentCategories()); + + Observable directCat = directCategories(); + if (hasDirectCategories) { + Timber.d("Image has direct Cat"); + return directCat + .concatWith(gpsCategories()) + .concatWith(titleCategories()) + .concatWith(recentCategories()); + } + else { + Timber.d("Image has no direct Cat"); + return gpsCategories() + .concatWith(titleCategories()) + .concatWith(recentCategories()); + } + } + + private Observable directCategories() { + String directCategory = directPrefs.getString("Category", ""); + List categoryList = new ArrayList<>(); + Timber.d("Direct category found: " + directCategory); + + if (!directCategory.equals("")) { + hasDirectCategories = true; + categoryList.add(directCategory); + Timber.d("DirectCat does not equal emptyString. Direct Cat list has " + categoryList); + } + return Observable.fromIterable(categoryList).map(name -> new CategoryItem(name, false)); } private Observable gpsCategories() { diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java index 080f61b61..a8962fed9 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java @@ -39,6 +39,7 @@ public interface CommonsApplicationComponent extends AndroidInjector { @@ -124,8 +125,8 @@ public class PlaceRenderer extends Renderer { Timber.d("directPrefs stored"); editor.putString("Title", place.getName()); editor.putString("Desc", place.getLongDescription()); + editor.putString("Category", place.getCategory()); editor.apply(); - } private void closeLayout(LinearLayout buttonLayout){ @@ -138,7 +139,8 @@ public class PlaceRenderer extends Renderer { @Override public void render() { - + ApplicationlessInjection.getInstance(getContext().getApplicationContext()) + .getCommonsApplicationComponent().inject(this); place = getContent(); tvName.setText(place.name); String descriptionText = place.getLongDescription(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index 395873c1d..dbaa2d1d2 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -114,6 +114,8 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { if (isNearbyUpload) { String imageTitle = directPrefs.getString("Title", ""); String imageDesc = directPrefs.getString("Desc", ""); + String imageCats = directPrefs.getString("Category", ""); + Timber.d("Image title: " + imageTitle + ", image desc: " + imageDesc + ", image categories: " + imageCats); titleEdit.setText(imageTitle); descEdit.setText(imageDesc); } diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java index 6627f2886..4f6a6d456 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java @@ -54,7 +54,7 @@ public class ImageUtils { while ((checkImageRightPosition <= loadImageWidth) && (checkImageLeftPosition < checkImageRightPosition)) { while ((checkImageBottomPosition <= loadImageHeight) && (checkImageTopPosition < checkImageBottomPosition)) { - Timber.d("left: " + checkImageLeftPosition + " right: " + checkImageRightPosition + " top: " + checkImageTopPosition + " bottom: " + checkImageBottomPosition); + Timber.v("left: " + checkImageLeftPosition + " right: " + checkImageRightPosition + " top: " + checkImageTopPosition + " bottom: " + checkImageBottomPosition); Rect rect = new Rect(checkImageLeftPosition,checkImageTopPosition,checkImageRightPosition,checkImageBottomPosition); totalDividedRectangles++; diff --git a/app/src/main/resources/queries/nearby_query.rq b/app/src/main/resources/queries/nearby_query.rq index 1542233c1..0453005e8 100644 --- a/app/src/main/resources/queries/nearby_query.rq +++ b/app/src/main/resources/queries/nearby_query.rq @@ -8,6 +8,7 @@ SELECT (SAMPLE(COALESCE(?emoji0, ?emoji1)) as ?emoji) ?wikipediaArticle ?commonsArticle + (SAMPLE(?Commons_category) as ?Commons_category) WHERE { # Around given location... SERVICE wikibase:around { @@ -23,6 +24,9 @@ SELECT OPTIONAL {?item rdfs:label ?item_label_preferred_language. FILTER (lang(?item_label_preferred_language) = "${LANG}")} OPTIONAL {?item rdfs:label ?item_label_any_language} + # Get Commons category (P373) + OPTIONAL { ?item wdt:P373 ?Commons_category. } + # Get the class label in the preferred language of the user, or any other language if no label is available in that language. OPTIONAL { ?item p:P31/ps:P31 ?classId. @@ -35,10 +39,6 @@ SELECT # Get emoji OPTIONAL { ?classId wdt:P487 ?emoji0. } OPTIONAL { ?classId wdt:P279*/wdt:P487 ?emoji1. } - OPTIONAL { - ?sitelink schema:about ?item . - ?sitelink schema:inLanguage "en" - } OPTIONAL { ?wikipediaArticle schema:about ?item ; schema:isPartOf .