aboutsummaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2018-09-21 15:35:57 +0000
committerAlex Ning <chineseperson5@gmail.com>2018-09-21 15:35:57 +0000
commit88e4cf810fa78592c97f6ba7c8c501e75205a76b (patch)
tree69da20eea421631a23d3c271d4d11e774e7631bc /app/src
parent5c51450a8ebd9a1bbcf39377d639dca0c4994987 (diff)
downloadinfinity-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 'app/src')
-rw-r--r--app/src/main/AndroidManifest.xml8
-rw-r--r--app/src/main/java/User/UserData.java4
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostPaginationScrollListener.java15
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java29
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java3
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditDao.java5
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditRepository.java8
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditViewModel.java14
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java3
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewSubredditDetailActivity.java52
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewUserDetailActivity.java20
-rw-r--r--app/src/main/res/layout/activity_view_subreddit_detail.xml3
-rw-r--r--app/src/main/res/layout/activity_view_user_detail.xml38
-rw-r--r--app/src/main/res/layout/content_view_user_detail.xml10
-rw-r--r--app/src/main/res/menu/menu_view_user_detail.xml10
-rw-r--r--app/src/main/res/values-v21/styles.xml16
-rw-r--r--app/src/main/res/values/strings.xml90
-rw-r--r--app/src/main/res/values/styles.xml12
18 files changed, 278 insertions, 62 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 551d2b5d..978dc3dd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -44,8 +44,12 @@
android:parentActivityName=".MainActivity" />
<activity
android:name=".ViewSubredditDetailActivity"
- android:theme="@style/AppTheme.NoActionBar"
- android:parentActivityName=".MainActivity" />
+ android:parentActivityName=".MainActivity"
+ android:theme="@style/AppTheme.NoActionBarWithTranslucentStatusBar" />
+ <activity
+ android:name=".ViewUserDetailActivity"
+ android:label="@string/title_activity_view_user_detail"
+ android:theme="@style/AppTheme.NoActionBar" />
</application>
</manifest> \ No newline at end of file
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);
+
+
+ }
+}
diff --git a/app/src/main/res/layout/activity_view_subreddit_detail.xml b/app/src/main/res/layout/activity_view_subreddit_detail.xml
index ed05ebf1..67bf3928 100644
--- a/app/src/main/res/layout/activity_view_subreddit_detail.xml
+++ b/app/src/main/res/layout/activity_view_subreddit_detail.xml
@@ -5,21 +5,18 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coordinator_layout_view_subreddit_detail_activity"
- android:fitsSystemWindows="true"
tools:context=".ViewSubredditDetailActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout_view_subreddit_detail_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout_view_subreddit_detail_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
app:toolbarId="@+id/toolbar">
diff --git a/app/src/main/res/layout/activity_view_user_detail.xml b/app/src/main/res/layout/activity_view_user_detail.xml
new file mode 100644
index 00000000..76dbba91
--- /dev/null
+++ b/app/src/main/res/layout/activity_view_user_detail.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true"
+ tools:context=".ViewUserDetailActivity">
+
+ <android.support.design.widget.AppBarLayout
+ android:id="@+id/app_bar"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/app_bar_height"
+ android:fitsSystemWindows="true"
+ android:theme="@style/AppTheme.AppBarOverlay">
+
+ <android.support.design.widget.CollapsingToolbarLayout
+ android:id="@+id/toolbar_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true"
+ app:contentScrim="?attr/colorPrimary"
+ app:layout_scrollFlags="scroll|exitUntilCollapsed"
+ app:toolbarId="@+id/toolbar">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"
+ app:layout_collapseMode="pin"
+ app:popupTheme="@style/AppTheme.PopupOverlay" />
+
+ </android.support.design.widget.CollapsingToolbarLayout>
+ </android.support.design.widget.AppBarLayout>
+
+ <include layout="@layout/content_view_user_detail" />
+
+</android.support.design.widget.CoordinatorLayout> \ No newline at end of file
diff --git a/app/src/main/res/layout/content_view_user_detail.xml b/app/src/main/res/layout/content_view_user_detail.xml
new file mode 100644
index 00000000..c708ae9e
--- /dev/null
+++ b/app/src/main/res/layout/content_view_user_detail.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/frame_layout_view_user_detail_activity"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior"
+ tools:context=".ViewUserDetailActivity"
+ tools:showIn="@layout/activity_view_user_detail" /> \ No newline at end of file
diff --git a/app/src/main/res/menu/menu_view_user_detail.xml b/app/src/main/res/menu/menu_view_user_detail.xml
new file mode 100644
index 00000000..ec7d65b8
--- /dev/null
+++ b/app/src/main/res/menu/menu_view_user_detail.xml
@@ -0,0 +1,10 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="ml.docilealligator.infinityforreddit.ViewUserDetailActivity">
+ <item
+ android:id="@+id/action_settings"
+ android:orderInCategory="100"
+ android:title="@string/action_settings"
+ app:showAsAction="never" />
+</menu>
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
deleted file mode 100644
index 344848b5..00000000
--- a/app/src/main/res/values-v21/styles.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<resources>
-
- <style name="AppTheme.NoActionBar">
- <item name="windowActionBar">false</item>
- <item name="windowNoTitle">true</item>
- <item name="android:statusBarColor">@android:color/transparent</item>
- </style>
-
- <style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
- <!--<item name="colorPrimary">@android:color/transparent</item>-->
- <item name="colorPrimary">@color/transparentActionBarColor</item>
- <item name="android:windowTranslucentStatus">true</item>
- <item name="android:windowTranslucentNavigation">true</item>
- </style>
-
-</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2b98acbb..34ac12f2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -26,4 +26,94 @@
<string name="online_subscribers_number_detail">Online: %1$d</string>
<string name="gilded">x%1$d</string>
+ <string name="title_activity_view_user_detail">ViewUserDetailActivity</string>
+ <string name="large_text">
+ "Material is the metaphor.\n\n"
+
+ "A material metaphor is the unifying theory of a rationalized space and a system of motion."
+ "The material is grounded in tactile reality, inspired by the study of paper and ink, yet "
+ "technologically advanced and open to imagination and magic.\n"
+ "Surfaces and edges of the material provide visual cues that are grounded in reality. The "
+ "use of familiar tactile attributes helps users quickly understand affordances. Yet the "
+ "flexibility of the material creates new affordances that supercede those in the physical "
+ "world, without breaking the rules of physics.\n"
+ "The fundamentals of light, surface, and movement are key to conveying how objects move, "
+ "interact, and exist in space and in relation to each other. Realistic lighting shows "
+ "seams, divides space, and indicates moving parts.\n\n"
+
+ "Bold, graphic, intentional.\n\n"
+
+ "The foundational elements of print based design typography, grids, space, scale, color, "
+ "and use of imagery guide visual treatments. These elements do far more than please the "
+ "eye. They create hierarchy, meaning, and focus. Deliberate color choices, edge to edge "
+ "imagery, large scale typography, and intentional white space create a bold and graphic "
+ "interface that immerse the user in the experience.\n"
+ "An emphasis on user actions makes core functionality immediately apparent and provides "
+ "waypoints for the user.\n\n"
+
+ "Motion provides meaning.\n\n"
+
+ "Motion respects and reinforces the user as the prime mover. Primary user actions are "
+ "inflection points that initiate motion, transforming the whole design.\n"
+ "All action takes place in a single environment. Objects are presented to the user without "
+ "breaking the continuity of experience even as they transform and reorganize.\n"
+ "Motion is meaningful and appropriate, serving to focus attention and maintain continuity. "
+ "Feedback is subtle yet clear. Transitions are efficient yet coherent.\n\n"
+
+ "3D world.\n\n"
+
+ "The material environment is a 3D space, which means all objects have x, y, and z "
+ "dimensions. The z-axis is perpendicularly aligned to the plane of the display, with the "
+ "positive z-axis extending towards the viewer. Every sheet of material occupies a single "
+ "position along the z-axis and has a standard 1dp thickness.\n"
+ "On the web, the z-axis is used for layering and not for perspective. The 3D world is "
+ "emulated by manipulating the y-axis.\n\n"
+
+ "Light and shadow.\n\n"
+
+ "Within the material environment, virtual lights illuminate the scene. Key lights create "
+ "directional shadows, while ambient light creates soft shadows from all angles.\n"
+ "Shadows in the material environment are cast by these two light sources. In Android "
+ "development, shadows occur when light sources are blocked by sheets of material at "
+ "various positions along the z-axis. On the web, shadows are depicted by manipulating the "
+ "y-axis only. The following example shows the card with a height of 6dp.\n\n"
+
+ "Resting elevation.\n\n"
+
+ "All material objects, regardless of size, have a resting elevation, or default elevation "
+ "that does not change. If an object changes elevation, it should return to its resting "
+ "elevation as soon as possible.\n\n"
+
+ "Component elevations.\n\n"
+
+ "The resting elevation for a component type is consistent across apps (e.g., FAB elevation "
+ "does not vary from 6dp in one app to 16dp in another app).\n"
+ "Components may have different resting elevations across platforms, depending on the depth "
+ "of the environment (e.g., TV has a greater depth than mobile or desktop).\n\n"
+
+ "Responsive elevation and dynamic elevation offsets.\n\n"
+
+ "Some component types have responsive elevation, meaning they change elevation in response "
+ "to user input (e.g., normal, focused, and pressed) or system events. These elevation "
+ "changes are consistently implemented using dynamic elevation offsets.\n"
+ "Dynamic elevation offsets are the goal elevation that a component moves towards, relative "
+ "to the component’s resting state. They ensure that elevation changes are consistent "
+ "across actions and component types. For example, all components that lift on press have "
+ "the same elevation change relative to their resting elevation.\n"
+ "Once the input event is completed or cancelled, the component will return to its resting "
+ "elevation.\n\n"
+
+ "Avoiding elevation interference.\n\n"
+
+ "Components with responsive elevations may encounter other components as they move between "
+ "their resting elevations and dynamic elevation offsets. Because material cannot pass "
+ "through other material, components avoid interfering with one another any number of ways, "
+ "whether on a per component basis or using the entire app layout.\n"
+ "On a component level, components can move or be removed before they cause interference. "
+ "For example, a floating action button (FAB) can disappear or move off screen before a "
+ "user picks up a card, or it can move if a snackbar appears.\n"
+ "On the layout level, design your app layout to minimize opportunities for interference. "
+ "For example, position the FAB to one side of stream of a cards so the FAB won’t interfere "
+ "when a user tries to pick up one of cards.\n\n"
+ </string>
</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index abb0cb8a..b22e23e3 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -9,15 +9,19 @@
</style>
<style name="AppTheme.NoActionBar">
- <item name="android:windowContentOverlay">@null</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+ </style>
+
+ <style name="AppTheme.NoActionBarWithTranslucentStatusBar" parent="AppTheme.NoActionBar">
+ <item name="android:windowTranslucentStatus">true</item>
</style>
<style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
- <item name="android:windowContentOverlay">@null</item>
- <item name="windowActionBarOverlay">true</item>
- <item name="colorPrimary">@android:color/transparent</item>
+ <item name="colorPrimary">@color/transparentActionBarColor</item>
+ <item name="android:windowTranslucentStatus">true</item>
+ <item name="android:windowTranslucentNavigation">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />