mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-06 18:57:26 +01:00
Fetch the subreddit info and save it to the database. Solve a bug that cannot create a instance of SubredditViewModel.
This commit is contained in:
parent
9334d3860e
commit
c6026e5659
Binary file not shown.
@ -62,4 +62,5 @@ class JSONUtils {
|
||||
static final String SUBSCRIBERS_KEY = "subscribers";
|
||||
static final String PUBLIC_DESCRIPTION = "public_description";
|
||||
static final String ACTIVE_USER_COUNT = "active_user_count";
|
||||
static final String DISPLAY_NAME_PREFIXED = "display_name_prefixed";
|
||||
}
|
||||
|
@ -202,10 +202,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
SubscribedUserRoomDatabase.getDatabase(MainActivity.this),
|
||||
subscribedSubredditData,
|
||||
subscribedUserData).execute();
|
||||
|
||||
/*new InsertSubscribedUsersAsyncTask(
|
||||
SubscribedUserRoomDatabase.getDatabase(MainActivity.this),
|
||||
subscribedUserData).execute();*/
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -282,23 +278,4 @@ public class MainActivity extends AppCompatActivity {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/*private static class InsertSubscribedUsersAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
private final SubscribedUserDao mDao;
|
||||
private List<SubscribedUserData> subscribedUserData;
|
||||
|
||||
InsertSubscribedUsersAsyncTask(SubscribedUserRoomDatabase db, List<SubscribedUserData> subscribedUserData) {
|
||||
mDao = db.subscribedUserDao();
|
||||
this.subscribedUserData = subscribedUserData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(final Void... params) {
|
||||
for(SubscribedUserData s : subscribedUserData) {
|
||||
mDao.insert(s);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import org.json.JSONObject;
|
||||
|
||||
class ParseSubredditData {
|
||||
interface ParseSubredditDataListener {
|
||||
void onParseSubredditDataSuccess();
|
||||
void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
|
||||
void onParseSubredditDataFail();
|
||||
}
|
||||
|
||||
@ -23,6 +23,8 @@ class ParseSubredditData {
|
||||
private JSONObject jsonResponse;
|
||||
private boolean parseFailed;
|
||||
private ParseSubredditDataListener parseSubredditDataListener;
|
||||
private SubredditData subredditData;
|
||||
private int mNCurrentOnlineSubscribers;
|
||||
|
||||
ParseSubredditDataAsyncTask(String response, ParseSubredditDataListener parseSubredditDataListener){
|
||||
this.parseSubredditDataListener = parseSubredditDataListener;
|
||||
@ -40,11 +42,14 @@ class ParseSubredditData {
|
||||
try {
|
||||
JSONObject data = jsonResponse.getJSONObject(JSONUtils.DATA_KEY);
|
||||
String id = data.getString(JSONUtils.NAME_KEY);
|
||||
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED);
|
||||
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION);
|
||||
String bannerImageUrl = data.getString(JSONUtils.BANNER_IMG_KEY);
|
||||
String iconImageUrl = data.getString(JSONUtils.ICON_IMG_KEY);
|
||||
int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY);
|
||||
int nCurrentOnlineSubscribers = data.getInt(JSONUtils.ACTIVE_USER_COUNT);
|
||||
subredditData = new SubredditData(id, subredditFullName, iconImageUrl, bannerImageUrl, description, nSubscribers);
|
||||
mNCurrentOnlineSubscribers = nCurrentOnlineSubscribers;
|
||||
} catch (JSONException e) {
|
||||
parseFailed = true;
|
||||
Log.i("parse", "SubredditData error");
|
||||
@ -56,7 +61,7 @@ class ParseSubredditData {
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
if(!parseFailed) {
|
||||
parseSubredditDataListener.onParseSubredditDataSuccess();
|
||||
parseSubredditDataListener.onParseSubredditDataSuccess(subredditData, mNCurrentOnlineSubscribers);
|
||||
} else {
|
||||
parseSubredditDataListener.onParseSubredditDataFail();
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ class SubredditData {
|
||||
return description;
|
||||
}
|
||||
|
||||
public int getnSubscribers() {
|
||||
public int getNSubscribers() {
|
||||
return nSubscribers;
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,9 @@ package ml.docilealligator.infinityforreddit;
|
||||
import android.app.Application;
|
||||
import android.arch.lifecycle.AndroidViewModel;
|
||||
import android.arch.lifecycle.LiveData;
|
||||
import android.arch.lifecycle.ViewModel;
|
||||
import android.arch.lifecycle.ViewModelProvider;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
public class SubredditViewModel extends AndroidViewModel {
|
||||
private SubredditRepository mSubredditRepository;
|
||||
@ -21,4 +24,23 @@ public class SubredditViewModel extends AndroidViewModel {
|
||||
public void insert(SubredditData subredditData) {
|
||||
mSubredditRepository.insert(subredditData);
|
||||
}
|
||||
|
||||
public static class Factory extends ViewModelProvider.NewInstanceFactory {
|
||||
|
||||
@NonNull
|
||||
private final Application mApplication;
|
||||
|
||||
private final String id;
|
||||
|
||||
public Factory(@NonNull Application application, String id) {
|
||||
mApplication = application;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends ViewModel> T create(Class<T> modelClass) {
|
||||
//noinspection unchecked
|
||||
return (T) new SubredditViewModel(mApplication, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,11 +33,13 @@ class SubscribedSubredditRecyclerViewAdapter extends RecyclerView.Adapter<Recycl
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
|
||||
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, final int i) {
|
||||
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class);
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getName());
|
||||
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_ID, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getId());
|
||||
mContext.startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
@ -1,16 +1,31 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.arch.lifecycle.Observer;
|
||||
import android.arch.lifecycle.ViewModelProviders;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.AppBarLayout;
|
||||
import android.support.design.widget.CollapsingToolbarLayout;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.volley.toolbox.Volley;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
|
||||
import de.hdodenhof.circleimageview.CircleImageView;
|
||||
|
||||
public class ViewSubredditDetailActivity extends AppCompatActivity {
|
||||
|
||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||
static final String EXTRA_SUBREDDIT_ID = "ESI";
|
||||
|
||||
private SubredditViewModel mSubredditViewModel;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@ -18,6 +33,8 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
String id = getIntent().getExtras().getString(EXTRA_SUBREDDIT_ID);
|
||||
final String subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME);
|
||||
final CollapsingToolbarLayout collapsingToolbarLayout = findViewById(R.id.collapsing_toolbar_layout_view_subreddit_detail_activity);
|
||||
AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout_view_subreddit_detail_activity);
|
||||
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
|
||||
@ -30,7 +47,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
||||
scrollRange = appBarLayout.getTotalScrollRange();
|
||||
}
|
||||
if (scrollRange + verticalOffset == 0) {
|
||||
collapsingToolbarLayout.setTitle(getString(R.string.title_activity_view_subreddit_detail));
|
||||
collapsingToolbarLayout.setTitle(subredditName);
|
||||
isShow = true;
|
||||
} else if(isShow) {
|
||||
collapsingToolbarLayout.setTitle(" ");//carefull there should a space between double quote otherwise it wont work
|
||||
@ -39,13 +56,78 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
||||
}
|
||||
});
|
||||
|
||||
FloatingActionButton fab = findViewById(R.id.fab);
|
||||
fab.setOnClickListener(new View.OnClickListener() {
|
||||
final ImageView bannerImageView = findViewById(R.id.banner_image_view_view_subreddit_detail_activity);
|
||||
final CircleImageView iconCircleImageView = findViewById(R.id.icon_circle_image_view_view_subreddit_detail_activity);
|
||||
final TextView subredditNameTextView = findViewById(R.id.subreddit_name_text_view_view_subreddit_detail_activity);
|
||||
final TextView nSubscribersTextView = findViewById(R.id.subscriber_count_text_view_view_subreddit_detail_activity);
|
||||
final TextView nOnlineSubscribersTextView = findViewById(R.id.online_subscriber_count_text_view_view_subreddit_detail_activity);
|
||||
final TextView descriptionTextView = findViewById(R.id.description_text_view_view_subreddit_detail_activity);
|
||||
final RequestManager glide = Glide.with(ViewSubredditDetailActivity.this);
|
||||
|
||||
SubredditViewModel.Factory factory = new SubredditViewModel.Factory(getApplication(), id);
|
||||
mSubredditViewModel = ViewModelProviders.of(this, factory).get(SubredditViewModel.class);
|
||||
mSubredditViewModel.getSubredditData().observe(this, new Observer<SubredditData>() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
|
||||
.setAction("Action", null).show();
|
||||
public void onChanged(@Nullable SubredditData subredditData) {
|
||||
if(subredditData != null) {
|
||||
if(!subredditData.getBannerUrl().equals("") && !subredditData.getBannerUrl().equals("null")) {
|
||||
glide.load(subredditData.getBannerUrl()).into(bannerImageView);
|
||||
}
|
||||
|
||||
if(subredditData.getIconUrl().equals("") || subredditData.getIconUrl().equals("null")) {
|
||||
glide.load(getDrawable(R.drawable.subreddit_default_icon)).into(iconCircleImageView);
|
||||
} else {
|
||||
glide.load(subredditData.getIconUrl()).into(iconCircleImageView);
|
||||
}
|
||||
|
||||
subredditNameTextView.setText(subredditData.getName());
|
||||
String nSubscribers = getString(R.string.subscribers_number_detail, subredditData.getNSubscribers());
|
||||
nSubscribersTextView.setText(nSubscribers);
|
||||
descriptionTextView.setText(subredditData.getDescription());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
new FetchSubredditData(Volley.newRequestQueue(this), subredditName).querySubredditData(new FetchSubredditData.FetchSubredditDataListener() {
|
||||
@Override
|
||||
public void onFetchSubredditDataSuccess(String response) {
|
||||
new ParseSubredditData().parseComment(response, new ParseSubredditData.ParseSubredditDataListener() {
|
||||
@Override
|
||||
public void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
|
||||
new InsertSubredditDataAsyncTask(SubredditRoomDatabase.getDatabase(ViewSubredditDetailActivity.this), subredditData)
|
||||
.execute();
|
||||
String nOnlineSubscribers = getString(R.string.online_subscribers_number_detail, nCurrentOnlineSubscribers);
|
||||
nOnlineSubscribersTextView.setText(nOnlineSubscribers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onParseSubredditDataFail() {
|
||||
Toast.makeText(ViewSubredditDetailActivity.this, "Cannot fetch subreddit info", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFetchSubredditDataFail() {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
private final SubredditDao mSubredditDao;
|
||||
private SubredditData subredditData;
|
||||
|
||||
InsertSubredditDataAsyncTask(SubredditRoomDatabase subredditDb, SubredditData subredditData) {
|
||||
mSubredditDao = subredditDb.subredditDao();
|
||||
this.subredditData = subredditData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(final Void... params) {
|
||||
mSubredditDao.insert(subredditData);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,13 +29,12 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/banner_image_view_view_subreddit_detail_activity"
|
||||
android:src="@drawable/subreddit_default_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_height="180dp" />
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
android:src="@drawable/subreddit_default_icon"
|
||||
android:id="@+id/icon_circle_image_view_view_subreddit_detail_activity"
|
||||
android:layout_width="72dp"
|
||||
android:layout_height="72dp"
|
||||
android:layout_marginTop="-36dp"
|
||||
@ -53,22 +52,46 @@
|
||||
android:background="@android:color/white">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name_text_view_view_subreddit_detail_activity"
|
||||
android:id="@+id/subreddit_name_text_view_view_subreddit_detail_activity"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="36dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:textColor="@android:color/black"
|
||||
android:text="Dummy"/>
|
||||
android:textSize="18sp"
|
||||
android:textColor="@color/colorAccent"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/subscriber_count_text_view_view_subreddit_detail_activity"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:textColor="@android:color/black" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/online_subscriber_count_text_view_view_subreddit_detail_activity"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:textColor="@android:color/black" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/subscriber_count_text_view_view_subreddit_detail_activity"
|
||||
android:id="@+id/description_text_view_view_subreddit_detail_activity"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="16dp"
|
||||
android:textColor="@android:color/black"
|
||||
android:text="Subscriber: 10000"/>
|
||||
android:textColor="@android:color/black" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@ -86,13 +109,4 @@
|
||||
|
||||
<include layout="@layout/content_view_subreddit_detail" />
|
||||
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/fab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
app:layout_anchor="@id/app_bar_layout_view_subreddit_detail_activity"
|
||||
app:layout_anchorGravity="bottom|end"
|
||||
app:srcCompat="@drawable/baseline_add_white_24" />
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
@ -20,6 +20,8 @@
|
||||
<string name="following">Following</string>
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="title_activity_view_subreddit_detail">ViewSubredditDetailActivity</string>
|
||||
<string name="subscribers_number_detail">Subscribers: %1$d</string>
|
||||
<string name="online_subscribers_number_detail">Online: %1$d</string>
|
||||
<string name="large_text">
|
||||
"Material is the metaphor.\n\n"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user