diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/helper/Helper.java')
-rw-r--r-- | app/src/main/java/app/fedilab/android/helper/Helper.java | 125 |
1 files changed, 123 insertions, 2 deletions
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((LifecycleOwner) activity, relationShips -> { + if (relationShips != null && relationShips.size() > 0) { + if (!relationShips.get(0).following) { + binding.acccountContainer.setVisibility(View.VISIBLE); + binding.accountFollow.setVisibility(View.VISIBLE); + binding.accountFollow.setOnClickListener(v -> accountsVM.follow(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, account.id, true, false) + .observe((LifecycleOwner) activity, relationShip -> binding.accountFollow.setVisibility(View.GONE))); + } + } + }); + } + } + }); + dialogBuilderOptin.setPositiveButton(R.string.close, (dialog, id) -> dialog.dismiss()); + try { + Handler handler = new Handler(); + handler.postDelayed(() -> { + if (!activity.isFinishing()) { + dialogBuilderOptin.show(); + } + }, 1000); + } catch (Exception e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putInt(activity.getString(R.string.SET_POPUP_RELEASE_NOTES), versionCode); + editor.apply(); + } + } } |