Skip to content

[GSoC] Added Click to open user profile for leaderboard #3887

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 15 commits into from
Aug 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@ class CategoryClient @Inject constructor(private val categoryInterface: Category
it.query()?.pages() ?: emptyList()
}
.map {
it.map { page -> page.title().replace(CATEGORY_PREFIX, "") }
it.filter {
page -> page.categoryInfo() == null || !page.categoryInfo().isHidden
}.map { page -> page.title().replace(CATEGORY_PREFIX, "") }
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Single<MwQueryResponse> searchCategories(@Query("gsrsearch") String filter,
* @return
*/
@GET("w/api.php?action=query&format=json&formatversion=2"
+ "&generator=allcategories")
+ "&generator=allcategories&prop=categoryinfo")
Single<MwQueryResponse> searchCategoriesForPrefix(@Query("gacprefix") String prefix,
@Query("gaclimit") int itemLimit, @Query("gacoffset") int offset);

Expand Down
36 changes: 36 additions & 0 deletions app/src/main/java/fr/free/nrw/commons/contributions/ChunkInfo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package fr.free.nrw.commons.contributions

import android.os.Parcel
import android.os.Parcelable
import fr.free.nrw.commons.upload.UploadResult
import kotlinx.android.parcel.Parcelize

data class ChunkInfo(
val uploadResult: UploadResult,
val lastChunkIndex: Int
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readParcelable(UploadResult::class.java.classLoader),
parcel.readInt()
) {
}

override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeParcelable(uploadResult, flags)
parcel.writeInt(lastChunkIndex)
}

override fun describeContents(): Int {
return 0
}

companion object CREATOR : Parcelable.Creator<ChunkInfo> {
override fun createFromParcel(parcel: Parcel): ChunkInfo {
return ChunkInfo(parcel)
}

override fun newArray(size: Int): Array<ChunkInfo?> {
return arrayOfNulls(size)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ data class Contribution constructor(
val decimalCoords: String? = null,
var dateCreatedSource: String? = null,
var wikidataPlace: WikidataPlace? = null,
var chunkInfo: ChunkInfo? = null,
/**
* @return array list of entityids for the depictions
*/
Expand All @@ -36,7 +37,8 @@ data class Contribution constructor(
var mimeType: String? = null,
val localUri: Uri? = null,
var dataLength: Long = 0,
var dateCreated: Date? = null
var dateCreated: Date? = null,
var dateModified: Date? = null
) : Parcelable {

fun completeWith(media: Media): Contribution {
Expand Down Expand Up @@ -68,6 +70,7 @@ data class Contribution constructor(
const val STATE_FAILED = 1
const val STATE_QUEUED = 2
const val STATE_IN_PROGRESS = 3
const val STATE_PAUSED = 4

/**
* Formatting captions to the Wikibase format for sending labels
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import androidx.room.Update;
import io.reactivex.Completable;
import io.reactivex.Single;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@Dao
Expand All @@ -23,7 +25,10 @@ public abstract class ContributionDao {

public Completable save(final Contribution contribution) {
return Completable
.fromAction(() -> saveSynchronous(contribution));
.fromAction(() -> {
contribution.setDateModified(Calendar.getInstance().getTime());
saveSynchronous(contribution);
});
}

@Transaction
Expand Down Expand Up @@ -67,6 +72,9 @@ public Completable delete(final Contribution contribution) {

public Completable update(final Contribution contribution) {
return Completable
.fromAction(() -> updateSynchronous(contribution));
.fromAction(() -> {
contribution.setDateModified(Calendar.getInstance().getTime());
updateSynchronous(contribution);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
ImageButton retryButton;
@BindView(R.id.cancelButton)
ImageButton cancelButton;
@BindView(R.id.pauseResumeButton)
ImageButton pauseResumeButton;


private int position;
Expand Down Expand Up @@ -93,7 +95,11 @@ public void init(final int position, final Contribution contribution) {
case Contribution.STATE_IN_PROGRESS:
stateView.setVisibility(View.GONE);
progressView.setVisibility(View.VISIBLE);
imageOptions.setVisibility(View.GONE);
addToWikipediaButton.setVisibility(View.GONE);
pauseResumeButton.setVisibility(View.VISIBLE);
cancelButton.setVisibility(View.GONE);
retryButton.setVisibility(View.GONE);
imageOptions.setVisibility(View.VISIBLE);
final long total = contribution.getDataLength();
final long transferred = contribution.getTransferred();
if (transferred == 0 || transferred >= total) {
Expand All @@ -102,10 +108,23 @@ public void init(final int position, final Contribution contribution) {
progressView.setProgress((int) (((double) transferred / (double) total) * 100));
}
break;
case Contribution.STATE_PAUSED:
stateView.setVisibility(View.VISIBLE);
stateView.setText(R.string.paused);
setResume();
progressView.setVisibility(View.GONE);
cancelButton.setVisibility(View.GONE);
retryButton.setVisibility(View.GONE);
pauseResumeButton.setVisibility(View.VISIBLE);
imageOptions.setVisibility(View.VISIBLE);
break;
case Contribution.STATE_FAILED:
stateView.setVisibility(View.VISIBLE);
stateView.setText(R.string.contribution_state_failed);
progressView.setVisibility(View.GONE);
cancelButton.setVisibility(View.VISIBLE);
retryButton.setVisibility(View.VISIBLE);
pauseResumeButton.setVisibility(View.GONE);
imageOptions.setVisibility(View.VISIBLE);
break;
}
Expand Down Expand Up @@ -187,4 +206,34 @@ public void imageClicked() {
public void wikipediaButtonClicked() {
callback.addImageToWikipedia(contribution);
}

/**
* Triggers a callback for pause/resume
*/
@OnClick(R.id.pauseResumeButton)
public void onPauseResumeButtonClicked() {
if (pauseResumeButton.getTag().toString().equals("pause")) {
callback.pauseUpload(contribution);
setResume();
} else {
callback.resumeUpload(contribution);
setPaused();
}
}

/**
* Update pause/resume button to show pause state
*/
private void setPaused() {
pauseResumeButton.setImageResource(R.drawable.pause_icon);
pauseResumeButton.setTag(R.string.pause);
}

/**
* Update pause/resume button to show resume state
*/
private void setResume() {
pauseResumeButton.setImageResource(R.drawable.play_icon);
pauseResumeButton.setTag(R.string.resume);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.free.nrw.commons.contributions;

import static fr.free.nrw.commons.contributions.Contribution.STATE_FAILED;
import static fr.free.nrw.commons.contributions.Contribution.STATE_PAUSED;
import static fr.free.nrw.commons.contributions.MainActivity.CONTRIBUTIONS_TAB_POSITION;
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;

Expand Down Expand Up @@ -454,7 +455,7 @@ private void fetchCampaigns() {
@Override
public void retryUpload(Contribution contribution) {
if (NetworkUtils.isInternetConnectionEstablished(getContext())) {
if (contribution.getState() == STATE_FAILED && null != uploadService) {
if (contribution.getState() == STATE_FAILED || contribution.getState() == STATE_PAUSED && null != uploadService) {
uploadService.queue(contribution);
Timber.d("Restarting for %s", contribution.toString());
} else {
Expand All @@ -466,6 +467,15 @@ public void retryUpload(Contribution contribution) {

}

/**
* Pauses the upload
* @param contribution
*/
@Override
public void pauseUpload(Contribution contribution) {
uploadService.pauseUpload(contribution);
}

/**
* Replace whatever is in the current contributionsFragmentContainer view with
* mediaDetailPagerFragment, and preserve previous state in back stack. Called when user selects a
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,9 @@ public interface Callback {
void openMediaDetail(int contribution);

void addImageToWikipedia(Contribution contribution);

void pauseUpload(Contribution contribution);

void resumeUpload(Contribution contribution);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import javax.inject.Inject;
import javax.inject.Named;
import org.wikipedia.dataclient.WikiSite;
import timber.log.Timber;

/**
* Created by root on 01.06.2018.
Expand Down Expand Up @@ -90,6 +91,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
private final int SPAN_COUNT_PORTRAIT = 1;


@Override
public View onCreateView(
final LayoutInflater inflater, @Nullable final ViewGroup container,
@Nullable final Bundle savedInstanceState) {
Expand Down Expand Up @@ -192,6 +194,7 @@ private void animateFAB(final boolean isFabOpen) {
/**
* Shows welcome message if user has no contributions yet i.e. new user.
*/
@Override
public void showWelcomeTip(final boolean shouldShow) {
noContributionsYet.setVisibility(shouldShow ? VISIBLE : GONE);
}
Expand All @@ -201,10 +204,12 @@ public void showWelcomeTip(final boolean shouldShow) {
*
* @param shouldShow True when contributions list should be hidden.
*/
@Override
public void showProgress(final boolean shouldShow) {
progressBar.setVisibility(shouldShow ? VISIBLE : GONE);
}

@Override
public void showNoContributionsUI(final boolean shouldShow) {
noContributionsYet.setVisibility(shouldShow ? VISIBLE : GONE);
}
Expand Down Expand Up @@ -263,6 +268,24 @@ public void addImageToWikipedia(Contribution contribution) {
});
}

/**
* Pauses the current upload
* @param contribution
*/
@Override
public void pauseUpload(Contribution contribution) {
callback.pauseUpload(contribution);
}

/**
* Resumes the current upload
* @param contribution
*/
@Override
public void resumeUpload(Contribution contribution) {
callback.retryUpload(contribution);
}

/**
* Display confirmation dialog with instructions when the user tries to add image to wikipedia
*
Expand Down Expand Up @@ -311,6 +334,8 @@ public interface Callback {

void retryUpload(Contribution contribution);

void pauseUpload(Contribution contribution);

void showDetail(int position);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import androidx.paging.DataSource.Factory;
import io.reactivex.Completable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.inject.Inject;
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import fr.free.nrw.commons.contributions.ContributionDao
* The database for accessing the respective DAOs
*
*/
@Database(entities = [Contribution::class], version = 4, exportSchema = false)
@Database(entities = [Contribution::class], version = 5, exportSchema = false)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun contributionDao(): ContributionDao
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/java/fr/free/nrw/commons/db/Converters.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.contributions.ChunkInfo;
import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.upload.WikidataPlace;
Expand Down Expand Up @@ -82,6 +83,16 @@ public static WikidataPlace stringToWikidataPlace(String wikidataPlace) {
return readObjectFromString(wikidataPlace, WikidataPlace.class);
}

@TypeConverter
public static String chunkInfoToString(ChunkInfo chunkInfo) {
return writeObjectToString(chunkInfo);
}

@TypeConverter
public static ChunkInfo stringToChunkInfo(String chunkInfo) {
return readObjectFromString(chunkInfo, ChunkInfo.class);
}

@TypeConverter
public static String depictionListToString(List<DepictedItem> depictedItems) {
return writeObjectToString(depictedItems);
Expand Down
Loading