summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2022-07-21 16:19:00 +0200
committerThomas <tschneider.ac@gmail.com>2022-07-21 16:19:00 +0200
commit83ad77f3ea47c8aab394da953c6c5692f7ec5653 (patch)
treef04175e85226127a3793ed255d46a2c66df9358e
parent10fefbe6d9528cfab638515be662cbab7b8a1fd7 (diff)
parent07a819a9c2c0102f97079b8c483f9babfa46bb37 (diff)
Merge branch 'develop' into main3.0.10
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/assets/release_notes/notes.json52
-rw-r--r--app/src/main/java/app/fedilab/android/BaseMainActivity.java14
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ContextActivity.java6
-rw-r--r--app/src/main/java/app/fedilab/android/activities/InstanceActivity.java104
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Account.java6
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Poll.java2
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/app/ReleaseNote.java39
-rw-r--r--app/src/main/java/app/fedilab/android/helper/Helper.java125
-rw-r--r--app/src/main/java/app/fedilab/android/helper/MastodonHelper.java18
-rw-r--r--app/src/main/java/app/fedilab/android/helper/SpannableHelper.java34
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java30
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/NotificationAdapter.java11
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ReleaseNoteAdapter.java119
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java48
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonContext.java3
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java3
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java3
-rw-r--r--app/src/main/res/drawable/ic_baseline_insert_emoticon_24.xml2
-rw-r--r--app/src/main/res/drawable/ic_baseline_notes_24.xml11
-rw-r--r--app/src/main/res/drawable/ic_baseline_translate_24.xml10
-rw-r--r--app/src/main/res/layout/activity_instance.xml101
-rw-r--r--app/src/main/res/layout/drawer_release_note.xml86
-rw-r--r--app/src/main/res/layout/drawer_status_compose.xml17
-rw-r--r--app/src/main/res/layout/popup_release_notes.xml111
-rw-r--r--app/src/main/res/menu/activity_main_drawer.xml153
-rw-r--r--app/src/main/res/menu/main.xml7
-rw-r--r--app/src/main/res/values-sc/strings.xml5
-rw-r--r--app/src/main/res/values-tr/strings.xml5
-rw-r--r--app/src/main/res/values/strings.xml11
-rw-r--r--app/src/main/res/xml/pref_timelines.xml2
-rw-r--r--src/fdroid/fastlane/metadata/android/en/changelogs/400.txt9
32 files changed, 977 insertions, 174 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 4899929e2..f12def81c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
defaultConfig {
minSdk 21
targetSdk 31
- versionCode 399
- versionName "3.0.9"
+ versionCode 400
+ versionName "3.0.10"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
flavorDimensions "default"
diff --git a/app/src/main/assets/release_notes/notes.json b/app/src/main/assets/release_notes/notes.json
new file mode 100644
index 000000000..4efd06915
--- /dev/null
+++ b/app/src/main/assets/release_notes/notes.json
@@ -0,0 +1,52 @@
+[
+ {
+ "version": "3.0.10",
+ "code": "400",
+ "note": "Added:\n- Allow to define the max chars count when not detected (In about the instance)\n- Add emoji one picker when composing (must be enabled in settings)\n- Add release notes with the ability to translate them\n\nFixed:\n- Friendica custom emojis not displayed\n- Long press to store media\n- Some bug fixes"
+ },
+ {
+ "version": "3.0.9",
+ "code": "399",
+ "note": "Added:\n- Set compose language (from compose menu -> three vertical dots)\n- Add reactions support for Pleroma\n- Add privacy indicator at the top right\n\nChanged\n- Improve the scrolling behaviour\n- Scroll to top (tab reselection) will fetch new messages and then scroll to top\n\nFixed:\n- Empty tag timelines\n- Remove focus point for fit media preview\n- Fix cannot share with one account\n- Fix black theme\n- Theme cannot be selected\n- Fix some button colors"
+ },
+ {
+ "version": "3.0.8",
+ "code": "398",
+ "note": "- Keep improving the scroll behaviour\n- Scroll to top (tab reselection) will fetch new messages and then scroll to top\n- Remove focus point for fit media preview\n- Fix cannot share with one account\n- Fix black theme\n- Fix some button colors"
+ },
+ {
+ "version": "3.0.7",
+ "code": "397",
+ "note": "- Fix some bugs reported."
+ },
+ {
+ "version": "3.0.6",
+ "code": "396",
+ "note": "Added:\n- Allow to set a focus point on previews (media editor)\n- Respect the focus point with previews\n- Pagination with the fetch more button support reading up or down\n- Add trends\n\nFixed:\n- Only last push notification is displayed (not grouped)\n- Bad behavior with the right/left scroll\n- Fix long profiles not fully displayed\n- Issues with some polls\n- Some crashes\n- Some bad behaviors"
+ },
+ {
+ "version": "3.0.5",
+ "code": "395",
+ "note": "- Fix some bugs\n- Allow to share with the app"
+ },
+ {
+ "version": "3.0.4",
+ "code": "394",
+ "note": "- Fix crashes for some Pleroma instances"
+ },
+ {
+ "version": "3.0.2",
+ "code": "393",
+ "note": "- Some bug fixes\n- Improve pinned timelines"
+ },
+ {
+ "version": "3.0.1",
+ "code": "391",
+ "note": "Some quick fixes"
+ },
+ {
+ "version": "3.0.0",
+ "code": "390",
+ "note": "New version of Fedilab with new feature.\n- You can now compose threads\n- See the whole thread when replying\n- Cache support\n- New design"
+ }
+] \ No newline at end of file
diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
index 6a490eb22..779f5c3fc 100644
--- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java
+++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
@@ -18,6 +18,7 @@ import static app.fedilab.android.BaseMainActivity.status.DISCONNECTED;
import static app.fedilab.android.BaseMainActivity.status.UNKNOWN;
import static app.fedilab.android.helper.CacheHelper.deleteDir;
import static app.fedilab.android.helper.Helper.PREF_USER_TOKEN;
+import static app.fedilab.android.helper.Helper.displayReleaseNotesIfNeeded;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
@@ -504,6 +505,8 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
} else if (id == R.id.nav_about) {
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
+ } else if (id == R.id.nav_release_notes) {
+ displayReleaseNotesIfNeeded(BaseMainActivity.this, true);
} else if (id == R.id.nav_partnership) {
Intent intent = new Intent(this, PartnerShipActivity.class);
startActivity(intent);
@@ -516,10 +519,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
} else if (id == R.id.nav_cache) {
Intent intent = new Intent(BaseMainActivity.this, CacheActivity.class);
startActivity(intent);
+ } else if (id == R.id.nav_about_instance) {
+ Intent intent = new Intent(BaseMainActivity.this, InstanceActivity.class);
+ startActivity(intent);
}
binding.drawerLayout.close();
return false;
});
+
+
headerMainBinding.instanceInfo.setOnClickListener(v -> startActivity(new Intent(BaseMainActivity.this, InstanceHealthActivity.class)));
headerMainBinding.accountProfilePicture.setOnClickListener(v -> {
Intent intent = new Intent(BaseMainActivity.this, ProfileActivity.class);
@@ -677,10 +685,6 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
AlertDialog alert = alt_bld.create();
alert.show();
return true;
- } else if (itemId == R.id.action_about_instance) {
- Intent intent = new Intent(BaseMainActivity.this, InstanceActivity.class);
- startActivity(intent);
- return true;
} else if (itemId == R.id.action_proxy) {
Intent intent = new Intent(BaseMainActivity.this, ProxyActivity.class);
startActivity(intent);
@@ -759,6 +763,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
currentInstance = currentAccount.instance;
currentUserID = currentAccount.user_id;
+
show_boosts = sharedpreferences.getBoolean(getString(R.string.SET_SHOW_BOOSTS) + currentUserID + currentInstance, true);
show_replies = sharedpreferences.getBoolean(getString(R.string.SET_SHOW_REPLIES) + currentUserID + currentInstance, true);
regex_home = sharedpreferences.getString(getString(R.string.SET_FILTER_REGEX_HOME) + currentUserID + currentInstance, null);
@@ -799,6 +804,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
.observe(BaseMainActivity.this, mastodonAccount -> {
//Initialize static var
currentAccount.mastodon_account = mastodonAccount;
+ displayReleaseNotesIfNeeded(BaseMainActivity.this, false);
new Thread(() -> {
try {
//Update account in db
diff --git a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
index 0287e4d90..c9eb7ecc7 100644
--- a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
@@ -53,14 +53,12 @@ public class ContextActivity extends BaseActivity {
public static boolean displayCW;
public static Resources.Theme theme;
Fragment currentFragment;
- private Status focusedStatus;
- private ActivityConversationBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ThemeHelper.applyTheme(this);
- binding = ActivityConversationBinding.inflate(getLayoutInflater());
+ app.fedilab.android.databinding.ActivityConversationBinding binding = ActivityConversationBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
ActionBar actionBar = getSupportActionBar();
@@ -78,7 +76,7 @@ public class ContextActivity extends BaseActivity {
Bundle b = getIntent().getExtras();
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ContextActivity.this);
displayCW = sharedpreferences.getBoolean(getString(R.string.SET_EXPAND_CW), false);
- focusedStatus = null; // or other values
+ Status focusedStatus = null; // or other values
if (b != null)
focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS);
if (focusedStatus == null || currentAccount == null || currentAccount.mastodon_account == null) {
diff --git a/app/src/main/java/app/fedilab/android/activities/InstanceActivity.java b/app/src/main/java/app/fedilab/android/activities/InstanceActivity.java
index eeea8b6a0..9f5156086 100644
--- a/app/src/main/java/app/fedilab/android/activities/InstanceActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/InstanceActivity.java
@@ -16,6 +16,8 @@ package app.fedilab.android.activities;
import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -23,11 +25,15 @@ import android.text.Html;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.Toast;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider;
+import androidx.preference.PreferenceManager;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.target.CustomTarget;
+import com.bumptech.glide.request.transition.Transition;
import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
@@ -35,13 +41,13 @@ import app.fedilab.android.client.entities.api.Instance;
import app.fedilab.android.databinding.ActivityInstanceBinding;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.viewmodel.mastodon.InstancesVM;
-import es.dmoral.toasty.Toasty;
public class InstanceActivity extends BaseActivity {
ActivityInstanceBinding binding;
+ private boolean applyMaxChar = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -54,8 +60,26 @@ public class InstanceActivity extends BaseActivity {
getWindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
if (getSupportActionBar() != null)
getSupportActionBar().hide();
-
- binding.close.setOnClickListener(view -> finish());
+ SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(InstanceActivity.this);
+ binding.close.setOnClickListener(
+
+ view -> {
+ if (applyMaxChar) {
+ String max_char = binding.maxChar.getText().toString();
+
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ if (!max_char.isEmpty()) {
+ try {
+ editor.putInt(getString(R.string.SET_MAX_INSTANCE_CHAR) + MainActivity.currentInstance, Integer.parseInt(max_char));
+ editor.apply();
+ } catch (Exception ignored) {
+ }
+ }
+ }
+ finish();
+ }
+
+ );
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -66,33 +90,53 @@ public class InstanceActivity extends BaseActivity {
instancesVM.getInstance(BaseMainActivity.currentInstance).observe(InstanceActivity.this, instanceInfo -> {
binding.instanceContainer.setVisibility(View.VISIBLE);
binding.loader.setVisibility(View.GONE);
- if (instanceInfo == null || instanceInfo.info == null) {
- Toasty.error(InstanceActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
- return;
- }
- Instance instance = instanceInfo.info;
- binding.instanceTitle.setText(instance.title);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
- binding.instanceDescription.setText(Html.fromHtml(instance.description, Html.FROM_HTML_MODE_LEGACY));
- else
- binding.instanceDescription.setText(Html.fromHtml(instance.description));
- if (instance.description == null || instance.description.trim().length() == 0)
- binding.instanceDescription.setText(getString(R.string.instance_no_description));
- binding.instanceVersion.setText(instance.version);
- binding.instanceUri.setText(instance.uri);
- if (instance.email == null) {
- binding.instanceContact.hide();
+
+ if (instanceInfo == null || instanceInfo.info == null || instanceInfo.info.description == null) {
+ binding.maxCharContainer.setVisibility(View.VISIBLE);
+ binding.instanceContainer.setVisibility(View.GONE);
+ binding.instanceContact.setVisibility(View.GONE);
+ int val = sharedpreferences.getInt(getString(R.string.SET_MAX_INSTANCE_CHAR) + MainActivity.currentInstance, -1);
+ if (val != -1) {
+ binding.maxChar.setText(String.valueOf(val));
+ }
+ applyMaxChar = true;
+
+ } else {
+ Instance instance = instanceInfo.info;
+ binding.instanceTitle.setText(instance.title);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+ binding.instanceDescription.setText(Html.fromHtml(instance.description, Html.FROM_HTML_MODE_LEGACY));
+ else
+ binding.instanceDescription.setText(Html.fromHtml(instance.description));
+ if (instance.description == null || instance.description.trim().length() == 0)
+ binding.instanceDescription.setText(getString(R.string.instance_no_description));
+ binding.instanceVersion.setText(instance.version);
+ binding.instanceUri.setText(instance.uri);
+ if (instance.email == null) {
+ binding.instanceContact.hide();
+ }
+ Glide.with(InstanceActivity.this)
+ .asDrawable()
+ .load(instance.thumbnail)
+ .into(new CustomTarget<Drawable>() {
+ @Override
+ public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
+ binding.background.setAlpha(0.2f);
+ binding.background.setBackground(resource);
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ });
+
+ binding.instanceContact.setOnClickListener(v -> {
+ Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", instance.email, null));
+ emailIntent.putExtra(Intent.EXTRA_SUBJECT, "[Mastodon] - " + instance.uri);
+ startActivity(Intent.createChooser(emailIntent, getString(R.string.send_email)));
+ });
}
- Glide.with(InstanceActivity.this)
- .asBitmap()
- .load(instance.thumbnail)
- .into(binding.backGroundImage);
-
- binding.instanceContact.setOnClickListener(v -> {
- Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", instance.email, null));
- emailIntent.putExtra(Intent.EXTRA_SUBJECT, "[Mastodon] - " + instance.uri);
- startActivity(Intent.createChooser(emailIntent, getString(R.string.send_email)));
- });
});
}
diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Account.java b/app/src/main/java/app/fedilab/android/client/entities/api/Account.java
index 4b2392d89..fd444d4d4 100644
--- a/app/src/main/java/app/fedilab/android/client/entities/api/Account.java
+++ b/app/src/main/java/app/fedilab/android/client/entities/api/Account.java
@@ -83,7 +83,11 @@ public class Account implements Serializable {
if (display_name == null || display_name.isEmpty()) {
display_name = username;
}
- return SpannableHelper.convert(context, display_name, null, this, null, true, viewWeakReference);
+ return SpannableHelper.convert(context, display_name, null, this, null, false, viewWeakReference);
+ }
+
+ public synchronized Spannable getSpanDisplayNameTitle(Context context, WeakReference<View> viewWeakReference, String title) {
+ return SpannableHelper.convert(context, title, null, this, null, false, viewWeakReference);
}
diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Poll.java b/app/src/main/java/app/fedilab/android/client/entities/api/Poll.java
index a91a9361e..3bf9c4791 100644
--- a/app/src/main/java/app/fedilab/android/client/entities/api/Poll.java
+++ b/app/src/main/java/app/fedilab/android/client/entities/api/Poll.java
@@ -61,7 +61,7 @@ public class Poll implements Serializable {
public transient Spannable span_title;
public Spannable getSpanTitle(Context context, Status status, WeakReference<View> viewWeakReference) {
- span_title = SpannableHelper.convert(context, title, status, null, null, true, viewWeakReference);
+ span_title = SpannableHelper.convert(context, title, status, null, null, false, viewWeakReference);
return span_title;
}
}
diff --git a/app/src/main/java/app/fedilab/android/client/entities/app/ReleaseNote.java b/app/src/main/java/app/fedilab/android/client/entities/app/ReleaseNote.java
new file mode 100644
index 000000000..224d54fe2
--- /dev/null
+++ b/app/src/main/java/app/fedilab/android/client/entities/app/ReleaseNote.java
@@ -0,0 +1,39 @@
+package app.fedilab.android.client.entities.app;
+/* Copyright 2022 Thomas Schneider
+ *
+ * This file is a part of Fedilab
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Fedilab; if not,
+ * see <http://www.gnu.org/licenses>. */
+
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+public class ReleaseNote implements Serializable {
+
+ @SerializedName("languages")
+ public List<Note> ReleaseNotes;
+
+
+ public static class Note implements Serializable {
+ @SerializedName("code")
+ public String code;
+ @SerializedName("version")
+ public String version;
+ @SerializedName("note")
+ public String note;
+ @SerializedName("noteTranslated")
+ public String noteTranslated;
+ }
+}
diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java
index 99be394d8..65e481960 100644
--- a/app/src/main/java/app/fedilab/android/helper/Helper.java
+++ b/app/src/main/java/app/fedilab/android/helper/Helper.java
@@ -74,6 +74,7 @@ import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
+import androidx.core.app.ActivityOptionsCompat;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
@@ -81,10 +82,12 @@ import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
+import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelStoreOwner;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;
@@ -95,6 +98,7 @@ import com.bumptech.glide.request.RequestOptions;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
+import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
@@ -115,10 +119,12 @@ import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.security.Security;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashMap;
@@ -133,19 +139,26 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import app.fedilab.android.BaseMainActivity;
+import app.fedilab.android.BuildConfig;
import app.fedilab.android.MainApplication;
import app.fedilab.android.R;
import app.fedilab.android.activities.ComposeActivity;
import app.fedilab.android.activities.LoginActivity;
import app.fedilab.android.activities.MainActivity;
+import app.fedilab.android.activities.ProfileActivity;
import app.fedilab.android.activities.WebviewActivity;
import app.fedilab.android.broadcastreceiver.ToastMessage;
import app.fedilab.android.client.entities.api.Attachment;
+import app.fedilab.android.client.entities.api.Status;
import app.fedilab.android.client.entities.app.Account;
import app.fedilab.android.client.entities.app.BaseAccount;
+import app.fedilab.android.client.entities.app.ReleaseNote;
+import app.fedilab.android.databinding.PopupReleaseNotesBinding;
import app.fedilab.android.exception.DBException;
import app.fedilab.android.interfaces.OnDownloadInterface;
import app.fedilab.android.sqlite.Sqlite;
+import app.fedilab.android.ui.drawer.ReleaseNoteAdapter;
+import app.fedilab.android.viewmodel.mastodon.AccountsVM;
import app.fedilab.android.viewmodel.mastodon.OauthVM;
import app.fedilab.android.watermark.androidwm.WatermarkBuilder;
import app.fedilab.android.watermark.androidwm.bean.WatermarkText;
@@ -1461,11 +1474,11 @@ public class Helper {
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, channelId)
.setSmallIcon(R.drawable.ic_notification).setTicker(message);
- if (notifType == NotifType.MENTION) {
+ /* if (notifType == NotifType.MENTION) {
if (message.length() > 500) {
message = message.substring(0, 499) + "…";
}
- }
+ }*/
notificationBuilder.setGroup(account.mastodon_account.acct + "@" + account.instance)
.setContentIntent(pIntent)
.setContentText(message);
@@ -1748,4 +1761,112 @@ public class Helper {
}
return null;
}
+
+
+ public static void displayReleaseNotesIfNeeded(Activity activity, boolean forced) {
+ SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(activity);
+ int lastReleaseNoteRead = sharedpreferences.getInt(activity.getString(R.string.SET_POPUP_RELEASE_NOTES), 0);
+ int versionCode = BuildConfig.VERSION_CODE;
+ if (lastReleaseNoteRead != versionCode || forced) {
+ try {
+ InputStream is = activity.getAssets().open("release_notes/notes.json");
+ int size;
+ size = is.available();
+ byte[] buffer = new byte[size];
+ is.read(buffer);
+ is.close();
+ String json = new String(buffer, StandardCharsets.UTF_8);
+ Gson gson = new Gson();
+ AlertDialog.Builder dialogBuilderOptin = new AlertDialog.Builder(activity, Helper.dialogStyle());
+ PopupReleaseNotesBinding binding = PopupReleaseNotesBinding.inflate(activity.getLayoutInflater());
+ dialogBuilderOptin.setView(binding.getRoot());
+ try {
+ List<ReleaseNote.Note> releaseNotes = gson.fromJson(json, new TypeToken<List<ReleaseNote.Note>>() {
+ }.getType());
+ if (releaseNotes != null && releaseNotes.size() > 0) {
+ ReleaseNoteAdapter adapter = new ReleaseNoteAdapter(releaseNotes);
+ binding.releasenotes.setAdapter(adapter);
+ binding.releasenotes.setLayoutManager(new LinearLayoutManager(activity));
+ }
+ } catch (Exception ignored) {
+ }
+ if (BuildConfig.DONATIONS) {
+ binding.aboutSupport.setVisibility(View.VISIBLE);
+ binding.aboutSupportPaypal.setVisibility(View.VISIBLE);
+ } else {
+ binding.aboutSupport.setVisibility(View.GONE);
+ binding.aboutSupportPaypal.setVisibility(View.GONE);
+ }
+ binding.accountFollow.setBackgroundTintList(ThemeHelper.getButtonActionColorStateList(activity));
+ binding.accountFollow.setImageResource(R.drawable.ic_baseline_person_add_24);
+ binding.aboutSupport.setOnClickListener(v -> {
+ Intent intentLiberapay = new Intent(Intent.ACTION_VIEW);
+ intentLiberapay.setData(Uri.parse("https://liberapay.com/tom79"));
+ try {
+ activity.startActivity(intentLiberapay);
+ } catch (Exception e) {
+ Helper.openBrowser(activity, "https://liberapay.com/tom79");
+ }
+ });
+ binding.aboutSupportPaypal.setOnClickListener(v -> Helper.openBrowser(activity, "https://www.paypal.me/Mastalab"));
+ CrossActionHelper.fetchRemoteAccount(activity, "@apps@toot.fedilab.app", new CrossActionHelper.Callback() {
+ @Override
+ public void federatedStatus(Status status) {
+
+ }
+
+ @Override
+ public void federatedAccount(app.fedilab.android.client.entities.api.Account account) {
+ if (account != null && account.username.equalsIgnoreCase("apps")) {
+
+ MastodonHelper.loadPPMastodon(binding.accountPp, account);
+ binding.accountDn.setText(account.display_name);
+ binding.accountUn.setText(account.acct);
+ binding.accountPp.setOnClickListener(v -> {
+ Intent intent = new Intent(activity, ProfileActivity.class);
+ Bundle b = new Bundle();
+ b.putSerializable(Helper.ARG_ACCOUNT, account);
+ intent.putExtras(b);
+ ActivityOptionsCompat options = ActivityOptionsCompat
+ .makeSceneTransitionAnimation(activity, binding.accountPp, activity.getString(R.string.activity_porfile_pp));
+ activity.startActivity(intent, options.toBundle());
+ });
+
+ AccountsVM accountsVM = new ViewModelProvider((ViewModelStoreOwner) activity).get(AccountsVM.class);
+ List<String> ids = new ArrayList<>();
+ ids.add(account.id);
+ accountsVM.getRelationships(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, ids)
+ .observe((Lifec