summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2022-04-28 18:41:53 +0200
committerThomas <tschneider.ac@gmail.com>2022-04-28 18:41:53 +0200
commit0e933cfd501f65d11455469fc2f63db2bc20b239 (patch)
tree49f303f0b908fb3115d74495918db5f80503a6a1
parent4767712fb0f5e2b02dc3b8684aeb868ffe467f0f (diff)
some fixes
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/Account.java20
-rw-r--r--app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java99
-rw-r--r--app/src/main/java/app/fedilab/android/services/PostMessageService.java42
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java13
-rw-r--r--app/src/main/res/values/strings.xml1
6 files changed, 124 insertions, 55 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 302fde2a1..865ac1df3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -26,13 +26,13 @@ android {
}
productFlavors {
fdroid {
- applicationId "fr.gouv.etalab.mastodon"
+ applicationId "fr.gouv.etalab.mastodon.test"
buildConfigField "boolean", "DONATIONS", "true"
buildConfigField "boolean", "push", "false"
flavor = "fdroid"
}
playstore {
- applicationId "app.fedilab.android"
+ applicationId "app.fedilab.android.test"
buildConfigField "boolean", "DONATIONS", "false"
buildConfigField "boolean", "push", "true"
flavor = "playstore"
diff --git a/app/src/main/java/app/fedilab/android/client/entities/Account.java b/app/src/main/java/app/fedilab/android/client/entities/Account.java
index b95f17ad0..47be0b1da 100644
--- a/app/src/main/java/app/fedilab/android/client/entities/Account.java
+++ b/app/src/main/java/app/fedilab/android/client/entities/Account.java
@@ -236,7 +236,7 @@ public class Account implements Serializable {
}
/**
- * Returns an Account by token
+ * Returns an Account by userId and instance
*
* @param userId String
* @param instance String
@@ -255,6 +255,24 @@ public class Account implements Serializable {
}
/**
+ * Returns an Account by token
+ *
+ * @param token String
+ * @return Account {@link Account}
+ */
+ public Account getAccountByToken(String token) throws DBException {
+ if (db == null) {
+ throw new DBException("db is null. Wrong initialization.");
+ }
+ try {
+ Cursor c = db.query(Sqlite.TABLE_USER_ACCOUNT, null, Sqlite.COL_TOKEN + " = \"" + token + "\"", null, null, null, null, "1");
+ return cursorToUser(c);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
* Returns authenticated Account
*
* @return Account {@link Account}
diff --git a/app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java b/app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java
index f87b2fe3e..1876bc7cf 100644
--- a/app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java
+++ b/app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java
@@ -43,6 +43,7 @@ import com.bumptech.glide.request.transition.Transition;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -62,6 +63,7 @@ import retrofit2.converter.gson.GsonConverterFactory;
public class NotificationsHelper {
+ public static HashMap<String, String> since_ids = new HashMap<>();
public static void task(Context context, String slug) throws DBException {
@@ -73,6 +75,10 @@ public class NotificationsHelper {
return;
}
String last_notifid = prefs.getString(context.getString(R.string.LAST_NOTIFICATION_ID) + slug, null);
+ if (since_ids.containsKey(slug)) {
+ last_notifid = since_ids.get(slug);
+ }
+
//Check which notifications the user wants to see
boolean notif_follow = prefs.getBoolean(context.getString(R.string.SET_NOTIF_FOLLOW), true);
boolean notif_mention = prefs.getBoolean(context.getString(R.string.SET_NOTIF_MENTION), true);
@@ -84,11 +90,12 @@ public class NotificationsHelper {
return; //Nothing is done
MastodonNotificationsService mastodonNotificationsService = init(context, slugArray[1]);
+ String finalLast_notifid = last_notifid;
new Thread(() -> {
Notifications notifications = new Notifications();
Call<List<Notification>> notificationsCall;
- if (last_notifid != null) {
- notificationsCall = mastodonNotificationsService.getNotifications(accountDb.token, null, null, null, last_notifid, null, 30);
+ if (finalLast_notifid != null) {
+ notificationsCall = mastodonNotificationsService.getNotifications(accountDb.token, null, null, null, finalLast_notifid, null, 30);
} else {
notificationsCall = mastodonNotificationsService.getNotifications(accountDb.token, null, null, null, null, null, 5);
}
@@ -98,6 +105,9 @@ public class NotificationsHelper {
if (notificationsResponse.isSuccessful()) {
notifications.notifications = notificationsResponse.body();
if (notifications.notifications != null) {
+ if (notifications.notifications.size() > 0) {
+ since_ids.put(slug, notifications.notifications.get(0).id);
+ }
for (Notification notification : notifications.notifications) {
if (notification != null && notification.status != null) {
notification.status = SpannableHelper.convertStatus(context.getApplicationContext(), notification.status);
@@ -285,57 +295,52 @@ public class NotificationsHelper {
intent.putExtra(Helper.INTENT_TARGETED_ACCOUNT, targeted_account);
intent.putExtra(Helper.PREF_INSTANCE, account.instance);
notificationUrl = notifications.get(0).account.avatar;
- if (notificationUrl != null) {
-
- Handler mainHandler = new Handler(Looper.getMainLooper());
-
- final String finalNotificationUrl = notificationUrl;
- Helper.NotifType finalNotifType = notifType;
- String finalMessage = message;
- String finalMessage1 = message;
- Runnable myRunnable = () -> Glide.with(context)
- .asBitmap()
- .load(finalNotificationUrl)
- .listener(new RequestListener<Bitmap>() {
+ Handler mainHandler = new Handler(Looper.getMainLooper());
+ final String finalNotificationUrl = notificationUrl;
+ Helper.NotifType finalNotifType = notifType;
+ String finalMessage = message;
+ String finalMessage1 = message;
+ Runnable myRunnable = () -> Glide.with(context)
+ .asBitmap()
+ .load(finalNotificationUrl != null ? finalNotificationUrl : R.drawable.fedilab_logo_bubbles)
+ .listener(new RequestListener<Bitmap>() {
- @Override
- public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
- return false;
- }
+ @Override
+ public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
+ return false;
+ }
- @Override
- public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
- notify_user(context, account, intent, BitmapFactory.decodeResource(context.getResources(),
- R.mipmap.ic_launcher), finalNotifType, context.getString(R.string.top_notification), finalMessage1);
- String lastNotif = prefs.getString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, null);
- if (lastNotif == null || notifications.get(0).id.compareTo(lastNotif) > 0) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, notifications.get(0).id);
- editor.apply();
- }
- return false;
+ @Override
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
+ notify_user(context, account, intent, BitmapFactory.decodeResource(context.getResources(),
+ R.mipmap.ic_launcher), finalNotifType, context.getString(R.string.top_notification), finalMessage1);
+ String lastNotif = prefs.getString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, null);
+ if (lastNotif == null || notifications.get(0).id.compareTo(lastNotif) > 0) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, notifications.get(0).id);
+ editor.apply();
}
- })
- .into(new CustomTarget<Bitmap>() {
- @Override
- public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
- notify_user(context, account, intent, resource, finalNotifType, context.getString(R.string.top_notification), finalMessage);
- String lastNotif = prefs.getString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, null);
- if (lastNotif == null || notifications.get(0).id.compareTo(lastNotif) > 0) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, notifications.get(0).id);
- editor.apply();
- }
+ return false;
+ }
+ })
+ .into(new CustomTarget<Bitmap>() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
+ notify_user(context, account, intent, resource, finalNotifType, context.getString(R.string.top_notification), finalMessage);
+ String lastNotif = prefs.getString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, null);
+ if (lastNotif == null || notifications.get(0).id.compareTo(lastNotif) > 0) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putString(context.getString(R.string.LAST_NOTIFICATION_ID) + account.user_id + "@" + account.instance, notifications.get(0).id);
+ editor.apply();
}
+ }
- @Override
- public void onLoadCleared(@Nullable Drawable placeholder) {
-
- }
- });
- mainHandler.post(myRunnable);
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
- }
+ }
+ });
+ mainHandler.post(myRunnable);
}
}
diff --git a/app/src/main/java/app/fedilab/android/services/PostMessageService.java b/app/src/main/java/app/fedilab/android/services/PostMessageService.java
index 430ff3ac6..a80ea37e9 100644
--- a/app/src/main/java/app/fedilab/android/services/PostMessageService.java
+++ b/app/src/main/java/app/fedilab/android/services/PostMessageService.java
@@ -14,6 +14,9 @@ package app.fedilab.android.services;
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
* see <http://www.gnu.org/licenses>. */
+import static app.fedilab.android.helper.Helper.NotifType.TOOT;
+import static app.fedilab.android.helper.Helper.notify_user;
+
import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationChannel;
@@ -23,6 +26,7 @@ import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
+import android.text.Html;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -31,10 +35,13 @@ import androidx.core.app.NotificationCompat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
import java.util.concurrent.TimeUnit;
import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
+import app.fedilab.android.activities.ContextActivity;
+import app.fedilab.android.client.entities.Account;
import app.fedilab.android.client.entities.PostState;
import app.fedilab.android.client.entities.StatusDraft;
import app.fedilab.android.client.mastodon.MastodonStatusesService;
@@ -136,6 +143,7 @@ public class PostMessageService extends IntentService {
}
MastodonStatusesService mastodonStatusesService = init(instance);
boolean error = false;
+ Status firstSendMessage = null;
if (statusDraft != null && statusDraft.statusDraftList != null && statusDraft.statusDraftList.size() > 0) {
//If state is null, it is created (typically when submitting the status the first time)
if (statusDraft.state == null) {
@@ -156,8 +164,12 @@ public class PostMessageService extends IntentService {
}
startingPosition++;
}
- String in_reply_to_status = null;
+
List<Status> statuses = statusDraft.statusDraftList;
+ String in_reply_to_status = null;
+ if (statusDraft.statusReplyList != null && statusDraft.statusReplyList.size() > 0) {
+ in_reply_to_status = statusDraft.statusReplyList.get(statusDraft.statusReplyList.size() - 1).id;
+ }
totalMediaSize = 0;
totalBitRead = 0;
for (int i = startingPosition; i < statuses.size(); i++) {
@@ -221,6 +233,9 @@ public class PostMessageService extends IntentService {
if (statusResponse.isSuccessful()) {
Status statusReply = statusResponse.body();
+ if (firstSendMessage == null && statusReply != null) {
+ firstSendMessage = statusReply;
+ }
if (statusReply != null) {
in_reply_to_status = statusReply.id;
statusDraft.state.posts_successfully_sent = i;
@@ -284,6 +299,31 @@ public class PostMessageService extends IntentService {
}
}
}
+
+ if (scheduledDate == null && token != null) {
+ Account account = null;
+ try {
+ account = new Account(PostMessageService.this).getAccountByToken(token);
+ final Intent pendingIntent = new Intent(PostMessageService.this, ContextActivity.class);
+ pendingIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+ pendingIntent.putExtra(Helper.ARG_STATUS, firstSendMessage);
+ pendingIntent.putExtra(Helper.PREF_INSTANCE, account.instance);
+ String text = firstSendMessage.content;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ text = Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY).toString();
+ else
+ text = Html.fromHtml(text).toString();
+ if (text.length() > 255) {
+ text = text.substring(0, 254);
+ text = String.format(Locale.getDefault(), "%s…", text);
+ }
+ notify_user(PostMessageService.this, account, pendingIntent, BitmapFactory.decodeResource(getResources(),
+ R.mipmap.ic_launcher), TOOT, getString(R.string.message_has_been_sent), text);
+ } catch (DBException e) {
+ e.printStackTrace();
+ }
+
+ }
}
}
diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java
index 4c93a79ec..f3340314a 100644
--- a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java
+++ b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java
@@ -188,7 +188,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
boolean capitalize = sharedpreferences.getBoolean(context.getString(R.string.SET_CAPITALIZE), true);
if (inReplyToUser != null) {
if (capitalize) {
- statusDraft.text = inReplyToUser.acct + "\n\n";
+ statusDraft.text = inReplyToUser.acct + "\n";
} else {
statusDraft.text = inReplyToUser.acct + " ";
}
@@ -196,9 +196,9 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
holder.binding.content.setText(statusDraft.text);
statusDraft.cursorPosition = statusDraft.text.length();
if (statusDraft.mentions.size() > 1) {
- statusDraft.text += "\n\n";
+ statusDraft.text += "\n";
for (Mention mention : statusDraft.mentions) {
- if (mention.id != null && mention.acct != null && !mention.id.equals(BaseMainActivity.client_id)) {
+ if (mention.id != null && mention.acct != null && !mention.id.equals(BaseMainActivity.currentUserID)) {
String tootTemp = String.format("@%s ", mention.acct);
statusDraft.text = String.format("%s ", (statusDraft.text + tootTemp.trim()));
}
@@ -1006,8 +1006,13 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
pickupMedia(ComposeActivity.mediaType.ALL, position);
});
if (statusDraft.visibility == null) {
- statusDraft.visibility = BaseMainActivity.accountWeakReference.get().mastodon_account.source.privacy;
+ if (position > 0) {
+ statusDraft.visibility = statusList.get(position - 1).visibility;
+ } else {
+ statusDraft.visibility = BaseMainActivity.accountWeakReference.get().mastodon_account.source.privacy;
+ }
}
+
switch (statusDraft.visibility.toLowerCase()) {
case "public":
holder.binding.buttonVisibility.setImageResource(R.drawable.ic_compose_visibility_public);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e092c4361..9210b245c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1584,6 +1584,7 @@
<string name="more_actions">More Actions</string>
<string name="types_of_notifications_to_display">Types of notifications to display</string>
<string name="set_unfollow_validation_title">Confirm unfollows</string>
+ <string name="message_has_been_sent">Message has been sent!</string>
</resources>