Skip to content

#3780 Create media using a combination of Entities & MwQueryResult #3786

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 30 commits into from
Jun 25, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
88c307d
#3468 Switch from RvRenderer to AdapterDelegates - replace SearchDepi…
macgills May 12, 2020
c7d25e1
#3468 Switch from RvRenderer to AdapterDelegates - replace UploadCate…
macgills May 12, 2020
58af240
#3468 Switch from RvRenderer to AdapterDelegates - update BaseAdapter…
macgills May 13, 2020
f083eb6
#3468 Switch from RvRenderer to AdapterDelegates - replace SearchImag…
macgills May 13, 2020
1c50591
#3468 Switch from RvRenderer to AdapterDelegates - replace SearchCate…
macgills May 13, 2020
8a39fdd
#3468 Switch from RvRenderer to AdapterDelegates - replace Notificati…
macgills May 13, 2020
456b864
#3468 Switch from RvRenderer to AdapterDelegates - replace UploadDepi…
macgills May 13, 2020
3b42296
#3468 Switch from RvRenderer to AdapterDelegates - replace PlaceRenderer
macgills May 14, 2020
9f2dcb8
Merge remote-tracking branch 'origin/master' into macgills/3468-adapt…
macgills May 15, 2020
4866fee
#3756 Convert SearchDepictionsFragment to use Pagination - convert Se…
macgills May 19, 2020
8d13122
Merge remote-tracking branch 'origin/master' into macgills/3756-depic…
macgills May 19, 2020
9af97c4
#3756 Convert SearchDepictionsFragment to use Pagination - fix presen…
macgills May 20, 2020
0fd81d0
#3756 Convert SearchDepictionsFragment to use Pagination - test DataS…
macgills May 20, 2020
ec53377
#3756 Convert SearchDepictionsFragment to use Pagination - reset rx s…
macgills May 20, 2020
6368e50
#3760 Convert SearchCategoriesFragment to use Pagination - extract fu…
macgills May 25, 2020
c0fcf1a
#3772 Convert SearchImagesFragment to use Pagination - convert Searc…
macgills May 26, 2020
37c7eb0
#3772 Convert SearchImagesFragment to use Pagination - allow viewpag…
macgills May 26, 2020
1a1a838
Merge remote-tracking branch 'origin/master' into macgills/3760-categ…
macgills May 28, 2020
0271464
#3760 remove test that got re-added by merge
macgills May 28, 2020
be075c8
Merge remote-tracking branch 'origin/master' into macgills/3760-categ…
macgills May 28, 2020
043efde
#3760 remove duplicate dependency
macgills May 28, 2020
350b19e
Merge branch 'macgills/3760-categories-pagination' into macgills/3772…
macgills May 28, 2020
d85d114
#3772 fix compilation
macgills May 28, 2020
e96b7f6
#3780 Create media using a combination of Entities & MwQueryResult - …
macgills May 29, 2020
48a4e10
#3808 Construct media objects that depict an item id correctly - use …
macgills Jun 16, 2020
6bbf392
Merge remote-tracking branch 'origin/master' into macgills/3780-media…
macgills Jun 18, 2020
eb9e94c
#3780 Create media using a combination of Entities & MwQueryResult - …
macgills Jun 18, 2020
f96308e
#3780 Create media using a combination of Entities & MwQueryResult - …
macgills Jun 18, 2020
7d487c3
Merge branch 'master' into macgills/3780-media-construction
macgills Jun 24, 2020
747839b
Merge remote-tracking branch 'origin/master' into macgills/3780-media…
macgills Jun 25, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
#3468 Switch from RvRenderer to AdapterDelegates - replace SearchDepi…
…ctionsRenderer
  • Loading branch information
macgills committed May 12, 2020
commit 88c307d2659b60fa09b9c575dc19c32ece74520c
16 changes: 9 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ apply from: 'quality.gradle'

def isRunningOnTravisAndIsNotPRBuild = System.getenv("CI") == "true" && file('../play.p12').exists()

if(isRunningOnTravisAndIsNotPRBuild) {
if (isRunningOnTravisAndIsNotPRBuild) {
apply plugin: 'com.github.triplet.play'
}

Expand Down Expand Up @@ -43,8 +43,9 @@ dependencies {
implementation 'com.dinuscxj:circleprogressbar:1.1.1'
implementation 'com.karumi:dexter:5.0.0'
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"

kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
implementation "com.hannesdorfmann:adapterdelegates4-kotlin-dsl-layoutcontainer:$ADAPTER_DELEGATES_VERSION"
implementation "com.hannesdorfmann:adapterdelegates4-pagination:$ADAPTER_DELEGATES_VERSION"

// Logging
implementation 'ch.acra:acra-dialog:5.3.0'
Expand Down Expand Up @@ -112,7 +113,8 @@ dependencies {
implementation "androidx.room:room-runtime:$ROOM_VERSION"
implementation "androidx.room:room-ktx:$ROOM_VERSION"
implementation "androidx.room:room-rxjava2:$ROOM_VERSION"
kapt "androidx.room:room-compiler:$ROOM_VERSION" // For Kotlin use kapt instead of annotationProcessor
kapt "androidx.room:room-compiler:$ROOM_VERSION"
// For Kotlin use kapt instead of annotationProcessor
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
testImplementation "androidx.arch.core:core-testing:2.1.0"

Expand Down Expand Up @@ -168,7 +170,7 @@ android {
test.resources.srcDirs += 'src/main/resoures'
}

signingConfigs {
signingConfigs {
release
}

Expand All @@ -177,7 +179,7 @@ android {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
testProguardFile 'test-proguard-rules.txt'
if(isRunningOnTravisAndIsNotPRBuild) {
if (isRunningOnTravisAndIsNotPRBuild) {
signingConfig signingConfigs.release
}
}
Expand Down Expand Up @@ -206,7 +208,7 @@ android {
productFlavors {
prod {

applicationId 'fr.free.nrw.commons'
applicationId 'fr.free.nrw.commons'

buildConfigField "String", "WIKIMEDIA_API_POTD", "\"https://commons.wikimedia.org/w/api.php?action=featuredfeed&feed=potd&feedformat=rss&language=en\""
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\""
Expand Down Expand Up @@ -287,7 +289,7 @@ android {
buildToolsVersion buildToolsVersion
}

if(isRunningOnTravisAndIsNotPRBuild) {
if (isRunningOnTravisAndIsNotPRBuild) {
play {
track = "alpha"
userFraction = 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public class DepictedImagesPresenter implements DepictedImagesContract.UserActio
* Wikibase enitityId for the depicted Item
* Ex: Q9394
*/
private String entityId = null;
private List<Media> queryList = new ArrayList<>();
private String entityId;

@Inject
public DepictedImagesPresenter(@Named("default_preferences") JsonKvStore depictionKvStore, DepictsClient depictsClient, MediaClient mediaClient, @Named(IO_THREAD) Scheduler ioScheduler,
Expand Down Expand Up @@ -68,6 +68,7 @@ public void onDetachView() {
@SuppressLint("CheckResult")
@Override
public void initList(String entityId) {
this.entityId = entityId;
view.setLoadingStatus(true);
view.progressBarVisible(true);
view.setIsLastPage(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,18 @@
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.pedrogomez.renderers.RVRendererAdapter;
import dagger.android.support.DaggerFragment;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.depictions.WikidataItemDetailsActivity;
import fr.free.nrw.commons.explore.depictions.SearchDepictionsAdapterFactory;
import fr.free.nrw.commons.explore.depictions.SearchDepictionsRenderer;
import fr.free.nrw.commons.explore.depictions.DepictionAdapter;
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.ViewUtil;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
import kotlin.Unit;

/**
* Fragment for parent classes and child classes of Depicted items in Explore
Expand All @@ -48,7 +47,7 @@ public class SubDepictionListFragment extends DaggerFragment implements SubDepic
* Keeps a record of whether current instance of the fragment if of SubClass or ParentClass
*/
private boolean isParentClass = false;
private RVRendererAdapter<DepictedItem> depictionsAdapter;
private DepictionAdapter depictionsAdapter;
RecyclerView.LayoutManager layoutManager;
/**
* Stores entityId for the depiction
Expand All @@ -61,20 +60,6 @@ public class SubDepictionListFragment extends DaggerFragment implements SubDepic

@Inject SubDepictionListPresenter presenter;

private final SearchDepictionsAdapterFactory adapterFactory = new SearchDepictionsAdapterFactory(new SearchDepictionsRenderer.DepictCallback() {
@Override
public void depictsClicked(DepictedItem item) {
// Open SubDepiction Details page
getActivity().finish();
WikidataItemDetailsActivity.startYourself(getContext(), item);
}
});

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}

private void initViews() {
if (getArguments() != null) {
depictsName = getArguments().getString("wikidataItemName");
Expand Down Expand Up @@ -115,7 +100,12 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
}
initViews();
depictionsRecyclerView.setLayoutManager(layoutManager);
depictionsAdapter = adapterFactory.create();
depictionsAdapter = new DepictionAdapter(depictedItem -> {
// Open SubDepiction Details page
getActivity().finish();
WikidataItemDetailsActivity.startYourself(getContext(), depictedItem);
return Unit.INSTANCE;
});
depictionsRecyclerView.setAdapter(depictionsAdapter);
return v;
}
Expand All @@ -130,14 +120,7 @@ public void onSuccess(List<DepictedItem> mediaList) {
progressBar.setVisibility(View.GONE);
depictionNotFound.setVisibility(GONE);
bottomProgressBar.setVisibility(GONE);
int itemCount=layoutManager.getItemCount();
depictionsAdapter.addAll(mediaList);
depictionsRecyclerView.getRecycledViewPool().clear();
if(itemCount!=0) {
depictionsAdapter.notifyItemRangeInserted(itemCount, mediaList.size()-1);
}else{
depictionsAdapter.notifyDataSetChanged();
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ data class Binding(
val itemLabel: SparqInfo,
val itemDescription: SparqInfo? = null
) {
val id: String by lazy { item.value.substringAfterLast("/") }
val id: String
get() = item.value.substringAfterLast("/")
}

data class SparqInfo(val type: String, val value: String)
63 changes: 30 additions & 33 deletions app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,16 @@
import android.view.View;
import android.widget.FrameLayout;
import android.widget.SearchView;

import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager.widget.ViewPager;

import butterknife.BindView;
import butterknife.ButterKnife;
import com.google.android.material.tabs.TabLayout;
import com.jakewharton.rxbinding2.view.RxView;
import com.jakewharton.rxbinding2.widget.RxSearchView;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import butterknife.BindView;
import butterknife.ButterKnife;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.category.CategoryImagesCallback;
Expand All @@ -34,6 +27,10 @@
import fr.free.nrw.commons.utils.FragmentUtils;
import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.android.schedulers.AndroidSchedulers;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import timber.log.Timber;

/**
* Represents search screen of this app
Expand Down Expand Up @@ -111,35 +108,35 @@ public void setTabs() {
.takeUntil(RxView.detaches(searchView))
.debounce(500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe( query -> {
this.query = query.toString();
//update image list
if (!TextUtils.isEmpty(query)) {
viewPager.setVisibility(View.VISIBLE);
tabLayout.setVisibility(View.VISIBLE);
searchHistoryContainer.setVisibility(View.GONE);
.subscribe(query -> {
this.query = query.toString();
//update image list
if (!TextUtils.isEmpty(query)) {
viewPager.setVisibility(View.VISIBLE);
tabLayout.setVisibility(View.VISIBLE);
searchHistoryContainer.setVisibility(View.GONE);

if (FragmentUtils.isFragmentUIActive(searchDepictionsFragment)) {
searchDepictionsFragment.updateDepictionList(query.toString());
}

if (FragmentUtils.isFragmentUIActive(searchImageFragment)) {
searchImageFragment.updateImageList(query.toString());
}
if (FragmentUtils.isFragmentUIActive(searchDepictionsFragment)) {
searchDepictionsFragment.updateDepictionList(query.toString());
}

if (FragmentUtils.isFragmentUIActive(searchCategoryFragment)) {
searchCategoryFragment.updateCategoryList(query.toString());
}
if (FragmentUtils.isFragmentUIActive(searchImageFragment)) {
searchImageFragment.updateImageList(query.toString());
}

}else {
//Open RecentSearchesFragment
recentSearchesFragment.updateRecentSearches();
viewPager.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);
setSearchHistoryFragment();
searchHistoryContainer.setVisibility(View.VISIBLE);
if (FragmentUtils.isFragmentUIActive(searchCategoryFragment)) {
searchCategoryFragment.updateCategoryList(query.toString());
}

} else {
//Open RecentSearchesFragment
recentSearchesFragment.updateRecentSearches();
viewPager.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);
setSearchHistoryFragment();
searchHistoryContainer.setVisibility(View.VISIBLE);
}
}, Timber::e
));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package fr.free.nrw.commons.explore.depictions

import androidx.recyclerview.widget.DiffUtil
import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem


class DepictionAdapter(clickListener: (DepictedItem) -> Unit) :
AsyncListDifferDelegationAdapter<DepictedItem>(
DiffUtil,
depictionDelegate(clickListener)
) {

fun addAll(newResults: List<DepictedItem>) {
items = (items ?: emptyList<DepictedItem>()) + newResults
}

fun clear() {
items = emptyList()
}

}

object DiffUtil : DiffUtil.ItemCallback<DepictedItem>() {
override fun areItemsTheSame(oldItem: DepictedItem, newItem: DepictedItem) =
oldItem.id == newItem.id

override fun areContentsTheSame(oldItem: DepictedItem, newItem: DepictedItem) =
oldItem == newItem
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fr.free.nrw.commons.explore.depictions

import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateLayoutContainer
import fr.free.nrw.commons.R
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
import kotlinx.android.synthetic.main.item_depictions.*


fun depictionDelegate(onDepictionClicked: (DepictedItem) -> Unit) =
adapterDelegateLayoutContainer<DepictedItem, DepictedItem>(R.layout.item_depictions) {
containerView.setOnClickListener { onDepictionClicked(item) }
bind {
depicts_label.text = item.name
description.text = item.description
if (item.imageUrl?.isNotBlank() == true) {
depicts_image.setImageURI(item.imageUrl)
} else {
depicts_image.setActualImageResource(R.drawable.ic_wikidata_logo_24dp)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package fr.free.nrw.commons.explore.depictions
import fr.free.nrw.commons.BuildConfig
import fr.free.nrw.commons.Media
import fr.free.nrw.commons.depictions.models.DepictionResponse
import fr.free.nrw.commons.depictions.subClass.models.Binding
import fr.free.nrw.commons.depictions.subClass.models.SparqlResponse
import fr.free.nrw.commons.media.MediaInterface
import fr.free.nrw.commons.upload.depicts.DepictsInterface
Expand All @@ -20,8 +19,9 @@ import java.util.*
import javax.inject.Inject
import javax.inject.Singleton

const val LARGE_IMAGE_SIZE="640px"
const val THUMB_IMAGE_SIZE="70px"
const val LARGE_IMAGE_SIZE = "640px"
const val THUMB_IMAGE_SIZE = "70px"

/**
* Depicts Client to handle custom calls to Commons Wikibase APIs
*/
Expand Down Expand Up @@ -79,7 +79,11 @@ class DepictsClient @Inject constructor(
}

fun toDepictions(sparqlResponse: Observable<SparqlResponse>): Observable<List<DepictedItem>> {
return sparqlResponse.map { it.results.bindings.joinToString("|", transform = Binding::id) }
return sparqlResponse.map {
it.results.bindings.joinToString("|") { binding ->
binding.id
}
}
.flatMap { getEntities(it).toObservable() }
.map { it.entities()?.values?.map(::DepictedItem) ?: emptyList() }
}
Expand Down

This file was deleted.

Loading