diff options
author | Alex Ning <chineseperson5@gmail.com> | 2018-09-21 15:35:57 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2018-09-21 15:35:57 +0000 |
commit | 88e4cf810fa78592c97f6ba7c8c501e75205a76b (patch) | |
tree | 69da20eea421631a23d3c271d4d11e774e7631bc /app/src/main/java | |
parent | 5c51450a8ebd9a1bbcf39377d639dca0c4994987 (diff) | |
download | infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.tar infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.tar.gz infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.tar.bz2 infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.tar.lz infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.tar.xz infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.tar.zst infinity-for-reddit-88e4cf810fa78592c97f6ba7c8c501e75205a76b.zip |
Click the subreddit icon or the subreddit name to view the subreddit's details in PostFragment. Make the status bar in ViewSubredditDetailActivity translucent. Prepare to view the user's details in ViewUserDetailActivity. Minor bugs fixed.
Diffstat (limited to '')
10 files changed, 116 insertions, 37 deletions
diff --git a/app/src/main/java/User/UserData.java b/app/src/main/java/User/UserData.java new file mode 100644 index 00000000..2846cfb6 --- /dev/null +++ b/app/src/main/java/User/UserData.java @@ -0,0 +1,4 @@ +package User; + +public class UserData { +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java index 39d26a5d..a6cbf578 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java @@ -27,7 +27,6 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener { private PostRecyclerViewAdapter mAdapter; private ArrayList<PostData> mPostData; private PaginationSynchronizer mPaginationSynchronizer; - private PaginationRetryNotifier mPaginationRetryNotifier; private LastItemSynchronizer mLastItemSynchronizer; private String mSubredditName; @@ -54,17 +53,17 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener { this.loadSuccess = loadSuccess; this.locale = locale; - mPaginationRetryNotifier = new PaginationRetryNotifier() { + PaginationRetryNotifier paginationRetryNotifier = new PaginationRetryNotifier() { @Override public void retry() { - if(isBestPost) { + if (isBestPost) { fetchBestPost(1); } else { fetchPost(subredditName, 1); } } }; - mPaginationSynchronizer.setPaginationRetryNotifier(mPaginationRetryNotifier); + mPaginationSynchronizer.setPaginationRetryNotifier(paginationRetryNotifier); mLastItemSynchronizer = mPaginationSynchronizer.getLastItemSynchronizer(); } } @@ -117,8 +116,8 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener { clipboard.setPrimaryClip(clip); ParsePost.parsePost(response.body(), mPostData, locale, new ParsePost.ParsePostListener() { @Override - public void onParsePostSuccess(ArrayList<PostData> bestPostData, String lastItem) { - mAdapter.notifyDataSetChanged(); + public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) { + mAdapter.notifyItemRangeInserted(mPostData.size(), postData.size()); mLastItem = lastItem; mLastItemSynchronizer.lastItemChanged(mLastItem); @@ -188,8 +187,8 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener { clipboard.setPrimaryClip(clip); ParsePost.parsePost(response.body(), mPostData, locale, new ParsePost.ParsePostListener() { @Override - public void onParsePostSuccess(ArrayList<PostData> bestPostData, String lastItem) { - mAdapter.notifyDataSetChanged(); + public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) { + mAdapter.notifyItemRangeInserted(mPostData.size(), postData.size()); mLastItem = lastItem; mLastItemSynchronizer.lastItemChanged(mLastItem); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java index f2e5d200..3292852b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java @@ -136,13 +136,36 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold ((DataViewHolder) holder).subredditIconCircleImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, - mPostData.get(adapterPosition).getSubredditNamePrefixed().substring(2)); + if(canStartActivity) { + canStartActivity = false; + Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, + mPostData.get(adapterPosition).getSubredditNamePrefixed().substring(2)); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_VALUE_KEY, + mPostData.get(adapterPosition).getSubredditNamePrefixed()); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_QUERY_BY_ID_KEY, false); + mContext.startActivity(intent); + } } }); ((DataViewHolder) holder).subredditNameTextView.setText(subredditName); + + ((DataViewHolder) holder).subredditNameTextView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(canStartActivity) { + canStartActivity = false; + Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, + mPostData.get(adapterPosition).getSubredditNamePrefixed().substring(2)); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_VALUE_KEY, + mPostData.get(adapterPosition).getSubredditNamePrefixed()); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_QUERY_BY_ID_KEY, false); + mContext.startActivity(intent); + } + } + }); ((DataViewHolder) holder).postTimeTextView.setText(postTime); ((DataViewHolder) holder).titleTextView.setText(title); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(position).getScore())); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java index 7b29693c..e150ab26 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java @@ -38,4 +38,7 @@ public interface RedditAPI { @GET("r/{subredditName}.json?raw_json=1") Call<String> getPost(@Path("subredditName") String subredditName, @Query("after") String lastItem); + + @GET("user/{username}/about.json/raw_json=1") + Call<String> getUserData(@Path("username") String username); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditDao.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditDao.java index 8fb1593c..2e1b0bb7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditDao.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditDao.java @@ -15,7 +15,10 @@ public interface SubredditDao { void deleteAllSubreddits(); @Query("SELECT * from subreddits WHERE id = :id") - LiveData<SubredditData> getSubredditLiveData(String id); + LiveData<SubredditData> getSubredditLiveDataById(String id); + + @Query("SELECT * from subreddits WHERE name = :namePrefixed") + LiveData<SubredditData> getSubredditLiveDataByNamePrefixed(String namePrefixed); @Query("SELECT * from subreddits WHERE name = :namePrefixed") SubredditData getSubredditData(String namePrefixed); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditRepository.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditRepository.java index a104fed7..deb68806 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditRepository.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditRepository.java @@ -8,10 +8,14 @@ public class SubredditRepository { private SubredditDao mSubredditDao; private LiveData<SubredditData> mSubredditLiveData; - SubredditRepository(Application application, String id) { + SubredditRepository(Application application, String value, boolean isId) { SubredditRoomDatabase db = SubredditRoomDatabase.getDatabase(application); mSubredditDao = db.subredditDao(); - mSubredditLiveData = mSubredditDao.getSubredditLiveData(id); + if(isId) { + mSubredditLiveData = mSubredditDao.getSubredditLiveDataById(value); + } else { + mSubredditLiveData = mSubredditDao.getSubredditLiveDataByNamePrefixed(value); + } } LiveData<SubredditData> getSubredditLiveData() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditViewModel.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditViewModel.java index 6d9e20fc..ee636b43 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditViewModel.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditViewModel.java @@ -11,9 +11,9 @@ public class SubredditViewModel extends AndroidViewModel { private SubredditRepository mSubredditRepository; private LiveData<SubredditData> mSubredditLiveData; - SubredditViewModel(Application application, String id) { + SubredditViewModel(Application application, String id, boolean isId) { super(application); - mSubredditRepository = new SubredditRepository(application, id); + mSubredditRepository = new SubredditRepository(application, id, isId); mSubredditLiveData = mSubredditRepository.getSubredditLiveData(); } @@ -30,17 +30,19 @@ public class SubredditViewModel extends AndroidViewModel { @NonNull private final Application mApplication; - private final String id; + private final String value; + private final boolean isId; - public Factory(@NonNull Application application, String id) { + public Factory(@NonNull Application application, String value, boolean isId) { mApplication = application; - this.id = id; + this.value = value; + this.isId = isId; } @Override public <T extends ViewModel> T create(Class<T> modelClass) { //noinspection unchecked - return (T) new SubredditViewModel(mApplication, id); + return (T) new SubredditViewModel(mApplication, value, isId); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java index ebc316e5..72e860be 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java @@ -39,7 +39,8 @@ class SubscribedSubredditRecyclerViewAdapter extends RecyclerView.Adapter<Recycl public void onClick(View view) { Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class); intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getName()); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_ID_KEY, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getId()); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_VALUE_KEY, mSubscribedSubredditData.get(viewHolder.getAdapterPosition()).getId()); + intent.putExtra(ViewSubredditDetailActivity.EXTRA_QUERY_BY_ID_KEY, true); mContext.startActivity(intent); } }); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java index d754b5af..af367793 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java @@ -13,6 +13,7 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -25,7 +26,8 @@ import de.hdodenhof.circleimageview.CircleImageView; public class ViewSubredditDetailActivity extends AppCompatActivity { static final String EXTRA_SUBREDDIT_NAME_KEY = "ESN"; - static final String EXTRA_SUBREDDIT_ID_KEY = "ESI"; + static final String EXTRA_SUBREDDIT_VALUE_KEY = "ESV"; + static final String EXTRA_QUERY_BY_ID_KEY = "EQBI"; private static final String FRAGMENT_OUT_STATE_KEY = "FOSK"; @@ -37,31 +39,48 @@ public class ViewSubredditDetailActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_subreddit_detail); - Toolbar toolbar = findViewById(R.id.toolbar); + final Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); + //Get status bar height + int statusBarHeight = 0; + int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + statusBarHeight = getResources().getDimensionPixelSize(resourceId); + } + + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams(); + params.topMargin = statusBarHeight; + final String subredditName = getIntent().getExtras().getString(EXTRA_SUBREDDIT_NAME_KEY); final String title = "r/" + subredditName; - setTitle(title); - 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); + final AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout_view_subreddit_detail_activity); + appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { - boolean isShow = true; + int previousVerticalOffset = 0; int scrollRange = -1; @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { - if (scrollRange == -1) { + /*collapsingToolbarLayout.setExpandedTitleColor(Color.BLACK); + collapsingToolbarLayout.setCollapsedTitleTextColor(Color.BLACK);*/ + if(scrollRange == -1) { scrollRange = appBarLayout.getTotalScrollRange(); - } - if (scrollRange + verticalOffset == 0) { - collapsingToolbarLayout.setTitle(title); - isShow = true; - } else if(isShow) { - collapsingToolbarLayout.setTitle(" ");//carefull there should a space between double quote otherwise it wont work - isShow = false; + } else { + if(verticalOffset < previousVerticalOffset) { + //Scroll down + if(scrollRange - Math.abs(verticalOffset) <= toolbar.getHeight()) { + collapsingToolbarLayout.setTitle(title); + } + } else { + //Scroll up + if(scrollRange - Math.abs(verticalOffset) > toolbar.getHeight()) { + collapsingToolbarLayout.setTitle(" ");//carefull there should a space between double quote otherwise it wont work + } + } + previousVerticalOffset = verticalOffset; } } }); @@ -74,8 +93,9 @@ public class ViewSubredditDetailActivity extends AppCompatActivity { final TextView descriptionTextView = findViewById(R.id.description_text_view_view_subreddit_detail_activity); final RequestManager glide = Glide.with(ViewSubredditDetailActivity.this); - String id = getIntent().getExtras().getString(EXTRA_SUBREDDIT_ID_KEY); - SubredditViewModel.Factory factory = new SubredditViewModel.Factory(getApplication(), id); + String value = getIntent().getExtras().getString(EXTRA_SUBREDDIT_VALUE_KEY); + boolean queryById = getIntent().getExtras().getBoolean(EXTRA_QUERY_BY_ID_KEY); + SubredditViewModel.Factory factory = new SubredditViewModel.Factory(getApplication(), value, queryById); mSubredditViewModel = ViewModelProviders.of(this, factory).get(SubredditViewModel.class); mSubredditViewModel.getSubredditLiveData().observe(this, new Observer<SubredditData>() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java new file mode 100644 index 00000000..0ec59030 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java @@ -0,0 +1,20 @@ +package ml.docilealligator.infinityforreddit; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; + +public class ViewUserDetailActivity extends AppCompatActivity { + + static final String EXTRA_USER_NAME_KEY = "EUNK"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_view_user_detail); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + + } +} |