mirror of
				https://github.com/commons-app/apps-android-commons.git
				synced 2025-10-31 14:53:59 +01:00 
			
		
		
		
	Convert UserDetailAdapter to kotlin
This commit is contained in:
		
							parent
							
								
									351942ecd9
								
							
						
					
					
						commit
						5b8d74a6f1
					
				
					 2 changed files with 91 additions and 126 deletions
				
			
		|  | @ -1,126 +0,0 @@ | ||||||
| package fr.free.nrw.commons.profile.leaderboard; |  | ||||||
| 
 |  | ||||||
| import android.accounts.Account; |  | ||||||
| import android.accounts.AccountManager; |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.view.LayoutInflater; |  | ||||||
| import android.view.View; |  | ||||||
| import android.view.ViewGroup; |  | ||||||
| import android.widget.TextView; |  | ||||||
| import android.widget.Toast; |  | ||||||
| import androidx.annotation.NonNull; |  | ||||||
| import androidx.recyclerview.widget.RecyclerView; |  | ||||||
| import com.facebook.drawee.view.SimpleDraweeView; |  | ||||||
| import fr.free.nrw.commons.BuildConfig; |  | ||||||
| import fr.free.nrw.commons.R; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * This class extends RecyclerView.Adapter and creates the UserDetail section of the leaderboard |  | ||||||
|  */ |  | ||||||
| public class UserDetailAdapter extends RecyclerView.Adapter<UserDetailAdapter.DataViewHolder> { |  | ||||||
| 
 |  | ||||||
|     private LeaderboardResponse leaderboardResponse; |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Stores the username of currently logged in user. |  | ||||||
|      */ |  | ||||||
|     private String currentlyLoggedInUserName = null; |  | ||||||
| 
 |  | ||||||
|     public UserDetailAdapter(LeaderboardResponse leaderboardResponse) { |  | ||||||
|         this.leaderboardResponse = leaderboardResponse; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public class DataViewHolder extends RecyclerView.ViewHolder { |  | ||||||
| 
 |  | ||||||
|         private TextView rank; |  | ||||||
|         private SimpleDraweeView avatar; |  | ||||||
|         private TextView username; |  | ||||||
|         private TextView count; |  | ||||||
| 
 |  | ||||||
|         public DataViewHolder(@NonNull View itemView) { |  | ||||||
|             super(itemView); |  | ||||||
|             this.rank = itemView.findViewById(R.id.rank); |  | ||||||
|             this.avatar = itemView.findViewById(R.id.avatar); |  | ||||||
|             this.username = itemView.findViewById(R.id.username); |  | ||||||
|             this.count = itemView.findViewById(R.id.count); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /** |  | ||||||
|          * This method will return the Context |  | ||||||
|          * @return Context |  | ||||||
|          */ |  | ||||||
|         public Context getContext() { |  | ||||||
|             return itemView.getContext(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Overrides the onCreateViewHolder and sets the view with leaderboard user element layout |  | ||||||
|      * @param parent |  | ||||||
|      * @param viewType |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
|     @NonNull |  | ||||||
|     @Override |  | ||||||
|     public UserDetailAdapter.DataViewHolder onCreateViewHolder(@NonNull ViewGroup parent, |  | ||||||
|         int viewType) { |  | ||||||
|         View view = LayoutInflater.from(parent.getContext()) |  | ||||||
|             .inflate(R.layout.leaderboard_user_element, parent, false); |  | ||||||
|         return new DataViewHolder(view); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Overrides the onBindViewHolder Set the view at the specific position with the specific value |  | ||||||
|      * @param holder |  | ||||||
|      * @param position |  | ||||||
|      */ |  | ||||||
|     @Override |  | ||||||
|     public void onBindViewHolder(@NonNull UserDetailAdapter.DataViewHolder holder, int position) { |  | ||||||
|         TextView rank = holder.rank; |  | ||||||
|         SimpleDraweeView avatar = holder.avatar; |  | ||||||
|         TextView username = holder.username; |  | ||||||
|         TextView count = holder.count; |  | ||||||
| 
 |  | ||||||
|         rank.setText(String.format("%s %d", |  | ||||||
|             holder.getContext().getResources().getString(R.string.rank_prefix), |  | ||||||
|             leaderboardResponse.getRank())); |  | ||||||
| 
 |  | ||||||
|         avatar.setImageURI( |  | ||||||
|             Uri.parse(leaderboardResponse.getAvatar())); |  | ||||||
|         username.setText(leaderboardResponse.getUsername()); |  | ||||||
|         count.setText(String.format("%s %d", |  | ||||||
|             holder.getContext().getResources().getString(R.string.count_prefix), |  | ||||||
|             leaderboardResponse.getCategoryCount())); |  | ||||||
| 
 |  | ||||||
|         // When user tap on avatar shows the toast on how to change avatar |  | ||||||
|         // fixing: https://github.com/commons-app/apps-android-commons/issues/47747 |  | ||||||
|         if (currentlyLoggedInUserName == null) { |  | ||||||
|             // If the current login username has not been fetched yet, then fetch it. |  | ||||||
|             final AccountManager accountManager = AccountManager.get(username.getContext()); |  | ||||||
|             final Account[] allAccounts = accountManager.getAccountsByType( |  | ||||||
|                 BuildConfig.ACCOUNT_TYPE); |  | ||||||
|             if (allAccounts.length != 0) { |  | ||||||
|                 currentlyLoggedInUserName = allAccounts[0].name; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         if (currentlyLoggedInUserName != null && currentlyLoggedInUserName.equals( |  | ||||||
|             leaderboardResponse.getUsername())) { |  | ||||||
| 
 |  | ||||||
|             avatar.setOnClickListener(new View.OnClickListener() { |  | ||||||
|                 @Override |  | ||||||
|                 public void onClick(View v) { |  | ||||||
|                     Toast.makeText(v.getContext(), |  | ||||||
|                         R.string.set_up_avatar_toast_string, |  | ||||||
|                         Toast.LENGTH_LONG).show(); |  | ||||||
|                 } |  | ||||||
|             }); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public int getItemCount() { |  | ||||||
|         return 1; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | @ -0,0 +1,91 @@ | ||||||
|  | package fr.free.nrw.commons.profile.leaderboard | ||||||
|  | 
 | ||||||
|  | import android.accounts.AccountManager | ||||||
|  | import android.net.Uri | ||||||
|  | import android.view.LayoutInflater | ||||||
|  | import android.view.View | ||||||
|  | import android.view.ViewGroup | ||||||
|  | import android.widget.TextView | ||||||
|  | import android.widget.Toast | ||||||
|  | import androidx.recyclerview.widget.RecyclerView | ||||||
|  | import com.facebook.drawee.view.SimpleDraweeView | ||||||
|  | import fr.free.nrw.commons.BuildConfig | ||||||
|  | import fr.free.nrw.commons.R | ||||||
|  | import fr.free.nrw.commons.profile.leaderboard.UserDetailAdapter.DataViewHolder | ||||||
|  | import java.util.Locale | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * This class extends RecyclerView.Adapter and creates the UserDetail section of the leaderboard | ||||||
|  |  */ | ||||||
|  | class UserDetailAdapter(private val leaderboardResponse: LeaderboardResponse) : | ||||||
|  |     RecyclerView.Adapter<DataViewHolder>() { | ||||||
|  |     /** | ||||||
|  |      * Stores the username of currently logged in user. | ||||||
|  |      */ | ||||||
|  |     private var currentlyLoggedInUserName: String? = null | ||||||
|  | 
 | ||||||
|  |     class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { | ||||||
|  |         val rank: TextView = itemView.findViewById(R.id.rank) | ||||||
|  |         val avatar: SimpleDraweeView = itemView.findViewById(R.id.avatar) | ||||||
|  |         val username: TextView = itemView.findViewById(R.id.username) | ||||||
|  |         val count: TextView = itemView.findViewById(R.id.count) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Overrides the onCreateViewHolder and sets the view with leaderboard user element layout | ||||||
|  |      * @param parent | ||||||
|  |      * @param viewType | ||||||
|  |      * @return | ||||||
|  |      */ | ||||||
|  |     override fun onCreateViewHolder( | ||||||
|  |         parent: ViewGroup, | ||||||
|  |         viewType: Int | ||||||
|  |     ): DataViewHolder = DataViewHolder( | ||||||
|  |         LayoutInflater.from(parent.context) | ||||||
|  |             .inflate(R.layout.leaderboard_user_element, parent, false) | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Overrides the onBindViewHolder Set the view at the specific position with the specific value | ||||||
|  |      * @param holder | ||||||
|  |      * @param position | ||||||
|  |      */ | ||||||
|  |     override fun onBindViewHolder(holder: DataViewHolder, position: Int) = with(holder) { | ||||||
|  |         val resources = itemView.context.resources | ||||||
|  | 
 | ||||||
|  |         avatar.setImageURI(Uri.parse(leaderboardResponse.avatar)) | ||||||
|  |         username.text = leaderboardResponse.username | ||||||
|  |         rank.text = String.format( | ||||||
|  |             Locale.getDefault(), | ||||||
|  |             "%s %d", | ||||||
|  |             resources.getString(R.string.rank_prefix), | ||||||
|  |             leaderboardResponse.rank | ||||||
|  |         ) | ||||||
|  |         count.text = String.format( | ||||||
|  |             Locale.getDefault(), | ||||||
|  |             "%s %d", | ||||||
|  |             resources.getString(R.string.count_prefix), | ||||||
|  |             leaderboardResponse.categoryCount | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         // When user tap on avatar shows the toast on how to change avatar | ||||||
|  |         // fixing: https://github.com/commons-app/apps-android-commons/issues/47747 | ||||||
|  |         if (currentlyLoggedInUserName == null) { | ||||||
|  |             // If the current login username has not been fetched yet, then fetch it. | ||||||
|  |             val accountManager = AccountManager.get(itemView.context) | ||||||
|  |             val allAccounts = accountManager.getAccountsByType(BuildConfig.ACCOUNT_TYPE) | ||||||
|  |             if (allAccounts.isNotEmpty()) { | ||||||
|  |                 currentlyLoggedInUserName = allAccounts[0].name | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (currentlyLoggedInUserName != null && currentlyLoggedInUserName == leaderboardResponse.username) { | ||||||
|  |             avatar.setOnClickListener { v: View -> | ||||||
|  |                 Toast.makeText( | ||||||
|  |                     v.context, R.string.set_up_avatar_toast_string, Toast.LENGTH_LONG | ||||||
|  |                 ).show() | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun getItemCount(): Int = 1 | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Paul Hawke
						Paul Hawke