Skip to content

Commit bf4b731

Browse files
committed
Merge branch 'master' into 2.12-release
2 parents a7402f2 + fa7deb3 commit bf4b731

File tree

18 files changed

+304
-138
lines changed

18 files changed

+304
-138
lines changed

app/src/main/java/fr/free/nrw/commons/campaigns/CampaignsPresenter.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package fr.free.nrw.commons.campaigns;
22

3+
import static fr.free.nrw.commons.di.CommonsApplicationModule.IO_THREAD;
4+
import static fr.free.nrw.commons.di.CommonsApplicationModule.MAIN_THREAD;
5+
36
import android.annotation.SuppressLint;
47

8+
import io.reactivex.Scheduler;
9+
import javax.inject.Named;
510
import org.wikipedia.util.DateUtil;
611

712
import java.text.ParseException;
@@ -30,14 +35,18 @@
3035
@Singleton
3136
public class CampaignsPresenter implements BasePresenter<ICampaignsView> {
3237
private final OkHttpJsonApiClient okHttpJsonApiClient;
38+
private final Scheduler mainThreadScheduler;
39+
private final Scheduler ioScheduler;
3340

3441
private ICampaignsView view;
3542
private Disposable disposable;
3643
private Campaign campaign;
3744

3845
@Inject
39-
public CampaignsPresenter(OkHttpJsonApiClient okHttpJsonApiClient) {
46+
public CampaignsPresenter(OkHttpJsonApiClient okHttpJsonApiClient, @Named(IO_THREAD)Scheduler ioScheduler, @Named(MAIN_THREAD)Scheduler mainThreadScheduler) {
4047
this.okHttpJsonApiClient = okHttpJsonApiClient;
48+
this.mainThreadScheduler=mainThreadScheduler;
49+
this.ioScheduler=ioScheduler;
4150
}
4251

4352
@Override
@@ -64,8 +73,8 @@ public void getCampaigns() {
6473
return;
6574
}
6675
Single<CampaignResponseDTO> campaigns = okHttpJsonApiClient.getCampaigns();
67-
campaigns.observeOn(AndroidSchedulers.mainThread())
68-
.subscribeOn(Schedulers.io())
76+
campaigns.observeOn(mainThreadScheduler)
77+
.subscribeOn(ioScheduler)
6978
.subscribeWith(new SingleObserver<CampaignResponseDTO>() {
7079

7180
@Override public void onSubscribe(Disposable d) {
@@ -77,6 +86,7 @@ public void getCampaigns() {
7786
if (campaigns == null || campaigns.isEmpty()) {
7887
Timber.e("The campaigns list is empty");
7988
view.showCampaigns(null);
89+
return;
8090
}
8191
Collections.sort(campaigns, (campaign, t1) -> {
8292
Date date1, date2;

app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package fr.free.nrw.commons.media;
22

3+
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
4+
import static android.content.Context.DOWNLOAD_SERVICE;
5+
import static fr.free.nrw.commons.Utils.handleWebUrl;
6+
37
import android.annotation.SuppressLint;
48
import android.app.DownloadManager;
59
import android.content.Intent;
@@ -14,15 +18,10 @@
1418
import android.view.View;
1519
import android.view.ViewGroup;
1620
import android.widget.Toast;
17-
1821
import androidx.fragment.app.Fragment;
1922
import androidx.fragment.app.FragmentManager;
2023
import androidx.fragment.app.FragmentStatePagerAdapter;
2124
import androidx.viewpager.widget.ViewPager;
22-
23-
import javax.inject.Inject;
24-
import javax.inject.Named;
25-
2625
import butterknife.BindView;
2726
import butterknife.ButterKnife;
2827
import fr.free.nrw.commons.Media;
@@ -42,12 +41,10 @@
4241
import fr.free.nrw.commons.utils.NetworkUtils;
4342
import fr.free.nrw.commons.utils.PermissionUtils;
4443
import fr.free.nrw.commons.utils.ViewUtil;
44+
import javax.inject.Inject;
45+
import javax.inject.Named;
4546
import timber.log.Timber;
4647

47-
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
48-
import static android.content.Context.DOWNLOAD_SERVICE;
49-
import static fr.free.nrw.commons.Utils.handleWebUrl;
50-
5148
public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment implements ViewPager.OnPageChangeListener {
5249

5350
@Inject SessionManager sessionManager;
@@ -256,6 +253,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
256253
menu.findItem(R.id.menu_share_current_image).setEnabled(true).setVisible(true);
257254
menu.findItem(R.id.menu_download_current_image).setEnabled(true).setVisible(true);
258255
menu.findItem(R.id.menu_bookmark_current_image).setEnabled(true).setVisible(true);
256+
menu.findItem(R.id.menu_set_as_wallpaper).setEnabled(true).setVisible(true);
259257

260258
// Initialize bookmark object
261259
bookmark = new Bookmark(
@@ -265,27 +263,39 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
265263
);
266264
updateBookmarkState(menu.findItem(R.id.menu_bookmark_current_image));
267265

268-
if (m instanceof Contribution ) {
266+
if (m instanceof Contribution) {
269267
Contribution c = (Contribution) m;
270268
switch (c.getState()) {
271269
case Contribution.STATE_FAILED:
272-
menu.findItem(R.id.menu_browser_current_image).setEnabled(false).setVisible(false);
273-
menu.findItem(R.id.menu_share_current_image).setEnabled(false).setVisible(false);
274-
menu.findItem(R.id.menu_download_current_image).setEnabled(false).setVisible(false);
275-
menu.findItem(R.id.menu_bookmark_current_image).setEnabled(false).setVisible(false);
276-
break;
277270
case Contribution.STATE_IN_PROGRESS:
278271
case Contribution.STATE_QUEUED:
279-
menu.findItem(R.id.menu_browser_current_image).setEnabled(false).setVisible(false);
280-
menu.findItem(R.id.menu_share_current_image).setEnabled(false).setVisible(false);
281-
menu.findItem(R.id.menu_download_current_image).setEnabled(false).setVisible(false);
282-
menu.findItem(R.id.menu_bookmark_current_image).setEnabled(false).setVisible(false);
272+
menu.findItem(R.id.menu_browser_current_image).setEnabled(false)
273+
.setVisible(false);
274+
menu.findItem(R.id.menu_share_current_image).setEnabled(false)
275+
.setVisible(false);
276+
menu.findItem(R.id.menu_download_current_image).setEnabled(false)
277+
.setVisible(false);
278+
menu.findItem(R.id.menu_bookmark_current_image).setEnabled(false)
279+
.setVisible(false);
280+
menu.findItem(R.id.menu_set_as_wallpaper).setEnabled(false)
281+
.setVisible(false);
283282
break;
284283
case Contribution.STATE_COMPLETED:
285284
// Default set of menu items works fine. Treat same as regular media object
286285
break;
287286
}
288287
}
288+
} else {
289+
menu.findItem(R.id.menu_browser_current_image).setEnabled(false)
290+
.setVisible(false);
291+
menu.findItem(R.id.menu_share_current_image).setEnabled(false)
292+
.setVisible(false);
293+
menu.findItem(R.id.menu_download_current_image).setEnabled(false)
294+
.setVisible(false);
295+
menu.findItem(R.id.menu_bookmark_current_image).setEnabled(false)
296+
.setVisible(false);
297+
menu.findItem(R.id.menu_set_as_wallpaper).setEnabled(false)
298+
.setVisible(false);
289299
}
290300
}
291301
}

app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyMapFragment.java

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package fr.free.nrw.commons.nearby.fragments;
22

3+
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
4+
35
import android.content.Context;
46
import android.graphics.Bitmap;
57
import android.os.Bundle;
68
import android.util.AttributeSet;
79
import android.view.LayoutInflater;
810
import android.view.View;
911
import android.view.ViewGroup;
10-
1112
import androidx.annotation.NonNull;
1213
import androidx.annotation.Nullable;
1314
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
14-
1515
import com.mapbox.mapboxsdk.annotations.Icon;
1616
import com.mapbox.mapboxsdk.annotations.IconFactory;
1717
import com.mapbox.mapboxsdk.annotations.Marker;
@@ -26,13 +26,6 @@
2626
import com.mapbox.mapboxsdk.maps.MapboxMapOptions;
2727
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
2828
import com.mapbox.mapboxsdk.utils.MapFragmentUtils;
29-
30-
import java.util.ArrayList;
31-
import java.util.HashMap;
32-
import java.util.List;
33-
34-
import javax.inject.Inject;
35-
3629
import fr.free.nrw.commons.R;
3730
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
3831
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
@@ -48,10 +41,12 @@
4841
import fr.free.nrw.commons.nearby.presenter.NearbyParentFragmentPresenter;
4942
import fr.free.nrw.commons.utils.LocationUtils;
5043
import fr.free.nrw.commons.utils.UiUtils;
44+
import java.util.ArrayList;
45+
import java.util.HashMap;
46+
import java.util.List;
47+
import javax.inject.Inject;
5148
import timber.log.Timber;
5249

53-
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
54-
5550
/**
5651
* Support Fragment wrapper around a map view.
5752
* <p>
@@ -315,24 +310,31 @@ public void updateMapToTrackPosition(LatLng curLatLng) {
315310
*/
316311
@Override
317312
public void addCurrentLocationMarker(LatLng curLatLng) {
318-
removeCurrentLocationMarker();
319-
Timber.d("Adds current location marker");
320-
321-
Icon icon = IconFactory.getInstance(getContext()).fromResource(R.drawable.current_location_marker);
322-
323-
MarkerOptions currentLocationMarkerOptions = new MarkerOptions()
324-
.position(new com.mapbox.mapboxsdk.geometry.LatLng(curLatLng.getLatitude(), curLatLng.getLongitude()));
325-
currentLocationMarkerOptions.setIcon(icon); // Set custom icon
326-
currentLocationMarker = mapboxMap.addMarker(currentLocationMarkerOptions);
327-
328-
List<com.mapbox.mapboxsdk.geometry.LatLng> circle = UiUtils.createCircleArray(curLatLng.getLatitude(), curLatLng.getLongitude(),
329-
curLatLng.getAccuracy() * 2, 100);
330-
331-
PolygonOptions currentLocationPolygonOptions = new PolygonOptions()
332-
.addAll(circle)
333-
.strokeColor(getResources().getColor(R.color.current_marker_stroke))
334-
.fillColor(getResources().getColor(R.color.current_marker_fill));
335-
currentLocationPolygon = mapboxMap.addPolygon(currentLocationPolygonOptions);
313+
if (null != curLatLng) {
314+
removeCurrentLocationMarker();
315+
Timber.d("Adds current location marker");
316+
317+
Icon icon = IconFactory.getInstance(getContext())
318+
.fromResource(R.drawable.current_location_marker);
319+
320+
MarkerOptions currentLocationMarkerOptions = new MarkerOptions()
321+
.position(new com.mapbox.mapboxsdk.geometry.LatLng(curLatLng.getLatitude(),
322+
curLatLng.getLongitude()));
323+
currentLocationMarkerOptions.setIcon(icon); // Set custom icon
324+
currentLocationMarker = mapboxMap.addMarker(currentLocationMarkerOptions);
325+
326+
List<com.mapbox.mapboxsdk.geometry.LatLng> circle = UiUtils
327+
.createCircleArray(curLatLng.getLatitude(), curLatLng.getLongitude(),
328+
curLatLng.getAccuracy() * 2, 100);
329+
330+
PolygonOptions currentLocationPolygonOptions = new PolygonOptions()
331+
.addAll(circle)
332+
.strokeColor(getResources().getColor(R.color.current_marker_stroke))
333+
.fillColor(getResources().getColor(R.color.current_marker_fill));
334+
currentLocationPolygon = mapboxMap.addPolygon(currentLocationPolygonOptions);
335+
} else {
336+
Timber.d("not adding current location marker..current location is null");
337+
}
336338
}
337339

338340
@Override

app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package fr.free.nrw.commons.upload.mediaDetails;
22

3+
import static fr.free.nrw.commons.utils.ImageUtils.getErrorMessageForResult;
4+
35
import android.content.Context;
46
import android.os.Bundle;
57
import android.text.TextUtils;
@@ -11,29 +13,17 @@
1113
import android.widget.EditText;
1214
import android.widget.LinearLayout;
1315
import android.widget.TextView;
14-
1516
import androidx.annotation.NonNull;
1617
import androidx.annotation.Nullable;
1718
import androidx.appcompat.widget.AppCompatButton;
1819
import androidx.appcompat.widget.AppCompatImageButton;
1920
import androidx.recyclerview.widget.LinearLayoutManager;
2021
import androidx.recyclerview.widget.RecyclerView;
21-
22-
import com.github.chrisbanes.photoview.PhotoView;
23-
import com.jakewharton.rxbinding2.widget.RxTextView;
24-
25-
import org.apache.commons.lang3.StringUtils;
26-
27-
import java.util.ArrayList;
28-
import java.util.List;
29-
import java.util.Locale;
30-
31-
import javax.inject.Inject;
32-
import javax.inject.Named;
33-
3422
import butterknife.BindView;
3523
import butterknife.ButterKnife;
3624
import butterknife.OnClick;
25+
import com.github.chrisbanes.photoview.PhotoView;
26+
import com.jakewharton.rxbinding2.widget.RxTextView;
3727
import fr.free.nrw.commons.R;
3828
import fr.free.nrw.commons.Utils;
3929
import fr.free.nrw.commons.filepicker.UploadableFile;
@@ -52,10 +42,14 @@
5242
import fr.free.nrw.commons.utils.ImageUtils;
5343
import fr.free.nrw.commons.utils.ViewUtil;
5444
import io.reactivex.disposables.Disposable;
45+
import java.util.ArrayList;
46+
import java.util.List;
47+
import java.util.Locale;
48+
import javax.inject.Inject;
49+
import javax.inject.Named;
50+
import org.apache.commons.lang3.StringUtils;
5551
import timber.log.Timber;
5652

57-
import static fr.free.nrw.commons.utils.ImageUtils.getErrorMessageForResult;
58-
5953
public class UploadMediaDetailFragment extends UploadBaseFragment implements
6054
UploadMediaDetailsContract.View {
6155

@@ -179,8 +173,12 @@ private void addEtTitleTouchListener() {
179173
etTitle.setOnTouchListener((v, event) -> {
180174
//2 is for drawable right
181175
float twelveDpInPixels = convertDpToPixel(12, getContext());
182-
if (event.getAction() == MotionEvent.ACTION_UP && etTitle.getCompoundDrawables()[2].getBounds().contains((int)(etTitle.getWidth()-(event.getX()+twelveDpInPixels)),(int)(event.getY()-twelveDpInPixels))){
183-
showInfoAlert(R.string.media_detail_title,R.string.title_info);
176+
if (event.getAction() == MotionEvent.ACTION_UP && etTitle.getCompoundDrawables() != null
177+
&& etTitle.getCompoundDrawables().length > 2 && etTitle
178+
.getCompoundDrawables()[2].getBounds()
179+
.contains((int) (etTitle.getWidth() - (event.getX() + twelveDpInPixels)),
180+
(int) (event.getY() - twelveDpInPixels))) {
181+
showInfoAlert(R.string.media_detail_title, R.string.title_info);
184182
return true;
185183
}
186184
return false;

app/src/main/res/values-ar/strings.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,5 +559,10 @@
559559
<string name="text_copy">تم نسخ النص إلى الحافظة.</string>
560560
<string name="notification_mark_read">تم تعليم الإخطار كمقروء</string>
561561
<string name="some_error">ثمة خطأ ما!</string>
562+
<string name="place_state">حالة المكان:</string>
563+
<string name="place_state_exists">موجود</string>
564+
<string name="place_state_needs_photo">يحتاج صورة</string>
565+
<string name="place_type">نوع المكان:</string>
566+
<string name="nearby_search_hint">جسر، متحف، فندق، إلخ</string>
562567
<string name="you_must_reset_your_passsword">حدث خطأ ما عند الدخول، يجب عليك إعادة تعيين كلمة المرور!!</string>
563568
</resources>

app/src/main/res/values-ast/strings.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,5 +549,10 @@
549549
<string name="text_copy">Testu copiáu al cartafueyu</string>
550550
<string name="notification_mark_read">Notificación marcada como lleida</string>
551551
<string name="some_error">Hebo dalgún error</string>
552+
<string name="place_state">Estáu del llugar:</string>
553+
<string name="place_state_exists">Existe</string>
554+
<string name="place_state_needs_photo">Precisa foto</string>
555+
<string name="place_type">Tipu de llugar:</string>
556+
<string name="nearby_search_hint">Ponte, muséu, hotel etc.</string>
552557
<string name="you_must_reset_your_passsword">¡¡Falló daqué al aniciar sesión, tienes de reaniciar la contraseña!!</string>
553558
</resources>

0 commit comments

Comments
 (0)