Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2f5cdcb
commit b9893c6
Showing
23 changed files
with
1,300 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
241 changes: 241 additions & 0 deletions
241
...c/main/java/ml/docilealligator/infinityforreddit/Activity/MultiRedditListingActivity.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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; | ||
} | ||
} |
Oops, something went wrong.