diff --git a/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java b/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java index 6fe317c0a..0faa9eae0 100644 --- a/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java +++ b/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java @@ -2,6 +2,7 @@ package fr.free.nrw.commons; import androidx.annotation.NonNull; +import okhttp3.logging.HttpLoggingInterceptor.Level; import org.wikipedia.dataclient.SharedPreferenceCookieManager; import org.wikipedia.dataclient.okhttp.HttpStatusException; @@ -40,7 +41,7 @@ public final class OkHttpConnectionFactory { private static HttpLoggingInterceptor getLoggingInterceptor() { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor() - .setLevel(HttpLoggingInterceptor.Level.BASIC); + .setLevel(BuildConfig.DEBUG ? Level.BODY: Level.BASIC); httpLoggingInterceptor.redactHeader("Authorization"); httpLoggingInterceptor.redactHeader("Cookie"); diff --git a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java index af9111dc5..d6e6109c6 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java @@ -71,7 +71,7 @@ public class NetworkingModule { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(message -> { Timber.tag("OkHttp").v(message); }); - httpLoggingInterceptor.level(BuildConfig.DEBUG ? Level.BODY: HttpLoggingInterceptor.Level.BASIC); + httpLoggingInterceptor.level(BuildConfig.DEBUG ? Level.BODY: Level.BASIC); return httpLoggingInterceptor; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/Title.kt b/app/src/main/java/fr/free/nrw/commons/upload/Title.kt deleted file mode 100644 index 2dc9b319b..000000000 --- a/app/src/main/java/fr/free/nrw/commons/upload/Title.kt +++ /dev/null @@ -1,29 +0,0 @@ -package fr.free.nrw.commons.upload - -import android.text.TextUtils - -class Title { - private var titleText: String? = null - var isSet = false - override fun toString(): String { - if (titleText == null) { - return "" - } else { - return titleText!! - } - } - - fun setTitleText(titleText: String?) { - this.titleText=titleText?.trim() - if (!TextUtils.isEmpty(titleText)) { - isSet = true - } - } - - val isEmpty: Boolean - get() = titleText == null || titleText!!.isEmpty() - - fun getTitleText(): String? { - return titleText - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java index e1324cbd3..1a95c0e94 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java @@ -62,7 +62,7 @@ public class UploadMediaDetailAdapter extends RecyclerView.Adapter eventListener.onEvent(value.length() != 0)) ); + value -> { + if (position == 0) { + eventListener.onPrimaryCaptionTextChange(value.length() != 0); + } + })); if (position == 0) { captionItemEditText.setCompoundDrawablesWithIntrinsicBounds(null, null, getInfoIcon(), @@ -231,7 +235,7 @@ public class UploadMediaDetailAdapter extends RecyclerView.Adapter selectedDepictions) { @@ -232,7 +230,6 @@ public class UploadModel { private final String mimeType; private final String source; private ImageCoordinates gpsCoords; - private Title title; private List uploadMediaDetails; private final Place place; private final long createdTimestamp; @@ -246,8 +243,6 @@ public class UploadModel { final String createdTimestampSource) { this.originalContentUri = originalContentUri; this.createdTimestampSource = createdTimestampSource; - title = new Title(); - uploadMediaDetails = Collections.singletonList(new UploadMediaDetail()); uploadMediaDetails = new ArrayList<>(Arrays.asList(new UploadMediaDetail())); this.place = place; this.mediaUri = mediaUri; @@ -278,10 +273,6 @@ public class UploadModel { return createdTimestamp; } - public Title getTitle() { - return title; - } - public Uri getMediaUri() { return mediaUri; } @@ -298,11 +289,6 @@ public class UploadModel { return place; } - public void setTitle(final Title title) { - this.title = title; - } - - public void setMediaDetails(final List uploadMediaDetails) { this.uploadMediaDetails = uploadMediaDetails; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.java index 7c5f253e7..aaa52a85c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.java @@ -1,15 +1,9 @@ package fr.free.nrw.commons.upload.categories; +import static fr.free.nrw.commons.di.CommonsApplicationModule.IO_THREAD; +import static fr.free.nrw.commons.di.CommonsApplicationModule.MAIN_THREAD; + import android.text.TextUtils; - -import java.lang.reflect.Proxy; -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - import fr.free.nrw.commons.R; import fr.free.nrw.commons.category.CategoryItem; import fr.free.nrw.commons.repository.UploadRepository; @@ -18,11 +12,14 @@ import io.reactivex.Observable; import io.reactivex.Scheduler; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; +import java.lang.reflect.Proxy; +import java.util.ArrayList; +import java.util.List; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; import timber.log.Timber; -import static fr.free.nrw.commons.di.CommonsApplicationModule.IO_THREAD; -import static fr.free.nrw.commons.di.CommonsApplicationModule.MAIN_THREAD; - /** * The presenter class for UploadCategoriesFragment */ @@ -86,9 +83,10 @@ public class CategoriesPresenter implements CategoriesContract.UserActionListene ) .filter(categoryItem -> !repository.containsYear(categoryItem.getName())) .distinct(); - if(!TextUtils.isEmpty(query)) { - distinctCategoriesObservable=distinctCategoriesObservable.sorted(repository.sortBySimilarity(query)); - } + + if(!TextUtils.isEmpty(query)) { + distinctCategoriesObservable=distinctCategoriesObservable.sorted(repository.sortBySimilarity(query)); + } Disposable searchCategoriesDisposable = distinctCategoriesObservable .observeOn(mainThreadScheduler) .subscribe( @@ -114,8 +112,9 @@ public class CategoriesPresenter implements CategoriesContract.UserActionListene private List getImageTitleList() { List titleList = new ArrayList<>(); for (UploadItem item : repository.getUploads()) { - if (item.getTitle().isSet()) { - titleList.add(item.getTitle().toString()); + final String captionText = item.getUploadMediaDetails().get(0).getCaptionText(); + if (!TextUtils.isEmpty(captionText)) { + titleList.add(captionText); } } return titleList; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java index 4ab51a3b6..13f86b7d1 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java @@ -3,15 +3,10 @@ package fr.free.nrw.commons.upload.mediaDetails; import static fr.free.nrw.commons.utils.ImageUtils.getErrorMessageForResult; import android.annotation.SuppressLint; -import android.content.Context; import android.os.Bundle; -import android.text.TextUtils; -import android.util.DisplayMetrics; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; @@ -24,7 +19,6 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import com.github.chrisbanes.photoview.PhotoView; -import com.jakewharton.rxbinding2.widget.RxTextView; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.filepicker.UploadableFile; @@ -34,7 +28,6 @@ import fr.free.nrw.commons.nearby.Place; import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.upload.ImageCoordinates; import fr.free.nrw.commons.upload.SimilarImageDialogFragment; -import fr.free.nrw.commons.upload.Title; import fr.free.nrw.commons.upload.UploadBaseFragment; import fr.free.nrw.commons.upload.UploadMediaDetail; import fr.free.nrw.commons.upload.UploadMediaDetailAdapter; @@ -43,7 +36,6 @@ import fr.free.nrw.commons.upload.UploadModel.UploadItem; import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.ViewUtil; -import io.reactivex.disposables.Disposable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -66,8 +58,6 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements AppCompatImageButton ibExpandCollapse; @BindView(R.id.ll_container_media_detail) LinearLayout llContainerMediaDetail; - @BindView(R.id.et_title) - EditText etTitle; @BindView(R.id.rv_descriptions) RecyclerView rvDescriptions; @BindView(R.id.backgroundImage) @@ -94,7 +84,6 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements private String source; private Place place; - private Title title; private boolean isExpanded = true; private UploadMediaDetailFragmentCallback callback; @@ -131,24 +120,8 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements private void init() { tvTitle.setText(getString(R.string.step_count, callback.getIndexInViewFlipper(this) + 1, callback.getTotalNumberOfSteps())); - title = new Title(); initRecyclerView(); initPresenter(); - Disposable disposable = RxTextView.textChanges(etTitle) - .subscribe(text -> { - if (!TextUtils.isEmpty(text)) { - btnNext.setEnabled(true); - btnNext.setClickable(true); - btnNext.setAlpha(1.0f); - title.setTitleText(text.toString()); - uploadItem.setTitle(title); - } else { - btnNext.setAlpha(0.5f); - btnNext.setEnabled(false); - btnNext.setClickable(false); - } - }); - compositeDisposable.add(disposable); presenter.receiveImage(uploadableFile, source, place); if (callback.getIndexInViewFlipper(this) == 0) { @@ -168,36 +141,6 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements attachImageViewScaleChangeListener(); - addEtTitleTouchListener(); - } - - /** - * Handles the drawable click listener for Edit Text - */ - private void addEtTitleTouchListener() { - etTitle.setOnTouchListener((v, event) -> { - //2 is for drawable right - float twelveDpInPixels = convertDpToPixel(12, getContext()); - if (event.getAction() == MotionEvent.ACTION_UP && etTitle.getCompoundDrawables() != null - && etTitle.getCompoundDrawables().length > 2 && etTitle - .getCompoundDrawables()[2].getBounds() - .contains((int) (etTitle.getWidth() - (event.getX() + twelveDpInPixels)), - (int) (event.getY() - twelveDpInPixels))) { - showInfoAlert(R.string.media_detail_title, R.string.title_info); - return true; - } - return false; - }); - } - - /** - * converts dp to pixel - * @param dp - * @param context - * @return - */ - private float convertDpToPixel(float dp, Context context) { - return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); } /** @@ -224,7 +167,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements private void initRecyclerView() { uploadMediaDetailAdapter = new UploadMediaDetailAdapter(defaultKvStore.getString(Prefs.KEY_LANGUAGE_VALUE, "")); uploadMediaDetailAdapter.setCallback(this::showInfoAlert); - uploadMediaDetailAdapter.setEventListener(this::onEvent); + uploadMediaDetailAdapter.setEventListener(this); rvDescriptions.setLayoutManager(new LinearLayoutManager(getContext())); rvDescriptions.setAdapter(uploadMediaDetailAdapter); } @@ -301,8 +244,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements getString(R.string.upload_nearby_place_found_description), place.getName()), () -> { - etTitle.setText(place.getName()); - descriptions = new ArrayList<>(Arrays.asList(new UploadMediaDetail())); + descriptions = new ArrayList<>(Arrays.asList(new UploadMediaDetail(place))); setDescriptionsInAdapter(descriptions); }, () -> { @@ -368,8 +310,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements } @Override - public void setTitleAndDescription(String title, List uploadMediaDetails) { - etTitle.setText(title); + public void setCaptionsAndDescriptions(List uploadMediaDetails) { setDescriptionsInAdapter(uploadMediaDetails); } @@ -405,10 +346,10 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements } @Override - public void onEvent(Boolean data) { - btnNext.setEnabled(data); - btnNext.setClickable(data); - btnNext.setAlpha(data ? 1.0f: 0.5f); + public void onPrimaryCaptionTextChange(boolean isNotEmpty) { + btnNext.setEnabled(isNotEmpty); + btnNext.setClickable(isNotEmpty); + btnNext.setAlpha(isNotEmpty ? 1.0f: 0.5f); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailsContract.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailsContract.java index 21a29e43f..d8d4bdec0 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailsContract.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailsContract.java @@ -36,7 +36,7 @@ public interface UploadMediaDetailsContract { void showMapWithImageCoordinates(boolean shouldShow); - void setTitleAndDescription(String title, List uploadMediaDetails); + void setCaptionsAndDescriptions(List uploadMediaDetails); } interface UserActionListener extends BasePresenter { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java index 12d106d48..d21c2e9c8 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java @@ -151,7 +151,7 @@ public class UploadMediaPresenter implements UserActionListener, SimilarImageInt public void fetchPreviousTitleAndDescription(int indexInViewFlipper) { UploadItem previousUploadItem = repository.getPreviousUploadItem(indexInViewFlipper); if (null != previousUploadItem) { - view.setTitleAndDescription(previousUploadItem.getTitle().getTitleText(), previousUploadItem.getUploadMediaDetails()); + view.setCaptionsAndDescriptions(previousUploadItem.getUploadMediaDetails()); } else { view.showMessage(R.string.previous_image_title_description_not_found, R.color.color_error); } diff --git a/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml b/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml index b79fc9d14..c3b9ba702 100644 --- a/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml +++ b/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml @@ -82,22 +82,6 @@ android:layout_marginTop="@dimen/standard_gap" android:orientation="vertical"> - - - - - diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt index 3e5f8a36a..adc48e919 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt @@ -1,6 +1,5 @@ package fr.free.nrw.commons.upload -import androidx.recyclerview.widget.RecyclerView import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.whenever import fr.free.nrw.commons.filepicker.UploadableFile @@ -14,11 +13,12 @@ import io.reactivex.Single import io.reactivex.schedulers.TestScheduler import org.junit.Before import org.junit.Test -import org.mockito.* import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers.eq import org.mockito.Mock +import org.mockito.Mockito import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations import java.util.* @@ -43,9 +43,6 @@ class UploadMediaPresenterTest { @Mock private lateinit var uploadItem: UploadModel.UploadItem - @Mock - private lateinit var title: Title - @Mock private lateinit var uploadMediaDetails: List @@ -171,11 +168,9 @@ class UploadMediaPresenterTest { whenever(repository.getPreviousUploadItem(ArgumentMatchers.anyInt())) .thenReturn(uploadItem) whenever(uploadItem.uploadMediaDetails).thenReturn(uploadMediaDetails) - whenever(uploadItem.title).thenReturn(title) - whenever(title.getTitleText()).thenReturn(ArgumentMatchers.anyString()) uploadMediaPresenter.fetchPreviousTitleAndDescription(0) - verify(view).setTitleAndDescription(ArgumentMatchers.anyString(), ArgumentMatchers.any()) + verify(view).setCaptionsAndDescriptions(ArgumentMatchers.any()) } /**