Clean up code.

This commit is contained in:
Alex Ning 2019-09-29 22:11:34 +08:00
parent 456429725b
commit 76204ac044
127 changed files with 3781 additions and 3564 deletions

View File

@ -35,7 +35,7 @@ class AccessTokenAuthenticator implements Authenticator {
String accessToken = response.request().header(RedditUtils.AUTHORIZATION_KEY).substring(RedditUtils.AUTHORIZATION_BASE.length()); String accessToken = response.request().header(RedditUtils.AUTHORIZATION_KEY).substring(RedditUtils.AUTHORIZATION_BASE.length());
synchronized (this) { synchronized (this) {
Account account = mRedditDataRoomDatabase.accountDao().getCurrentAccount(); Account account = mRedditDataRoomDatabase.accountDao().getCurrentAccount();
if(account == null) { if (account == null) {
return null; return null;
} }
String accessTokenFromDatabase = account.getAccessToken(); String accessTokenFromDatabase = account.getAccessToken();
@ -66,7 +66,7 @@ class AccessTokenAuthenticator implements Authenticator {
Call<String> accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params); Call<String> accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params);
try { try {
retrofit2.Response response = accessTokenCall.execute(); retrofit2.Response response = accessTokenCall.execute();
if(response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
JSONObject jsonObject = new JSONObject((String) response.body()); JSONObject jsonObject = new JSONObject((String) response.body());
String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY); String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY);
mRedditDataRoomDatabase.accountDao().changeAccessToken(account.getUsername(), newAccessToken); mRedditDataRoomDatabase.accountDao().changeAccessToken(account.getUsername(), newAccessToken);

View File

@ -29,20 +29,20 @@ import javax.inject.Inject;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.Fragment.UserThingSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import ml.docilealligator.infinityforreddit.Fragment.UserThingSortTypeBottomSheetFragment;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
@ -59,26 +59,25 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
private static final String FRAGMENT_OUT_STATE = "FOS"; private static final String FRAGMENT_OUT_STATE = "FOS";
@BindView(R.id.collapsing_toolbar_layout_account_posts_activity) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R.id.collapsing_toolbar_layout_account_posts_activity)
@BindView(R.id.appbar_layout_account_posts_activity) AppBarLayout appBarLayout; CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.toolbar_account_posts_activity) Toolbar toolbar; @BindView(R.id.appbar_layout_account_posts_activity)
AppBarLayout appBarLayout;
@BindView(R.id.toolbar_account_posts_activity)
Toolbar toolbar;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean isInLazyMode = false; private boolean isInLazyMode = false;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private String mUserWhere; private String mUserWhere;
private Fragment mFragment; private Fragment mFragment;
private Menu mMenu; private Menu mMenu;
private AppBarLayout.LayoutParams params; private AppBarLayout.LayoutParams params;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -109,24 +108,24 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -151,7 +150,7 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -160,13 +159,13 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
} }
mUserWhere = getIntent().getExtras().getString(EXTRA_USER_WHERE); mUserWhere = getIntent().getExtras().getString(EXTRA_USER_WHERE);
if(mUserWhere.equals(PostDataSource.USER_WHERE_UPVOTED)) { if (mUserWhere.equals(PostDataSource.USER_WHERE_UPVOTED)) {
toolbar.setTitle(R.string.upvoted); toolbar.setTitle(R.string.upvoted);
} else if(mUserWhere.equals(PostDataSource.USER_WHERE_DOWNVOTED)) { } else if (mUserWhere.equals(PostDataSource.USER_WHERE_DOWNVOTED)) {
toolbar.setTitle(R.string.downvoted); toolbar.setTitle(R.string.downvoted);
} else if(mUserWhere.equals(PostDataSource.USER_WHERE_HIDDEN)) { } else if (mUserWhere.equals(PostDataSource.USER_WHERE_HIDDEN)) {
toolbar.setTitle(R.string.hidden); toolbar.setTitle(R.string.hidden);
} else if(mUserWhere.equals(PostDataSource.USER_WHERE_GILDED)){ } else if (mUserWhere.equals(PostDataSource.USER_WHERE_GILDED)) {
toolbar.setTitle(R.string.gilded); toolbar.setTitle(R.string.gilded);
} }
@ -175,12 +174,12 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams(); params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
if(savedInstanceState != null) { if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndInitializeFragment(); getCurrentAccountAndInitializeFragment();
} else { } else {
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE); mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
@ -193,7 +192,7 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
private void getCurrentAccountAndInitializeFragment() { private void getCurrentAccountAndInitializeFragment() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -221,7 +220,7 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
getMenuInflater().inflate(R.menu.account_posts_activity, menu); getMenuInflater().inflate(R.menu.account_posts_activity, menu);
mMenu = menu; mMenu = menu;
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_account_posts_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_account_posts_activity);
if(isInLazyMode) { if (isInLazyMode) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
@ -237,23 +236,23 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_refresh_account_posts_activity: case R.id.action_refresh_account_posts_activity:
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_lazy_mode_account_posts_activity).setTitle(R.string.action_start_lazy_mode); mMenu.findItem(R.id.action_lazy_mode_account_posts_activity).setTitle(R.string.action_start_lazy_mode);
} }
if(mFragment != null) { if (mFragment != null) {
((PostFragment) mFragment).refresh(); ((PostFragment) mFragment).refresh();
} }
return true; return true;
case R.id.action_lazy_mode_account_posts_activity: case R.id.action_lazy_mode_account_posts_activity:
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_account_posts_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_account_posts_activity);
if(isInLazyMode) { if (isInLazyMode) {
((FragmentCommunicator) mFragment).stopLazyMode(); ((FragmentCommunicator) mFragment).stopLazyMode();
isInLazyMode = false; isInLazyMode = false;
lazyModeItem.setTitle(R.string.action_start_lazy_mode); lazyModeItem.setTitle(R.string.action_start_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
} else { } else {
if(((FragmentCommunicator) mFragment).startLazyMode()) { if (((FragmentCommunicator) mFragment).startLazyMode()) {
isInLazyMode = true; isInLazyMode = true;
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
@ -288,7 +287,7 @@ public class AccountPostsActivity extends AppCompatActivity implements UserThing
@Override @Override
public void userThingSortTypeSelected(String sortType) { public void userThingSortTypeSelected(String sortType) {
if(mFragment != null) { if (mFragment != null) {
((PostFragment) mFragment).changeSortType(sortType); ((PostFragment) mFragment).changeSortType(sortType);
} }
} }

View File

@ -34,19 +34,19 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.Fragment.CommentsListingFragment;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.CommentsListingFragment;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -62,31 +62,31 @@ public class AccountSavedThingActivity extends AppCompatActivity {
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
private static final String IS_IN_LAZY_MODE_STATE = "IILMS"; private static final String IS_IN_LAZY_MODE_STATE = "IILMS";
@BindView(R.id.collapsing_toolbar_layout_account_saved_thing_activity) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R.id.collapsing_toolbar_layout_account_saved_thing_activity)
@BindView(R.id.appbar_layout_account_saved_thing_activity) AppBarLayout appBarLayout; CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.toolbar_account_saved_thing_activity) Toolbar toolbar; @BindView(R.id.appbar_layout_account_saved_thing_activity)
@BindView(R.id.tab_layout_tab_layout_account_saved_thing_activity_activity) TabLayout tabLayout; AppBarLayout appBarLayout;
@BindView(R.id.view_pager_account_saved_thing_activity) ViewPager viewPager; @BindView(R.id.toolbar_account_saved_thing_activity)
Toolbar toolbar;
@BindView(R.id.tab_layout_tab_layout_account_saved_thing_activity_activity)
TabLayout tabLayout;
@BindView(R.id.view_pager_account_saved_thing_activity)
ViewPager viewPager;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private SectionsPagerAdapter sectionsPagerAdapter; private SectionsPagerAdapter sectionsPagerAdapter;
private Menu mMenu; private Menu mMenu;
private AppBarLayout.LayoutParams params; private AppBarLayout.LayoutParams params;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private boolean isInLazyMode = false; private boolean isInLazyMode = false;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -117,24 +117,24 @@ public class AccountSavedThingActivity extends AppCompatActivity {
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -159,7 +159,7 @@ public class AccountSavedThingActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -172,12 +172,12 @@ public class AccountSavedThingActivity extends AppCompatActivity {
params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams(); params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
if(savedInstanceState != null) { if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndInitializeViewPager(); getCurrentAccountAndInitializeViewPager();
} else { } else {
initializeViewPager(); initializeViewPager();
@ -189,7 +189,7 @@ public class AccountSavedThingActivity extends AppCompatActivity {
private void getCurrentAccountAndInitializeViewPager() { private void getCurrentAccountAndInitializeViewPager() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -213,8 +213,8 @@ public class AccountSavedThingActivity extends AppCompatActivity {
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
if(isInLazyMode) { if (isInLazyMode) {
if(viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
sectionsPagerAdapter.resumeLazyMode(); sectionsPagerAdapter.resumeLazyMode();
} else { } else {
sectionsPagerAdapter.pauseLazyMode(); sectionsPagerAdapter.pauseLazyMode();
@ -254,14 +254,14 @@ public class AccountSavedThingActivity extends AppCompatActivity {
finish(); finish();
return true; return true;
case R.id.action_refresh_account_saved_thing_activity: case R.id.action_refresh_account_saved_thing_activity:
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_lazy_mode_account_saved_thing_activity).setTitle(R.string.action_start_lazy_mode); mMenu.findItem(R.id.action_lazy_mode_account_saved_thing_activity).setTitle(R.string.action_start_lazy_mode);
} }
sectionsPagerAdapter.refresh(); sectionsPagerAdapter.refresh();
return true; return true;
case R.id.action_lazy_mode_account_saved_thing_activity: case R.id.action_lazy_mode_account_saved_thing_activity:
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_account_saved_thing_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_account_saved_thing_activity);
if(isInLazyMode) { if (isInLazyMode) {
isInLazyMode = false; isInLazyMode = false;
sectionsPagerAdapter.stopLazyMode(); sectionsPagerAdapter.stopLazyMode();
lazyModeItem.setTitle(R.string.action_start_lazy_mode); lazyModeItem.setTitle(R.string.action_start_lazy_mode);
@ -269,7 +269,7 @@ public class AccountSavedThingActivity extends AppCompatActivity {
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
} else { } else {
isInLazyMode = true; isInLazyMode = true;
if(sectionsPagerAdapter.startLazyMode()) { if (sectionsPagerAdapter.startLazyMode()) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
appBarLayout.setExpanded(false); appBarLayout.setExpanded(false);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
@ -373,43 +373,43 @@ public class AccountSavedThingActivity extends AppCompatActivity {
public void refresh() { public void refresh() {
if (viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
if(postFragment != null) { if (postFragment != null) {
postFragment.refresh(); postFragment.refresh();
} }
} else { } else {
if(commentsListingFragment != null) { if (commentsListingFragment != null) {
commentsListingFragment.refresh(); commentsListingFragment.refresh();
} }
} }
} }
boolean startLazyMode() { boolean startLazyMode() {
if(postFragment != null) { if (postFragment != null) {
return ((FragmentCommunicator) postFragment).startLazyMode(); return ((FragmentCommunicator) postFragment).startLazyMode();
} }
return false; return false;
} }
void stopLazyMode() { void stopLazyMode() {
if(postFragment != null) { if (postFragment != null) {
((FragmentCommunicator) postFragment).stopLazyMode(); ((FragmentCommunicator) postFragment).stopLazyMode();
} }
} }
void resumeLazyMode() { void resumeLazyMode() {
if(postFragment != null) { if (postFragment != null) {
((FragmentCommunicator) postFragment).resumeLazyMode(false); ((FragmentCommunicator) postFragment).resumeLazyMode(false);
} }
} }
void pauseLazyMode() { void pauseLazyMode() {
if(postFragment != null) { if (postFragment != null) {
((FragmentCommunicator) postFragment).pauseLazyMode(false); ((FragmentCommunicator) postFragment).pauseLazyMode(false);
} }
} }
public void changeNSFW(boolean nsfw) { public void changeNSFW(boolean nsfw) {
if(postFragment != null) { if (postFragment != null) {
postFragment.changeNSFW(nsfw); postFragment.changeNSFW(nsfw);
} }
} }

View File

@ -39,16 +39,16 @@ import io.noties.markwon.AbstractMarkwonPlugin;
import io.noties.markwon.Markwon; import io.noties.markwon.Markwon;
import io.noties.markwon.MarkwonConfiguration; import io.noties.markwon.MarkwonConfiguration;
import io.noties.markwon.linkify.LinkifyPlugin; import io.noties.markwon.linkify.LinkifyPlugin;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.CommentData; import ml.docilealligator.infinityforreddit.CommentData;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SendComment; import ml.docilealligator.infinityforreddit.SendComment;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -70,11 +70,21 @@ public class CommentActivity extends AppCompatActivity {
private static final String NULL_ACCESS_TOKEN_STATE = "NATS"; private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
@BindView(R.id.coordinator_layout_comment_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_comment_activity)
@BindView(R.id.toolbar_comment_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.comment_parent_markwon_view_comment_activity) TextView commentParentMarkwonView; @BindView(R.id.toolbar_comment_activity)
@BindView(R.id.comment_edit_text_comment_activity) EditText commentEditText; Toolbar toolbar;
@BindView(R.id.comment_parent_markwon_view_comment_activity)
TextView commentParentMarkwonView;
@BindView(R.id.comment_edit_text_comment_activity)
EditText commentEditText;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String parentFullname; private String parentFullname;
@ -82,16 +92,6 @@ public class CommentActivity extends AppCompatActivity {
private int parentPosition; private int parentPosition;
private boolean isReplying; private boolean isReplying;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -113,9 +113,9 @@ public class CommentActivity extends AppCompatActivity {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -131,7 +131,7 @@ public class CommentActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -139,12 +139,12 @@ public class CommentActivity extends AppCompatActivity {
} }
if(savedInstanceState == null) { if (savedInstanceState == null) {
getCurrentAccount(); getCurrentAccount();
} else { } else {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccount(); getCurrentAccount();
} }
} }
@ -157,7 +157,7 @@ public class CommentActivity extends AppCompatActivity {
builder.linkResolver((view, link) -> { builder.linkResolver((view, link) -> {
Intent intent = new Intent(CommentActivity.this, LinkResolverActivity.class); Intent intent = new Intent(CommentActivity.this, LinkResolverActivity.class);
Uri uri = Uri.parse(link); Uri uri = Uri.parse(link);
if(uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
intent.setData(LinkResolverActivity.getRedditUriByPath(link)); intent.setData(LinkResolverActivity.getRedditUriByPath(link));
} else { } else {
intent.setData(uri); intent.setData(uri);
@ -173,7 +173,7 @@ public class CommentActivity extends AppCompatActivity {
parentDepth = intent.getExtras().getInt(EXTRA_PARENT_DEPTH_KEY); parentDepth = intent.getExtras().getInt(EXTRA_PARENT_DEPTH_KEY);
parentPosition = intent.getExtras().getInt(EXTRA_PARENT_POSITION_KEY); parentPosition = intent.getExtras().getInt(EXTRA_PARENT_POSITION_KEY);
isReplying = intent.getExtras().getBoolean(EXTRA_IS_REPLYING_KEY); isReplying = intent.getExtras().getBoolean(EXTRA_IS_REPLYING_KEY);
if(isReplying) { if (isReplying) {
toolbar.setTitle(getString(R.string.comment_activity_label_is_replying)); toolbar.setTitle(getString(R.string.comment_activity_label_is_replying));
} }
@ -181,14 +181,14 @@ public class CommentActivity extends AppCompatActivity {
commentEditText.requestFocus(); commentEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
} }
} }
private void getCurrentAccount() { private void getCurrentAccount() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -199,8 +199,8 @@ public class CommentActivity extends AppCompatActivity {
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.hideSoftInputFromWindow(commentEditText.getWindowToken(), 0); imm.hideSoftInputFromWindow(commentEditText.getWindowToken(), 0);
} }
} }
@ -218,7 +218,7 @@ public class CommentActivity extends AppCompatActivity {
finish(); finish();
return true; return true;
case R.id.action_send_comment_activity: case R.id.action_send_comment_activity:
if(commentEditText.getText() == null || commentEditText.getText().toString().equals("")) { if (commentEditText.getText() == null || commentEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.comment_content_required, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.comment_content_required, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
@ -238,7 +238,7 @@ public class CommentActivity extends AppCompatActivity {
Intent returnIntent = new Intent(); Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_COMMENT_DATA_KEY, commentData); returnIntent.putExtra(EXTRA_COMMENT_DATA_KEY, commentData);
returnIntent.putExtra(EXTRA_PARENT_FULLNAME_KEY, parentFullname); returnIntent.putExtra(EXTRA_PARENT_FULLNAME_KEY, parentFullname);
if(isReplying) { if (isReplying) {
returnIntent.putExtra(EXTRA_PARENT_POSITION_KEY, parentPosition); returnIntent.putExtra(EXTRA_PARENT_POSITION_KEY, parentPosition);
} }
setResult(RESULT_OK, returnIntent); setResult(RESULT_OK, returnIntent);
@ -251,7 +251,7 @@ public class CommentActivity extends AppCompatActivity {
item.setEnabled(true); item.setEnabled(true);
item.getIcon().setAlpha(255); item.getIcon().setAlpha(255);
if(errorMessage == null) { if (errorMessage == null) {
Snackbar.make(coordinatorLayout, R.string.send_comment_failed, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.send_comment_failed, Snackbar.LENGTH_SHORT).show();
} else { } else {
Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_SHORT).show();

View File

@ -35,13 +35,13 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditAPI; import ml.docilealligator.infinityforreddit.RedditAPI;
import ml.docilealligator.infinityforreddit.RedditUtils; import ml.docilealligator.infinityforreddit.RedditUtils;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -63,20 +63,20 @@ public class EditCommentActivity extends AppCompatActivity {
static final String EXTRA_EDITED_COMMENT_CONTENT = "EECC"; static final String EXTRA_EDITED_COMMENT_CONTENT = "EECC";
static final String EXTRA_EDITED_COMMENT_POSITION = "EECP"; static final String EXTRA_EDITED_COMMENT_POSITION = "EECP";
@BindView(R.id.coordinator_layout_edit_comment_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_edit_comment_activity)
@BindView(R.id.toolbar_edit_comment_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.post_text_content_edit_text_edit_comment_activity) EditText contentEditText; @BindView(R.id.toolbar_edit_comment_activity)
Toolbar toolbar;
private String mFullName; @BindView(R.id.post_text_content_edit_text_edit_comment_activity)
private String mAccessToken; EditText contentEditText;
private boolean isSubmitting = false;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private String mFullName;
private String mAccessToken;
private boolean isSubmitting = false;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -99,9 +99,9 @@ public class EditCommentActivity extends AppCompatActivity {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -117,7 +117,7 @@ public class EditCommentActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -134,7 +134,7 @@ public class EditCommentActivity extends AppCompatActivity {
contentEditText.requestFocus(); contentEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
} }
} }
@ -142,8 +142,8 @@ public class EditCommentActivity extends AppCompatActivity {
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.hideSoftInputFromWindow(contentEditText.getWindowToken(), 0); imm.hideSoftInputFromWindow(contentEditText.getWindowToken(), 0);
} }
} }
@ -156,8 +156,8 @@ public class EditCommentActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == R.id.action_send_edit_comment_activity) { if (item.getItemId() == R.id.action_send_edit_comment_activity) {
if(!isSubmitting) { if (!isSubmitting) {
isSubmitting = true; isSubmitting = true;
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
@ -174,7 +174,7 @@ public class EditCommentActivity extends AppCompatActivity {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
isSubmitting = false; isSubmitting = false;
if(response.isSuccessful()) { if (response.isSuccessful()) {
Toast.makeText(EditCommentActivity.this, R.string.edit_success, Toast.LENGTH_SHORT).show(); Toast.makeText(EditCommentActivity.this, R.string.edit_success, Toast.LENGTH_SHORT).show();
Intent returnIntent = new Intent(); Intent returnIntent = new Intent();
@ -197,7 +197,7 @@ public class EditCommentActivity extends AppCompatActivity {
} }
return true; return true;
} else if(item.getItemId() == android.R.id.home) { } else if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }

View File

@ -36,13 +36,13 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditAPI; import ml.docilealligator.infinityforreddit.RedditAPI;
import ml.docilealligator.infinityforreddit.RedditUtils; import ml.docilealligator.infinityforreddit.RedditUtils;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -61,21 +61,22 @@ public class EditPostActivity extends AppCompatActivity {
static final String EXTRA_FULLNAME = "EF"; static final String EXTRA_FULLNAME = "EF";
static final String EXTRA_ACCESS_TOKEN = "EAT"; static final String EXTRA_ACCESS_TOKEN = "EAT";
@BindView(R.id.coordinator_layout_edit_post_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_edit_post_activity)
@BindView(R.id.toolbar_edit_post_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.post_title_text_view_edit_post_activity) TextView titleTextView; @BindView(R.id.toolbar_edit_post_activity)
@BindView(R.id.post_text_content_edit_text_edit_post_activity) EditText contentEditText; Toolbar toolbar;
@BindView(R.id.post_title_text_view_edit_post_activity)
private String mFullName; TextView titleTextView;
private String mAccessToken; @BindView(R.id.post_text_content_edit_text_edit_post_activity)
private boolean isSubmitting = false; EditText contentEditText;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private String mFullName;
private String mAccessToken;
private boolean isSubmitting = false;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -98,9 +99,9 @@ public class EditPostActivity extends AppCompatActivity {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -116,7 +117,7 @@ public class EditPostActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -134,7 +135,7 @@ public class EditPostActivity extends AppCompatActivity {
contentEditText.requestFocus(); contentEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
} }
} }
@ -142,8 +143,8 @@ public class EditPostActivity extends AppCompatActivity {
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.hideSoftInputFromWindow(contentEditText.getWindowToken(), 0); imm.hideSoftInputFromWindow(contentEditText.getWindowToken(), 0);
} }
} }
@ -156,8 +157,8 @@ public class EditPostActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == R.id.action_send_edit_post_activity) { if (item.getItemId() == R.id.action_send_edit_post_activity) {
if(!isSubmitting) { if (!isSubmitting) {
isSubmitting = true; isSubmitting = true;
Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
@ -187,7 +188,7 @@ public class EditPostActivity extends AppCompatActivity {
} }
return true; return true;
} else if(item.getItemId() == android.R.id.home) { } else if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }

View File

@ -29,22 +29,22 @@ import javax.inject.Inject;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.Fragment.SearchPostSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Fragment.SortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Fragment.UserThingSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.Post; import ml.docilealligator.infinityforreddit.Post;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Fragment.SearchPostSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Fragment.SortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import ml.docilealligator.infinityforreddit.Fragment.UserThingSortTypeBottomSheetFragment;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
@ -66,32 +66,30 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String FRAGMENT_OUT_STATE = "FOS"; private static final String FRAGMENT_OUT_STATE = "FOS";
@BindView(R.id.appbar_layout_filtered_posts_activity) AppBarLayout appBarLayout; @BindView(R.id.appbar_layout_filtered_posts_activity)
@BindView(R.id.collapsing_toolbar_layout_filtered_posts_activity) CollapsingToolbarLayout collapsingToolbarLayout; AppBarLayout appBarLayout;
@BindView(R.id.toolbar_filtered_posts_activity) Toolbar toolbar; @BindView(R.id.collapsing_toolbar_layout_filtered_posts_activity)
CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.toolbar_filtered_posts_activity)
Toolbar toolbar;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean isInLazyMode = false; private boolean isInLazyMode = false;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String name; private String name;
private int postType; private int postType;
private Fragment mFragment; private Fragment mFragment;
private Menu mMenu; private Menu mMenu;
private AppBarLayout.LayoutParams params; private AppBarLayout.LayoutParams params;
private SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment; private SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment;
private SortTypeBottomSheetFragment popularAndAllSortTypeBottomSheetFragment; private SortTypeBottomSheetFragment popularAndAllSortTypeBottomSheetFragment;
private SortTypeBottomSheetFragment subredditSortTypeBottomSheetFragment; private SortTypeBottomSheetFragment subredditSortTypeBottomSheetFragment;
private UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment; private UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment;
private SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment; private SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -122,24 +120,24 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -164,7 +162,7 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -182,11 +180,11 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
int filter = getIntent().getIntExtra(EXTRA_FILTER, Post.TEXT_TYPE); int filter = getIntent().getIntExtra(EXTRA_FILTER, Post.TEXT_TYPE);
String sortType = getIntent().getStringExtra(EXTRA_SORT_TYPE); String sortType = getIntent().getStringExtra(EXTRA_SORT_TYPE);
if(savedInstanceState != null) { if (savedInstanceState != null) {
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndBindView(filter, sortType); getCurrentAccountAndBindView(filter, sortType);
} else { } else {
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE); mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
@ -200,7 +198,7 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
private void getCurrentAccountAndBindView(int filter, String sortType) { private void getCurrentAccountAndBindView(int filter, String sortType) {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -227,7 +225,7 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
searchPostSortTypeBottomSheetFragment.setArguments(searchBundle); searchPostSortTypeBottomSheetFragment.setArguments(searchBundle);
break; break;
case PostDataSource.TYPE_SUBREDDIT: case PostDataSource.TYPE_SUBREDDIT:
if(name.equals("popular") || name.equals("all")) { if (name.equals("popular") || name.equals("all")) {
getSupportActionBar().setTitle(name.substring(0, 1).toUpperCase() + name.substring(1)); getSupportActionBar().setTitle(name.substring(0, 1).toUpperCase() + name.substring(1));
popularAndAllSortTypeBottomSheetFragment = new SortTypeBottomSheetFragment(); popularAndAllSortTypeBottomSheetFragment = new SortTypeBottomSheetFragment();
@ -273,7 +271,7 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
toolbar.setSubtitle(R.string.gif); toolbar.setSubtitle(R.string.gif);
} }
if(initializeFragment) { if (initializeFragment) {
mFragment = new PostFragment(); mFragment = new PostFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(PostFragment.EXTRA_NAME, name); bundle.putString(PostFragment.EXTRA_NAME, name);
@ -281,10 +279,10 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
bundle.putString(PostFragment.EXTRA_SORT_TYPE, sortType); bundle.putString(PostFragment.EXTRA_SORT_TYPE, sortType);
bundle.putInt(PostFragment.EXTRA_FILTER, filter); bundle.putInt(PostFragment.EXTRA_FILTER, filter);
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken); bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
if(postType == PostDataSource.TYPE_USER) { if (postType == PostDataSource.TYPE_USER) {
bundle.putString(PostFragment.EXTRA_USER_WHERE, getIntent().getStringExtra(EXTRA_USER_WHERE)); bundle.putString(PostFragment.EXTRA_USER_WHERE, getIntent().getStringExtra(EXTRA_USER_WHERE));
} }
if(postType == PostDataSource.TYPE_SEARCH) { if (postType == PostDataSource.TYPE_SEARCH) {
bundle.putString(PostFragment.EXTRA_QUERY, getIntent().getStringExtra(EXTRA_QUERY)); bundle.putString(PostFragment.EXTRA_QUERY, getIntent().getStringExtra(EXTRA_QUERY));
} }
mFragment.setArguments(bundle); mFragment.setArguments(bundle);
@ -297,7 +295,7 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
getMenuInflater().inflate(R.menu.filtered_posts_activity, menu); getMenuInflater().inflate(R.menu.filtered_posts_activity, menu);
mMenu = menu; mMenu = menu;
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_filtered_thing_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_filtered_thing_activity);
if(isInLazyMode) { if (isInLazyMode) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
@ -324,7 +322,7 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag()); searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
break; break;
case PostDataSource.TYPE_SUBREDDIT: case PostDataSource.TYPE_SUBREDDIT:
if(name.equals("popular") || name.equals("all")) { if (name.equals("popular") || name.equals("all")) {
popularAndAllSortTypeBottomSheetFragment.show(getSupportFragmentManager(), popularAndAllSortTypeBottomSheetFragment.getTag()); popularAndAllSortTypeBottomSheetFragment.show(getSupportFragmentManager(), popularAndAllSortTypeBottomSheetFragment.getTag());
} else { } else {
subredditSortTypeBottomSheetFragment.show(getSupportFragmentManager(), subredditSortTypeBottomSheetFragment.getTag()); subredditSortTypeBottomSheetFragment.show(getSupportFragmentManager(), subredditSortTypeBottomSheetFragment.getTag());
@ -335,23 +333,23 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
} }
return true; return true;
case R.id.action_refresh_filtered_thing_activity: case R.id.action_refresh_filtered_thing_activity:
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_lazy_mode_filtered_thing_activity).setTitle(R.string.action_start_lazy_mode); mMenu.findItem(R.id.action_lazy_mode_filtered_thing_activity).setTitle(R.string.action_start_lazy_mode);
} }
if(mFragment instanceof FragmentCommunicator) { if (mFragment instanceof FragmentCommunicator) {
((FragmentCommunicator) mFragment).refresh(); ((FragmentCommunicator) mFragment).refresh();
} }
return true; return true;
case R.id.action_lazy_mode_filtered_thing_activity: case R.id.action_lazy_mode_filtered_thing_activity:
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_filtered_thing_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_filtered_thing_activity);
if(isInLazyMode) { if (isInLazyMode) {
((FragmentCommunicator) mFragment).stopLazyMode(); ((FragmentCommunicator) mFragment).stopLazyMode();
isInLazyMode = false; isInLazyMode = false;
lazyModeItem.setTitle(R.string.action_start_lazy_mode); lazyModeItem.setTitle(R.string.action_start_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
} else { } else {
if(((FragmentCommunicator) mFragment).startLazyMode()) { if (((FragmentCommunicator) mFragment).startLazyMode()) {
isInLazyMode = true; isInLazyMode = true;
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
@ -382,17 +380,17 @@ public class FilteredThingActivity extends AppCompatActivity implements SortType
@Override @Override
public void searchSortTypeSelected(String sortType) { public void searchSortTypeSelected(String sortType) {
((PostFragment)mFragment).changeSortType(sortType); ((PostFragment) mFragment).changeSortType(sortType);
} }
@Override @Override
public void sortTypeSelected(String sortType) { public void sortTypeSelected(String sortType) {
((PostFragment)mFragment).changeSortType(sortType); ((PostFragment) mFragment).changeSortType(sortType);
} }
@Override @Override
public void userThingSortTypeSelected(String sortType) { public void userThingSortTypeSelected(String sortType) {
((PostFragment)mFragment).changeSortType(sortType); ((PostFragment) mFragment).changeSortType(sortType);
} }
@Subscribe @Subscribe

View File

@ -43,6 +43,10 @@ public class LinkResolverActivity extends AppCompatActivity {
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
public static Uri getRedditUriByPath(String path) {
return Uri.parse("https://www.reddit.com" + path);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -59,7 +63,7 @@ public class LinkResolverActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -68,25 +72,25 @@ public class LinkResolverActivity extends AppCompatActivity {
} }
Uri uri = getIntent().getData(); Uri uri = getIntent().getData();
if(uri == null) { if (uri == null) {
Toast.makeText(this, R.string.no_link_available, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_link_available, Toast.LENGTH_SHORT).show();
finish(); finish();
} else { } else {
String path = uri.getPath(); String path = uri.getPath();
if(path == null) { if (path == null) {
deepLinkError(uri); deepLinkError(uri);
} else { } else {
if(path.endsWith("/")) { if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1); path = path.substring(0, path.length() - 1);
} }
String messageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME); String messageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
String newAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME); String newAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
if(path.matches(POST_PATTERN)) { if (path.matches(POST_PATTERN)) {
List<String> segments = uri.getPathSegments(); List<String> segments = uri.getPathSegments();
int commentsIndex = segments.lastIndexOf("comments"); int commentsIndex = segments.lastIndexOf("comments");
if(commentsIndex >=0 && commentsIndex < segments.size() - 1) { if (commentsIndex >= 0 && commentsIndex < segments.size() - 1) {
Intent intent = new Intent(this, ViewPostDetailActivity.class); Intent intent = new Intent(this, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1)); intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1));
intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); intent.putExtra(ViewPostDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
@ -95,10 +99,10 @@ public class LinkResolverActivity extends AppCompatActivity {
} else { } else {
deepLinkError(uri); deepLinkError(uri);
} }
} else if(path.matches(COMMENT_PATTERN)) { } else if (path.matches(COMMENT_PATTERN)) {
List<String> segments = uri.getPathSegments(); List<String> segments = uri.getPathSegments();
int commentsIndex = segments.lastIndexOf("comments"); int commentsIndex = segments.lastIndexOf("comments");
if(commentsIndex >=0 && commentsIndex < segments.size() - 1) { if (commentsIndex >= 0 && commentsIndex < segments.size() - 1) {
Intent intent = new Intent(this, ViewPostDetailActivity.class); Intent intent = new Intent(this, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1)); intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, segments.get(commentsIndex + 1));
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, segments.get(segments.size() - 1)); intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, segments.get(segments.size() - 1));
@ -108,9 +112,9 @@ public class LinkResolverActivity extends AppCompatActivity {
} else { } else {
deepLinkError(uri); deepLinkError(uri);
} }
} else if(path.matches(SUBREDDIT_PATTERN)) { } else if (path.matches(SUBREDDIT_PATTERN)) {
String subredditName = path.substring(3); String subredditName = path.substring(3);
if(subredditName.equals("popular") || subredditName.equals("all")) { if (subredditName.equals("popular") || subredditName.equals("all")) {
Intent intent = new Intent(this, MainActivity.class); Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(MainActivity.EXTRA_POST_TYPE, subredditName); intent.putExtra(MainActivity.EXTRA_POST_TYPE, subredditName);
intent.putExtra(MainActivity.EXTRA_MESSSAGE_FULLNAME, messageFullname); intent.putExtra(MainActivity.EXTRA_MESSSAGE_FULLNAME, messageFullname);
@ -123,13 +127,13 @@ public class LinkResolverActivity extends AppCompatActivity {
intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); intent.putExtra(ViewSubredditDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
startActivity(intent); startActivity(intent);
} }
} else if(path.matches(USER_PATTERN_1)) { } else if (path.matches(USER_PATTERN_1)) {
Intent intent = new Intent(this, ViewUserDetailActivity.class); Intent intent = new Intent(this, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, path.substring(6)); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, path.substring(6));
intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName); intent.putExtra(ViewUserDetailActivity.EXTRA_NEW_ACCOUNT_NAME, newAccountName);
startActivity(intent); startActivity(intent);
} else if(path.matches(USER_PATTERN_2)) { } else if (path.matches(USER_PATTERN_2)) {
Intent intent = new Intent(this, ViewUserDetailActivity.class); Intent intent = new Intent(this, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, path.substring(3)); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, path.substring(3));
intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname); intent.putExtra(ViewUserDetailActivity.EXTRA_MESSAGE_FULLNAME, messageFullname);
@ -147,14 +151,14 @@ public class LinkResolverActivity extends AppCompatActivity {
private void deepLinkError(Uri uri) { private void deepLinkError(Uri uri) {
PackageManager pm = getPackageManager(); PackageManager pm = getPackageManager();
ArrayList<ResolveInfo> resolveInfos = getCustomTabsPackages(pm); ArrayList<ResolveInfo> resolveInfos = getCustomTabsPackages(pm);
if(!resolveInfos.isEmpty()) { if (!resolveInfos.isEmpty()) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
// add share action to menu list // add share action to menu list
builder.addDefaultShareMenuItem(); builder.addDefaultShareMenuItem();
builder.setToolbarColor(getResources().getColor(R.color.colorPrimary)); builder.setToolbarColor(getResources().getColor(R.color.colorPrimary));
CustomTabsIntent customTabsIntent = builder.build(); CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.intent.setPackage(resolveInfos.get(0).activityInfo.packageName); customTabsIntent.intent.setPackage(resolveInfos.get(0).activityInfo.packageName);
if(uri.getScheme() == null) { if (uri.getScheme() == null) {
uri = Uri.parse("http://" + uri.toString()); uri = Uri.parse("http://" + uri.toString());
} }
try { try {
@ -195,21 +199,17 @@ public class LinkResolverActivity extends AppCompatActivity {
String currentPackageName = getApplicationContext().getPackageName(); String currentPackageName = getApplicationContext().getPackageName();
for(ResolveInfo info : activities) { for (ResolveInfo info : activities) {
if(!info.activityInfo.packageName.equals(currentPackageName)) { if (!info.activityInfo.packageName.equals(currentPackageName)) {
packageNames.add(info.activityInfo.packageName); packageNames.add(info.activityInfo.packageName);
} }
} }
if(!packageNames.isEmpty()) { if (!packageNames.isEmpty()) {
intent.setPackage(packageNames.get(0)); intent.setPackage(packageNames.get(0));
startActivity(intent); startActivity(intent);
} else { } else {
Toast.makeText(this, R.string.no_browser_found, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_browser_found, Toast.LENGTH_SHORT).show();
} }
} }
public static Uri getRedditUriByPath(String path) {
return Uri.parse("https://www.reddit.com" + path);
}
} }

View File

@ -29,9 +29,9 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AsyncTask.ParseAndInsertNewAccountAsyncTask;
import ml.docilealligator.infinityforreddit.FetchMyInfo; import ml.docilealligator.infinityforreddit.FetchMyInfo;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.AsyncTask.ParseAndInsertNewAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ParseAndSaveAccountInfo; import ml.docilealligator.infinityforreddit.ParseAndSaveAccountInfo;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditAPI; import ml.docilealligator.infinityforreddit.RedditAPI;
@ -50,23 +50,19 @@ import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES;
public class LoginActivity extends AppCompatActivity { public class LoginActivity extends AppCompatActivity {
@BindView(R.id.toolbar_login_activity) Toolbar toolbar; @BindView(R.id.toolbar_login_activity)
Toolbar toolbar;
private String authCode;
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
RedditDataRoomDatabase mRedditDataRoomDatabase; RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private String authCode;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -89,7 +85,7 @@ public class LoginActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -114,16 +110,17 @@ public class LoginActivity extends AppCompatActivity {
String url = uriBuilder.toString(); String url = uriBuilder.toString();
CookieManager.getInstance().removeAllCookies(aBoolean -> {}); CookieManager.getInstance().removeAllCookies(aBoolean -> {
});
webView.loadUrl(url); webView.loadUrl(url);
webView.setWebViewClient(new WebViewClient() { webView.setWebViewClient(new WebViewClient() {
@Override @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("&code=") || url.contains("?code=")) { if (url.contains("&code=") || url.contains("?code=")) {
Uri uri = Uri.parse(url); Uri uri = Uri.parse(url);
String state = uri.getQueryParameter("state"); String state = uri.getQueryParameter("state");
if(state.equals(RedditUtils.STATE)) { if (state.equals(RedditUtils.STATE)) {
authCode = uri.getQueryParameter("code"); authCode = uri.getQueryParameter("code");
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
@ -136,10 +133,10 @@ public class LoginActivity extends AppCompatActivity {
accessTokenCall.enqueue(new Callback<String>() { accessTokenCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
try { try {
String accountResponse = response.body(); String accountResponse = response.body();
if(accountResponse == null) { if (accountResponse == null) {
//Handle error //Handle error
return; return;
} }

View File

@ -57,39 +57,39 @@ import java.util.concurrent.TimeUnit;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.Account.Account; import ml.docilealligator.infinityforreddit.Account.Account;
import ml.docilealligator.infinityforreddit.Account.AccountViewModel; import ml.docilealligator.infinityforreddit.Account.AccountViewModel;
import ml.docilealligator.infinityforreddit.Adapter.AccountRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.Adapter.AccountRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.InsertSubscribedThingsAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchToAnonymousAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.ChangeFontSizeEvent; import ml.docilealligator.infinityforreddit.Event.ChangeFontSizeEvent;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent; import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FetchMyInfo; import ml.docilealligator.infinityforreddit.FetchMyInfo;
import ml.docilealligator.infinityforreddit.FetchSubscribedThing; import ml.docilealligator.infinityforreddit.FetchSubscribedThing;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.AsyncTask.InsertSubscribedThingsAsyncTask;
import ml.docilealligator.infinityforreddit.ParseAndSaveAccountInfo;
import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment; import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.Fragment.PostTypeBottomSheetFragment; import ml.docilealligator.infinityforreddit.Fragment.PostTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Fragment.SortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.ParseAndSaveAccountInfo;
import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.PullNotificationWorker; import ml.docilealligator.infinityforreddit.PullNotificationWorker;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.ReadMessage; import ml.docilealligator.infinityforreddit.ReadMessage;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Fragment.SortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData; import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData;
import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData;
import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchToAnonymousAccountAsyncTask;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -121,44 +121,71 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
private static final int LOGIN_ACTIVITY_REQUEST_CODE = 0; private static final int LOGIN_ACTIVITY_REQUEST_CODE = 0;
@BindView(R.id.drawer_layout) DrawerLayout drawer; @BindView(R.id.drawer_layout)
@BindView(R.id.coordinator_layout_main_activity) CoordinatorLayout coordinatorLayout; DrawerLayout drawer;
@BindView(R.id.appbar_layout_main_activity) AppBarLayout appBarLayout; @BindView(R.id.coordinator_layout_main_activity)
@BindView(R.id.view_pager_main_activity) ViewPager viewPager; CoordinatorLayout coordinatorLayout;
@BindView(R.id.collapsing_toolbar_layout_main_activity) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R.id.appbar_layout_main_activity)
@BindView(R.id.toolbar) Toolbar toolbar; AppBarLayout appBarLayout;
@BindView(R.id.nested_scroll_view_main_activity) NestedScrollView nestedScrollView; @BindView(R.id.view_pager_main_activity)
@BindView(R.id.all_drawer_items_linear_layout_main_activity) LinearLayout allDrawerItemsLinearLayout; ViewPager viewPager;
@BindView(R.id.account_label_main_activity) TextView accountLabelTextView; @BindView(R.id.collapsing_toolbar_layout_main_activity)
@BindView(R.id.profile_linear_layout_main_activity) LinearLayout profileLinearLayout; CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.subscriptions_linear_layout_main_activity) LinearLayout subscriptionLinearLayout; @BindView(R.id.toolbar)
@BindView(R.id.inbox_linear_layout_main_activity) LinearLayout inboxLinearLayout; Toolbar toolbar;
@BindView(R.id.post_label_main_activity) TextView postLabelTextView; @BindView(R.id.nested_scroll_view_main_activity)
@BindView(R.id.upvoted_linear_layout_main_activity) LinearLayout upvotedLinearLayout; NestedScrollView nestedScrollView;
@BindView(R.id.downvoted_linear_layout_main_activity) LinearLayout downvotedLinearLayout; @BindView(R.id.all_drawer_items_linear_layout_main_activity)
@BindView(R.id.hidden_linear_layout_main_activity) LinearLayout hiddenLinearLayout; LinearLayout allDrawerItemsLinearLayout;
@BindView(R.id.saved_linear_layout_main_activity) LinearLayout savedLinearLayout; @BindView(R.id.account_label_main_activity)
@BindView(R.id.gilded_linear_layout_main_activity) LinearLayout gildedLinearLayout; TextView accountLabelTextView;
@BindView(R.id.divider_main_activity) View divider; @BindView(R.id.profile_linear_layout_main_activity)
@BindView(R.id.settings_linear_layout_main_activity) LinearLayout settingsLinearLayout; LinearLayout profileLinearLayout;
@BindView(R.id.account_recycler_view_main_activity) RecyclerView accountRecyclerView; @BindView(R.id.subscriptions_linear_layout_main_activity)
@BindView(R.id.tab_layout_main_activity) TabLayout tabLayout; LinearLayout subscriptionLinearLayout;
@BindView(R.id.fab_main_activity) FloatingActionButton fab; @BindView(R.id.inbox_linear_layout_main_activity)
LinearLayout inboxLinearLayout;
@BindView(R.id.post_label_main_activity)
TextView postLabelTextView;
@BindView(R.id.upvoted_linear_layout_main_activity)
LinearLayout upvotedLinearLayout;
@BindView(R.id.downvoted_linear_layout_main_activity)
LinearLayout downvotedLinearLayout;
@BindView(R.id.hidden_linear_layout_main_activity)
LinearLayout hiddenLinearLayout;
@BindView(R.id.saved_linear_layout_main_activity)
LinearLayout savedLinearLayout;
@BindView(R.id.gilded_linear_layout_main_activity)
LinearLayout gildedLinearLayout;
@BindView(R.id.divider_main_activity)
View divider;
@BindView(R.id.settings_linear_layout_main_activity)
LinearLayout settingsLinearLayout;
@BindView(R.id.account_recycler_view_main_activity)
RecyclerView accountRecyclerView;
@BindView(R.id.tab_layout_main_activity)
TabLayout tabLayout;
@BindView(R.id.fab_main_activity)
FloatingActionButton fab;
AccountViewModel accountViewModel;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private SectionsPagerAdapter sectionsPagerAdapter; private SectionsPagerAdapter sectionsPagerAdapter;
private TextView mAccountNameTextView; private TextView mAccountNameTextView;
private TextView mKarmaTextView; private TextView mKarmaTextView;
private GifImageView mProfileImageView; private GifImageView mProfileImageView;
private ImageView mBannerImageView; private ImageView mBannerImageView;
private ImageView mDropIconImageView; private ImageView mDropIconImageView;
private RequestManager glide; private RequestManager glide;
private AppBarLayout.LayoutParams params; private AppBarLayout.LayoutParams params;
private PostTypeBottomSheetFragment postTypeBottomSheetFragment; private PostTypeBottomSheetFragment postTypeBottomSheetFragment;
private SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment; private SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment;
private SortTypeBottomSheetFragment popularAndAllSortTypeBottomSheetFragment; private SortTypeBottomSheetFragment popularAndAllSortTypeBottomSheetFragment;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
@ -170,23 +197,9 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
private boolean mDrawerOnAccountSwitch = false; private boolean mDrawerOnAccountSwitch = false;
private String mMessageFullname; private String mMessageFullname;
private String mNewAccountName; private String mNewAccountName;
private Menu mMenu; private Menu mMenu;
private boolean isInLazyMode = false; private boolean isInLazyMode = false;
AccountViewModel accountViewModel;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme_NoActionBarWithTransparentStatusBar); setTheme(R.style.AppTheme_NoActionBarWithTransparentStatusBar);
@ -215,12 +228,12 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
@ -229,12 +242,12 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if(state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if(state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -270,7 +283,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -300,7 +313,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams(); params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams();
if(savedInstanceState != null) { if (savedInstanceState != null) {
mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE); mFetchUserInfoSuccess = savedInstanceState.getBoolean(FETCH_USER_INFO_STATE);
mFetchSubscriptionsSuccess = savedInstanceState.getBoolean(FETCH_SUBSCRIPTIONS_STATE); mFetchSubscriptionsSuccess = savedInstanceState.getBoolean(FETCH_SUBSCRIPTIONS_STATE);
mDrawerOnAccountSwitch = savedInstanceState.getBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE); mDrawerOnAccountSwitch = savedInstanceState.getBoolean(DRAWER_ON_ACCOUNT_SWITCH_STATE);
@ -314,7 +327,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE); mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE); mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
} else { } else {
bindView(); bindView();
@ -326,7 +339,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
fab.setOnClickListener(view -> { fab.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(MainActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(MainActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -342,17 +355,17 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
WorkManager workManager = WorkManager.getInstance(this); WorkManager workManager = WorkManager.getInstance(this);
if(mNewAccountName != null) { if (mNewAccountName != null) {
if(account == null || !account.getUsername().equals(mNewAccountName)) { if (account == null || !account.getUsername().equals(mNewAccountName)) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> { new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> {
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName())); EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
mNewAccountName = null; mNewAccountName = null;
if(newAccount == null) { if (newAccount == null) {
mNullAccessToken = true; mNullAccessToken = true;
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(false); mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(false);
} }
} else { } else {
@ -362,12 +375,12 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
mBannerImageUrl = newAccount.getBannerImageUrl(); mBannerImageUrl = newAccount.getBannerImageUrl();
mKarma = newAccount.getKarma(); mKarma = newAccount.getKarma();
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(true); mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(true);
} }
} }
if(enableNotification) { if (enableNotification) {
Constraints constraints = new Constraints.Builder() Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) .setRequiredNetworkType(NetworkType.CONNECTED)
.build(); .build();
@ -393,11 +406,11 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
mBannerImageUrl = account.getBannerImageUrl(); mBannerImageUrl = account.getBannerImageUrl();
mKarma = account.getKarma(); mKarma = account.getKarma();
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(true); mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(true);
} }
if(enableNotification) { if (enableNotification) {
Constraints constraints = new Constraints.Builder() Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) .setRequiredNetworkType(NetworkType.CONNECTED)
.build(); .build();
@ -417,10 +430,10 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
bindView(); bindView();
} }
} else { } else {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(false); mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(false);
} }
} else { } else {
@ -430,12 +443,12 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
mBannerImageUrl = account.getBannerImageUrl(); mBannerImageUrl = account.getBannerImageUrl();
mKarma = account.getKarma(); mKarma = account.getKarma();
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(true); mMenu.findItem(R.id.action_subscriptions_main_activity).setVisible(true);
} }
} }
if(enableNotification) { if (enableNotification) {
Constraints constraints = new Constraints.Builder() Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED) .setRequiredNetworkType(NetworkType.CONNECTED)
.build(); .build();
@ -458,7 +471,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
private void bindView() { private void bindView() {
if(isDestroyed()) { if (isDestroyed()) {
return; return;
} }
@ -469,13 +482,14 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
fab.show(); fab.show();
if(isInLazyMode) { if (isInLazyMode) {
if(position == sectionsPagerAdapter.getCurrentLazyModeFragmentPosition()) { if (position == sectionsPagerAdapter.getCurrentLazyModeFragmentPosition()) {
sectionsPagerAdapter.resumeLazyMode(); sectionsPagerAdapter.resumeLazyMode();
} else { } else {
sectionsPagerAdapter.pauseLazyMode(); sectionsPagerAdapter.pauseLazyMode();
@ -484,7 +498,8 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
@Override @Override
public void onPageScrollStateChanged(int state) {} public void onPageScrollStateChanged(int state) {
}
}); });
loadSubscriptions(); loadSubscriptions();
@ -493,41 +508,41 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
AccountRecyclerViewAdapter adapter = new AccountRecyclerViewAdapter(this, glide, mAccountName, AccountRecyclerViewAdapter adapter = new AccountRecyclerViewAdapter(this, glide, mAccountName,
new AccountRecyclerViewAdapter.ItemSelectedListener() { new AccountRecyclerViewAdapter.ItemSelectedListener() {
@Override @Override
public void accountSelected(Account account) { public void accountSelected(Account account) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, account.getUsername(), newAccount -> { new SwitchAccountAsyncTask(mRedditDataRoomDatabase, account.getUsername(), newAccount -> {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
finish();
}).execute();
}
@Override
public void addAccountSelected() {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivityForResult(intent, LOGIN_ACTIVITY_REQUEST_CODE);
}
@Override
public void anonymousSelected() {
new SwitchToAnonymousAccountAsyncTask(mRedditDataRoomDatabase, false,
() -> {
Intent intent = new Intent(MainActivity.this, MainActivity.class); Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent); startActivity(intent);
finish(); finish();
}).execute(); }).execute();
} }
@Override @Override
public void logoutSelected() { public void addAccountSelected() {
new SwitchToAnonymousAccountAsyncTask(mRedditDataRoomDatabase, true, Intent intent = new Intent(MainActivity.this, LoginActivity.class);
() -> { startActivityForResult(intent, LOGIN_ACTIVITY_REQUEST_CODE);
Intent intent = new Intent(MainActivity.this, MainActivity.class); }
startActivity(intent);
finish(); @Override
}).execute(); public void anonymousSelected() {
} new SwitchToAnonymousAccountAsyncTask(mRedditDataRoomDatabase, false,
}); () -> {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
finish();
}).execute();
}
@Override
public void logoutSelected() {
new SwitchToAnonymousAccountAsyncTask(mRedditDataRoomDatabase, true,
() -> {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
finish();
}).execute();
}
});
accountRecyclerView.setLayoutManager(new LinearLayoutManager(this)); accountRecyclerView.setLayoutManager(new LinearLayoutManager(this));
accountRecyclerView.setNestedScrollingEnabled(false); accountRecyclerView.setNestedScrollingEnabled(false);
@ -537,9 +552,9 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
new AccountViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName)).get(AccountViewModel.class); new AccountViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName)).get(AccountViewModel.class);
accountViewModel.getAccountsExceptCurrentAccountLiveData().observe(this, adapter::changeAccountsDataset); accountViewModel.getAccountsExceptCurrentAccountLiveData().observe(this, adapter::changeAccountsDataset);
if(getIntent().hasExtra(EXTRA_POST_TYPE)) { if (getIntent().hasExtra(EXTRA_POST_TYPE)) {
String type = getIntent().getStringExtra(EXTRA_POST_TYPE); String type = getIntent().getStringExtra(EXTRA_POST_TYPE);
if(type != null && type.equals("popular")) { if (type != null && type.equals("popular")) {
viewPager.setCurrentItem(1); viewPager.setCurrentItem(1);
} else { } else {
viewPager.setCurrentItem(2); viewPager.setCurrentItem(2);
@ -553,7 +568,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
mBannerImageView = header.findViewById(R.id.banner_image_view_nav_header_main); mBannerImageView = header.findViewById(R.id.banner_image_view_nav_header_main);
mDropIconImageView = header.findViewById(R.id.account_switcher_image_view_nav_header_main); mDropIconImageView = header.findViewById(R.id.account_switcher_image_view_nav_header_main);
if(mDrawerOnAccountSwitch) { if (mDrawerOnAccountSwitch) {
mDropIconImageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_baseline_arrow_drop_up_24px)); mDropIconImageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_baseline_arrow_drop_up_24px));
accountRecyclerView.setVisibility(View.VISIBLE); accountRecyclerView.setVisibility(View.VISIBLE);
allDrawerItemsLinearLayout.setVisibility(View.GONE); allDrawerItemsLinearLayout.setVisibility(View.GONE);
@ -564,7 +579,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
header.setOnClickListener(view -> { header.setOnClickListener(view -> {
if(mDrawerOnAccountSwitch) { if (mDrawerOnAccountSwitch) {
mDrawerOnAccountSwitch = false; mDrawerOnAccountSwitch = false;
mDropIconImageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_baseline_arrow_drop_down_24px)); mDropIconImageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_baseline_arrow_drop_down_24px));
accountRecyclerView.setVisibility(View.GONE); accountRecyclerView.setVisibility(View.GONE);
@ -579,10 +594,10 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
loadUserData(); loadUserData();
if(mAccessToken != null) { if (mAccessToken != null) {
mKarmaTextView.setText(getString(R.string.karma_info, mKarma)); mKarmaTextView.setText(getString(R.string.karma_info, mKarma));
mAccountNameTextView.setText(mAccountName); mAccountNameTextView.setText(mAccountName);
if(mMessageFullname != null) { if (mMessageFullname != null) {
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() { ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
@Override @Override
public void readSuccess() { public void readSuccess() {
@ -765,7 +780,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == LOGIN_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) { if (requestCode == LOGIN_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
Intent intent = new Intent(this, MainActivity.class); Intent intent = new Intent(this, MainActivity.class);
startActivity(intent); startActivity(intent);
finish(); finish();
@ -781,13 +796,13 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_main_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_main_activity);
MenuItem subscriptionsItem = mMenu.findItem(R.id.action_subscriptions_main_activity); MenuItem subscriptionsItem = mMenu.findItem(R.id.action_subscriptions_main_activity);
if(mAccessToken != null) { if (mAccessToken != null) {
subscriptionsItem.setVisible(true); subscriptionsItem.setVisible(true);
} else { } else {
subscriptionsItem.setVisible(false); subscriptionsItem.setVisible(false);
} }
if(isInLazyMode) { if (isInLazyMode) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
@ -808,7 +823,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
startActivity(subscriptionsIntent); startActivity(subscriptionsIntent);
return true; return true;
case R.id.action_sort_main_activity: case R.id.action_sort_main_activity:
if(viewPager.getCurrentItem() == 1 ||viewPager.getCurrentItem() == 2) { if (viewPager.getCurrentItem() == 1 || viewPager.getCurrentItem() == 2) {
popularAndAllSortTypeBottomSheetFragment.show(getSupportFragmentManager(), popularAndAllSortTypeBottomSheetFragment.getTag()); popularAndAllSortTypeBottomSheetFragment.show(getSupportFragmentManager(), popularAndAllSortTypeBottomSheetFragment.getTag());
} else { } else {
bestSortTypeBottomSheetFragment.show(getSupportFragmentManager(), bestSortTypeBottomSheetFragment.getTag()); bestSortTypeBottomSheetFragment.show(getSupportFragmentManager(), bestSortTypeBottomSheetFragment.getTag());
@ -820,7 +835,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.action_refresh_main_activity: case R.id.action_refresh_main_activity:
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_lazy_mode_main_activity).setTitle(R.string.action_start_lazy_mode); mMenu.findItem(R.id.action_lazy_mode_main_activity).setTitle(R.string.action_start_lazy_mode);
} }
sectionsPagerAdapter.refresh(); sectionsPagerAdapter.refresh();
@ -829,14 +844,14 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
return true; return true;
case R.id.action_lazy_mode_main_activity: case R.id.action_lazy_mode_main_activity:
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_main_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_main_activity);
if(isInLazyMode) { if (isInLazyMode) {
sectionsPagerAdapter.stopLazyMode(); sectionsPagerAdapter.stopLazyMode();
isInLazyMode = false; isInLazyMode = false;
lazyModeItem.setTitle(R.string.action_start_lazy_mode); lazyModeItem.setTitle(R.string.action_start_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
} else { } else {
if(sectionsPagerAdapter.startLazyMode()) { if (sectionsPagerAdapter.startLazyMode()) {
isInLazyMode = true; isInLazyMode = true;
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);
@ -918,7 +933,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
@Subscribe @Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) { public void onAccountSwitchEvent(SwitchAccountEvent event) {
if(!getClass().getName().equals(event.excludeActivityClassName)) { if (!getClass().getName().equals(event.excludeActivityClassName)) {
finish(); finish();
} }
} }
@ -945,8 +960,8 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
@NonNull @NonNull
@Override @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
if(mAccessToken == null) { if (mAccessToken == null) {
if(position == 0) { if (position == 0) {
PostFragment fragment = new PostFragment(); PostFragment fragment = new PostFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT); bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT);
@ -978,7 +993,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken); bundle.putString(PostFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
fragment.setArguments(bundle); fragment.setArguments(bundle);
return fragment; return fragment;
} else if(position == 1) { } else if (position == 1) {
PostFragment fragment = new PostFragment(); PostFragment fragment = new PostFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT); bundle.putInt(PostFragment.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT);
@ -1002,9 +1017,8 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
@Override @Override
public int getCount() public int getCount() {
{ if (mAccessToken == null) {
if(mAccessToken == null) {
return 2; return 2;
} }
return 3; return 3;
@ -1012,7 +1026,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
@Override @Override
public CharSequence getPageTitle(int position) { public CharSequence getPageTitle(int position) {
if(mAccessToken == null) { if (mAccessToken == null) {
switch (position) { switch (position) {
case 0: case 0:
return "Popular"; return "Popular";
@ -1036,7 +1050,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
@Override @Override
public Object instantiateItem(@NonNull ViewGroup container, int position) { public Object instantiateItem(@NonNull ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position); Fragment fragment = (Fragment) super.instantiateItem(container, position);
if(mAccessToken == null) { if (mAccessToken == null) {
switch (position) { switch (position) {
case 0: case 0:
popularPostFragment = (PostFragment) fragment; popularPostFragment = (PostFragment) fragment;
@ -1060,7 +1074,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
boolean startLazyMode() { boolean startLazyMode() {
if(mAccessToken == null) { if (mAccessToken == null) {
switch (viewPager.getCurrentItem()) { switch (viewPager.getCurrentItem()) {
case 0: case 0:
return ((FragmentCommunicator) popularPostFragment).startLazyMode(); return ((FragmentCommunicator) popularPostFragment).startLazyMode();
@ -1082,7 +1096,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
void stopLazyMode() { void stopLazyMode() {
if(mAccessToken == null) { if (mAccessToken == null) {
switch (getCurrentLazyModeFragmentPosition()) { switch (getCurrentLazyModeFragmentPosition()) {
case 0: case 0:
((FragmentCommunicator) popularPostFragment).stopLazyMode(); ((FragmentCommunicator) popularPostFragment).stopLazyMode();
@ -1107,7 +1121,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
void resumeLazyMode() { void resumeLazyMode() {
if(mAccessToken == null) { if (mAccessToken == null) {
switch (getCurrentLazyModeFragmentPosition()) { switch (getCurrentLazyModeFragmentPosition()) {
case 0: case 0:
((FragmentCommunicator) popularPostFragment).resumeLazyMode(false); ((FragmentCommunicator) popularPostFragment).resumeLazyMode(false);
@ -1132,7 +1146,7 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
void pauseLazyMode() { void pauseLazyMode() {
if(mAccessToken == null) { if (mAccessToken == null) {
switch (getCurrentLazyModeFragmentPosition()) { switch (getCurrentLazyModeFragmentPosition()) {
case 0: case 0:
((FragmentCommunicator) popularPostFragment).pauseLazyMode(false); ((FragmentCommunicator) popularPostFragment).pauseLazyMode(false);
@ -1155,24 +1169,24 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
int getCurrentLazyModeFragmentPosition() { int getCurrentLazyModeFragmentPosition() {
if(mAccessToken == null) { if (mAccessToken == null) {
if(!isInLazyMode) { if (!isInLazyMode) {
return -1; return -1;
} else if(popularPostFragment != null && ((FragmentCommunicator) popularPostFragment).isInLazyMode()) { } else if (popularPostFragment != null && ((FragmentCommunicator) popularPostFragment).isInLazyMode()) {
return 0; return 0;
} else if(allPostFragment != null && ((FragmentCommunicator) allPostFragment).isInLazyMode()) { } else if (allPostFragment != null && ((FragmentCommunicator) allPostFragment).isInLazyMode()) {
return 1; return 1;
} else { } else {
return -1; return -1;
} }
} else { } else {
if(!isInLazyMode) { if (!isInLazyMode) {
return -1; return -1;
} else if(frontPagePostFragment != null && ((FragmentCommunicator) frontPagePostFragment).isInLazyMode()) { } else if (frontPagePostFragment != null && ((FragmentCommunicator) frontPagePostFragment).isInLazyMode()) {
return 0; return 0;
} else if(popularPostFragment != null && ((FragmentCommunicator) popularPostFragment).isInLazyMode()) { } else if (popularPostFragment != null && ((FragmentCommunicator) popularPostFragment).isInLazyMode()) {
return 1; return 1;
} else if(allPostFragment != null && ((FragmentCommunicator) allPostFragment).isInLazyMode()) { } else if (allPostFragment != null && ((FragmentCommunicator) allPostFragment).isInLazyMode()) {
return 2; return 2;
} else { } else {
return -1; return -1;
@ -1181,8 +1195,8 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
void changeSortType(String sortType) { void changeSortType(String sortType) {
if(mAccessToken == null) { if (mAccessToken == null) {
if(viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
popularPostFragment.changeSortType(sortType); popularPostFragment.changeSortType(sortType);
} else { } else {
allPostFragment.changeSortType(sortType); allPostFragment.changeSortType(sortType);
@ -1202,30 +1216,30 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
public void refresh() { public void refresh() {
if(mAccessToken == null) { if (mAccessToken == null) {
if(viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
if(popularPostFragment != null) { if (popularPostFragment != null) {
((FragmentCommunicator) popularPostFragment).refresh(); ((FragmentCommunicator) popularPostFragment).refresh();
} }
} else { } else {
if(allPostFragment != null) { if (allPostFragment != null) {
((FragmentCommunicator) allPostFragment).refresh(); ((FragmentCommunicator) allPostFragment).refresh();
} }
} }
} else { } else {
switch (viewPager.getCurrentItem()) { switch (viewPager.getCurrentItem()) {
case 0: case 0:
if(frontPagePostFragment != null) { if (frontPagePostFragment != null) {
((FragmentCommunicator) frontPagePostFragment).refresh(); ((FragmentCommunicator) frontPagePostFragment).refresh();
} }
break; break;
case 1: case 1:
if(popularPostFragment != null) { if (popularPostFragment != null) {
((FragmentCommunicator) popularPostFragment).refresh(); ((FragmentCommunicator) popularPostFragment).refresh();
} }
break; break;
case 2: case 2:
if(allPostFragment != null) { if (allPostFragment != null) {
((FragmentCommunicator) allPostFragment).refresh(); ((FragmentCommunicator) allPostFragment).refresh();
} }
} }
@ -1233,13 +1247,13 @@ public class MainActivity extends AppCompatActivity implements SortTypeBottomShe
} }
void changeNSFW(boolean nsfw) { void changeNSFW(boolean nsfw) {
if(frontPagePostFragment != null) { if (frontPagePostFragment != null) {
frontPagePostFragment.changeNSFW(nsfw); frontPagePostFragment.changeNSFW(nsfw);
} }
if(popularPostFragment != null) { if (popularPostFragment != null) {
popularPostFragment.changeNSFW(nsfw); popularPostFragment.changeNSFW(nsfw);
} }
if(allPostFragment != null) { if (allPostFragment != null) {
allPostFragment.changeNSFW(nsfw); allPostFragment.changeNSFW(nsfw);
} }
} }

View File

@ -91,21 +91,47 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
private static final int PICK_IMAGE_REQUEST_CODE = 1; private static final int PICK_IMAGE_REQUEST_CODE = 1;
private static final int CAPTURE_IMAGE_REQUEST_CODE = 2; private static final int CAPTURE_IMAGE_REQUEST_CODE = 2;
@BindView(R.id.coordinator_layout_post_image_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_post_image_activity)
@BindView(R.id.toolbar_post_image_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.subreddit_icon_gif_image_view_post_image_activity) GifImageView iconGifImageView; @BindView(R.id.toolbar_post_image_activity)
@BindView(R.id.subreddit_name_text_view_post_image_activity) TextView subredditNameTextView; Toolbar toolbar;
@BindView(R.id.rules_button_post_image_activity) Button rulesButton; @BindView(R.id.subreddit_icon_gif_image_view_post_image_activity)
@BindView(R.id.flair_custom_text_view_post_image_activity) CustomTextView flairTextView; GifImageView iconGifImageView;
@BindView(R.id.spoiler_custom_text_view_post_image_activity) CustomTextView spoilerTextView; @BindView(R.id.subreddit_name_text_view_post_image_activity)
@BindView(R.id.nsfw_custom_text_view_post_image_activity) CustomTextView nsfwTextView; TextView subredditNameTextView;
@BindView(R.id.post_title_edit_text_post_image_activity) EditText titleEditText; @BindView(R.id.rules_button_post_image_activity)
@BindView(R.id.select_image_constraint_layout_post_image_activity) ConstraintLayout constraintLayout; Button rulesButton;
@BindView(R.id.capture_fab_post_image_activity) FloatingActionButton captureFab; @BindView(R.id.flair_custom_text_view_post_image_activity)
@BindView(R.id.select_from_library_fab_post_image_activity) FloatingActionButton selectFromLibraryFab; CustomTextView flairTextView;
@BindView(R.id.select_again_text_view_post_image_activity) TextView selectAgainTextView; @BindView(R.id.spoiler_custom_text_view_post_image_activity)
@BindView(R.id.image_view_post_image_activity) ImageView imageView; CustomTextView spoilerTextView;
@BindView(R.id.nsfw_custom_text_view_post_image_activity)
CustomTextView nsfwTextView;
@BindView(R.id.post_title_edit_text_post_image_activity)
EditText titleEditText;
@BindView(R.id.select_image_constraint_layout_post_image_activity)
ConstraintLayout constraintLayout;
@BindView(R.id.capture_fab_post_image_activity)
FloatingActionButton captureFab;
@BindView(R.id.select_from_library_fab_post_image_activity)
FloatingActionButton selectFromLibraryFab;
@BindView(R.id.select_again_text_view_post_image_activity)
TextView selectAgainTextView;
@BindView(R.id.image_view_post_image_activity)
ImageView imageView;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
@Named("upload_media")
Retrofit mUploadMediaRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
@ -116,34 +142,14 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
private boolean loadSubredditIconSuccessful = true; private boolean loadSubredditIconSuccessful = true;
private boolean isPosting; private boolean isPosting;
private Uri imageUri; private Uri imageUri;
private Flair flair; private Flair flair;
private boolean isSpoiler = false; private boolean isSpoiler = false;
private boolean isNSFW = false; private boolean isNSFW = false;
private Menu mMemu; private Menu mMemu;
private RequestManager mGlide; private RequestManager mGlide;
private FlairBottomSheetFragment flairSelectionBottomSheetFragment; private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
private Snackbar mPostingSnackbar; private Snackbar mPostingSnackbar;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
@Named("upload_media")
Retrofit mUploadMediaRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -165,9 +171,9 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -183,7 +189,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -198,12 +204,12 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
if(savedInstanceState != null) { if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccount(); getCurrentAccount();
} }
@ -217,33 +223,33 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE); isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE); isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
if(savedInstanceState.getString(IMAGE_URI_STATE) != null) { if (savedInstanceState.getString(IMAGE_URI_STATE) != null) {
imageUri = Uri.parse(savedInstanceState.getString(IMAGE_URI_STATE)); imageUri = Uri.parse(savedInstanceState.getString(IMAGE_URI_STATE));
loadImage(); loadImage();
} }
if(subredditName != null) { if (subredditName != null) {
subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor)); subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor));
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
flairTextView.setVisibility(View.VISIBLE); flairTextView.setVisibility(View.VISIBLE);
if(!loadSubredditIconSuccessful) { if (!loadSubredditIconSuccessful) {
loadSubredditIcon(); loadSubredditIcon();
} }
} }
displaySubredditIcon(); displaySubredditIcon();
if(isPosting) { if (isPosting) {
mPostingSnackbar.show(); mPostingSnackbar.show();
} }
if(flair != null) { if (flair != null) {
flairTextView.setText(flair.getText()); flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isSpoiler) { if (isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isNSFW) { if (isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
} }
} else { } else {
@ -251,7 +257,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
isPosting = false; isPosting = false;
if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) { if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
loadSubredditIconSuccessful = false; loadSubredditIconSuccessful = false;
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME); subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
subredditSelected = true; subredditSelected = true;
@ -265,7 +271,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
} }
imageUri = getIntent().getData(); imageUri = getIntent().getData();
if(imageUri != null) { if (imageUri != null) {
loadImage(); loadImage();
} }
} }
@ -281,11 +287,11 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}); });
rulesButton.setOnClickListener(view -> { rulesButton.setOnClickListener(view -> {
if(subredditName == null) { if (subredditName == null) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
} else { } else {
Intent intent = new Intent(this, RulesActivity.class); Intent intent = new Intent(this, RulesActivity.class);
if(subredditIsUser) { if (subredditIsUser) {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else { } else {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
@ -295,7 +301,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}); });
flairTextView.setOnClickListener(view -> { flairTextView.setOnClickListener(view -> {
if(flair == null) { if (flair == null) {
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment(); flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken); bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
@ -310,7 +316,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}); });
spoilerTextView.setOnClickListener(view -> { spoilerTextView.setOnClickListener(view -> {
if(!isSpoiler) { if (!isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
isSpoiler = true; isSpoiler = true;
} else { } else {
@ -320,7 +326,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}); });
nsfwTextView.setOnClickListener(view -> { nsfwTextView.setOnClickListener(view -> {
if(!isNSFW) { if (!isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
isNSFW = true; isNSFW = true;
} else { } else {
@ -331,7 +337,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
captureFab.setOnClickListener(view -> { captureFab.setOnClickListener(view -> {
Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(pictureIntent.resolveActivity(getPackageManager()) != null) { if (pictureIntent.resolveActivity(getPackageManager()) != null) {
try { try {
imageUri = FileProvider.getUriForFile(this, "ml.docilealligator.infinityforreddit.provider", imageUri = FileProvider.getUriForFile(this, "ml.docilealligator.infinityforreddit.provider",
File.createTempFile("temp_img", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES))); File.createTempFile("temp_img", ".jpg", getExternalFilesDir(Environment.DIRECTORY_PICTURES)));
@ -349,7 +355,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
Intent intent = new Intent(); Intent intent = new Intent();
intent.setType("image/*"); intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT); intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE); startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_from_gallery)), PICK_IMAGE_REQUEST_CODE);
}); });
selectAgainTextView.setOnClickListener(view -> { selectAgainTextView.setOnClickListener(view -> {
@ -363,7 +369,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
private void getCurrentAccount() { private void getCurrentAccount() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -380,7 +386,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
} }
private void displaySubredditIcon() { private void displaySubredditIcon() {
if(iconUrl != null && !iconUrl.equals("")) { if (iconUrl != null && !iconUrl.equals("")) {
mGlide.load(iconUrl) mGlide.load(iconUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -415,7 +421,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.post_image_activity, menu); getMenuInflater().inflate(R.menu.post_image_activity, menu);
mMemu = menu; mMemu = menu;
if(isPosting) { if (isPosting) {
mMemu.findItem(R.id.action_send_post_image_activity).setEnabled(false); mMemu.findItem(R.id.action_send_post_image_activity).setEnabled(false);
mMemu.findItem(R.id.action_send_post_image_activity).getIcon().setAlpha(130); mMemu.findItem(R.id.action_send_post_image_activity).getIcon().setAlpha(130);
} }
@ -426,11 +432,11 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case android.R.id.home: case android.R.id.home:
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
return true; return true;
} else { } else {
if(!titleEditText.getText().toString().equals("") || imageUri != null) { if (!titleEditText.getText().toString().equals("") || imageUri != null) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
return true; return true;
} }
@ -438,17 +444,17 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
finish(); finish();
return true; return true;
case R.id.action_send_post_image_activity: case R.id.action_send_post_image_activity:
if(!subredditSelected) { if (!subredditSelected) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(titleEditText.getText() == null || titleEditText.getText().toString().equals("")) { if (titleEditText.getText() == null || titleEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(imageUri == null) { if (imageUri == null) {
Snackbar.make(coordinatorLayout, R.string.select_an_image, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_an_image, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
@ -461,7 +467,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
mPostingSnackbar.show(); mPostingSnackbar.show();
String subredditName; String subredditName;
if(subredditIsUser) { if (subredditIsUser) {
subredditName = "u_" + subredditNameTextView.getText().toString(); subredditName = "u_" + subredditNameTextView.getText().toString();
} else { } else {
subredditName = subredditNameTextView.getText().toString(); subredditName = subredditNameTextView.getText().toString();
@ -478,7 +484,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_IMAGE); intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_IMAGE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent); startForegroundService(intent);
} else { } else {
startService(intent); startService(intent);
@ -492,10 +498,10 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
} else { } else {
if(!titleEditText.getText().toString().equals("") || imageUri != null) { if (!titleEditText.getText().toString().equals("") || imageUri != null) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
} else { } else {
finish(); finish();
@ -510,7 +516,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
outState.putString(SUBREDDIT_ICON_STATE, iconUrl); outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected); outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser); outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser);
if(imageUri != null) { if (imageUri != null) {
outState.putString(IMAGE_URI_STATE, imageUri.toString()); outState.putString(IMAGE_URI_STATE, imageUri.toString());
} }
outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful); outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful);
@ -526,8 +532,8 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) { if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME); subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
subredditSelected = true; subredditSelected = true;
@ -542,9 +548,9 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
flairTextView.setText(getString(R.string.flair)); flairTextView.setText(getString(R.string.flair));
flair = null; flair = null;
} }
} else if(requestCode == PICK_IMAGE_REQUEST_CODE) { } else if (requestCode == PICK_IMAGE_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
if(data == null) { if (data == null) {
Snackbar.make(coordinatorLayout, R.string.error_getting_image, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.error_getting_image, Snackbar.LENGTH_SHORT).show();
return; return;
} }
@ -552,8 +558,8 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
imageUri = data.getData(); imageUri = data.getData();
loadImage(); loadImage();
} }
} else if(requestCode == CAPTURE_IMAGE_REQUEST_CODE) { } else if (requestCode == CAPTURE_IMAGE_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
loadImage(); loadImage();
} }
} }
@ -581,7 +587,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
public void onSubmitImagePostEvent(SubmitImagePostEvent submitImagePostEvent) { public void onSubmitImagePostEvent(SubmitImagePostEvent submitImagePostEvent) {
isPosting = false; isPosting = false;
mPostingSnackbar.dismiss(); mPostingSnackbar.dismiss();
if(submitImagePostEvent.postSuccess) { if (submitImagePostEvent.postSuccess) {
Intent intent = new Intent(PostImageActivity.this, ViewUserDetailActivity.class); Intent intent = new Intent(PostImageActivity.this, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mAccountName);
startActivity(intent); startActivity(intent);

View File

@ -79,17 +79,36 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0; private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
@BindView(R.id.coordinator_layout_post_link_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_post_link_activity)
@BindView(R.id.toolbar_post_link_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.subreddit_icon_gif_image_view_post_link_activity) GifImageView iconGifImageView; @BindView(R.id.toolbar_post_link_activity)
@BindView(R.id.subreddit_name_text_view_post_link_activity) TextView subredditNameTextView; Toolbar toolbar;
@BindView(R.id.rules_button_post_link_activity) Button rulesButton; @BindView(R.id.subreddit_icon_gif_image_view_post_link_activity)
@BindView(R.id.flair_custom_text_view_post_link_activity) CustomTextView flairTextView; GifImageView iconGifImageView;
@BindView(R.id.spoiler_custom_text_view_post_link_activity) CustomTextView spoilerTextView; @BindView(R.id.subreddit_name_text_view_post_link_activity)
@BindView(R.id.nsfw_custom_text_view_post_link_activity) CustomTextView nsfwTextView; TextView subredditNameTextView;
@BindView(R.id.post_title_edit_text_post_link_activity) EditText titleEditText; @BindView(R.id.rules_button_post_link_activity)
@BindView(R.id.post_link_edit_text_post_link_activity) EditText contentEditText; Button rulesButton;
@BindView(R.id.flair_custom_text_view_post_link_activity)
CustomTextView flairTextView;
@BindView(R.id.spoiler_custom_text_view_post_link_activity)
CustomTextView spoilerTextView;
@BindView(R.id.nsfw_custom_text_view_post_link_activity)
CustomTextView nsfwTextView;
@BindView(R.id.post_title_edit_text_post_link_activity)
EditText titleEditText;
@BindView(R.id.post_link_edit_text_post_link_activity)
EditText contentEditText;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String iconUrl; private String iconUrl;
@ -98,30 +117,14 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
private boolean subredditIsUser; private boolean subredditIsUser;
private boolean loadSubredditIconSuccessful = true; private boolean loadSubredditIconSuccessful = true;
private boolean isPosting; private boolean isPosting;
private Flair flair; private Flair flair;
private boolean isSpoiler = false; private boolean isSpoiler = false;
private boolean isNSFW = false; private boolean isNSFW = false;
private Menu mMemu; private Menu mMemu;
private RequestManager mGlide; private RequestManager mGlide;
private FlairBottomSheetFragment flairSelectionBottomSheetFragment; private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
private Snackbar mPostingSnackbar; private Snackbar mPostingSnackbar;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -143,9 +146,9 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -161,7 +164,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -176,11 +179,11 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
if(savedInstanceState != null) { if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccount(); getCurrentAccount();
} }
@ -194,28 +197,28 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE); isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE); isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
if(subredditName != null) { if (subredditName != null) {
subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor)); subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor));
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
flairTextView.setVisibility(View.VISIBLE); flairTextView.setVisibility(View.VISIBLE);
if(!loadSubredditIconSuccessful) { if (!loadSubredditIconSuccessful) {
loadSubredditIcon(); loadSubredditIcon();
} }
} }
displaySubredditIcon(); displaySubredditIcon();
if(isPosting) { if (isPosting) {
mPostingSnackbar.show(); mPostingSnackbar.show();
} }
if(flair != null) { if (flair != null) {
flairTextView.setText(flair.getText()); flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isSpoiler) { if (isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isNSFW) { if (isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
} }
} else { } else {
@ -223,7 +226,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
isPosting = false; isPosting = false;
if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) { if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
loadSubredditIconSuccessful = false; loadSubredditIconSuccessful = false;
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME); subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
subredditSelected = true; subredditSelected = true;
@ -238,7 +241,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
} }
String link = getIntent().getStringExtra(EXTRA_LINK); String link = getIntent().getStringExtra(EXTRA_LINK);
if(link != null) { if (link != null) {
contentEditText.setText(link); contentEditText.setText(link);
} }
} }
@ -254,11 +257,11 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
}); });
rulesButton.setOnClickListener(view -> { rulesButton.setOnClickListener(view -> {
if(subredditName == null) { if (subredditName == null) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
} else { } else {
Intent intent = new Intent(this, RulesActivity.class); Intent intent = new Intent(this, RulesActivity.class);
if(subredditIsUser) { if (subredditIsUser) {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else { } else {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
@ -268,7 +271,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
}); });
flairTextView.setOnClickListener(view -> { flairTextView.setOnClickListener(view -> {
if(flair == null) { if (flair == null) {
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment(); flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken); bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
@ -283,7 +286,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
}); });
spoilerTextView.setOnClickListener(view -> { spoilerTextView.setOnClickListener(view -> {
if(!isSpoiler) { if (!isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
isSpoiler = true; isSpoiler = true;
} else { } else {
@ -293,7 +296,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
}); });
nsfwTextView.setOnClickListener(view -> { nsfwTextView.setOnClickListener(view -> {
if(!isNSFW) { if (!isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
isNSFW = true; isNSFW = true;
} else { } else {
@ -305,7 +308,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
private void getCurrentAccount() { private void getCurrentAccount() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -314,7 +317,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
} }
private void displaySubredditIcon() { private void displaySubredditIcon() {
if(iconUrl != null && !iconUrl.equals("")) { if (iconUrl != null && !iconUrl.equals("")) {
mGlide.load(iconUrl) mGlide.load(iconUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -348,7 +351,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.post_link_activity, menu); getMenuInflater().inflate(R.menu.post_link_activity, menu);
mMemu = menu; mMemu = menu;
if(isPosting) { if (isPosting) {
mMemu.findItem(R.id.action_send_post_link_activity).setEnabled(false); mMemu.findItem(R.id.action_send_post_link_activity).setEnabled(false);
mMemu.findItem(R.id.action_send_post_link_activity).getIcon().setAlpha(130); mMemu.findItem(R.id.action_send_post_link_activity).getIcon().setAlpha(130);
} }
@ -359,11 +362,11 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case android.R.id.home: case android.R.id.home:
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
return true; return true;
} else { } else {
if(!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) { if (!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
return true; return true;
} }
@ -371,17 +374,17 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
finish(); finish();
return true; return true;
case R.id.action_send_post_link_activity: case R.id.action_send_post_link_activity:
if(!subredditSelected) { if (!subredditSelected) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(titleEditText.getText() == null || titleEditText.getText().toString().equals("")) { if (titleEditText.getText() == null || titleEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(contentEditText.getText() == null || contentEditText.getText().toString().equals("")) { if (contentEditText.getText() == null || contentEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.link_required, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.link_required, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
@ -394,7 +397,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
mPostingSnackbar.show(); mPostingSnackbar.show();
String subredditName; String subredditName;
if(subredditIsUser) { if (subredditIsUser) {
subredditName = "u_" + subredditNameTextView.getText().toString(); subredditName = "u_" + subredditNameTextView.getText().toString();
} else { } else {
subredditName = subredditNameTextView.getText().toString(); subredditName = subredditNameTextView.getText().toString();
@ -420,10 +423,10 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
} else { } else {
if(!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) { if (!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
} else { } else {
finish(); finish();
@ -450,8 +453,8 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) { if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME); subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
subredditSelected = true; subredditSelected = true;
@ -491,7 +494,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
public void onSubmitLinkPostEvent(SubmitTextOrLinkPostEvent submitTextOrLinkPostEvent) { public void onSubmitLinkPostEvent(SubmitTextOrLinkPostEvent submitTextOrLinkPostEvent) {
isPosting = false; isPosting = false;
mPostingSnackbar.dismiss(); mPostingSnackbar.dismiss();
if(submitTextOrLinkPostEvent.postSuccess) { if (submitTextOrLinkPostEvent.postSuccess) {
Intent intent = new Intent(PostLinkActivity.this, ViewPostDetailActivity.class); Intent intent = new Intent(PostLinkActivity.this, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, submitTextOrLinkPostEvent.post); intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, submitTextOrLinkPostEvent.post);
startActivity(intent); startActivity(intent);
@ -499,7 +502,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
} else { } else {
mMemu.findItem(R.id.action_send_post_link_activity).setEnabled(true); mMemu.findItem(R.id.action_send_post_link_activity).setEnabled(true);
mMemu.findItem(R.id.action_send_post_link_activity).getIcon().setAlpha(255); mMemu.findItem(R.id.action_send_post_link_activity).getIcon().setAlpha(255);
if(submitTextOrLinkPostEvent.errorMessage == null) { if (submitTextOrLinkPostEvent.errorMessage == null) {
Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show();
} else { } else {
Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage.substring(0, 1).toUpperCase() Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage.substring(0, 1).toUpperCase()

View File

@ -79,17 +79,36 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0; private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
@BindView(R.id.coordinator_layout_post_text_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_post_text_activity)
@BindView(R.id.toolbar_post_text_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.subreddit_icon_gif_image_view_search_activity) GifImageView iconGifImageView; @BindView(R.id.toolbar_post_text_activity)
@BindView(R.id.subreddit_name_text_view_search_activity) TextView subredditNameTextView; Toolbar toolbar;
@BindView(R.id.rules_button_post_text_activity) Button rulesButton; @BindView(R.id.subreddit_icon_gif_image_view_search_activity)
@BindView(R.id.flair_custom_text_view_post_text_activity) CustomTextView flairTextView; GifImageView iconGifImageView;
@BindView(R.id.spoiler_custom_text_view_post_text_activity) CustomTextView spoilerTextView; @BindView(R.id.subreddit_name_text_view_search_activity)
@BindView(R.id.nsfw_custom_text_view_post_text_activity) CustomTextView nsfwTextView; TextView subredditNameTextView;
@BindView(R.id.post_title_edit_text_post_text_activity) EditText titleEditText; @BindView(R.id.rules_button_post_text_activity)
@BindView(R.id.post_text_content_edit_text_post_text_activity) EditText contentEditText; Button rulesButton;
@BindView(R.id.flair_custom_text_view_post_text_activity)
CustomTextView flairTextView;
@BindView(R.id.spoiler_custom_text_view_post_text_activity)
CustomTextView spoilerTextView;
@BindView(R.id.nsfw_custom_text_view_post_text_activity)
CustomTextView nsfwTextView;
@BindView(R.id.post_title_edit_text_post_text_activity)
EditText titleEditText;
@BindView(R.id.post_text_content_edit_text_post_text_activity)
EditText contentEditText;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String iconUrl; private String iconUrl;
@ -98,30 +117,14 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
private boolean subredditIsUser; private boolean subredditIsUser;
private boolean loadSubredditIconSuccessful = true; private boolean loadSubredditIconSuccessful = true;
private boolean isPosting; private boolean isPosting;
private Flair flair; private Flair flair;
private boolean isSpoiler = false; private boolean isSpoiler = false;
private boolean isNSFW = false; private boolean isNSFW = false;
private Menu mMemu; private Menu mMemu;
private RequestManager mGlide; private RequestManager mGlide;
private FlairBottomSheetFragment flairSelectionBottomSheetFragment; private FlairBottomSheetFragment flairSelectionBottomSheetFragment;
private Snackbar mPostingSnackbar; private Snackbar mPostingSnackbar;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -143,9 +146,9 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -161,7 +164,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -176,11 +179,11 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
if(savedInstanceState != null) { if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccount(); getCurrentAccount();
} }
@ -194,28 +197,28 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE); isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE); isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
if(subredditName != null) { if (subredditName != null) {
subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor)); subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor));
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
flairTextView.setVisibility(View.VISIBLE); flairTextView.setVisibility(View.VISIBLE);
if(!loadSubredditIconSuccessful) { if (!loadSubredditIconSuccessful) {
loadSubredditIcon(); loadSubredditIcon();
} }
} }
displaySubredditIcon(); displaySubredditIcon();
if(isPosting) { if (isPosting) {
mPostingSnackbar.show(); mPostingSnackbar.show();
} }
if(flair != null) { if (flair != null) {
flairTextView.setText(flair.getText()); flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isSpoiler) { if (isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isNSFW) { if (isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
} }
} else { } else {
@ -223,7 +226,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
isPosting = false; isPosting = false;
if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) { if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
loadSubredditIconSuccessful = false; loadSubredditIconSuccessful = false;
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME); subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
subredditSelected = true; subredditSelected = true;
@ -238,7 +241,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
} }
String text = getIntent().getStringExtra(EXTRA_CONTENT); String text = getIntent().getStringExtra(EXTRA_CONTENT);
if(text != null) { if (text != null) {
contentEditText.setText(text); contentEditText.setText(text);
} }
} }
@ -254,11 +257,11 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
}); });
rulesButton.setOnClickListener(view -> { rulesButton.setOnClickListener(view -> {
if(subredditName == null) { if (subredditName == null) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
} else { } else {
Intent intent = new Intent(this, RulesActivity.class); Intent intent = new Intent(this, RulesActivity.class);
if(subredditIsUser) { if (subredditIsUser) {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else { } else {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
@ -268,11 +271,11 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
}); });
flairTextView.setOnClickListener(view -> { flairTextView.setOnClickListener(view -> {
if(flair == null) { if (flair == null) {
flairSelectionBottomSheetFragment = new FlairBottomSheetFragment(); flairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken); bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
if(subredditIsUser) { if (subredditIsUser) {
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, "u_" + subredditName); bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else { } else {
bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName); bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, subredditName);
@ -287,7 +290,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
}); });
spoilerTextView.setOnClickListener(view -> { spoilerTextView.setOnClickListener(view -> {
if(!isSpoiler) { if (!isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
isSpoiler = true; isSpoiler = true;
} else { } else {
@ -297,7 +300,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
}); });
nsfwTextView.setOnClickListener(view -> { nsfwTextView.setOnClickListener(view -> {
if(!isNSFW) { if (!isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
isNSFW = true; isNSFW = true;
} else { } else {
@ -309,7 +312,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
private void getCurrentAccount() { private void getCurrentAccount() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -318,7 +321,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
} }
private void displaySubredditIcon() { private void displaySubredditIcon() {
if(iconUrl != null && !iconUrl.equals("")) { if (iconUrl != null && !iconUrl.equals("")) {
mGlide.load(iconUrl) mGlide.load(iconUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -353,7 +356,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.post_text_activity, menu); getMenuInflater().inflate(R.menu.post_text_activity, menu);
mMemu = menu; mMemu = menu;
if(isPosting) { if (isPosting) {
mMemu.findItem(R.id.action_send_post_text_activity).setEnabled(false); mMemu.findItem(R.id.action_send_post_text_activity).setEnabled(false);
mMemu.findItem(R.id.action_send_post_text_activity).getIcon().setAlpha(130); mMemu.findItem(R.id.action_send_post_text_activity).getIcon().setAlpha(130);
} }
@ -364,11 +367,11 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case android.R.id.home: case android.R.id.home:
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
return true; return true;
} else { } else {
if(!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) { if (!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
return true; return true;
} }
@ -376,12 +379,12 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
finish(); finish();
return true; return true;
case R.id.action_send_post_text_activity: case R.id.action_send_post_text_activity:
if(!subredditSelected) { if (!subredditSelected) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(titleEditText.getText() == null || titleEditText.getText().toString().equals("")) { if (titleEditText.getText() == null || titleEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
@ -394,7 +397,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
mPostingSnackbar.show(); mPostingSnackbar.show();
String subredditName; String subredditName;
if(subredditIsUser) { if (subredditIsUser) {
subredditName = "u_" + subredditNameTextView.getText().toString(); subredditName = "u_" + subredditNameTextView.getText().toString();
} else { } else {
subredditName = subredditNameTextView.getText().toString(); subredditName = subredditNameTextView.getText().toString();
@ -420,10 +423,10 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
} else { } else {
if(!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) { if (!titleEditText.getText().toString().equals("") || !contentEditText.getText().toString().equals("")) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
} else { } else {
finish(); finish();
@ -450,8 +453,8 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) { if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME); subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); iconUrl = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
subredditSelected = true; subredditSelected = true;
@ -491,7 +494,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
public void onSubmitTextPostEvent(SubmitTextOrLinkPostEvent submitTextOrLinkPostEvent) { public void onSubmitTextPostEvent(SubmitTextOrLinkPostEvent submitTextOrLinkPostEvent) {
isPosting = false; isPosting = false;
mPostingSnackbar.dismiss(); mPostingSnackbar.dismiss();
if(submitTextOrLinkPostEvent.postSuccess) { if (submitTextOrLinkPostEvent.postSuccess) {
Intent intent = new Intent(PostTextActivity.this, ViewPostDetailActivity.class); Intent intent = new Intent(PostTextActivity.this, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, submitTextOrLinkPostEvent.post); intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, submitTextOrLinkPostEvent.post);
startActivity(intent); startActivity(intent);
@ -499,7 +502,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
} else { } else {
mMemu.findItem(R.id.action_send_post_text_activity).setEnabled(true); mMemu.findItem(R.id.action_send_post_text_activity).setEnabled(true);
mMemu.findItem(R.id.action_send_post_text_activity).getIcon().setAlpha(255); mMemu.findItem(R.id.action_send_post_text_activity).getIcon().setAlpha(255);
if(submitTextOrLinkPostEvent.errorMessage == null) { if (submitTextOrLinkPostEvent.errorMessage == null) {
Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.post_failed, Snackbar.LENGTH_SHORT).show();
} else { } else {
Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage.substring(0, 1).toUpperCase() Snackbar.make(coordinatorLayout, submitTextOrLinkPostEvent.errorMessage.substring(0, 1).toUpperCase()

View File

@ -49,19 +49,19 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Fragment.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.AsyncTask.LoadSubredditIconAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SubmitVideoPostEvent;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.SubmitPostService; import ml.docilealligator.infinityforreddit.SubmitPostService;
import ml.docilealligator.infinityforreddit.Event.SubmitVideoPostEvent;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -93,21 +93,50 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
private static final int PICK_VIDEO_REQUEST_CODE = 1; private static final int PICK_VIDEO_REQUEST_CODE = 1;
private static final int CAPTURE_VIDEO_REQUEST_CODE = 2; private static final int CAPTURE_VIDEO_REQUEST_CODE = 2;
@BindView(R.id.coordinator_layout_post_video_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_post_video_activity)
@BindView(R.id.toolbar_post_video_activity) Toolbar toolbar; CoordinatorLayout coordinatorLayout;
@BindView(R.id.subreddit_icon_gif_image_view_post_video_activity) GifImageView iconGifImageView; @BindView(R.id.toolbar_post_video_activity)
@BindView(R.id.subreddit_name_text_view_post_video_activity) TextView subredditNameTextView; Toolbar toolbar;
@BindView(R.id.rules_button_post_video_activity) Button rulesButton; @BindView(R.id.subreddit_icon_gif_image_view_post_video_activity)
@BindView(R.id.flair_custom_text_view_post_video_activity) CustomTextView flairTextView; GifImageView iconGifImageView;
@BindView(R.id.spoiler_custom_text_view_post_video_activity) CustomTextView spoilerTextView; @BindView(R.id.subreddit_name_text_view_post_video_activity)
@BindView(R.id.nsfw_custom_text_view_post_video_activity) CustomTextView nsfwTextView; TextView subredditNameTextView;
@BindView(R.id.post_title_edit_text_post_video_activity) EditText titleEditText; @BindView(R.id.rules_button_post_video_activity)
@BindView(R.id.select_video_constraint_layout_post_video_activity) ConstraintLayout constraintLayout; Button rulesButton;
@BindView(R.id.capture_fab_post_video_activity) FloatingActionButton captureFab; @BindView(R.id.flair_custom_text_view_post_video_activity)
@BindView(R.id.select_from_library_fab_post_video_activity) FloatingActionButton selectFromLibraryFab; CustomTextView flairTextView;
@BindView(R.id.select_again_text_view_post_video_activity) TextView selectAgainTextView; @BindView(R.id.spoiler_custom_text_view_post_video_activity)
@BindView(R.id.player_view_post_video_activity) PlayerView videoPlayerView; CustomTextView spoilerTextView;
@BindView(R.id.nsfw_custom_text_view_post_video_activity)
CustomTextView nsfwTextView;
@BindView(R.id.post_title_edit_text_post_video_activity)
EditText titleEditText;
@BindView(R.id.select_video_constraint_layout_post_video_activity)
ConstraintLayout constraintLayout;
@BindView(R.id.capture_fab_post_video_activity)
FloatingActionButton captureFab;
@BindView(R.id.select_from_library_fab_post_video_activity)
FloatingActionButton selectFromLibraryFab;
@BindView(R.id.select_again_text_view_post_video_activity)
TextView selectAgainTextView;
@BindView(R.id.player_view_post_video_activity)
PlayerView videoPlayerView;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
@Named("upload_media")
Retrofit mUploadMediaRetrofit;
@Inject
@Named("upload_video")
Retrofit mUploadVideoRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
@ -119,41 +148,16 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
private boolean loadSubredditIconSuccessful = true; private boolean loadSubredditIconSuccessful = true;
private boolean isPosting; private boolean isPosting;
private boolean wasPlaying; private boolean wasPlaying;
private Flair flair; private Flair flair;
private boolean isSpoiler = false; private boolean isSpoiler = false;
private boolean isNSFW = false; private boolean isNSFW = false;
private Menu mMemu; private Menu mMemu;
private RequestManager mGlide; private RequestManager mGlide;
private FlairBottomSheetFragment mFlairSelectionBottomSheetFragment; private FlairBottomSheetFragment mFlairSelectionBottomSheetFragment;
private Snackbar mPostingSnackbar; private Snackbar mPostingSnackbar;
private DataSource.Factory dataSourceFactory; private DataSource.Factory dataSourceFactory;
private SimpleExoPlayer player; private SimpleExoPlayer player;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
@Named("upload_media")
Retrofit mUploadMediaRetrofit;
@Inject
@Named("upload_video")
Retrofit mUploadVideoRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -175,9 +179,9 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -193,7 +197,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -214,7 +218,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE); mPostingSnackbar = Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_INDEFINITE);
if(savedInstanceState != null) { if (savedInstanceState != null) {
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE); subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE); iconUrl = savedInstanceState.getString(SUBREDDIT_ICON_STATE);
subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE); subredditSelected = savedInstanceState.getBoolean(SUBREDDIT_SELECTED_STATE);
@ -228,37 +232,37 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccount(); getCurrentAccount();
} }
if(savedInstanceState.getString(VIDEO_URI_STATE) != null) { if (savedInstanceState.getString(VIDEO_URI_STATE) != null) {
videoUri = Uri.parse(savedInstanceState.getString(VIDEO_URI_STATE)); videoUri = Uri.parse(savedInstanceState.getString(VIDEO_URI_STATE));
loadVideo(); loadVideo();
} }
if(subredditName != null) { if (subredditName != null) {
subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor)); subredditNameTextView.setTextColor(getResources().getColor(R.color.primaryTextColor));
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
flairTextView.setVisibility(View.VISIBLE); flairTextView.setVisibility(View.VISIBLE);
if(!loadSubredditIconSuccessful) { if (!loadSubredditIconSuccessful) {
loadSubredditIcon(); loadSubredditIcon();
} }
} }
displaySubredditIcon(); displaySubredditIcon();
if(isPosting) { if (isPosting) {
mPostingSnackbar.show(); mPostingSnackbar.show();
} }
if(flair != null) { if (flair != null) {
flairTextView.setText(flair.getText()); flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isSpoiler) { if (isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
} }
if(isNSFW) { if (isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
} }
} else { } else {
@ -266,7 +270,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
isPosting = false; isPosting = false;
if(getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) { if (getIntent().hasExtra(EXTRA_SUBREDDIT_NAME)) {
loadSubredditIconSuccessful = false; loadSubredditIconSuccessful = false;
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME); subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME);
subredditSelected = true; subredditSelected = true;
@ -280,7 +284,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
} }
videoUri = getIntent().getData(); videoUri = getIntent().getData();
if(videoUri != null) { if (videoUri != null) {
loadVideo(); loadVideo();
} }
} }
@ -296,11 +300,11 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}); });
rulesButton.setOnClickListener(view -> { rulesButton.setOnClickListener(view -> {
if(subredditName == null) { if (subredditName == null) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
} else { } else {
Intent intent = new Intent(this, RulesActivity.class); Intent intent = new Intent(this, RulesActivity.class);
if(subredditIsUser) { if (subredditIsUser) {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else { } else {
intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(RulesActivity.EXTRA_SUBREDDIT_NAME, subredditName);
@ -310,7 +314,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}); });
flairTextView.setOnClickListener(view -> { flairTextView.setOnClickListener(view -> {
if(flair == null) { if (flair == null) {
mFlairSelectionBottomSheetFragment = new FlairBottomSheetFragment(); mFlairSelectionBottomSheetFragment = new FlairBottomSheetFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken); bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
@ -325,7 +329,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}); });
spoilerTextView.setOnClickListener(view -> { spoilerTextView.setOnClickListener(view -> {
if(!isSpoiler) { if (!isSpoiler) {
spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark)); spoilerTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
isSpoiler = true; isSpoiler = true;
} else { } else {
@ -335,7 +339,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}); });
nsfwTextView.setOnClickListener(view -> { nsfwTextView.setOnClickListener(view -> {
if(!isNSFW) { if (!isNSFW) {
nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent)); nsfwTextView.setBackgroundColor(getResources().getColor(R.color.colorAccent));
isNSFW = true; isNSFW = true;
} else { } else {
@ -355,7 +359,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
Intent intent = new Intent(); Intent intent = new Intent();
intent.setType("video/*"); intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT); intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,getResources().getString(R.string.select_from_gallery)), PICK_VIDEO_REQUEST_CODE); startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_from_gallery)), PICK_VIDEO_REQUEST_CODE);
}); });
selectAgainTextView.setOnClickListener(view -> { selectAgainTextView.setOnClickListener(view -> {
@ -370,7 +374,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
private void getCurrentAccount() { private void getCurrentAccount() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -389,7 +393,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
} }
private void displaySubredditIcon() { private void displaySubredditIcon() {
if(iconUrl != null && !iconUrl.equals("")) { if (iconUrl != null && !iconUrl.equals("")) {
mGlide.load(iconUrl) mGlide.load(iconUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -423,7 +427,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.post_video_activity, menu); getMenuInflater().inflate(R.menu.post_video_activity, menu);
mMemu = menu; mMemu = menu;
if(isPosting) { if (isPosting) {
mMemu.findItem(R.id.action_send_post_video_activity).setEnabled(false); mMemu.findItem(R.id.action_send_post_video_activity).setEnabled(false);
mMemu.findItem(R.id.action_send_post_video_activity).getIcon().setAlpha(130); mMemu.findItem(R.id.action_send_post_video_activity).getIcon().setAlpha(130);
} }
@ -434,11 +438,11 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case android.R.id.home: case android.R.id.home:
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
return true; return true;
} else { } else {
if(!titleEditText.getText().toString().equals("") || videoUri != null) { if (!titleEditText.getText().toString().equals("") || videoUri != null) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
return true; return true;
} }
@ -446,17 +450,17 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
finish(); finish();
return true; return true;
case R.id.action_send_post_video_activity: case R.id.action_send_post_video_activity:
if(!subredditSelected) { if (!subredditSelected) {
Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_a_subreddit, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(titleEditText.getText() == null || titleEditText.getText().toString().equals("")) { if (titleEditText.getText() == null || titleEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.title_required, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
if(videoUri == null) { if (videoUri == null) {
Snackbar.make(coordinatorLayout, R.string.select_an_image, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.select_an_image, Snackbar.LENGTH_SHORT).show();
return true; return true;
} }
@ -469,7 +473,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
mPostingSnackbar.show(); mPostingSnackbar.show();
String subredditName; String subredditName;
if(subredditIsUser) { if (subredditIsUser) {
subredditName = "u_" + subredditNameTextView.getText().toString(); subredditName = "u_" + subredditNameTextView.getText().toString();
} else { } else {
subredditName = subredditNameTextView.getText().toString(); subredditName = subredditNameTextView.getText().toString();
@ -486,7 +490,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_VIDEO); intent.putExtra(SubmitPostService.EXTRA_POST_TYPE, SubmitPostService.EXTRA_POST_TYPE_VIDEO);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent); startForegroundService(intent);
} else { } else {
startService(intent); startService(intent);
@ -500,10 +504,10 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if(isPosting) { if (isPosting) {
promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail); promptAlertDialog(R.string.exit_when_submit_post, R.string.exit_when_submit_post_detail);
} else { } else {
if(!titleEditText.getText().toString().equals("") || videoUri != null) { if (!titleEditText.getText().toString().equals("") || videoUri != null) {
promptAlertDialog(R.string.discard_post, R.string.discard_post_detail); promptAlertDialog(R.string.discard_post, R.string.discard_post_detail);
} else { } else {
finish(); finish();
@ -514,7 +518,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
if(wasPlaying) { if (wasPlaying) {
player.setPlayWhenReady(true); player.setPlayWhenReady(true);
} }
} }
@ -532,7 +536,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
outState.putString(SUBREDDIT_ICON_STATE, iconUrl); outState.putString(SUBREDDIT_ICON_STATE, iconUrl);
outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected); outState.putBoolean(SUBREDDIT_SELECTED_STATE, subredditSelected);
outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser); outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser);
if(videoUri != null) { if (videoUri != null) {
outState.putString(VIDEO_URI_STATE, videoUri.toString()); outState.putString(VIDEO_URI_STATE, videoUri.toString());
} }
outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful); outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful);
@ -548,9 +552,9 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) { if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
if(data != null) { if (data != null) {
subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME); subredditName = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
iconUrl = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); iconUrl = data.getStringExtra(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
subredditSelected = true; subredditSelected = true;
@ -566,9 +570,9 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
flair = null; flair = null;
} }
} }
} else if(requestCode == PICK_VIDEO_REQUEST_CODE) { } else if (requestCode == PICK_VIDEO_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
if(data == null) { if (data == null) {
Snackbar.make(coordinatorLayout, R.string.error_getting_video, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.error_getting_video, Snackbar.LENGTH_SHORT).show();
return; return;
} }
@ -577,8 +581,8 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
loadVideo(); loadVideo();
} }
} else if (requestCode == CAPTURE_VIDEO_REQUEST_CODE) { } else if (requestCode == CAPTURE_VIDEO_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
if(data != null && data.getData() != null) { if (data != null && data.getData() != null) {
videoUri = data.getData(); videoUri = data.getData();
loadVideo(); loadVideo();
} else { } else {
@ -614,13 +618,13 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
mMemu.findItem(R.id.action_send_post_video_activity).setEnabled(true); mMemu.findItem(R.id.action_send_post_video_activity).setEnabled(true);
mMemu.findItem(R.id.action_send_post_video_activity).getIcon().setAlpha(255); mMemu.findItem(R.id.action_send_post_video_activity).getIcon().setAlpha(255);
if(submitVideoPostEvent.postSuccess) { if (submitVideoPostEvent.postSuccess) {
Intent intent = new Intent(this, ViewUserDetailActivity.class); Intent intent = new Intent(this, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY,
mAccountName); mAccountName);
startActivity(intent); startActivity(intent);
finish(); finish();
} else if(submitVideoPostEvent.errorProcessingVideo) { } else if (submitVideoPostEvent.errorProcessingVideo) {
Snackbar.make(coordinatorLayout, R.string.error_processing_video, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.error_processing_video, Snackbar.LENGTH_SHORT).show();
} else { } else {
if (submitVideoPostEvent.errorMessage == null || submitVideoPostEvent.errorMessage.equals("")) { if (submitVideoPostEvent.errorMessage == null || submitVideoPostEvent.errorMessage.equals("")) {

View File

@ -63,22 +63,23 @@ public class RulesActivity extends AppCompatActivity {
static final String EXTRA_SUBREDDIT_NAME = "ESN"; static final String EXTRA_SUBREDDIT_NAME = "ESN";
@BindView(R.id.appbar_layout_rules_activity) AppBarLayout appBarLayout; @BindView(R.id.appbar_layout_rules_activity)
@BindView(R.id.toolbar_rules_activity) Toolbar toolbar; AppBarLayout appBarLayout;
@BindView(R.id.progress_bar_rules_activity) ProgressBar progressBar; @BindView(R.id.toolbar_rules_activity)
@BindView(R.id.recycler_view_rules_activity) RecyclerView recyclerView; Toolbar toolbar;
@BindView(R.id.error_text_view_rules_activity) TextView errorTextView; @BindView(R.id.progress_bar_rules_activity)
ProgressBar progressBar;
private String mSubredditName; @BindView(R.id.recycler_view_rules_activity)
RecyclerView recyclerView;
private RulesRecyclerViewAdapter mAdapter; @BindView(R.id.error_text_view_rules_activity)
TextView errorTextView;
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private String mSubredditName;
private RulesRecyclerViewAdapter mAdapter;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -104,29 +105,29 @@ public class RulesActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if(state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if(state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -159,7 +160,7 @@ public class RulesActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -188,15 +189,16 @@ public class RulesActivity extends AppCompatActivity {
rulesCall.enqueue(new Callback<String>() { rulesCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
new ParseRulesAsyncTask(response.body(), new ParseRulesAsyncTask.ParseRulesAsyncTaskListener() { new ParseRulesAsyncTask(response.body(), new ParseRulesAsyncTask.ParseRulesAsyncTaskListener() {
@Override @Override
public void parseSuccessful(ArrayList<Rule> rules) { public void parseSuccessful(ArrayList<Rule> rules) {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
if(rules == null || rules.size() == 0) { if (rules == null || rules.size() == 0) {
errorTextView.setVisibility(View.VISIBLE); errorTextView.setVisibility(View.VISIBLE);
errorTextView.setText(R.string.no_rule); errorTextView.setText(R.string.no_rule);
errorTextView.setOnClickListener(view -> {}); errorTextView.setOnClickListener(view -> {
});
} }
mAdapter.changeDataset(rules); mAdapter.changeDataset(rules);
} }
@ -227,7 +229,7 @@ public class RulesActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }
@ -250,11 +252,6 @@ public class RulesActivity extends AppCompatActivity {
private String response; private String response;
private ParseRulesAsyncTaskListener parseRulesAsyncTaskListener; private ParseRulesAsyncTaskListener parseRulesAsyncTaskListener;
interface ParseRulesAsyncTaskListener {
void parseSuccessful(ArrayList<Rule> rules);
void parseFailed();
}
ParseRulesAsyncTask(String response, ParseRulesAsyncTaskListener parseRulesAsyncTaskListener) { ParseRulesAsyncTask(String response, ParseRulesAsyncTaskListener parseRulesAsyncTaskListener) {
this.response = response; this.response = response;
this.parseRulesAsyncTaskListener = parseRulesAsyncTaskListener; this.parseRulesAsyncTaskListener = parseRulesAsyncTaskListener;
@ -265,10 +262,10 @@ public class RulesActivity extends AppCompatActivity {
try { try {
JSONArray rulesArray = new JSONObject(response).getJSONArray(JSONUtils.RULES_KEY); JSONArray rulesArray = new JSONObject(response).getJSONArray(JSONUtils.RULES_KEY);
ArrayList<Rule> rules = new ArrayList<>(); ArrayList<Rule> rules = new ArrayList<>();
for(int i = 0; i < rulesArray.length(); i++) { for (int i = 0; i < rulesArray.length(); i++) {
String shortName = rulesArray.getJSONObject(i).getString(JSONUtils.SHORT_NAME_KEY); String shortName = rulesArray.getJSONObject(i).getString(JSONUtils.SHORT_NAME_KEY);
String description = null; String description = null;
if(rulesArray.getJSONObject(i).has(JSONUtils.DESCRIPTION_KEY)) { if (rulesArray.getJSONObject(i).has(JSONUtils.DESCRIPTION_KEY)) {
description = Utils.addSubredditAndUserLink(rulesArray.getJSONObject(i).getString(JSONUtils.DESCRIPTION_KEY)); description = Utils.addSubredditAndUserLink(rulesArray.getJSONObject(i).getString(JSONUtils.DESCRIPTION_KEY));
} }
rules.add(new Rule(shortName, description)); rules.add(new Rule(shortName, description));
@ -282,11 +279,17 @@ public class RulesActivity extends AppCompatActivity {
@Override @Override
protected void onPostExecute(ArrayList<Rule> rules) { protected void onPostExecute(ArrayList<Rule> rules) {
if(rules != null) { if (rules != null) {
parseRulesAsyncTaskListener.parseSuccessful(rules); parseRulesAsyncTaskListener.parseSuccessful(rules);
} else { } else {
parseRulesAsyncTaskListener.parseFailed(); parseRulesAsyncTaskListener.parseFailed();
} }
} }
interface ParseRulesAsyncTaskListener {
void parseSuccessful(ArrayList<Rule> rules);
void parseFailed();
}
} }
} }

View File

@ -32,11 +32,11 @@ import javax.inject.Inject;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY;
@ -59,18 +59,20 @@ public class SearchActivity extends AppCompatActivity {
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0; private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 0;
private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 1; private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 1;
@BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.toolbar)
@BindView(R.id.search_view_search_activity) SimpleSearchView simpleSearchView; Toolbar toolbar;
@BindView(R.id.subreddit_name_relative_layout_search_activity) RelativeLayout subredditNameRelativeLayout; @BindView(R.id.search_view_search_activity)
@BindView(R.id.subreddit_name_text_view_search_activity) TextView subredditNameTextView; SimpleSearchView simpleSearchView;
@BindView(R.id.subreddit_name_relative_layout_search_activity)
RelativeLayout subredditNameRelativeLayout;
@BindView(R.id.subreddit_name_text_view_search_activity)
TextView subredditNameTextView;
@Inject
SharedPreferences mSharedPreferences;
private String query; private String query;
private String subredditName; private String subredditName;
private boolean subredditIsUser; private boolean subredditIsUser;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -92,9 +94,9 @@ public class SearchActivity extends AppCompatActivity {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -110,7 +112,7 @@ public class SearchActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -147,15 +149,15 @@ public class SearchActivity extends AppCompatActivity {
simpleSearchView.setOnQueryTextListener(new SimpleSearchView.OnQueryTextListener() { simpleSearchView.setOnQueryTextListener(new SimpleSearchView.OnQueryTextListener() {
@Override @Override
public boolean onQueryTextSubmit(String query) { public boolean onQueryTextSubmit(String query) {
if(searchOnlySubreddits) { if (searchOnlySubreddits) {
Intent intent = new Intent(SearchActivity.this, SearchSubredditsResultActivity.class); Intent intent = new Intent(SearchActivity.this, SearchSubredditsResultActivity.class);
intent.putExtra(SearchSubredditsResultActivity.EXTRA_QUERY, query); intent.putExtra(SearchSubredditsResultActivity.EXTRA_QUERY, query);
startActivityForResult(intent, SUBREDDIT_SEARCH_REQUEST_CODE); startActivityForResult(intent, SUBREDDIT_SEARCH_REQUEST_CODE);
} else { } else {
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class); Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
intent.putExtra(SearchResultActivity.EXTRA_QUERY, query); intent.putExtra(SearchResultActivity.EXTRA_QUERY, query);
if(subredditName != null) { if (subredditName != null) {
if(subredditIsUser) { if (subredditIsUser) {
intent.putExtra(SearchResultActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName); intent.putExtra(SearchResultActivity.EXTRA_SUBREDDIT_NAME, "u_" + subredditName);
} else { } else {
intent.putExtra(SearchResultActivity.EXTRA_SUBREDDIT_NAME, subredditName); intent.putExtra(SearchResultActivity.EXTRA_SUBREDDIT_NAME, subredditName);
@ -178,11 +180,11 @@ public class SearchActivity extends AppCompatActivity {
} }
}); });
if(savedInstanceState != null) { if (savedInstanceState != null) {
subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE); subredditName = savedInstanceState.getString(SUBREDDIT_NAME_STATE);
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE); subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
if(subredditName == null) { if (subredditName == null) {
subredditNameTextView.setText(R.string.all_subreddits); subredditNameTextView.setText(R.string.all_subreddits);
} else { } else {
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
@ -191,7 +193,7 @@ public class SearchActivity extends AppCompatActivity {
query = getIntent().getStringExtra(EXTRA_QUERY); query = getIntent().getStringExtra(EXTRA_QUERY);
} }
if(searchOnlySubreddits) { if (searchOnlySubreddits) {
subredditNameRelativeLayout.setVisibility(View.GONE); subredditNameRelativeLayout.setVisibility(View.GONE);
} else { } else {
subredditNameRelativeLayout.setOnClickListener(view -> { subredditNameRelativeLayout.setOnClickListener(view -> {
@ -202,7 +204,7 @@ public class SearchActivity extends AppCompatActivity {
} }
Intent intent = getIntent(); Intent intent = getIntent();
if(intent.hasExtra(EXTRA_SUBREDDIT_NAME)) { if (intent.hasExtra(EXTRA_SUBREDDIT_NAME)) {
subredditName = intent.getExtras().getString(EXTRA_SUBREDDIT_NAME); subredditName = intent.getExtras().getString(EXTRA_SUBREDDIT_NAME);
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
subredditIsUser = intent.getExtras().getBoolean(EXTRA_SUBREDDIT_IS_USER); subredditIsUser = intent.getExtras().getBoolean(EXTRA_SUBREDDIT_IS_USER);
@ -215,14 +217,14 @@ public class SearchActivity extends AppCompatActivity {
simpleSearchView.showSearch(false); simpleSearchView.showSearch(false);
simpleSearchView.getSearchEditText().requestFocus(); simpleSearchView.getSearchEditText().requestFocus();
if(query != null) { if (query != null) {
simpleSearchView.getSearchEditText().setText(query); simpleSearchView.getSearchEditText().setText(query);
simpleSearchView.getSearchEditText().setSelection(query.length()); simpleSearchView.getSearchEditText().setSelection(query.length());
query = null; query = null;
} }
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
} }
} }
@ -230,8 +232,8 @@ public class SearchActivity extends AppCompatActivity {
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.hideSoftInputFromWindow(simpleSearchView.getSearchEditText().getWindowToken(), 0); imm.hideSoftInputFromWindow(simpleSearchView.getSearchEditText().getWindowToken(), 0);
} }
} }
@ -242,19 +244,19 @@ public class SearchActivity extends AppCompatActivity {
return; return;
} }
if(requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) { if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME); subredditName = data.getExtras().getString(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_NAME);
subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER); subredditIsUser = data.getExtras().getBoolean(SubredditSelectionActivity.EXTRA_RETURN_SUBREDDIT_IS_USER);
if(subredditName == null) { if (subredditName == null) {
subredditNameTextView.setText(R.string.all_subreddits); subredditNameTextView.setText(R.string.all_subreddits);
} else { } else {
subredditNameTextView.setText(subredditName); subredditNameTextView.setText(subredditName);
} }
} }
} else if(requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) { } else if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String name = data.getExtras().getString(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME); String name = data.getExtras().getString(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_NAME);
String iconUrl = data.getExtras().getString(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); String iconUrl = data.getExtras().getString(SearchSubredditsResultActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
Intent returnIntent = new Intent(); Intent returnIntent = new Intent();
@ -277,7 +279,7 @@ public class SearchActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }

View File

@ -33,23 +33,23 @@ import javax.inject.Inject;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment; import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Fragment.SearchPostSortTypeBottomSheetFragment; import ml.docilealligator.infinityforreddit.Fragment.SearchPostSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.Fragment.SearchUserAndSubredditSortTypeBottomSheetFragment; import ml.docilealligator.infinityforreddit.Fragment.SearchUserAndSubredditSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Fragment.SubredditListingFragment; import ml.docilealligator.infinityforreddit.Fragment.SubredditListingFragment;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle;
import ml.docilealligator.infinityforreddit.Fragment.UserListingFragment; import ml.docilealligator.infinityforreddit.Fragment.UserListingFragment;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.TitleFontStyle;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
@ -64,29 +64,27 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
private static final String NULL_ACCESS_TOKEN_STATE = "NATS"; private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
@BindView(R.id.appbar_layout_search_result_activity)
AppBarLayout appBarLayout;
@BindView(R.id.toolbar_search_result_activity)
Toolbar toolbar;
@BindView(R.id.tab_layout_search_result_activity)
TabLayout tabLayout;
@BindView(R.id.view_pager_search_result_activity)
ViewPager viewPager;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private String mQuery; private String mQuery;
private String mSubredditName; private String mSubredditName;
@BindView(R.id.appbar_layout_search_result_activity) AppBarLayout appBarLayout;
@BindView(R.id.toolbar_search_result_activity) Toolbar toolbar;
@BindView(R.id.tab_layout_search_result_activity) TabLayout tabLayout;
@BindView(R.id.view_pager_search_result_activity) ViewPager viewPager;
private SectionsPagerAdapter sectionsPagerAdapter; private SectionsPagerAdapter sectionsPagerAdapter;
private SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment; private SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment;
private SearchUserAndSubredditSortTypeBottomSheetFragment searchUserAndSubredditSortTypeBottomSheetFragment; private SearchUserAndSubredditSortTypeBottomSheetFragment searchUserAndSubredditSortTypeBottomSheetFragment;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -111,12 +109,12 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
@ -125,12 +123,12 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if(state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if(state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -156,7 +154,7 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -167,13 +165,13 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if(savedInstanceState == null) { if (savedInstanceState == null) {
getCurrentAccountAndInitializeViewPager(); getCurrentAccountAndInitializeViewPager();
} else { } else {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndInitializeViewPager(); getCurrentAccountAndInitializeViewPager();
} else { } else {
initializeViewPager(); initializeViewPager();
@ -192,7 +190,7 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
mSubredditName = intent.getStringExtra(EXTRA_SUBREDDIT_NAME); mSubredditName = intent.getStringExtra(EXTRA_SUBREDDIT_NAME);
if(query != null) { if (query != null) {
mQuery = query; mQuery = query;
setTitle(query); setTitle(query);
} }
@ -200,7 +198,7 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
private void getCurrentAccountAndInitializeViewPager() { private void getCurrentAccountAndInitializeViewPager() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -404,7 +402,7 @@ public class SearchResultActivity extends AppCompatActivity implements SearchPos
} }
public void changeNSFW(boolean nsfw) { public void changeNSFW(boolean nsfw) {
if(postFragment != null) { if (postFragment != null) {
postFragment.changeNSFW(nsfw); postFragment.changeNSFW(nsfw);
} }
} }

View File

@ -29,15 +29,15 @@ import javax.inject.Inject;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.SubredditListingFragment;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.Fragment.SubredditListingFragment;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY;
@ -56,21 +56,19 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
private static final String FRAGMENT_OUT_STATE = "FOS"; private static final String FRAGMENT_OUT_STATE = "FOS";
@BindView(R.id.appbar_layout_search_subreddits_result_activity) AppBarLayout appBarLayout; @BindView(R.id.appbar_layout_search_subreddits_result_activity)
@BindView(R.id.toolbar_search_subreddits_result_activity) Toolbar toolbar; AppBarLayout appBarLayout;
@BindView(R.id.toolbar_search_subreddits_result_activity)
Toolbar toolbar;
Fragment mFragment;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
Fragment mFragment;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -95,12 +93,12 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
@ -109,12 +107,12 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if(state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if(state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -140,7 +138,7 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -153,13 +151,13 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
String query = getIntent().getExtras().getString(EXTRA_QUERY); String query = getIntent().getExtras().getString(EXTRA_QUERY);
if(savedInstanceState == null) { if (savedInstanceState == null) {
getCurrentAccountAndInitializeFragment(query); getCurrentAccountAndInitializeFragment(query);
} else { } else {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndInitializeFragment(query); getCurrentAccountAndInitializeFragment(query);
} else { } else {
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE); mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
@ -170,7 +168,7 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
private void getCurrentAccountAndInitializeFragment(String query) { private void getCurrentAccountAndInitializeFragment(String query) {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -198,7 +196,7 @@ public class SearchSubredditsResultActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }

View File

@ -19,14 +19,14 @@ import androidx.preference.PreferenceFragmentCompat;
import javax.inject.Inject; import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.Settings.AboutPreferenceFragment; import ml.docilealligator.infinityforreddit.Settings.AboutPreferenceFragment;
import ml.docilealligator.infinityforreddit.Settings.MainPreferenceFragment; import ml.docilealligator.infinityforreddit.Settings.MainPreferenceFragment;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
@ -40,7 +40,8 @@ public class SettingsActivity extends AppCompatActivity implements
private static final String TITLE_STATE = "TS"; private static final String TITLE_STATE = "TS";
@BindView(R.id.toolbar_settings_activity) Toolbar toolbar; @BindView(R.id.toolbar_settings_activity)
Toolbar toolbar;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
@ -64,9 +65,9 @@ public class SettingsActivity extends AppCompatActivity implements
ButterKnife.bind(this); ButterKnife.bind(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Window window = getWindow(); Window window = getWindow();
if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor)); window.setNavigationBarColor(ContextCompat.getColor(this, R.color.navBarColor));
@ -82,7 +83,7 @@ public class SettingsActivity extends AppCompatActivity implements
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -113,7 +114,7 @@ public class SettingsActivity extends AppCompatActivity implements
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
onBackPressed(); onBackPressed();
return true; return true;
} }

View File

@ -8,10 +8,6 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import ml.docilealligator.infinityforreddit.Activity.PostImageActivity;
import ml.docilealligator.infinityforreddit.Activity.PostLinkActivity;
import ml.docilealligator.infinityforreddit.Activity.PostTextActivity;
import ml.docilealligator.infinityforreddit.Activity.PostVideoActivity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
public class ShareDataResolverActivity extends AppCompatActivity { public class ShareDataResolverActivity extends AppCompatActivity {
@ -24,11 +20,11 @@ public class ShareDataResolverActivity extends AppCompatActivity {
String action = receivedIntent.getAction(); String action = receivedIntent.getAction();
String type = receivedIntent.getType(); String type = receivedIntent.getType();
if(Intent.ACTION_SEND.equals(action) && type != null) { if (Intent.ACTION_SEND.equals(action) && type != null) {
if("text/plain".equals(type)) { if ("text/plain".equals(type)) {
String text = receivedIntent.getStringExtra(Intent.EXTRA_TEXT); String text = receivedIntent.getStringExtra(Intent.EXTRA_TEXT);
if(text != null) { if (text != null) {
if(Patterns.WEB_URL.matcher(text).matches()) { if (Patterns.WEB_URL.matcher(text).matches()) {
//It's a link //It's a link
Intent intent = new Intent(this, PostLinkActivity.class); Intent intent = new Intent(this, PostLinkActivity.class);
intent.putExtra(PostLinkActivity.EXTRA_LINK, text); intent.putExtra(PostLinkActivity.EXTRA_LINK, text);
@ -41,9 +37,9 @@ public class ShareDataResolverActivity extends AppCompatActivity {
} else { } else {
Toast.makeText(this, R.string.no_data_received, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_data_received, Toast.LENGTH_SHORT).show();
} }
} else if(type.equals("image/gif")) { } else if (type.equals("image/gif")) {
Uri videoUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); Uri videoUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM);
if(videoUri != null) { if (videoUri != null) {
Intent intent = new Intent(this, PostVideoActivity.class); Intent intent = new Intent(this, PostVideoActivity.class);
intent.setData(videoUri); intent.setData(videoUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
@ -51,9 +47,9 @@ public class ShareDataResolverActivity extends AppCompatActivity {
} else { } else {
Toast.makeText(this, R.string.no_video_path_received, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_video_path_received, Toast.LENGTH_SHORT).show();
} }
} else if(type.startsWith("image/")) { } else if (type.startsWith("image/")) {
Uri imageUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); Uri imageUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM);
if(imageUri != null) { if (imageUri != null) {
Intent intent = new Intent(this, PostImageActivity.class); Intent intent = new Intent(this, PostImageActivity.class);
intent.setData(imageUri); intent.setData(imageUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
@ -61,9 +57,9 @@ public class ShareDataResolverActivity extends AppCompatActivity {
} else { } else {
Toast.makeText(this, R.string.no_image_path_received, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_image_path_received, Toast.LENGTH_SHORT).show();
} }
} else if(type.startsWith("video/")) { } else if (type.startsWith("video/")) {
Uri videoUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM); Uri videoUri = receivedIntent.getParcelableExtra(Intent.EXTRA_STREAM);
if(videoUri != null) { if (videoUri != null) {
Intent intent = new Intent(this, PostVideoActivity.class); Intent intent = new Intent(this, PostVideoActivity.class);
intent.setData(videoUri); intent.setData(videoUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

View File

@ -71,27 +71,24 @@ public class SubredditSelectionActivity extends AppCompatActivity {
private static final String ACCOUNT_PROFILE_IMAGE_URL = "APIU"; private static final String ACCOUNT_PROFILE_IMAGE_URL = "APIU";
private static final String FRAGMENT_OUT_STATE = "FOS"; private static final String FRAGMENT_OUT_STATE = "FOS";
@BindView(R.id.appbar_layout_subreddit_selection_activity) AppBarLayout appBarLayout; @BindView(R.id.appbar_layout_subreddit_selection_activity)
@BindView(R.id.toolbar_subreddit_selection_activity) Toolbar toolbar; AppBarLayout appBarLayout;
@BindView(R.id.toolbar_subreddit_selection_activity)
Toolbar toolbar;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private String mAccountProfileImageUrl; private String mAccountProfileImageUrl;
private boolean mInsertSuccess = false; private boolean mInsertSuccess = false;
private Fragment mFragment; private Fragment mFragment;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -116,29 +113,29 @@ public class SubredditSelectionActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if(state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if(state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -164,7 +161,7 @@ public class SubredditSelectionActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -175,7 +172,7 @@ public class SubredditSelectionActivity extends AppCompatActivity {
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if(savedInstanceState == null) { if (savedInstanceState == null) {
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
} else { } else {
mInsertSuccess = savedInstanceState.getBoolean(INSERT_SUBSCRIBED_SUBREDDIT_STATE); mInsertSuccess = savedInstanceState.getBoolean(INSERT_SUBSCRIBED_SUBREDDIT_STATE);
@ -184,7 +181,7 @@ public class SubredditSelectionActivity extends AppCompatActivity {
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
mAccountProfileImageUrl = savedInstanceState.getString(ACCOUNT_PROFILE_IMAGE_URL); mAccountProfileImageUrl = savedInstanceState.getString(ACCOUNT_PROFILE_IMAGE_URL);
if(!mNullAccessToken && mAccountName == null) { if (!mNullAccessToken && mAccountName == null) {
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
} else { } else {
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE); mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
@ -195,7 +192,7 @@ public class SubredditSelectionActivity extends AppCompatActivity {
private void getCurrentAccountAndBindView() { private void getCurrentAccountAndBindView() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -214,7 +211,7 @@ public class SubredditSelectionActivity extends AppCompatActivity {
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName); bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL, mAccountProfileImageUrl); bundle.putString(SubscribedSubredditsListingFragment.EXTRA_ACCOUNT_PROFILE_IMAGE_URL, mAccountProfileImageUrl);
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, true); bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_IS_SUBREDDIT_SELECTION, true);
if(getIntent().hasExtra(EXTRA_EXTRA_CLEAR_SELECTION)) { if (getIntent().hasExtra(EXTRA_EXTRA_CLEAR_SELECTION)) {
bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_EXTRA_CLEAR_SELECTION, bundle.putBoolean(SubscribedSubredditsListingFragment.EXTRA_EXTRA_CLEAR_SELECTION,
getIntent().getExtras().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION)); getIntent().getExtras().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION));
} }
@ -282,8 +279,8 @@ public class SubredditSelectionActivity extends AppCompatActivity {
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if(requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) { if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
String name = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME); String name = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME);
String iconUrl = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); String iconUrl = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL);
Intent returnIntent = new Intent(); Intent returnIntent = new Intent();

View File

@ -64,28 +64,27 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
@BindView(R.id.appbar_layout_subscribed_thing_listing_activity) AppBarLayout appBarLayout; @BindView(R.id.appbar_layout_subscribed_thing_listing_activity)
@BindView(R.id.toolbar_subscribed_thing_listing_activity) Toolbar toolbar; AppBarLayout appBarLayout;
@BindView(R.id.tab_layout_subscribed_thing_listing_activity) TabLayout tabLayout; @BindView(R.id.toolbar_subscribed_thing_listing_activity)
@BindView(R.id.view_pager_subscribed_thing_listing_activity) ViewPager viewPager; Toolbar toolbar;
@BindView(R.id.tab_layout_subscribed_thing_listing_activity)
TabLayout tabLayout;
@BindView(R.id.view_pager_subscribed_thing_listing_activity)
ViewPager viewPager;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private boolean mInsertSuccess = false; private boolean mInsertSuccess = false;
private SectionsPagerAdapter sectionsPagerAdapter; private SectionsPagerAdapter sectionsPagerAdapter;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -110,29 +109,29 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if(state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if(state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -158,7 +157,7 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -169,12 +168,12 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if(savedInstanceState != null) { if (savedInstanceState != null) {
mInsertSuccess = savedInstanceState.getBoolean(INSERT_SUBSCRIBED_SUBREDDIT_STATE); mInsertSuccess = savedInstanceState.getBoolean(INSERT_SUBSCRIBED_SUBREDDIT_STATE);
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndInitializeViewPager(); getCurrentAccountAndInitializeViewPager();
} else { } else {
initializeViewPagerAndLoadSubscriptions(); initializeViewPagerAndLoadSubscriptions();
@ -186,7 +185,7 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
private void getCurrentAccountAndInitializeViewPager() { private void getCurrentAccountAndInitializeViewPager() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -207,7 +206,7 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }
@ -280,8 +279,7 @@ public class SubscribedThingListingActivity extends AppCompatActivity {
fragment.setArguments(bundle); fragment.setArguments(bundle);
return fragment; return fragment;
} }
default: default: {
{
FollowedUsersListingFragment fragment = new FollowedUsersListingFragment(); FollowedUsersListingFragment fragment = new FollowedUsersListingFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(FollowedUsersListingFragment.EXTRA_ACCOUNT_NAME, mAccountName); bundle.putString(FollowedUsersListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);

View File

@ -59,35 +59,31 @@ import ml.docilealligator.infinityforreddit.TitleFontStyle;
public class ViewImageActivity extends AppCompatActivity { public class ViewImageActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
public static final String TITLE_KEY = "TK"; public static final String TITLE_KEY = "TK";
public static final String IMAGE_URL_KEY = "IUK"; public static final String IMAGE_URL_KEY = "IUK";
public static final String FILE_NAME_KEY = "FNK"; public static final String FILE_NAME_KEY = "FNK";
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
@BindView(R.id.parent_relative_layout_view_image_activity) RelativeLayout mRelativeLayout; @BindView(R.id.parent_relative_layout_view_image_activity)
@BindView(R.id.progress_bar_view_image_activity) ProgressBar mProgressBar; RelativeLayout mRelativeLayout;
@BindView(R.id.image_view_view_image_activity) GestureImageView mImageView; @BindView(R.id.progress_bar_view_image_activity)
@BindView(R.id.load_image_error_linear_layout_view_image_activity) LinearLayout mLoadErrorLinearLayout; ProgressBar mProgressBar;
@BindView(R.id.image_view_view_image_activity)
GestureImageView mImageView;
@BindView(R.id.load_image_error_linear_layout_view_image_activity)
LinearLayout mLoadErrorLinearLayout;
@Inject
SharedPreferences mSharedPreferences;
private boolean isActionBarHidden = false; private boolean isActionBarHidden = false;
private boolean isDownloading = false; private boolean isDownloading = false;
private Menu mMenu; private Menu mMenu;
private Swipe swipe; private Swipe swipe;
private String mImageUrl; private String mImageUrl;
private String mImageFileName; private String mImageFileName;
private float totalLengthY = 0.0f; private float totalLengthY = 0.0f;
private float touchY = -1.0f; private float touchY = -1.0f;
private float zoom = 1.0f; private float zoom = 1.0f;
private boolean isSwiping = false; private boolean isSwiping = false;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -118,7 +114,7 @@ public class ViewImageActivity extends AppCompatActivity {
mImageFileName = intent.getStringExtra(FILE_NAME_KEY) + ".jpg"; mImageFileName = intent.getStringExtra(FILE_NAME_KEY) + ".jpg";
mLoadErrorLinearLayout.setOnClickListener(view -> { mLoadErrorLinearLayout.setOnClickListener(view -> {
if(!isSwiping) { if (!isSwiping) {
mProgressBar.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.VISIBLE);
mLoadErrorLinearLayout.setVisibility(View.GONE); mLoadErrorLinearLayout.setVisibility(View.GONE);
loadImage(); loadImage();
@ -146,7 +142,7 @@ public class ViewImageActivity extends AppCompatActivity {
actionBarElementColorAnimation.addUpdateListener(valueAnimator -> { actionBarElementColorAnimation.addUpdateListener(valueAnimator -> {
upArrow.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN); upArrow.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN);
if(mMenu != null) { if (mMenu != null) {
Drawable drawable = mMenu.getItem(0).getIcon(); Drawable drawable = mMenu.getItem(0).getIcon();
//drawable.mutate(); //drawable.mutate();
drawable.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN); drawable.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN);
@ -398,7 +394,7 @@ public class ViewImageActivity extends AppCompatActivity {
@Override @Override
public boolean dispatchTouchEvent(MotionEvent ev) { public boolean dispatchTouchEvent(MotionEvent ev) {
if(zoom == 1.0) { if (zoom == 1.0) {
swipe.dispatchTouchEvent(ev); swipe.dispatchTouchEvent(ev);
} }
return super.dispatchTouchEvent(ev); return super.dispatchTouchEvent(ev);
@ -406,10 +402,10 @@ public class ViewImageActivity extends AppCompatActivity {
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE && grantResults.length > 0) { if (requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE && grantResults.length > 0) {
if(grantResults[0] == PackageManager.PERMISSION_DENIED) { if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
} else if(grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) { } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) {
saveImage(); saveImage();
} }
isDownloading = false; isDownloading = false;
@ -424,25 +420,25 @@ public class ViewImageActivity extends AppCompatActivity {
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
//Android Q support //Android Q support
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, mImageFileName); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, mImageFileName);
} else { } else {
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
File directory = new File(path + "/Infinity/"); File directory = new File(path + "/Infinity/");
boolean saveToInfinityFolder = true; boolean saveToInfinityFolder = true;
if(!directory.exists()) { if (!directory.exists()) {
if(!directory.mkdir()) { if (!directory.mkdir()) {
saveToInfinityFolder = false; saveToInfinityFolder = false;
} }
} else { } else {
if(directory.isFile()) { if (directory.isFile()) {
if(!(directory.delete() && directory.mkdir())) { if (!(directory.delete() && directory.mkdir())) {
saveToInfinityFolder = false; saveToInfinityFolder = false;
} }
} }
} }
if(saveToInfinityFolder) { if (saveToInfinityFolder) {
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES + "/Infinity/", mImageFileName); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES + "/Infinity/", mImageFileName);
} else { } else {
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, mImageFileName); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, mImageFileName);
@ -451,7 +447,7 @@ public class ViewImageActivity extends AppCompatActivity {
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
if(manager == null) { if (manager == null) {
Toast.makeText(this, R.string.download_failed, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.download_failed, Toast.LENGTH_SHORT).show();
return; return;
} }

View File

@ -39,20 +39,20 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Adapter.MessageRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FetchMessages; import ml.docilealligator.infinityforreddit.FetchMessages;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.Adapter.MessageRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.MessageViewModel; import ml.docilealligator.infinityforreddit.MessageViewModel;
import ml.docilealligator.infinityforreddit.NetworkState; import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -69,34 +69,35 @@ public class ViewMessageActivity extends AppCompatActivity {
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String NEW_ACCOUNT_NAME_STATE = "NANS"; private static final String NEW_ACCOUNT_NAME_STATE = "NANS";
@BindView(R.id.collapsing_toolbar_layout_view_message_activity) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R.id.collapsing_toolbar_layout_view_message_activity)
@BindView(R.id.appbar_layout_view_message_activity) AppBarLayout appBarLayout; CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.toolbar_view_message_activity) Toolbar toolbar; @BindView(R.id.appbar_layout_view_message_activity)
@BindView(R.id.progress_bar_view_message_activity) CircleProgressBar mProgressBar; AppBarLayout appBarLayout;
@BindView(R.id.recycler_view_view_message_activity) RecyclerView recyclerView; @BindView(R.id.toolbar_view_message_activity)
@BindView(R.id.fetch_messages_info_linear_layout_view_message_activity) LinearLayout mFetchMessageInfoLinearLayout; Toolbar toolbar;
@BindView(R.id.fetch_messages_info_image_view_view_message_activity) ImageView mFetchMessageInfoImageView; @BindView(R.id.progress_bar_view_message_activity)
@BindView(R.id.fetch_messages_info_text_view_view_message_activity) TextView mFetchMessageInfoTextView; CircleProgressBar mProgressBar;
@BindView(R.id.recycler_view_view_message_activity)
private boolean mNullAccessToken = false; RecyclerView recyclerView;
private String mAccessToken; @BindView(R.id.fetch_messages_info_linear_layout_view_message_activity)
private String mNewAccountName; LinearLayout mFetchMessageInfoLinearLayout;
@BindView(R.id.fetch_messages_info_image_view_view_message_activity)
private MessageRecyclerViewAdapter mAdapter; ImageView mFetchMessageInfoImageView;
@BindView(R.id.fetch_messages_info_text_view_view_message_activity)
private RequestManager mGlide; TextView mFetchMessageInfoTextView;
MessageViewModel mMessageViewModel; MessageViewModel mMessageViewModel;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
RedditDataRoomDatabase mRedditDataRoomDatabase; RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false;
private String mAccessToken;
private String mNewAccountName;
private MessageRecyclerViewAdapter mAdapter;
private RequestManager mGlide;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -130,24 +131,24 @@ public class ViewMessageActivity extends AppCompatActivity {
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -177,7 +178,7 @@ public class ViewMessageActivity extends AppCompatActivity {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -188,12 +189,12 @@ public class ViewMessageActivity extends AppCompatActivity {
toolbar.setTitle(R.string.inbox); toolbar.setTitle(R.string.inbox);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
if(savedInstanceState != null) { if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE); mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndFetchMessage(); getCurrentAccountAndFetchMessage();
} else { } else {
bindView(); bindView();
@ -206,14 +207,14 @@ public class ViewMessageActivity extends AppCompatActivity {
private void getCurrentAccountAndFetchMessage() { private void getCurrentAccountAndFetchMessage() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(mNewAccountName != null) { if (mNewAccountName != null) {
if(account == null || !account.getUsername().equals(mNewAccountName)) { if (account == null || !account.getUsername().equals(mNewAccountName)) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> { new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> {
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName())); EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
mNewAccountName = null; mNewAccountName = null;
if(newAccount == null) { if (newAccount == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = newAccount.getAccessToken(); mAccessToken = newAccount.getAccessToken();
@ -226,7 +227,7 @@ public class ViewMessageActivity extends AppCompatActivity {
bindView(); bindView();
} }
} else { } else {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -253,7 +254,7 @@ public class ViewMessageActivity extends AppCompatActivity {
mMessageViewModel.hasMessage().observe(this, hasMessage -> { mMessageViewModel.hasMessage().observe(this, hasMessage -> {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(hasMessage) { if (hasMessage) {
mFetchMessageInfoLinearLayout.setVisibility(View.GONE); mFetchMessageInfoLinearLayout.setVisibility(View.GONE);
} else { } else {
mFetchMessageInfoLinearLayout.setOnClickListener(view -> { mFetchMessageInfoLinearLayout.setOnClickListener(view -> {
@ -264,9 +265,9 @@ public class ViewMessageActivity extends AppCompatActivity {
}); });
mMessageViewModel.getInitialLoadingState().observe(this, networkState -> { mMessageViewModel.getInitialLoadingState().observe(this, networkState -> {
if(networkState.getStatus().equals(NetworkState.Status.SUCCESS)) { if (networkState.getStatus().equals(NetworkState.Status.SUCCESS)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
} else if(networkState.getStatus().equals(NetworkState.Status.FAILED)) { } else if (networkState.getStatus().equals(NetworkState.Status.FAILED)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchMessageInfoLinearLayout.setOnClickListener(view -> { mFetchMessageInfoLinearLayout.setOnClickListener(view -> {
mFetchMessageInfoLinearLayout.setVisibility(View.GONE); mFetchMessageInfoLinearLayout.setVisibility(View.GONE);
@ -299,11 +300,11 @@ public class ViewMessageActivity extends AppCompatActivity {
@Override @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if(item.getItemId() == R.id.action_refresh_view_message_activity) { if (item.getItemId() == R.id.action_refresh_view_message_activity) {
mMessageViewModel.refresh(); mMessageViewModel.refresh();
mAdapter.setNetworkState(null); mAdapter.setNetworkState(null);
return true; return true;
} else if(item.getItemId() == android.R.id.home) { } else if (item.getItemId() == android.R.id.home) {
finish(); finish();
return true; return true;
} }
@ -326,7 +327,7 @@ public class ViewMessageActivity extends AppCompatActivity {
@Subscribe @Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) { public void onAccountSwitchEvent(SwitchAccountEvent event) {
if(!getClass().getName().equals(event.excludeActivityClassName)) { if (!getClass().getName().equals(event.excludeActivityClassName)) {
finish(); finish();
} }
} }

View File

@ -48,26 +48,28 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWBlurEvent;
import ml.docilealligator.infinityforreddit.Event.ChangeSpoilerBlurEvent;
import ml.docilealligator.infinityforreddit.Adapter.CommentAndPostRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.Adapter.CommentAndPostRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.CommentData; import ml.docilealligator.infinityforreddit.CommentData;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.DeleteThing; import ml.docilealligator.infinityforreddit.DeleteThing;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWBlurEvent;
import ml.docilealligator.infinityforreddit.Event.ChangeSpoilerBlurEvent;
import ml.docilealligator.infinityforreddit.Event.PostUpdateEventToDetailActivity;
import ml.docilealligator.infinityforreddit.Event.PostUpdateEventToPostList;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FetchComment; import ml.docilealligator.infinityforreddit.FetchComment;
import ml.docilealligator.infinityforreddit.FetchPost; import ml.docilealligator.infinityforreddit.FetchPost;
import ml.docilealligator.infinityforreddit.Flair; import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Fragment.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask; import ml.docilealligator.infinityforreddit.Fragment.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.HidePost; import ml.docilealligator.infinityforreddit.HidePost;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.ParseComment; import ml.docilealligator.infinityforreddit.ParseComment;
import ml.docilealligator.infinityforreddit.ParsePost; import ml.docilealligator.infinityforreddit.ParsePost;
import ml.docilealligator.infinityforreddit.Post; import ml.docilealligator.infinityforreddit.Post;
import ml.docilealligator.infinityforreddit.Event.PostUpdateEventToDetailActivity;
import ml.docilealligator.infinityforreddit.Event.PostUpdateEventToPostList;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.ReadMessage; import ml.docilealligator.infinityforreddit.ReadMessage;
import ml.docilealligator.infinityforreddit.RedditAPI; import ml.docilealligator.infinityforreddit.RedditAPI;
@ -75,8 +77,6 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.RedditUtils; import ml.docilealligator.infinityforreddit.RedditUtils;
import ml.docilealligator.infinityforreddit.SaveThing; import ml.docilealligator.infinityforreddit.SaveThing;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -98,20 +98,8 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
public static final String EXTRA_SINGLE_COMMENT_ID = "ESCI"; public static final String EXTRA_SINGLE_COMMENT_ID = "ESCI";
public static final String EXTRA_MESSAGE_FULLNAME = "ENI"; public static final String EXTRA_MESSAGE_FULLNAME = "ENI";
public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN"; public static final String EXTRA_NEW_ACCOUNT_NAME = "ENAN";
private static final int EDIT_POST_REQUEST_CODE = 2;
public static final int EDIT_COMMENT_REQUEST_CODE = 3; public static final int EDIT_COMMENT_REQUEST_CODE = 3;
private static final int EDIT_POST_REQUEST_CODE = 2;
private RequestManager mGlide;
private Locale mLocale;
private Menu mMenu;
private int orientation;
private int postListPosition = -1;
private String mSingleCommentId;
private boolean mNeedBlurNsfw;
private boolean mNeedBlurSpoiler;
@State @State
boolean mNullAccessToken = false; boolean mNullAccessToken = false;
@State @State
@ -140,32 +128,43 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
String mMessageFullname; String mMessageFullname;
@State @State
String mNewAccountName; String mNewAccountName;
@BindView(R.id.coordinator_layout_view_post_detail)
private boolean showToast = false; CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.appbar_layout_view_post_detail_activity)
private LinearLayoutManager mLinearLayoutManager; AppBarLayout appBarLayout;
private CommentAndPostRecyclerViewAdapter mAdapter; @BindView(R.id.toolbar_view_post_detail_activity)
Toolbar toolbar;
@BindView(R.id.coordinator_layout_view_post_detail) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.progress_bar_view_post_detail_activity)
@BindView(R.id.appbar_layout_view_post_detail_activity) AppBarLayout appBarLayout; ProgressBar mProgressBar;
@BindView(R.id.toolbar_view_post_detail_activity) Toolbar toolbar; @BindView(R.id.recycler_view_view_post_detail)
@BindView(R.id.progress_bar_view_post_detail_activity) ProgressBar mProgressBar; RecyclerView mRecyclerView;
@BindView(R.id.recycler_view_view_post_detail) RecyclerView mRecyclerView; @BindView(R.id.fetch_post_info_linear_layout_view_post_detail_activity)
@BindView(R.id.fetch_post_info_linear_layout_view_post_detail_activity) LinearLayout mFetchPostInfoLinearLayout; LinearLayout mFetchPostInfoLinearLayout;
@BindView(R.id.fetch_post_info_image_view_view_post_detail_activity) ImageView mFetchPostInfoImageView; @BindView(R.id.fetch_post_info_image_view_view_post_detail_activity)
@BindView(R.id.fetch_post_info_text_view_view_post_detail_activity) TextView mFetchPostInfoTextView; ImageView mFetchPostInfoImageView;
@BindView(R.id.fetch_post_info_text_view_view_post_detail_activity)
@Inject @Named("no_oauth") TextView mFetchPostInfoTextView;
@Inject
@Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject
@Inject @Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
RedditDataRoomDatabase mRedditDataRoomDatabase; RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private RequestManager mGlide;
private Locale mLocale;
private Menu mMenu;
private int orientation;
private int postListPosition = -1;
private String mSingleCommentId;
private boolean mNeedBlurNsfw;
private boolean mNeedBlurSpoiler;
private boolean showToast = false;
private LinearLayoutManager mLinearLayoutManager;
private CommentAndPostRecyclerViewAdapter mAdapter;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -199,24 +198,24 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
View decorView = window.getDecorView(); View decorView = window.getDecorView();
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -247,7 +246,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -268,8 +267,8 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
mRecyclerView.setLayoutManager(mLinearLayoutManager); mRecyclerView.setLayoutManager(mLinearLayoutManager);
mSingleCommentId = getIntent().hasExtra(EXTRA_SINGLE_COMMENT_ID) ? getIntent().getExtras().getString(EXTRA_SINGLE_COMMENT_ID) : null; mSingleCommentId = getIntent().hasExtra(EXTRA_SINGLE_COMMENT_ID) ? getIntent().getExtras().getString(EXTRA_SINGLE_COMMENT_ID) : null;
if(savedInstanceState == null) { if (savedInstanceState == null) {
if(mSingleCommentId != null) { if (mSingleCommentId != null) {
isSingleCommentThreadMode = true; isSingleCommentThreadMode = true;
} }
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME); mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
@ -278,27 +277,27 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
orientation = getResources().getConfiguration().orientation; orientation = getResources().getConfiguration().orientation;
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
} else { } else {
bindView(); bindView();
} }
if(getIntent().hasExtra(EXTRA_POST_LIST_POSITION)) { if (getIntent().hasExtra(EXTRA_POST_LIST_POSITION)) {
postListPosition = getIntent().getIntExtra(EXTRA_POST_LIST_POSITION, -1); postListPosition = getIntent().getIntExtra(EXTRA_POST_LIST_POSITION, -1);
} }
} }
private void getCurrentAccountAndBindView() { private void getCurrentAccountAndBindView() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(mNewAccountName != null) { if (mNewAccountName != null) {
if(account == null || !account.getUsername().equals(mNewAccountName)) { if (account == null || !account.getUsername().equals(mNewAccountName)) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> { new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> {
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName())); EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
mNewAccountName = null; mNewAccountName = null;
if(newAccount == null) { if (newAccount == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = newAccount.getAccessToken(); mAccessToken = newAccount.getAccessToken();
@ -313,7 +312,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
bindView(); bindView();
} }
} else { } else {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -326,7 +325,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
private void bindView() { private void bindView() {
if(mAccessToken != null && mMessageFullname != null) { if (mAccessToken != null && mMessageFullname != null) {
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() { ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
@Override @Override
public void readSuccess() { public void readSuccess() {
@ -340,21 +339,21 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
}); });
} }
if(mPost == null) { if (mPost == null) {
mPost = getIntent().getParcelableExtra(EXTRA_POST_DATA); mPost = getIntent().getParcelableExtra(EXTRA_POST_DATA);
} }
if(mPost == null) { if (mPost == null) {
fetchPostAndCommentsById(getIntent().getStringExtra(EXTRA_POST_ID)); fetchPostAndCommentsById(getIntent().getStringExtra(EXTRA_POST_ID));
} else { } else {
if(mMenu != null) { if (mMenu != null) {
MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity); MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity);
MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity); MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity);
mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true);
if(mAccessToken != null) { if (mAccessToken != null) {
if(mPost.isSaved()) { if (mPost.isSaved()) {
saveItem.setVisible(true); saveItem.setVisible(true);
saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px);
} else { } else {
@ -362,7 +361,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px);
} }
if(mPost.isHidden()) { if (mPost.isHidden()) {
hideItem.setVisible(true); hideItem.setVisible(true);
hideItem.setTitle(R.string.action_unhide_post); hideItem.setTitle(R.string.action_unhide_post);
} else { } else {
@ -374,15 +373,15 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
hideItem.setVisible(false); hideItem.setVisible(false);
} }
if(mPost.getAuthor().equals(mAccountName)) { if (mPost.getAuthor().equals(mAccountName)) {
if(mPost.getPostType() == Post.TEXT_TYPE) { if (mPost.getPostType() == Post.TEXT_TYPE) {
mMenu.findItem(R.id.action_edit_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_edit_view_post_detail_activity).setVisible(true);
} }
mMenu.findItem(R.id.action_delete_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_delete_view_post_detail_activity).setVisible(true);
MenuItem nsfwItem = mMenu.findItem(R.id.action_nsfw_view_post_detail_activity); MenuItem nsfwItem = mMenu.findItem(R.id.action_nsfw_view_post_detail_activity);
nsfwItem.setVisible(true); nsfwItem.setVisible(true);
if(mPost.isNSFW()) { if (mPost.isNSFW()) {
nsfwItem.setTitle(R.string.action_unmark_nsfw); nsfwItem.setTitle(R.string.action_unmark_nsfw);
} else { } else {
nsfwItem.setTitle(R.string.action_mark_nsfw); nsfwItem.setTitle(R.string.action_mark_nsfw);
@ -390,7 +389,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
MenuItem spoilerItem = mMenu.findItem(R.id.action_spoiler_view_post_detail_activity); MenuItem spoilerItem = mMenu.findItem(R.id.action_spoiler_view_post_detail_activity);
spoilerItem.setVisible(true); spoilerItem.setVisible(true);
if(mPost.isSpoiler()) { if (mPost.isSpoiler()) {
spoilerItem.setTitle(R.string.action_unmark_spoiler); spoilerItem.setTitle(R.string.action_unmark_spoiler);
} else { } else {
spoilerItem.setTitle(R.string.action_mark_spoiler); spoilerItem.setTitle(R.string.action_mark_spoiler);
@ -426,15 +425,15 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
}); });
mRecyclerView.setAdapter(mAdapter); mRecyclerView.setAdapter(mAdapter);
if(comments == null) { if (comments == null) {
fetchComments(false); fetchComments(false);
} else { } else {
if(isRefreshing) { if (isRefreshing) {
isRefreshing = false; isRefreshing = false;
refresh(true, true); refresh(true, true);
} else { } else {
mAdapter.addComments(comments, hasMoreChildren); mAdapter.addComments(comments, hasMoreChildren);
if(isLoadingMoreChildren) { if (isLoadingMoreChildren) {
isLoadingMoreChildren = false; isLoadingMoreChildren = false;
fetchMoreComments(); fetchMoreComments();
} }
@ -450,14 +449,14 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
mGlide.clear(mFetchPostInfoImageView); mGlide.clear(mFetchPostInfoImageView);
Call<String> postAndComments; Call<String> postAndComments;
if(mAccessToken == null) { if (mAccessToken == null) {
if(isSingleCommentThreadMode && mSingleCommentId != null) { if (isSingleCommentThreadMode && mSingleCommentId != null) {
postAndComments = mRetrofit.create(RedditAPI.class).getPostAndCommentsSingleThreadById(subredditId, mSingleCommentId); postAndComments = mRetrofit.create(RedditAPI.class).getPostAndCommentsSingleThreadById(subredditId, mSingleCommentId);
} else { } else {
postAndComments = mRetrofit.create(RedditAPI.class).getPostAndCommentsById(subredditId); postAndComments = mRetrofit.create(RedditAPI.class).getPostAndCommentsById(subredditId);
} }
} else { } else {
if(isSingleCommentThreadMode && mSingleCommentId != null) { if (isSingleCommentThreadMode && mSingleCommentId != null) {
postAndComments = mOauthRetrofit.create(RedditAPI.class).getPostAndCommentsSingleThreadByIdOauth(subredditId, postAndComments = mOauthRetrofit.create(RedditAPI.class).getPostAndCommentsSingleThreadByIdOauth(subredditId,
mSingleCommentId, RedditUtils.getOAuthHeader(mAccessToken)); mSingleCommentId, RedditUtils.getOAuthHeader(mAccessToken));
} else { } else {
@ -470,20 +469,20 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePost(response.body(), mLocale, new ParsePost.ParsePostListener() { ParsePost.parsePost(response.body(), mLocale, new ParsePost.ParsePostListener() {
@Override @Override
public void onParsePostSuccess(Post post) { public void onParsePostSuccess(Post post) {
mPost = post; mPost = post;
if(mMenu != null) { if (mMenu != null) {
MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity); MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity);
MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity); MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity);
mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true);
if(mAccessToken != null) { if (mAccessToken != null) {
if(post.isSaved()) { if (post.isSaved()) {
saveItem.setVisible(true); saveItem.setVisible(true);
saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px);
} else { } else {
@ -491,7 +490,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px);
} }
if(post.isHidden()) { if (post.isHidden()) {
hideItem.setVisible(true); hideItem.setVisible(true);
hideItem.setTitle(R.string.action_unhide_post); hideItem.setTitle(R.string.action_unhide_post);
} else { } else {
@ -503,8 +502,8 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
hideItem.setVisible(false); hideItem.setVisible(false);
} }
if(mPost.getAuthor().equals(mAccountName)) { if (mPost.getAuthor().equals(mAccountName)) {
if(mPost.getPostType() == Post.TEXT_TYPE) { if (mPost.getPostType() == Post.TEXT_TYPE) {
mMenu.findItem(R.id.action_edit_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_edit_view_post_detail_activity).setVisible(true);
} }
mMenu.findItem(R.id.action_delete_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_delete_view_post_detail_activity).setVisible(true);
@ -547,13 +546,13 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
hasMoreChildren = children.size() != 0; hasMoreChildren = children.size() != 0;
mAdapter.addComments(expandedComments, hasMoreChildren); mAdapter.addComments(expandedComments, hasMoreChildren);
if(children.size() > 0) { if (children.size() > 0) {
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override @Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy); super.onScrolled(recyclerView, dx, dy);
if(!isLoadingMoreChildren && loadMoreChildrenSuccess) { if (!isLoadingMoreChildren && loadMoreChildrenSuccess) {
int visibleItemCount = mLinearLayoutManager.getChildCount(); int visibleItemCount = mLinearLayoutManager.getChildCount();
int totalItemCount = mLinearLayoutManager.getItemCount(); int totalItemCount = mLinearLayoutManager.getItemCount();
int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
@ -595,56 +594,56 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
mAdapter.setSingleComment(mSingleCommentId, isSingleCommentThreadMode); mAdapter.setSingleComment(mSingleCommentId, isSingleCommentThreadMode);
mAdapter.initiallyLoading(); mAdapter.initiallyLoading();
String commentId = null; String commentId = null;
if(isSingleCommentThreadMode) { if (isSingleCommentThreadMode) {
commentId = mSingleCommentId; commentId = mSingleCommentId;
} }
Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit; Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit;
FetchComment.fetchComments(retrofit, mAccessToken, mPost.getId(), commentId, mLocale, new FetchComment.FetchCommentListener() { FetchComment.fetchComments(retrofit, mAccessToken, mPost.getId(), commentId, mLocale, new FetchComment.FetchCommentListener() {
@Override @Override
public void onFetchCommentSuccess(ArrayList<CommentData> expandedComments, public void onFetchCommentSuccess(ArrayList<CommentData> expandedComments,
String parentId, ArrayList<String> children) { String parentId, ArrayList<String> children) {
ViewPostDetailActivity.this.children = children; ViewPostDetailActivity.this.children = children;
comments = expandedComments; comments = expandedComments;
hasMoreChildren = children.size() != 0; hasMoreChildren = children.size() != 0;
mAdapter.addComments(expandedComments, hasMoreChildren); mAdapter.addComments(expandedComments, hasMoreChildren);
if(children.size() > 0) { if (children.size() > 0) {
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override @Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy); super.onScrolled(recyclerView, dx, dy);
if(!isLoadingMoreChildren && loadMoreChildrenSuccess) { if (!isLoadingMoreChildren && loadMoreChildrenSuccess) {
int visibleItemCount = mLinearLayoutManager.getChildCount(); int visibleItemCount = mLinearLayoutManager.getChildCount();
int totalItemCount = mLinearLayoutManager.getItemCount(); int totalItemCount = mLinearLayoutManager.getItemCount();
int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
if ((visibleItemCount + firstVisibleItemPosition >= totalItemCount) && firstVisibleItemPosition >= 0) { if ((visibleItemCount + firstVisibleItemPosition >= totalItemCount) && firstVisibleItemPosition >= 0) {
fetchMoreComments(); fetchMoreComments();
}
}
} }
}); }
} }
if(changeRefreshState) { });
isRefreshing = false; }
} if (changeRefreshState) {
} isRefreshing = false;
}
}
@Override @Override
public void onFetchCommentFailed() { public void onFetchCommentFailed() {
mAdapter.initiallyLoadCommentsFailed(); mAdapter.initiallyLoadCommentsFailed();
if(changeRefreshState) { if (changeRefreshState) {
isRefreshing = false; isRefreshing = false;
} }
} }
}); });
} }
void fetchMoreComments() { void fetchMoreComments() {
if(isLoadingMoreChildren || !loadMoreChildrenSuccess) { if (isLoadingMoreChildren || !loadMoreChildrenSuccess) {
return; return;
} }
@ -672,24 +671,24 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
private void refresh(boolean fetchPost, boolean fetchComments) { private void refresh(boolean fetchPost, boolean fetchComments) {
if(!isRefreshing) { if (!isRefreshing) {
isRefreshing = true; isRefreshing = true;
mChildrenStartingIndex = 0; mChildrenStartingIndex = 0;
mFetchPostInfoLinearLayout.setVisibility(View.GONE); mFetchPostInfoLinearLayout.setVisibility(View.GONE);
mGlide.clear(mFetchPostInfoImageView); mGlide.clear(mFetchPostInfoImageView);
if(fetchComments) { if (fetchComments) {
if(!fetchPost) { if (!fetchPost) {
fetchComments(true); fetchComments(true);
} else { } else {
fetchComments(false); fetchComments(false);
} }
} }
if(fetchPost) { if (fetchPost) {
Retrofit retrofit; Retrofit retrofit;
if(mAccessToken == null) { if (mAccessToken == null) {
retrofit = mRetrofit; retrofit = mRetrofit;
} else { } else {
retrofit = mOauthRetrofit; retrofit = mOauthRetrofit;
@ -702,14 +701,14 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
mAdapter.updatePost(mPost); mAdapter.updatePost(mPost);
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)); EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
isRefreshing = false; isRefreshing = false;
if(mMenu != null) { if (mMenu != null) {
MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity); MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity);
MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity); MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity);
mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true);
if(mAccessToken != null) { if (mAccessToken != null) {
if(post.isSaved()) { if (post.isSaved()) {
saveItem.setVisible(true); saveItem.setVisible(true);
saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px);
} else { } else {
@ -717,7 +716,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px);
} }
if(post.isHidden()) { if (post.isHidden()) {
hideItem.setVisible(true); hideItem.setVisible(true);
hideItem.setTitle(R.string.action_unhide_post); hideItem.setTitle(R.string.action_unhide_post);
} else { } else {
@ -752,7 +751,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
private void showMessage(int resId) { private void showMessage(int resId) {
if(showToast) { if (showToast) {
Toast.makeText(ViewPostDetailActivity.this, resId, Toast.LENGTH_SHORT).show(); Toast.makeText(ViewPostDetailActivity.this, resId, Toast.LENGTH_SHORT).show();
} else { } else {
Snackbar.make(mCoordinatorLayout, resId, Snackbar.LENGTH_SHORT).show(); Snackbar.make(mCoordinatorLayout, resId, Snackbar.LENGTH_SHORT).show();
@ -760,7 +759,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
private void markNSFW() { private void markNSFW() {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw); mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw);
} }
@ -768,37 +767,37 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
params.put(RedditUtils.ID_KEY, mPost.getFullName()); params.put(RedditUtils.ID_KEY, mPost.getFullName());
mOauthRetrofit.create(RedditAPI.class).markNSFW(RedditUtils.getOAuthHeader(mAccessToken), params) mOauthRetrofit.create(RedditAPI.class).markNSFW(RedditUtils.getOAuthHeader(mAccessToken), params)
.enqueue(new Callback<String>() { .enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw); mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw);
}
refresh(true, false);
showMessage(R.string.mark_nsfw_success);
} else {
if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw);
}
showMessage(R.string.mark_nsfw_failed);
}
} }
refresh(true, false); @Override
showMessage(R.string.mark_nsfw_success); public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
} else { if (mMenu != null) {
if(mMenu != null) { mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw);
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw); }
showMessage(R.string.mark_nsfw_failed);
} }
});
showMessage(R.string.mark_nsfw_failed);
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
if(mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw);
}
showMessage(R.string.mark_nsfw_failed);
}
});
} }
private void unmarkNSFW() { private void unmarkNSFW() {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw); mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw);
} }
@ -808,15 +807,15 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
.enqueue(new Callback<String>() { .enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw); mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_mark_nsfw);
} }
refresh(true, false); refresh(true, false);
showMessage(R.string.unmark_nsfw_success); showMessage(R.string.unmark_nsfw_success);
} else { } else {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw); mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw);
} }
@ -826,7 +825,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
@Override @Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw); mMenu.findItem(R.id.action_nsfw_view_post_detail_activity).setTitle(R.string.action_unmark_nsfw);
} }
@ -836,7 +835,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
private void markSpoiler() { private void markSpoiler() {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler);
} }
@ -846,15 +845,15 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
.enqueue(new Callback<String>() { .enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler);
} }
refresh(true, false); refresh(true, false);
showMessage(R.string.mark_spoiler_success); showMessage(R.string.mark_spoiler_success);
} else { } else {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler);
} }
@ -864,7 +863,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
@Override @Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler);
} }
@ -874,7 +873,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
private void unmarkSpoiler() { private void unmarkSpoiler() {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler);
} }
@ -884,15 +883,15 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
.enqueue(new Callback<String>() { .enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_mark_spoiler);
} }
refresh(true, false); refresh(true, false);
showMessage(R.string.unmark_spoiler_success); showMessage(R.string.unmark_spoiler_success);
} else { } else {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler);
} }
@ -902,7 +901,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
@Override @Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler); mMenu.findItem(R.id.action_spoiler_view_post_detail_activity).setTitle(R.string.action_unmark_spoiler);
} }
@ -940,11 +939,11 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
@Subscribe @Subscribe
public void onPostUpdateEvent(PostUpdateEventToDetailActivity event) { public void onPostUpdateEvent(PostUpdateEventToDetailActivity event) {
if(mPost.getId().equals(event.post.getId())) { if (mPost.getId().equals(event.post.getId())) {
mPost.setVoteType(event.post.getVoteType()); mPost.setVoteType(event.post.getVoteType());
mPost.setSaved(event.post.isSaved()); mPost.setSaved(event.post.isSaved());
if(mMenu != null) { if (mMenu != null) {
if(event.post.isSaved()) { if (event.post.isSaved()) {
mMenu.findItem(R.id.action_save_view_post_detail_activity).setIcon(getResources() mMenu.findItem(R.id.action_save_view_post_detail_activity).setIcon(getResources()
.getDrawable(R.drawable.ic_baseline_bookmark_24px)); .getDrawable(R.drawable.ic_baseline_bookmark_24px));
} else { } else {
@ -970,7 +969,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
private void refreshAdapter() { private void refreshAdapter() {
int previousPosition = -1; int previousPosition = -1;
if(mLinearLayoutManager != null) { if (mLinearLayoutManager != null) {
previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
} }
@ -980,14 +979,14 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
mRecyclerView.setAdapter(mAdapter); mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setLayoutManager(layoutManager);
if(previousPosition > 0) { if (previousPosition > 0) {
mRecyclerView.scrollToPosition(previousPosition); mRecyclerView.scrollToPosition(previousPosition);
} }
} }
@Subscribe @Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) { public void onAccountSwitchEvent(SwitchAccountEvent event) {
if(!getClass().getName().equals(event.excludeActivityClassName)) { if (!getClass().getName().equals(event.excludeActivityClassName)) {
finish(); finish();
} }
} }
@ -996,14 +995,14 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.view_post_detail_activity, menu); getMenuInflater().inflate(R.menu.view_post_detail_activity, menu);
mMenu = menu; mMenu = menu;
if(mPost != null) { if (mPost != null) {
MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity); MenuItem saveItem = mMenu.findItem(R.id.action_save_view_post_detail_activity);
MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity); MenuItem hideItem = mMenu.findItem(R.id.action_hide_view_post_detail_activity);
mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true); mMenu.findItem(R.id.action_comment_view_post_detail_activity).setVisible(true);
if(mAccessToken != null) { if (mAccessToken != null) {
if(mPost.isSaved()) { if (mPost.isSaved()) {
saveItem.setVisible(true); saveItem.setVisible(true);
saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_24px);
} else { } else {
@ -1011,7 +1010,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px); saveItem.setIcon(R.drawable.ic_baseline_bookmark_border_24px);
} }
if(mPost.isHidden()) { if (mPost.isHidden()) {
hideItem.setVisible(true); hideItem.setVisible(true);
hideItem.setTitle(R.string.action_unhide_post); hideItem.setTitle(R.string.action_unhide_post);
} else { } else {
@ -1023,15 +1022,15 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
hideItem.setVisible(false); hideItem.setVisible(false);
} }
if(mPost.getAuthor().equals(mAccountName)) { if (mPost.getAuthor().equals(mAccountName)) {
if(mPost.getPostType() == Post.TEXT_TYPE) { if (mPost.getPostType() == Post.TEXT_TYPE) {
menu.findItem(R.id.action_edit_view_post_detail_activity).setVisible(true); menu.findItem(R.id.action_edit_view_post_detail_activity).setVisible(true);
} }
menu.findItem(R.id.action_delete_view_post_detail_activity).setVisible(true); menu.findItem(R.id.action_delete_view_post_detail_activity).setVisible(true);
MenuItem nsfwItem = menu.findItem(R.id.action_nsfw_view_post_detail_activity); MenuItem nsfwItem = menu.findItem(R.id.action_nsfw_view_post_detail_activity);
nsfwItem.setVisible(true); nsfwItem.setVisible(true);
if(mPost.isNSFW()) { if (mPost.isNSFW()) {
nsfwItem.setTitle(R.string.action_unmark_nsfw); nsfwItem.setTitle(R.string.action_unmark_nsfw);
} else { } else {
nsfwItem.setTitle(R.string.action_mark_nsfw); nsfwItem.setTitle(R.string.action_mark_nsfw);
@ -1039,7 +1038,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
MenuItem spoilerItem = menu.findItem(R.id.action_spoiler_view_post_detail_activity); MenuItem spoilerItem = menu.findItem(R.id.action_spoiler_view_post_detail_activity);
spoilerItem.setVisible(true); spoilerItem.setVisible(true);
if(mPost.isSpoiler()) { if (mPost.isSpoiler()) {
spoilerItem.setTitle(R.string.action_unmark_spoiler); spoilerItem.setTitle(R.string.action_unmark_spoiler);
} else { } else {
spoilerItem.setTitle(R.string.action_mark_spoiler); spoilerItem.setTitle(R.string.action_mark_spoiler);
@ -1060,18 +1059,18 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
refresh(true, true); refresh(true, true);
return true; return true;
case R.id.action_comment_view_post_detail_activity: case R.id.action_comment_view_post_detail_activity:
if(mPost != null) { if (mPost != null) {
if(mPost.isArchived()) { if (mPost.isArchived()) {
showMessage(R.string.archived_post_reply_unavailable); showMessage(R.string.archived_post_reply_unavailable);
return true; return true;
} }
if(mPost.isLocked()) { if (mPost.isLocked()) {
showMessage(R.string.locked_post_comment_unavailable); showMessage(R.string.locked_post_comment_unavailable);
return true; return true;
} }
if(mAccessToken == null) { if (mAccessToken == null) {
showMessage(R.string.login_first); showMessage(R.string.login_first);
return true; return true;
} }
@ -1085,8 +1084,8 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
} }
return true; return true;
case R.id.action_save_view_post_detail_activity: case R.id.action_save_view_post_detail_activity:
if(mPost != null && mAccessToken != null) { if (mPost != null && mAccessToken != null) {
if(mPost.isSaved()) { if (mPost.isSaved()) {
item.setIcon(R.drawable.ic_baseline_bookmark_border_24px); item.setIcon(R.drawable.ic_baseline_bookmark_border_24px);
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(), SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, mPost.getFullName(),
new SaveThing.SaveThingListener() { new SaveThing.SaveThingListener() {
@ -1135,8 +1134,8 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
startActivity(crosspostIntent); startActivity(crosspostIntent);
return true; return true;
case R.id.action_hide_view_post_detail_activity: case R.id.action_hide_view_post_detail_activity:
if(mPost != null && mAccessToken != null) { if (mPost != null && mAccessToken != null) {
if(mPost.isHidden()) { if (mPost.isHidden()) {
item.setTitle(R.string.action_hide_post); item.setTitle(R.string.action_hide_post);
HidePost.unhidePost(mOauthRetrofit, mAccessToken, mPost.getFullName(), new HidePost.HidePostListener() { HidePost.unhidePost(mOauthRetrofit, mAccessToken, mPost.getFullName(), new HidePost.HidePostListener() {
@ -1208,14 +1207,14 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
.show(); .show();
return true; return true;
case R.id.action_nsfw_view_post_detail_activity: case R.id.action_nsfw_view_post_detail_activity:
if(mPost.isNSFW()) { if (mPost.isNSFW()) {
unmarkNSFW(); unmarkNSFW();
} else { } else {
markNSFW(); markNSFW();
} }
return true; return true;
case R.id.action_spoiler_view_post_detail_activity: case R.id.action_spoiler_view_post_detail_activity:
if(mPost.isSpoiler()) { if (mPost.isSpoiler()) {
unmarkSpoiler(); unmarkSpoiler();
} else { } else {
markSpoiler(); markSpoiler();
@ -1239,16 +1238,16 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(requestCode == WRITE_COMMENT_REQUEST_CODE) { if (requestCode == WRITE_COMMENT_REQUEST_CODE) {
if(data != null && resultCode == RESULT_OK) { if (data != null && resultCode == RESULT_OK) {
if(data.hasExtra(EXTRA_COMMENT_DATA_KEY)) { if (data.hasExtra(EXTRA_COMMENT_DATA_KEY)) {
CommentData comment = data.getParcelableExtra(EXTRA_COMMENT_DATA_KEY); CommentData comment = data.getParcelableExtra(EXTRA_COMMENT_DATA_KEY);
if(comment != null && comment.getDepth() == 0) { if (comment != null && comment.getDepth() == 0) {
mAdapter.addComment(comment); mAdapter.addComment(comment);
} else { } else {
String parentFullname = data.getStringExtra(CommentActivity.EXTRA_PARENT_FULLNAME_KEY); String parentFullname = data.getStringExtra(CommentActivity.EXTRA_PARENT_FULLNAME_KEY);
int parentPosition = data.getIntExtra(CommentActivity.EXTRA_PARENT_POSITION_KEY, -1); int parentPosition = data.getIntExtra(CommentActivity.EXTRA_PARENT_POSITION_KEY, -1);
if(parentFullname != null && parentPosition >= 0) { if (parentFullname != null && parentPosition >= 0) {
mAdapter.addChildComment(comment, parentFullname, parentPosition); mAdapter.addChildComment(comment, parentFullname, parentPosition);
} }
} }
@ -1256,12 +1255,12 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
Toast.makeText(this, R.string.send_comment_failed, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.send_comment_failed, Toast.LENGTH_SHORT).show();
} }
} }
} else if(requestCode == EDIT_POST_REQUEST_CODE) { } else if (requestCode == EDIT_POST_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
refresh(true, false); refresh(true, false);
} }
} else if(requestCode == EDIT_COMMENT_REQUEST_CODE) { } else if (requestCode == EDIT_COMMENT_REQUEST_CODE) {
if(resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
mAdapter.editComment(data.getStringExtra(EditCommentActivity.EXTRA_EDITED_COMMENT_CONTENT), mAdapter.editComment(data.getStringExtra(EditCommentActivity.EXTRA_EDITED_COMMENT_CONTENT),
data.getExtras().getInt(EditCommentActivity.EXTRA_EDITED_COMMENT_POSITION)); data.getExtras().getInt(EditCommentActivity.EXTRA_EDITED_COMMENT_POSITION));
} }
@ -1277,7 +1276,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if(orientation == getResources().getConfiguration().orientation) { if (orientation == getResources().getConfiguration().orientation) {
super.onBackPressed(); super.onBackPressed();
} else { } else {
finish(); finish();
@ -1303,7 +1302,7 @@ public class ViewPostDetailActivity extends AppCompatActivity implements FlairBo
RedditUtils.getOAuthHeader(mAccessToken), params).enqueue(new Callback<String>() { RedditUtils.getOAuthHeader(mAccessToken), params).enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
refresh(true, false); refresh(true, false);
showMessage(R.string.update_flair_success); showMessage(R.string.update_flair_success);
} else { } else {

View File

@ -91,19 +91,40 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
private static final String MESSAGE_FULLNAME_STATE = "MFS"; private static final String MESSAGE_FULLNAME_STATE = "MFS";
private static final String NEW_ACCOUNT_NAME_STATE = "NANS"; private static final String NEW_ACCOUNT_NAME_STATE = "NANS";
@BindView(R.id.coordinator_layout_view_subreddit_detail_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_view_subreddit_detail_activity)
@BindView(R.id.appbar_layout_view_subreddit_detail) AppBarLayout appBarLayout; CoordinatorLayout coordinatorLayout;
@BindView(R.id.collapsing_toolbar_layout_view_subreddit_detail_activity) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R.id.appbar_layout_view_subreddit_detail)
@BindView(R.id.toolbar) Toolbar toolbar; AppBarLayout appBarLayout;
@BindView(R.id.banner_image_view_view_subreddit_detail_activity) GifImageView bannerImageView; @BindView(R.id.collapsing_toolbar_layout_view_subreddit_detail_activity)
@BindView(R.id.icon_gif_image_view_view_subreddit_detail_activity) GifImageView iconGifImageView; CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.subscribe_subreddit_chip_view_subreddit_detail_activity) Chip subscribeSubredditChip; @BindView(R.id.toolbar)
@BindView(R.id.subreddit_name_text_view_view_subreddit_detail_activity) TextView subredditNameTextView; Toolbar toolbar;
@BindView(R.id.subscriber_count_text_view_view_subreddit_detail_activity) TextView nSubscribersTextView; @BindView(R.id.banner_image_view_view_subreddit_detail_activity)
@BindView(R.id.online_subscriber_count_text_view_view_subreddit_detail_activity) TextView nOnlineSubscribersTextView; GifImageView bannerImageView;
@BindView(R.id.description_text_view_view_subreddit_detail_activity) TextView descriptionTextView; @BindView(R.id.icon_gif_image_view_view_subreddit_detail_activity)
@BindView(R.id.fab_view_subreddit_detail_activity) FloatingActionButton fab; GifImageView iconGifImageView;
@BindView(R.id.subscribe_subreddit_chip_view_subreddit_detail_activity)
Chip subscribeSubredditChip;
@BindView(R.id.subreddit_name_text_view_view_subreddit_detail_activity)
TextView subredditNameTextView;
@BindView(R.id.subscriber_count_text_view_view_subreddit_detail_activity)
TextView nSubscribersTextView;
@BindView(R.id.online_subscriber_count_text_view_view_subreddit_detail_activity)
TextView nOnlineSubscribersTextView;
@BindView(R.id.description_text_view_view_subreddit_detail_activity)
TextView descriptionTextView;
@BindView(R.id.fab_view_subreddit_detail_activity)
FloatingActionButton fab;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
@ -115,30 +136,14 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
private boolean showToast = false; private boolean showToast = false;
private String mMessageFullname; private String mMessageFullname;
private String mNewAccountName; private String mNewAccountName;
private RequestManager glide; private RequestManager glide;
private Fragment mFragment; private Fragment mFragment;
private Menu mMenu; private Menu mMenu;
private AppBarLayout.LayoutParams params; private AppBarLayout.LayoutParams params;
private PostTypeBottomSheetFragment postTypeBottomSheetFragment; private PostTypeBottomSheetFragment postTypeBottomSheetFragment;
private SortTypeBottomSheetFragment sortTypeBottomSheetFragment; private SortTypeBottomSheetFragment sortTypeBottomSheetFragment;
private SubredditViewModel mSubredditViewModel; private SubredditViewModel mSubredditViewModel;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -163,12 +168,12 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
Resources resources = getResources(); Resources resources = getResources();
if(resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) { if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || resources.getBoolean(R.bool.isTablet)) {
Window window = getWindow(); Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
@ -178,11 +183,11 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
} }
@ -210,7 +215,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -220,7 +225,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME_KEY); subredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME_KEY);
if(savedInstanceState == null) { if (savedInstanceState == null) {
mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME); mMessageFullname = getIntent().getStringExtra(EXTRA_MESSAGE_FULLNAME);
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME); mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
@ -234,7 +239,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE); mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE); mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
if(!mNullAccessToken && mAccessToken == null) { if (!mNullAccessToken && mAccessToken == null) {
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
} else { } else {
bindView(false); bindView(false);
@ -242,7 +247,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
} }
if(mFetchSubredditInfoSuccess) { if (mFetchSubredditInfoSuccess) {
nOnlineSubscribersTextView.setText(getString(R.string.online_subscribers_number_detail, mNCurrentOnlineSubscribers)); nOnlineSubscribersTextView.setText(getString(R.string.online_subscribers_number_detail, mNCurrentOnlineSubscribers));
} }
} }
@ -280,8 +285,8 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
new SubredditViewModel.Factory(getApplication(), mRedditDataRoomDatabase, subredditName)) new SubredditViewModel.Factory(getApplication(), mRedditDataRoomDatabase, subredditName))
.get(SubredditViewModel.class); .get(SubredditViewModel.class);
mSubredditViewModel.getSubredditLiveData().observe(this, subredditData -> { mSubredditViewModel.getSubredditLiveData().observe(this, subredditData -> {
if(subredditData != null) { if (subredditData != null) {
if(subredditData.getBannerUrl().equals("")) { if (subredditData.getBannerUrl().equals("")) {
iconGifImageView.setOnClickListener(view -> { iconGifImageView.setOnClickListener(view -> {
//Do nothing as it has no image //Do nothing as it has no image
}); });
@ -296,7 +301,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
}); });
} }
if(subredditData.getIconUrl().equals("")) { if (subredditData.getIconUrl().equals("")) {
glide.load(getDrawable(R.drawable.subreddit_default_icon)) glide.load(getDrawable(R.drawable.subreddit_default_icon))
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0)))
.into(iconGifImageView); .into(iconGifImageView);
@ -319,13 +324,13 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
} }
String subredditFullName = "r/" + subredditData.getName(); String subredditFullName = "r/" + subredditData.getName();
if(!title.equals(subredditFullName)) { if (!title.equals(subredditFullName)) {
getSupportActionBar().setTitle(subredditFullName); getSupportActionBar().setTitle(subredditFullName);
} }
subredditNameTextView.setText(subredditFullName); subredditNameTextView.setText(subredditFullName);
String nSubscribers = getString(R.string.subscribers_number_detail, subredditData.getNSubscribers()); String nSubscribers = getString(R.string.subscribers_number_detail, subredditData.getNSubscribers());
nSubscribersTextView.setText(nSubscribers); nSubscribersTextView.setText(nSubscribers);
if(subredditData.getDescription().equals("")) { if (subredditData.getDescription().equals("")) {
descriptionTextView.setVisibility(View.GONE); descriptionTextView.setVisibility(View.GONE);
} else { } else {
descriptionTextView.setVisibility(View.VISIBLE); descriptionTextView.setVisibility(View.VISIBLE);
@ -335,7 +340,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
}); });
fab.setOnClickListener(view -> { fab.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(ViewSubredditDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(ViewSubredditDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -346,14 +351,14 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
private void getCurrentAccountAndBindView() { private void getCurrentAccountAndBindView() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(mNewAccountName != null) { if (mNewAccountName != null) {
if(account == null || !account.getUsername().equals(mNewAccountName)) { if (account == null || !account.getUsername().equals(mNewAccountName)) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> { new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> {
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName())); EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
mNewAccountName = null; mNewAccountName = null;
if(newAccount == null) { if (newAccount == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = newAccount.getAccessToken(); mAccessToken = newAccount.getAccessToken();
@ -368,7 +373,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
bindView(true); bindView(true);
} }
} else { } else {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -381,7 +386,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
} }
private void fetchSubredditData() { private void fetchSubredditData() {
if(!mFetchSubredditInfoSuccess) { if (!mFetchSubredditInfoSuccess) {
FetchSubredditData.fetchSubredditData(mRetrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() { FetchSubredditData.fetchSubredditData(mRetrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@Override @Override
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) { public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
@ -400,7 +405,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
} }
private void bindView(boolean initializeFragment) { private void bindView(boolean initializeFragment) {
if(mAccessToken != null && mMessageFullname != null) { if (mAccessToken != null && mMessageFullname != null) {
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() { ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
@Override @Override
public void readSuccess() { public void readSuccess() {
@ -415,14 +420,14 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
} }
subscribeSubredditChip.setOnClickListener(view -> { subscribeSubredditChip.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(ViewSubredditDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(ViewSubredditDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
if(subscriptionReady) { if (subscriptionReady) {
subscriptionReady = false; subscriptionReady = false;
if(subscribeSubredditChip.getText().equals(getResources().getString(R.string.subscribe))) { if (subscribeSubredditChip.getText().equals(getResources().getString(R.string.subscribe))) {
SubredditSubscription.subscribeToSubreddit(mOauthRetrofit, mRetrofit, mAccessToken, SubredditSubscription.subscribeToSubreddit(mOauthRetrofit, mRetrofit, mAccessToken,
subredditName, mAccountName, mRedditDataRoomDatabase, subredditName, mAccountName, mRedditDataRoomDatabase,
new SubredditSubscription.SubredditSubscriptionListener() { new SubredditSubscription.SubredditSubscriptionListener() {
@ -479,7 +484,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
} }
}).execute(); }).execute();
if(initializeFragment) { if (initializeFragment) {
mFragment = new PostFragment(); mFragment = new PostFragment();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString(PostFragment.EXTRA_NAME, subredditName); bundle.putString(PostFragment.EXTRA_NAME, subredditName);
@ -497,7 +502,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
getMenuInflater().inflate(R.menu.view_subreddit_detail_activity, menu); getMenuInflater().inflate(R.menu.view_subreddit_detail_activity, menu);
mMenu = menu; mMenu = menu;
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_subreddit_detail_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_subreddit_detail_activity);
if(isInLazyMode) { if (isInLazyMode) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
@ -527,10 +532,10 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
startActivity(intent); startActivity(intent);
break; break;
case R.id.action_refresh_view_subreddit_detail_activity: case R.id.action_refresh_view_subreddit_detail_activity:
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_lazy_mode_view_subreddit_detail_activity).setTitle(R.string.action_start_lazy_mode); mMenu.findItem(R.id.action_lazy_mode_view_subreddit_detail_activity).setTitle(R.string.action_start_lazy_mode);
} }
if(mFragment instanceof FragmentCommunicator) { if (mFragment instanceof FragmentCommunicator) {
((FragmentCommunicator) mFragment).refresh(); ((FragmentCommunicator) mFragment).refresh();
mFetchSubredditInfoSuccess = false; mFetchSubredditInfoSuccess = false;
fetchSubredditData(); fetchSubredditData();
@ -538,7 +543,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
break; break;
case R.id.action_lazy_mode_view_subreddit_detail_activity: case R.id.action_lazy_mode_view_subreddit_detail_activity:
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_subreddit_detail_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_subreddit_detail_activity);
if(isInLazyMode) { if (isInLazyMode) {
isInLazyMode = false; isInLazyMode = false;
((FragmentCommunicator) mFragment).stopLazyMode(); ((FragmentCommunicator) mFragment).stopLazyMode();
lazyModeItem.setTitle(R.string.action_start_lazy_mode); lazyModeItem.setTitle(R.string.action_start_lazy_mode);
@ -547,7 +552,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
} else { } else {
isInLazyMode = true; isInLazyMode = true;
if(((FragmentCommunicator) mFragment).startLazyMode()) { if (((FragmentCommunicator) mFragment).startLazyMode()) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
appBarLayout.setExpanded(false); appBarLayout.setExpanded(false);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
@ -581,10 +586,10 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
} }
private void makeSnackbar(int resId, boolean retry) { private void makeSnackbar(int resId, boolean retry) {
if(showToast) { if (showToast) {
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show(); Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
} else { } else {
if(retry) { if (retry) {
Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).setAction(R.string.retry, Snackbar.make(coordinatorLayout, resId, Snackbar.LENGTH_SHORT).setAction(R.string.retry,
view -> fetchSubredditData()).show(); view -> fetchSubredditData()).show();
} else { } else {
@ -634,7 +639,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
@Subscribe @Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) { public void onAccountSwitchEvent(SwitchAccountEvent event) {
if(!getClass().getName().equals(event.excludeActivityClassName)) { if (!getClass().getName().equals(event.excludeActivityClassName)) {
finish(); finish();
} }
} }
@ -647,14 +652,9 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> { private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
interface InsertSubredditDataAsyncTaskListener {
void insertSuccess();
}
private SubredditDao mSubredditDao; private SubredditDao mSubredditDao;
private SubredditData subredditData; private SubredditData subredditData;
private InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener; private InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener;
InsertSubredditDataAsyncTask(RedditDataRoomDatabase db, SubredditData subredditData, InsertSubredditDataAsyncTask(RedditDataRoomDatabase db, SubredditData subredditData,
InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener) { InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener) {
mSubredditDao = db.subredditDao(); mSubredditDao = db.subredditDao();
@ -672,5 +672,9 @@ public class ViewSubredditDetailActivity extends AppCompatActivity implements So
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
insertSubredditDataAsyncTaskListener.insertSuccess(); insertSubredditDataAsyncTaskListener.insertSuccess();
} }
interface InsertSubredditDataAsyncTaskListener {
void insertSuccess();
}
} }
} }

View File

@ -43,35 +43,35 @@ import org.greenrobot.eventbus.Subscribe;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.AppBarStateChangeListener; import ml.docilealligator.infinityforreddit.AppBarStateChangeListener;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.AsyncTask.CheckIsFollowingUserAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.CheckIsFollowingUserAsyncTask;
import ml.docilealligator.infinityforreddit.Fragment.CommentsListingFragment; import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.ContentFontStyle; import ml.docilealligator.infinityforreddit.ContentFontStyle;
import ml.docilealligator.infinityforreddit.DeleteThing; import ml.docilealligator.infinityforreddit.DeleteThing;
import ml.docilealligator.infinityforreddit.Event.ChangeNSFWEvent;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.FetchUserData; import ml.docilealligator.infinityforreddit.FetchUserData;
import ml.docilealligator.infinityforreddit.FontStyle; import ml.docilealligator.infinityforreddit.FontStyle;
import ml.docilealligator.infinityforreddit.Fragment.CommentsListingFragment;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.Fragment.UserThingSortTypeBottomSheetFragment;
import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.ReadMessage; import ml.docilealligator.infinityforreddit.ReadMessage;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserDao; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.AsyncTask.SwitchAccountAsyncTask;
import ml.docilealligator.infinityforreddit.Event.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.TitleFontStyle; import ml.docilealligator.infinityforreddit.TitleFontStyle;
import ml.docilealligator.infinityforreddit.User.UserDao; import ml.docilealligator.infinityforreddit.User.UserDao;
import ml.docilealligator.infinityforreddit.User.UserData; import ml.docilealligator.infinityforreddit.User.UserData;
import ml.docilealligator.infinityforreddit.User.UserViewModel; import ml.docilealligator.infinityforreddit.User.UserViewModel;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.UserFollowing; import ml.docilealligator.infinityforreddit.UserFollowing;
import ml.docilealligator.infinityforreddit.Fragment.UserThingSortTypeBottomSheetFragment;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -94,27 +94,43 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
private static final String MESSAGE_FULLNAME_STATE = "MFS"; private static final String MESSAGE_FULLNAME_STATE = "MFS";
private static final String NEW_ACCOUNT_NAME_STATE = "NANS"; private static final String NEW_ACCOUNT_NAME_STATE = "NANS";
@BindView(R.id.coordinator_layout_view_user_detail_activity) CoordinatorLayout coordinatorLayout; @BindView(R.id.coordinator_layout_view_user_detail_activity)
@BindView(R.id.view_pager_view_user_detail_activity) ViewPager viewPager; CoordinatorLayout coordinatorLayout;
@BindView(R.id.appbar_layout_view_user_detail) AppBarLayout appBarLayout; @BindView(R.id.view_pager_view_user_detail_activity)
@BindView(R.id.tab_layout_view_user_detail_activity) TabLayout tabLayout; ViewPager viewPager;
@BindView(R.id.collapsing_toolbar_layout_view_user_detail_activity) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R.id.appbar_layout_view_user_detail)
@BindView(R.id.banner_image_view_view_user_detail_activity) GifImageView bannerImageView; AppBarLayout appBarLayout;
@BindView(R.id.icon_gif_image_view_view_user_detail_activity) GifImageView iconGifImageView; @BindView(R.id.tab_layout_view_user_detail_activity)
@BindView(R.id.user_name_text_view_view_user_detail_activity) TextView userNameTextView; TabLayout tabLayout;
@BindView(R.id.subscribe_user_chip_view_user_detail_activity) Chip subscribeUserChip; @BindView(R.id.collapsing_toolbar_layout_view_user_detail_activity)
@BindView(R.id.karma_text_view_view_user_detail_activity) TextView karmaTextView; CollapsingToolbarLayout collapsingToolbarLayout;
@BindView(R.id.banner_image_view_view_user_detail_activity)
GifImageView bannerImageView;
@BindView(R.id.icon_gif_image_view_view_user_detail_activity)
GifImageView iconGifImageView;
@BindView(R.id.user_name_text_view_view_user_detail_activity)
TextView userNameTextView;
@BindView(R.id.subscribe_user_chip_view_user_detail_activity)
Chip subscribeUserChip;
@BindView(R.id.karma_text_view_view_user_detail_activity)
TextView karmaTextView;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private SectionsPagerAdapter sectionsPagerAdapter; private SectionsPagerAdapter sectionsPagerAdapter;
private SubscribedUserDao subscribedUserDao; private SubscribedUserDao subscribedUserDao;
private RequestManager glide; private RequestManager glide;
private UserViewModel userViewModel; private UserViewModel userViewModel;
private Menu mMenu; private Menu mMenu;
private AppBarLayout.LayoutParams params; private AppBarLayout.LayoutParams params;
private UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment; private UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment;
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
@ -132,20 +148,6 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
private String mMessageFullname; private String mMessageFullname;
private String mNewAccountName; private String mNewAccountName;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -177,7 +179,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
break; break;
case 2: case 2:
if(systemDefault) { if (systemDefault) {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
} else { } else {
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY); AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
@ -246,7 +248,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
boolean lightNavBar = false; boolean lightNavBar = false;
if((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { if ((resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
lightNavBar = true; lightNavBar = true;
} }
boolean finalLightNavBar = lightNavBar; boolean finalLightNavBar = lightNavBar;
@ -256,14 +258,14 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
@Override @Override
public void onStateChanged(AppBarLayout appBarLayout, State state) { public void onStateChanged(AppBarLayout appBarLayout, State state) {
if (state == State.COLLAPSED) { if (state == State.COLLAPSED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
tabLayout.setTabTextColors(collapsedTabTextColor, collapsedTabTextColor); tabLayout.setTabTextColors(collapsedTabTextColor, collapsedTabTextColor);
tabLayout.setSelectedTabIndicatorColor(collapsedTabIndicatorColor); tabLayout.setSelectedTabIndicatorColor(collapsedTabIndicatorColor);
tabLayout.setBackgroundColor(collapsedTabBackgroundColor); tabLayout.setBackgroundColor(collapsedTabBackgroundColor);
} else if (state == State.EXPANDED) { } else if (state == State.EXPANDED) {
if(finalLightNavBar) { if (finalLightNavBar) {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
tabLayout.setTabTextColors(expandedTabTextColor, expandedTabTextColor); tabLayout.setTabTextColors(expandedTabTextColor, expandedTabTextColor);
@ -339,7 +341,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
if (userData.isCanBeFollowed()) { if (userData.isCanBeFollowed()) {
subscribeUserChip.setVisibility(View.VISIBLE); subscribeUserChip.setVisibility(View.VISIBLE);
subscribeUserChip.setOnClickListener(view -> { subscribeUserChip.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(ViewUserDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(ViewUserDetailActivity.this, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -418,14 +420,14 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
private void getCurrentAccountAndInitializeViewPager() { private void getCurrentAccountAndInitializeViewPager() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(mNewAccountName != null) { if (mNewAccountName != null) {
if(account == null || !account.getUsername().equals(mNewAccountName)) { if (account == null || !account.getUsername().equals(mNewAccountName)) {
new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> { new SwitchAccountAsyncTask(mRedditDataRoomDatabase, mNewAccountName, newAccount -> {
EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName())); EventBus.getDefault().post(new SwitchAccountEvent(getClass().getName()));
Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.account_switched, Toast.LENGTH_SHORT).show();
mNewAccountName = null; mNewAccountName = null;
if(newAccount == null) { if (newAccount == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = newAccount.getAccessToken(); mAccessToken = newAccount.getAccessToken();
@ -440,7 +442,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
initializeViewPager(); initializeViewPager();
} }
} else { } else {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -466,8 +468,8 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
if(isInLazyMode) { if (isInLazyMode) {
if(viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
sectionsPagerAdapter.resumeLazyMode(); sectionsPagerAdapter.resumeLazyMode();
} else { } else {
sectionsPagerAdapter.pauseLazyMode(); sectionsPagerAdapter.pauseLazyMode();
@ -481,7 +483,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
} }
}); });
if(mAccessToken != null && mMessageFullname != null) { if (mAccessToken != null && mMessageFullname != null) {
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() { ReadMessage.readMessage(mOauthRetrofit, mAccessToken, mMessageFullname, new ReadMessage.ReadMessageListener() {
@Override @Override
public void readSuccess() { public void readSuccess() {
@ -570,7 +572,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.action_refresh_view_user_detail_activity: case R.id.action_refresh_view_user_detail_activity:
if(mMenu != null) { if (mMenu != null) {
mMenu.findItem(R.id.action_lazy_mode_view_user_detail_activity).setTitle(R.string.action_start_lazy_mode); mMenu.findItem(R.id.action_lazy_mode_view_user_detail_activity).setTitle(R.string.action_start_lazy_mode);
} }
sectionsPagerAdapter.refresh(); sectionsPagerAdapter.refresh();
@ -579,7 +581,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
return true; return true;
case R.id.action_lazy_mode_view_user_detail_activity: case R.id.action_lazy_mode_view_user_detail_activity:
MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_user_detail_activity); MenuItem lazyModeItem = mMenu.findItem(R.id.action_lazy_mode_view_user_detail_activity);
if(isInLazyMode) { if (isInLazyMode) {
isInLazyMode = false; isInLazyMode = false;
sectionsPagerAdapter.stopLazyMode(); sectionsPagerAdapter.stopLazyMode();
lazyModeItem.setTitle(R.string.action_start_lazy_mode); lazyModeItem.setTitle(R.string.action_start_lazy_mode);
@ -588,7 +590,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
collapsingToolbarLayout.setLayoutParams(params); collapsingToolbarLayout.setLayoutParams(params);
} else { } else {
isInLazyMode = true; isInLazyMode = true;
if(sectionsPagerAdapter.startLazyMode()) { if (sectionsPagerAdapter.startLazyMode()) {
lazyModeItem.setTitle(R.string.action_stop_lazy_mode); lazyModeItem.setTitle(R.string.action_stop_lazy_mode);
appBarLayout.setExpanded(false); appBarLayout.setExpanded(false);
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
@ -621,7 +623,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
} }
private void showMessage(int resId, boolean retry) { private void showMessage(int resId, boolean retry) {
if(showToast) { if (showToast) {
Toast.makeText(this, resId, Toast.LENGTH_SHORT).show(); Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
} else { } else {
if (retry) { if (retry) {
@ -640,7 +642,7 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
@Subscribe @Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) { public void onAccountSwitchEvent(SwitchAccountEvent event) {
if(!getClass().getName().equals(event.excludeActivityClassName)) { if (!getClass().getName().equals(event.excludeActivityClassName)) {
finish(); finish();
} }
} }
@ -652,14 +654,9 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
private static class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> { private static class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
interface InsertUserDataAsyncTaskListener {
void insertSuccess();
}
private UserDao userDao; private UserDao userDao;
private UserData subredditData; private UserData subredditData;
private InsertUserDataAsyncTaskListener insertUserDataAsyncTaskListener; private InsertUserDataAsyncTaskListener insertUserDataAsyncTaskListener;
InsertUserDataAsyncTask(UserDao userDao, UserData userData, InsertUserDataAsyncTask(UserDao userDao, UserData userData,
InsertUserDataAsyncTaskListener insertUserDataAsyncTaskListener) { InsertUserDataAsyncTaskListener insertUserDataAsyncTaskListener) {
this.userDao = userDao; this.userDao = userDao;
@ -677,6 +674,10 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
insertUserDataAsyncTaskListener.insertSuccess(); insertUserDataAsyncTaskListener.insertSuccess();
} }
interface InsertUserDataAsyncTaskListener {
void insertSuccess();
}
} }
private class SectionsPagerAdapter extends FragmentPagerAdapter { private class SectionsPagerAdapter extends FragmentPagerAdapter {
@ -744,55 +745,55 @@ public class ViewUserDetailActivity extends AppCompatActivity implements UserThi
public void refresh() { public void refresh() {
if (viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
if(postFragment != null) { if (postFragment != null) {
postFragment.refresh(); postFragment.refresh();
} }
} else { } else {
if(commentsListingFragment != null) { if (commentsListingFragment != null) {
commentsListingFragment.refresh(); commentsListingFragment.refresh();
} }
} }
} }
boolean startLazyMode() { boolean startLazyMode() {
if(postFragment != null) { if (postFragment != null) {
return ((FragmentCommunicator) postFragment).startLazyMode(); return ((FragmentCommunicator) postFragment).startLazyMode();
} }
return false; return false;
} }
void stopLazyMode() { void stopLazyMode() {
if(postFragment != null) { if (postFragment != null) {
((FragmentCommunicator) postFragment).stopLazyMode(); ((FragmentCommunicator) postFragment).stopLazyMode();
} }
} }
void resumeLazyMode() { void resumeLazyMode() {
if(postFragment != null) { if (postFragment != null) {
((FragmentCommunicator) postFragment).resumeLazyMode(false); ((FragmentCommunicator) postFragment).resumeLazyMode(false);
} }
} }
void pauseLazyMode() { void pauseLazyMode() {
if(postFragment != null) { if (postFragment != null) {
((FragmentCommunicator) postFragment).pauseLazyMode(false); ((FragmentCommunicator) postFragment).pauseLazyMode(false);
} }
} }
public void changeSortType(String sortType) { public void changeSortType(String sortType) {
if(viewPager.getCurrentItem() == 0) { if (viewPager.getCurrentItem() == 0) {
if(postFragment != null) { if (postFragment != null) {
postFragment.changeSortType(sortType); postFragment.changeSortType(sortType);
} }
} else { } else {
if(commentsListingFragment != null) { if (commentsListingFragment != null) {
commentsListingFragment.changeSortType(sortType); commentsListingFragment.changeSortType(sortType);
} }
} }
} }
public void changeNSFW(boolean nsfw) { public void changeNSFW(boolean nsfw) {
if(postFragment != null) { if (postFragment != null) {
postFragment.changeNSFW(nsfw); postFragment.changeNSFW(nsfw);
} }
} }

View File

@ -50,14 +50,14 @@ import ml.docilealligator.infinityforreddit.R;
public class ViewVideoActivity extends AppCompatActivity { public class ViewVideoActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
public static final String TITLE_KEY = "TK"; public static final String TITLE_KEY = "TK";
public static final String SUBREDDIT_KEY = "SK"; public static final String SUBREDDIT_KEY = "SK";
public static final String ID_KEY = "IK"; public static final String ID_KEY = "IK";
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
@BindView(R.id.relative_layout_view_video_activity) RelativeLayout relativeLayout; @BindView(R.id.relative_layout_view_video_activity)
@BindView(R.id.player_view_view_video_activity) PlayerView videoPlayerView; RelativeLayout relativeLayout;
@BindView(R.id.player_view_view_video_activity)
PlayerView videoPlayerView;
private Uri mVideoUri; private Uri mVideoUri;
private SimpleExoPlayer player; private SimpleExoPlayer player;
@ -122,7 +122,7 @@ public class ViewVideoActivity extends AppCompatActivity {
actionBarElementColorAnimation.addUpdateListener(valueAnimator -> { actionBarElementColorAnimation.addUpdateListener(valueAnimator -> {
upArrow.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN); upArrow.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN);
if(mMenu != null) { if (mMenu != null) {
Drawable drawable = mMenu.getItem(0).getIcon(); Drawable drawable = mMenu.getItem(0).getIcon();
drawable.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN); drawable.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN);
} }
@ -134,7 +134,7 @@ public class ViewVideoActivity extends AppCompatActivity {
public void onSwipingUp(final MotionEvent event) { public void onSwipingUp(final MotionEvent event) {
float nowY = event.getY(); float nowY = event.getY();
float offset; float offset;
if(touchY == -1.0f) { if (touchY == -1.0f) {
offset = 0.0f; offset = 0.0f;
} else { } else {
offset = nowY - touchY; offset = nowY - touchY;
@ -154,7 +154,7 @@ public class ViewVideoActivity extends AppCompatActivity {
.setDuration(300) .setDuration(300)
.start(); .start();
if(totalLengthY < -pxHeight / 8) { if (totalLengthY < -pxHeight / 8) {
videoPlayerView.animate() videoPlayerView.animate()
.y(-pxHeight) .y(-pxHeight)
.setDuration(300) .setDuration(300)
@ -172,10 +172,12 @@ public class ViewVideoActivity extends AppCompatActivity {
} }
@Override @Override
public void onAnimationCancel(Animator animator) {} public void onAnimationCancel(Animator animator) {
}
@Override @Override
public void onAnimationRepeat(Animator animator) {} public void onAnimationRepeat(Animator animator) {
}
}) })
.start(); .start();
} else { } else {
@ -194,7 +196,7 @@ public class ViewVideoActivity extends AppCompatActivity {
public void onSwipingDown(final MotionEvent event) { public void onSwipingDown(final MotionEvent event) {
float nowY = event.getY(); float nowY = event.getY();
float offset; float offset;
if(touchY == -1.0f) { if (touchY == -1.0f) {
offset = 0.0f; offset = 0.0f;
} else { } else {
offset = nowY - touchY; offset = nowY - touchY;
@ -209,7 +211,7 @@ public class ViewVideoActivity extends AppCompatActivity {
@Override @Override
public boolean onSwipedDown(final MotionEvent event) { public boolean onSwipedDown(final MotionEvent event) {
if(totalLengthY > pxHeight / 8) { if (totalLengthY > pxHeight / 8) {
videoPlayerView.animate() videoPlayerView.animate()
.y(pxHeight) .y(pxHeight)
.setDuration(300) .setDuration(300)
@ -227,10 +229,12 @@ public class ViewVideoActivity extends AppCompatActivity {
} }
@Override @Override
public void onAnimationCancel(Animator animator) {} public void onAnimationCancel(Animator animator) {
}
@Override @Override
public void onAnimationRepeat(Animator animator) {} public void onAnimationRepeat(Animator animator) {
}
}) })
.start(); .start();
} else { } else {
@ -333,7 +337,7 @@ public class ViewVideoActivity extends AppCompatActivity {
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
if(wasPlaying) { if (wasPlaying) {
player.setPlayWhenReady(true); player.setPlayWhenReady(true);
} }
} }
@ -347,10 +351,10 @@ public class ViewVideoActivity extends AppCompatActivity {
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE && grantResults.length > 0) { if (requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE && grantResults.length > 0) {
if(grantResults[0] == PackageManager.PERMISSION_DENIED) { if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
} else if(grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) { } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) {
download(); download();
} }
isDownloading = false; isDownloading = false;

View File

@ -15,28 +15,20 @@ import com.bumptech.glide.request.RequestOptions;
import java.util.List; import java.util.List;
import ml.docilealligator.infinityforreddit.Account.Account;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.Account.Account;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
public class AccountRecyclerViewAdapter extends RecyclerView.Adapter<AccountRecyclerViewAdapter.AccountViewHolder> { public class AccountRecyclerViewAdapter extends RecyclerView.Adapter<AccountRecyclerViewAdapter.AccountViewHolder> {
public interface ItemSelectedListener {
void accountSelected(Account account);
void addAccountSelected();
void anonymousSelected();
void logoutSelected();
}
private List<Account> mAccounts; private List<Account> mAccounts;
private String mCurrentAccountName; private String mCurrentAccountName;
private Context mContext; private Context mContext;
private RequestManager mGlide; private RequestManager mGlide;
private ItemSelectedListener mItemSelectedListener; private ItemSelectedListener mItemSelectedListener;
public AccountRecyclerViewAdapter(Context context, RequestManager glide, String currentAccountName, ItemSelectedListener itemSelectedListener) { public AccountRecyclerViewAdapter(Context context, RequestManager glide, String currentAccountName, ItemSelectedListener itemSelectedListener) {
mContext = context; mContext = context;
mGlide = glide; mGlide = glide;
@ -52,14 +44,14 @@ public class AccountRecyclerViewAdapter extends RecyclerView.Adapter<AccountRecy
@Override @Override
public void onBindViewHolder(@NonNull AccountViewHolder holder, int position) { public void onBindViewHolder(@NonNull AccountViewHolder holder, int position) {
if(mAccounts == null) { if (mAccounts == null) {
mGlide.load(R.drawable.subreddit_default_icon) mGlide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0)))
.into(holder.profileImageGifImageView); .into(holder.profileImageGifImageView);
holder.usernameTextView.setText(R.string.add_account); holder.usernameTextView.setText(R.string.add_account);
holder.itemView.setOnClickListener(view -> mItemSelectedListener.addAccountSelected()); holder.itemView.setOnClickListener(view -> mItemSelectedListener.addAccountSelected());
} else { } else {
if(position < mAccounts.size()) { if (position < mAccounts.size()) {
mGlide.load(mAccounts.get(position).getProfileImageUrl()) mGlide.load(mAccounts.get(position).getProfileImageUrl())
.error(mGlide.load(R.drawable.subreddit_default_icon)) .error(mGlide.load(R.drawable.subreddit_default_icon))
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0)))
@ -69,14 +61,14 @@ public class AccountRecyclerViewAdapter extends RecyclerView.Adapter<AccountRecy
mCurrentAccountName = mAccounts.get(position).getUsername(); mCurrentAccountName = mAccounts.get(position).getUsername();
mItemSelectedListener.accountSelected(mAccounts.get(position)); mItemSelectedListener.accountSelected(mAccounts.get(position));
}); });
} else if(position == mAccounts.size()) { } else if (position == mAccounts.size()) {
holder.profileImageGifImageView.setColorFilter(ContextCompat.getColor(mContext, R.color.primaryTextColor), android.graphics.PorterDuff.Mode.SRC_IN); holder.profileImageGifImageView.setColorFilter(ContextCompat.getColor(mContext, R.color.primaryTextColor), android.graphics.PorterDuff.Mode.SRC_IN);
mGlide.load(R.drawable.ic_outline_add_circle_outline_24px) mGlide.load(R.drawable.ic_outline_add_circle_outline_24px)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0)))
.into(holder.profileImageGifImageView); .into(holder.profileImageGifImageView);
holder.usernameTextView.setText(R.string.add_account); holder.usernameTextView.setText(R.string.add_account);
holder.itemView.setOnClickListener(view -> mItemSelectedListener.addAccountSelected()); holder.itemView.setOnClickListener(view -> mItemSelectedListener.addAccountSelected());
} else if(position == mAccounts.size() + 1) { } else if (position == mAccounts.size() + 1) {
holder.profileImageGifImageView.setColorFilter(ContextCompat.getColor(mContext, R.color.primaryTextColor), android.graphics.PorterDuff.Mode.SRC_IN); holder.profileImageGifImageView.setColorFilter(ContextCompat.getColor(mContext, R.color.primaryTextColor), android.graphics.PorterDuff.Mode.SRC_IN);
mGlide.load(R.drawable.ic_outline_public_24px) mGlide.load(R.drawable.ic_outline_public_24px)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(128, 0)))
@ -96,10 +88,10 @@ public class AccountRecyclerViewAdapter extends RecyclerView.Adapter<AccountRecy
@Override @Override
public int getItemCount() { public int getItemCount() {
if(mAccounts == null) { if (mAccounts == null) {
return 1; return 1;
} else { } else {
if(mCurrentAccountName == null) { if (mCurrentAccountName == null) {
return mAccounts.size() + 1; return mAccounts.size() + 1;
} else { } else {
return mAccounts.size() + 3; return mAccounts.size() + 3;
@ -118,9 +110,21 @@ public class AccountRecyclerViewAdapter extends RecyclerView.Adapter<AccountRecy
notifyDataSetChanged(); notifyDataSetChanged();
} }
public interface ItemSelectedListener {
void accountSelected(Account account);
void addAccountSelected();
void anonymousSelected();
void logoutSelected();
}
class AccountViewHolder extends RecyclerView.ViewHolder { class AccountViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.profile_image_item_account) GifImageView profileImageGifImageView; @BindView(R.id.profile_image_item_account)
@BindView(R.id.username_text_view_item_account) TextView usernameTextView; GifImageView profileImageGifImageView;
@BindView(R.id.username_text_view_item_account)
TextView usernameTextView;
AccountViewHolder(@NonNull View itemView) { AccountViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);

View File

@ -43,6 +43,20 @@ import ml.docilealligator.infinityforreddit.VoteThing;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, RecyclerView.ViewHolder> { public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, RecyclerView.ViewHolder> {
private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2;
private static final DiffUtil.ItemCallback<CommentData> DIFF_CALLBACK = new DiffUtil.ItemCallback<CommentData>() {
@Override
public boolean areItemsTheSame(@NonNull CommentData commentData, @NonNull CommentData t1) {
return commentData.getId().equals(t1.getId());
}
@Override
public boolean areContentsTheSame(@NonNull CommentData commentData, @NonNull CommentData t1) {
return commentData.getCommentContent().equals(t1.getCommentContent());
}
};
private Context mContext; private Context mContext;
private Retrofit mOauthRetrofit; private Retrofit mOauthRetrofit;
private Markwon mMarkwon; private Markwon mMarkwon;
@ -50,21 +64,12 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
private String mAccountName; private String mAccountName;
private int mTextColorPrimaryDark; private int mTextColorPrimaryDark;
private int mColorAccent; private int mColorAccent;
private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2;
private NetworkState networkState; private NetworkState networkState;
private RetryLoadingMoreCallback mRetryLoadingMoreCallback; private RetryLoadingMoreCallback mRetryLoadingMoreCallback;
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
public CommentsListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, public CommentsListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit,
String accessToken, String accountName, String accessToken, String accountName,
RetryLoadingMoreCallback retryLoadingMoreCallback) { RetryLoadingMoreCallback retryLoadingMoreCallback) {
super(DIFF_CALLBACK); super(DIFF_CALLBACK);
mContext = context; mContext = context;
mOauthRetrofit = oauthRetrofit; mOauthRetrofit = oauthRetrofit;
@ -75,7 +80,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
builder.linkResolver((view, link) -> { builder.linkResolver((view, link) -> {
Intent intent = new Intent(mContext, LinkResolverActivity.class); Intent intent = new Intent(mContext, LinkResolverActivity.class);
Uri uri = Uri.parse(link); Uri uri = Uri.parse(link);
if(uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
intent.setData(LinkResolverActivity.getRedditUriByPath(link)); intent.setData(LinkResolverActivity.getRedditUriByPath(link));
} else { } else {
intent.setData(uri); intent.setData(uri);
@ -94,24 +99,12 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
mColorAccent = mContext.getResources().getColor(R.color.colorAccent); mColorAccent = mContext.getResources().getColor(R.color.colorAccent);
} }
private static final DiffUtil.ItemCallback<CommentData> DIFF_CALLBACK = new DiffUtil.ItemCallback<CommentData>() {
@Override
public boolean areItemsTheSame(@NonNull CommentData commentData, @NonNull CommentData t1) {
return commentData.getId().equals(t1.getId());
}
@Override
public boolean areContentsTheSame(@NonNull CommentData commentData, @NonNull CommentData t1) {
return commentData.getCommentContent().equals(t1.getCommentContent());
}
};
@NonNull @NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == VIEW_TYPE_DATA) { if (viewType == VIEW_TYPE_DATA) {
return new DataViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment, parent, false)); return new DataViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment, parent, false));
} else if(viewType == VIEW_TYPE_ERROR) { } else if (viewType == VIEW_TYPE_ERROR) {
return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false)); return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false));
} else { } else {
return new LoadingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_loading, parent, false)); return new LoadingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_loading, parent, false));
@ -120,10 +113,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
CommentData comment = getItem(holder.getAdapterPosition()); CommentData comment = getItem(holder.getAdapterPosition());
if(comment != null) { if (comment != null) {
if(comment.getSubredditName().substring(2).equals(comment.getLinkAuthor())) { if (comment.getSubredditName().substring(2).equals(comment.getLinkAuthor())) {
((DataViewHolder) holder).authorTextView.setText("u/" + comment.getLinkAuthor()); ((DataViewHolder) holder).authorTextView.setText("u/" + comment.getLinkAuthor());
((DataViewHolder) holder).authorTextView.setTextColor(mTextColorPrimaryDark); ((DataViewHolder) holder).authorTextView.setTextColor(mTextColorPrimaryDark);
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> { ((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
@ -160,7 +153,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
break; break;
} }
if(comment.getAuthor().equals(mAccountName)) { if (comment.getAuthor().equals(mAccountName)) {
((DataViewHolder) holder).moreButton.setVisibility(View.VISIBLE); ((DataViewHolder) holder).moreButton.setVisibility(View.VISIBLE);
((DataViewHolder) holder).moreButton.setOnClickListener(view -> { ((DataViewHolder) holder).moreButton.setOnClickListener(view -> {
ModifyCommentBottomSheetFragment modifyCommentBottomSheetFragment = new ModifyCommentBottomSheetFragment(); ModifyCommentBottomSheetFragment modifyCommentBottomSheetFragment = new ModifyCommentBottomSheetFragment();
@ -201,7 +194,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
((DataViewHolder) holder).replyButton.setVisibility(View.GONE); ((DataViewHolder) holder).replyButton.setVisibility(View.GONE);
((DataViewHolder) holder).upvoteButton.setOnClickListener(view -> { ((DataViewHolder) holder).upvoteButton.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -211,7 +204,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
((DataViewHolder) holder).downvoteButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
if(previousVoteType != CommentData.VOTE_TYPE_UPVOTE) { if (previousVoteType != CommentData.VOTE_TYPE_UPVOTE) {
//Not upvoted before //Not upvoted before
comment.setVoteType(CommentData.VOTE_TYPE_UPVOTE); comment.setVoteType(CommentData.VOTE_TYPE_UPVOTE);
newVoteType = RedditUtils.DIR_UPVOTE; newVoteType = RedditUtils.DIR_UPVOTE;
@ -231,7 +224,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
@Override @Override
public void onVoteThingSuccess(int position) { public void onVoteThingSuccess(int position) {
if(newVoteType.equals(RedditUtils.DIR_UPVOTE)) { if (newVoteType.equals(RedditUtils.DIR_UPVOTE)) {
comment.setVoteType(CommentData.VOTE_TYPE_UPVOTE); comment.setVoteType(CommentData.VOTE_TYPE_UPVOTE);
((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.upvoted), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.upvoted), android.graphics.PorterDuff.Mode.SRC_IN);
((DataViewHolder) holder).scoreTextView.setTextColor(ContextCompat.getColor(mContext, R.color.upvoted)); ((DataViewHolder) holder).scoreTextView.setTextColor(ContextCompat.getColor(mContext, R.color.upvoted));
@ -246,12 +239,13 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
} }
@Override @Override
public void onVoteThingFail(int position) { } public void onVoteThingFail(int position) {
}
}, comment.getFullName(), newVoteType, holder.getAdapterPosition()); }, comment.getFullName(), newVoteType, holder.getAdapterPosition());
}); });
((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> { ((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -261,7 +255,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
((DataViewHolder) holder).upvoteButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
if(previousVoteType != CommentData.VOTE_TYPE_DOWNVOTE) { if (previousVoteType != CommentData.VOTE_TYPE_DOWNVOTE) {
//Not downvoted before //Not downvoted before
comment.setVoteType(CommentData.VOTE_TYPE_DOWNVOTE); comment.setVoteType(CommentData.VOTE_TYPE_DOWNVOTE);
newVoteType = RedditUtils.DIR_DOWNVOTE; newVoteType = RedditUtils.DIR_DOWNVOTE;
@ -280,7 +274,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
@Override @Override
public void onVoteThingSuccess(int position1) { public void onVoteThingSuccess(int position1) {
if(newVoteType.equals(RedditUtils.DIR_DOWNVOTE)) { if (newVoteType.equals(RedditUtils.DIR_DOWNVOTE)) {
comment.setVoteType(CommentData.VOTE_TYPE_DOWNVOTE); comment.setVoteType(CommentData.VOTE_TYPE_DOWNVOTE);
((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.downvoted), android.graphics.PorterDuff.Mode.SRC_IN); ((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.downvoted), android.graphics.PorterDuff.Mode.SRC_IN);
((DataViewHolder) holder).scoreTextView.setTextColor(ContextCompat.getColor(mContext, R.color.downvoted)); ((DataViewHolder) holder).scoreTextView.setTextColor(ContextCompat.getColor(mContext, R.color.downvoted));
@ -295,11 +289,12 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
} }
@Override @Override
public void onVoteThingFail(int position1) { } public void onVoteThingFail(int position1) {
}
}, comment.getFullName(), newVoteType, holder.getAdapterPosition()); }, comment.getFullName(), newVoteType, holder.getAdapterPosition());
}); });
if(comment.isSaved()) { if (comment.isSaved()) {
((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_20dp); ((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_20dp);
} else { } else {
((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_20dp); ((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_20dp);
@ -362,7 +357,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
@Override @Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
((DataViewHolder) holder).upvoteButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
((DataViewHolder) holder).downvoteButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
((DataViewHolder) holder).scoreTextView.setTextColor(ContextCompat.getColor(mContext, R.color.defaultTextColor)); ((DataViewHolder) holder).scoreTextView.setTextColor(ContextCompat.getColor(mContext, R.color.defaultTextColor));
@ -371,7 +366,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
@Override @Override
public int getItemCount() { public int getItemCount() {
if(hasExtraRow()) { if (hasExtraRow()) {
return super.getItemCount() + 1; return super.getItemCount() + 1;
} }
return super.getItemCount(); return super.getItemCount();
@ -397,19 +392,35 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
} }
} }
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
class DataViewHolder extends RecyclerView.ViewHolder { class DataViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.linear_layout_item_comment) LinearLayout linearLayout; @BindView(R.id.linear_layout_item_comment)
@BindView(R.id.vertical_block_item_post_comment) View verticalBlock; LinearLayout linearLayout;
@BindView(R.id.author_text_view_item_post_comment) TextView authorTextView; @BindView(R.id.vertical_block_item_post_comment)
@BindView(R.id.comment_time_text_view_item_post_comment) TextView commentTimeTextView; View verticalBlock;
@BindView(R.id.comment_markdown_view_item_post_comment) TextView commentMarkdownView; @BindView(R.id.author_text_view_item_post_comment)
@BindView(R.id.up_vote_button_item_post_comment) ImageView upvoteButton; TextView authorTextView;
@BindView(R.id.score_text_view_item_post_comment) TextView scoreTextView; @BindView(R.id.comment_time_text_view_item_post_comment)
@BindView(R.id.down_vote_button_item_post_comment) ImageView downvoteButton; TextView commentTimeTextView;
@BindView(R.id.more_button_item_post_comment) ImageView moreButton; @BindView(R.id.comment_markdown_view_item_post_comment)
@BindView(R.id.save_button_item_post_comment) ImageView saveButton; TextView commentMarkdownView;
@BindView(R.id.share_button_item_post_comment) ImageView shareButton; @BindView(R.id.up_vote_button_item_post_comment)
@BindView(R.id.reply_button_item_post_comment) ImageView replyButton; ImageView upvoteButton;
@BindView(R.id.score_text_view_item_post_comment)
TextView scoreTextView;
@BindView(R.id.down_vote_button_item_post_comment)
ImageView downvoteButton;
@BindView(R.id.more_button_item_post_comment)
ImageView moreButton;
@BindView(R.id.save_button_item_post_comment)
ImageView saveButton;
@BindView(R.id.share_button_item_post_comment)
ImageView shareButton;
@BindView(R.id.reply_button_item_post_comment)
ImageView replyButton;
DataViewHolder(View itemView) { DataViewHolder(View itemView) {
super(itemView); super(itemView);
@ -418,8 +429,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
} }
class ErrorViewHolder extends RecyclerView.ViewHolder { class ErrorViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.error_text_view_item_footer_error) TextView errorTextView; @BindView(R.id.error_text_view_item_footer_error)
@BindView(R.id.retry_button_item_footer_error) Button retryButton; TextView errorTextView;
@BindView(R.id.retry_button_item_footer_error)
Button retryButton;
ErrorViewHolder(View itemView) { ErrorViewHolder(View itemView) {
super(itemView); super(itemView);

View File

@ -23,14 +23,9 @@ import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
public class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<FlairBottomSheetRecyclerViewAdapter.FlairViewHolder> { public class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<FlairBottomSheetRecyclerViewAdapter.FlairViewHolder> {
public interface ItemClickListener {
void onClick(Flair flair);
}
private Context context; private Context context;
private ArrayList<Flair> flairs; private ArrayList<Flair> flairs;
private ItemClickListener itemClickListener; private ItemClickListener itemClickListener;
public FlairBottomSheetRecyclerViewAdapter(Context context, ItemClickListener itemClickListener) { public FlairBottomSheetRecyclerViewAdapter(Context context, ItemClickListener itemClickListener) {
this.context = context; this.context = context;
this.itemClickListener = itemClickListener; this.itemClickListener = itemClickListener;
@ -44,14 +39,14 @@ public class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<Fl
@Override @Override
public void onBindViewHolder(@NonNull FlairViewHolder holder, int position) { public void onBindViewHolder(@NonNull FlairViewHolder holder, int position) {
if(flairs.get(holder.getAdapterPosition()).isEditable()) { if (flairs.get(holder.getAdapterPosition()).isEditable()) {
holder.editFlairImageView.setVisibility(View.VISIBLE); holder.editFlairImageView.setVisibility(View.VISIBLE);
holder.editFlairImageView.setOnClickListener(view -> { holder.editFlairImageView.setOnClickListener(view -> {
View dialogView = ((Activity) context).getLayoutInflater().inflate(R.layout.dialog_edit_flair, null); View dialogView = ((Activity) context).getLayoutInflater().inflate(R.layout.dialog_edit_flair, null);
EditText flairEditText = dialogView.findViewById(R.id.flair_edit_text_edit_flair_dialog); EditText flairEditText = dialogView.findViewById(R.id.flair_edit_text_edit_flair_dialog);
flairEditText.requestFocus(); flairEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) { if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
} }
new MaterialAlertDialogBuilder(context, R.style.MaterialAlertDialogTheme) new MaterialAlertDialogBuilder(context, R.style.MaterialAlertDialogTheme)
@ -68,7 +63,7 @@ public class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<Fl
}); });
} }
if(flairs.get(holder.getAdapterPosition()).isEditable() && flairs.get(holder.getAdapterPosition()).getText().equals("")) { if (flairs.get(holder.getAdapterPosition()).isEditable() && flairs.get(holder.getAdapterPosition()).getText().equals("")) {
holder.itemView.setOnClickListener(view -> holder.editFlairImageView.performClick()); holder.itemView.setOnClickListener(view -> holder.editFlairImageView.performClick());
} else { } else {
holder.itemView.setOnClickListener(view -> itemClickListener.onClick(flairs.get(holder.getAdapterPosition()))); holder.itemView.setOnClickListener(view -> itemClickListener.onClick(flairs.get(holder.getAdapterPosition())));
@ -93,10 +88,16 @@ public class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<Fl
notifyDataSetChanged(); notifyDataSetChanged();
} }
public interface ItemClickListener {
void onClick(Flair flair);
}
class FlairViewHolder extends RecyclerView.ViewHolder { class FlairViewHolder extends RecyclerView.ViewHolder {
View itemView; View itemView;
@BindView(R.id.flair_text_view_item_flair) TextView flairTextView; @BindView(R.id.flair_text_view_item_flair)
@BindView(R.id.edit_flair_image_view_item_flair) ImageView editFlairImageView; TextView flairTextView;
@BindView(R.id.edit_flair_image_view_item_flair)
ImageView editFlairImageView;
FlairViewHolder(@NonNull View itemView) { FlairViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);

View File

@ -16,10 +16,10 @@ import com.bumptech.glide.request.RequestOptions;
import java.util.List; import java.util.List;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.Activity.ViewUserDetailActivity; import ml.docilealligator.infinityforreddit.Activity.ViewUserDetailActivity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -45,7 +45,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mSubscribedUserData.get(viewHolder.getAdapterPosition()).getName()); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, mSubscribedUserData.get(viewHolder.getAdapterPosition()).getName());
mContext.startActivity(intent); mContext.startActivity(intent);
}); });
if(!mSubscribedUserData.get(i).getIconUrl().equals("")) { if (!mSubscribedUserData.get(i).getIconUrl().equals("")) {
glide.load(mSubscribedUserData.get(i).getIconUrl()) glide.load(mSubscribedUserData.get(i).getIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(glide.load(R.drawable.subreddit_default_icon) .error(glide.load(R.drawable.subreddit_default_icon)
@ -61,7 +61,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
@Override @Override
public int getItemCount() { public int getItemCount() {
if(mSubscribedUserData != null) { if (mSubscribedUserData != null) {
return mSubscribedUserData.size(); return mSubscribedUserData.size();
} }
return 0; return 0;
@ -72,7 +72,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
glide.clear(((UserViewHolder) holder).iconGifImageView); glide.clear(((UserViewHolder) holder).iconGifImageView);
} }
public void setSubscribedUsers(List<SubscribedUserData> subscribedUsers){ public void setSubscribedUsers(List<SubscribedUserData> subscribedUsers) {
mSubscribedUserData = subscribedUsers; mSubscribedUserData = subscribedUsers;
notifyDataSetChanged(); notifyDataSetChanged();
} }

View File

@ -35,22 +35,27 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
private static final int VIEW_TYPE_DATA = 0; private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1; private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2; private static final int VIEW_TYPE_LOADING = 2;
private static final DiffUtil.ItemCallback<Message> DIFF_CALLBACK = new DiffUtil.ItemCallback<Message>() {
@Override
public boolean areItemsTheSame(@NonNull Message message, @NonNull Message t1) {
return message.getId().equals(t1.getId());
}
@Override
public boolean areContentsTheSame(@NonNull Message message, @NonNull Message t1) {
return message.getBody().equals(t1.getBody());
}
};
private Context mContext; private Context mContext;
private Retrofit mOauthRetrofit; private Retrofit mOauthRetrofit;
private Markwon mMarkwon; private Markwon mMarkwon;
private String mAccessToken; private String mAccessToken;
private Resources mResources; private Resources mResources;
private NetworkState networkState; private NetworkState networkState;
private RetryLoadingMoreCallback mRetryLoadingMoreCallback; private RetryLoadingMoreCallback mRetryLoadingMoreCallback;
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
public MessageRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, String accessToken, public MessageRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, String accessToken,
RetryLoadingMoreCallback retryLoadingMoreCallback) { RetryLoadingMoreCallback retryLoadingMoreCallback) {
super(DIFF_CALLBACK); super(DIFF_CALLBACK);
mContext = context; mContext = context;
mOauthRetrofit = oauthRetrofit; mOauthRetrofit = oauthRetrofit;
@ -62,7 +67,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
builder.linkResolver((view, link) -> { builder.linkResolver((view, link) -> {
Intent intent = new Intent(mContext, LinkResolverActivity.class); Intent intent = new Intent(mContext, LinkResolverActivity.class);
Uri uri = Uri.parse(link); Uri uri = Uri.parse(link);
if(uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
intent.setData(LinkResolverActivity.getRedditUriByPath(link)); intent.setData(LinkResolverActivity.getRedditUriByPath(link));
} else { } else {
intent.setData(uri); intent.setData(uri);
@ -78,24 +83,12 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
mResources = context.getResources(); mResources = context.getResources();
} }
private static final DiffUtil.ItemCallback<Message> DIFF_CALLBACK = new DiffUtil.ItemCallback<Message>() {
@Override
public boolean areItemsTheSame(@NonNull Message message, @NonNull Message t1) {
return message.getId().equals(t1.getId());
}
@Override
public boolean areContentsTheSame(@NonNull Message message, @NonNull Message t1) {
return message.getBody().equals(t1.getBody());
}
};
@NonNull @NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == VIEW_TYPE_DATA) { if (viewType == VIEW_TYPE_DATA) {
return new DataViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false)); return new DataViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_message, parent, false));
} else if(viewType == VIEW_TYPE_ERROR) { } else if (viewType == VIEW_TYPE_ERROR) {
return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false)); return new ErrorViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false));
} else { } else {
return new LoadingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_loading, parent, false)); return new LoadingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_loading, parent, false));
@ -104,15 +97,15 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
Message message = getItem(holder.getAdapterPosition()); Message message = getItem(holder.getAdapterPosition());
if(message != null) { if (message != null) {
if(message.isNew()) { if (message.isNew()) {
((DataViewHolder) holder).itemView.setBackgroundColor( ((DataViewHolder) holder).itemView.setBackgroundColor(
mResources.getColor(R.color.unreadMessageBackgroundColor)); mResources.getColor(R.color.unreadMessageBackgroundColor));
} }
if(message.wasComment()) { if (message.wasComment()) {
((DataViewHolder) holder).authorTextView.setTextColor(mResources.getColor(R.color.colorPrimaryDarkDayNightTheme)); ((DataViewHolder) holder).authorTextView.setTextColor(mResources.getColor(R.color.colorPrimaryDarkDayNightTheme));
((DataViewHolder) holder).titleTextView.setText(message.getTitle()); ((DataViewHolder) holder).titleTextView.setText(message.getTitle());
} else { } else {
@ -125,33 +118,34 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, message.getBody()); mMarkwon.setMarkdown(((DataViewHolder) holder).contentCustomMarkwonView, message.getBody());
((DataViewHolder) holder).itemView.setOnClickListener(view -> { ((DataViewHolder) holder).itemView.setOnClickListener(view -> {
if(message.getContext() != null && !message.getContext().equals("")) { if (message.getContext() != null && !message.getContext().equals("")) {
Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext()); Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext());
Intent intent = new Intent(mContext, LinkResolverActivity.class); Intent intent = new Intent(mContext, LinkResolverActivity.class);
intent.setData(uri); intent.setData(uri);
mContext.startActivity(intent); mContext.startActivity(intent);
} }
if(message.isNew()) { if (message.isNew()) {
((DataViewHolder) holder).itemView.setBackgroundColor(mResources.getColor(R.color.backgroundColor)); ((DataViewHolder) holder).itemView.setBackgroundColor(mResources.getColor(R.color.backgroundColor));
message.setNew(false); message.setNew(false);
ReadMessage.readMessage(mOauthRetrofit, mAccessToken, message.getFullname(), ReadMessage.readMessage(mOauthRetrofit, mAccessToken, message.getFullname(),
new ReadMessage.ReadMessageListener() { new ReadMessage.ReadMessageListener() {
@Override @Override
public void readSuccess() {} public void readSuccess() {
}
@Override @Override
public void readFailed() { public void readFailed() {
message.setNew(true); message.setNew(true);
((DataViewHolder) holder).itemView.setBackgroundColor(mResources.getColor(R.color.unreadMessageBackgroundColor)); ((DataViewHolder) holder).itemView.setBackgroundColor(mResources.getColor(R.color.unreadMessageBackgroundColor));
} }
}); });
} }
}); });
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> { ((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
if(message.wasComment()) { if (message.wasComment()) {
Intent intent = new Intent(mContext, ViewUserDetailActivity.class); Intent intent = new Intent(mContext, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getAuthor()); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, message.getAuthor());
mContext.startActivity(intent); mContext.startActivity(intent);
@ -179,7 +173,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
@Override @Override
public int getItemCount() { public int getItemCount() {
if(hasExtraRow()) { if (hasExtraRow()) {
return super.getItemCount() + 1; return super.getItemCount() + 1;
} }
return super.getItemCount(); return super.getItemCount();
@ -188,7 +182,7 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
@Override @Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder); super.onViewRecycled(holder);
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
((DataViewHolder) holder).itemView.setBackgroundColor(mResources.getColor(R.color.backgroundColor)); ((DataViewHolder) holder).itemView.setBackgroundColor(mResources.getColor(R.color.backgroundColor));
((DataViewHolder) holder).titleTextView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).titleTextView.setVisibility(View.VISIBLE);
((DataViewHolder) holder).authorTextView.setTextColor(mResources.getColor(R.color.primaryTextColor)); ((DataViewHolder) holder).authorTextView.setTextColor(mResources.getColor(R.color.primaryTextColor));
@ -215,12 +209,20 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
} }
} }
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
class DataViewHolder extends RecyclerView.ViewHolder { class DataViewHolder extends RecyclerView.ViewHolder {
View itemView; View itemView;
@BindView(R.id.author_text_view_item_message) TextView authorTextView; @BindView(R.id.author_text_view_item_message)
@BindView(R.id.subject_text_view_item_message) TextView subjectTextView; TextView authorTextView;
@BindView(R.id.title_text_view_item_message) TextView titleTextView; @BindView(R.id.subject_text_view_item_message)
@BindView(R.id.content_custom_markwon_view_item_message) TextView contentCustomMarkwonView; TextView subjectTextView;
@BindView(R.id.title_text_view_item_message)
TextView titleTextView;
@BindView(R.id.content_custom_markwon_view_item_message)
TextView contentCustomMarkwonView;
DataViewHolder(View itemView) { DataViewHolder(View itemView) {
super(itemView); super(itemView);
@ -230,8 +232,10 @@ public class MessageRecyclerViewAdapter extends PagedListAdapter<Message, Recycl
} }
class ErrorViewHolder extends RecyclerView.ViewHolder { class ErrorViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.error_text_view_item_footer_error) TextView errorTextView; @BindView(R.id.error_text_view_item_footer_error)
@BindView(R.id.retry_button_item_footer_error) Button retryButton; TextView errorTextView;
@BindView(R.id.retry_button_item_footer_error)
Button retryButton;
ErrorViewHolder(View itemView) { ErrorViewHolder(View itemView) {
super(itemView); super(itemView);

View File

@ -70,6 +70,22 @@ import retrofit2.Retrofit;
*/ */
public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHolder> { public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView.ViewHolder> {
private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2;
private static final DiffUtil.ItemCallback<Post> DIFF_CALLBACK = new DiffUtil.ItemCallback<Post>() {
@Override
public boolean areItemsTheSame(@NonNull Post post, @NonNull Post t1) {
return post.getId().equals(t1.getId());
}
@Override
public boolean areContentsTheSame(@NonNull Post post, @NonNull Post t1) {
return post.getTitle().equals(t1.getTitle()) && !(post.getSelfText() != null && t1.getSelfText() != null
&& !post.getSelfText().equals(t1.getSelfText()))
&& post.getScore() == t1.getScore() && post.getVoteType() == t1.getVoteType();
}
};
private Context mContext; private Context mContext;
private Retrofit mOauthRetrofit; private Retrofit mOauthRetrofit;
private Retrofit mRetrofit; private Retrofit mRetrofit;
@ -82,25 +98,15 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
private boolean mDisplaySubredditName; private boolean mDisplaySubredditName;
private boolean mNeedBlurNSFW; private boolean mNeedBlurNSFW;
private boolean mNeedBlurSpoiler; private boolean mNeedBlurSpoiler;
private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2;
private NetworkState networkState; private NetworkState networkState;
private Callback mCallback; private Callback mCallback;
public interface Callback {
void retryLoadingMore();
void typeChipClicked(int filter);
}
public PostRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit, public PostRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit,
RedditDataRoomDatabase redditDataRoomDatabase, String accessToken, RedditDataRoomDatabase redditDataRoomDatabase, String accessToken,
int postType, boolean displaySubredditName, boolean needBlurNSFW, int postType, boolean displaySubredditName, boolean needBlurNSFW,
boolean needBlurSpoiler, Callback callback) { boolean needBlurSpoiler, Callback callback) {
super(DIFF_CALLBACK); super(DIFF_CALLBACK);
if(context != null) { if (context != null) {
mContext = context; mContext = context;
mOauthRetrofit = oauthRetrofit; mOauthRetrofit = oauthRetrofit;
mRetrofit = retrofit; mRetrofit = retrofit;
@ -116,20 +122,6 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} }
} }
private static final DiffUtil.ItemCallback<Post> DIFF_CALLBACK = new DiffUtil.ItemCallback<Post>() {
@Override
public boolean areItemsTheSame(@NonNull Post post, @NonNull Post t1) {
return post.getId().equals(t1.getId());
}
@Override
public boolean areContentsTheSame(@NonNull Post post, @NonNull Post t1) {
return post.getTitle().equals(t1.getTitle()) && !(post.getSelfText() != null && t1.getSelfText() != null
&& !post.getSelfText().equals(t1.getSelfText()))
&& post.getScore() == t1.getScore() && post.getVoteType() == t1.getVoteType();
}
};
public void setCanStartActivity(boolean canStartActivity) { public void setCanStartActivity(boolean canStartActivity) {
this.canStartActivity = canStartActivity; this.canStartActivity = canStartActivity;
} }
@ -137,10 +129,10 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
@NonNull @NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == VIEW_TYPE_DATA) { if (viewType == VIEW_TYPE_DATA) {
CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post, parent, false); CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post, parent, false);
return new DataViewHolder(cardView); return new DataViewHolder(cardView);
} else if(viewType == VIEW_TYPE_ERROR) { } else if (viewType == VIEW_TYPE_ERROR) {
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false);
return new ErrorViewHolder(relativeLayout); return new ErrorViewHolder(relativeLayout);
} else { } else {
@ -151,9 +143,9 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
@Override @Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
Post post = getItem(position); Post post = getItem(position);
if(post != null) { if (post != null) {
final String id = post.getFullName(); final String id = post.getFullName();
final String subredditNamePrefixed = post.getSubredditNamePrefixed(); final String subredditNamePrefixed = post.getSubredditNamePrefixed();
String subredditName = subredditNamePrefixed.substring(2); String subredditName = subredditNamePrefixed.substring(2);
@ -169,7 +161,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
boolean isArchived = post.isArchived(); boolean isArchived = post.isArchived();
((DataViewHolder) holder).cardView.setOnClickListener(view -> { ((DataViewHolder) holder).cardView.setOnClickListener(view -> {
if(canStartActivity) { if (canStartActivity) {
canStartActivity = false; canStartActivity = false;
Intent intent = new Intent(mContext, ViewPostDetailActivity.class); Intent intent = new Intent(mContext, ViewPostDetailActivity.class);
@ -179,12 +171,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} }
}); });
if(mDisplaySubredditName) { if (mDisplaySubredditName) {
if(authorPrefixed.equals(subredditNamePrefixed)) { if (authorPrefixed.equals(subredditNamePrefixed)) {
if(post.getAuthorIconUrl() == null) { if (post.getAuthorIconUrl() == null) {
new LoadUserDataAsyncTask(mUserDao, post.getAuthor(), mRetrofit, iconImageUrl -> { new LoadUserDataAsyncTask(mUserDao, post.getAuthor(), mRetrofit, iconImageUrl -> {
if(mContext != null && getItemCount() > 0) { if (mContext != null && getItemCount() > 0) {
if(iconImageUrl == null || iconImageUrl.equals("")) { if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon) mGlide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
@ -196,12 +188,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
} }
if(holder.getAdapterPosition() >= 0) { if (holder.getAdapterPosition() >= 0) {
post.setAuthorIconUrl(iconImageUrl); post.setAuthorIconUrl(iconImageUrl);
} }
} }
}).execute(); }).execute();
} else if(!post.getAuthorIconUrl().equals("")) { } else if (!post.getAuthorIconUrl().equals("")) {
mGlide.load(post.getAuthorIconUrl()) mGlide.load(post.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -213,11 +205,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
} }
} else { } else {
if(post.getSubredditIconUrl() == null) { if (post.getSubredditIconUrl() == null) {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit, new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit,
iconImageUrl -> { iconImageUrl -> {
if(mContext != null && getItemCount() > 0) { if (mContext != null && getItemCount() > 0) {
if(iconImageUrl == null || iconImageUrl.equals("")) { if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon) mGlide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
@ -229,12 +221,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
} }
if(holder.getAdapterPosition() >= 0) { if (holder.getAdapterPosition() >= 0) {
post.setSubredditIconUrl(iconImageUrl); post.setSubredditIconUrl(iconImageUrl);
} }
} }
}).execute(); }).execute();
} else if(!post.getSubredditIconUrl().equals("")) { } else if (!post.getSubredditIconUrl().equals("")) {
mGlide.load(post.getSubredditIconUrl()) mGlide.load(post.getSubredditIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -251,9 +243,9 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).nameTextView.setText(subredditNamePrefixed); ((DataViewHolder) holder).nameTextView.setText(subredditNamePrefixed);
((DataViewHolder) holder).iconNameLinearLayout.setOnClickListener(view -> { ((DataViewHolder) holder).iconNameLinearLayout.setOnClickListener(view -> {
if(canStartActivity) { if (canStartActivity) {
canStartActivity = false; canStartActivity = false;
if(post.getSubredditNamePrefixed().startsWith("u/")) { if (post.getSubredditNamePrefixed().startsWith("u/")) {
Intent intent = new Intent(mContext, ViewUserDetailActivity.class); Intent intent = new Intent(mContext, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY,
post.getSubredditNamePrefixed().substring(2)); post.getSubredditNamePrefixed().substring(2));
@ -267,11 +259,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} }
}); });
} else { } else {
if(post.getAuthorIconUrl() == null) { if (post.getAuthorIconUrl() == null) {
String authorName = post.getAuthor().equals("[deleted]") ? post.getSubredditNamePrefixed().substring(2) : post.getAuthor(); String authorName = post.getAuthor().equals("[deleted]") ? post.getSubredditNamePrefixed().substring(2) : post.getAuthor();
new LoadUserDataAsyncTask(mUserDao, authorName, mRetrofit, iconImageUrl -> { new LoadUserDataAsyncTask(mUserDao, authorName, mRetrofit, iconImageUrl -> {
if(mContext != null && getItemCount() > 0) { if (mContext != null && getItemCount() > 0) {
if(iconImageUrl == null || iconImageUrl.equals("")) { if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon) mGlide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
@ -283,12 +275,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
.into(((DataViewHolder) holder).iconGifImageView); .into(((DataViewHolder) holder).iconGifImageView);
} }
if(holder.getAdapterPosition() >= 0) { if (holder.getAdapterPosition() >= 0) {
post.setAuthorIconUrl(iconImageUrl); post.setAuthorIconUrl(iconImageUrl);
} }
} }
}).execute(); }).execute();
} else if(!post.getAuthorIconUrl().equals("")) { } else if (!post.getAuthorIconUrl().equals("")) {
mGlide.load(post.getAuthorIconUrl()) mGlide.load(post.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(mGlide.load(R.drawable.subreddit_default_icon) .error(mGlide.load(R.drawable.subreddit_default_icon)
@ -304,7 +296,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).nameTextView.setText(authorPrefixed); ((DataViewHolder) holder).nameTextView.setText(authorPrefixed);
((DataViewHolder) holder).iconNameLinearLayout.setOnClickListener(view -> { ((DataViewHolder) holder).iconNameLinearLayout.setOnClickListener(view -> {
if(canStartActivity) { if (canStartActivity) {
canStartActivity = false; canStartActivity = false;
Intent intent = new Intent(mContext, ViewUserDetailActivity.class); Intent intent = new Intent(mContext, ViewUserDetailActivity.class);
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, post.getAuthor()); intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, post.getAuthor());
@ -317,19 +309,19 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).titleTextView.setText(title); ((DataViewHolder) holder).titleTextView.setText(title);
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(post.getScore() + post.getVoteType())); ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(post.getScore() + post.getVoteType()));
if(gilded > 0) { if (gilded > 0) {
((DataViewHolder) holder).gildedImageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).gildedImageView.setVisibility(View.VISIBLE);
((DataViewHolder) holder).gildedNumberTextView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).gildedNumberTextView.setVisibility(View.VISIBLE);
String gildedNumber = mContext.getResources().getString(R.string.gilded_count, gilded); String gildedNumber = mContext.getResources().getString(R.string.gilded_count, gilded);
((DataViewHolder) holder).gildedNumberTextView.setText(gildedNumber); ((DataViewHolder) holder).gildedNumberTextView.setText(gildedNumber);
} }
if(post.isLocked()) { if (post.isLocked()) {
((DataViewHolder) holder).lockedImageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).lockedImageView.setVisibility(View.VISIBLE);
} }
if(nsfw) { if (nsfw) {
if(!(mContext instanceof FilteredThingActivity)) { if (!(mContext instanceof FilteredThingActivity)) {
((DataViewHolder) holder).nsfwTextView.setOnClickListener(view -> { ((DataViewHolder) holder).nsfwTextView.setOnClickListener(view -> {
Intent intent = new Intent(mContext, FilteredThingActivity.class); Intent intent = new Intent(mContext, FilteredThingActivity.class);
intent.putExtra(FilteredThingActivity.EXTRA_NAME, post.getSubredditNamePrefixed().substring(2)); intent.putExtra(FilteredThingActivity.EXTRA_NAME, post.getSubredditNamePrefixed().substring(2));
@ -342,15 +334,15 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).nsfwTextView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).nsfwTextView.setVisibility(View.VISIBLE);
} }
if(spoiler || flair != null) { if (spoiler || flair != null) {
((DataViewHolder) holder).spoilerFlairLinearLayout.setVisibility(View.VISIBLE); ((DataViewHolder) holder).spoilerFlairLinearLayout.setVisibility(View.VISIBLE);
} }
if(spoiler) { if (spoiler) {
((DataViewHolder) holder).spoilerTextView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).spoilerTextView.setVisibility(View.VISIBLE);
} }
if(flair != null) { if (flair != null) {
((DataViewHolder) holder).flairTextView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).flairTextView.setVisibility(View.VISIBLE);
((DataViewHolder) holder).flairTextView.setText(flair); ((DataViewHolder) holder).flairTextView.setText(flair);
} }
@ -368,7 +360,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
break; break;
} }
if(post.getPostType() != Post.TEXT_TYPE && post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) { if (post.getPostType() != Post.TEXT_TYPE && post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) {
((DataViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE); ((DataViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE);
((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE); ((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
((DataViewHolder) holder).imageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).imageView.setVisibility(View.VISIBLE);
@ -377,12 +369,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
loadImage(holder, post); loadImage(holder, post);
} }
if(mPostType == PostDataSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) { if (mPostType == PostDataSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) {
((DataViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE);
mGlide.load(R.drawable.ic_thumbtack_24dp).into(((DataViewHolder) holder).stickiedPostImageView); mGlide.load(R.drawable.ic_thumbtack_24dp).into(((DataViewHolder) holder).stickiedPostImageView);
} }
if(isArchived) { if (isArchived) {
((DataViewHolder) holder).archivedImageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).archivedImageView.setVisibility(View.VISIBLE);
((DataViewHolder) holder).upvoteButton ((DataViewHolder) holder).upvoteButton
@ -391,11 +383,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
.setColorFilter(ContextCompat.getColor(mContext, R.color.voteAndReplyUnavailableVoteButtonColor), android.graphics.PorterDuff.Mode.SRC_IN); .setColorFilter(ContextCompat.getColor(mContext, R.color.voteAndReplyUnavailableVoteButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
} }
if(post.isCrosspost()) { if (post.isCrosspost()) {
((DataViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE); ((DataViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE);
} }
if(!(mContext instanceof FilteredThingActivity)) { if (!(mContext instanceof FilteredThingActivity)) {
((DataViewHolder) holder).typeTextView.setOnClickListener(view -> mCallback.typeChipClicked(post.getPostType())); ((DataViewHolder) holder).typeTextView.setOnClickListener(view -> mCallback.typeChipClicked(post.getPostType()));
} }
@ -423,7 +415,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).imageView.setOnClickListener(view -> { ((DataViewHolder) holder).imageView.setOnClickListener(view -> {
Intent intent = new Intent(mContext, LinkResolverActivity.class); Intent intent = new Intent(mContext, LinkResolverActivity.class);
Uri uri = Uri.parse(post.getUrl()); Uri uri = Uri.parse(post.getUrl());
if(uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
intent.setData(LinkResolverActivity.getRedditUriByPath(post.getUrl())); intent.setData(LinkResolverActivity.getRedditUriByPath(post.getUrl()));
} else { } else {
intent.setData(uri); intent.setData(uri);
@ -468,7 +460,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).noPreviewLinkImageView.setOnClickListener(view -> { ((DataViewHolder) holder).noPreviewLinkImageView.setOnClickListener(view -> {
Intent intent = new Intent(mContext, LinkResolverActivity.class); Intent intent = new Intent(mContext, LinkResolverActivity.class);
Uri uri = Uri.parse(post.getUrl()); Uri uri = Uri.parse(post.getUrl());
if(uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
intent.setData(LinkResolverActivity.getRedditUriByPath(post.getUrl())); intent.setData(LinkResolverActivity.getRedditUriByPath(post.getUrl()));
} else { } else {
intent.setData(uri); intent.setData(uri);
@ -482,12 +474,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} }
((DataViewHolder) holder).upvoteButton.setOnClickListener(view -> { ((DataViewHolder) holder).upvoteButton.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
if(isArchived) { if (isArchived) {
Toast.makeText(mContext, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -501,7 +493,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).downvoteButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
if(previousUpvoteButtonColorFilter == null) { if (previousUpvoteButtonColorFilter == null) {
//Not upvoted before //Not upvoted before
post.setVoteType(1); post.setVoteType(1);
newVoteType = RedditUtils.DIR_UPVOTE; newVoteType = RedditUtils.DIR_UPVOTE;
@ -521,7 +513,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
@Override @Override
public void onVoteThingSuccess(int position1) { public void onVoteThingSuccess(int position1) {
if(newVoteType.equals(RedditUtils.DIR_UPVOTE)) { if (newVoteType.equals(RedditUtils.DIR_UPVOTE)) {
post.setVoteType(1); post.setVoteType(1);
((DataViewHolder) holder).upvoteButton ((DataViewHolder) holder).upvoteButton
.setColorFilter(ContextCompat.getColor(mContext, R.color.upvoted), android.graphics.PorterDuff.Mode.SRC_IN); .setColorFilter(ContextCompat.getColor(mContext, R.color.upvoted), android.graphics.PorterDuff.Mode.SRC_IN);
@ -553,12 +545,12 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
}); });
((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> { ((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
if(isArchived) { if (isArchived) {
Toast.makeText(mContext, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -572,7 +564,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).upvoteButton.clearColorFilter(); ((DataViewHolder) holder).upvoteButton.clearColorFilter();
if(previousDownvoteButtonColorFilter == null) { if (previousDownvoteButtonColorFilter == null) {
//Not downvoted before //Not downvoted before
post.setVoteType(-1); post.setVoteType(-1);
newVoteType = RedditUtils.DIR_DOWNVOTE; newVoteType = RedditUtils.DIR_DOWNVOTE;
@ -592,7 +584,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { VoteThing.voteThing(mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() {
@Override @Override
public void onVoteThingSuccess(int position1) { public void onVoteThingSuccess(int position1) {
if(newVoteType.equals(RedditUtils.DIR_DOWNVOTE)) { if (newVoteType.equals(RedditUtils.DIR_DOWNVOTE)) {
post.setVoteType(-1); post.setVoteType(-1);
((DataViewHolder) holder).downvoteButton ((DataViewHolder) holder).downvoteButton
.setColorFilter(ContextCompat.getColor(mContext, R.color.downvoted), android.graphics.PorterDuff.Mode.SRC_IN); .setColorFilter(ContextCompat.getColor(mContext, R.color.downvoted), android.graphics.PorterDuff.Mode.SRC_IN);
@ -624,7 +616,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
}); });
((DataViewHolder) holder).commentButton.setOnClickListener(view -> { ((DataViewHolder) holder).commentButton.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
@ -639,19 +631,19 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).commentsCountTextView.setText(Integer.toString(post.getnComments())); ((DataViewHolder) holder).commentsCountTextView.setText(Integer.toString(post.getnComments()));
if(post.isSaved()) { if (post.isSaved()) {
((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_baseline_bookmark_24px); ((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_baseline_bookmark_24px);
} else { } else {
((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_baseline_bookmark_border_24px); ((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_baseline_bookmark_border_24px);
} }
((DataViewHolder) holder).saveButton.setOnClickListener(view -> { ((DataViewHolder) holder).saveButton.setOnClickListener(view -> {
if(mAccessToken == null) { if (mAccessToken == null) {
Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show();
return; return;
} }
if(post.isSaved()) { if (post.isSaved()) {
((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_baseline_bookmark_border_24px); ((DataViewHolder) holder).saveButton.setImageResource(R.drawable.ic_baseline_bookmark_border_24px);
SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(), SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(),
new SaveThing.SaveThingListener() { new SaveThing.SaveThingListener() {
@ -715,7 +707,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
((DataViewHolder) holder).progressBar.setVisibility(View.GONE); ((DataViewHolder) holder).progressBar.setVisibility(View.GONE);
((DataViewHolder) holder).errorRelativeLayout.setVisibility(View.VISIBLE); ((DataViewHolder) holder).errorRelativeLayout.setVisibility(View.VISIBLE);
((DataViewHolder)holder).errorRelativeLayout.setOnClickListener(view -> { ((DataViewHolder) holder).errorRelativeLayout.setOnClickListener(view -> {
((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE); ((DataViewHolder) holder).progressBar.setVisibility(View.VISIBLE);
((DataViewHolder) holder).errorRelativeLayout.setVisibility(View.GONE); ((DataViewHolder) holder).errorRelativeLayout.setVisibility(View.GONE);
loadImage(holder, post); loadImage(holder, post);
@ -731,7 +723,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} }
}); });
if((post.isNSFW() && mNeedBlurNSFW) || post.isSpoiler() && mNeedBlurSpoiler) { if ((post.isNSFW() && mNeedBlurNSFW) || post.isSpoiler() && mNeedBlurSpoiler) {
imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 2))) imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 2)))
.into(((DataViewHolder) holder).imageView); .into(((DataViewHolder) holder).imageView);
} else { } else {
@ -755,7 +747,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
@Override @Override
public int getItemCount() { public int getItemCount() {
if(hasExtraRow()) { if (hasExtraRow()) {
return super.getItemCount() + 1; return super.getItemCount() + 1;
} }
return super.getItemCount(); return super.getItemCount();
@ -789,69 +781,9 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} }
} }
class DataViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.card_view_item_post) MaterialCardView cardView;
@BindView(R.id.icon_name_linear_layout_view_item_post) LinearLayout iconNameLinearLayout;
@BindView(R.id.icon_gif_image_view_item_post) AspectRatioGifImageView iconGifImageView;
@BindView(R.id.name_text_view_item_post) TextView nameTextView;
@BindView(R.id.stickied_post_image_view_item_post) ImageView stickiedPostImageView;
@BindView(R.id.post_time_text_view_best_item_post) TextView postTimeTextView;
@BindView(R.id.title_text_view_best_item_post) TextView titleTextView;
@BindView(R.id.type_text_view_item_post) CustomTextView typeTextView;
@BindView(R.id.gilded_image_view_item_post) ImageView gildedImageView;
@BindView(R.id.gilded_number_text_view_item_post) TextView gildedNumberTextView;
@BindView(R.id.archived_image_view_item_post) ImageView archivedImageView;
@BindView(R.id.locked_image_view_item_post) ImageView lockedImageView;
@BindView(R.id.crosspost_image_view_item_post) ImageView crosspostImageView;
@BindView(R.id.nsfw_text_view_item_post) CustomTextView nsfwTextView;
@BindView(R.id.spoiler_flair_linear_layout_item_post) LinearLayout spoilerFlairLinearLayout;
@BindView(R.id.spoiler_custom_text_view_item_post) CustomTextView spoilerTextView;
@BindView(R.id.flair_custom_text_view_item_post) CustomTextView flairTextView;
@BindView(R.id.link_text_view_item_post) TextView linkTextView;
@BindView(R.id.image_view_wrapper_item_post) RelativeLayout relativeLayout;
@BindView(R.id.progress_bar_item_post) ProgressBar progressBar;
@BindView(R.id.image_view_best_post_item) AspectRatioGifImageView imageView;
@BindView(R.id.load_image_error_relative_layout_item_post) RelativeLayout errorRelativeLayout;
@BindView(R.id.image_view_no_preview_link_item_post) ImageView noPreviewLinkImageView;
@BindView(R.id.plus_button_item_post) ImageView upvoteButton;
@BindView(R.id.score_text_view_item_post) TextView scoreTextView;
@BindView(R.id.minus_button_item_post) ImageView downvoteButton;
@BindView(R.id.comment_button_item_post) ImageView commentButton;
@BindView(R.id.comments_count_item_post) TextView commentsCountTextView;
@BindView(R.id.save_button_item_post) ImageView saveButton;
@BindView(R.id.share_button_item_post) ImageView shareButton;
DataViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
scoreTextView.setOnClickListener(view -> {
//Do nothing in order to prevent clicking this to start ViewPostDetailActivity
});
}
}
class ErrorViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.error_text_view_item_footer_error) TextView errorTextView;
@BindView(R.id.retry_button_item_footer_error) Button retryButton;
ErrorViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
errorTextView.setText(R.string.load_posts_error);
retryButton.setOnClickListener(view -> mCallback.retryLoadingMore());
}
}
class LoadingViewHolder extends RecyclerView.ViewHolder {
LoadingViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
@Override @Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
mGlide.clear(((DataViewHolder) holder).imageView); mGlide.clear(((DataViewHolder) holder).imageView);
mGlide.clear(((DataViewHolder) holder).iconGifImageView); mGlide.clear(((DataViewHolder) holder).iconGifImageView);
((DataViewHolder) holder).stickiedPostImageView.setVisibility(View.GONE); ((DataViewHolder) holder).stickiedPostImageView.setVisibility(View.GONE);
@ -875,4 +807,102 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
((DataViewHolder) holder).downvoteButton.clearColorFilter(); ((DataViewHolder) holder).downvoteButton.clearColorFilter();
} }
} }
public interface Callback {
void retryLoadingMore();
void typeChipClicked(int filter);
}
class DataViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.card_view_item_post)
MaterialCardView cardView;
@BindView(R.id.icon_name_linear_layout_view_item_post)
LinearLayout iconNameLinearLayout;
@BindView(R.id.icon_gif_image_view_item_post)
AspectRatioGifImageView iconGifImageView;
@BindView(R.id.name_text_view_item_post)
TextView nameTextView;
@BindView(R.id.stickied_post_image_view_item_post)
ImageView stickiedPostImageView;
@BindView(R.id.post_time_text_view_best_item_post)
TextView postTimeTextView;
@BindView(R.id.title_text_view_best_item_post)
TextView titleTextView;
@BindView(R.id.type_text_view_item_post)
CustomTextView typeTextView;
@BindView(R.id.gilded_image_view_item_post)
ImageView gildedImageView;
@BindView(R.id.gilded_number_text_view_item_post)
TextView gildedNumberTextView;
@BindView(R.id.archived_image_view_item_post)
ImageView archivedImageView;
@BindView(R.id.locked_image_view_item_post)
ImageView lockedImageView;
@BindView(R.id.crosspost_image_view_item_post)
ImageView crosspostImageView;
@BindView(R.id.nsfw_text_view_item_post)
CustomTextView nsfwTextView;
@BindView(R.id.spoiler_flair_linear_layout_item_post)
LinearLayout spoilerFlairLinearLayout;
@BindView(R.id.spoiler_custom_text_view_item_post)
CustomTextView spoilerTextView;
@BindView(R.id.flair_custom_text_view_item_post)
CustomTextView flairTextView;
@BindView(R.id.link_text_view_item_post)
TextView linkTextView;
@BindView(R.id.image_view_wrapper_item_post)
RelativeLayout relativeLayout;
@BindView(R.id.progress_bar_item_post)
ProgressBar progressBar;
@BindView(R.id.image_view_best_post_item)
AspectRatioGifImageView imageView;
@BindView(R.id.load_image_error_relative_layout_item_post)
RelativeLayout errorRelativeLayout;
@BindView(R.id.image_view_no_preview_link_item_post)
ImageView noPreviewLinkImageView;
@BindView(R.id.plus_button_item_post)
ImageView upvoteButton;
@BindView(R.id.score_text_view_item_post)
TextView scoreTextView;
@BindView(R.id.minus_button_item_post)
ImageView downvoteButton;
@BindView(R.id.comment_button_item_post)
ImageView commentButton;
@BindView(R.id.comments_count_item_post)
TextView commentsCountTextView;
@BindView(R.id.save_button_item_post)
ImageView saveButton;
@BindView(R.id.share_button_item_post)
ImageView shareButton;
DataViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
scoreTextView.setOnClickListener(view -> {
//Do nothing in order to prevent clicking this to start ViewPostDetailActivity
});
}
}
class ErrorViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.error_text_view_item_footer_error)
TextView errorTextView;
@BindView(R.id.retry_button_item_footer_error)
Button retryButton;
ErrorViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
errorTextView.setText(R.string.load_posts_error);
retryButton.setOnClickListener(view -> mCallback.retryLoadingMore());
}
}
class LoadingViewHolder extends RecyclerView.ViewHolder {
LoadingViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
} }

View File

@ -37,7 +37,7 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
builder.linkResolver((view, link) -> { builder.linkResolver((view, link) -> {
Intent intent = new Intent(context, LinkResolverActivity.class); Intent intent = new Intent(context, LinkResolverActivity.class);
Uri uri = Uri.parse(link); Uri uri = Uri.parse(link);
if(uri.getScheme() == null && uri.getHost() == null) { if (uri.getScheme() == null && uri.getHost() == null) {
intent.setData(LinkResolverActivity.getRedditUriByPath(link)); intent.setData(LinkResolverActivity.getRedditUriByPath(link));
} else { } else {
intent.setData(uri); intent.setData(uri);
@ -60,7 +60,7 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
@Override @Override
public void onBindViewHolder(@NonNull RuleViewHolder holder, int position) { public void onBindViewHolder(@NonNull RuleViewHolder holder, int position) {
holder.shortNameTextView.setText(rules.get(holder.getAdapterPosition()).getShortName()); holder.shortNameTextView.setText(rules.get(holder.getAdapterPosition()).getShortName());
if(rules.get(holder.getAdapterPosition()).getDescriptionHtml() == null) { if (rules.get(holder.getAdapterPosition()).getDescriptionHtml() == null) {
holder.descriptionMarkwonView.setVisibility(View.GONE); holder.descriptionMarkwonView.setVisibility(View.GONE);
} else { } else {
markwon.setMarkdown(holder.descriptionMarkwonView, rules.get(holder.getAdapterPosition()).getDescriptionHtml()); markwon.setMarkdown(holder.descriptionMarkwonView, rules.get(holder.getAdapterPosition()).getDescriptionHtml());
@ -84,8 +84,10 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler
} }
class RuleViewHolder extends RecyclerView.ViewHolder { class RuleViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.short_name_text_view_item_rule) TextView shortNameTextView; @BindView(R.id.short_name_text_view_item_rule)
@BindView(R.id.description_markwon_view_item_rule) TextView descriptionMarkwonView; TextView shortNameTextView;
@BindView(R.id.description_markwon_view_item_rule)
TextView descriptionMarkwonView;
RuleViewHolder(@NonNull View itemView) { RuleViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);

View File

@ -33,17 +33,21 @@ import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<SubredditData, RecyclerView.ViewHolder> { public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<SubredditData, RecyclerView.ViewHolder> {
public interface Callback {
void retryLoadingMore();
void subredditSelected(String subredditName, String iconUrl);
}
private RequestManager glide;
private static final int VIEW_TYPE_DATA = 0; private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1; private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2; private static final int VIEW_TYPE_LOADING = 2;
private static final DiffUtil.ItemCallback<SubredditData> DIFF_CALLBACK = new DiffUtil.ItemCallback<SubredditData>() {
@Override
public boolean areItemsTheSame(@NonNull SubredditData oldItem, @NonNull SubredditData newItem) {
return oldItem.getId().equals(newItem.getId());
}
@Override
public boolean areContentsTheSame(@NonNull SubredditData oldItem, @NonNull SubredditData newItem) {
return true;
}
};
private RequestManager glide;
private Context context; private Context context;
private Retrofit oauthRetrofit; private Retrofit oauthRetrofit;
private Retrofit retrofit; private Retrofit retrofit;
@ -69,25 +73,13 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
glide = Glide.with(context.getApplicationContext()); glide = Glide.with(context.getApplicationContext());
} }
private static final DiffUtil.ItemCallback<SubredditData> DIFF_CALLBACK = new DiffUtil.ItemCallback<SubredditData>() {
@Override
public boolean areItemsTheSame(@NonNull SubredditData oldItem, @NonNull SubredditData newItem) {
return oldItem.getId().equals(newItem.getId());
}
@Override
public boolean areContentsTheSame(@NonNull SubredditData oldItem, @NonNull SubredditData newItem) {
return true;
}
};
@NonNull @NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == VIEW_TYPE_DATA) { if (viewType == VIEW_TYPE_DATA) {
ConstraintLayout constraintLayout = (ConstraintLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_subreddit_listing, parent, false); ConstraintLayout constraintLayout = (ConstraintLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_subreddit_listing, parent, false);
return new DataViewHolder(constraintLayout); return new DataViewHolder(constraintLayout);
} else if(viewType == VIEW_TYPE_ERROR) { } else if (viewType == VIEW_TYPE_ERROR) {
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false);
return new ErrorViewHolder(relativeLayout); return new ErrorViewHolder(relativeLayout);
} else { } else {
@ -98,12 +90,12 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if(holder instanceof DataViewHolder) { if (holder instanceof DataViewHolder) {
SubredditData subredditData = getItem(position); SubredditData subredditData = getItem(position);
((DataViewHolder) holder).constraintLayout.setOnClickListener(view -> ((DataViewHolder) holder).constraintLayout.setOnClickListener(view ->
callback.subredditSelected(subredditData.getName(), subredditData.getIconUrl())); callback.subredditSelected(subredditData.getName(), subredditData.getIconUrl()));
if(!subredditData.getIconUrl().equals("")) { if (!subredditData.getIconUrl().equals("")) {
glide.load(subredditData.getIconUrl()) glide.load(subredditData.getIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(glide.load(R.drawable.subreddit_default_icon) .error(glide.load(R.drawable.subreddit_default_icon)
@ -164,7 +156,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
@Override @Override
public int getItemCount() { public int getItemCount() {
if(hasExtraRow()) { if (hasExtraRow()) {
return super.getItemCount() + 1; return super.getItemCount() + 1;
} }
return super.getItemCount(); return super.getItemCount();
@ -190,11 +182,29 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
} }
} }
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if (holder instanceof DataViewHolder) {
glide.clear(((DataViewHolder) holder).iconGifImageView);
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
}
}
public interface Callback {
void retryLoadingMore();
void subredditSelected(String subredditName, String iconUrl);
}
class DataViewHolder extends RecyclerView.ViewHolder { class DataViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.constraint_layout_item_subreddit_listing) ConstraintLayout constraintLayout; @BindView(R.id.constraint_layout_item_subreddit_listing)
@BindView(R.id.subreddit_icon_gif_image_view_item_subreddit_listing) GifImageView iconGifImageView; ConstraintLayout constraintLayout;
@BindView(R.id.subreddit_name_text_view_item_subreddit_listing) TextView subredditNameTextView; @BindView(R.id.subreddit_icon_gif_image_view_item_subreddit_listing)
@BindView(R.id.subscribe_image_view_item_subreddit_listing) ImageView subscribeButton; GifImageView iconGifImageView;
@BindView(R.id.subreddit_name_text_view_item_subreddit_listing)
TextView subredditNameTextView;
@BindView(R.id.subscribe_image_view_item_subreddit_listing)
ImageView subscribeButton;
DataViewHolder(View itemView) { DataViewHolder(View itemView) {
super(itemView); super(itemView);
@ -203,8 +213,10 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
} }
class ErrorViewHolder extends RecyclerView.ViewHolder { class ErrorViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.error_text_view_item_footer_error) TextView errorTextView; @BindView(R.id.error_text_view_item_footer_error)
@BindView(R.id.retry_button_item_footer_error) Button retryButton; TextView errorTextView;
@BindView(R.id.retry_button_item_footer_error)
Button retryButton;
ErrorViewHolder(View itemView) { ErrorViewHolder(View itemView) {
super(itemView); super(itemView);
@ -220,12 +232,4 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
ButterKnife.bind(this, itemView); ButterKnife.bind(this, itemView);
} }
} }
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if(holder instanceof DataViewHolder) {
glide.clear(((DataViewHolder) holder).iconGifImageView);
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
}
}
} }

View File

@ -16,10 +16,10 @@ import com.bumptech.glide.request.RequestOptions;
import java.util.List; import java.util.List;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity; import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -32,10 +32,6 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
private String userIconUrl; private String userIconUrl;
private boolean hasClearSelectionRow; private boolean hasClearSelectionRow;
public interface ItemClickListener {
void onClick(String name, String iconUrl, boolean subredditIsUser);
}
public SubscribedSubredditsRecyclerViewAdapter(Context context) { public SubscribedSubredditsRecyclerViewAdapter(Context context) {
mContext = context; mContext = context;
glide = Glide.with(context.getApplicationContext()); glide = Glide.with(context.getApplicationContext());
@ -59,13 +55,13 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
String name; String name;
String iconUrl; String iconUrl;
if(itemClickListener != null) { if (itemClickListener != null) {
if(hasClearSelectionRow) { if (hasClearSelectionRow) {
if(viewHolder.getAdapterPosition() == 0) { if (viewHolder.getAdapterPosition() == 0) {
((SubredditViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_subreddits); ((SubredditViewHolder) viewHolder).subredditNameTextView.setText(R.string.all_subreddits);
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null, null, false)); viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(null, null, false));
return; return;
} else if(viewHolder.getAdapterPosition() == 1) { } else if (viewHolder.getAdapterPosition() == 1) {
name = username; name = username;
iconUrl = userIconUrl; iconUrl = userIconUrl;
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true)); viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true));
@ -75,7 +71,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, false)); viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, false));
} }
} else { } else {
if(viewHolder.getAdapterPosition() == 0) { if (viewHolder.getAdapterPosition() == 0) {
name = username; name = username;
iconUrl = userIconUrl; iconUrl = userIconUrl;
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true)); viewHolder.itemView.setOnClickListener(view -> itemClickListener.onClick(name, iconUrl, true));
@ -96,7 +92,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
}); });
} }
if(iconUrl != null && !iconUrl.equals("")) { if (iconUrl != null && !iconUrl.equals("")) {
glide.load(iconUrl) glide.load(iconUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(glide.load(R.drawable.subreddit_default_icon) .error(glide.load(R.drawable.subreddit_default_icon)
@ -112,9 +108,9 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
@Override @Override
public int getItemCount() { public int getItemCount() {
if(mSubscribedSubredditData != null) { if (mSubscribedSubredditData != null) {
if(itemClickListener != null) { if (itemClickListener != null) {
if(hasClearSelectionRow) { if (hasClearSelectionRow) {
return mSubscribedSubredditData.size() + 2; return mSubscribedSubredditData.size() + 2;
} else { } else {
return mSubscribedSubredditData.size() + 1; return mSubscribedSubredditData.size() + 1;
@ -131,7 +127,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
glide.clear(((SubredditViewHolder) holder).iconGifImageView); glide.clear(((SubredditViewHolder) holder).iconGifImageView);
} }
public void setSubscribedSubreddits(List<SubscribedSubredditData> subscribedSubreddits){ public void setSubscribedSubreddits(List<SubscribedSubredditData> subscribedSubreddits) {
mSubscribedSubredditData = subscribedSubreddits; mSubscribedSubredditData = subscribedSubreddits;
notifyDataSetChanged(); notifyDataSetChanged();
} }
@ -141,6 +137,10 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
this.userIconUrl = userIconUrl; this.userIconUrl = userIconUrl;
} }
public interface ItemClickListener {
void onClick(String name, String iconUrl, boolean subredditIsUser);
}
private class SubredditViewHolder extends RecyclerView.ViewHolder { private class SubredditViewHolder extends RecyclerView.ViewHolder {
private final GifImageView iconGifImageView; private final GifImageView iconGifImageView;
private final TextView subredditNameTextView; private final TextView subredditNameTextView;

View File

@ -21,54 +21,23 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager; import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.Activity.ViewUserDetailActivity; import ml.docilealligator.infinityforreddit.Activity.ViewUserDetailActivity;
import ml.docilealligator.infinityforreddit.AsyncTask.CheckIsFollowingUserAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.CheckIsFollowingUserAsyncTask;
import ml.docilealligator.infinityforreddit.NetworkState; import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserDao; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.User.UserData; import ml.docilealligator.infinityforreddit.User.UserData;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.UserFollowing; import ml.docilealligator.infinityforreddit.UserFollowing;
import pl.droidsonroids.gif.GifImageView; import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, RecyclerView.ViewHolder> { public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, RecyclerView.ViewHolder> {
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
private RequestManager glide;
private static final int VIEW_TYPE_DATA = 0; private static final int VIEW_TYPE_DATA = 0;
private static final int VIEW_TYPE_ERROR = 1; private static final int VIEW_TYPE_ERROR = 1;
private static final int VIEW_TYPE_LOADING = 2; private static final int VIEW_TYPE_LOADING = 2;
private Context context;
private Retrofit oauthRetrofit;
private Retrofit retrofit;
private String accessToken;
private String accountName;
private SubscribedUserDao subscribedUserDao;
private NetworkState networkState;
private UserListingRecyclerViewAdapter.RetryLoadingMoreCallback retryLoadingMoreCallback;
public UserListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit,
String accessToken, String accountName, SubscribedUserDao subscribedUserDao,
UserListingRecyclerViewAdapter.RetryLoadingMoreCallback retryLoadingMoreCallback) {
super(DIFF_CALLBACK);
this.context = context;
this.oauthRetrofit = oauthRetrofit;
this.retrofit = retrofit;
this.accessToken = accessToken;
this.accountName = accountName;
this.subscribedUserDao = subscribedUserDao;
this.retryLoadingMoreCallback = retryLoadingMoreCallback;
glide = Glide.with(context.getApplicationContext());
}
private static final DiffUtil.ItemCallback<UserData> DIFF_CALLBACK = new DiffUtil.ItemCallback<UserData>() { private static final DiffUtil.ItemCallback<UserData> DIFF_CALLBACK = new DiffUtil.ItemCallback<UserData>() {
@Override @Override
public boolean areItemsTheSame(@NonNull UserData oldItem, @NonNull UserData newItem) { public boolean areItemsTheSame(@NonNull UserData oldItem, @NonNull UserData newItem) {
@ -80,14 +49,38 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
return true; return true;
} }
}; };
private RequestManager glide;
private Context context;
private Retrofit oauthRetrofit;
private Retrofit retrofit;
private String accessToken;
private String accountName;
private SubscribedUserDao subscribedUserDao;
private NetworkState networkState;
private UserListingRecyclerViewAdapter.RetryLoadingMoreCallback retryLoadingMoreCallback;
public UserListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit,
String accessToken, String accountName, SubscribedUserDao subscribedUserDao,
UserListingRecyclerViewAdapter.RetryLoadingMoreCallback retryLoadingMoreCallback) {
super(DIFF_CALLBACK);
this.context = context;
this.oauthRetrofit = oauthRetrofit;
this.retrofit = retrofit;
this.accessToken = accessToken;
this.accountName = accountName;
this.subscribedUserDao = subscribedUserDao;
this.retryLoadingMoreCallback = retryLoadingMoreCallback;
glide = Glide.with(context.getApplicationContext());
}
@NonNull @NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == VIEW_TYPE_DATA) { if (viewType == VIEW_TYPE_DATA) {
ConstraintLayout constraintLayout = (ConstraintLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_listing, parent, false); ConstraintLayout constraintLayout = (ConstraintLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_listing, parent, false);
return new UserListingRecyclerViewAdapter.DataViewHolder(constraintLayout); return new UserListingRecyclerViewAdapter.DataViewHolder(constraintLayout);
} else if(viewType == VIEW_TYPE_ERROR) { } else if (viewType == VIEW_TYPE_ERROR) {
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false); RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false);
return new UserListingRecyclerViewAdapter.ErrorViewHolder(relativeLayout); return new UserListingRecyclerViewAdapter.ErrorViewHolder(relativeLayout);
} else { } else {
@ -98,7 +91,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if(holder instanceof UserListingRecyclerViewAdapter.DataViewHolder) { if (holder instanceof UserListingRecyclerViewAdapter.DataViewHolder) {
UserData userData = getItem(position); UserData userData = getItem(position);
((UserListingRecyclerViewAdapter.DataViewHolder) holder).constraintLayout.setOnClickListener(view -> { ((UserListingRecyclerViewAdapter.DataViewHolder) holder).constraintLayout.setOnClickListener(view -> {
Intent intent = new Intent(context, ViewUserDetailActivity.class); Intent intent = new Intent(context, ViewUserDetailActivity.class);
@ -106,7 +99,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
context.startActivity(intent); context.startActivity(intent);
}); });
if(!userData.getIconUrl().equals("")) { if (!userData.getIconUrl().equals("")) {
glide.load(userData.getIconUrl()) glide.load(userData.getIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(glide.load(R.drawable.subreddit_default_icon) .error(glide.load(R.drawable.subreddit_default_icon)
@ -167,7 +160,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
@Override @Override
public int getItemCount() { public int getItemCount() {
if(hasExtraRow()) { if (hasExtraRow()) {
return super.getItemCount() + 1; return super.getItemCount() + 1;
} }
return super.getItemCount(); return super.getItemCount();
@ -193,11 +186,27 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
} }
} }
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if (holder instanceof UserListingRecyclerViewAdapter.DataViewHolder) {
glide.clear(((UserListingRecyclerViewAdapter.DataViewHolder) holder).iconGifImageView);
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
}
}
public interface RetryLoadingMoreCallback {
void retryLoadingMore();
}
class DataViewHolder extends RecyclerView.ViewHolder { class DataViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.constraint_layout_item_user_listing) ConstraintLayout constraintLayout; @BindView(R.id.constraint_layout_item_user_listing)
@BindView(R.id.user_icon_gif_image_view_item_user_listing) GifImageView iconGifImageView; ConstraintLayout constraintLayout;
@BindView(R.id.user_name_text_view_item_user_listing) TextView UserNameTextView; @BindView(R.id.user_icon_gif_image_view_item_user_listing)
@BindView(R.id.subscribe_image_view_item_user_listing) ImageView subscribeButton; GifImageView iconGifImageView;
@BindView(R.id.user_name_text_view_item_user_listing)
TextView UserNameTextView;
@BindView(R.id.subscribe_image_view_item_user_listing)
ImageView subscribeButton;
DataViewHolder(View itemView) { DataViewHolder(View itemView) {
super(itemView); super(itemView);
@ -206,8 +215,10 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
} }
class ErrorViewHolder extends RecyclerView.ViewHolder { class ErrorViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.error_text_view_item_footer_error) TextView errorTextView; @BindView(R.id.error_text_view_item_footer_error)
@BindView(R.id.retry_button_item_footer_error) Button retryButton; TextView errorTextView;
@BindView(R.id.retry_button_item_footer_error)
Button retryButton;
ErrorViewHolder(View itemView) { ErrorViewHolder(View itemView) {
super(itemView); super(itemView);
@ -223,12 +234,4 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
ButterKnife.bind(this, itemView); ButterKnife.bind(this, itemView);
} }
} }
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if(holder instanceof UserListingRecyclerViewAdapter.DataViewHolder) {
glide.clear(((UserListingRecyclerViewAdapter.DataViewHolder) holder).iconGifImageView);
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
}
}
} }

View File

@ -3,13 +3,6 @@ package ml.docilealligator.infinityforreddit;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener { public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
// State
public enum State {
EXPANDED,
COLLAPSED,
IDLE
}
private AppBarStateChangeListener.State mCurrentState = AppBarStateChangeListener.State.IDLE; private AppBarStateChangeListener.State mCurrentState = AppBarStateChangeListener.State.IDLE;
@Override @Override
@ -34,8 +27,16 @@ public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffset
/** /**
* Notifies on state change * Notifies on state change
*
* @param appBarLayout Layout * @param appBarLayout Layout
* @param state Collapse state * @param state Collapse state
*/ */
public abstract void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state); public abstract void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state);
// State
public enum State {
EXPANDED,
COLLAPSED,
IDLE
}
} }

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit;
import javax.inject.Singleton; import javax.inject.Singleton;
import dagger.Component;
import ml.docilealligator.infinityforreddit.Activity.AccountPostsActivity; import ml.docilealligator.infinityforreddit.Activity.AccountPostsActivity;
import ml.docilealligator.infinityforreddit.Activity.AccountSavedThingActivity; import ml.docilealligator.infinityforreddit.Activity.AccountSavedThingActivity;
import ml.docilealligator.infinityforreddit.Activity.CommentActivity; import ml.docilealligator.infinityforreddit.Activity.CommentActivity;
@ -36,45 +37,79 @@ import ml.docilealligator.infinityforreddit.Fragment.SubscribedSubredditsListing
import ml.docilealligator.infinityforreddit.Fragment.UserListingFragment; import ml.docilealligator.infinityforreddit.Fragment.UserListingFragment;
import ml.docilealligator.infinityforreddit.Settings.MainPreferenceFragment; import ml.docilealligator.infinityforreddit.Settings.MainPreferenceFragment;
import ml.docilealligator.infinityforreddit.Settings.NotificationPreferenceFragment; import ml.docilealligator.infinityforreddit.Settings.NotificationPreferenceFragment;
import dagger.Component;
@Singleton @Singleton
@Component(modules = AppModule.class) @Component(modules = AppModule.class)
public interface AppComponent { public interface AppComponent {
void inject(MainActivity mainActivity); void inject(MainActivity mainActivity);
void inject(LoginActivity loginActivity); void inject(LoginActivity loginActivity);
void inject(PostFragment postFragment); void inject(PostFragment postFragment);
void inject(SubredditListingFragment subredditListingFragment); void inject(SubredditListingFragment subredditListingFragment);
void inject(UserListingFragment userListingFragment); void inject(UserListingFragment userListingFragment);
void inject(ViewPostDetailActivity viewPostDetailActivity); void inject(ViewPostDetailActivity viewPostDetailActivity);
void inject(ViewSubredditDetailActivity viewSubredditDetailActivity); void inject(ViewSubredditDetailActivity viewSubredditDetailActivity);
void inject(ViewUserDetailActivity viewUserDetailActivity); void inject(ViewUserDetailActivity viewUserDetailActivity);
void inject(CommentActivity commentActivity); void inject(CommentActivity commentActivity);
void inject(SubscribedThingListingActivity subscribedThingListingActivity); void inject(SubscribedThingListingActivity subscribedThingListingActivity);
void inject(PostTextActivity postTextActivity); void inject(PostTextActivity postTextActivity);
void inject(SubscribedSubredditsListingFragment subscribedSubredditsListingFragment); void inject(SubscribedSubredditsListingFragment subscribedSubredditsListingFragment);
void inject(PostLinkActivity postLinkActivity); void inject(PostLinkActivity postLinkActivity);
void inject(PostImageActivity postImageActivity); void inject(PostImageActivity postImageActivity);
void inject(PostVideoActivity postVideoActivity); void inject(PostVideoActivity postVideoActivity);
void inject(FlairBottomSheetFragment flairBottomSheetFragment); void inject(FlairBottomSheetFragment flairBottomSheetFragment);
void inject(RulesActivity rulesActivity); void inject(RulesActivity rulesActivity);
void inject(CommentsListingFragment commentsListingFragment); void inject(CommentsListingFragment commentsListingFragment);
void inject(SubmitPostService submitPostService); void inject(SubmitPostService submitPostService);
void inject(FilteredThingActivity filteredPostsActivity); void inject(FilteredThingActivity filteredPostsActivity);
void inject(SearchResultActivity searchResultActivity); void inject(SearchResultActivity searchResultActivity);
void inject(SearchSubredditsResultActivity searchSubredditsResultActivity); void inject(SearchSubredditsResultActivity searchSubredditsResultActivity);
void inject(FollowedUsersListingFragment followedUsersListingFragment); void inject(FollowedUsersListingFragment followedUsersListingFragment);
void inject(SubredditSelectionActivity subredditSelectionActivity); void inject(SubredditSelectionActivity subredditSelectionActivity);
void inject(EditPostActivity editPostActivity); void inject(EditPostActivity editPostActivity);
void inject(EditCommentActivity editCommentActivity); void inject(EditCommentActivity editCommentActivity);
void inject(AccountPostsActivity accountPostsActivity); void inject(AccountPostsActivity accountPostsActivity);
void inject(PullNotificationWorker pullNotificationWorker); void inject(PullNotificationWorker pullNotificationWorker);
void inject(ViewMessageActivity viewMessageActivity); void inject(ViewMessageActivity viewMessageActivity);
void inject(NotificationPreferenceFragment notificationPreferenceFragment); void inject(NotificationPreferenceFragment notificationPreferenceFragment);
void inject(LinkResolverActivity linkResolverActivity); void inject(LinkResolverActivity linkResolverActivity);
void inject(SearchActivity searchActivity); void inject(SearchActivity searchActivity);
void inject(SettingsActivity settingsActivity); void inject(SettingsActivity settingsActivity);
void inject(MainPreferenceFragment mainPreferenceFragment); void inject(MainPreferenceFragment mainPreferenceFragment);
void inject(AccountSavedThingActivity accountSavedThingActivity); void inject(AccountSavedThingActivity accountSavedThingActivity);
void inject(ViewImageActivity viewImageActivity); void inject(ViewImageActivity viewImageActivity);
} }

View File

@ -22,7 +22,8 @@ class AppModule {
mApplication = application; mApplication = application;
} }
@Provides @Named("oauth") @Provides
@Named("oauth")
@Singleton @Singleton
Retrofit provideOauthRetrofit(OkHttpClient okHttpClient) { Retrofit provideOauthRetrofit(OkHttpClient okHttpClient) {
return new Retrofit.Builder() return new Retrofit.Builder()
@ -32,7 +33,8 @@ class AppModule {
.build(); .build();
} }
@Provides @Named("oauth_without_authenticator") @Provides
@Named("oauth_without_authenticator")
@Singleton @Singleton
Retrofit provideOauthWithoutAuthenticatorRetrofit() { Retrofit provideOauthWithoutAuthenticatorRetrofit() {
return new Retrofit.Builder() return new Retrofit.Builder()
@ -41,7 +43,8 @@ class AppModule {
.build(); .build();
} }
@Provides @Named("no_oauth") @Provides
@Named("no_oauth")
@Singleton @Singleton
Retrofit provideRetrofit() { Retrofit provideRetrofit() {
return new Retrofit.Builder() return new Retrofit.Builder()
@ -50,7 +53,8 @@ class AppModule {
.build(); .build();
} }
@Provides @Named("upload_media") @Provides
@Named("upload_media")
@Singleton @Singleton
Retrofit provideUploadMediaRetrofit() { Retrofit provideUploadMediaRetrofit() {
return new Retrofit.Builder() return new Retrofit.Builder()
@ -59,7 +63,8 @@ class AppModule {
.build(); .build();
} }
@Provides @Named("upload_video") @Provides
@Named("upload_video")
@Singleton @Singleton
Retrofit provideUploadVideoRetrofit() { Retrofit provideUploadVideoRetrofit() {
return new Retrofit.Builder() return new Retrofit.Builder()

View File

@ -12,11 +12,6 @@ public class CheckIsFollowingUserAsyncTask extends AsyncTask<Void, Void, Void> {
private SubscribedUserData subscribedUserData; private SubscribedUserData subscribedUserData;
private CheckIsFollowingUserListener checkIsFollowingUserListener; private CheckIsFollowingUserListener checkIsFollowingUserListener;
public interface CheckIsFollowingUserListener {
void isSubscribed();
void isNotSubscribed();
}
public CheckIsFollowingUserAsyncTask(SubscribedUserDao subscribedUserDao, String username, String accountName, public CheckIsFollowingUserAsyncTask(SubscribedUserDao subscribedUserDao, String username, String accountName,
CheckIsFollowingUserListener checkIsFollowingUserListener) { CheckIsFollowingUserListener checkIsFollowingUserListener) {
this.subscribedUserDao = subscribedUserDao; this.subscribedUserDao = subscribedUserDao;
@ -34,10 +29,16 @@ public class CheckIsFollowingUserAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
if(subscribedUserData != null) { if (subscribedUserData != null) {
checkIsFollowingUserListener.isSubscribed(); checkIsFollowingUserListener.isSubscribed();
} else { } else {
checkIsFollowingUserListener.isNotSubscribed(); checkIsFollowingUserListener.isNotSubscribed();
} }
} }
public interface CheckIsFollowingUserListener {
void isSubscribed();
void isNotSubscribed();
}
} }

View File

@ -13,16 +13,11 @@ public class CheckIsSubscribedToSubredditAsyncTask extends AsyncTask<Void, Void,
private SubscribedSubredditData subscribedSubredditData; private SubscribedSubredditData subscribedSubredditData;
private CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener; private CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener;
public interface CheckIsSubscribedToSubredditListener {
void isSubscribed();
void isNotSubscribed();
}
public CheckIsSubscribedToSubredditAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, public CheckIsSubscribedToSubredditAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
String subredditName, String accountName, String subredditName, String accountName,
CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener) { CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase; this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subredditName =subredditName; this.subredditName = subredditName;
this.accountName = accountName; this.accountName = accountName;
this.checkIsSubscribedToSubredditListener = checkIsSubscribedToSubredditListener; this.checkIsSubscribedToSubredditListener = checkIsSubscribedToSubredditListener;
} }
@ -36,10 +31,16 @@ public class CheckIsSubscribedToSubredditAsyncTask extends AsyncTask<Void, Void,
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
if(subscribedSubredditData != null) { if (subscribedSubredditData != null) {
checkIsSubscribedToSubredditListener.isSubscribed(); checkIsSubscribedToSubredditListener.isSubscribed();
} else { } else {
checkIsSubscribedToSubredditListener.isNotSubscribed(); checkIsSubscribedToSubredditListener.isNotSubscribed();
} }
} }
public interface CheckIsSubscribedToSubredditListener {
void isSubscribed();
void isNotSubscribed();
}
} }

View File

@ -7,14 +7,9 @@ import ml.docilealligator.infinityforreddit.Account.AccountDao;
public class GetCurrentAccountAsyncTask extends AsyncTask<Void, Void, Void> { public class GetCurrentAccountAsyncTask extends AsyncTask<Void, Void, Void> {
public interface GetCurrentAccountAsyncTaskListener {
void success(Account account);
}
Account account; Account account;
AccountDao accountDao; AccountDao accountDao;
GetCurrentAccountAsyncTaskListener getCurrentAccountAsyncTaskListener; GetCurrentAccountAsyncTaskListener getCurrentAccountAsyncTaskListener;
public GetCurrentAccountAsyncTask(AccountDao accountDao, GetCurrentAccountAsyncTaskListener getCurrentAccountAsyncTaskListener) { public GetCurrentAccountAsyncTask(AccountDao accountDao, GetCurrentAccountAsyncTaskListener getCurrentAccountAsyncTaskListener) {
this.accountDao = accountDao; this.accountDao = accountDao;
this.getCurrentAccountAsyncTaskListener = getCurrentAccountAsyncTaskListener; this.getCurrentAccountAsyncTaskListener = getCurrentAccountAsyncTaskListener;
@ -30,4 +25,8 @@ public class GetCurrentAccountAsyncTask extends AsyncTask<Void, Void, Void> {
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
getCurrentAccountAsyncTaskListener.success(account); getCurrentAccountAsyncTaskListener.success(account);
} }
public interface GetCurrentAccountAsyncTaskListener {
void success(Account account);
}
} }

View File

@ -16,10 +16,6 @@ import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUse
public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void> { public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void> {
public interface InsertSubscribedThingListener {
void insertSuccess();
}
private RedditDataRoomDatabase mRedditDataRoomDatabase; private RedditDataRoomDatabase mRedditDataRoomDatabase;
private String mAccountName; private String mAccountName;
private SubscribedSubredditDao mSubscribedSubredditDao; private SubscribedSubredditDao mSubscribedSubredditDao;
@ -29,12 +25,11 @@ public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void>
private List<SubscribedUserData> subscribedUserData; private List<SubscribedUserData> subscribedUserData;
private List<SubredditData> subredditData; private List<SubredditData> subredditData;
private InsertSubscribedThingListener insertSubscribedThingListener; private InsertSubscribedThingListener insertSubscribedThingListener;
public InsertSubscribedThingsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, @Nullable String accountName, public InsertSubscribedThingsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, @Nullable String accountName,
List<SubscribedSubredditData> subscribedSubredditData, List<SubscribedSubredditData> subscribedSubredditData,
List<SubscribedUserData> subscribedUserData, List<SubscribedUserData> subscribedUserData,
List<SubredditData> subredditData, List<SubredditData> subredditData,
InsertSubscribedThingListener insertSubscribedThingListener) { InsertSubscribedThingListener insertSubscribedThingListener) {
mRedditDataRoomDatabase = redditDataRoomDatabase; mRedditDataRoomDatabase = redditDataRoomDatabase;
mAccountName = accountName; mAccountName = accountName;
mSubscribedSubredditDao = redditDataRoomDatabase.subscribedSubredditDao(); mSubscribedSubredditDao = redditDataRoomDatabase.subscribedSubredditDao();
@ -49,23 +44,23 @@ public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void>
@Override @Override
protected Void doInBackground(final Void... params) { protected Void doInBackground(final Void... params) {
if(mAccountName != null && mRedditDataRoomDatabase.accountDao().getAccountData(mAccountName) == null) { if (mAccountName != null && mRedditDataRoomDatabase.accountDao().getAccountData(mAccountName) == null) {
return null; return null;
} }
if(subscribedSubredditData != null) { if (subscribedSubredditData != null) {
for (SubscribedSubredditData s : subscribedSubredditData) { for (SubscribedSubredditData s : subscribedSubredditData) {
mSubscribedSubredditDao.insert(s); mSubscribedSubredditDao.insert(s);
} }
} }
if(subscribedUserData != null) { if (subscribedUserData != null) {
for (SubscribedUserData s : subscribedUserData) { for (SubscribedUserData s : subscribedUserData) {
mUserDao.insert(s); mUserDao.insert(s);
} }
} }
if(subredditData != null) { if (subredditData != null) {
for (SubredditData s : subredditData) { for (SubredditData s : subredditData) {
mSubredditDao.insert(s); mSubredditDao.insert(s);
} }
@ -77,4 +72,8 @@ public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void>
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
insertSubscribedThingListener.insertSuccess(); insertSubscribedThingListener.insertSuccess();
} }
public interface InsertSubscribedThingListener {
void insertSuccess();
}
} }

View File

@ -2,18 +2,14 @@ package ml.docilealligator.infinityforreddit.AsyncTask;
import android.os.AsyncTask; import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.User.UserData;
import ml.docilealligator.infinityforreddit.User.UserDao; import ml.docilealligator.infinityforreddit.User.UserDao;
import ml.docilealligator.infinityforreddit.User.UserData;
public class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> { public class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
private UserDao userDao; private UserDao userDao;
private UserData userData; private UserData userData;
private InsertUserDataCallback insertUserDataCallback; private InsertUserDataCallback insertUserDataCallback;
public interface InsertUserDataCallback {
void insertSuccess();
}
public InsertUserDataAsyncTask(UserDao userDao, UserData userData, InsertUserDataCallback insertUserDataCallback) { public InsertUserDataAsyncTask(UserDao userDao, UserData userData, InsertUserDataCallback insertUserDataCallback) {
this.userDao = userDao; this.userDao = userDao;
this.userData = userData; this.userData = userData;
@ -29,8 +25,12 @@ public class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
if(insertUserDataCallback != null) { if (insertUserDataCallback != null) {
insertUserDataCallback.insertSuccess(); insertUserDataCallback.insertSuccess();
} }
} }
public interface InsertUserDataCallback {
void insertSuccess();
}
} }

View File

@ -11,10 +11,6 @@ import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> { public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
public interface LoadSubredditIconAsyncTaskListener {
void loadIconSuccess(String iconImageUrl);
}
private RedditDataRoomDatabase redditDataRoomDatabase; private RedditDataRoomDatabase redditDataRoomDatabase;
private SubredditDao subredditDao; private SubredditDao subredditDao;
private String subredditName; private String subredditName;
@ -22,9 +18,8 @@ public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
private String iconImageUrl; private String iconImageUrl;
private boolean hasSubredditInDb; private boolean hasSubredditInDb;
private LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener; private LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener;
public LoadSubredditIconAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String subredditName, Retrofit retrofit, public LoadSubredditIconAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String subredditName, Retrofit retrofit,
LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener) { LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase; this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subredditDao = redditDataRoomDatabase.subredditDao(); this.subredditDao = redditDataRoomDatabase.subredditDao();
this.subredditName = subredditName; this.subredditName = subredditName;
@ -35,7 +30,7 @@ public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
SubredditData subredditData = subredditDao.getSubredditData(subredditName); SubredditData subredditData = subredditDao.getSubredditData(subredditName);
if(subredditData != null) { if (subredditData != null) {
iconImageUrl = subredditDao.getSubredditData(subredditName).getIconUrl(); iconImageUrl = subredditDao.getSubredditData(subredditName).getIconUrl();
hasSubredditInDb = true; hasSubredditInDb = true;
} else { } else {
@ -47,8 +42,8 @@ public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
if(!isCancelled()) { if (!isCancelled()) {
if(hasSubredditInDb) { if (hasSubredditInDb) {
loadSubredditIconAsyncTaskListener.loadIconSuccess(iconImageUrl); loadSubredditIconAsyncTaskListener.loadIconSuccess(iconImageUrl);
} else { } else {
FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() { FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@ -69,4 +64,8 @@ public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
} }
} }
} }
public interface LoadSubredditIconAsyncTaskListener {
void loadIconSuccess(String iconImageUrl);
}
} }

View File

@ -3,22 +3,17 @@ package ml.docilealligator.infinityforreddit.AsyncTask;
import android.os.AsyncTask; import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.FetchUserData; import ml.docilealligator.infinityforreddit.FetchUserData;
import ml.docilealligator.infinityforreddit.User.UserData;
import ml.docilealligator.infinityforreddit.User.UserDao; import ml.docilealligator.infinityforreddit.User.UserDao;
import ml.docilealligator.infinityforreddit.User.UserData;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class LoadUserDataAsyncTask extends AsyncTask<Void, Void, Void> { public class LoadUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
public interface LoadUserDataAsyncTaskListener {
void loadUserDataSuccess(String iconImageUrl);
}
private UserDao userDao; private UserDao userDao;
private String userName; private String userName;
private String iconImageUrl; private String iconImageUrl;
private boolean hasUserInDb; private boolean hasUserInDb;
private Retrofit retrofit; private Retrofit retrofit;
private LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener; private LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener;
public LoadUserDataAsyncTask(UserDao userDao, String userName, Retrofit retrofit, LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener) { public LoadUserDataAsyncTask(UserDao userDao, String userName, Retrofit retrofit, LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener) {
this.userDao = userDao; this.userDao = userDao;
this.userName = userName; this.userName = userName;
@ -28,7 +23,7 @@ public class LoadUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
if(userDao.getUserData(userName) != null) { if (userDao.getUserData(userName) != null) {
iconImageUrl = userDao.getUserData(userName).getIconUrl(); iconImageUrl = userDao.getUserData(userName).getIconUrl();
hasUserInDb = true; hasUserInDb = true;
} else { } else {
@ -40,7 +35,7 @@ public class LoadUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
if(hasUserInDb) { if (hasUserInDb) {
loadUserDataAsyncTaskListener.loadUserDataSuccess(iconImageUrl); loadUserDataAsyncTaskListener.loadUserDataSuccess(iconImageUrl);
} else { } else {
FetchUserData.fetchUserData(retrofit, userName, new FetchUserData.FetchUserDataListener() { FetchUserData.fetchUserData(retrofit, userName, new FetchUserData.FetchUserDataListener() {
@ -56,4 +51,8 @@ public class LoadUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
}); });
} }
} }
public interface LoadUserDataAsyncTaskListener {
void loadUserDataSuccess(String iconImageUrl);
}
} }

View File

@ -7,10 +7,6 @@ import ml.docilealligator.infinityforreddit.Account.AccountDao;
public class ParseAndInsertNewAccountAsyncTask extends AsyncTask<Void, Void, Void> { public class ParseAndInsertNewAccountAsyncTask extends AsyncTask<Void, Void, Void> {
public interface ParseAndInsertAccountListener {
void success();
}
private String username; private String username;
private String accessToken; private String accessToken;
private String refreshToken; private String refreshToken;
@ -20,10 +16,9 @@ public class ParseAndInsertNewAccountAsyncTask extends AsyncTask<Void, Void, Voi
private String code; private String code;
private AccountDao accountDao; private AccountDao accountDao;
private ParseAndInsertAccountListener parseAndInsertAccountListener; private ParseAndInsertAccountListener parseAndInsertAccountListener;
public ParseAndInsertNewAccountAsyncTask(String username, String accessToken, String refreshToken, String profileImageUrl, String bannerImageUrl, public ParseAndInsertNewAccountAsyncTask(String username, String accessToken, String refreshToken, String profileImageUrl, String bannerImageUrl,
int karma, String code, AccountDao accountDao, int karma, String code, AccountDao accountDao,
ParseAndInsertAccountListener parseAndInsertAccountListener) { ParseAndInsertAccountListener parseAndInsertAccountListener) {
this.username = username; this.username = username;
this.accessToken = accessToken; this.accessToken = accessToken;
this.refreshToken = refreshToken; this.refreshToken = refreshToken;
@ -48,4 +43,8 @@ public class ParseAndInsertNewAccountAsyncTask extends AsyncTask<Void, Void, Voi
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
parseAndInsertAccountListener.success(); parseAndInsertAccountListener.success();
} }
public interface ParseAndInsertAccountListener {
void success();
}
} }

View File

@ -6,15 +6,10 @@ import ml.docilealligator.infinityforreddit.Account.Account;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class SwitchAccountAsyncTask extends AsyncTask<Void, Void, Void> { public class SwitchAccountAsyncTask extends AsyncTask<Void, Void, Void> {
public interface SwitchAccountAsyncTaskListener {
void switched(Account account);
}
private RedditDataRoomDatabase redditDataRoomDatabase; private RedditDataRoomDatabase redditDataRoomDatabase;
private String newAccountName; private String newAccountName;
private Account account; private Account account;
private SwitchAccountAsyncTaskListener switchAccountAsyncTaskListener; private SwitchAccountAsyncTaskListener switchAccountAsyncTaskListener;
public SwitchAccountAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String newAccountName, public SwitchAccountAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String newAccountName,
SwitchAccountAsyncTaskListener switchAccountAsyncTaskListener) { SwitchAccountAsyncTaskListener switchAccountAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase; this.redditDataRoomDatabase = redditDataRoomDatabase;
@ -34,4 +29,8 @@ public class SwitchAccountAsyncTask extends AsyncTask<Void, Void, Void> {
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
switchAccountAsyncTaskListener.switched(account); switchAccountAsyncTaskListener.switched(account);
} }
public interface SwitchAccountAsyncTaskListener {
void switched(Account account);
}
} }

View File

@ -6,16 +6,11 @@ import ml.docilealligator.infinityforreddit.Account.AccountDao;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class SwitchToAnonymousAccountAsyncTask extends AsyncTask<Void, Void, Void> { public class SwitchToAnonymousAccountAsyncTask extends AsyncTask<Void, Void, Void> {
public interface SwitchToAnonymousAccountAsyncTaskListener {
void logoutSuccess();
}
private RedditDataRoomDatabase redditDataRoomDatabase; private RedditDataRoomDatabase redditDataRoomDatabase;
private boolean removeCurrentAccount; private boolean removeCurrentAccount;
private SwitchToAnonymousAccountAsyncTaskListener switchToAnonymousAccountAsyncTaskListener; private SwitchToAnonymousAccountAsyncTaskListener switchToAnonymousAccountAsyncTaskListener;
public SwitchToAnonymousAccountAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, boolean removeCurrentAccount, public SwitchToAnonymousAccountAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, boolean removeCurrentAccount,
SwitchToAnonymousAccountAsyncTaskListener switchToAnonymousAccountAsyncTaskListener) { SwitchToAnonymousAccountAsyncTaskListener switchToAnonymousAccountAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase; this.redditDataRoomDatabase = redditDataRoomDatabase;
this.removeCurrentAccount = removeCurrentAccount; this.removeCurrentAccount = removeCurrentAccount;
this.switchToAnonymousAccountAsyncTaskListener = switchToAnonymousAccountAsyncTaskListener; this.switchToAnonymousAccountAsyncTaskListener = switchToAnonymousAccountAsyncTaskListener;
@ -24,7 +19,7 @@ public class SwitchToAnonymousAccountAsyncTask extends AsyncTask<Void, Void, Voi
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
AccountDao accountDao = redditDataRoomDatabase.accountDao(); AccountDao accountDao = redditDataRoomDatabase.accountDao();
if(removeCurrentAccount) { if (removeCurrentAccount) {
accountDao.deleteCurrentAccount(); accountDao.deleteCurrentAccount();
} }
accountDao.markAllAccountsNonCurrent(); accountDao.markAllAccountsNonCurrent();
@ -35,4 +30,8 @@ public class SwitchToAnonymousAccountAsyncTask extends AsyncTask<Void, Void, Voi
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
switchToAnonymousAccountAsyncTaskListener.logoutSuccess(); switchToAnonymousAccountAsyncTaskListener.logoutSuccess();
} }
public interface SwitchToAnonymousAccountAsyncTaskListener {
void logoutSuccess();
}
} }

View File

@ -9,7 +9,17 @@ public class CommentData implements Parcelable {
public static final int VOTE_TYPE_NO_VOTE = 0; public static final int VOTE_TYPE_NO_VOTE = 0;
public static final int VOTE_TYPE_UPVOTE = 1; public static final int VOTE_TYPE_UPVOTE = 1;
public static final int VOTE_TYPE_DOWNVOTE = -1; public static final int VOTE_TYPE_DOWNVOTE = -1;
public static final Creator<CommentData> CREATOR = new Creator<CommentData>() {
@Override
public CommentData createFromParcel(Parcel in) {
return new CommentData(in);
}
@Override
public CommentData[] newArray(int size) {
return new CommentData[size];
}
};
private String id; private String id;
private String fullName; private String fullName;
private String author; private String author;
@ -33,15 +43,14 @@ public class CommentData implements Parcelable {
private ArrayList<CommentData> children; private ArrayList<CommentData> children;
private ArrayList<String> moreChildrenFullnames; private ArrayList<String> moreChildrenFullnames;
private int moreChildrenStartingIndex; private int moreChildrenStartingIndex;
private boolean isPlaceHolder; private boolean isPlaceHolder;
private boolean isLoadingMoreChildren; private boolean isLoadingMoreChildren;
private boolean loadMoreChildrenFailed; private boolean loadMoreChildrenFailed;
public CommentData(String id, String fullName, String author, String linkAuthor, String commentTime, public CommentData(String id, String fullName, String author, String linkAuthor, String commentTime,
String commentContent, String linkId, String subredditName, String parentId, int score, String commentContent, String linkId, String subredditName, String parentId, int score,
int voteType, boolean isSubmitter, String distinguished, String permalink, int voteType, boolean isSubmitter, String distinguished, String permalink,
int depth, boolean collapsed, boolean hasReply, boolean scoreHidden, boolean saved) { int depth, boolean collapsed, boolean hasReply, boolean scoreHidden, boolean saved) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.author = author; this.author = author;
@ -102,18 +111,6 @@ public class CommentData implements Parcelable {
loadMoreChildrenFailed = in.readByte() != 0; loadMoreChildrenFailed = in.readByte() != 0;
} }
public static final Creator<CommentData> CREATOR = new Creator<CommentData>() {
@Override
public CommentData createFromParcel(Parcel in) {
return new CommentData(in);
}
@Override
public CommentData[] newArray(int size) {
return new CommentData[size];
}
};
public String getId() { public String getId() {
return id; return id;
} }
@ -235,10 +232,10 @@ public class CommentData implements Parcelable {
} }
public void addChildren(ArrayList<CommentData> moreChildren) { public void addChildren(ArrayList<CommentData> moreChildren) {
if(children == null || children.size() == 0) { if (children == null || children.size() == 0) {
setChildren(moreChildren); setChildren(moreChildren);
} else { } else {
if(children.get(children.size() - 1).isPlaceHolder) { if (children.get(children.size() - 1).isPlaceHolder) {
children.addAll(children.size() - 2, moreChildren); children.addAll(children.size() - 2, moreChildren);
} else { } else {
children.addAll(moreChildren); children.addAll(moreChildren);
@ -251,7 +248,7 @@ public class CommentData implements Parcelable {
} }
public void addChild(CommentData comment, int position) { public void addChild(CommentData comment, int position) {
if(children == null) { if (children == null) {
children = new ArrayList<>(); children = new ArrayList<>();
} }
children.add(position, comment); children.add(position, comment);

View File

@ -71,11 +71,11 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> commentsCall; Call<String> commentsCall;
if(areSavedComments) { if (areSavedComments) {
commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED,
null, sortType, RedditUtils.getOAuthHeader(accessToken)); null, sortType, RedditUtils.getOAuthHeader(accessToken));
} else { } else {
if(accessToken == null) { if (accessToken == null) {
commentsCall = api.getUserComments(username, null, sortType); commentsCall = api.getUserComments(username, null, sortType);
} else { } else {
commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), username, commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), username,
@ -85,17 +85,17 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
commentsCall.enqueue(new Callback<String>() { commentsCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() { new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() {
@Override @Override
public void parseSuccessful(ArrayList<CommentData> comments, String after) { public void parseSuccessful(ArrayList<CommentData> comments, String after) {
if(comments.size() == 0) { if (comments.size() == 0) {
hasPostLiveData.postValue(false); hasPostLiveData.postValue(false);
} else { } else {
hasPostLiveData.postValue(true); hasPostLiveData.postValue(true);
} }
if(after == null || after.equals("") || after.equals("null")) { if (after == null || after.equals("") || after.equals("null")) {
callback.onResult(comments, null, null); callback.onResult(comments, null, null);
} else { } else {
callback.onResult(comments, null, after); callback.onResult(comments, null, after);
@ -134,11 +134,11 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> commentsCall; Call<String> commentsCall;
if(areSavedComments) { if (areSavedComments) {
commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, params.key, commentsCall = api.getUserSavedCommentsOauth(username, PostDataSource.USER_WHERE_SAVED, params.key,
sortType, RedditUtils.getOAuthHeader(accessToken)); sortType, RedditUtils.getOAuthHeader(accessToken));
} else { } else {
if(accessToken == null) { if (accessToken == null) {
commentsCall = api.getUserComments(username, params.key, sortType); commentsCall = api.getUserComments(username, params.key, sortType);
} else { } else {
commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken), commentsCall = api.getUserCommentsOauth(RedditUtils.getOAuthHeader(accessToken),
@ -148,11 +148,11 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
commentsCall.enqueue(new Callback<String>() { commentsCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() { new ParseCommentAsyncTask(response.body(), locale, new ParseCommentAsyncTask.ParseCommentAsyncTaskListener() {
@Override @Override
public void parseSuccessful(ArrayList<CommentData> comments, String after) { public void parseSuccessful(ArrayList<CommentData> comments, String after) {
if(after == null || after.equals("") || after.equals("null")) { if (after == null || after.equals("") || after.equals("null")) {
callback.onResult(comments, null); callback.onResult(comments, null);
} else { } else {
callback.onResult(comments, after); callback.onResult(comments, after);
@ -184,11 +184,6 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
private boolean parseFailed; private boolean parseFailed;
private ParseCommentAsyncTaskListener parseCommentAsyncTaskListener; private ParseCommentAsyncTaskListener parseCommentAsyncTaskListener;
interface ParseCommentAsyncTaskListener {
void parseSuccessful(ArrayList<CommentData> comments, String after);
void parseFailed();
}
ParseCommentAsyncTask(String response, Locale locale, ParseCommentAsyncTaskListener parseCommentAsyncTaskListener) { ParseCommentAsyncTask(String response, Locale locale, ParseCommentAsyncTaskListener parseCommentAsyncTaskListener) {
this.locale = locale; this.locale = locale;
this.parseCommentAsyncTaskListener = parseCommentAsyncTaskListener; this.parseCommentAsyncTaskListener = parseCommentAsyncTaskListener;
@ -205,16 +200,17 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
@Override @Override
protected ArrayList<CommentData> doInBackground(Void... voids) { protected ArrayList<CommentData> doInBackground(Void... voids) {
if(parseFailed) { if (parseFailed) {
return null; return null;
} }
ArrayList<CommentData> comments = new ArrayList<>(); ArrayList<CommentData> comments = new ArrayList<>();
for(int i = 0; i < commentsJSONArray.length(); i++) { for (int i = 0; i < commentsJSONArray.length(); i++) {
try { try {
JSONObject commentJSON = commentsJSONArray.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); JSONObject commentJSON = commentsJSONArray.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
comments.add(ParseComment.parseSingleComment(commentJSON, 0, locale)); comments.add(ParseComment.parseSingleComment(commentJSON, 0, locale));
} catch (JSONException ignored) {} } catch (JSONException ignored) {
}
} }
return comments; return comments;
} }
@ -222,11 +218,17 @@ public class CommentDataSource extends PageKeyedDataSource<String, CommentData>
@Override @Override
protected void onPostExecute(ArrayList<CommentData> commentData) { protected void onPostExecute(ArrayList<CommentData> commentData) {
super.onPostExecute(commentData); super.onPostExecute(commentData);
if(commentData != null) { if (commentData != null) {
parseCommentAsyncTaskListener.parseSuccessful(commentData, after); parseCommentAsyncTaskListener.parseSuccessful(commentData, after);
} else { } else {
parseCommentAsyncTaskListener.parseFailed(); parseCommentAsyncTaskListener.parseFailed();
} }
} }
interface ParseCommentAsyncTaskListener {
void parseSuccessful(ArrayList<CommentData> comments, String after);
void parseFailed();
}
} }
} }

View File

@ -10,6 +10,11 @@ public enum ContentFontStyle {
private int resId; private int resId;
private String title; private String title;
ContentFontStyle(int resId, String title) {
this.resId = resId;
this.title = title;
}
public int getResId() { public int getResId() {
return resId; return resId;
} }
@ -17,9 +22,4 @@ public enum ContentFontStyle {
public String getTitle() { public String getTitle() {
return title; return title;
} }
ContentFontStyle(int resId, String title) {
this.resId = resId;
this.title = title;
}
} }

View File

@ -9,6 +9,17 @@ import pl.droidsonroids.gif.GifImageView;
public class AspectRatioGifImageView extends GifImageView { public class AspectRatioGifImageView extends GifImageView {
private float ratio; private float ratio;
public AspectRatioGifImageView(Context context) {
super(context);
this.ratio = 1.0F;
}
public AspectRatioGifImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.ratio = 1.0F;
this.init(context, attrs);
}
public final float getRatio() { public final float getRatio() {
return this.ratio; return this.ratio;
} }
@ -32,23 +43,12 @@ public class AspectRatioGifImageView extends GifImageView {
int height = this.getMeasuredHeight(); int height = this.getMeasuredHeight();
if (width != 0 || height != 0) { if (width != 0 || height != 0) {
if (width > 0) { if (width > 0) {
height = (int)((float)width * this.ratio); height = (int) ((float) width * this.ratio);
} else { } else {
width = (int)((float)height / this.ratio); width = (int) ((float) height / this.ratio);
} }
this.setMeasuredDimension(width, height); this.setMeasuredDimension(width, height);
} }
} }
public AspectRatioGifImageView(Context context) {
super(context);
this.ratio = 1.0F;
}
public AspectRatioGifImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.ratio = 1.0F;
this.init(context, attrs);
}
} }

View File

@ -11,18 +11,13 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class DeleteThing { public class DeleteThing {
public interface DeleteThingListener {
void deleteSuccess();
void deleteFailed();
}
public static void delete(Retrofit oauthRetrofit, String fullname, String accessToken, DeleteThingListener deleteThingListener) { public static void delete(Retrofit oauthRetrofit, String fullname, String accessToken, DeleteThingListener deleteThingListener) {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put(RedditUtils.ID_KEY, fullname); params.put(RedditUtils.ID_KEY, fullname);
oauthRetrofit.create(RedditAPI.class).delete(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() { oauthRetrofit.create(RedditAPI.class).delete(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
deleteThingListener.deleteSuccess(); deleteThingListener.deleteSuccess();
} else { } else {
deleteThingListener.deleteFailed(); deleteThingListener.deleteFailed();
@ -35,4 +30,10 @@ public class DeleteThing {
} }
}); });
} }
public interface DeleteThingListener {
void deleteSuccess();
void deleteFailed();
}
} }

View File

@ -1,3 +1,4 @@
package ml.docilealligator.infinityforreddit.Event; package ml.docilealligator.infinityforreddit.Event;
public class ChangeFontSizeEvent { } public class ChangeFontSizeEvent {
}

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.Event;
public class ChangeNSFWBlurEvent { public class ChangeNSFWBlurEvent {
public boolean needBlurNSFW; public boolean needBlurNSFW;
public ChangeNSFWBlurEvent(boolean needBlurNSFW) { public ChangeNSFWBlurEvent(boolean needBlurNSFW) {
this.needBlurNSFW = needBlurNSFW; this.needBlurNSFW = needBlurNSFW;
} }

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.Event;
public class ChangeNSFWEvent { public class ChangeNSFWEvent {
public boolean nsfw; public boolean nsfw;
public ChangeNSFWEvent(boolean nsfw) { public ChangeNSFWEvent(boolean nsfw) {
this.nsfw = nsfw; this.nsfw = nsfw;
} }

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.Event;
public class ChangeSpoilerBlurEvent { public class ChangeSpoilerBlurEvent {
public boolean needBlurSpoiler; public boolean needBlurSpoiler;
public ChangeSpoilerBlurEvent(boolean needBlurSpoiler) { public ChangeSpoilerBlurEvent(boolean needBlurSpoiler) {
this.needBlurSpoiler = needBlurSpoiler; this.needBlurSpoiler = needBlurSpoiler;
} }

View File

@ -2,7 +2,10 @@ package ml.docilealligator.infinityforreddit.Event;
public class SwitchAccountEvent { public class SwitchAccountEvent {
public String excludeActivityClassName; public String excludeActivityClassName;
public SwitchAccountEvent() {}
public SwitchAccountEvent() {
}
public SwitchAccountEvent(String excludeActivityClassName) { public SwitchAccountEvent(String excludeActivityClassName) {
this.excludeActivityClassName = excludeActivityClassName; this.excludeActivityClassName = excludeActivityClassName;
} }

View File

@ -12,28 +12,18 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchComment { public class FetchComment {
public interface FetchCommentListener {
void onFetchCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> children);
void onFetchCommentFailed();
}
public interface FetchMoreCommentListener {
void onFetchMoreCommentSuccess(ArrayList<CommentData> expandedComments, int childrenStartingIndex);
void onFetchMoreCommentFailed();
}
public static void fetchComments(Retrofit retrofit, @Nullable String accessToken, String article, String commentId, public static void fetchComments(Retrofit retrofit, @Nullable String accessToken, String article, String commentId,
Locale locale, FetchCommentListener fetchCommentListener) { Locale locale, FetchCommentListener fetchCommentListener) {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> comments; Call<String> comments;
if(accessToken == null) { if (accessToken == null) {
if(commentId == null) { if (commentId == null) {
comments = api.getPostAndCommentsById(article); comments = api.getPostAndCommentsById(article);
} else { } else {
comments = api.getPostAndCommentsSingleThreadById(article, commentId); comments = api.getPostAndCommentsSingleThreadById(article, commentId);
} }
} else { } else {
if(commentId == null) { if (commentId == null) {
comments = api.getPostAndCommentsByIdOauth(article, RedditUtils.getOAuthHeader(accessToken)); comments = api.getPostAndCommentsByIdOauth(article, RedditUtils.getOAuthHeader(accessToken));
} else { } else {
comments = api.getPostAndCommentsSingleThreadByIdOauth(article, commentId, RedditUtils.getOAuthHeader(accessToken)); comments = api.getPostAndCommentsSingleThreadByIdOauth(article, commentId, RedditUtils.getOAuthHeader(accessToken));
@ -43,7 +33,7 @@ public class FetchComment {
comments.enqueue(new Callback<String>() { comments.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseComment.parseComment(response.body(), new ArrayList<>(), ParseComment.parseComment(response.body(), new ArrayList<>(),
locale, new ParseComment.ParseCommentListener() { locale, new ParseComment.ParseCommentListener() {
@Override @Override
@ -74,14 +64,14 @@ public class FetchComment {
ArrayList<String> allChildren, int startingIndex, ArrayList<String> allChildren, int startingIndex,
int depth, Locale locale, FetchMoreCommentListener fetchMoreCommentListener) { int depth, Locale locale, FetchMoreCommentListener fetchMoreCommentListener) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
if(allChildren.size() <= startingIndex + i) { if (allChildren.size() <= startingIndex + i) {
break; break;
} }
stringBuilder.append(allChildren.get(startingIndex + i)).append(","); stringBuilder.append(allChildren.get(startingIndex + i)).append(",");
} }
if(stringBuilder.length() == 0) { if (stringBuilder.length() == 0) {
return; return;
} }
@ -89,7 +79,7 @@ public class FetchComment {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> moreComments; Call<String> moreComments;
if(accessToken == null) { if (accessToken == null) {
moreComments = api.getInfo(stringBuilder.toString()); moreComments = api.getInfo(stringBuilder.toString());
} else { } else {
moreComments = api.getInfoOauth(stringBuilder.toString(), RedditUtils.getOAuthHeader(accessToken)); moreComments = api.getInfoOauth(stringBuilder.toString(), RedditUtils.getOAuthHeader(accessToken));
@ -98,7 +88,7 @@ public class FetchComment {
moreComments.enqueue(new Callback<String>() { moreComments.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseComment.parseMoreComment(response.body(), new ArrayList<>(), locale, ParseComment.parseMoreComment(response.body(), new ArrayList<>(), locale,
depth, new ParseComment.ParseCommentListener() { depth, new ParseComment.ParseCommentListener() {
@Override @Override
@ -124,4 +114,16 @@ public class FetchComment {
} }
}); });
} }
public interface FetchCommentListener {
void onFetchCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> children);
void onFetchCommentFailed();
}
public interface FetchMoreCommentListener {
void onFetchMoreCommentSuccess(ArrayList<CommentData> expandedComments, int childrenStartingIndex);
void onFetchMoreCommentFailed();
}
} }

View File

@ -15,11 +15,6 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchFlairs { public class FetchFlairs {
public interface FetchFlairsInSubredditListener {
void fetchSuccessful(ArrayList<Flair> flairs);
void fetchFailed();
}
public static void fetchFlairsInSubreddit(Retrofit oauthRetrofit, String accessToken, String subredditName, FetchFlairsInSubredditListener fetchFlairsInSubredditListener) { public static void fetchFlairsInSubreddit(Retrofit oauthRetrofit, String accessToken, String subredditName, FetchFlairsInSubredditListener fetchFlairsInSubredditListener) {
RedditAPI api = oauthRetrofit.create(RedditAPI.class); RedditAPI api = oauthRetrofit.create(RedditAPI.class);
@ -39,7 +34,7 @@ public class FetchFlairs {
fetchFlairsInSubredditListener.fetchFailed(); fetchFlairsInSubredditListener.fetchFailed();
} }
}).execute(); }).execute();
} else if(response.code() == 403) { } else if (response.code() == 403) {
//No flairs //No flairs
fetchFlairsInSubredditListener.fetchSuccessful(null); fetchFlairsInSubredditListener.fetchSuccessful(null);
} else { } else {
@ -54,15 +49,15 @@ public class FetchFlairs {
}); });
} }
private static class ParseFlairsAsyncTask extends AsyncTask<Void, ArrayList<Flair>, ArrayList<Flair>> { public interface FetchFlairsInSubredditListener {
interface ParseFlairsAsyncTaskListener { void fetchSuccessful(ArrayList<Flair> flairs);
void parseSuccessful(ArrayList<Flair> flairs);
void parseFailed();
}
void fetchFailed();
}
private static class ParseFlairsAsyncTask extends AsyncTask<Void, ArrayList<Flair>, ArrayList<Flair>> {
private String response; private String response;
private ParseFlairsAsyncTaskListener parseFlairsAsyncTaskListener; private ParseFlairsAsyncTaskListener parseFlairsAsyncTaskListener;
ParseFlairsAsyncTask(String response, ParseFlairsAsyncTaskListener parseFlairsAsyncTaskListener) { ParseFlairsAsyncTask(String response, ParseFlairsAsyncTaskListener parseFlairsAsyncTaskListener) {
this.response = response; this.response = response;
this.parseFlairsAsyncTaskListener = parseFlairsAsyncTaskListener; this.parseFlairsAsyncTaskListener = parseFlairsAsyncTaskListener;
@ -73,7 +68,7 @@ public class FetchFlairs {
try { try {
JSONArray jsonArray = new JSONArray(response); JSONArray jsonArray = new JSONArray(response);
ArrayList<Flair> flairs = new ArrayList<>(); ArrayList<Flair> flairs = new ArrayList<>();
for(int i = 0; i < jsonArray.length(); i++) { for (int i = 0; i < jsonArray.length(); i++) {
String id = jsonArray.getJSONObject(i).getString(JSONUtils.ID_KEY); String id = jsonArray.getJSONObject(i).getString(JSONUtils.ID_KEY);
String text = jsonArray.getJSONObject(i).getString(JSONUtils.TEXT_KEY); String text = jsonArray.getJSONObject(i).getString(JSONUtils.TEXT_KEY);
boolean editable = jsonArray.getJSONObject(i).getBoolean(JSONUtils.TEXT_EDITABLE_KEY); boolean editable = jsonArray.getJSONObject(i).getBoolean(JSONUtils.TEXT_EDITABLE_KEY);
@ -89,11 +84,17 @@ public class FetchFlairs {
@Override @Override
protected void onPostExecute(ArrayList<Flair> strings) { protected void onPostExecute(ArrayList<Flair> strings) {
if(strings != null) { if (strings != null) {
parseFlairsAsyncTaskListener.parseSuccessful(strings); parseFlairsAsyncTaskListener.parseSuccessful(strings);
} else { } else {
parseFlairsAsyncTaskListener.parseFailed(); parseFlairsAsyncTaskListener.parseFailed();
} }
} }
interface ParseFlairsAsyncTaskListener {
void parseSuccessful(ArrayList<Flair> flairs);
void parseFailed();
}
} }
} }

View File

@ -21,11 +21,6 @@ import retrofit2.Retrofit;
public class FetchMessages { public class FetchMessages {
interface FetchMessagesListener {
void fetchSuccess(ArrayList<Message> messages, @Nullable String after);
void fetchFailed();
}
public static final String WHERE_INBOX = "inbox"; public static final String WHERE_INBOX = "inbox";
public static final String WHERE_UNREAD = "unread"; public static final String WHERE_UNREAD = "unread";
public static final String WHERE_SENT = "sent"; public static final String WHERE_SENT = "sent";
@ -37,7 +32,7 @@ public class FetchMessages {
.enqueue(new Callback<String>() { .enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
new ParseMessageAsnycTask(response.body(), locale, fetchMessagesListener::fetchSuccess).execute(); new ParseMessageAsnycTask(response.body(), locale, fetchMessagesListener::fetchSuccess).execute();
} else { } else {
fetchMessagesListener.fetchFailed(); fetchMessagesListener.fetchFailed();
@ -62,7 +57,7 @@ public class FetchMessages {
} }
ArrayList<Message> messages = new ArrayList<>(); ArrayList<Message> messages = new ArrayList<>();
for(int i = 0; i < messageArray.length(); i++) { for (int i = 0; i < messageArray.length(); i++) {
try { try {
JSONObject messageJSON = messageArray.getJSONObject(i); JSONObject messageJSON = messageArray.getJSONObject(i);
String kind = messageJSON.getString(JSONUtils.KIND_KEY); String kind = messageJSON.getString(JSONUtils.KIND_KEY);
@ -100,18 +95,19 @@ public class FetchMessages {
return messages; return messages;
} }
private static class ParseMessageAsnycTask extends AsyncTask<Void, Void, Void> { interface FetchMessagesListener {
void fetchSuccess(ArrayList<Message> messages, @Nullable String after);
interface ParseMessageAsyncTaskListener { void fetchFailed();
void parseSuccess(ArrayList<Message> messages, @Nullable String after); }
}
private static class ParseMessageAsnycTask extends AsyncTask<Void, Void, Void> {
private String response; private String response;
private Locale locale; private Locale locale;
private ArrayList<Message> messages; private ArrayList<Message> messages;
private String after; private String after;
private ParseMessageAsyncTaskListener parseMessageAsyncTaskListener; private ParseMessageAsyncTaskListener parseMessageAsyncTaskListener;
ParseMessageAsnycTask(String response, Locale locale, ParseMessageAsyncTaskListener parseMessageAsnycTaskListener) { ParseMessageAsnycTask(String response, Locale locale, ParseMessageAsyncTaskListener parseMessageAsnycTaskListener) {
this.response = response; this.response = response;
this.locale = locale; this.locale = locale;
@ -135,5 +131,9 @@ public class FetchMessages {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
parseMessageAsyncTaskListener.parseSuccess(messages, after); parseMessageAsyncTaskListener.parseSuccess(messages, after);
} }
interface ParseMessageAsyncTaskListener {
void parseSuccess(ArrayList<Message> messages, @Nullable String after);
}
} }
} }

View File

@ -1,7 +1,5 @@
package ml.docilealligator.infinityforreddit; package ml.docilealligator.infinityforreddit;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import retrofit2.Call; import retrofit2.Call;
@ -10,11 +8,6 @@ import retrofit2.Retrofit;
public class FetchMyInfo { public class FetchMyInfo {
public interface FetchUserMyListener {
void onFetchMyInfoSuccess(String response);
void onFetchMyInfoFail();
}
public static void fetchAccountInfo(final Retrofit retrofit, String accessToken, public static void fetchAccountInfo(final Retrofit retrofit, String accessToken,
final FetchUserMyListener fetchUserMyListener) { final FetchUserMyListener fetchUserMyListener) {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
@ -23,7 +16,7 @@ public class FetchMyInfo {
userInfo.enqueue(new Callback<String>() { userInfo.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
fetchUserMyListener.onFetchMyInfoSuccess(response.body()); fetchUserMyListener.onFetchMyInfoSuccess(response.body());
} else { } else {
fetchUserMyListener.onFetchMyInfoFail(); fetchUserMyListener.onFetchMyInfoFail();
@ -36,4 +29,10 @@ public class FetchMyInfo {
} }
}); });
} }
public interface FetchUserMyListener {
void onFetchMyInfoSuccess(String response);
void onFetchMyInfoFail();
}
} }

View File

@ -10,14 +10,9 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchPost { public class FetchPost {
public interface FetchPostListener {
void fetchPostSuccess(Post post);
void fetchPostFailed();
}
public static void fetchPost(Retrofit retrofit, String id, String accessToken, Locale locale, FetchPostListener fetchPostListener) { public static void fetchPost(Retrofit retrofit, String id, String accessToken, Locale locale, FetchPostListener fetchPostListener) {
Call<String> postCall; Call<String> postCall;
if(accessToken == null) { if (accessToken == null) {
postCall = retrofit.create(RedditAPI.class).getPost(id); postCall = retrofit.create(RedditAPI.class).getPost(id);
} else { } else {
postCall = retrofit.create(RedditAPI.class).getPostOauth(id, RedditUtils.getOAuthHeader(accessToken)); postCall = retrofit.create(RedditAPI.class).getPostOauth(id, RedditUtils.getOAuthHeader(accessToken));
@ -25,7 +20,7 @@ public class FetchPost {
postCall.enqueue(new Callback<String>() { postCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() { ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() {
@Override @Override
public void onParsePostSuccess(Post post) { public void onParsePostSuccess(Post post) {
@ -48,4 +43,10 @@ public class FetchPost {
} }
}); });
} }
public interface FetchPostListener {
void fetchPostSuccess(Post post);
void fetchPostFailed();
}
} }

View File

@ -11,16 +11,6 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchSubredditData { public class FetchSubredditData {
public interface FetchSubredditDataListener {
void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
void onFetchSubredditDataFail();
}
interface FetchSubredditListingDataListener {
void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after);
void onFetchSubredditListingDataFail();
}
public static void fetchSubredditData(Retrofit retrofit, String subredditName, final FetchSubredditDataListener fetchSubredditDataListener) { public static void fetchSubredditData(Retrofit retrofit, String subredditName, final FetchSubredditDataListener fetchSubredditDataListener) {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
@ -28,7 +18,7 @@ public class FetchSubredditData {
subredditData.enqueue(new Callback<String>() { subredditData.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseSubredditData.parseSubredditData(response.body(), new ParseSubredditData.ParseSubredditDataListener() { ParseSubredditData.parseSubredditData(response.body(), new ParseSubredditData.ParseSubredditDataListener() {
@Override @Override
public void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) { public void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
@ -60,7 +50,7 @@ public class FetchSubredditData {
subredditDataCall.enqueue(new Callback<String>() { subredditDataCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseSubredditData.parseSubredditListingData(response.body(), new ParseSubredditData.ParseSubredditListingDataListener() { ParseSubredditData.parseSubredditListingData(response.body(), new ParseSubredditData.ParseSubredditListingDataListener() {
@Override @Override
public void onParseSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) { public void onParseSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after) {
@ -83,4 +73,16 @@ public class FetchSubredditData {
} }
}); });
} }
public interface FetchSubredditDataListener {
void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
void onFetchSubredditDataFail();
}
interface FetchSubredditListingDataListener {
void onFetchSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after);
void onFetchSubredditListingDataFail();
}
} }

View File

@ -13,13 +13,6 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchSubscribedThing { public class FetchSubscribedThing {
public interface FetchSubscribedThingListener {
void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData);
void onFetchSubscribedThingFail();
}
public static void fetchSubscribedThing(final Retrofit retrofit, String accessToken, String accountName, public static void fetchSubscribedThing(final Retrofit retrofit, String accessToken, String accountName,
final String lastItem, final ArrayList<SubscribedSubredditData> subscribedSubredditData, final String lastItem, final ArrayList<SubscribedSubredditData> subscribedSubredditData,
final ArrayList<SubscribedUserData> subscribedUserData, final ArrayList<SubscribedUserData> subscribedUserData,
@ -31,7 +24,7 @@ public class FetchSubscribedThing {
subredditDataCall.enqueue(new Callback<String>() { subredditDataCall.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseSubscribedThing.parseSubscribedSubreddits(response.body(), accountName, ParseSubscribedThing.parseSubscribedSubreddits(response.body(), accountName,
subscribedSubredditData, subscribedUserData, subredditData, subscribedSubredditData, subscribedUserData, subredditData,
new ParseSubscribedThing.ParseSubscribedSubredditsListener() { new ParseSubscribedThing.ParseSubscribedSubredditsListener() {
@ -41,7 +34,7 @@ public class FetchSubscribedThing {
ArrayList<SubscribedUserData> subscribedUserData, ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData, ArrayList<SubredditData> subredditData,
String lastItem) { String lastItem) {
if(lastItem.equals("null")) { if (lastItem.equals("null")) {
fetchSubscribedThingListener.onFetchSubscribedThingSuccess( fetchSubscribedThingListener.onFetchSubscribedThingSuccess(
subscribedSubredditData, subscribedUserData, subredditData); subscribedSubredditData, subscribedUserData, subredditData);
} else { } else {
@ -67,4 +60,12 @@ public class FetchSubscribedThing {
} }
}); });
} }
public interface FetchSubscribedThingListener {
void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData);
void onFetchSubscribedThingFail();
}
} }

View File

@ -10,16 +10,6 @@ import retrofit2.Callback;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchUserData { public class FetchUserData {
public interface FetchUserDataListener {
void onFetchUserDataSuccess(UserData userData);
void onFetchUserDataFailed();
}
public interface FetchUserListingDataListener {
void onFetchUserListingDataSuccess(ArrayList<UserData> userData, String after);
void onFetchUserListingDataFailed();
}
public static void fetchUserData(Retrofit retrofit, String userName, FetchUserDataListener fetchUserDataListener) { public static void fetchUserData(Retrofit retrofit, String userName, FetchUserDataListener fetchUserDataListener) {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
@ -27,7 +17,7 @@ public class FetchUserData {
userInfo.enqueue(new Callback<String>() { userInfo.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseUserData.parseUserData(response.body(), new ParseUserData.ParseUserDataListener() { ParseUserData.parseUserData(response.body(), new ParseUserData.ParseUserDataListener() {
@Override @Override
public void onParseUserDataSuccess(UserData userData) { public void onParseUserDataSuccess(UserData userData) {
@ -59,7 +49,7 @@ public class FetchUserData {
userInfo.enqueue(new Callback<String>() { userInfo.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParseUserData.parseUserListingData(response.body(), new ParseUserData.ParseUserListingDataListener() { ParseUserData.parseUserListingData(response.body(), new ParseUserData.ParseUserListingDataListener() {
@Override @Override
public void onParseUserListingDataSuccess(ArrayList<UserData> userData, String after) { public void onParseUserListingDataSuccess(ArrayList<UserData> userData, String after) {
@ -82,4 +72,16 @@ public class FetchUserData {
} }
}); });
} }
public interface FetchUserDataListener {
void onFetchUserDataSuccess(UserData userData);
void onFetchUserDataFailed();
}
public interface FetchUserListingDataListener {
void onFetchUserListingDataSuccess(ArrayList<UserData> userData, String after);
void onFetchUserListingDataFailed();
}
} }

View File

@ -4,6 +4,17 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
public class Flair implements Parcelable { public class Flair implements Parcelable {
public static final Creator<Flair> CREATOR = new Creator<Flair>() {
@Override
public Flair createFromParcel(Parcel in) {
return new Flair(in);
}
@Override
public Flair[] newArray(int size) {
return new Flair[size];
}
};
private String id; private String id;
private String text; private String text;
private boolean editable; private boolean editable;
@ -20,18 +31,6 @@ public class Flair implements Parcelable {
editable = in.readByte() != 0; editable = in.readByte() != 0;
} }
public static final Creator<Flair> CREATOR = new Creator<Flair>() {
@Override
public Flair createFromParcel(Parcel in) {
return new Flair(in);
}
@Override
public Flair[] newArray(int size) {
return new Flair[size];
}
};
public String getId() { public String getId() {
return id; return id;
} }

View File

@ -9,6 +9,11 @@ public enum FontStyle {
private int resId; private int resId;
private String title; private String title;
FontStyle(int resId, String title) {
this.resId = resId;
this.title = title;
}
public int getResId() { public int getResId() {
return resId; return resId;
} }
@ -16,9 +21,4 @@ public enum FontStyle {
public String getTitle() { public String getTitle() {
return title; return title;
} }
FontStyle(int resId, String title) {
this.resId = resId;
this.title = title;
}
} }

View File

@ -55,33 +55,32 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
private static final String NULL_ACCESS_TOKEN_STATE = "NATS"; private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
@BindView(R.id.coordinator_layout_comments_listing_fragment) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.coordinator_layout_comments_listing_fragment)
@BindView(R.id.recycler_view_comments_listing_fragment) RecyclerView mCommentRecyclerView; CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.progress_bar_comments_listing_fragment) CircleProgressBar mProgressBar; @BindView(R.id.recycler_view_comments_listing_fragment)
@BindView(R.id.fetch_comments_info_linear_layout_comments_listing_fragment) LinearLayout mFetchCommentInfoLinearLayout; RecyclerView mCommentRecyclerView;
@BindView(R.id.fetch_comments_info_image_view_comments_listing_fragment) ImageView mFetchCommentInfoImageView; @BindView(R.id.progress_bar_comments_listing_fragment)
@BindView(R.id.fetch_comments_info_text_view_comments_listing_fragment) TextView mFetchCommentInfoTextView; CircleProgressBar mProgressBar;
@BindView(R.id.fetch_comments_info_linear_layout_comments_listing_fragment)
private boolean mNullAccessToken = false; LinearLayout mFetchCommentInfoLinearLayout;
private String mAccessToken; @BindView(R.id.fetch_comments_info_image_view_comments_listing_fragment)
ImageView mFetchCommentInfoImageView;
private RequestManager mGlide; @BindView(R.id.fetch_comments_info_text_view_comments_listing_fragment)
TextView mFetchCommentInfoTextView;
private Activity activity;
private CommentsListingRecyclerViewAdapter mAdapter;
CommentViewModel mCommentViewModel; CommentViewModel mCommentViewModel;
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject
@Inject @Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
RedditDataRoomDatabase mRedditDataRoomDatabase; RedditDataRoomDatabase mRedditDataRoomDatabase;
private boolean mNullAccessToken = false;
private String mAccessToken;
private RequestManager mGlide;
private Activity activity;
private CommentsListingRecyclerViewAdapter mAdapter;
public CommentsListingFragment() { public CommentsListingFragment() {
// Required empty public constructor // Required empty public constructor
@ -128,7 +127,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
private void getCurrentAccountAndBindView(Resources resources) { private void getCurrentAccountAndBindView(Resources resources) {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if(account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
@ -150,7 +149,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
CommentViewModel.Factory factory; CommentViewModel.Factory factory;
if(mAccessToken == null) { if (mAccessToken == null) {
factory = new CommentViewModel.Factory(mRetrofit, factory = new CommentViewModel.Factory(mRetrofit,
resources.getConfiguration().locale, mAccessToken, username, PostDataSource.SORT_TYPE_NEW, resources.getConfiguration().locale, mAccessToken, username, PostDataSource.SORT_TYPE_NEW,
getArguments().getBoolean(EXTRA_ARE_SAVED_COMMENTS)); getArguments().getBoolean(EXTRA_ARE_SAVED_COMMENTS));
@ -165,7 +164,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
mCommentViewModel.hasComment().observe(this, hasComment -> { mCommentViewModel.hasComment().observe(this, hasComment -> {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(hasComment) { if (hasComment) {
mFetchCommentInfoLinearLayout.setVisibility(View.GONE); mFetchCommentInfoLinearLayout.setVisibility(View.GONE);
} else { } else {
mFetchCommentInfoLinearLayout.setOnClickListener(view -> { mFetchCommentInfoLinearLayout.setOnClickListener(view -> {
@ -176,9 +175,9 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
}); });
mCommentViewModel.getInitialLoadingState().observe(this, networkState -> { mCommentViewModel.getInitialLoadingState().observe(this, networkState -> {
if(networkState.getStatus().equals(NetworkState.Status.SUCCESS)) { if (networkState.getStatus().equals(NetworkState.Status.SUCCESS)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
} else if(networkState.getStatus().equals(NetworkState.Status.FAILED)) { } else if (networkState.getStatus().equals(NetworkState.Status.FAILED)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchCommentInfoLinearLayout.setOnClickListener(view -> refresh()); mFetchCommentInfoLinearLayout.setOnClickListener(view -> refresh());
showErrorView(R.string.load_comments_failed); showErrorView(R.string.load_comments_failed);
@ -215,7 +214,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
} }
private void showErrorView(int stringResId) { private void showErrorView(int stringResId) {
if(activity != null && isAdded()) { if (activity != null && isAdded()) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchCommentInfoLinearLayout.setVisibility(View.VISIBLE); mFetchCommentInfoLinearLayout.setVisibility(View.VISIBLE);
mFetchCommentInfoTextView.setText(stringResId); mFetchCommentInfoTextView.setText(stringResId);

View File

@ -36,36 +36,29 @@ import retrofit2.Retrofit;
*/ */
public class FlairBottomSheetFragment extends BottomSheetDialogFragment { public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
public interface FlairSelectionCallback {
void flairSelected(Flair flair);
}
public static final String EXTRA_ACCESS_TOKEN = "EAT"; public static final String EXTRA_ACCESS_TOKEN = "EAT";
public static final String EXTRA_SUBREDDIT_NAME = "ESN"; public static final String EXTRA_SUBREDDIT_NAME = "ESN";
@BindView(R.id.progress_bar_flair_bottom_sheet_fragment)
@BindView(R.id.progress_bar_flair_bottom_sheet_fragment) ProgressBar progressBar; ProgressBar progressBar;
@BindView(R.id.error_text_view_flair_bottom_sheet_fragment) TextView errorTextView; @BindView(R.id.error_text_view_flair_bottom_sheet_fragment)
@BindView(R.id.recycler_view_bottom_sheet_fragment) RecyclerView recyclerView; TextView errorTextView;
@BindView(R.id.recycler_view_bottom_sheet_fragment)
private String mAccessToken; RecyclerView recyclerView;
private String mSubredditName;
private Activity mActivity;
private FlairBottomSheetRecyclerViewAdapter mAdapter;
@Inject @Inject
@Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
private String mAccessToken;
private String mSubredditName;
private Activity mActivity;
private FlairBottomSheetRecyclerViewAdapter mAdapter;
public FlairBottomSheetFragment() { public FlairBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -101,25 +94,29 @@ public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
private void fetchFlairs() { private void fetchFlairs() {
FetchFlairs.fetchFlairsInSubreddit(mOauthRetrofit, mAccessToken, FetchFlairs.fetchFlairsInSubreddit(mOauthRetrofit, mAccessToken,
mSubredditName, new FetchFlairs.FetchFlairsInSubredditListener() { mSubredditName, new FetchFlairs.FetchFlairsInSubredditListener() {
@Override @Override
public void fetchSuccessful(ArrayList<Flair> flairs) { public void fetchSuccessful(ArrayList<Flair> flairs) {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
if(flairs == null || flairs.size() == 0) { if (flairs == null || flairs.size() == 0) {
errorTextView.setVisibility(View.VISIBLE); errorTextView.setVisibility(View.VISIBLE);
errorTextView.setText(R.string.no_flair); errorTextView.setText(R.string.no_flair);
} else { } else {
errorTextView.setVisibility(View.GONE); errorTextView.setVisibility(View.GONE);
mAdapter.changeDataset(flairs); mAdapter.changeDataset(flairs);
} }
} }
@Override @Override
public void fetchFailed() { public void fetchFailed() {
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
errorTextView.setVisibility(View.VISIBLE); errorTextView.setVisibility(View.VISIBLE);
errorTextView.setText(R.string.error_loading_flairs); errorTextView.setText(R.string.error_loading_flairs);
errorTextView.setOnClickListener(view -> fetchFlairs()); errorTextView.setOnClickListener(view -> fetchFlairs());
} }
}); });
}
public interface FlairSelectionCallback {
void flairSelected(Flair flair);
} }
} }

View File

@ -22,13 +22,13 @@ import com.bumptech.glide.RequestManager;
import javax.inject.Inject; import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Adapter.FollowedUsersRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.Adapter.FollowedUsersRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserViewModel; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserViewModel;
import butterknife.BindView;
import butterknife.ButterKnife;
/** /**
@ -38,23 +38,22 @@ public class FollowedUsersListingFragment extends Fragment {
public static final String EXTRA_ACCOUNT_NAME = "EAN"; public static final String EXTRA_ACCOUNT_NAME = "EAN";
@BindView(R.id.recycler_view_followed_users_listing_fragment) RecyclerView mRecyclerView; @BindView(R.id.recycler_view_followed_users_listing_fragment)
@BindView(R.id.no_subscriptions_linear_layout_followed_users_listing_fragment) LinearLayout mLinearLayout; RecyclerView mRecyclerView;
@BindView(R.id.no_subscriptions_image_view_followed_users_listing_fragment) ImageView mImageView; @BindView(R.id.no_subscriptions_linear_layout_followed_users_listing_fragment)
LinearLayout mLinearLayout;
@BindView(R.id.no_subscriptions_image_view_followed_users_listing_fragment)
ImageView mImageView;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
private Activity mActivity; private Activity mActivity;
private RequestManager mGlide; private RequestManager mGlide;
private SubscribedUserViewModel mSubscribedUserViewModel; private SubscribedUserViewModel mSubscribedUserViewModel;
public FollowedUsersListingFragment() { public FollowedUsersListingFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {

View File

@ -32,14 +32,14 @@ public class ModifyCommentBottomSheetFragment extends RoundedBottomSheetDialogFr
public static final String EXTRA_COMMENT_CONTENT = "ECC"; public static final String EXTRA_COMMENT_CONTENT = "ECC";
public static final String EXTRA_ACCESS_TOKEN = "EAT"; public static final String EXTRA_ACCESS_TOKEN = "EAT";
public static final String EXTRA_POSITION = "EP"; public static final String EXTRA_POSITION = "EP";
@BindView(R.id.edit_text_view_modify_comment_bottom_sheet_fragment)
TextView editTextView;
@BindView(R.id.delete_text_view_modify_comment_bottom_sheet_fragment)
TextView deleteTextView;
public ModifyCommentBottomSheetFragment() { public ModifyCommentBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@BindView(R.id.edit_text_view_modify_comment_bottom_sheet_fragment) TextView editTextView;
@BindView(R.id.delete_text_view_modify_comment_bottom_sheet_fragment) TextView deleteTextView;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -48,7 +48,7 @@ public class ModifyCommentBottomSheetFragment extends RoundedBottomSheetDialogFr
Activity activity = getActivity(); Activity activity = getActivity();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
&& (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { && (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
@ -64,7 +64,7 @@ public class ModifyCommentBottomSheetFragment extends RoundedBottomSheetDialogFr
intent.putExtra(EditCommentActivity.EXTRA_FULLNAME, fullName); intent.putExtra(EditCommentActivity.EXTRA_FULLNAME, fullName);
intent.putExtra(EditCommentActivity.EXTRA_CONTENT, content); intent.putExtra(EditCommentActivity.EXTRA_CONTENT, content);
intent.putExtra(EditCommentActivity.EXTRA_POSITION, bundle.getInt(EXTRA_POSITION)); intent.putExtra(EditCommentActivity.EXTRA_POSITION, bundle.getInt(EXTRA_POSITION));
if(activity instanceof ViewPostDetailActivity) { if (activity instanceof ViewPostDetailActivity) {
activity.startActivityForResult(intent, ViewPostDetailActivity.EDIT_COMMENT_REQUEST_CODE); activity.startActivityForResult(intent, ViewPostDetailActivity.EDIT_COMMENT_REQUEST_CODE);
} else { } else {
startActivity(intent); startActivity(intent);
@ -75,9 +75,9 @@ public class ModifyCommentBottomSheetFragment extends RoundedBottomSheetDialogFr
deleteTextView.setOnClickListener(view -> { deleteTextView.setOnClickListener(view -> {
dismiss(); dismiss();
if(activity instanceof ViewPostDetailActivity) { if (activity instanceof ViewPostDetailActivity) {
((ViewPostDetailActivity) activity).deleteComment(fullName, bundle.getInt(EXTRA_POSITION)); ((ViewPostDetailActivity) activity).deleteComment(fullName, bundle.getInt(EXTRA_POSITION));
} else if(activity instanceof ViewUserDetailActivity) { } else if (activity instanceof ViewUserDetailActivity) {
((ViewUserDetailActivity) activity).deleteComment(fullName); ((ViewUserDetailActivity) activity).deleteComment(fullName);
} }
}); });

View File

@ -82,46 +82,42 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private static final String IS_IN_LAZY_MODE_STATE = "IILMS"; private static final String IS_IN_LAZY_MODE_STATE = "IILMS";
private static final String RECYCLER_VIEW_POSITION_STATE = "RVPS"; private static final String RECYCLER_VIEW_POSITION_STATE = "RVPS";
@BindView(R.id.recycler_view_post_fragment) RecyclerView mPostRecyclerView; @BindView(R.id.recycler_view_post_fragment)
@BindView(R.id.progress_bar_post_fragment) CircleProgressBar mProgressBar; RecyclerView mPostRecyclerView;
@BindView(R.id.fetch_post_info_linear_layout_post_fragment) LinearLayout mFetchPostInfoLinearLayout; @BindView(R.id.progress_bar_post_fragment)
@BindView(R.id.fetch_post_info_image_view_post_fragment) ImageView mFetchPostInfoImageView; CircleProgressBar mProgressBar;
@BindView(R.id.fetch_post_info_text_view_post_fragment) TextView mFetchPostInfoTextView; @BindView(R.id.fetch_post_info_linear_layout_post_fragment)
LinearLayout mFetchPostInfoLinearLayout;
@BindView(R.id.fetch_post_info_image_view_post_fragment)
ImageView mFetchPostInfoImageView;
@BindView(R.id.fetch_post_info_text_view_post_fragment)
TextView mFetchPostInfoTextView;
PostViewModel mPostViewModel;
@Inject
@Named("no_oauth")
Retrofit mRetrofit;
@Inject
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
private RequestManager mGlide; private RequestManager mGlide;
private Activity activity; private Activity activity;
private LinearLayoutManager mLinearLayoutManager; private LinearLayoutManager mLinearLayoutManager;
private StaggeredGridLayoutManager mStaggeredGridLayoutManager; private StaggeredGridLayoutManager mStaggeredGridLayoutManager;
private boolean isInLazyMode = false; private boolean isInLazyMode = false;
private boolean isLazyModePaused = false; private boolean isLazyModePaused = false;
private boolean hasPost = false; private boolean hasPost = false;
private PostRecyclerViewAdapter mAdapter; private PostRecyclerViewAdapter mAdapter;
private RecyclerView.SmoothScroller smoothScroller; private RecyclerView.SmoothScroller smoothScroller;
PostViewModel mPostViewModel;
private Window window; private Window window;
private Handler lazyModeHandler; private Handler lazyModeHandler;
private LazyModeRunnable lazyModeRunnable; private LazyModeRunnable lazyModeRunnable;
private CountDownTimer resumeLazyModeCountDownTimer; private CountDownTimer resumeLazyModeCountDownTimer;
private float lazyModeInterval; private float lazyModeInterval;
@Inject @Named("no_oauth")
Retrofit mRetrofit;
@Inject @Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
SharedPreferences mSharedPreferences;
public PostFragment() { public PostFragment() {
// Required empty public constructor // Required empty public constructor
} }
@ -129,7 +125,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
if(mPostRecyclerView.getAdapter() != null) { if (mPostRecyclerView.getAdapter() != null) {
((PostRecyclerViewAdapter) mPostRecyclerView.getAdapter()).setCanStartActivity(true); ((PostRecyclerViewAdapter) mPostRecyclerView.getAdapter()).setCanStartActivity(true);
} }
} }
@ -187,10 +183,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public void run() { public void run() {
if(isInLazyMode && !isLazyModePaused) { if (isInLazyMode && !isLazyModePaused) {
int nPosts = mAdapter.getItemCount(); int nPosts = mAdapter.getItemCount();
if(getCurrentPosition() == -1) { if (getCurrentPosition() == -1) {
if(mLinearLayoutManager != null) { if (mLinearLayoutManager != null) {
setCurrentPosition(mLinearLayoutManager.findFirstVisibleItemPosition()); setCurrentPosition(mLinearLayoutManager.findFirstVisibleItemPosition());
} else { } else {
int[] into = new int[2]; int[] into = new int[2];
@ -198,10 +194,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
} }
} }
if(getCurrentPosition() != RecyclerView.NO_POSITION && nPosts > getCurrentPosition()) { if (getCurrentPosition() != RecyclerView.NO_POSITION && nPosts > getCurrentPosition()) {
incrementCurrentPosition(); incrementCurrentPosition();
smoothScroller.setTargetPosition(getCurrentPosition()); smoothScroller.setTargetPosition(getCurrentPosition());
if(mLinearLayoutManager != null) { if (mLinearLayoutManager != null) {
mLinearLayoutManager.startSmoothScroll(smoothScroller); mLinearLayoutManager.startSmoothScroll(smoothScroller);
} else { } else {
mStaggeredGridLayoutManager.startSmoothScroll(smoothScroller); mStaggeredGridLayoutManager.startSmoothScroll(smoothScroller);
@ -224,26 +220,26 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
} }
}; };
if(savedInstanceState != null) { if (savedInstanceState != null) {
int recyclerViewPosition = savedInstanceState.getInt(RECYCLER_VIEW_POSITION_STATE); int recyclerViewPosition = savedInstanceState.getInt(RECYCLER_VIEW_POSITION_STATE);
if(recyclerViewPosition > 0) { if (recyclerViewPosition > 0) {
mPostRecyclerView.scrollToPosition(recyclerViewPosition); mPostRecyclerView.scrollToPosition(recyclerViewPosition);
} }
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE); isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
if(isInLazyMode) { if (isInLazyMode) {
resumeLazyMode(false); resumeLazyMode(false);
} }
} }
mPostRecyclerView.setOnTouchListener((view, motionEvent) -> { mPostRecyclerView.setOnTouchListener((view, motionEvent) -> {
if(isInLazyMode) { if (isInLazyMode) {
pauseLazyMode(true); pauseLazyMode(true);
} }
return false; return false;
}); });
if(activity instanceof MainActivity) { if (activity instanceof MainActivity) {
mPostRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { mPostRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override @Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
@ -255,7 +251,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
} }
}); });
} else if(activity instanceof ViewSubredditDetailActivity) { } else if (activity instanceof ViewSubredditDetailActivity) {
mPostRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { mPostRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override @Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
@ -280,31 +276,31 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
PostViewModel.Factory factory; PostViewModel.Factory factory;
if(postType == PostDataSource.TYPE_SEARCH) { if (postType == PostDataSource.TYPE_SEARCH) {
String subredditName = getArguments().getString(EXTRA_NAME); String subredditName = getArguments().getString(EXTRA_NAME);
String query = getArguments().getString(EXTRA_QUERY); String query = getArguments().getString(EXTRA_QUERY);
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase, mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase,
accessToken, postType, true, needBlurNsfw, needBlurSpoiler, accessToken, postType, true, needBlurNsfw, needBlurSpoiler,
new PostRecyclerViewAdapter.Callback() { new PostRecyclerViewAdapter.Callback() {
@Override @Override
public void retryLoadingMore() { public void retryLoadingMore() {
mPostViewModel.retryLoadingMore(); mPostViewModel.retryLoadingMore();
} }
@Override @Override
public void typeChipClicked(int filter) { public void typeChipClicked(int filter) {
Intent intent = new Intent(activity, FilteredThingActivity.class); Intent intent = new Intent(activity, FilteredThingActivity.class);
intent.putExtra(FilteredThingActivity.EXTRA_NAME, subredditName); intent.putExtra(FilteredThingActivity.EXTRA_NAME, subredditName);
intent.putExtra(FilteredThingActivity.EXTRA_QUERY, query); intent.putExtra(FilteredThingActivity.EXTRA_QUERY, query);
intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType); intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType);
intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType); intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType);
intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter); intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter);
startActivity(intent); startActivity(intent);
} }
}); });
if(accessToken == null) { if (accessToken == null) {
factory = new PostViewModel.Factory(mRetrofit, accessToken, factory = new PostViewModel.Factory(mRetrofit, accessToken,
getResources().getConfiguration().locale, subredditName, query, postType, getResources().getConfiguration().locale, subredditName, query, postType,
sortType, filter, nsfw); sortType, filter, nsfw);
@ -313,30 +309,30 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
getResources().getConfiguration().locale, subredditName, query, postType, getResources().getConfiguration().locale, subredditName, query, postType,
sortType, filter, nsfw); sortType, filter, nsfw);
} }
} else if(postType == PostDataSource.TYPE_SUBREDDIT) { } else if (postType == PostDataSource.TYPE_SUBREDDIT) {
String subredditName = getArguments().getString(EXTRA_NAME); String subredditName = getArguments().getString(EXTRA_NAME);
boolean displaySubredditName = subredditName != null && (subredditName.equals("popular") || subredditName.equals("all")); boolean displaySubredditName = subredditName != null && (subredditName.equals("popular") || subredditName.equals("all"));
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase, mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase,
accessToken, postType, displaySubredditName, needBlurNsfw, needBlurSpoiler, accessToken, postType, displaySubredditName, needBlurNsfw, needBlurSpoiler,
new PostRecyclerViewAdapter.Callback() { new PostRecyclerViewAdapter.Callback() {
@Override @Override
public void retryLoadingMore() { public void retryLoadingMore() {
mPostViewModel.retryLoadingMore(); mPostViewModel.retryLoadingMore();
} }
@Override @Override
public void typeChipClicked(int filter) { public void typeChipClicked(int filter) {
Intent intent = new Intent(activity, FilteredThingActivity.class); Intent intent = new Intent(activity, FilteredThingActivity.class);
intent.putExtra(FilteredThingActivity.EXTRA_NAME, subredditName); intent.putExtra(FilteredThingActivity.EXTRA_NAME, subredditName);
intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType); intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType);
intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType); intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType);
intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter); intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter);
startActivity(intent); startActivity(intent);
} }
}); });
if(accessToken == null) { if (accessToken == null) {
factory = new PostViewModel.Factory(mRetrofit, accessToken, factory = new PostViewModel.Factory(mRetrofit, accessToken,
getResources().getConfiguration().locale, subredditName, postType, sortType, getResources().getConfiguration().locale, subredditName, postType, sortType,
filter, nsfw); filter, nsfw);
@ -345,10 +341,10 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
getResources().getConfiguration().locale, subredditName, postType, sortType, getResources().getConfiguration().locale, subredditName, postType, sortType,
filter, nsfw); filter, nsfw);
} }
} else if(postType == PostDataSource.TYPE_USER) { } else if (postType == PostDataSource.TYPE_USER) {
String username = getArguments().getString(EXTRA_USER_NAME); String username = getArguments().getString(EXTRA_USER_NAME);
String where = getArguments().getString(EXTRA_USER_WHERE); String where = getArguments().getString(EXTRA_USER_WHERE);
if(where != null && where.equals(PostDataSource.USER_WHERE_SUBMITTED)) { if (where != null && where.equals(PostDataSource.USER_WHERE_SUBMITTED)) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mFetchPostInfoLinearLayout.getLayoutParams(); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mFetchPostInfoLinearLayout.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
mFetchPostInfoLinearLayout.setLayoutParams(params); mFetchPostInfoLinearLayout.setLayoutParams(params);
@ -357,24 +353,24 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase, mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase,
accessToken, postType, true, needBlurNsfw, needBlurSpoiler, accessToken, postType, true, needBlurNsfw, needBlurSpoiler,
new PostRecyclerViewAdapter.Callback() { new PostRecyclerViewAdapter.Callback() {
@Override @Override
public void retryLoadingMore() { public void retryLoadingMore() {
mPostViewModel.retryLoadingMore(); mPostViewModel.retryLoadingMore();
} }
@Override @Override
public void typeChipClicked(int filter) { public void typeChipClicked(int filter) {
Intent intent = new Intent(activity, FilteredThingActivity.class); Intent intent = new Intent(activity, FilteredThingActivity.class);
intent.putExtra(FilteredThingActivity.EXTRA_NAME, username); intent.putExtra(FilteredThingActivity.EXTRA_NAME, username);
intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType); intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType);
intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType); intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType);
intent.putExtra(FilteredThingActivity.EXTRA_USER_WHERE, where); intent.putExtra(FilteredThingActivity.EXTRA_USER_WHERE, where);
intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter); intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter);
startActivity(intent); startActivity(intent);
} }
}); });
if(accessToken == null) { if (accessToken == null) {
factory = new PostViewModel.Factory(mRetrofit, accessToken, factory = new PostViewModel.Factory(mRetrofit, accessToken,
getResources().getConfiguration().locale, username, postType, sortType, where, getResources().getConfiguration().locale, username, postType, sortType, where,
filter, nsfw); filter, nsfw);
@ -387,21 +383,21 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase, mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mRedditDataRoomDatabase,
accessToken, postType, true, needBlurNsfw, needBlurSpoiler, accessToken, postType, true, needBlurNsfw, needBlurSpoiler,
new PostRecyclerViewAdapter.Callback() { new PostRecyclerViewAdapter.Callback() {
@Override @Override
public void retryLoadingMore() { public void retryLoadingMore() {
mPostViewModel.retryLoadingMore(); mPostViewModel.retryLoadingMore();
} }
@Override @Override
public void typeChipClicked(int filter) { public void typeChipClicked(int filter) {
Intent intent = new Intent(activity, FilteredThingActivity.class); Intent intent = new Intent(activity, FilteredThingActivity.class);
intent.putExtra(FilteredThingActivity.EXTRA_NAME, activity.getString(R.string.best)); intent.putExtra(FilteredThingActivity.EXTRA_NAME, activity.getString(R.string.best));
intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType); intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, postType);
intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType); intent.putExtra(FilteredThingActivity.EXTRA_SORT_TYPE, sortType);
intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter); intent.putExtra(FilteredThingActivity.EXTRA_FILTER, filter);
startActivity(intent); startActivity(intent);
} }
}); });
factory = new PostViewModel.Factory(mOauthRetrofit, accessToken, factory = new PostViewModel.Factory(mOauthRetrofit, accessToken,
getResources().getConfiguration().locale, postType, sortType, filter, nsfw); getResources().getConfiguration().locale, postType, sortType, filter, nsfw);
@ -415,22 +411,23 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
mPostViewModel.hasPost().observe(this, hasPost -> { mPostViewModel.hasPost().observe(this, hasPost -> {
this.hasPost = hasPost; this.hasPost = hasPost;
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(hasPost) { if (hasPost) {
mFetchPostInfoLinearLayout.setVisibility(View.GONE); mFetchPostInfoLinearLayout.setVisibility(View.GONE);
} else { } else {
if(isInLazyMode) { if (isInLazyMode) {
stopLazyMode(); stopLazyMode();
} }
mFetchPostInfoLinearLayout.setOnClickListener(view -> {}); mFetchPostInfoLinearLayout.setOnClickListener(view -> {
});
showErrorView(R.string.no_posts); showErrorView(R.string.no_posts);
} }
}); });
mPostViewModel.getInitialLoadingState().observe(this, networkState -> { mPostViewModel.getInitialLoadingState().observe(this, networkState -> {
if(networkState.getStatus().equals(NetworkState.Status.SUCCESS)) { if (networkState.getStatus().equals(NetworkState.Status.SUCCESS)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
} else if(networkState.getStatus().equals(NetworkState.Status.FAILED)) { } else if (networkState.getStatus().equals(NetworkState.Status.FAILED)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchPostInfoLinearLayout.setOnClickListener(view -> refresh()); mFetchPostInfoLinearLayout.setOnClickListener(view -> refresh());
showErrorView(R.string.load_posts_error); showErrorView(R.string.load_posts_error);
@ -458,9 +455,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
public void onSaveInstanceState(@NonNull Bundle outState) { public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode); outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode);
if(mLinearLayoutManager != null) { if (mLinearLayoutManager != null) {
outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition()); outState.putInt(RECYCLER_VIEW_POSITION_STATE, mLinearLayoutManager.findFirstVisibleItemPosition());
} else if(mStaggeredGridLayoutManager != null) { } else if (mStaggeredGridLayoutManager != null) {
int[] into = new int[2]; int[] into = new int[2];
outState.putInt(RECYCLER_VIEW_POSITION_STATE, outState.putInt(RECYCLER_VIEW_POSITION_STATE,
mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[0]); mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[0]);
@ -469,7 +466,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public void refresh() { public void refresh() {
if(isInLazyMode) { if (isInLazyMode) {
stopLazyMode(); stopLazyMode();
} }
@ -480,7 +477,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
} }
private void showErrorView(int stringResId) { private void showErrorView(int stringResId) {
if(activity != null && isAdded()) { if (activity != null && isAdded()) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchPostInfoLinearLayout.setVisibility(View.VISIBLE); mFetchPostInfoLinearLayout.setVisibility(View.VISIBLE);
mFetchPostInfoTextView.setText(stringResId); mFetchPostInfoTextView.setText(stringResId);
@ -495,7 +492,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public boolean startLazyMode() { public boolean startLazyMode() {
if(!hasPost) { if (!hasPost) {
Toast.makeText(activity, R.string.no_posts_no_lazy_mode, Toast.LENGTH_SHORT).show(); Toast.makeText(activity, R.string.no_posts_no_lazy_mode, Toast.LENGTH_SHORT).show();
return false; return false;
} }
@ -525,13 +522,13 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public void resumeLazyMode(boolean resumeNow) { public void resumeLazyMode(boolean resumeNow) {
if(isInLazyMode) { if (isInLazyMode) {
isLazyModePaused = false; isLazyModePaused = false;
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
lazyModeRunnable.resetOldPosition(); lazyModeRunnable.resetOldPosition();
if(resumeNow) { if (resumeNow) {
lazyModeHandler.post(lazyModeRunnable); lazyModeHandler.post(lazyModeRunnable);
} else { } else {
lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000));
@ -547,7 +544,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
lazyModeHandler.removeCallbacks(lazyModeRunnable); lazyModeHandler.removeCallbacks(lazyModeRunnable);
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if(startTimer) { if (startTimer) {
resumeLazyModeCountDownTimer.start(); resumeLazyModeCountDownTimer.start();
} }
} }
@ -590,9 +587,9 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
private void refreshAdapter() { private void refreshAdapter() {
int previousPosition = -1; int previousPosition = -1;
if(mLinearLayoutManager != null) { if (mLinearLayoutManager != null) {
previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
} else if(mStaggeredGridLayoutManager != null) { } else if (mStaggeredGridLayoutManager != null) {
int[] into = new int[2]; int[] into = new int[2];
previousPosition = mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[0]; previousPosition = mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[0];
} }
@ -603,7 +600,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
mPostRecyclerView.setAdapter(mAdapter); mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.setLayoutManager(layoutManager); mPostRecyclerView.setLayoutManager(layoutManager);
if(previousPosition > 0) { if (previousPosition > 0) {
mPostRecyclerView.scrollToPosition(previousPosition); mPostRecyclerView.scrollToPosition(previousPosition);
} }
} }
@ -611,7 +608,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
if(isInLazyMode && isLazyModePaused) { if (isInLazyMode && isLazyModePaused) {
resumeLazyMode(false); resumeLazyMode(false);
} }
} }
@ -619,7 +616,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
if(isInLazyMode) { if (isInLazyMode) {
pauseLazyMode(false); pauseLazyMode(false);
} }
} }
@ -673,7 +670,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
int halfOffset = mItemOffset / 2; int halfOffset = mItemOffset / 2;
if(spanIndex == 0) { if (spanIndex == 0) {
outRect.set(0, 0, halfOffset, 0); outRect.set(0, 0, halfOffset, 0);
} else { } else {
outRect.set(halfOffset, 0, 0, 0); outRect.set(halfOffset, 0, 0, 0);

View File

@ -24,25 +24,22 @@ import ml.docilealligator.infinityforreddit.R;
*/ */
public class PostTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { public class PostTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment {
public interface PostTypeSelectionCallback {
void postTypeSelected(int postType);
}
public static final int TYPE_TEXT = 0; public static final int TYPE_TEXT = 0;
public static final int TYPE_LINK = 1; public static final int TYPE_LINK = 1;
public static final int TYPE_IMAGE = 2; public static final int TYPE_IMAGE = 2;
public static final int TYPE_VIDEO = 3; public static final int TYPE_VIDEO = 3;
@BindView(R.id.text_type_linear_layout_post_type_bottom_sheet_fragment)
@BindView(R.id.text_type_linear_layout_post_type_bottom_sheet_fragment) LinearLayout textTypeLinearLayout; LinearLayout textTypeLinearLayout;
@BindView(R.id.link_type_linear_layout_post_type_bottom_sheet_fragment) LinearLayout linkTypeLinearLayout; @BindView(R.id.link_type_linear_layout_post_type_bottom_sheet_fragment)
@BindView(R.id.image_type_linear_layout_post_type_bottom_sheet_fragment) LinearLayout imageTypeLinearLayout; LinearLayout linkTypeLinearLayout;
@BindView(R.id.video_type_linear_layout_post_type_bottom_sheet_fragment) LinearLayout videoTypeLinearLayout; @BindView(R.id.image_type_linear_layout_post_type_bottom_sheet_fragment)
LinearLayout imageTypeLinearLayout;
@BindView(R.id.video_type_linear_layout_post_type_bottom_sheet_fragment)
LinearLayout videoTypeLinearLayout;
public PostTypeBottomSheetFragment() { public PostTypeBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -51,7 +48,7 @@ public class PostTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen
Activity activity = getActivity(); Activity activity = getActivity();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
&& (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { && (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
@ -79,4 +76,9 @@ public class PostTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen
return rootView; return rootView;
} }
public interface PostTypeSelectionCallback {
void postTypeSelected(int postType);
}
} }

View File

@ -25,21 +25,20 @@ import ml.docilealligator.infinityforreddit.R;
*/ */
public class SearchPostSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { public class SearchPostSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment {
public interface SearchSortTypeSelectionCallback { @BindView(R.id.relevance_type_text_view_search_sort_type_bottom_sheet_fragment)
void searchSortTypeSelected(String sortType); TextView relevanceTypeTextView;
} @BindView(R.id.hot_type_text_view_search_sort_type_bottom_sheet_fragment)
TextView hotTypeTextView;
@BindView(R.id.relevance_type_text_view_search_sort_type_bottom_sheet_fragment) TextView relevanceTypeTextView; @BindView(R.id.top_type_text_view_search_sort_type_bottom_sheet_fragment)
@BindView(R.id.hot_type_text_view_search_sort_type_bottom_sheet_fragment) TextView hotTypeTextView; TextView topTypeTextView;
@BindView(R.id.top_type_text_view_search_sort_type_bottom_sheet_fragment) TextView topTypeTextView; @BindView(R.id.new_type_text_view_search_sort_type_bottom_sheet_fragment)
@BindView(R.id.new_type_text_view_search_sort_type_bottom_sheet_fragment) TextView newTypeTextView; TextView newTypeTextView;
@BindView(R.id.comments_type_text_view_search_sort_type_bottom_sheet_fragment) TextView commentsTypeTextView; @BindView(R.id.comments_type_text_view_search_sort_type_bottom_sheet_fragment)
TextView commentsTypeTextView;
public SearchPostSortTypeBottomSheetFragment() { public SearchPostSortTypeBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -48,7 +47,7 @@ public class SearchPostSortTypeBottomSheetFragment extends RoundedBottomSheetDia
Activity activity = getActivity(); Activity activity = getActivity();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
&& (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { && (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
@ -81,4 +80,9 @@ public class SearchPostSortTypeBottomSheetFragment extends RoundedBottomSheetDia
return rootView; return rootView;
} }
public interface SearchSortTypeSelectionCallback {
void searchSortTypeSelected(String sortType);
}
} }

View File

@ -25,20 +25,15 @@ import ml.docilealligator.infinityforreddit.R;
*/ */
public class SearchUserAndSubredditSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { public class SearchUserAndSubredditSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment {
public interface SearchUserAndSubredditSortTypeSelectionCallback {
void searchUserAndSubredditSortTypeSelected(String sortType, int fragmentPosition);
}
public static final String EXTRA_FRAGMENT_POSITION = "EFP"; public static final String EXTRA_FRAGMENT_POSITION = "EFP";
@BindView(R.id.relevance_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment)
@BindView(R.id.relevance_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment) TextView relevanceTypeTextView; TextView relevanceTypeTextView;
@BindView(R.id.activity_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment) TextView activityTypeTextView; @BindView(R.id.activity_type_text_view_search_user_and_subreddit_sort_type_bottom_sheet_fragment)
TextView activityTypeTextView;
public SearchUserAndSubredditSortTypeBottomSheetFragment() { public SearchUserAndSubredditSortTypeBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -47,7 +42,7 @@ public class SearchUserAndSubredditSortTypeBottomSheetFragment extends RoundedBo
Activity activity = getActivity(); Activity activity = getActivity();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
&& (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { && (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
@ -67,4 +62,9 @@ public class SearchUserAndSubredditSortTypeBottomSheetFragment extends RoundedBo
return rootView; return rootView;
} }
public interface SearchUserAndSubredditSortTypeSelectionCallback {
void searchUserAndSubredditSortTypeSelected(String sortType, int fragmentPosition);
}
} }

View File

@ -26,25 +26,25 @@ import ml.docilealligator.infinityforreddit.R;
*/ */
public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment {
public interface SortTypeSelectionCallback {
void sortTypeSelected(String sortType);
}
public static final String EXTRA_NO_BEST_TYPE = "ENBT"; public static final String EXTRA_NO_BEST_TYPE = "ENBT";
@BindView(R.id.best_type_text_view_sort_type_bottom_sheet_fragment)
@BindView(R.id.best_type_text_view_sort_type_bottom_sheet_fragment) TextView bestTypeTextView; TextView bestTypeTextView;
@BindView(R.id.hot_type_text_view_sort_type_bottom_sheet_fragment) TextView hotTypeTextView; @BindView(R.id.hot_type_text_view_sort_type_bottom_sheet_fragment)
@BindView(R.id.new_type_text_view_sort_type_bottom_sheet_fragment) TextView newTypeTextView; TextView hotTypeTextView;
@BindView(R.id.random_type_text_view_sort_type_bottom_sheet_fragment) TextView randomTypeTextView; @BindView(R.id.new_type_text_view_sort_type_bottom_sheet_fragment)
@BindView(R.id.rising_type_text_view_sort_type_bottom_sheet_fragment) TextView risingTypeTextView; TextView newTypeTextView;
@BindView(R.id.top_type_text_view_sort_type_bottom_sheet_fragment) TextView topTypeTextView; @BindView(R.id.random_type_text_view_sort_type_bottom_sheet_fragment)
@BindView(R.id.controversial_type_text_view_sort_type_bottom_sheet_fragment) TextView controversialTypeTextView; TextView randomTypeTextView;
@BindView(R.id.rising_type_text_view_sort_type_bottom_sheet_fragment)
TextView risingTypeTextView;
@BindView(R.id.top_type_text_view_sort_type_bottom_sheet_fragment)
TextView topTypeTextView;
@BindView(R.id.controversial_type_text_view_sort_type_bottom_sheet_fragment)
TextView controversialTypeTextView;
public SortTypeBottomSheetFragment() { public SortTypeBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -53,12 +53,12 @@ public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen
Activity activity = getActivity(); Activity activity = getActivity();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
&& (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { && (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
if(getArguments().getBoolean(EXTRA_NO_BEST_TYPE)) { if (getArguments().getBoolean(EXTRA_NO_BEST_TYPE)) {
bestTypeTextView.setVisibility(View.GONE); bestTypeTextView.setVisibility(View.GONE);
} else { } else {
bestTypeTextView.setOnClickListener(view -> { bestTypeTextView.setOnClickListener(view -> {
@ -100,4 +100,9 @@ public class SortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragmen
return rootView; return rootView;
} }
public interface SortTypeSelectionCallback {
void sortTypeSelected(String sortType);
}
} }

View File

@ -31,13 +31,13 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Activity.SearchSubredditsResultActivity; import ml.docilealligator.infinityforreddit.Activity.SearchSubredditsResultActivity;
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity; import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
import ml.docilealligator.infinityforreddit.Adapter.SubredditListingRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.NetworkState; import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Adapter.SubredditListingRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.SubredditListingViewModel; import ml.docilealligator.infinityforreddit.SubredditListingViewModel;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -52,27 +52,29 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
public static final String EXTRA_ACCESS_TOKEN = "EAT"; public static final String EXTRA_ACCESS_TOKEN = "EAT";
public static final String EXTRA_ACCOUNT_NAME = "EAN"; public static final String EXTRA_ACCOUNT_NAME = "EAN";
@BindView(R.id.coordinator_layout_subreddit_listing_fragment) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.coordinator_layout_subreddit_listing_fragment)
@BindView(R.id.recycler_view_subreddit_listing_fragment) RecyclerView mSubredditListingRecyclerView; CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.progress_bar_subreddit_listing_fragment) CircleProgressBar mProgressBar; @BindView(R.id.recycler_view_subreddit_listing_fragment)
@BindView(R.id.fetch_subreddit_listing_info_linear_layout_subreddit_listing_fragment) LinearLayout mFetchSubredditListingInfoLinearLayout; RecyclerView mSubredditListingRecyclerView;
@BindView(R.id.fetch_subreddit_listing_info_image_view_subreddit_listing_fragment) ImageView mFetchSubredditListingInfoImageView; @BindView(R.id.progress_bar_subreddit_listing_fragment)
@BindView(R.id.fetch_subreddit_listing_info_text_view_subreddit_listing_fragment) TextView mFetchSubredditListingInfoTextView; CircleProgressBar mProgressBar;
@BindView(R.id.fetch_subreddit_listing_info_linear_layout_subreddit_listing_fragment)
private LinearLayoutManager mLinearLayoutManager; LinearLayout mFetchSubredditListingInfoLinearLayout;
@BindView(R.id.fetch_subreddit_listing_info_image_view_subreddit_listing_fragment)
private SubredditListingRecyclerViewAdapter mAdapter; ImageView mFetchSubredditListingInfoImageView;
@BindView(R.id.fetch_subreddit_listing_info_text_view_subreddit_listing_fragment)
TextView mFetchSubredditListingInfoTextView;
SubredditListingViewModel mSubredditListingViewModel; SubredditListingViewModel mSubredditListingViewModel;
@Inject
@Inject @Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject
@Inject @Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
RedditDataRoomDatabase redditDataRoomDatabase; RedditDataRoomDatabase redditDataRoomDatabase;
private LinearLayoutManager mLinearLayoutManager;
private SubredditListingRecyclerViewAdapter mAdapter;
public SubredditListingFragment() { public SubredditListingFragment() {
// Required empty public constructor // Required empty public constructor
@ -120,7 +122,7 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
@Override @Override
public void subredditSelected(String subredditName, String iconUrl) { public void subredditSelected(String subredditName, String iconUrl) {
if(isPosting) { if (isPosting) {
((SearchSubredditsResultActivity) activity).getSelectedSubreddit(subredditName, iconUrl); ((SearchSubredditsResultActivity) activity).getSelectedSubreddit(subredditName, iconUrl);
} else { } else {
Intent intent = new Intent(activity, ViewSubredditDetailActivity.class); Intent intent = new Intent(activity, ViewSubredditDetailActivity.class);
@ -139,7 +141,7 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
mSubredditListingViewModel.hasSubredditLiveData().observe(this, hasSubreddit -> { mSubredditListingViewModel.hasSubredditLiveData().observe(this, hasSubreddit -> {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(hasSubreddit) { if (hasSubreddit) {
mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE); mFetchSubredditListingInfoLinearLayout.setVisibility(View.GONE);
} else { } else {
mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> { mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> {
@ -150,9 +152,9 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
}); });
mSubredditListingViewModel.getInitialLoadingState().observe(this, networkState -> { mSubredditListingViewModel.getInitialLoadingState().observe(this, networkState -> {
if(networkState.getStatus().equals(NetworkState.Status.SUCCESS)) { if (networkState.getStatus().equals(NetworkState.Status.SUCCESS)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
} else if(networkState.getStatus().equals(NetworkState.Status.FAILED)) { } else if (networkState.getStatus().equals(NetworkState.Status.FAILED)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> refresh()); mFetchSubredditListingInfoLinearLayout.setOnClickListener(view -> refresh());
showErrorView(R.string.search_subreddits_error); showErrorView(R.string.search_subreddits_error);
@ -169,7 +171,7 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
} }
private void showErrorView(int stringResId) { private void showErrorView(int stringResId) {
if(getActivity() != null && isAdded()) { if (getActivity() != null && isAdded()) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchSubredditListingInfoLinearLayout.setVisibility(View.VISIBLE); mFetchSubredditListingInfoLinearLayout.setVisibility(View.VISIBLE);
mFetchSubredditListingInfoTextView.setText(stringResId); mFetchSubredditListingInfoTextView.setText(stringResId);

View File

@ -43,18 +43,17 @@ public class SubscribedSubredditsListingFragment extends Fragment {
public static final String EXTRA_IS_SUBREDDIT_SELECTION = "EISS"; public static final String EXTRA_IS_SUBREDDIT_SELECTION = "EISS";
public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS"; public static final String EXTRA_EXTRA_CLEAR_SELECTION = "EECS";
@BindView(R.id.recycler_view_subscribed_subreddits_listing_fragment) RecyclerView mRecyclerView; @BindView(R.id.recycler_view_subscribed_subreddits_listing_fragment)
@BindView(R.id.no_subscriptions_linear_layout_subreddits_listing_fragment) LinearLayout mLinearLayout; RecyclerView mRecyclerView;
@BindView(R.id.no_subscriptions_image_view_subreddits_listing_fragment) ImageView mImageView; @BindView(R.id.no_subscriptions_linear_layout_subreddits_listing_fragment)
LinearLayout mLinearLayout;
private Activity mActivity; @BindView(R.id.no_subscriptions_image_view_subreddits_listing_fragment)
ImageView mImageView;
private RequestManager mGlide;
private SubscribedSubredditViewModel mSubscribedSubredditViewModel;
@Inject @Inject
RedditDataRoomDatabase mRedditDataRoomDatabase; RedditDataRoomDatabase mRedditDataRoomDatabase;
private Activity mActivity;
private RequestManager mGlide;
private SubscribedSubredditViewModel mSubscribedSubredditViewModel;
public SubscribedSubredditsListingFragment() { public SubscribedSubredditsListingFragment() {
// Required empty public constructor // Required empty public constructor
@ -89,7 +88,7 @@ public class SubscribedSubredditsListingFragment extends Fragment {
mRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity)); mRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
SubscribedSubredditsRecyclerViewAdapter adapter; SubscribedSubredditsRecyclerViewAdapter adapter;
if(getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) { if (getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) {
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION), adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION),
(name, iconUrl, subredditIsUser) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl, subredditIsUser)); (name, iconUrl, subredditIsUser) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl, subredditIsUser));
} else { } else {

View File

@ -26,13 +26,13 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Adapter.UserListingRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.NetworkState; import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.PostDataSource; import ml.docilealligator.infinityforreddit.PostDataSource;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.Adapter.UserListingRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.UserListingViewModel; import ml.docilealligator.infinityforreddit.UserListingViewModel;
import retrofit2.Retrofit; import retrofit2.Retrofit;
@ -46,29 +46,30 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
public static final String EXTRA_ACCESS_TOKEN = "EAT"; public static final String EXTRA_ACCESS_TOKEN = "EAT";
public static final String EXTRA_ACCOUNT_NAME = "EAN"; public static final String EXTRA_ACCOUNT_NAME = "EAN";
@BindView(R.id.coordinator_layout_user_listing_fragment) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.coordinator_layout_user_listing_fragment)
@BindView(R.id.recycler_view_user_listing_fragment) RecyclerView mUserListingRecyclerView; CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.progress_bar_user_listing_fragment) CircleProgressBar mProgressBar; @BindView(R.id.recycler_view_user_listing_fragment)
@BindView(R.id.fetch_user_listing_info_linear_layout_user_listing_fragment) LinearLayout mFetchUserListingInfoLinearLayout; RecyclerView mUserListingRecyclerView;
@BindView(R.id.fetch_user_listing_info_image_view_user_listing_fragment) ImageView mFetchUserListingInfoImageView; @BindView(R.id.progress_bar_user_listing_fragment)
@BindView(R.id.fetch_user_listing_info_text_view_user_listing_fragment) TextView mFetchUserListingInfoTextView; CircleProgressBar mProgressBar;
@BindView(R.id.fetch_user_listing_info_linear_layout_user_listing_fragment)
private LinearLayoutManager mLinearLayoutManager; LinearLayout mFetchUserListingInfoLinearLayout;
@BindView(R.id.fetch_user_listing_info_image_view_user_listing_fragment)
private String mQuery; ImageView mFetchUserListingInfoImageView;
@BindView(R.id.fetch_user_listing_info_text_view_user_listing_fragment)
private UserListingRecyclerViewAdapter mAdapter; TextView mFetchUserListingInfoTextView;
UserListingViewModel mUserListingViewModel; UserListingViewModel mUserListingViewModel;
@Inject
@Inject @Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject
@Inject @Named("oauth") @Named("oauth")
Retrofit mOauthRetrofit; Retrofit mOauthRetrofit;
@Inject @Inject
RedditDataRoomDatabase redditDataRoomDatabase; RedditDataRoomDatabase redditDataRoomDatabase;
private LinearLayoutManager mLinearLayoutManager;
private String mQuery;
private UserListingRecyclerViewAdapter mAdapter;
public UserListingFragment() { public UserListingFragment() {
// Required empty public constructor // Required empty public constructor
@ -116,7 +117,7 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
mUserListingViewModel.hasUser().observe(this, hasUser -> { mUserListingViewModel.hasUser().observe(this, hasUser -> {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
if(hasUser) { if (hasUser) {
mFetchUserListingInfoLinearLayout.setVisibility(View.GONE); mFetchUserListingInfoLinearLayout.setVisibility(View.GONE);
} else { } else {
mFetchUserListingInfoLinearLayout.setOnClickListener(view -> { mFetchUserListingInfoLinearLayout.setOnClickListener(view -> {
@ -127,9 +128,9 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
}); });
mUserListingViewModel.getInitialLoadingState().observe(this, networkState -> { mUserListingViewModel.getInitialLoadingState().observe(this, networkState -> {
if(networkState.getStatus().equals(NetworkState.Status.SUCCESS)) { if (networkState.getStatus().equals(NetworkState.Status.SUCCESS)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
} else if(networkState.getStatus().equals(NetworkState.Status.FAILED)) { } else if (networkState.getStatus().equals(NetworkState.Status.FAILED)) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchUserListingInfoLinearLayout.setOnClickListener(view -> refresh()); mFetchUserListingInfoLinearLayout.setOnClickListener(view -> refresh());
showErrorView(R.string.search_users_error); showErrorView(R.string.search_users_error);
@ -146,7 +147,7 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
} }
private void showErrorView(int stringResId) { private void showErrorView(int stringResId) {
if(getActivity() != null && isAdded()) { if (getActivity() != null && isAdded()) {
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);
mFetchUserListingInfoLinearLayout.setVisibility(View.VISIBLE); mFetchUserListingInfoLinearLayout.setVisibility(View.VISIBLE);
mFetchUserListingInfoTextView.setText(stringResId); mFetchUserListingInfoTextView.setText(stringResId);

View File

@ -26,22 +26,19 @@ import ml.docilealligator.infinityforreddit.R;
*/ */
public class UserThingSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment { public class UserThingSortTypeBottomSheetFragment extends RoundedBottomSheetDialogFragment {
public interface UserThingSortTypeSelectionCallback {
void userThingSortTypeSelected(String sortType);
}
static final String EXTRA_NO_BEST_TYPE = "ENBT"; static final String EXTRA_NO_BEST_TYPE = "ENBT";
@BindView(R.id.new_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
@BindView(R.id.new_type_text_view_user_thing_sort_type_bottom_sheet_fragment) TextView newTypeTextView; TextView newTypeTextView;
@BindView(R.id.hot_type_text_view_user_thing_sort_type_bottom_sheet_fragment) TextView hotTypeTextView; @BindView(R.id.hot_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
@BindView(R.id.top_type_text_view_user_thing_sort_type_bottom_sheet_fragment) TextView topTypeTextView; TextView hotTypeTextView;
@BindView(R.id.controversial_type_text_view_user_thing_sort_type_bottom_sheet_fragment) TextView controversialTypeTextView; @BindView(R.id.top_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
TextView topTypeTextView;
@BindView(R.id.controversial_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
TextView controversialTypeTextView;
public UserThingSortTypeBottomSheetFragment() { public UserThingSortTypeBottomSheetFragment() {
// Required empty public constructor // Required empty public constructor
} }
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
@ -51,34 +48,34 @@ public class UserThingSortTypeBottomSheetFragment extends RoundedBottomSheetDial
Activity activity = getActivity(); Activity activity = getActivity();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
&& (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) { && (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) != Configuration.UI_MODE_NIGHT_YES) {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR); rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
} }
newTypeTextView.setOnClickListener(view -> { newTypeTextView.setOnClickListener(view -> {
if(activity != null) { if (activity != null) {
((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_NEW); ((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_NEW);
} }
dismiss(); dismiss();
}); });
hotTypeTextView.setOnClickListener(view -> { hotTypeTextView.setOnClickListener(view -> {
if(activity != null) { if (activity != null) {
((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_HOT); ((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_HOT);
} }
dismiss(); dismiss();
}); });
topTypeTextView.setOnClickListener(view -> { topTypeTextView.setOnClickListener(view -> {
if(activity != null) { if (activity != null) {
((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_TOP); ((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_TOP);
} }
dismiss(); dismiss();
}); });
controversialTypeTextView.setOnClickListener(view -> { controversialTypeTextView.setOnClickListener(view -> {
if(activity != null) { if (activity != null) {
((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_CONTROVERSIAL); ((UserThingSortTypeSelectionCallback) activity).userThingSortTypeSelected(PostDataSource.SORT_TYPE_CONTROVERSIAL);
} }
dismiss(); dismiss();
@ -87,4 +84,9 @@ public class UserThingSortTypeBottomSheetFragment extends RoundedBottomSheetDial
return rootView; return rootView;
} }
public interface UserThingSortTypeSelectionCallback {
void userThingSortTypeSelected(String sortType);
}
} }

View File

@ -2,13 +2,23 @@ package ml.docilealligator.infinityforreddit;
public interface FragmentCommunicator { public interface FragmentCommunicator {
void refresh(); void refresh();
default void changeNSFW(boolean nsfw) {};
default void changeNSFW(boolean nsfw) {
}
default boolean startLazyMode() { default boolean startLazyMode() {
return false; return false;
} }
default void stopLazyMode() {}
default void resumeLazyMode(boolean resumeNow) {} default void stopLazyMode() {
default void pauseLazyMode(boolean startTimer) {} }
default void resumeLazyMode(boolean resumeNow) {
}
default void pauseLazyMode(boolean startTimer) {
}
default boolean isInLazyMode() { default boolean isInLazyMode() {
return false; return false;
} }

View File

@ -11,11 +11,6 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class HidePost { public class HidePost {
public interface HidePostListener {
void success();
void failed();
}
public static void hidePost(Retrofit oauthRetrofit, String accessToken, String fullname, public static void hidePost(Retrofit oauthRetrofit, String accessToken, String fullname,
HidePostListener hidePostListener) { HidePostListener hidePostListener) {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
@ -23,7 +18,7 @@ public class HidePost {
oauthRetrofit.create(RedditAPI.class).hide(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() { oauthRetrofit.create(RedditAPI.class).hide(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
hidePostListener.success(); hidePostListener.success();
} else { } else {
hidePostListener.failed(); hidePostListener.failed();
@ -44,7 +39,7 @@ public class HidePost {
oauthRetrofit.create(RedditAPI.class).unhide(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() { oauthRetrofit.create(RedditAPI.class).unhide(RedditUtils.getOAuthHeader(accessToken), params).enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
hidePostListener.success(); hidePostListener.success();
} else { } else {
hidePostListener.failed(); hidePostListener.failed();
@ -57,4 +52,10 @@ public class HidePost {
} }
}); });
} }
public interface HidePostListener {
void success();
void failed();
}
} }

View File

@ -1,7 +1,5 @@
package ml.docilealligator.infinityforreddit; package ml.docilealligator.infinityforreddit;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -58,13 +56,13 @@ class MessageDataSource extends PageKeyedDataSource<String, Message> {
FetchMessages.fetchMessagesAsync(oauthRetrofit, locale, accessToken, where, null, new FetchMessages.FetchMessagesListener() { FetchMessages.fetchMessagesAsync(oauthRetrofit, locale, accessToken, where, null, new FetchMessages.FetchMessagesListener() {
@Override @Override
public void fetchSuccess(ArrayList<Message> messages, @Nullable String after) { public void fetchSuccess(ArrayList<Message> messages, @Nullable String after) {
if(messages.size() == 0) { if (messages.size() == 0) {
hasPostLiveData.postValue(false); hasPostLiveData.postValue(false);
} else { } else {
hasPostLiveData.postValue(true); hasPostLiveData.postValue(true);
} }
if(after == null || after.equals("") || after.equals("null")) { if (after == null || after.equals("") || after.equals("null")) {
callback.onResult(messages, null, null); callback.onResult(messages, null, null);
} else { } else {
callback.onResult(messages, null, after); callback.onResult(messages, null, after);
@ -94,7 +92,7 @@ class MessageDataSource extends PageKeyedDataSource<String, Message> {
FetchMessages.fetchMessagesAsync(oauthRetrofit, locale, accessToken, where, params.key, new FetchMessages.FetchMessagesListener() { FetchMessages.fetchMessagesAsync(oauthRetrofit, locale, accessToken, where, params.key, new FetchMessages.FetchMessagesListener() {
@Override @Override
public void fetchSuccess(ArrayList<Message> messages, @Nullable String after) { public void fetchSuccess(ArrayList<Message> messages, @Nullable String after) {
if(after == null || after.equals("") || after.equals("null")) { if (after == null || after.equals("") || after.equals("null")) {
callback.onResult(messages, null); callback.onResult(messages, null);
} else { } else {
callback.onResult(messages, after); callback.onResult(messages, after);

View File

@ -1,29 +1,22 @@
package ml.docilealligator.infinityforreddit; package ml.docilealligator.infinityforreddit;
public class NetworkState { public class NetworkState {
public enum Status{ static final NetworkState LOADED;
LOADING, static final NetworkState LOADING;
SUCCESS,
FAILED
}
static {
LOADED = new NetworkState(Status.SUCCESS, "Success");
LOADING = new NetworkState(Status.LOADING, "Loading");
}
private final Status status; private final Status status;
private final String msg; private final String msg;
static final NetworkState LOADED;
static final NetworkState LOADING;
NetworkState(Status status, String msg) { NetworkState(Status status, String msg) {
this.status = status; this.status = status;
this.msg = msg; this.msg = msg;
} }
static {
LOADED=new NetworkState(Status.SUCCESS,"Success");
LOADING=new NetworkState(Status.LOADING,"Loading");
}
public Status getStatus() { public Status getStatus() {
return status; return status;
} }
@ -31,4 +24,10 @@ public class NetworkState {
public String getMsg() { public String getMsg() {
return msg; return msg;
} }
public enum Status {
LOADING,
SUCCESS,
FAILED
}
} }

View File

@ -7,16 +7,17 @@ import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
public class ParseAndSaveAccountInfo { public class ParseAndSaveAccountInfo {
public interface ParseAndSaveAccountInfoListener {
void onParseMyInfoSuccess(String name, String profileImageUrl, String bannerImageUrl, int karma);
void onParseMyInfoFail();
}
public static void parseAndSaveAccountInfo(String response, RedditDataRoomDatabase redditDataRoomDatabase, public static void parseAndSaveAccountInfo(String response, RedditDataRoomDatabase redditDataRoomDatabase,
ParseAndSaveAccountInfoListener parseAndSaveAccountInfoListener) { ParseAndSaveAccountInfoListener parseAndSaveAccountInfoListener) {
new ParseAndSaveAccountInfoAsyncTask(response, redditDataRoomDatabase, parseAndSaveAccountInfoListener).execute(); new ParseAndSaveAccountInfoAsyncTask(response, redditDataRoomDatabase, parseAndSaveAccountInfoListener).execute();
} }
public interface ParseAndSaveAccountInfoListener {
void onParseMyInfoSuccess(String name, String profileImageUrl, String bannerImageUrl, int karma);
void onParseMyInfoFail();
}
private static class ParseAndSaveAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParseAndSaveAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONObject jsonResponse; private JSONObject jsonResponse;
private RedditDataRoomDatabase redditDataRoomDatabase; private RedditDataRoomDatabase redditDataRoomDatabase;
@ -29,7 +30,7 @@ public class ParseAndSaveAccountInfo {
private int karma; private int karma;
ParseAndSaveAccountInfoAsyncTask(String response, RedditDataRoomDatabase redditDataRoomDatabase, ParseAndSaveAccountInfoAsyncTask(String response, RedditDataRoomDatabase redditDataRoomDatabase,
ParseAndSaveAccountInfoListener parseAndSaveAccountInfoListener){ ParseAndSaveAccountInfoListener parseAndSaveAccountInfoListener) {
try { try {
jsonResponse = new JSONObject(response); jsonResponse = new JSONObject(response);
this.redditDataRoomDatabase = redditDataRoomDatabase; this.redditDataRoomDatabase = redditDataRoomDatabase;
@ -45,7 +46,7 @@ public class ParseAndSaveAccountInfo {
try { try {
name = jsonResponse.getString(JSONUtils.NAME_KEY); name = jsonResponse.getString(JSONUtils.NAME_KEY);
profileImageUrl = Html.fromHtml(jsonResponse.getString(JSONUtils.ICON_IMG_KEY)).toString(); profileImageUrl = Html.fromHtml(jsonResponse.getString(JSONUtils.ICON_IMG_KEY)).toString();
if(!jsonResponse.isNull(JSONUtils.SUBREDDIT_KEY)) { if (!jsonResponse.isNull(JSONUtils.SUBREDDIT_KEY)) {
bannerImageUrl = Html.fromHtml(jsonResponse.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.BANNER_IMG_KEY)).toString(); bannerImageUrl = Html.fromHtml(jsonResponse.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.BANNER_IMG_KEY)).toString();
} }
int linkKarma = jsonResponse.getInt(JSONUtils.LINK_KARMA_KEY); int linkKarma = jsonResponse.getInt(JSONUtils.LINK_KARMA_KEY);
@ -61,7 +62,7 @@ public class ParseAndSaveAccountInfo {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
parseAndSaveAccountInfoListener.onParseMyInfoSuccess(name, profileImageUrl, bannerImageUrl, karma); parseAndSaveAccountInfoListener.onParseMyInfoSuccess(name, profileImageUrl, bannerImageUrl, karma);
} else { } else {
parseAndSaveAccountInfoListener.onParseMyInfoFail(); parseAndSaveAccountInfoListener.onParseMyInfoFail();

View File

@ -19,17 +19,6 @@ import static ml.docilealligator.infinityforreddit.CommentData.VOTE_TYPE_NO_VOTE
import static ml.docilealligator.infinityforreddit.CommentData.VOTE_TYPE_UPVOTE; import static ml.docilealligator.infinityforreddit.CommentData.VOTE_TYPE_UPVOTE;
public class ParseComment { public class ParseComment {
public interface ParseCommentListener {
void onParseCommentSuccess(ArrayList<CommentData> expandedComments, String parentId,
ArrayList<String> moreChildrenFullnames);
void onParseCommentFailed();
}
interface ParseSentCommentListener {
void onParseSentCommentSuccess(CommentData commentData);
void onParseSentCommentFailed(@Nullable String errorMessage);
}
public static void parseComment(String response, ArrayList<CommentData> commentData, Locale locale, public static void parseComment(String response, ArrayList<CommentData> commentData, Locale locale,
ParseCommentListener parseCommentListener) { ParseCommentListener parseCommentListener) {
try { try {
@ -61,6 +50,150 @@ public class ParseComment {
new ParseSentCommentAsyncTask(response, depth, locale, parseSentCommentListener).execute(); new ParseSentCommentAsyncTask(response, depth, locale, parseSentCommentListener).execute();
} }
private static void parseCommentRecursion(JSONArray comments, ArrayList<CommentData> newCommentData,
ArrayList<String> moreChildrenFullnames, int depth, Locale locale) throws JSONException {
int actualCommentLength;
if (comments.length() == 0) {
return;
}
JSONObject more = comments.getJSONObject(comments.length() - 1).getJSONObject(JSONUtils.DATA_KEY);
//Maybe moreChildrenFullnames contain only commentsJSONArray and no more info
if (more.has(JSONUtils.COUNT_KEY)) {
JSONArray childrenArray = more.getJSONArray(JSONUtils.CHILDREN_KEY);
for (int i = 0; i < childrenArray.length(); i++) {
moreChildrenFullnames.add("t1_" + childrenArray.getString(i));
}
actualCommentLength = comments.length() - 1;
} else {
actualCommentLength = comments.length();
}
for (int i = 0; i < actualCommentLength; i++) {
JSONObject data = comments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
CommentData singleComment = parseSingleComment(data, depth, locale);
if (data.get(JSONUtils.REPLIES_KEY) instanceof JSONObject) {
JSONArray childrenArray = data.getJSONObject(JSONUtils.REPLIES_KEY)
.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
ArrayList<CommentData> children = new ArrayList<>();
ArrayList<String> nextMoreChildrenFullnames = new ArrayList<>();
parseCommentRecursion(childrenArray, children, nextMoreChildrenFullnames, singleComment.getDepth(),
locale);
singleComment.addChildren(children);
singleComment.setMoreChildrenFullnames(nextMoreChildrenFullnames);
}
newCommentData.add(singleComment);
}
}
private static void expandChildren(ArrayList<CommentData> comments, ArrayList<CommentData> visibleComments) {
for (CommentData c : comments) {
visibleComments.add(c);
if (c.hasReply()) {
c.setExpanded(true);
expandChildren(c.getChildren(), visibleComments);
}
if (c.hasMoreChildrenFullnames() && c.getMoreChildrenFullnames().size() > c.getMoreChildrenStartingIndex()) {
//Add a load more placeholder
CommentData placeholder = new CommentData(c.getFullName(), c.getDepth() + 1);
visibleComments.add(placeholder);
c.addChild(placeholder, c.getChildren().size());
}
}
}
static CommentData parseSingleComment(JSONObject singleCommentData, int depth, Locale locale) throws JSONException {
String id = singleCommentData.getString(JSONUtils.ID_KEY);
String fullName = singleCommentData.getString(JSONUtils.NAME_KEY);
String author = singleCommentData.getString(JSONUtils.AUTHOR_KEY);
String linkAuthor = singleCommentData.has(JSONUtils.LINK_AUTHOR_KEY) ? singleCommentData.getString(JSONUtils.LINK_AUTHOR_KEY) : null;
String linkId = singleCommentData.getString(JSONUtils.LINK_ID_KEY).substring(3);
String subredditName = singleCommentData.getString(JSONUtils.SUBREDDIT_KEY);
String parentId = singleCommentData.getString(JSONUtils.PARENT_ID_KEY);
boolean isSubmitter = singleCommentData.getBoolean(JSONUtils.IS_SUBMITTER_KEY);
String distinguished = singleCommentData.getString(JSONUtils.DISTINGUISHED_KEY);
String commentContent = "";
if (!singleCommentData.isNull(JSONUtils.BODY_KEY)) {
commentContent = Utils.addSubredditAndUserLink(singleCommentData.getString(JSONUtils.BODY_KEY).trim());
}
String permalink = Html.fromHtml(singleCommentData.getString(JSONUtils.PERMALINK_KEY)).toString();
int score = singleCommentData.getInt(JSONUtils.SCORE_KEY);
int voteType;
if (singleCommentData.isNull(JSONUtils.LIKES_KEY)) {
voteType = VOTE_TYPE_NO_VOTE;
} else {
voteType = singleCommentData.getBoolean(JSONUtils.LIKES_KEY) ? VOTE_TYPE_UPVOTE : VOTE_TYPE_DOWNVOTE;
score -= voteType;
}
long submitTime = singleCommentData.getLong(JSONUtils.CREATED_UTC_KEY) * 1000;
boolean scoreHidden = singleCommentData.getBoolean(JSONUtils.SCORE_HIDDEN_KEY);
boolean saved = singleCommentData.getBoolean(JSONUtils.SAVED_KEY);
Calendar submitTimeCalendar = Calendar.getInstance();
submitTimeCalendar.setTimeInMillis(submitTime);
String formattedSubmitTime = new SimpleDateFormat("MMM d, yyyy, HH:mm",
locale).format(submitTimeCalendar.getTime());
if (singleCommentData.has(JSONUtils.DEPTH_KEY)) {
depth = singleCommentData.getInt(JSONUtils.DEPTH_KEY);
}
boolean collapsed = singleCommentData.getBoolean(JSONUtils.COLLAPSED_KEY);
boolean hasReply = !(singleCommentData.get(JSONUtils.REPLIES_KEY) instanceof String);
return new CommentData(id, fullName, author, linkAuthor, formattedSubmitTime, commentContent,
linkId, subredditName, parentId, score, voteType, isSubmitter, distinguished,
permalink, depth, collapsed, hasReply, scoreHidden, saved);
}
@Nullable
private static String parseSentCommentErrorMessage(String response) {
try {
JSONObject responseObject = new JSONObject(response).getJSONObject(JSONUtils.JSON_KEY);
if (responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() != 0) {
JSONArray error = responseObject.getJSONArray(JSONUtils.ERRORS_KEY)
.getJSONArray(responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() - 1);
if (error.length() != 0) {
String errorString;
if (error.length() >= 2) {
errorString = error.getString(1);
} else {
errorString = error.getString(0);
}
return errorString.substring(0, 1).toUpperCase() + errorString.substring(1);
} else {
return null;
}
} else {
return null;
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public interface ParseCommentListener {
void onParseCommentSuccess(ArrayList<CommentData> expandedComments, String parentId,
ArrayList<String> moreChildrenFullnames);
void onParseCommentFailed();
}
interface ParseSentCommentListener {
void onParseSentCommentSuccess(CommentData commentData);
void onParseSentCommentFailed(@Nullable String errorMessage);
}
private static class ParseCommentAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParseCommentAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONArray commentsJSONArray; private JSONArray commentsJSONArray;
private ArrayList<CommentData> comments; private ArrayList<CommentData> comments;
@ -74,7 +207,7 @@ public class ParseComment {
private boolean parseFailed; private boolean parseFailed;
ParseCommentAsyncTask(JSONArray commentsJSONArray, ArrayList<CommentData> comments, Locale locale, ParseCommentAsyncTask(JSONArray commentsJSONArray, ArrayList<CommentData> comments, Locale locale,
@Nullable String parentId, int depth, ParseCommentListener parseCommentListener){ @Nullable String parentId, int depth, ParseCommentListener parseCommentListener) {
this.commentsJSONArray = commentsJSONArray; this.commentsJSONArray = commentsJSONArray;
this.comments = comments; this.comments = comments;
newComments = new ArrayList<>(); newComments = new ArrayList<>();
@ -100,7 +233,7 @@ public class ParseComment {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
comments.addAll(expandedNewComments); comments.addAll(expandedNewComments);
parseCommentListener.onParseCommentSuccess(comments, parentId, moreChildrenFullnames); parseCommentListener.onParseCommentSuccess(comments, parentId, moreChildrenFullnames);
} else { } else {
@ -109,64 +242,6 @@ public class ParseComment {
} }
} }
private static void parseCommentRecursion(JSONArray comments, ArrayList<CommentData> newCommentData,
ArrayList<String> moreChildrenFullnames, int depth, Locale locale) throws JSONException {
int actualCommentLength;
if(comments.length() == 0) {
return;
}
JSONObject more = comments.getJSONObject(comments.length() - 1).getJSONObject(JSONUtils.DATA_KEY);
//Maybe moreChildrenFullnames contain only commentsJSONArray and no more info
if(more.has(JSONUtils.COUNT_KEY)) {
JSONArray childrenArray = more.getJSONArray(JSONUtils.CHILDREN_KEY);
for(int i = 0; i < childrenArray.length(); i++) {
moreChildrenFullnames.add("t1_" + childrenArray.getString(i));
}
actualCommentLength = comments.length() - 1;
} else {
actualCommentLength = comments.length();
}
for (int i = 0; i < actualCommentLength; i++) {
JSONObject data = comments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
CommentData singleComment = parseSingleComment(data, depth, locale);
if(data.get(JSONUtils.REPLIES_KEY) instanceof JSONObject) {
JSONArray childrenArray = data.getJSONObject(JSONUtils.REPLIES_KEY)
.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
ArrayList<CommentData> children = new ArrayList<>();
ArrayList<String> nextMoreChildrenFullnames = new ArrayList<>();
parseCommentRecursion(childrenArray, children, nextMoreChildrenFullnames, singleComment.getDepth(),
locale);
singleComment.addChildren(children);
singleComment.setMoreChildrenFullnames(nextMoreChildrenFullnames);
}
newCommentData.add(singleComment);
}
}
private static void expandChildren(ArrayList<CommentData> comments, ArrayList<CommentData> visibleComments) {
for(CommentData c : comments) {
visibleComments.add(c);
if(c.hasReply()) {
c.setExpanded(true);
expandChildren(c.getChildren(), visibleComments);
}
if(c.hasMoreChildrenFullnames() && c.getMoreChildrenFullnames().size() > c.getMoreChildrenStartingIndex()) {
//Add a load more placeholder
CommentData placeholder = new CommentData(c.getFullName(), c.getDepth() + 1);
visibleComments.add(placeholder);
c.addChild(placeholder, c.getChildren().size());
}
}
}
private static class ParseSentCommentAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParseSentCommentAsyncTask extends AsyncTask<Void, Void, Void> {
private String response; private String response;
private int depth; private int depth;
@ -200,84 +275,11 @@ public class ParseComment {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
if(parseFailed) { if (parseFailed) {
parseSentCommentListener.onParseSentCommentFailed(errorMessage); parseSentCommentListener.onParseSentCommentFailed(errorMessage);
} else { } else {
parseSentCommentListener.onParseSentCommentSuccess(commentData); parseSentCommentListener.onParseSentCommentSuccess(commentData);
} }
} }
} }
static CommentData parseSingleComment(JSONObject singleCommentData, int depth, Locale locale) throws JSONException {
String id = singleCommentData.getString(JSONUtils.ID_KEY);
String fullName = singleCommentData.getString(JSONUtils.NAME_KEY);
String author = singleCommentData.getString(JSONUtils.AUTHOR_KEY);
String linkAuthor = singleCommentData.has(JSONUtils.LINK_AUTHOR_KEY) ? singleCommentData.getString(JSONUtils.LINK_AUTHOR_KEY) : null;
String linkId = singleCommentData.getString(JSONUtils.LINK_ID_KEY).substring(3);
String subredditName = singleCommentData.getString(JSONUtils.SUBREDDIT_KEY);
String parentId = singleCommentData.getString(JSONUtils.PARENT_ID_KEY);
boolean isSubmitter = singleCommentData.getBoolean(JSONUtils.IS_SUBMITTER_KEY);
String distinguished = singleCommentData.getString(JSONUtils.DISTINGUISHED_KEY);
String commentContent = "";
if(!singleCommentData.isNull(JSONUtils.BODY_KEY)) {
commentContent = Utils.addSubredditAndUserLink(singleCommentData.getString(JSONUtils.BODY_KEY).trim());
}
String permalink = Html.fromHtml(singleCommentData.getString(JSONUtils.PERMALINK_KEY)).toString();
int score = singleCommentData.getInt(JSONUtils.SCORE_KEY);
int voteType;
if(singleCommentData.isNull(JSONUtils.LIKES_KEY)) {
voteType = VOTE_TYPE_NO_VOTE;
} else {
voteType = singleCommentData.getBoolean(JSONUtils.LIKES_KEY) ? VOTE_TYPE_UPVOTE : VOTE_TYPE_DOWNVOTE;
score -= voteType;
}
long submitTime = singleCommentData.getLong(JSONUtils.CREATED_UTC_KEY) * 1000;
boolean scoreHidden = singleCommentData.getBoolean(JSONUtils.SCORE_HIDDEN_KEY);
boolean saved = singleCommentData.getBoolean(JSONUtils.SAVED_KEY);
Calendar submitTimeCalendar = Calendar.getInstance();
submitTimeCalendar.setTimeInMillis(submitTime);
String formattedSubmitTime = new SimpleDateFormat("MMM d, yyyy, HH:mm",
locale).format(submitTimeCalendar.getTime());
if(singleCommentData.has(JSONUtils.DEPTH_KEY)) {
depth = singleCommentData.getInt(JSONUtils.DEPTH_KEY);
}
boolean collapsed = singleCommentData.getBoolean(JSONUtils.COLLAPSED_KEY);
boolean hasReply = !(singleCommentData.get(JSONUtils.REPLIES_KEY) instanceof String);
return new CommentData(id, fullName, author, linkAuthor, formattedSubmitTime, commentContent,
linkId, subredditName, parentId, score, voteType, isSubmitter, distinguished,
permalink, depth, collapsed, hasReply, scoreHidden, saved);
}
@Nullable
private static String parseSentCommentErrorMessage(String response) {
try {
JSONObject responseObject = new JSONObject(response).getJSONObject(JSONUtils.JSON_KEY);
if(responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() != 0) {
JSONArray error = responseObject.getJSONArray(JSONUtils.ERRORS_KEY)
.getJSONArray(responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() - 1);
if(error.length() != 0) {
String errorString;
if(error.length() >= 2) {
errorString = error.getString(1);
} else {
errorString = error.getString(0);
}
return errorString.substring(0, 1).toUpperCase() + errorString.substring(1);
} else {
return null;
}
} else {
return null;
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
} }

View File

@ -19,16 +19,6 @@ import ml.docilealligator.infinityforreddit.Fragment.PostFragment;
*/ */
public class ParsePost { public class ParsePost {
interface ParsePostsListingListener {
void onParsePostsListingSuccess(ArrayList<Post> newPostData, String lastItem);
void onParsePostsListingFail();
}
public interface ParsePostListener {
void onParsePostSuccess(Post post);
void onParsePostFail();
}
static void parsePosts(String response, Locale locale, int nPosts, int filter, boolean nsfw, static void parsePosts(String response, Locale locale, int nPosts, int filter, boolean nsfw,
ParsePostsListingListener parsePostsListingListener) { ParsePostsListingListener parsePostsListingListener) {
new ParsePostDataAsyncTask(response, locale, nPosts, filter, nsfw, parsePostsListingListener).execute(); new ParsePostDataAsyncTask(response, locale, nPosts, filter, nsfw, parsePostsListingListener).execute();
@ -38,6 +28,227 @@ public class ParsePost {
new ParsePostDataAsyncTask(response, locale, true, parsePostListener).execute(); new ParsePostDataAsyncTask(response, locale, true, parsePostListener).execute();
} }
private static Post parseBasicData(JSONObject data, Locale locale) throws JSONException {
String id = data.getString(JSONUtils.ID_KEY);
String fullName = data.getString(JSONUtils.NAME_KEY);
String subredditName = data.getString(JSONUtils.SUBREDDIT_KEY);
String subredditNamePrefixed = data.getString(JSONUtils.SUBREDDIT_NAME_PREFIX_KEY);
String author = data.getString(JSONUtils.AUTHOR_KEY);
long postTime = data.getLong(JSONUtils.CREATED_UTC_KEY) * 1000;
String title = data.getString(JSONUtils.TITLE_KEY);
int score = data.getInt(JSONUtils.SCORE_KEY);
int voteType;
int gilded = data.getInt(JSONUtils.GILDED_KEY);
int nComments = data.getInt(JSONUtils.NUM_COMMENTS_KEY);
boolean hidden = data.getBoolean(JSONUtils.HIDDEN_KEY);
boolean spoiler = data.getBoolean(JSONUtils.SPOILER_KEY);
boolean nsfw = data.getBoolean(JSONUtils.NSFW_KEY);
boolean stickied = data.getBoolean(JSONUtils.STICKIED_KEY);
boolean archived = data.getBoolean(JSONUtils.ARCHIVED_KEY);
boolean locked = data.getBoolean(JSONUtils.LOCKEC_KEY);
boolean saved = data.getBoolean(JSONUtils.SAVED_KEY);
String flair = null;
if (!data.isNull(JSONUtils.LINK_FLAIR_TEXT_KEY)) {
flair = data.getString(JSONUtils.LINK_FLAIR_TEXT_KEY);
}
if (data.isNull(JSONUtils.LIKES_KEY)) {
voteType = 0;
} else {
voteType = data.getBoolean(JSONUtils.LIKES_KEY) ? 1 : -1;
score -= voteType;
}
Calendar postTimeCalendar = Calendar.getInstance();
postTimeCalendar.setTimeInMillis(postTime);
String formattedPostTime = new SimpleDateFormat("MMM d, yyyy, HH:mm",
locale).format(postTimeCalendar.getTime());
String permalink = Html.fromHtml(data.getString(JSONUtils.PERMALINK_KEY)).toString();
String previewUrl = "";
int previewWidth = -1;
int previewHeight = -1;
if (data.has(JSONUtils.PREVIEW_KEY)) {
previewUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
previewWidth = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.WIDTH_KEY);
previewHeight = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.HEIGHT_KEY);
}
if (data.has(JSONUtils.CROSSPOST_PARENT_LIST)) {
//Cross post
data = data.getJSONArray(JSONUtils.CROSSPOST_PARENT_LIST).getJSONObject(0);
Post crosspostParent = parseBasicData(data, locale);
Post post = parseData(data, permalink, id, fullName, subredditName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, true);
post.setCrosspostParentId(crosspostParent.getId());
return post;
} else {
return parseData(data, permalink, id, fullName, subredditName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, false);
}
}
private static Post parseData(JSONObject data, String permalink, String id, String fullName,
String subredditName, String subredditNamePrefixed, String author,
String formattedPostTime, String title, String previewUrl, int previewWidth,
int previewHeight, int score, int voteType, int gilded, int nComments,
String flair, boolean hidden, boolean spoiler, boolean nsfw, boolean stickied,
boolean archived, boolean locked, boolean saved, boolean isCrosspost) throws JSONException {
Post post;
boolean isVideo = data.getBoolean(JSONUtils.IS_VIDEO_KEY);
String url = Html.fromHtml(data.getString(JSONUtils.URL_KEY)).toString();
if (!data.has(JSONUtils.PREVIEW_KEY) && previewUrl.equals("")) {
if (url.contains(permalink)) {
//Text post
int postType = Post.TEXT_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, permalink, score, postType, voteType, gilded, nComments, flair, hidden,
spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if (data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
} else {
//No preview link post
int postType = Post.NO_PREVIEW_LINK_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType, voteType, gilded, nComments,
flair, hidden, spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if (data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
}
} else {
if (previewUrl.equals("")) {
previewUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY)).toString();
}
if (isVideo) {
//Video post
JSONObject redditVideoObject = data.getJSONObject(JSONUtils.MEDIA_KEY).getJSONObject(JSONUtils.REDDIT_VIDEO_KEY);
int postType = Post.VIDEO_TYPE;
String videoUrl = Html.fromHtml(redditVideoObject.getString(JSONUtils.HLS_URL_KEY)).toString();
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, permalink, score, postType, voteType, gilded, nComments,
flair, hidden, spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
post.setVideoUrl(videoUrl);
} else if (data.has(JSONUtils.PREVIEW_KEY)) {
if (data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
//Gif video post (HLS)
int postType = Post.GIF_VIDEO_TYPE;
String videoUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY)
.getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.HLS_URL_KEY)).toString();
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, previewUrl, permalink, score, postType, voteType,
gilded, nComments, flair, hidden, spoiler, nsfw, stickied, archived,
locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
post.setVideoUrl(videoUrl);
} else {
if (url.endsWith("jpg") || url.endsWith("png")) {
//Image post
int postType = Post.IMAGE_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, url, url, permalink, score, postType,
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
} else {
if (url.contains(permalink)) {
//Text post but with a preview
int postType = Post.TEXT_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, permalink, score, postType, voteType,
gilded, nComments, flair, hidden, spoiler, nsfw, stickied, archived,
locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
if (data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
} else {
//Link post
int postType = Post.LINK_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, previewUrl, url, permalink, score, postType,
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, isCrosspost);
if (data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
}
}
}
} else {
if (url.endsWith("jpg") || url.endsWith("png")) {
//Image post
int postType = Post.IMAGE_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, previewUrl, url, permalink, score, postType,
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
} else {
//CP No Preview Link post
int postType = Post.NO_PREVIEW_LINK_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, url, url, permalink, score, postType, voteType,
gilded, nComments, flair, hidden, spoiler, nsfw, stickied, archived, locked,
saved, isCrosspost);
}
}
}
return post;
}
interface ParsePostsListingListener {
void onParsePostsListingSuccess(ArrayList<Post> newPostData, String lastItem);
void onParsePostsListingFail();
}
public interface ParsePostListener {
void onParsePostSuccess(Post post);
void onParsePostFail();
}
private static class ParsePostDataAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParsePostDataAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONArray allData; private JSONArray allData;
private Locale locale; private Locale locale;
@ -86,7 +297,7 @@ public class ParsePost {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
if(parseFailed) { if (parseFailed) {
return null; return null;
} }
@ -115,17 +326,17 @@ public class ParsePost {
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
try { try {
if(allData.getJSONObject(i).getString(JSONUtils.KIND_KEY).equals("t3")) { if (allData.getJSONObject(i).getString(JSONUtils.KIND_KEY).equals("t3")) {
JSONObject data = allData.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); JSONObject data = allData.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
Post post = parseBasicData(data, locale); Post post = parseBasicData(data, locale);
if(post != null && !(!nsfw && post.isNSFW())) { if (post != null && !(!nsfw && post.isNSFW())) {
if (filter == PostFragment.EXTRA_NO_FILTER) { if (filter == PostFragment.EXTRA_NO_FILTER) {
newPosts.add(post); newPosts.add(post);
} else if (filter == post.getPostType()) { } else if (filter == post.getPostType()) {
newPosts.add(post); newPosts.add(post);
} else if (filter == Post.LINK_TYPE && post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { } else if (filter == Post.LINK_TYPE && post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) {
newPosts.add(post); newPosts.add(post);
} else if(filter == Post.NSFW_TYPE && post.isNSFW()) { } else if (filter == Post.NSFW_TYPE && post.isNSFW()) {
newPosts.add(post); newPosts.add(post);
} }
} }
@ -140,14 +351,14 @@ public class ParsePost {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
if(newPosts != null) { if (newPosts != null) {
parsePostsListingListener.onParsePostsListingSuccess(newPosts, lastItem); parsePostsListingListener.onParsePostsListingSuccess(newPosts, lastItem);
} else { } else {
parsePostListener.onParsePostSuccess(post); parsePostListener.onParsePostSuccess(post);
} }
} else { } else {
if(parsePostsListingListener != null) { if (parsePostsListingListener != null) {
parsePostsListingListener.onParsePostsListingFail(); parsePostsListingListener.onParsePostsListingFail();
} else { } else {
parsePostListener.onParsePostFail(); parsePostListener.onParsePostFail();
@ -155,213 +366,4 @@ public class ParsePost {
} }
} }
} }
private static Post parseBasicData(JSONObject data, Locale locale) throws JSONException {
String id = data.getString(JSONUtils.ID_KEY);
String fullName = data.getString(JSONUtils.NAME_KEY);
String subredditName = data.getString(JSONUtils.SUBREDDIT_KEY);
String subredditNamePrefixed = data.getString(JSONUtils.SUBREDDIT_NAME_PREFIX_KEY);
String author = data.getString(JSONUtils.AUTHOR_KEY);
long postTime = data.getLong(JSONUtils.CREATED_UTC_KEY) * 1000;
String title = data.getString(JSONUtils.TITLE_KEY);
int score = data.getInt(JSONUtils.SCORE_KEY);
int voteType;
int gilded = data.getInt(JSONUtils.GILDED_KEY);
int nComments = data.getInt(JSONUtils.NUM_COMMENTS_KEY);
boolean hidden = data.getBoolean(JSONUtils.HIDDEN_KEY);
boolean spoiler = data.getBoolean(JSONUtils.SPOILER_KEY);
boolean nsfw = data.getBoolean(JSONUtils.NSFW_KEY);
boolean stickied = data.getBoolean(JSONUtils.STICKIED_KEY);
boolean archived = data.getBoolean(JSONUtils.ARCHIVED_KEY);
boolean locked = data.getBoolean(JSONUtils.LOCKEC_KEY);
boolean saved = data.getBoolean(JSONUtils.SAVED_KEY);
String flair = null;
if(!data.isNull(JSONUtils.LINK_FLAIR_TEXT_KEY)) {
flair = data.getString(JSONUtils.LINK_FLAIR_TEXT_KEY);
}
if(data.isNull(JSONUtils.LIKES_KEY)) {
voteType = 0;
} else {
voteType = data.getBoolean(JSONUtils.LIKES_KEY) ? 1 : -1;
score -= voteType;
}
Calendar postTimeCalendar = Calendar.getInstance();
postTimeCalendar.setTimeInMillis(postTime);
String formattedPostTime = new SimpleDateFormat("MMM d, yyyy, HH:mm",
locale).format(postTimeCalendar.getTime());
String permalink = Html.fromHtml(data.getString(JSONUtils.PERMALINK_KEY)).toString();
String previewUrl = "";
int previewWidth = -1;
int previewHeight = -1;
if(data.has(JSONUtils.PREVIEW_KEY)) {
previewUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
previewWidth = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.WIDTH_KEY);
previewHeight = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.HEIGHT_KEY);
}
if(data.has(JSONUtils.CROSSPOST_PARENT_LIST)) {
//Cross post
data = data.getJSONArray(JSONUtils.CROSSPOST_PARENT_LIST).getJSONObject(0);
Post crosspostParent = parseBasicData(data, locale);
Post post = parseData(data, permalink, id, fullName, subredditName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, true);
post.setCrosspostParentId(crosspostParent.getId());
return post;
} else {
return parseData(data, permalink, id, fullName, subredditName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, false);
}
}
private static Post parseData(JSONObject data, String permalink, String id, String fullName,
String subredditName, String subredditNamePrefixed, String author,
String formattedPostTime, String title, String previewUrl, int previewWidth,
int previewHeight, int score, int voteType, int gilded, int nComments,
String flair, boolean hidden, boolean spoiler, boolean nsfw, boolean stickied,
boolean archived, boolean locked, boolean saved, boolean isCrosspost) throws JSONException {
Post post;
boolean isVideo = data.getBoolean(JSONUtils.IS_VIDEO_KEY);
String url = Html.fromHtml(data.getString(JSONUtils.URL_KEY)).toString();
if(!data.has(JSONUtils.PREVIEW_KEY) && previewUrl.equals("")) {
if(url.contains(permalink)) {
//Text post
int postType = Post.TEXT_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, permalink, score, postType, voteType, gilded, nComments, flair, hidden,
spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
} else {
//No preview link post
int postType = Post.NO_PREVIEW_LINK_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType, voteType, gilded, nComments,
flair, hidden, spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
}
} else {
if(previewUrl.equals("")) {
previewUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY)).toString();
}
if(isVideo) {
//Video post
JSONObject redditVideoObject = data.getJSONObject(JSONUtils.MEDIA_KEY).getJSONObject(JSONUtils.REDDIT_VIDEO_KEY);
int postType = Post.VIDEO_TYPE;
String videoUrl = Html.fromHtml(redditVideoObject.getString(JSONUtils.HLS_URL_KEY)).toString();
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, permalink, score, postType, voteType, gilded, nComments,
flair, hidden, spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
post.setVideoUrl(videoUrl);
} else if(data.has(JSONUtils.PREVIEW_KEY)){
if(data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
//Gif video post (HLS)
int postType = Post.GIF_VIDEO_TYPE;
String videoUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY)
.getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.HLS_URL_KEY)).toString();
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, previewUrl, permalink, score, postType, voteType,
gilded, nComments, flair, hidden, spoiler, nsfw, stickied, archived,
locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
post.setVideoUrl(videoUrl);
} else {
if (url.endsWith("jpg") || url.endsWith("png")) {
//Image post
int postType = Post.IMAGE_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, url, url, permalink, score, postType,
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
} else {
if (url.contains(permalink)) {
//Text post but with a preview
int postType = Post.TEXT_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, permalink, score, postType, voteType,
gilded, nComments, flair, hidden, spoiler, nsfw, stickied, archived,
locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
} else {
//Link post
int postType = Post.LINK_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, previewUrl, url, permalink, score, postType,
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
post.setSelfText("");
} else {
post.setSelfText(Utils.addSubredditAndUserLink(data.getString(JSONUtils.SELFTEXT_KEY).trim()));
}
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
}
}
}
} else {
if (url.endsWith("jpg") || url.endsWith("png")) {
//Image post
int postType = Post.IMAGE_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, previewUrl, url, permalink, score, postType,
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
archived, locked, saved, isCrosspost);
post.setPreviewWidth(previewWidth);
post.setPreviewHeight(previewHeight);
} else {
//CP No Preview Link post
int postType = Post.NO_PREVIEW_LINK_TYPE;
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
formattedPostTime, title, url, url, permalink, score, postType, voteType,
gilded, nComments, flair, hidden, spoiler, nsfw, stickied, archived, locked,
saved, isCrosspost);
}
}
}
return post;
}
} }

View File

@ -11,16 +11,6 @@ import java.util.ArrayList;
import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData; import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData;
class ParseSubredditData { class ParseSubredditData {
interface ParseSubredditDataListener {
void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
void onParseSubredditDataFail();
}
interface ParseSubredditListingDataListener {
void onParseSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after);
void onParseSubredditListingDataFail();
}
static void parseSubredditData(String response, ParseSubredditDataListener parseSubredditDataListener) { static void parseSubredditData(String response, ParseSubredditDataListener parseSubredditDataListener) {
new ParseSubredditDataAsyncTask(response, parseSubredditDataListener).execute(); new ParseSubredditDataAsyncTask(response, parseSubredditDataListener).execute();
} }
@ -29,6 +19,51 @@ class ParseSubredditData {
new ParseSubredditListingDataAsyncTask(response, parseSubredditListingDataListener).execute(); new ParseSubredditListingDataAsyncTask(response, parseSubredditListingDataListener).execute();
} }
private static SubredditData parseSubredditData(JSONObject subredditDataJsonObject) throws JSONException {
String id = subredditDataJsonObject.getString(JSONUtils.NAME_KEY);
String subredditFullName = subredditDataJsonObject.getString(JSONUtils.DISPLAY_NAME);
String description = subredditDataJsonObject.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim();
String bannerImageUrl;
if (subredditDataJsonObject.isNull(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY)) {
bannerImageUrl = "";
} else {
bannerImageUrl = subredditDataJsonObject.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY);
}
if (bannerImageUrl.equals("") && !subredditDataJsonObject.isNull(JSONUtils.BANNER_IMG_KEY)) {
bannerImageUrl = subredditDataJsonObject.getString(JSONUtils.BANNER_IMG_KEY);
}
String iconUrl;
if (subredditDataJsonObject.isNull(JSONUtils.COMMUNITY_ICON_KEY)) {
iconUrl = "";
} else {
iconUrl = subredditDataJsonObject.getString(JSONUtils.COMMUNITY_ICON_KEY);
}
if (iconUrl.equals("") && !subredditDataJsonObject.isNull(JSONUtils.ICON_IMG_KEY)) {
iconUrl = subredditDataJsonObject.getString(JSONUtils.ICON_IMG_KEY);
}
int nSubscribers = 0;
if (!subredditDataJsonObject.isNull(JSONUtils.SUBSCRIBERS_KEY)) {
nSubscribers = subredditDataJsonObject.getInt(JSONUtils.SUBSCRIBERS_KEY);
}
return new SubredditData(id, subredditFullName, iconUrl, bannerImageUrl, description, nSubscribers);
}
interface ParseSubredditDataListener {
void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
void onParseSubredditDataFail();
}
interface ParseSubredditListingDataListener {
void onParseSubredditListingDataSuccess(ArrayList<SubredditData> subredditData, String after);
void onParseSubredditListingDataFail();
}
private static class ParseSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParseSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONObject jsonResponse; private JSONObject jsonResponse;
private boolean parseFailed; private boolean parseFailed;
@ -36,7 +71,7 @@ class ParseSubredditData {
private SubredditData subredditData; private SubredditData subredditData;
private int mNCurrentOnlineSubscribers; private int mNCurrentOnlineSubscribers;
ParseSubredditDataAsyncTask(String response, ParseSubredditDataListener parseSubredditDataListener){ ParseSubredditDataAsyncTask(String response, ParseSubredditDataListener parseSubredditDataListener) {
this.parseSubredditDataListener = parseSubredditDataListener; this.parseSubredditDataListener = parseSubredditDataListener;
try { try {
jsonResponse = new JSONObject(response); jsonResponse = new JSONObject(response);
@ -62,7 +97,7 @@ class ParseSubredditData {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
parseSubredditDataListener.onParseSubredditDataSuccess(subredditData, mNCurrentOnlineSubscribers); parseSubredditDataListener.onParseSubredditDataSuccess(subredditData, mNCurrentOnlineSubscribers);
} else { } else {
parseSubredditDataListener.onParseSubredditDataFail(); parseSubredditDataListener.onParseSubredditDataFail();
@ -77,7 +112,7 @@ class ParseSubredditData {
private ArrayList<SubredditData> subredditListingData; private ArrayList<SubredditData> subredditListingData;
private String after; private String after;
ParseSubredditListingDataAsyncTask(String response, ParseSubredditListingDataListener parseSubredditListingDataListener){ ParseSubredditListingDataAsyncTask(String response, ParseSubredditListingDataListener parseSubredditListingDataListener) {
this.parseSubredditListingDataListener = parseSubredditListingDataListener; this.parseSubredditListingDataListener = parseSubredditListingDataListener;
try { try {
jsonResponse = new JSONObject(response); jsonResponse = new JSONObject(response);
@ -92,10 +127,10 @@ class ParseSubredditData {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
try { try {
if(!parseFailed) { if (!parseFailed) {
JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY) JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY)
.getJSONArray(JSONUtils.CHILDREN_KEY); .getJSONArray(JSONUtils.CHILDREN_KEY);
for(int i = 0; i < children.length(); i++) { for (int i = 0; i < children.length(); i++) {
JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
SubredditData subredditData = parseSubredditData(data); SubredditData subredditData = parseSubredditData(data);
subredditListingData.add(subredditData); subredditListingData.add(subredditData);
@ -112,44 +147,11 @@ class ParseSubredditData {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
parseSubredditListingDataListener.onParseSubredditListingDataSuccess(subredditListingData, after); parseSubredditListingDataListener.onParseSubredditListingDataSuccess(subredditListingData, after);
} else { } else {
parseSubredditListingDataListener.onParseSubredditListingDataFail(); parseSubredditListingDataListener.onParseSubredditListingDataFail();
} }
} }
} }
private static SubredditData parseSubredditData(JSONObject subredditDataJsonObject) throws JSONException {
String id = subredditDataJsonObject.getString(JSONUtils.NAME_KEY);
String subredditFullName = subredditDataJsonObject.getString(JSONUtils.DISPLAY_NAME);
String description = subredditDataJsonObject.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim();
String bannerImageUrl;
if(subredditDataJsonObject.isNull(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY)) {
bannerImageUrl = "";
} else {
bannerImageUrl = subredditDataJsonObject.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY);
}
if(bannerImageUrl.equals("") && !subredditDataJsonObject.isNull(JSONUtils.BANNER_IMG_KEY)) {
bannerImageUrl= subredditDataJsonObject.getString(JSONUtils.BANNER_IMG_KEY);
}
String iconUrl;
if(subredditDataJsonObject.isNull(JSONUtils.COMMUNITY_ICON_KEY)) {
iconUrl = "";
} else {
iconUrl = subredditDataJsonObject.getString(JSONUtils.COMMUNITY_ICON_KEY);
}
if(iconUrl.equals("") && !subredditDataJsonObject.isNull(JSONUtils.ICON_IMG_KEY)) {
iconUrl = subredditDataJsonObject.getString(JSONUtils.ICON_IMG_KEY);
}
int nSubscribers = 0;
if(!subredditDataJsonObject.isNull(JSONUtils.SUBSCRIBERS_KEY)) {
nSubscribers = subredditDataJsonObject.getInt(JSONUtils.SUBSCRIBERS_KEY);
}
return new SubredditData(id, subredditFullName, iconUrl, bannerImageUrl, description, nSubscribers);
}
} }

View File

@ -13,14 +13,6 @@ import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.Subscrib
import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData; import ml.docilealligator.infinityforreddit.SubscribedUserDatabase.SubscribedUserData;
class ParseSubscribedThing { class ParseSubscribedThing {
interface ParseSubscribedSubredditsListener {
void onParseSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData,
String lastItem);
void onParseSubscribedSubredditsFail();
}
static void parseSubscribedSubreddits(String response, String accountName, static void parseSubscribedSubreddits(String response, String accountName,
ArrayList<SubscribedSubredditData> subscribedSubredditData, ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData, ArrayList<SubscribedUserData> subscribedUserData,
@ -30,6 +22,15 @@ class ParseSubscribedThing {
parseSubscribedSubredditsListener).execute(); parseSubscribedSubredditsListener).execute();
} }
interface ParseSubscribedSubredditsListener {
void onParseSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData,
String lastItem);
void onParseSubscribedSubredditsFail();
}
private static class ParseSubscribedSubredditsAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParseSubscribedSubredditsAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONObject jsonResponse; private JSONObject jsonResponse;
private String accountName; private String accountName;
@ -46,7 +47,7 @@ class ParseSubscribedThing {
ParseSubscribedSubredditsAsyncTask(String response, String accountName, ArrayList<SubscribedSubredditData> subscribedSubredditData, ParseSubscribedSubredditsAsyncTask(String response, String accountName, ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData, ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData, ArrayList<SubredditData> subredditData,
ParseSubscribedSubredditsListener parseSubscribedSubredditsListener){ ParseSubscribedSubredditsListener parseSubscribedSubredditsListener) {
try { try {
jsonResponse = new JSONObject(response); jsonResponse = new JSONObject(response);
this.accountName = accountName; this.accountName = accountName;
@ -68,32 +69,32 @@ class ParseSubscribedThing {
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
try { try {
JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
for(int i = 0; i < children.length(); i++) { for (int i = 0; i < children.length(); i++) {
JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
String name = data.getString(JSONUtils.DISPLAY_NAME); String name = data.getString(JSONUtils.DISPLAY_NAME);
String bannerImageUrl = data.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY); String bannerImageUrl = data.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY);
if(bannerImageUrl.equals("") || bannerImageUrl.equals("null")) { if (bannerImageUrl.equals("") || bannerImageUrl.equals("null")) {
bannerImageUrl= data.getString(JSONUtils.BANNER_IMG_KEY); bannerImageUrl = data.getString(JSONUtils.BANNER_IMG_KEY);
if(bannerImageUrl.equals("null")) { if (bannerImageUrl.equals("null")) {
bannerImageUrl = ""; bannerImageUrl = "";
} }
} }
String iconUrl = data.getString(JSONUtils.COMMUNITY_ICON_KEY); String iconUrl = data.getString(JSONUtils.COMMUNITY_ICON_KEY);
if(iconUrl.equals("") || iconUrl.equals("null")) { if (iconUrl.equals("") || iconUrl.equals("null")) {
iconUrl = data.getString(JSONUtils.ICON_IMG_KEY); iconUrl = data.getString(JSONUtils.ICON_IMG_KEY);
if(iconUrl.equals("null")) { if (iconUrl.equals("null")) {
iconUrl = ""; iconUrl = "";
} }
} }
String id = data.getString(JSONUtils.NAME_KEY); String id = data.getString(JSONUtils.NAME_KEY);
if(iconUrl.equals("") || iconUrl.equals("null")) { if (iconUrl.equals("") || iconUrl.equals("null")) {
iconUrl = data.getString(JSONUtils.COMMUNITY_ICON_KEY); iconUrl = data.getString(JSONUtils.COMMUNITY_ICON_KEY);
if(iconUrl.equals("null")) { if (iconUrl.equals("null")) {
iconUrl = ""; iconUrl = "";
} }
} }
if(data.getString(JSONUtils.SUBREDDIT_TYPE_KEY) if (data.getString(JSONUtils.SUBREDDIT_TYPE_KEY)
.equals(JSONUtils.SUBREDDIT_TYPE_VALUE_USER)) { .equals(JSONUtils.SUBREDDIT_TYPE_VALUE_USER)) {
//It's a user //It's a user
newSubscribedUserData.add(new SubscribedUserData(name.substring(2), iconUrl, accountName)); newSubscribedUserData.add(new SubscribedUserData(name.substring(2), iconUrl, accountName));
@ -115,7 +116,7 @@ class ParseSubscribedThing {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
subscribedSubredditData.addAll(newSubscribedSubredditData); subscribedSubredditData.addAll(newSubscribedSubredditData);
subscribedUserData.addAll(newSubscribedUserData); subscribedUserData.addAll(newSubscribedUserData);
subredditData.addAll(newSubredditData); subredditData.addAll(newSubredditData);

View File

@ -11,16 +11,6 @@ import java.util.ArrayList;
import ml.docilealligator.infinityforreddit.User.UserData; import ml.docilealligator.infinityforreddit.User.UserData;
public class ParseUserData { public class ParseUserData {
interface ParseUserDataListener {
void onParseUserDataSuccess(UserData userData);
void onParseUserDataFailed();
}
interface ParseUserListingDataListener {
void onParseUserListingDataSuccess(ArrayList<UserData> userData, String after);
void onParseUserListingDataFailed();
}
static void parseUserData(String response, ParseUserDataListener parseUserDataListener) { static void parseUserData(String response, ParseUserDataListener parseUserDataListener) {
new ParseUserDataAsyncTask(response, parseUserDataListener).execute(); new ParseUserDataAsyncTask(response, parseUserDataListener).execute();
} }
@ -29,6 +19,39 @@ public class ParseUserData {
new ParseUserListingDataAsyncTask(response, parseUserListingDataListener).execute(); new ParseUserListingDataAsyncTask(response, parseUserListingDataListener).execute();
} }
private static UserData parseUserDataBase(JSONObject userDataJson) throws JSONException {
userDataJson = userDataJson.getJSONObject(JSONUtils.DATA_KEY);
String userName = userDataJson.getString(JSONUtils.NAME_KEY);
String iconImageUrl = userDataJson.getString(JSONUtils.ICON_IMG_KEY);
String bannerImageUrl = "";
boolean canBeFollowed;
if (userDataJson.has(JSONUtils.SUBREDDIT_KEY) && !userDataJson.isNull(JSONUtils.SUBREDDIT_KEY)) {
bannerImageUrl = userDataJson.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.BANNER_IMG_KEY);
canBeFollowed = true;
} else {
canBeFollowed = false;
}
int linkKarma = userDataJson.getInt(JSONUtils.LINK_KARMA_KEY);
int commentKarma = userDataJson.getInt(JSONUtils.COMMENT_KARMA_KEY);
int karma = linkKarma + commentKarma;
boolean isGold = userDataJson.getBoolean(JSONUtils.IS_GOLD_KEY);
boolean isFriend = userDataJson.getBoolean(JSONUtils.IS_FRIEND_KEY);
return new UserData(userName, iconImageUrl, bannerImageUrl, karma, isGold, isFriend, canBeFollowed);
}
interface ParseUserDataListener {
void onParseUserDataSuccess(UserData userData);
void onParseUserDataFailed();
}
interface ParseUserListingDataListener {
void onParseUserListingDataSuccess(ArrayList<UserData> userData, String after);
void onParseUserListingDataFailed();
}
private static class ParseUserDataAsyncTask extends AsyncTask<Void, Void, Void> { private static class ParseUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONObject jsonResponse; private JSONObject jsonResponse;
private ParseUserDataListener parseUserDataListener; private ParseUserDataListener parseUserDataListener;
@ -36,7 +59,7 @@ public class ParseUserData {
private UserData userData; private UserData userData;
ParseUserDataAsyncTask(String response, ParseUserDataListener parseUserDataListener){ ParseUserDataAsyncTask(String response, ParseUserDataListener parseUserDataListener) {
try { try {
jsonResponse = new JSONObject(response); jsonResponse = new JSONObject(response);
this.parseUserDataListener = parseUserDataListener; this.parseUserDataListener = parseUserDataListener;
@ -60,7 +83,7 @@ public class ParseUserData {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
parseUserDataListener.onParseUserDataSuccess(userData); parseUserDataListener.onParseUserDataSuccess(userData);
} else { } else {
parseUserDataListener.onParseUserDataFailed(); parseUserDataListener.onParseUserDataFailed();
@ -77,7 +100,7 @@ public class ParseUserData {
private ArrayList<UserData> userDataArrayList; private ArrayList<UserData> userDataArrayList;
ParseUserListingDataAsyncTask(String response, ParseUserListingDataListener parseUserListingDataListener){ ParseUserListingDataAsyncTask(String response, ParseUserListingDataListener parseUserListingDataListener) {
this.parseUserListingDataListener = parseUserListingDataListener; this.parseUserListingDataListener = parseUserListingDataListener;
this.response = response; this.response = response;
try { try {
@ -93,10 +116,10 @@ public class ParseUserData {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
try { try {
if(!parseFailed) { if (!parseFailed) {
after = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY); after = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY);
JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
for(int i = 0; i < children.length(); i++) { for (int i = 0; i < children.length(); i++) {
userDataArrayList.add(parseUserDataBase(children.getJSONObject(i))); userDataArrayList.add(parseUserDataBase(children.getJSONObject(i)));
} }
} }
@ -109,10 +132,10 @@ public class ParseUserData {
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
if(!parseFailed) { if (!parseFailed) {
parseUserListingDataListener.onParseUserListingDataSuccess(userDataArrayList, after); parseUserListingDataListener.onParseUserListingDataSuccess(userDataArrayList, after);
} else { } else {
if(response.equals("\"{}\"")) { if (response.equals("\"{}\"")) {
parseUserListingDataListener.onParseUserListingDataSuccess(new ArrayList<>(), null); parseUserListingDataListener.onParseUserListingDataSuccess(new ArrayList<>(), null);
} else { } else {
parseUserListingDataListener.onParseUserListingDataFailed(); parseUserListingDataListener.onParseUserListingDataFailed();
@ -120,25 +143,4 @@ public class ParseUserData {
} }
} }
} }
private static UserData parseUserDataBase(JSONObject userDataJson) throws JSONException {
userDataJson = userDataJson.getJSONObject(JSONUtils.DATA_KEY);
String userName = userDataJson.getString(JSONUtils.NAME_KEY);
String iconImageUrl = userDataJson.getString(JSONUtils.ICON_IMG_KEY);
String bannerImageUrl = "";
boolean canBeFollowed;
if(userDataJson.has(JSONUtils.SUBREDDIT_KEY) && !userDataJson.isNull(JSONUtils.SUBREDDIT_KEY)) {
bannerImageUrl = userDataJson.getJSONObject(JSONUtils.SUBREDDIT_KEY).getString(JSONUtils.BANNER_IMG_KEY);
canBeFollowed = true;
} else {
canBeFollowed = false;
}
int linkKarma = userDataJson.getInt(JSONUtils.LINK_KARMA_KEY);
int commentKarma = userDataJson.getInt(JSONUtils.COMMENT_KARMA_KEY);
int karma = linkKarma + commentKarma;
boolean isGold = userDataJson.getBoolean(JSONUtils.IS_GOLD_KEY);
boolean isFriend = userDataJson.getBoolean(JSONUtils.IS_FRIEND_KEY);
return new UserData(userName, iconImageUrl, bannerImageUrl, karma, isGold, isFriend, canBeFollowed);
}
} }

View File

@ -15,7 +15,17 @@ public class Post implements Parcelable {
public static final int VIDEO_TYPE = 3; public static final int VIDEO_TYPE = 3;
public static final int GIF_VIDEO_TYPE = 4; public static final int GIF_VIDEO_TYPE = 4;
public static final int NO_PREVIEW_LINK_TYPE = 5; public static final int NO_PREVIEW_LINK_TYPE = 5;
public static final Creator<Post> CREATOR = new Creator<Post>() {
@Override
public Post createFromParcel(Parcel in) {
return new Post(in);
}
@Override
public Post[] newArray(int size) {
return new Post[size];
}
};
private String id; private String id;
private String fullName; private String fullName;
private String subredditName; private String subredditName;
@ -50,9 +60,9 @@ public class Post implements Parcelable {
private String crosspostParentId; private String crosspostParentId;
public Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author, public Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author,
String postTime, String title, String previewUrl, String permalink, int score, int postType, String postTime, String title, String previewUrl, String permalink, int score, int postType,
int voteType, int gilded, int nComments, String flair, boolean hidden, boolean spoiler, int voteType, int gilded, int nComments, String flair, boolean hidden, boolean spoiler,
boolean nsfw, boolean stickied, boolean archived, boolean locked, boolean saved, boolean isCrosspost) { boolean nsfw, boolean stickied, boolean archived, boolean locked, boolean saved, boolean isCrosspost) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.subredditName = subredditName; this.subredditName = subredditName;
@ -80,10 +90,10 @@ public class Post implements Parcelable {
} }
public Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author, public Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author,
String postTime, String title, String previewUrl, String url, String permalink, int score, String postTime, String title, String previewUrl, String url, String permalink, int score,
int postType, int voteType, int gilded, int nComments, String flair, boolean hidden, int postType, int voteType, int gilded, int nComments, String flair, boolean hidden,
boolean spoiler, boolean nsfw, boolean stickied, boolean archived, boolean locked, boolean spoiler, boolean nsfw, boolean stickied, boolean archived, boolean locked,
boolean saved, boolean isCrosspost) { boolean saved, boolean isCrosspost) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.subredditName = subredditName; this.subredditName = subredditName;
@ -112,9 +122,9 @@ public class Post implements Parcelable {
} }
public Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author, public Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author,
String postTime, String title, String permalink, int score, int postType, int voteType, int gilded, String postTime, String title, String permalink, int score, int postType, int voteType, int gilded,
int nComments, String flair, boolean hidden, boolean spoiler, boolean nsfw, boolean stickied, int nComments, String flair, boolean hidden, boolean spoiler, boolean nsfw, boolean stickied,
boolean archived, boolean locked, boolean saved, boolean isCrosspost) { boolean archived, boolean locked, boolean saved, boolean isCrosspost) {
this.id = id; this.id = id;
this.fullName = fullName; this.fullName = fullName;
this.subredditName = subredditName; this.subredditName = subredditName;
@ -137,7 +147,7 @@ public class Post implements Parcelable {
this.archived = archived; this.archived = archived;
this.locked = locked; this.locked = locked;
this.saved = saved; this.saved = saved;
this.isCrosspost= isCrosspost; this.isCrosspost = isCrosspost;
} }
protected Post(Parcel in) { protected Post(Parcel in) {
@ -175,18 +185,6 @@ public class Post implements Parcelable {
crosspostParentId = in.readString(); crosspostParentId = in.readString();
} }
public static final Creator<Post> CREATOR = new Creator<Post>() {
@Override
public Post createFromParcel(Parcel in) {
return new Post(in);
}
@Override
public Post[] newArray(int size) {
return new Post[size];
}
};
public String getId() { public String getId() {
return id; return id;
} }
@ -231,22 +229,22 @@ public class Post implements Parcelable {
return postTime; return postTime;
} }
public void setTitle(String title) {
this.title = title;
}
public String getTitle() { public String getTitle() {
return title; return title;
} }
public void setSelfText(String selfText) { public void setTitle(String title) {
this.selfText = selfText; this.title = title;
} }
public String getSelfText() { public String getSelfText() {
return selfText; return selfText;
} }
public void setSelfText(String selfText) {
this.selfText = selfText;
}
public String getPreviewUrl() { public String getPreviewUrl() {
return previewUrl; return previewUrl;
} }
@ -255,14 +253,14 @@ public class Post implements Parcelable {
return url; return url;
} }
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public String getVideoUrl() { public String getVideoUrl() {
return videoUrl; return videoUrl;
} }
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public String getPermalink() { public String getPermalink() {
return permalink; return permalink;
} }
@ -275,46 +273,46 @@ public class Post implements Parcelable {
this.flair = flair; this.flair = flair;
} }
public void setScore(int score) {
this.score = score;
}
public int getScore() { public int getScore() {
return score; return score;
} }
public void setScore(int score) {
this.score = score;
}
public int getPostType() { public int getPostType() {
return postType; return postType;
} }
public void setVoteType(int voteType) {
this.voteType = voteType;
}
public int getVoteType() { public int getVoteType() {
return voteType; return voteType;
} }
public void setVoteType(int voteType) {
this.voteType = voteType;
}
public int getGilded() { public int getGilded() {
return gilded; return gilded;
} }
public void setPreviewWidth(int previewWidth) {
this.previewWidth = previewWidth;
}
public int getPreviewWidth() { public int getPreviewWidth() {
return previewWidth; return previewWidth;
} }
public void setPreviewHeight(int previewHeight) { public void setPreviewWidth(int previewWidth) {
this.previewHeight = previewHeight; this.previewWidth = previewWidth;
} }
public int getPreviewHeight() { public int getPreviewHeight() {
return previewHeight; return previewHeight;
} }
public void setPreviewHeight(int previewHeight) {
this.previewHeight = previewHeight;
}
public int getnComments() { public int getnComments() {
return nComments; return nComments;
} }

View File

@ -77,8 +77,8 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
initialLoadStateLiveData = new MutableLiveData<>(); initialLoadStateLiveData = new MutableLiveData<>();
hasPostLiveData = new MutableLiveData<>(); hasPostLiveData = new MutableLiveData<>();
this.postType = postType; this.postType = postType;
if(sortType == null) { if (sortType == null) {
if(subredditOrUserName.equals("popular") || subredditOrUserName.equals("all")) { if (subredditOrUserName.equals("popular") || subredditOrUserName.equals("all")) {
this.sortType = PostDataSource.SORT_TYPE_HOT; this.sortType = PostDataSource.SORT_TYPE_HOT;
} else { } else {
this.sortType = PostDataSource.SORT_TYPE_BEST; this.sortType = PostDataSource.SORT_TYPE_BEST;
@ -164,7 +164,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
this.params = params; this.params = params;
this.callback = callback; this.callback = callback;
if(params.key.equals("") || params.key.equals("null")) { if (params.key.equals("") || params.key.equals("null")) {
return; return;
} }
@ -194,7 +194,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if (response.isSuccessful()) { if (response.isSuccessful()) {
if(sortType.equals(SORT_TYPE_RANDOM)) { if (sortType.equals(SORT_TYPE_RANDOM)) {
ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() { ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() {
@Override @Override
public void onParsePostSuccess(Post post) { public void onParsePostSuccess(Post post) {
@ -216,15 +216,15 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
String nextPageKey; String nextPageKey;
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) { if (lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
nextPageKey = null; nextPageKey = null;
} else { } else {
nextPageKey = lastItem; nextPageKey = lastItem;
} }
if(newPosts.size() != 0) { if (newPosts.size() != 0) {
hasPostLiveData.postValue(true); hasPostLiveData.postValue(true);
} else if(nextPageKey != null) { } else if (nextPageKey != null) {
loadBestPostsInitial(callback, nextPageKey); loadBestPostsInitial(callback, nextPageKey);
return; return;
} else { } else {
@ -265,24 +265,24 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
bestPost.enqueue(new Callback<String>() { bestPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw, ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw,
new ParsePost.ParsePostsListingListener() { new ParsePost.ParsePostsListingListener() {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
if(newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) { if (newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) {
loadBestPostsAfter(params, callback, lastItem); loadBestPostsAfter(params, callback, lastItem);
} else { } else {
paginationNetworkStateLiveData.postValue(NetworkState.LOADED); paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
callback.onResult(newPosts, lastItem); callback.onResult(newPosts, lastItem);
} }
} }
@Override @Override
public void onParsePostsListingFail() { public void onParsePostsListingFail() {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing more posts")); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing more posts"));
} }
}); });
} else { } else {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message())); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
} }
@ -300,7 +300,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> getPost; Call<String> getPost;
if(accessToken == null) { if (accessToken == null) {
getPost = api.getSubredditBestPosts(subredditOrUserName, sortType, lastItem); getPost = api.getSubredditBestPosts(subredditOrUserName, sortType, lastItem);
} else { } else {
getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType, lastItem, RedditUtils.getOAuthHeader(accessToken)); getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType, lastItem, RedditUtils.getOAuthHeader(accessToken));
@ -308,8 +308,8 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
getPost.enqueue(new Callback<String>() { getPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
if(sortType.equals(SORT_TYPE_RANDOM)) { if (sortType.equals(SORT_TYPE_RANDOM)) {
ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() { ParsePost.parsePost(response.body(), locale, new ParsePost.ParsePostListener() {
@Override @Override
public void onParsePostSuccess(Post post) { public void onParsePostSuccess(Post post) {
@ -331,15 +331,15 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
String nextPageKey; String nextPageKey;
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) { if (lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
nextPageKey = null; nextPageKey = null;
} else { } else {
nextPageKey = lastItem; nextPageKey = lastItem;
} }
if(newPosts.size() != 0) { if (newPosts.size() != 0) {
hasPostLiveData.postValue(true); hasPostLiveData.postValue(true);
} else if(nextPageKey != null) { } else if (nextPageKey != null) {
loadSubredditPostsInitial(callback, nextPageKey); loadSubredditPostsInitial(callback, nextPageKey);
return; return;
} else { } else {
@ -377,7 +377,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> getPost; Call<String> getPost;
if(accessToken == null) { if (accessToken == null) {
getPost = api.getSubredditBestPosts(subredditOrUserName, sortType, after); getPost = api.getSubredditBestPosts(subredditOrUserName, sortType, after);
} else { } else {
getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType, after, RedditUtils.getOAuthHeader(accessToken)); getPost = api.getSubredditBestPostsOauth(subredditOrUserName, sortType, after, RedditUtils.getOAuthHeader(accessToken));
@ -386,24 +386,24 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
getPost.enqueue(new Callback<String>() { getPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw, ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw,
new ParsePost.ParsePostsListingListener() { new ParsePost.ParsePostsListingListener() {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
if(newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) { if (newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) {
loadSubredditPostsAfter(params, callback, lastItem); loadSubredditPostsAfter(params, callback, lastItem);
} else { } else {
paginationNetworkStateLiveData.postValue(NetworkState.LOADED); paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
callback.onResult(newPosts, lastItem); callback.onResult(newPosts, lastItem);
} }
} }
@Override @Override
public void onParsePostsListingFail() { public void onParsePostsListingFail() {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data")); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
} }
}); });
} else { } else {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message())); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
} }
@ -421,7 +421,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> getPost; Call<String> getPost;
if(accessToken == null) { if (accessToken == null) {
getPost = api.getUserPosts(subredditOrUserName, lastItem, sortType); getPost = api.getUserPosts(subredditOrUserName, lastItem, sortType);
} else { } else {
getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, lastItem, sortType, getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, lastItem, sortType,
@ -430,21 +430,21 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
getPost.enqueue(new Callback<String>() { getPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw, ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw,
new ParsePost.ParsePostsListingListener() { new ParsePost.ParsePostsListingListener() {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
String nextPageKey; String nextPageKey;
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) { if (lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
nextPageKey = null; nextPageKey = null;
} else { } else {
nextPageKey = lastItem; nextPageKey = lastItem;
} }
if(newPosts.size() != 0) { if (newPosts.size() != 0) {
hasPostLiveData.postValue(true); hasPostLiveData.postValue(true);
} else if(nextPageKey != null) { } else if (nextPageKey != null) {
loadUserPostsInitial(callback, nextPageKey); loadUserPostsInitial(callback, nextPageKey);
return; return;
} else { } else {
@ -479,7 +479,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> getPost; Call<String> getPost;
if(accessToken == null) { if (accessToken == null) {
getPost = api.getUserPosts(subredditOrUserName, after, sortType); getPost = api.getUserPosts(subredditOrUserName, after, sortType);
} else { } else {
getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, after, sortType, getPost = api.getUserPostsOauth(subredditOrUserName, userWhere, after, sortType,
@ -488,24 +488,24 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
getPost.enqueue(new Callback<String>() { getPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw, ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw,
new ParsePost.ParsePostsListingListener() { new ParsePost.ParsePostsListingListener() {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
if(newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) { if (newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) {
loadUserPostsAfter(params, callback, lastItem); loadUserPostsAfter(params, callback, lastItem);
} else { } else {
paginationNetworkStateLiveData.postValue(NetworkState.LOADED); paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
callback.onResult(newPosts, lastItem); callback.onResult(newPosts, lastItem);
} }
} }
@Override @Override
public void onParsePostsListingFail() { public void onParsePostsListingFail() {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data")); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
} }
}); });
} else { } else {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message())); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
} }
@ -523,14 +523,14 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> getPost; Call<String> getPost;
if(subredditOrUserName == null) { if (subredditOrUserName == null) {
if(accessToken == null) { if (accessToken == null) {
getPost = api.searchPosts(query, lastItem, sortType); getPost = api.searchPosts(query, lastItem, sortType);
} else { } else {
getPost = api.searchPostsOauth(query, lastItem, sortType, RedditUtils.getOAuthHeader(accessToken)); getPost = api.searchPostsOauth(query, lastItem, sortType, RedditUtils.getOAuthHeader(accessToken));
} }
} else { } else {
if(accessToken == null) { if (accessToken == null) {
getPost = api.searchPostsInSpecificSubreddit(subredditOrUserName, query, lastItem); getPost = api.searchPostsInSpecificSubreddit(subredditOrUserName, query, lastItem);
} else { } else {
getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, lastItem, getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, lastItem,
@ -541,21 +541,21 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
getPost.enqueue(new Callback<String>() { getPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw, ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw,
new ParsePost.ParsePostsListingListener() { new ParsePost.ParsePostsListingListener() {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
String nextPageKey; String nextPageKey;
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) { if (lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
nextPageKey = null; nextPageKey = null;
} else { } else {
nextPageKey = lastItem; nextPageKey = lastItem;
} }
if(newPosts.size() != 0) { if (newPosts.size() != 0) {
hasPostLiveData.postValue(true); hasPostLiveData.postValue(true);
} else if(nextPageKey != null) { } else if (nextPageKey != null) {
loadSearchPostsInitial(callback, nextPageKey); loadSearchPostsInitial(callback, nextPageKey);
return; return;
} else { } else {
@ -590,14 +590,14 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
RedditAPI api = retrofit.create(RedditAPI.class); RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> getPost; Call<String> getPost;
if(subredditOrUserName == null) { if (subredditOrUserName == null) {
if(accessToken == null) { if (accessToken == null) {
getPost = api.searchPosts(query, after, sortType); getPost = api.searchPosts(query, after, sortType);
} else { } else {
getPost = api.searchPostsOauth(query, after, sortType, RedditUtils.getOAuthHeader(accessToken)); getPost = api.searchPostsOauth(query, after, sortType, RedditUtils.getOAuthHeader(accessToken));
} }
} else { } else {
if(accessToken == null) { if (accessToken == null) {
getPost = api.searchPostsInSpecificSubreddit(subredditOrUserName, query, after); getPost = api.searchPostsInSpecificSubreddit(subredditOrUserName, query, after);
} else { } else {
getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, after, getPost = api.searchPostsInSpecificSubredditOauth(subredditOrUserName, query, after,
@ -608,24 +608,24 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
getPost.enqueue(new Callback<String>() { getPost.enqueue(new Callback<String>() {
@Override @Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) { public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if(response.isSuccessful()) { if (response.isSuccessful()) {
ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw, ParsePost.parsePosts(response.body(), locale, -1, filter, nsfw,
new ParsePost.ParsePostsListingListener() { new ParsePost.ParsePostsListingListener() {
@Override @Override
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) { public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
if(newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) { if (newPosts.size() == 0 && lastItem != null && !lastItem.equals("") && !lastItem.equals("null")) {
loadSearchPostsAfter(params, callback, lastItem); loadSearchPostsAfter(params, callback, lastItem);
} else { } else {
paginationNetworkStateLiveData.postValue(NetworkState.LOADED); paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
callback.onResult(newPosts, lastItem); callback.onResult(newPosts, lastItem);
} }
} }
@Override @Override
public void onParsePostsListingFail() { public void onParsePostsListingFail() {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data")); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, "Error parsing data"));
} }
}); });
} else { } else {
paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message())); paginationNetworkStateLiveData.postValue(new NetworkState(NetworkState.Status.FAILED, response.message()));
} }

View File

@ -79,13 +79,13 @@ class PostDataSourceFactory extends DataSource.Factory {
@NonNull @NonNull
@Override @Override
public DataSource<String, Post> create() { public DataSource<String, Post> create() {
if(postType == PostDataSource.TYPE_FRONT_PAGE) { if (postType == PostDataSource.TYPE_FRONT_PAGE) {
postDataSource = new PostDataSource(retrofit, accessToken, locale, postType, sortType, postDataSource = new PostDataSource(retrofit, accessToken, locale, postType, sortType,
filter, nsfw); filter, nsfw);
} else if(postType == PostDataSource.TYPE_SEARCH) { } else if (postType == PostDataSource.TYPE_SEARCH) {
postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, query, postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, query,
postType, sortType, filter, nsfw); postType, sortType, filter, nsfw);
} else if(postType == PostDataSource.TYPE_SUBREDDIT) { } else if (postType == PostDataSource.TYPE_SUBREDDIT) {
postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, postType, postDataSource = new PostDataSource(retrofit, accessToken, locale, subredditName, postType,
sortType, filter, nsfw); sortType, filter, nsfw);
} else { } else {

View File

@ -245,13 +245,13 @@ public class PostViewModel extends ViewModel {
@NonNull @NonNull
@Override @Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) { public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if(postType == PostDataSource.TYPE_FRONT_PAGE) { if (postType == PostDataSource.TYPE_FRONT_PAGE) {
return (T) new PostViewModel(retrofit, accessToken, locale, postType, sortType, filter, return (T) new PostViewModel(retrofit, accessToken, locale, postType, sortType, filter,
nsfw); nsfw);
} else if(postType == PostDataSource.TYPE_SEARCH){ } else if (postType == PostDataSource.TYPE_SEARCH) {
return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, query, return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, query,
postType, sortType, filter, nsfw); postType, sortType, filter, nsfw);
} else if(postType == PostDataSource.TYPE_SUBREDDIT) { } else if (postType == PostDataSource.TYPE_SUBREDDIT) {
return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, postType, return (T) new PostViewModel(retrofit, accessToken, locale, subredditName, postType,
sortType, filter, nsfw); sortType, filter, nsfw);
} else { } else {

View File

@ -34,22 +34,17 @@ import retrofit2.Retrofit;
public class PullNotificationWorker extends Worker { public class PullNotificationWorker extends Worker {
public static final String WORKER_TAG = "PNWT"; public static final String WORKER_TAG = "PNWT";
private Context context;
@Inject @Inject
@Named("oauth_without_authenticator") @Named("oauth_without_authenticator")
Retrofit mOauthWithoutAuthenticatorRetrofit; Retrofit mOauthWithoutAuthenticatorRetrofit;
@Inject @Inject
@Named("no_oauth") @Named("no_oauth")
Retrofit mRetrofit; Retrofit mRetrofit;
@Inject @Inject
RedditDataRoomDatabase mRedditDataRoomDatabase; RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject @Inject
SharedPreferences mSharedPreferences; SharedPreferences mSharedPreferences;
private Context context;
public PullNotificationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { public PullNotificationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams); super(context, workerParams);
@ -62,18 +57,18 @@ public class PullNotificationWorker extends Worker {
public Result doWork() { public Result doWork() {
try { try {
List<Account> accounts = mRedditDataRoomDatabase.accountDao().getAllAccounts(); List<Account> accounts = mRedditDataRoomDatabase.accountDao().getAllAccounts();
for(int accountIndex = 0; accountIndex < accounts.size(); accountIndex++) { for (int accountIndex = 0; accountIndex < accounts.size(); accountIndex++) {
Account account = accounts.get(accountIndex); Account account = accounts.get(accountIndex);
String accountName = account.getUsername(); String accountName = account.getUsername();
Response<String> response = fetchMessages(account, 1); Response<String> response = fetchMessages(account, 1);
if(response != null && response.isSuccessful()) { if (response != null && response.isSuccessful()) {
String responseBody = response.body(); String responseBody = response.body();
ArrayList<Message> messages = FetchMessages.parseMessage(responseBody, context.getResources().getConfiguration().locale); ArrayList<Message> messages = FetchMessages.parseMessage(responseBody, context.getResources().getConfiguration().locale);
if(messages != null && !messages.isEmpty()) { if (messages != null && !messages.isEmpty()) {
NotificationManagerCompat notificationManager = NotificationUtils.getNotificationManager(context); NotificationManagerCompat notificationManager = NotificationUtils.getNotificationManager(context);
NotificationCompat.Builder summaryBuilder = NotificationUtils.buildSummaryNotification(context, NotificationCompat.Builder summaryBuilder = NotificationUtils.buildSummaryNotification(context,
@ -91,9 +86,9 @@ public class PullNotificationWorker extends Worker {
* 1000 * 60 * 60; * 1000 * 60 * 60;
boolean hasValidMessage = false; boolean hasValidMessage = false;
for(int messageIndex = messageSize - 1; messageIndex >= 0; messageIndex--) { for (int messageIndex = messageSize - 1; messageIndex >= 0; messageIndex--) {
Message message = messages.get(messageIndex); Message message = messages.get(messageIndex);
if(currentTime - message.getTimeUTC() > notificationInterval) { if (currentTime - message.getTimeUTC() > notificationInterval) {
continue; continue;
} }
@ -104,16 +99,16 @@ public class PullNotificationWorker extends Worker {
String kind = message.getKind(); String kind = message.getKind();
String title; String title;
String summary; String summary;
if(kind.equals(Message.TYPE_COMMENT) || kind.equals(Message.TYPE_LINK)) { if (kind.equals(Message.TYPE_COMMENT) || kind.equals(Message.TYPE_LINK)) {
title = message.getAuthor(); title = message.getAuthor();
summary = message.getSubject().substring(0, 1).toUpperCase() + message.getSubject().substring(1); summary = message.getSubject().substring(0, 1).toUpperCase() + message.getSubject().substring(1);
} else { } else {
title = message.getTitle() == null || message.getTitle().equals("") ? message.getSubject() : message.getTitle(); title = message.getTitle() == null || message.getTitle().equals("") ? message.getSubject() : message.getTitle();
if(kind.equals(Message.TYPE_ACCOUNT)) { if (kind.equals(Message.TYPE_ACCOUNT)) {
summary = context.getString(R.string.notification_summary_account); summary = context.getString(R.string.notification_summary_account);
} else if(kind.equals(Message.TYPE_MESSAGE)) { } else if (kind.equals(Message.TYPE_MESSAGE)) {
summary = context.getString(R.string.notification_summary_message); summary = context.getString(R.string.notification_summary_message);
} else if(kind.equals(Message.TYPE_SUBREDDIT)) { } else if (kind.equals(Message.TYPE_SUBREDDIT)) {
summary = context.getString(R.string.notification_summary_subreddit); summary = context.getString(R.string.notification_summary_subreddit);
} else { } else {
summary = context.getString(R.string.notification_summary_award); summary = context.getString(R.string.notification_summary_award);
@ -126,7 +121,7 @@ public class PullNotificationWorker extends Worker {
NotificationUtils.CHANNEL_NEW_MESSAGES, NotificationUtils.CHANNEL_NEW_MESSAGES,
NotificationUtils.getAccountGroupName(accountName)); NotificationUtils.getAccountGroupName(accountName));
if(kind.equals(Message.TYPE_COMMENT)) { if (kind.equals(Message.TYPE_COMMENT)) {
Intent intent = new Intent(context, LinkResolverActivity.class); Intent intent = new Intent(context, LinkResolverActivity.class);
Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext()); Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext());
intent.setData(uri); intent.setData(uri);
@ -134,12 +129,12 @@ public class PullNotificationWorker extends Worker {
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname()); intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname());
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6, intent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent); builder.setContentIntent(pendingIntent);
} else if(kind.equals(Message.TYPE_ACCOUNT)) { } else if (kind.equals(Message.TYPE_ACCOUNT)) {
Intent intent = new Intent(context, ViewMessageActivity.class); Intent intent = new Intent(context, ViewMessageActivity.class);
intent.putExtra(ViewMessageActivity.EXTRA_NEW_ACCOUNT_NAME, accountName); intent.putExtra(ViewMessageActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(summaryPendingIntent); builder.setContentIntent(summaryPendingIntent);
} else if(kind.equals(Message.TYPE_LINK)) { } else if (kind.equals(Message.TYPE_LINK)) {
Intent intent = new Intent(context, LinkResolverActivity.class); Intent intent = new Intent(context, LinkResolverActivity.class);
Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext()); Uri uri = LinkResolverActivity.getRedditUriByPath(message.getContext());
intent.setData(uri); intent.setData(uri);
@ -147,12 +142,12 @@ public class PullNotificationWorker extends Worker {
intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname()); intent.putExtra(LinkResolverActivity.EXTRA_MESSAGE_FULLNAME, message.getFullname());
PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 2, intent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent pendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 2, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent); builder.setContentIntent(pendingIntent);
} else if(kind.equals(Message.TYPE_MESSAGE)) { } else if (kind.equals(Message.TYPE_MESSAGE)) {
Intent intent = new Intent(context, ViewMessageActivity.class); Intent intent = new Intent(context, ViewMessageActivity.class);
intent.putExtra(ViewMessageActivity.EXTRA_NEW_ACCOUNT_NAME, accountName); intent.putExtra(ViewMessageActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 3, intent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 3, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(summaryPendingIntent); builder.setContentIntent(summaryPendingIntent);
} else if(kind.equals(Message.TYPE_SUBREDDIT)) { } else if (kind.equals(Message.TYPE_SUBREDDIT)) {
Intent intent = new Intent(context, ViewMessageActivity.class); Intent intent = new Intent(context, ViewMessageActivity.class);
intent.putExtra(ViewMessageActivity.EXTRA_NEW_ACCOUNT_NAME, accountName); intent.putExtra(ViewMessageActivity.EXTRA_NEW_ACCOUNT_NAME, accountName);
PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 4, intent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent summaryPendingIntent = PendingIntent.getActivity(context, accountIndex * 6 + 4, intent, PendingIntent.FLAG_UPDATE_CURRENT);
@ -166,7 +161,7 @@ public class PullNotificationWorker extends Worker {
notificationManager.notify(NotificationUtils.getNotificationIdUnreadMessage(accountIndex, messageIndex), builder.build()); notificationManager.notify(NotificationUtils.getNotificationIdUnreadMessage(accountIndex, messageIndex), builder.build());
} }
if(hasValidMessage) { if (hasValidMessage) {
inboxStyle.setBigContentTitle(context.getString(R.string.notification_new_messages, messages.size())) inboxStyle.setBigContentTitle(context.getString(R.string.notification_new_messages, messages.size()))
.setSummaryText(accountName); .setSummaryText(accountName);
@ -197,7 +192,7 @@ public class PullNotificationWorker extends Worker {
} }
private Response<String> fetchMessages(Account account, int retryCount) throws IOException, JSONException { private Response<String> fetchMessages(Account account, int retryCount) throws IOException, JSONException {
if(retryCount < 0) { if (retryCount < 0) {
return null; return null;
} }
@ -206,12 +201,12 @@ public class PullNotificationWorker extends Worker {
FetchMessages.WHERE_UNREAD, null); FetchMessages.WHERE_UNREAD, null);
Response<String> response = call.execute(); Response<String> response = call.execute();
if(response.isSuccessful()) { if (response.isSuccessful()) {
return response; return response;
} else { } else {
if(response.code() == 401) { if (response.code() == 401) {
String accessToken = refreshAccessToken(account); String accessToken = refreshAccessToken(account);
if(!accessToken.equals("")) { if (!accessToken.equals("")) {
return fetchMessages(account, retryCount - 1); return fetchMessages(account, retryCount - 1);
} }
@ -234,7 +229,7 @@ public class PullNotificationWorker extends Worker {
Call<String> accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params); Call<String> accessTokenCall = api.getAccessToken(RedditUtils.getHttpBasicAuthHeader(), params);
try { try {
Response response = accessTokenCall.execute(); Response response = accessTokenCall.execute();
if(response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
JSONObject jsonObject = new JSONObject(response.body().toString()); JSONObject jsonObject = new JSONObject(response.body().toString());
String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY); String newAccessToken = jsonObject.getString(RedditUtils.ACCESS_TOKEN_KEY);
mRedditDataRoomDatabase.accountDao().changeAccessToken(account.getUsername(), newAccessToken); mRedditDataRoomDatabase.accountDao().changeAccessToken(account.getUsername(), newAccessToken);

Some files were not shown because too many files have changed in this diff Show More