diff options
author | Docile-Alligator <chineseperson5@gmail.com> | 2022-04-28 07:29:41 +0000 |
---|---|---|
committer | Docile-Alligator <chineseperson5@gmail.com> | 2022-04-28 07:29:41 +0000 |
commit | d9172110e672d9b39727010793b719fe9dd2f894 (patch) | |
tree | 548e1f68a95b8b736e67e9f78a41e5697d1c90d5 | |
parent | d64fdd4e4d29ea508f0afc499e93d00bd3d2398b (diff) | |
download | infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.tar infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.tar.gz infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.tar.bz2 infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.tar.lz infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.tar.xz infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.tar.zst infinity-for-reddit-d9172110e672d9b39727010793b719fe9dd2f894.zip |
Submitting comment using another comment is available.
3 files changed, 132 insertions, 10 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java index 54c07da6..2d3ca05a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java @@ -17,6 +17,7 @@ import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; @@ -27,6 +28,9 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.content.FileProvider; import androidx.recyclerview.widget.RecyclerView; +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; +import com.bumptech.glide.request.RequestOptions; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; @@ -39,6 +43,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.inject.Named; @@ -60,11 +65,16 @@ import io.noties.markwon.linkify.LinkifyPlugin; import io.noties.markwon.recycler.MarkwonAdapter; import io.noties.markwon.recycler.table.TableEntry; import io.noties.markwon.recycler.table.TableEntryPlugin; +import jp.wasabeef.glide.transformations.RoundedCornersTransformation; +import ml.docilealligator.infinityforreddit.AnyAccountAccessTokenAuthenticator; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; +import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.UploadImageEnabledActivity; import ml.docilealligator.infinityforreddit.UploadedImage; +import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.adapters.MarkdownBottomBarRecyclerViewAdapter; +import ml.docilealligator.infinityforreddit.bottomsheetfragments.AccountChooserBottomSheetFragment; import ml.docilealligator.infinityforreddit.bottomsheetfragments.CopyTextBottomSheetFragment; import ml.docilealligator.infinityforreddit.bottomsheetfragments.UploadedImagesBottomSheetFragment; import ml.docilealligator.infinityforreddit.comment.Comment; @@ -76,9 +86,12 @@ import ml.docilealligator.infinityforreddit.markdown.SpoilerParserPlugin; import ml.docilealligator.infinityforreddit.markdown.SuperscriptInlineProcessor; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.Utils; +import okhttp3.ConnectionPool; +import okhttp3.OkHttpClient; +import pl.droidsonroids.gif.GifImageView; import retrofit2.Retrofit; -public class CommentActivity extends BaseActivity implements UploadImageEnabledActivity { +public class CommentActivity extends BaseActivity implements UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener { public static final String EXTRA_COMMENT_PARENT_TEXT_KEY = "ECPTK"; public static final String EXTRA_COMMENT_PARENT_TEXT_MARKDOWN_KEY = "ECPTMK"; @@ -93,6 +106,8 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA private static final int PICK_IMAGE_REQUEST_CODE = 100; private static final int CAPTURE_IMAGE_REQUEST_CODE = 200; private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300; + + private static final String SELECTED_ACCOUNT_STATE = "SAS"; private static final String UPLOADED_IMAGES_STATE = "UIS"; @BindView(R.id.coordinator_layout_comment_activity) @@ -107,17 +122,28 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA View divider; @BindView(R.id.content_markdown_view_comment_activity) RecyclerView contentMarkdownRecyclerView; + @BindView(R.id.account_linear_layout_comment_activity) + LinearLayout accountLinearLayout; + @BindView(R.id.account_icon_gif_image_view_comment_activity) + GifImageView accountIconImageView; + @BindView(R.id.account_name_text_view_comment_activity) + TextView accountNameTextView; @BindView(R.id.comment_edit_text_comment_activity) EditText commentEditText; @BindView(R.id.markdown_bottom_bar_recycler_view_comment_activity) RecyclerView markdownBottomBarRecyclerView; @Inject + @Named("no_oauth") + Retrofit mRetrofit; + @Inject @Named("oauth") Retrofit mOauthRetrofit; @Inject @Named("upload_media") Retrofit mUploadMediaRetrofit; @Inject + RedditDataRoomDatabase mRedditDataRoomDatabase; + @Inject @Named("default") SharedPreferences mSharedPreferences; @Inject @@ -127,6 +153,8 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA CustomThemeWrapper mCustomThemeWrapper; @Inject Executor mExecutor; + private RequestManager mGlide; + private Account selectedAccount; private String mAccessToken; private String parentFullname; private int parentDepth; @@ -161,6 +189,10 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA } mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null); + if (mAccessToken == null) { + finish(); + return; + } Intent intent = getIntent(); String parentTextMarkdown = intent.getStringExtra(EXTRA_COMMENT_PARENT_TEXT_MARKDOWN_KEY); @@ -297,8 +329,25 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA setSupportActionBar(toolbar); + mGlide = Glide.with(this); + if (savedInstanceState != null) { + selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE); uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE); + + if (selectedAccount != null) { + mGlide.load(selectedAccount.getProfileImageUrl()) + .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) + .error(mGlide.load(R.drawable.subreddit_default_icon) + .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) + .into(accountIconImageView); + + accountNameTextView.setText(selectedAccount.getAccountName()); + } else { + loadCurrentAccount(); + } + } else { + loadCurrentAccount(); } MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter( @@ -325,6 +374,11 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA LinearLayoutManagerBugFixed.HORIZONTAL, false)); markdownBottomBarRecyclerView.setAdapter(adapter); + accountLinearLayout.setOnClickListener(view -> { + AccountChooserBottomSheetFragment fragment = new AccountChooserBottomSheetFragment(); + fragment.show(getSupportFragmentManager(), fragment.getTag()); + }); + commentEditText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { @@ -332,9 +386,29 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA } } + private void loadCurrentAccount() { + Handler handler = new Handler(); + mExecutor.execute(() -> { + Account account = mRedditDataRoomDatabase.accountDao().getCurrentAccount(); + selectedAccount = account; + handler.post(() -> { + if (!isFinishing() && !isDestroyed() && account != null) { + mGlide.load(account.getProfileImageUrl()) + .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) + .error(mGlide.load(R.drawable.subreddit_default_icon) + .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) + .into(accountIconImageView); + + accountNameTextView.setText(account.getAccountName()); + } + }); + }); + } + @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); + outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount); outState.putParcelableArrayList(UPLOADED_IMAGES_STATE, uploadedImages); } @@ -360,6 +434,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA int secondaryTextColor = mCustomThemeWrapper.getSecondaryTextColor(); commentEditText.setHintTextColor(secondaryTextColor); markdownColor = secondaryTextColor; + accountNameTextView.setTextColor(mCustomThemeWrapper.getPrimaryTextColor()); if (typeface != null) { commentParentMarkwonView.setTypeface(typeface); @@ -419,8 +494,15 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA Snackbar sendingSnackbar = Snackbar.make(coordinatorLayout, R.string.sending_comment, Snackbar.LENGTH_INDEFINITE); sendingSnackbar.show(); + Retrofit newAuthenticatorOauthRetrofit = mOauthRetrofit.newBuilder().client(new OkHttpClient.Builder().authenticator(new AnyAccountAccessTokenAuthenticator(mRetrofit, mRedditDataRoomDatabase, selectedAccount, mCurrentAccountSharedPreferences)) + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS)) + .build()) + .build(); SendComment.sendComment(mExecutor, new Handler(), commentEditText.getText().toString(), - parentFullname, parentDepth, mOauthRetrofit, mAccessToken, + parentFullname, parentDepth, newAuthenticatorOauthRetrofit, selectedAccount, new SendComment.SendCommentListener() { @Override public void sendCommentSuccess(Comment comment) { @@ -545,4 +627,19 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA "[" + uploadedImage.imageName + "](" + uploadedImage.imageUrl + ")", 0, "[]()".length() + uploadedImage.imageName.length() + uploadedImage.imageUrl.length()); } + + @Override + public void onAccountSelected(Account account) { + if (account != null) { + selectedAccount = account; + + mGlide.load(selectedAccount.getProfileImageUrl()) + .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) + .error(mGlide.load(R.drawable.subreddit_default_icon) + .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) + .into(accountIconImageView); + + accountNameTextView.setText(selectedAccount.getAccountName()); + } + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java index cf9efa54..1206279f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executor; +import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.apis.RedditAPI; import ml.docilealligator.infinityforreddit.utils.APIUtils; import retrofit2.Call; @@ -19,16 +20,16 @@ import retrofit2.Retrofit; public class SendComment { public static void sendComment(Executor executor, Handler handler, String commentMarkdown, String thingFullname, int parentDepth, - Retrofit oauthRetrofit, String accessToken, + Retrofit newAuthenticatorOauthRetrofit, Account account, SendCommentListener sendCommentListener) { - Map<String, String> headers = APIUtils.getOAuthHeader(accessToken); + Map<String, String> headers = APIUtils.getOAuthHeader(account.getAccessToken()); Map<String, String> params = new HashMap<>(); params.put(APIUtils.API_TYPE_KEY, "json"); params.put(APIUtils.RETURN_RTJSON_KEY, "true"); params.put(APIUtils.TEXT_KEY, commentMarkdown); params.put(APIUtils.THING_ID_KEY, thingFullname); - oauthRetrofit.create(RedditAPI.class).sendCommentOrReplyToMessage(headers, params).enqueue(new Callback<String>() { + newAuthenticatorOauthRetrofit.create(RedditAPI.class).sendCommentOrReplyToMessage(headers, params).enqueue(new Callback<String>() { @Override public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { if (response.isSuccessful()) { diff --git a/app/src/main/res/layout/activity_comment.xml b/app/src/main/res/layout/activity_comment.xml index 69e0a4d7..73a755a8 100644 --- a/app/src/main/res/layout/activity_comment.xml +++ b/app/src/main/res/layout/activity_comment.xml @@ -59,8 +59,34 @@ <View android:id="@+id/divider_comment_activity" android:layout_width="match_parent" - android:layout_height="1dp" - android:layout_marginBottom="16dp" /> + android:layout_height="1dp" /> + + <LinearLayout + android:id="@+id/account_linear_layout_comment_activity" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dp" + android:paddingBottom="16dp" + android:clickable="true" + android:focusable="true" + android:background="?attr/selectableItemBackground"> + + <pl.droidsonroids.gif.GifImageView + android:id="@+id/account_icon_gif_image_view_comment_activity" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginStart="16dp" /> + + <TextView + android:id="@+id/account_name_text_view_comment_activity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginStart="32dp" + android:textSize="?attr/font_default" + android:fontFamily="?attr/font_family" /> + + </LinearLayout> <EditText android:id="@+id/comment_edit_text_comment_activity" @@ -70,9 +96,7 @@ android:gravity="top" android:hint="@string/write_comment_hint" android:inputType="textCapSentences|textMultiLine" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:paddingBottom="16dp" + android:padding="16dp" android:textColor="?attr/primaryTextColor" android:textSize="?attr/content_font_18" android:fontFamily="?attr/content_font_family" /> |