mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-29 05:43:55 +01:00
* Fixes #3389 - Show User profiles * Don't show dummy achievements data - show data only when loaded
This commit is contained in:
parent
7ce80aa804
commit
88b21a678e
20 changed files with 358 additions and 48 deletions
|
|
@ -13,6 +13,7 @@ import android.view.MenuItem;
|
|||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
|
@ -25,6 +26,7 @@ import fr.free.nrw.commons.R;
|
|||
import fr.free.nrw.commons.Utils;
|
||||
import fr.free.nrw.commons.ViewPagerAdapter;
|
||||
import fr.free.nrw.commons.auth.SessionManager;
|
||||
import fr.free.nrw.commons.contributions.ContributionsListFragment;
|
||||
import fr.free.nrw.commons.profile.achievements.AchievementsFragment;
|
||||
import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment;
|
||||
import fr.free.nrw.commons.theme.BaseActivity;
|
||||
|
|
@ -49,9 +51,6 @@ public class ProfileActivity extends BaseActivity {
|
|||
@BindView(R.id.tab_layout)
|
||||
TabLayout tabLayout;
|
||||
|
||||
@BindView(R.id.toolbar)
|
||||
Toolbar toolbar;
|
||||
|
||||
@Inject
|
||||
SessionManager sessionManager;
|
||||
|
||||
|
|
@ -59,15 +58,32 @@ public class ProfileActivity extends BaseActivity {
|
|||
private AchievementsFragment achievementsFragment;
|
||||
private LeaderboardFragment leaderboardFragment;
|
||||
|
||||
public static final String KEY_USERNAME ="username";
|
||||
public static final String KEY_SHOULD_SHOW_CONTRIBUTIONS ="shouldShowContributions";
|
||||
|
||||
String userName;
|
||||
private boolean shouldShowContributions;
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(final Bundle savedInstanceState) {
|
||||
super.onRestoreInstanceState(savedInstanceState);
|
||||
if (savedInstanceState != null) {
|
||||
userName = savedInstanceState.getString(KEY_USERNAME);
|
||||
shouldShowContributions = savedInstanceState.getBoolean(KEY_SHOULD_SHOW_CONTRIBUTIONS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_profile);
|
||||
ButterKnife.bind(this);
|
||||
setSupportActionBar(toolbar);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
setTitle(sessionManager.getUserName());
|
||||
|
||||
userName = getIntent().getStringExtra(KEY_USERNAME);
|
||||
shouldShowContributions = getIntent().getBooleanExtra(KEY_SHOULD_SHOW_CONTRIBUTIONS, false);
|
||||
|
||||
supportFragmentManager = getSupportFragmentManager();
|
||||
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
|
||||
viewPager.setAdapter(viewPagerAdapter);
|
||||
|
|
@ -87,11 +103,15 @@ public class ProfileActivity extends BaseActivity {
|
|||
|
||||
/**
|
||||
* Creates a way to change current activity to AchievementActivity
|
||||
*
|
||||
* @param context
|
||||
*/
|
||||
public static void startYourself(Context context) {
|
||||
public static void startYourself(final Context context, final String userName,
|
||||
final boolean shouldShowContributions) {
|
||||
Intent intent = new Intent(context, ProfileActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
intent.putExtra(KEY_USERNAME, userName);
|
||||
intent.putExtra(KEY_SHOULD_SHOW_CONTRIBUTIONS, shouldShowContributions);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
|
|
@ -102,11 +122,28 @@ public class ProfileActivity extends BaseActivity {
|
|||
List<Fragment> fragmentList = new ArrayList<>();
|
||||
List<String> titleList = new ArrayList<>();
|
||||
achievementsFragment = new AchievementsFragment();
|
||||
Bundle achievementsBundle = new Bundle();
|
||||
achievementsBundle.putString(KEY_USERNAME, userName);
|
||||
achievementsFragment.setArguments(achievementsBundle);
|
||||
fragmentList.add(achievementsFragment);
|
||||
|
||||
titleList.add(getResources().getString(R.string.achievements_tab_title).toUpperCase());
|
||||
leaderboardFragment = new LeaderboardFragment();
|
||||
Bundle leaderBoardBundle = new Bundle();
|
||||
leaderBoardBundle.putString(KEY_USERNAME, userName);
|
||||
leaderboardFragment.setArguments(leaderBoardBundle);
|
||||
|
||||
fragmentList.add(leaderboardFragment);
|
||||
titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase());
|
||||
|
||||
if (shouldShowContributions) {
|
||||
ContributionsListFragment contributionsListFragment = new ContributionsListFragment();
|
||||
Bundle contributionsListBundle = new Bundle();
|
||||
contributionsListBundle.putString(KEY_USERNAME, userName);
|
||||
contributionsListFragment.setArguments(contributionsListBundle);
|
||||
fragmentList.add(contributionsListFragment);
|
||||
titleList.add(getString(R.string.contributions_fragment).toUpperCase());
|
||||
}
|
||||
viewPagerAdapter.setTabData(fragmentList, titleList);
|
||||
viewPagerAdapter.notifyDataSetChanged();
|
||||
|
||||
|
|
@ -191,4 +228,10 @@ public class ProfileActivity extends BaseActivity {
|
|||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull final Bundle outState) {
|
||||
outState.putString(KEY_USERNAME, userName);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
}
|
||||
|
|
@ -15,7 +15,9 @@ import android.widget.LinearLayout;
|
|||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.view.ContextThemeWrapper;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
|
||||
import butterknife.BindView;
|
||||
|
|
@ -28,6 +30,7 @@ import fr.free.nrw.commons.auth.SessionManager;
|
|||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
||||
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
|
||||
import fr.free.nrw.commons.utils.ViewUtil;
|
||||
import fr.free.nrw.commons.profile.ProfileActivity;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
|
@ -114,6 +117,9 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
@BindView(R.id.wikidata_edits)
|
||||
TextView wikidataEditsText;
|
||||
|
||||
@BindView(R.id.tv_achievements_of_user)
|
||||
AppCompatTextView tvAchievementsOfUser;
|
||||
|
||||
@Inject
|
||||
SessionManager sessionManager;
|
||||
|
||||
|
|
@ -128,6 +134,16 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
// menu item for action bar
|
||||
private MenuItem item;
|
||||
|
||||
private String userName;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
userName = getArguments().getString(ProfileActivity.KEY_USERNAME);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method helps in the creation Achievement screen and
|
||||
* dynamically set the size of imageView
|
||||
|
|
@ -157,6 +173,12 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
|
||||
// Set the initial value of WikiData edits to 0
|
||||
wikidataEditsText.setText("0");
|
||||
if(sessionManager.getUserName().equals(userName)){
|
||||
tvAchievementsOfUser.setVisibility(View.GONE);
|
||||
}else{
|
||||
tvAchievementsOfUser.setVisibility(View.VISIBLE);
|
||||
tvAchievementsOfUser.setText(getString(R.string.achievements_of_user,userName));
|
||||
}
|
||||
setWikidataEditCount();
|
||||
setAchievements();
|
||||
return rootView;
|
||||
|
|
@ -182,7 +204,7 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
try{
|
||||
|
||||
compositeDisposable.add(okHttpJsonApiClient
|
||||
.getAchievements(Objects.requireNonNull(sessionManager.getCurrentAccount()).name)
|
||||
.getAchievements(Objects.requireNonNull(userName))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
|
|
@ -225,7 +247,6 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
* in the form of JavaRx Single object<JSONobject>
|
||||
*/
|
||||
private void setWikidataEditCount() {
|
||||
String userName = sessionManager.getUserName();
|
||||
if (StringUtils.isBlank(userName)) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -274,7 +295,7 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
private void setUploadCount(Achievements achievements) {
|
||||
if (checkAccount()) {
|
||||
compositeDisposable.add(okHttpJsonApiClient
|
||||
.getUploadCount(Objects.requireNonNull(sessionManager.getCurrentAccount()).name)
|
||||
.getUploadCount(Objects.requireNonNull(userName))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
|
|
@ -304,7 +325,7 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
if (uploadCount==0){
|
||||
setZeroAchievements();
|
||||
}else {
|
||||
|
||||
imagesUploadedProgressbar.setVisibility(View.VISIBLE);
|
||||
imagesUploadedProgressbar.setProgress
|
||||
(100*uploadCount/levelInfo.getMaxUploadCount());
|
||||
imagesUploadedProgressbar.setProgressTextFormatPattern
|
||||
|
|
@ -314,10 +335,14 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
}
|
||||
|
||||
private void setZeroAchievements() {
|
||||
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity())
|
||||
.setMessage(getString(R.string.no_achievements_yet))
|
||||
.setPositiveButton(getString(R.string.ok), (dialog, which) -> {
|
||||
});
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
|
||||
.setMessage(
|
||||
!Objects.equals(sessionManager.getUserName(), userName) ?
|
||||
getString(R.string.no_achievements_yet, userName) :
|
||||
getString(R.string.you_have_no_achievements_yet)
|
||||
)
|
||||
.setPositiveButton(getString(R.string.ok), (dialog, which) -> {
|
||||
});
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
imagesUploadedProgressbar.setVisibility(View.INVISIBLE);
|
||||
|
|
@ -336,6 +361,7 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
* @param notRevertPercentage
|
||||
*/
|
||||
private void setImageRevertPercentage(int notRevertPercentage){
|
||||
imageRevertsProgressbar.setVisibility(View.VISIBLE);
|
||||
imageRevertsProgressbar.setProgress(notRevertPercentage);
|
||||
String revertPercentage = Integer.toString(notRevertPercentage);
|
||||
imageRevertsProgressbar.setProgressTextFormatPattern(revertPercentage + "%%");
|
||||
|
|
@ -348,6 +374,7 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
* @param achievements
|
||||
*/
|
||||
private void inflateAchievements(Achievements achievements) {
|
||||
imagesUsedByWikiProgressBar.setVisibility(View.VISIBLE);
|
||||
thanksReceived.setText(String.valueOf(achievements.getThanksReceived()));
|
||||
imagesUsedByWikiProgressBar.setProgress
|
||||
(100 * achievements.getUniqueUsedImages() / levelInfo.getMaxUniqueImages());
|
||||
|
|
@ -481,5 +508,4 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import android.widget.Button;
|
|||
import android.widget.ProgressBar;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.Toast;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.MergeAdapter;
|
||||
|
|
@ -27,6 +28,7 @@ import fr.free.nrw.commons.R;
|
|||
import fr.free.nrw.commons.auth.SessionManager;
|
||||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
||||
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
|
||||
import fr.free.nrw.commons.profile.ProfileActivity;
|
||||
import fr.free.nrw.commons.utils.ViewUtil;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
|
|
@ -104,6 +106,16 @@ public class LeaderboardFragment extends CommonsDaggerSupportFragment {
|
|||
*/
|
||||
private boolean scrollToRank;
|
||||
|
||||
private String userName;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable final Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (getArguments() != null) {
|
||||
userName = getArguments().getString(ProfileActivity.KEY_USERNAME);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_leaderboard, container, false);
|
||||
|
|
@ -220,7 +232,7 @@ public class LeaderboardFragment extends CommonsDaggerSupportFragment {
|
|||
if (checkAccount()) {
|
||||
try {
|
||||
compositeDisposable.add(okHttpJsonApiClient
|
||||
.getLeaderboard(Objects.requireNonNull(sessionManager.getCurrentAccount()).name,
|
||||
.getLeaderboard(Objects.requireNonNull(userName),
|
||||
duration, category, null, null)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package fr.free.nrw.commons.profile.leaderboard;
|
||||
|
||||
import static fr.free.nrw.commons.profile.leaderboard.LeaderboardConstants.USER_LINK_PREFIX;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.view.LayoutInflater;
|
||||
|
|
@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.Utils;
|
||||
import fr.free.nrw.commons.profile.ProfileActivity;
|
||||
|
||||
/**
|
||||
* This class extends RecyclerView.Adapter and creates the List section of the leaderboard
|
||||
|
|
@ -81,9 +82,13 @@ public class LeaderboardListAdapter extends PagedListAdapter<LeaderboardList, Le
|
|||
count.setText(getItem(position).getCategoryCount().toString());
|
||||
|
||||
/*
|
||||
Open the user profile in a webview when a username is clicked on leaderboard
|
||||
Now that we have our in app profile-section, lets take the user there
|
||||
*/
|
||||
holder.itemView.setOnClickListener(view -> Utils.handleWebUrl(holder.getContext(), Uri.parse(
|
||||
String.format("%s%s", USER_LINK_PREFIX, getItem(position).getUsername()))));
|
||||
holder.itemView.setOnClickListener(view -> {
|
||||
if (view.getContext() instanceof ProfileActivity) {
|
||||
((Activity) (view.getContext())).finish();
|
||||
}
|
||||
ProfileActivity.startYourself(view.getContext(), getItem(position).getUsername(), true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue