Skip to content

Commit 3ded10a

Browse files
macgillsashishkumar468
authored andcommitted
commons-app#3468 Switch from RvRenderer to AdapterDelegates (commons-app#3750)
* commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace SearchDepictionsRenderer * commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace UploadCategoryDepictionsRenderer * commons-app#3468 Switch from RvRenderer to AdapterDelegates - update BaseAdapter to be easier to use * commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace SearchImagesRenderer * commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace SearchCategoriesRenderer * commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace NotificationRenderer * commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace UploadDepictsRenderer * commons-app#3468 Switch from RvRenderer to AdapterDelegates - replace PlaceRenderer * commons-app#3468 fix constant import * commons-app#3468 Switch from RvRenderer to AdapterDelegates - resolve id conflict
1 parent 9567533 commit 3ded10a

36 files changed

+413
-1182
lines changed

app/build.gradle

+11-9
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ apply from: 'quality.gradle'
1111

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

14-
if(isRunningOnTravisAndIsNotPRBuild) {
14+
if (isRunningOnTravisAndIsNotPRBuild) {
1515
apply plugin: 'com.github.triplet.play'
1616
}
1717

@@ -35,16 +35,16 @@ dependencies {
3535
// UI
3636
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
3737
implementation 'com.github.chrisbanes:PhotoView:2.0.0'
38-
implementation 'com.github.pedrovgs:renderers:3.3.3'
3938
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.6.2'
4039
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v8:0.11.0'
4140
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-scalebar-v9:0.4.0'
4241
implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0'
4342
implementation 'com.dinuscxj:circleprogressbar:1.1.1'
4443
implementation 'com.karumi:dexter:5.0.0'
4544
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
46-
4745
kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
46+
implementation "com.hannesdorfmann:adapterdelegates4-kotlin-dsl-layoutcontainer:$ADAPTER_DELEGATES_VERSION"
47+
implementation "com.hannesdorfmann:adapterdelegates4-pagination:$ADAPTER_DELEGATES_VERSION"
4848

4949
// Logging
5050
implementation 'ch.acra:acra-dialog:5.3.0'
@@ -104,6 +104,7 @@ dependencies {
104104
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
105105
implementation "androidx.exifinterface:exifinterface:1.0.0"
106106
implementation "androidx.core:core-ktx:$CORE_KTX_VERSION"
107+
implementation "androidx.multidex:multidex:2.0.1"
107108

108109
//swipe_layout
109110
implementation 'com.daimajia.swipelayout:library:1.2.0@aar'
@@ -112,7 +113,8 @@ dependencies {
112113
implementation "androidx.room:room-runtime:$ROOM_VERSION"
113114
implementation "androidx.room:room-ktx:$ROOM_VERSION"
114115
implementation "androidx.room:room-rxjava2:$ROOM_VERSION"
115-
kapt "androidx.room:room-compiler:$ROOM_VERSION" // For Kotlin use kapt instead of annotationProcessor
116+
kapt "androidx.room:room-compiler:$ROOM_VERSION"
117+
// For Kotlin use kapt instead of annotationProcessor
116118
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
117119
testImplementation "androidx.arch.core:core-testing:2.1.0"
118120

@@ -145,7 +147,7 @@ android {
145147
testOptions {
146148
execution 'ANDROIDX_TEST_ORCHESTRATOR'
147149
}
148-
150+
multiDexEnabled true
149151
vectorDrawables.useSupportLibrary = true
150152
}
151153

@@ -172,7 +174,7 @@ android {
172174
test.resources.srcDirs += 'src/main/resoures'
173175
}
174176

175-
signingConfigs {
177+
signingConfigs {
176178
release
177179
}
178180

@@ -181,7 +183,7 @@ android {
181183
minifyEnabled true
182184
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
183185
testProguardFile 'test-proguard-rules.txt'
184-
if(isRunningOnTravisAndIsNotPRBuild) {
186+
if (isRunningOnTravisAndIsNotPRBuild) {
185187
signingConfig signingConfigs.release
186188
}
187189
}
@@ -210,7 +212,7 @@ android {
210212
productFlavors {
211213
prod {
212214

213-
applicationId 'fr.free.nrw.commons'
215+
applicationId 'fr.free.nrw.commons'
214216

215217
buildConfigField "String", "WIKIMEDIA_API_POTD", "\"https://commons.wikimedia.org/w/api.php?action=featuredfeed&feed=potd&feedformat=rss&language=en\""
216218
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\""
@@ -291,7 +293,7 @@ android {
291293
buildToolsVersion buildToolsVersion
292294
}
293295

294-
if(isRunningOnTravisAndIsNotPRBuild) {
296+
if (isRunningOnTravisAndIsNotPRBuild) {
295297
play {
296298
track = "alpha"
297299
userFraction = 1

app/src/main/java/fr/free/nrw/commons/CommonsApplication.java

-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import static org.acra.ReportField.USER_COMMENT;
1010

1111
import android.annotation.SuppressLint;
12-
import android.app.Application;
1312
import android.app.NotificationChannel;
1413
import android.app.NotificationManager;
1514
import android.content.Context;
@@ -25,7 +24,6 @@
2524
import com.mapbox.mapboxsdk.Mapbox;
2625
import com.squareup.leakcanary.LeakCanary;
2726
import com.squareup.leakcanary.RefWatcher;
28-
2927
import fr.free.nrw.commons.auth.SessionManager;
3028
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
3129
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao;

app/src/main/java/fr/free/nrw/commons/category/CategoryClient.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.wikipedia.dataclient.mwapi.MwQueryResponse
55
import javax.inject.Inject
66
import javax.inject.Singleton
77

8+
const val CATEGORY_PREFIX = "Category:"
89
/**
910
* Category Client to handle custom calls to Commons MediaWiki APIs
1011
*/
@@ -72,7 +73,7 @@ class CategoryClient @Inject constructor(private val categoryInterface: Category
7273
return responseObservable
7374
.map { it.query()?.pages() ?: emptyList() }
7475
.map {
75-
it.map { page -> page.title().replace("Category:", "") }
76+
it.map { page -> page.title().replace(CATEGORY_PREFIX, "") }
7677
}
7778
}
7879

app/src/main/java/fr/free/nrw/commons/category/SubCategoryListFragment.java

+14-15
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import static android.view.View.GONE;
55
import static android.view.View.VISIBLE;
6+
import static fr.free.nrw.commons.category.CategoryClientKt.CATEGORY_PREFIX;
67

78
import android.content.Intent;
89
import android.content.res.Configuration;
@@ -17,17 +18,16 @@
1718
import androidx.recyclerview.widget.RecyclerView;
1819
import butterknife.BindView;
1920
import butterknife.ButterKnife;
20-
import com.pedrogomez.renderers.RVRendererAdapter;
2121
import fr.free.nrw.commons.R;
2222
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
23-
import fr.free.nrw.commons.explore.categories.SearchCategoriesAdapterFactory;
23+
import fr.free.nrw.commons.explore.categories.SearchCategoriesAdapter;
2424
import fr.free.nrw.commons.utils.NetworkUtils;
2525
import fr.free.nrw.commons.utils.ViewUtil;
2626
import io.reactivex.android.schedulers.AndroidSchedulers;
2727
import io.reactivex.schedulers.Schedulers;
28-
import java.util.ArrayList;
2928
import java.util.List;
3029
import javax.inject.Inject;
30+
import kotlin.Unit;
3131
import timber.log.Timber;
3232

3333
/**
@@ -46,16 +46,9 @@ public class SubCategoryListFragment extends CommonsDaggerSupportFragment {
4646
private String categoryName = null;
4747
@Inject CategoryClient categoryClient;
4848

49-
private RVRendererAdapter<String> categoriesAdapter;
49+
private SearchCategoriesAdapter categoriesAdapter;
5050
private boolean isParentCategory = true;
5151

52-
private final SearchCategoriesAdapterFactory adapterFactory = new SearchCategoriesAdapterFactory(item -> {
53-
// Open SubCategory Details page
54-
Intent intent = new Intent(getContext(), CategoryDetailsActivity.class);
55-
intent.putExtra("categoryName", item);
56-
getContext().startActivity(intent);
57-
58-
});
5952

6053
@Override
6154
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
@@ -70,8 +63,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle sav
7063
else{
7164
categoriesRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
7265
}
73-
ArrayList<String> items = new ArrayList<>();
74-
categoriesAdapter = adapterFactory.create(items);
66+
categoriesAdapter = new SearchCategoriesAdapter(item->{
67+
Intent intent = new Intent(getContext(), CategoryDetailsActivity.class);
68+
intent.putExtra("categoryName", item);
69+
getContext().startActivity(intent);
70+
return Unit.INSTANCE;
71+
});
7572
categoriesRecyclerView.setAdapter(categoriesAdapter);
7673
return rootView;
7774
}
@@ -88,12 +85,14 @@ public void initSubCategoryList() {
8885
}
8986
progressBar.setVisibility(View.VISIBLE);
9087
if (isParentCategory) {
91-
compositeDisposable.add(categoryClient.getParentCategoryList("Category:"+categoryName)
88+
compositeDisposable.add(categoryClient.getParentCategoryList(
89+
CATEGORY_PREFIX +categoryName)
9290
.subscribeOn(Schedulers.io())
9391
.observeOn(AndroidSchedulers.mainThread())
9492
.subscribe(this::handleSuccess, this::handleError));
9593
} else {
96-
compositeDisposable.add(categoryClient.getSubCategoryList("Category:"+categoryName)
94+
compositeDisposable.add(categoryClient.getSubCategoryList(
95+
CATEGORY_PREFIX +categoryName)
9796
.subscribeOn(Schedulers.io())
9897
.observeOn(AndroidSchedulers.mainThread())
9998
.subscribe(this::handleSuccess, this::handleError));

app/src/main/java/fr/free/nrw/commons/depictions/Media/DepictedImagesPresenter.java

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class DepictedImagesPresenter implements DepictedImagesContract.UserActio
4040
* Ex: Q9394
4141
*/
4242
private List<Media> queryList = new ArrayList<>();
43+
private String entityId;
4344

4445
@Inject
4546
public DepictedImagesPresenter(@Named("default_preferences") JsonKvStore depictionKvStore, DepictsClient depictsClient, MediaClient mediaClient, @Named(IO_THREAD) Scheduler ioScheduler,
@@ -67,6 +68,7 @@ public void onDetachView() {
6768
@SuppressLint("CheckResult")
6869
@Override
6970
public void initList(String entityId) {
71+
this.entityId = entityId;
7072
view.setLoadingStatus(true);
7173
view.progressBarVisible(true);
7274
view.setIsLastPage(false);

app/src/main/java/fr/free/nrw/commons/depictions/subClass/SubDepictionListFragment.java

+9-26
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,18 @@
1717
import androidx.recyclerview.widget.RecyclerView;
1818
import butterknife.BindView;
1919
import butterknife.ButterKnife;
20-
import com.pedrogomez.renderers.RVRendererAdapter;
2120
import dagger.android.support.DaggerFragment;
2221
import fr.free.nrw.commons.R;
2322
import fr.free.nrw.commons.depictions.WikidataItemDetailsActivity;
24-
import fr.free.nrw.commons.explore.depictions.SearchDepictionsAdapterFactory;
25-
import fr.free.nrw.commons.explore.depictions.SearchDepictionsRenderer;
23+
import fr.free.nrw.commons.explore.depictions.DepictionAdapter;
2624
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
2725
import fr.free.nrw.commons.utils.NetworkUtils;
2826
import fr.free.nrw.commons.utils.ViewUtil;
2927
import java.io.IOException;
3028
import java.util.List;
3129
import java.util.Locale;
3230
import javax.inject.Inject;
31+
import kotlin.Unit;
3332

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

6261
@Inject SubDepictionListPresenter presenter;
6362

64-
private final SearchDepictionsAdapterFactory adapterFactory = new SearchDepictionsAdapterFactory(new SearchDepictionsRenderer.DepictCallback() {
65-
@Override
66-
public void depictsClicked(DepictedItem item) {
67-
// Open SubDepiction Details page
68-
getActivity().finish();
69-
WikidataItemDetailsActivity.startYourself(getContext(), item);
70-
}
71-
});
72-
73-
@Override
74-
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
75-
super.onViewCreated(view, savedInstanceState);
76-
}
77-
7863
private void initViews() {
7964
if (getArguments() != null) {
8065
depictsName = getArguments().getString("wikidataItemName");
@@ -115,7 +100,12 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
115100
}
116101
initViews();
117102
depictionsRecyclerView.setLayoutManager(layoutManager);
118-
depictionsAdapter = adapterFactory.create();
103+
depictionsAdapter = new DepictionAdapter(depictedItem -> {
104+
// Open SubDepiction Details page
105+
getActivity().finish();
106+
WikidataItemDetailsActivity.startYourself(getContext(), depictedItem);
107+
return Unit.INSTANCE;
108+
});
119109
depictionsRecyclerView.setAdapter(depictionsAdapter);
120110
return v;
121111
}
@@ -130,14 +120,7 @@ public void onSuccess(List<DepictedItem> mediaList) {
130120
progressBar.setVisibility(View.GONE);
131121
depictionNotFound.setVisibility(GONE);
132122
bottomProgressBar.setVisibility(GONE);
133-
int itemCount=layoutManager.getItemCount();
134123
depictionsAdapter.addAll(mediaList);
135-
depictionsRecyclerView.getRecycledViewPool().clear();
136-
if(itemCount!=0) {
137-
depictionsAdapter.notifyItemRangeInserted(itemCount, mediaList.size()-1);
138-
}else{
139-
depictionsAdapter.notifyDataSetChanged();
140-
}
141124
}
142125

143126
@Override

app/src/main/java/fr/free/nrw/commons/depictions/subClass/models/SparqlResponses.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ data class Binding(
99
val itemLabel: SparqInfo,
1010
val itemDescription: SparqInfo? = null
1111
) {
12-
val id: String by lazy { item.value.substringAfterLast("/") }
12+
val id: String
13+
get() = item.value.substringAfterLast("/")
1314
}
1415

1516
data class SparqInfo(val type: String, val value: String)

app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java

-4
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@
1010
import dagger.android.support.AndroidSupportInjectionModule;
1111
import fr.free.nrw.commons.CommonsApplication;
1212
import fr.free.nrw.commons.auth.LoginActivity;
13-
import fr.free.nrw.commons.contributions.ContributionViewHolder;
1413
import fr.free.nrw.commons.contributions.ContributionsModule;
1514
import fr.free.nrw.commons.depictions.DepictionModule;
1615
import fr.free.nrw.commons.explore.SearchModule;
17-
import fr.free.nrw.commons.nearby.PlaceRenderer;
1816
import fr.free.nrw.commons.review.ReviewController;
1917
import fr.free.nrw.commons.settings.SettingsFragment;
2018
import fr.free.nrw.commons.upload.FileProcessor;
@@ -49,8 +47,6 @@ public interface CommonsApplicationComponent extends AndroidInjector<Application
4947
@Override
5048
void inject(ApplicationlessInjection instance);
5149

52-
void inject(PlaceRenderer placeRenderer);
53-
5450
void inject(FileProcessor fileProcessor);
5551

5652
void inject(PicOfDayAppWidget picOfDayAppWidget);

app/src/main/java/fr/free/nrw/commons/di/FragmentBuilderModule.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ public abstract class FragmentBuilderModule {
7272
@ContributesAndroidInjector
7373
abstract ContributionsFragment bindContributionsFragment();
7474

75-
@ContributesAndroidInjector
75+
@ContributesAndroidInjector(modules = NearbyParentFragmentModule.class)
7676
abstract NearbyParentFragment bindNearbyParentFragment();
7777

7878
@ContributesAndroidInjector
7979
abstract BookmarkPicturesFragment bindBookmarkPictureListFragment();
8080

81-
@ContributesAndroidInjector
81+
@ContributesAndroidInjector(modules = BookmarkLocationsFragmentModule.class)
8282
abstract BookmarkLocationsFragment bindBookmarkLocationListFragment();
8383

8484
@ContributesAndroidInjector

0 commit comments

Comments
 (0)