Skip to content

Commit

Permalink
Show MultiReddits list.
Browse files Browse the repository at this point in the history
  • Loading branch information
Docile-Alligator committed Dec 13, 2019
1 parent 2f5cdcb commit b9893c6
Show file tree
Hide file tree
Showing 23 changed files with 1,300 additions and 14 deletions.
5 changes: 4 additions & 1 deletion app/src/main/AndroidManifest.xml
Expand Up @@ -21,7 +21,10 @@
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:replace="android:label">

<activity android:name=".Activity.MultiRedditListingActivity"
android:label="@string/multi_reddit_listing_activity"
android:parentActivityName=".Activity.MainActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".Activity.ViewGIFActivity"
android:parentActivityName=".Activity.MainActivity"
Expand Down
Expand Up @@ -808,8 +808,10 @@ public boolean onCreateOptionsMenu(Menu menu) {
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_subscriptions_main_activity:
Intent subscriptionsIntent = new Intent(this, SubscribedThingListingActivity.class);
startActivity(subscriptionsIntent);
/*Intent subscriptionsIntent = new Intent(this, SubscribedThingListingActivity.class);
startActivity(subscriptionsIntent);*/
Intent multiIntent = new Intent(this, MultiRedditListingActivity.class);
startActivity(multiIntent);
return true;
case R.id.action_sort_main_activity:
if (viewPager.getCurrentItem() == 1 || viewPager.getCurrentItem() == 2) {
Expand Down
@@ -0,0 +1,241 @@
package ml.docilealligator.infinityforreddit.Activity;

import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.google.android.material.appbar.AppBarLayout;

import java.util.ArrayList;

import javax.inject.Inject;
import javax.inject.Named;

import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Adapter.MultiRedditListingRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.InsertMultiRedditAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.MultiReddit.GetMultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiRedditViewModel;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
import retrofit2.Retrofit;

public class MultiRedditListingActivity extends BaseActivity {

private static final String INSERT_MULTI_REDDIT_STATE = "ISSS";
private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS";

@BindView(R.id.appbar_layout_multi_reddit_listing_activity)
AppBarLayout mAppBarLayout;
@BindView(R.id.toolbar_multi_reddit_listing_activity)
Toolbar mToolbar;
@BindView(R.id.recycler_view_multi_reddit_listing_activity)
RecyclerView mRecyclerView;
@BindView(R.id.fetch_multi_reddit_listing_info_linear_layout_multi_reddit_listing_activity)
LinearLayout mErrorLinearLayout;
@BindView(R.id.fetch_multi_reddit_listing_info_image_view_multi_reddit_listing_activity)
ImageView mErrorImageView;
@BindView(R.id.fetch_multi_reddit_listing_info_text_view_multi_reddit_listing_activity)
TextView mErrorTextView;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;

MultiRedditViewModel mMultiRedditViewModel;
private RequestManager mGlide;

private boolean mNullAccessToken = false;
private String mAccessToken;
private String mAccountName;
private boolean mInsertSuccess = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_reddit_listing);

ButterKnife.bind(this);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources();

if ((resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet))
&& mSharedPreferences.getBoolean(SharedPreferencesUtils.IMMERSIVE_INTERFACE_KEY, true)) {
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

boolean lightNavBar = false;
if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true;
}
boolean finalLightNavBar = lightNavBar;

View decorView = window.getDecorView();
if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}
mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state) {
if (state == State.COLLAPSED) {
if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}
} else if (state == State.EXPANDED) {
if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}
}
}
});

int statusBarResourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (statusBarResourceId > 0) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mToolbar.getLayoutParams();
params.topMargin = getResources().getDimensionPixelSize(statusBarResourceId);
mToolbar.setLayoutParams(params);
}

int navBarResourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (navBarResourceId > 0) {
mRecyclerView.setPadding(0, 0, 0, resources.getDimensionPixelSize(navBarResourceId));
}
}
}

setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

if (savedInstanceState != null) {
mInsertSuccess = savedInstanceState.getBoolean(INSERT_MULTI_REDDIT_STATE);
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndBindView();
} else {
bindView();
}
} else {
getCurrentAccountAndBindView();
}
}

private void getCurrentAccountAndBindView() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if (account == null) {
mNullAccessToken = true;
} else {
mAccessToken = account.getAccessToken();
mAccountName = account.getUsername();
}
bindView();
}).execute();
}

private void bindView() {
loadMultiReddits();

mGlide = Glide.with(this);

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
MultiRedditListingRecyclerViewAdapter adapter = new MultiRedditListingRecyclerViewAdapter(this,
mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken);
mRecyclerView.setAdapter(adapter);

mMultiRedditViewModel = new ViewModelProvider(this,
new MultiRedditViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName))
.get(MultiRedditViewModel.class);

mMultiRedditViewModel.getAllMultiReddits().observe(this, subscribedUserData -> {
if (subscribedUserData == null || subscribedUserData.size() == 0) {
mRecyclerView.setVisibility(View.GONE);
mErrorLinearLayout.setVisibility(View.VISIBLE);
mGlide.load(R.drawable.error_image).into(mErrorImageView);
} else {
mErrorLinearLayout.setVisibility(View.GONE);
mRecyclerView.setVisibility(View.VISIBLE);
mGlide.clear(mErrorImageView);
}
adapter.setMultiReddits(subscribedUserData);
});

mMultiRedditViewModel.getAllFavoriteMultiReddits().observe(this, favoriteSubscribedUserData -> {
if (favoriteSubscribedUserData != null && favoriteSubscribedUserData.size() > 0) {
mErrorLinearLayout.setVisibility(View.GONE);
mRecyclerView.setVisibility(View.VISIBLE);
mGlide.clear(mErrorImageView);
}
adapter.setFavoriteMultiReddits(favoriteSubscribedUserData);
});
}

private void loadMultiReddits() {
GetMultiReddit.getMyMultiReddits(mOauthRetrofit, mAccessToken, new GetMultiReddit.GetMultiRedditListener() {
@Override
public void success(ArrayList<MultiReddit> multiReddits) {
new InsertMultiRedditAsyncTask(mRedditDataRoomDatabase, multiReddits, () -> mInsertSuccess = true).execute();
}

@Override
public void failed() {
mInsertSuccess = false;
}
});
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}

return false;
}

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(INSERT_MULTI_REDDIT_STATE, mInsertSuccess);
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
outState.putString(ACCOUNT_NAME_STATE, mAccountName);
}

@Override
public SharedPreferences getSharedPreferences() {
return mSharedPreferences;
}
}

0 comments on commit b9893c6

Please sign in to comment.