mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-28 11:58:23 +01:00
Composing message is now available.
This commit is contained in:
parent
40fd7bf40f
commit
406d82ef52
@ -316,6 +316,7 @@ public class CommentActivity extends BaseActivity {
|
|||||||
if (!isSubmitting) {
|
if (!isSubmitting) {
|
||||||
isSubmitting = true;
|
isSubmitting = true;
|
||||||
if (commentEditText.getText() == null || commentEditText.getText().toString().equals("")) {
|
if (commentEditText.getText() == null || commentEditText.getText().toString().equals("")) {
|
||||||
|
isSubmitting = false;
|
||||||
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;
|
||||||
}
|
}
|
||||||
@ -352,7 +353,7 @@ public class CommentActivity extends BaseActivity {
|
|||||||
item.setEnabled(true);
|
item.setEnabled(true);
|
||||||
item.getIcon().setAlpha(255);
|
item.getIcon().setAlpha(255);
|
||||||
|
|
||||||
if (errorMessage == null) {
|
if (errorMessage == null || !errorMessage.equals("")) {
|
||||||
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();
|
||||||
|
@ -7,26 +7,32 @@ import android.view.Menu;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||||
|
|
||||||
import com.google.android.material.appbar.AppBarLayout;
|
import com.google.android.material.appbar.AppBarLayout;
|
||||||
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
|
||||||
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
|
||||||
import ml.docilealligator.infinityforreddit.Infinity;
|
import ml.docilealligator.infinityforreddit.Infinity;
|
||||||
|
import ml.docilealligator.infinityforreddit.Message.ComposeMessage;
|
||||||
import ml.docilealligator.infinityforreddit.R;
|
import ml.docilealligator.infinityforreddit.R;
|
||||||
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class SendPrivateMessageActivity extends BaseActivity {
|
public class SendPrivateMessageActivity extends BaseActivity {
|
||||||
public static final String EXTRA_RECIPIENT_USERNAME = "ERU";
|
public static final String EXTRA_RECIPIENT_USERNAME = "ERU";
|
||||||
|
private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
|
||||||
|
private static final String ACCESS_TOKEN_STATE = "ATS";
|
||||||
@BindView(R.id.coordinator_layout_send_private_message_activity)
|
@BindView(R.id.coordinator_layout_send_private_message_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.appbar_layout_send_private_message_activity)
|
@BindView(R.id.appbar_layout_send_private_message_activity)
|
||||||
@ -53,6 +59,9 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
SharedPreferences mSharedPreferences;
|
SharedPreferences mSharedPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
|
private boolean mNullAccessToken = false;
|
||||||
|
private String mAccessToken;
|
||||||
|
private boolean isSubmitting = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -68,6 +77,16 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
addOnOffsetChangedListener(appBarLayout);
|
addOnOffsetChangedListener(appBarLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (savedInstanceState == null) {
|
||||||
|
getCurrentAccount();
|
||||||
|
} else {
|
||||||
|
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
|
||||||
|
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
|
||||||
|
if (!mNullAccessToken && mAccessToken == null) {
|
||||||
|
getCurrentAccount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
String username = getIntent().getStringExtra(EXTRA_RECIPIENT_USERNAME);
|
String username = getIntent().getStringExtra(EXTRA_RECIPIENT_USERNAME);
|
||||||
@ -76,6 +95,16 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void getCurrentAccount() {
|
||||||
|
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
|
||||||
|
if (account == null) {
|
||||||
|
mNullAccessToken = true;
|
||||||
|
} else {
|
||||||
|
mAccessToken = account.getAccessToken();
|
||||||
|
}
|
||||||
|
}).execute();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.send_private_message_activity, menu);
|
getMenuInflater().inflate(R.menu.send_private_message_activity, menu);
|
||||||
@ -89,11 +118,69 @@ public class SendPrivateMessageActivity extends BaseActivity {
|
|||||||
finish();
|
finish();
|
||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.action_send_send_private_message_activity) {
|
} else if (item.getItemId() == R.id.action_send_send_private_message_activity) {
|
||||||
|
if (!isSubmitting) {
|
||||||
|
isSubmitting = true;
|
||||||
|
if (usernameEditText.getText() == null || usernameEditText.getText().toString().equals("")) {
|
||||||
|
isSubmitting = false;
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.message_username_required, Snackbar.LENGTH_LONG).show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subjectEditText.getText() == null || subjectEditText.getText().toString().equals("")) {
|
||||||
|
isSubmitting = false;
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.message_subject_required, Snackbar.LENGTH_LONG).show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (messageEditText.getText() == null || messageEditText.getText().toString().equals("")) {
|
||||||
|
isSubmitting = false;
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.message_content_required, Snackbar.LENGTH_LONG).show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
item.setEnabled(false);
|
||||||
|
item.getIcon().setAlpha(130);
|
||||||
|
Snackbar sendingSnackbar = Snackbar.make(coordinatorLayout, R.string.sending_message, Snackbar.LENGTH_INDEFINITE);
|
||||||
|
sendingSnackbar.show();
|
||||||
|
|
||||||
|
ComposeMessage.composeMessage(mOauthRetrofit, mAccessToken, getResources().getConfiguration().locale,
|
||||||
|
usernameEditText.getText().toString(), subjectEditText.getText().toString(),
|
||||||
|
messageEditText.getText().toString(), new ComposeMessage.ComposeMessageListener() {
|
||||||
|
@Override
|
||||||
|
public void composeMessageSuccess() {
|
||||||
|
isSubmitting = false;
|
||||||
|
item.setEnabled(true);
|
||||||
|
item.getIcon().setAlpha(255);
|
||||||
|
Toast.makeText(SendPrivateMessageActivity.this, R.string.send_message_success, Toast.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void composeMessageFailed(String errorMessage) {
|
||||||
|
isSubmitting = false;
|
||||||
|
sendingSnackbar.dismiss();
|
||||||
|
item.setEnabled(true);
|
||||||
|
item.getIcon().setAlpha(255);
|
||||||
|
|
||||||
|
if (errorMessage == null || errorMessage.equals("")) {
|
||||||
|
Snackbar.make(coordinatorLayout, R.string.send_message_failed, Snackbar.LENGTH_LONG).show();
|
||||||
|
} else {
|
||||||
|
Snackbar.make(coordinatorLayout, errorMessage, Snackbar.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
|
||||||
|
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SharedPreferences getDefaultSharedPreferences() {
|
protected SharedPreferences getDefaultSharedPreferences() {
|
||||||
return mSharedPreferences;
|
return mSharedPreferences;
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package ml.docilealligator.infinityforreddit.Message;
|
package ml.docilealligator.infinityforreddit.Message;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -19,6 +21,7 @@ public class ComposeMessage {
|
|||||||
Map<String, String> headers = APIUtils.getOAuthHeader(accessToken);
|
Map<String, String> headers = APIUtils.getOAuthHeader(accessToken);
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.put(APIUtils.API_TYPE_KEY, "json");
|
params.put(APIUtils.API_TYPE_KEY, "json");
|
||||||
|
params.put(APIUtils.RETURN_RTJSON_KEY, "true");
|
||||||
params.put(APIUtils.SUBJECT_KEY, subject);
|
params.put(APIUtils.SUBJECT_KEY, subject);
|
||||||
params.put(APIUtils.TEXT_KEY, message);
|
params.put(APIUtils.TEXT_KEY, message);
|
||||||
params.put(APIUtils.TO_KEY, username);
|
params.put(APIUtils.TO_KEY, username);
|
||||||
@ -27,18 +30,18 @@ public class ComposeMessage {
|
|||||||
@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()) {
|
||||||
ParseMessage.parseRepliedMessage(response.body(), locale,
|
ParseMessage.parseComposedMessageError(response.body(), new ParseMessage.ParseComposedMessageErrorListener() {
|
||||||
new ParseMessage.ParseSentMessageAsyncTaskListener() {
|
@Override
|
||||||
@Override
|
public void noError() {
|
||||||
public void parseSuccess(Message message) {
|
composeMessageListener.composeMessageSuccess();
|
||||||
composeMessageListener.composeMessageSuccess(message);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void parseFailed(String errorMessage) {
|
public void error(String errorMessage) {
|
||||||
composeMessageListener.composeMessageFailed(errorMessage);
|
composeMessageListener.composeMessageFailed(errorMessage);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Log.i("asfsdaf", "s " + response.body());
|
||||||
} else {
|
} else {
|
||||||
composeMessageListener.composeMessageFailed(response.message());
|
composeMessageListener.composeMessageFailed(response.message());
|
||||||
}
|
}
|
||||||
@ -52,7 +55,7 @@ public class ComposeMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface ComposeMessageListener {
|
public interface ComposeMessageListener {
|
||||||
void composeMessageSuccess(Message message);
|
void composeMessageSuccess();
|
||||||
void composeMessageFailed(String errorMessage);
|
void composeMessageFailed(String errorMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,10 @@ public class ParseMessage {
|
|||||||
new ParseSentMessageAsnycTask(response, locale, parseSentMessageAsyncTaskListener).execute();
|
new ParseSentMessageAsnycTask(response, locale, parseSentMessageAsyncTaskListener).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void parseComposedMessageError(String response, ParseComposedMessageErrorListener parseComposedMessageErrorListener) {
|
||||||
|
new ParseComposedMessageErrorAsncTask(response, parseComposedMessageErrorListener).execute();
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static Message parseSingleMessage(JSONObject messageJSON, Locale locale, int messageType) throws JSONException {
|
private static Message parseSingleMessage(JSONObject messageJSON, Locale locale, int messageType) throws JSONException {
|
||||||
String kind = messageJSON.getString(JSONUtils.KIND_KEY);
|
String kind = messageJSON.getString(JSONUtils.KIND_KEY);
|
||||||
@ -165,6 +169,33 @@ public class ParseMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class ParseComposedMessageErrorAsncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
private String response;
|
||||||
|
private ParseComposedMessageErrorListener parseComposedMessageErrorListener;
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
|
ParseComposedMessageErrorAsncTask(String response, ParseComposedMessageErrorListener parseComposedMessageErrorListener) {
|
||||||
|
this.response = response;
|
||||||
|
this.parseComposedMessageErrorListener = parseComposedMessageErrorListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Void doInBackground(Void... voids) {
|
||||||
|
errorMessage = parseRepliedMessageErrorMessage(response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void aVoid) {
|
||||||
|
super.onPostExecute(aVoid);
|
||||||
|
if (errorMessage == null) {
|
||||||
|
parseComposedMessageErrorListener.noError();
|
||||||
|
} else {
|
||||||
|
parseComposedMessageErrorListener.error(errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static String parseRepliedMessageErrorMessage(String response) {
|
private static String parseRepliedMessageErrorMessage(String response) {
|
||||||
try {
|
try {
|
||||||
@ -202,4 +233,9 @@ public class ParseMessage {
|
|||||||
void parseSuccess(Message message);
|
void parseSuccess(Message message);
|
||||||
void parseFailed(String errorMessage);
|
void parseFailed(String errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface ParseComposedMessageErrorListener {
|
||||||
|
void noError();
|
||||||
|
void error(String errorMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
android:paddingBottom="16dp"
|
android:paddingBottom="16dp"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="?attr/content_font_18"
|
android:textSize="?attr/content_font_18"
|
||||||
|
android:maxLength="100"
|
||||||
android:fontFamily="?attr/content_font_family" />
|
android:fontFamily="?attr/content_font_family" />
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
@ -155,10 +155,16 @@
|
|||||||
<string name="parse_sent_comment_failed">The comment is sent but unable to get the sent comment</string>
|
<string name="parse_sent_comment_failed">The comment is sent but unable to get the sent comment</string>
|
||||||
|
|
||||||
<string name="send_message_username_hint">User</string>
|
<string name="send_message_username_hint">User</string>
|
||||||
<string name="send_message_subject_hint">Subject</string>
|
<string name="send_message_subject_hint">Subject (100 characters max)</string>
|
||||||
<string name="send_message_content_hint">Message</string>
|
<string name="send_message_content_hint">Message</string>
|
||||||
<string name="reply_message_failed">Could not reply to this message</string>
|
<string name="reply_message_failed">Could not reply to this message</string>
|
||||||
<string name="error_getting_message">Error getting this message</string>
|
<string name="error_getting_message">Error getting this message</string>
|
||||||
|
<string name="message_username_required">Hey, to whom to you want to send this message?</string>
|
||||||
|
<string name="message_subject_required">Your message should have a subject</string>
|
||||||
|
<string name="message_content_required">You need to tell the recipient something</string>
|
||||||
|
<string name="sending_message">Sending</string>
|
||||||
|
<string name="send_message_success">Message sent</string>
|
||||||
|
<string name="send_message_failed">Could not send this message</string>
|
||||||
|
|
||||||
<string name="select_a_subreddit">Please select a subreddit first</string>
|
<string name="select_a_subreddit">Please select a subreddit first</string>
|
||||||
<string name="title_required">The post need a good title</string>
|
<string name="title_required">The post need a good title</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user