mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-10-06 05:49:49 +02:00
Display user name and user icon in each post when loading posts in specific subreddits.
This commit is contained in:
50
app/src/main/java/User/FetchUserData.java
Normal file
50
app/src/main/java/User/FetchUserData.java
Normal file
@@ -0,0 +1,50 @@
|
||||
package User;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.RedditAPI;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
public class FetchUserData {
|
||||
public interface FetchUserDataListener {
|
||||
void onFetchUserDataSuccess(User user);
|
||||
void onFetchUserDataFail();
|
||||
}
|
||||
|
||||
public static void fetchUserData(final Retrofit retrofit, String userName,
|
||||
final FetchUserDataListener fetchUserDataListener) {
|
||||
RedditAPI api = retrofit.create(RedditAPI.class);
|
||||
|
||||
Call<String> userInfo = api.getUserData(userName);
|
||||
userInfo.enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||
if(response.isSuccessful()) {
|
||||
ParseUserData.parseMyInfo(response.body(), new ParseUserData.ParseUserDataListener() {
|
||||
@Override
|
||||
public void onParseUserDataSuccess(User user) {
|
||||
fetchUserDataListener.onFetchUserDataSuccess(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onParseUserDataFail() {
|
||||
fetchUserDataListener.onFetchUserDataFail();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.i("call failed", response.message());
|
||||
fetchUserDataListener.onFetchUserDataFail();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||
Log.i("call failed", t.getMessage());
|
||||
fetchUserDataListener.onFetchUserDataFail();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
72
app/src/main/java/User/ParseUserData.java
Normal file
72
app/src/main/java/User/ParseUserData.java
Normal file
@@ -0,0 +1,72 @@
|
||||
package User;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.JSONUtils;
|
||||
|
||||
public class ParseUserData {
|
||||
interface ParseUserDataListener {
|
||||
void onParseUserDataSuccess(User user);
|
||||
void onParseUserDataFail();
|
||||
}
|
||||
|
||||
static void parseMyInfo(String response, ParseUserDataListener parseUserDataListener) {
|
||||
new ParseUserDataAsyncTask(response, parseUserDataListener).execute();
|
||||
}
|
||||
|
||||
private static class ParseUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
private JSONObject jsonResponse;
|
||||
private ParseUserDataListener parseUserDataListener;
|
||||
private boolean parseFailed;
|
||||
|
||||
private User user;
|
||||
|
||||
ParseUserDataAsyncTask(String response, ParseUserDataListener parseUserDataListener){
|
||||
try {
|
||||
jsonResponse = new JSONObject(response);
|
||||
this.parseUserDataListener = parseUserDataListener;
|
||||
parseFailed = false;
|
||||
} catch (JSONException e) {
|
||||
Log.i("user data json error", e.getMessage());
|
||||
parseUserDataListener.onParseUserDataFail();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
try {
|
||||
jsonResponse = jsonResponse.getJSONObject(JSONUtils.DATA_KEY);
|
||||
String userName = jsonResponse.getString(JSONUtils.NAME_KEY);
|
||||
String iconImageUrl = jsonResponse.getString(JSONUtils.ICON_IMG_KEY);
|
||||
String bannerImageUrl = "";
|
||||
if(!jsonResponse.isNull(JSONUtils.SUBREDDIT_KEY)) {
|
||||
bannerImageUrl = jsonResponse.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.BANNER_IMG_KEY);
|
||||
}
|
||||
int linkKarma = jsonResponse.getInt(JSONUtils.LINK_KARMA_KEY);
|
||||
int commentKarma = jsonResponse.getInt(JSONUtils.COMMENT_KARMA_KEY);
|
||||
int karma = linkKarma + commentKarma;
|
||||
boolean isGold = jsonResponse.getBoolean(JSONUtils.IS_GOLD_KEY);
|
||||
boolean isFriend = jsonResponse.getBoolean(JSONUtils.IS_FRIEND_KEY);
|
||||
|
||||
user = new User(userName, iconImageUrl, bannerImageUrl, karma, isGold, isFriend);
|
||||
} catch (JSONException e) {
|
||||
parseFailed = true;
|
||||
Log.i("parse user data error", e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
if(!parseFailed) {
|
||||
parseUserDataListener.onParseUserDataSuccess(user);
|
||||
} else {
|
||||
parseUserDataListener.onParseUserDataFail();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
58
app/src/main/java/User/User.java
Normal file
58
app/src/main/java/User/User.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package User;
|
||||
|
||||
import android.arch.persistence.room.ColumnInfo;
|
||||
import android.arch.persistence.room.Entity;
|
||||
import android.arch.persistence.room.PrimaryKey;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
@Entity(tableName = "users")
|
||||
public class User {
|
||||
@PrimaryKey
|
||||
@NonNull
|
||||
@ColumnInfo(name = "user_name")
|
||||
private String userName;
|
||||
@ColumnInfo(name = "icon")
|
||||
private String icon;
|
||||
@ColumnInfo(name = "banner")
|
||||
private String banner;
|
||||
@ColumnInfo(name = "karma")
|
||||
private int karma;
|
||||
@ColumnInfo(name = "is_gold")
|
||||
private boolean isGold;
|
||||
@ColumnInfo(name = "is_friend")
|
||||
private boolean isFriend;
|
||||
|
||||
User(@NonNull String userName, String icon, String banner, int karma, boolean isGold, boolean isFriend) {
|
||||
this.userName = userName;
|
||||
this.icon = icon;
|
||||
this.banner = banner;
|
||||
this.karma = karma;
|
||||
this.isGold = isGold;
|
||||
this.isFriend = isFriend;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public String getBanner() {
|
||||
return banner;
|
||||
}
|
||||
|
||||
public int getKarma() {
|
||||
return karma;
|
||||
}
|
||||
|
||||
public boolean isGold() {
|
||||
return isGold;
|
||||
}
|
||||
|
||||
public boolean isFriend() {
|
||||
return isFriend;
|
||||
}
|
||||
}
|
18
app/src/main/java/User/UserDao.java
Normal file
18
app/src/main/java/User/UserDao.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package User;
|
||||
|
||||
import android.arch.persistence.room.Dao;
|
||||
import android.arch.persistence.room.Insert;
|
||||
import android.arch.persistence.room.OnConflictStrategy;
|
||||
import android.arch.persistence.room.Query;
|
||||
|
||||
@Dao
|
||||
public interface UserDao {
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
void insert(User user);
|
||||
|
||||
@Query("DELETE FROM users")
|
||||
void deleteAllUsers();
|
||||
|
||||
@Query("SELECT * FROM users WHERE user_name = :userName LIMIT 1")
|
||||
User getUserData(String userName);
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
package User;
|
||||
|
||||
public class UserData {
|
||||
}
|
26
app/src/main/java/User/UserRoomDatabase.java
Normal file
26
app/src/main/java/User/UserRoomDatabase.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package User;
|
||||
|
||||
import android.arch.persistence.room.Database;
|
||||
import android.arch.persistence.room.Room;
|
||||
import android.arch.persistence.room.RoomDatabase;
|
||||
import android.content.Context;
|
||||
|
||||
@Database(entities = {User.class}, version = 1)
|
||||
public abstract class UserRoomDatabase extends RoomDatabase {
|
||||
private static UserRoomDatabase INSTANCE;
|
||||
|
||||
public abstract UserDao userDao();
|
||||
|
||||
public static UserRoomDatabase getDatabase(final Context context) {
|
||||
if(INSTANCE == null) {
|
||||
synchronized (UserRoomDatabase.class) {
|
||||
if(INSTANCE == null) {
|
||||
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
|
||||
UserRoomDatabase.class, "users")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user