package ml.docilealligator.infinityforreddit.activities; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import java.util.ArrayList; import javax.inject.Inject; import javax.inject.Named; import ml.docilealligator.infinityforreddit.user.FetchUserFlairs; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.user.SelectUserFlair; import ml.docilealligator.infinityforreddit.user.UserFlair; import ml.docilealligator.infinityforreddit.adapters.UserFlairRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.customviews.slidr.Slidr; import ml.docilealligator.infinityforreddit.databinding.ActivitySelectUserFlairBinding; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Retrofit; public class SelectUserFlairActivity extends BaseActivity implements ActivityToolbarInterface { public static final String EXTRA_SUBREDDIT_NAME = "ESN"; private static final String USER_FLAIRS_STATE = "UFS"; @Inject @Named("oauth") Retrofit mOauthRetrofit; @Inject @Named("default") SharedPreferences mSharedPreferences; @Inject @Named("current_account") SharedPreferences mCurrentAccountSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; private LinearLayoutManagerBugFixed mLinearLayoutManager; private ArrayList mUserFlairs; private String mSubredditName; private UserFlairRecyclerViewAdapter mAdapter; private ActivitySelectUserFlairBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { ((Infinity) getApplication()).getAppComponent().inject(this); setImmersiveModeNotApplicable(); super.onCreate(savedInstanceState); binding = ActivitySelectUserFlairBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); applyCustomTheme(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) { addOnOffsetChangedListener(binding.appbarLayoutSelectUserFlairActivity); } if (mSharedPreferences.getBoolean(SharedPreferencesUtils.SWIPE_RIGHT_TO_GO_BACK, true)) { Slidr.attach(this); } setSupportActionBar(binding.toolbarSelectUserFlairActivity); getSupportActionBar().setDisplayHomeAsUpEnabled(true); setToolbarGoToTop(binding.toolbarSelectUserFlairActivity); mSubredditName = getIntent().getStringExtra(EXTRA_SUBREDDIT_NAME); setTitle(mSubredditName); if (savedInstanceState != null) { mUserFlairs = savedInstanceState.getParcelableArrayList(USER_FLAIRS_STATE); } bindView(); } private void bindView() { if (mUserFlairs == null) { FetchUserFlairs.fetchUserFlairsInSubreddit(mOauthRetrofit, accessToken, mSubredditName, new FetchUserFlairs.FetchUserFlairsInSubredditListener() { @Override public void fetchSuccessful(ArrayList userFlairs) { mUserFlairs = userFlairs; instantiateRecyclerView(); } @Override public void fetchFailed() { } }); } else { instantiateRecyclerView(); } } private void instantiateRecyclerView() { mAdapter = new UserFlairRecyclerViewAdapter(this, mCustomThemeWrapper, mUserFlairs, (userFlair, editUserFlair) -> { if (editUserFlair) { View dialogView = getLayoutInflater().inflate(R.layout.dialog_edit_flair, null); EditText flairEditText = dialogView.findViewById(R.id.flair_edit_text_edit_flair_dialog); flairEditText.setText(userFlair.getText()); flairEditText.requestFocus(); Utils.showKeyboard(this, new Handler(), flairEditText); new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) .setTitle(R.string.edit_flair) .setView(dialogView) .setPositiveButton(R.string.ok, (dialogInterface, i) -> { Utils.hideKeyboard(this); userFlair.setText(flairEditText.getText().toString()); selectUserFlair(userFlair); }) .setNegativeButton(R.string.cancel, (dialogInterface, i) -> { Utils.hideKeyboard(this); }) .setOnDismissListener(dialogInterface -> { Utils.hideKeyboard(this); }) .show(); } else { if (userFlair == null) { new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) .setTitle(R.string.clear_user_flair) .setPositiveButton(R.string.yes, (dialogInterface, i) -> selectUserFlair(userFlair)) .setNegativeButton(R.string.no, null) .show(); } else { new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) .setTitle(R.string.select_this_user_flair) .setMessage(userFlair.getText()) .setPositiveButton(R.string.yes, (dialogInterface, i) -> selectUserFlair(userFlair)) .setNegativeButton(R.string.no, null) .show(); } } }); mLinearLayoutManager = new LinearLayoutManagerBugFixed(SelectUserFlairActivity.this); binding.recyclerViewSelectUserFlairActivity.setLayoutManager(mLinearLayoutManager); binding.recyclerViewSelectUserFlairActivity.setAdapter(mAdapter); } private void selectUserFlair(@Nullable UserFlair userFlair) { SelectUserFlair.selectUserFlair(mOauthRetrofit, accessToken, userFlair, mSubredditName, accountName, new SelectUserFlair.SelectUserFlairListener() { @Override public void success() { if (userFlair == null) { Toast.makeText(SelectUserFlairActivity.this, R.string.clear_user_flair_success, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(SelectUserFlairActivity.this, R.string.select_user_flair_success, Toast.LENGTH_SHORT).show(); } finish(); } @Override public void failed(String errorMessage) { if (errorMessage == null || errorMessage.equals("")) { if (userFlair == null) { Snackbar.make(binding.getRoot(), R.string.clear_user_flair_success, Snackbar.LENGTH_SHORT).show(); } else { Snackbar.make(binding.getRoot(), R.string.select_user_flair_success, Snackbar.LENGTH_SHORT).show(); } } else { Snackbar.make(binding.getRoot(), errorMessage, Snackbar.LENGTH_SHORT).show(); } } }); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return false; } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelableArrayList(USER_FLAIRS_STATE, mUserFlairs); } @Override public SharedPreferences getDefaultSharedPreferences() { return mSharedPreferences; } @Override public SharedPreferences getCurrentAccountSharedPreferences() { return mCurrentAccountSharedPreferences; } @Override public CustomThemeWrapper getCustomThemeWrapper() { return mCustomThemeWrapper; } @Override protected void applyCustomTheme() { binding.getRoot().setBackgroundColor(mCustomThemeWrapper.getBackgroundColor()); applyAppBarLayoutAndCollapsingToolbarLayoutAndToolbarTheme(binding.appbarLayoutSelectUserFlairActivity, null, binding.toolbarSelectUserFlairActivity); } @Override public void onLongPress() { if (mLinearLayoutManager != null) { mLinearLayoutManager.scrollToPositionWithOffset(0, 0); } } }