Loading app/src/main/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -150,6 +150,9 @@ <activity android:name=".activities.HashTagActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> <activity android:name=".activities.AnnouncementActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> <activity android:name=".activities.MediaActivity" android:configChanges="keyboardHidden|orientation|screenSize" Loading app/src/main/java/app/fedilab/android/BaseMainActivity.java +17 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ import java.util.regex.Pattern; import app.fedilab.android.activities.AboutActivity; import app.fedilab.android.activities.ActionActivity; import app.fedilab.android.activities.AdminActionActivity; import app.fedilab.android.activities.AnnouncementActivity; import app.fedilab.android.activities.BaseActivity; import app.fedilab.android.activities.ComposeActivity; import app.fedilab.android.activities.ContextActivity; Loading @@ -99,6 +100,8 @@ import app.fedilab.android.activities.ScheduledActivity; import app.fedilab.android.activities.SearchResultTabActivity; import app.fedilab.android.activities.SettingsActivity; import app.fedilab.android.broadcastreceiver.NetworkStateReceiver; import app.fedilab.android.client.entities.api.Emoji; import app.fedilab.android.client.entities.api.EmojiInstance; import app.fedilab.android.client.entities.api.Filter; import app.fedilab.android.client.entities.api.Instance; import app.fedilab.android.client.entities.api.MastodonList; Loading Loading @@ -128,6 +131,7 @@ import es.dmoral.toasty.Toasty; public abstract class BaseMainActivity extends BaseActivity implements NetworkStateReceiver.NetworkStateReceiverListener { public static String currentInstance, currentToken, currentUserID, client_id, client_secret, software; public static List<Emoji> emojis; public static Account.API api; public static boolean admin; public static WeakReference<Account> accountWeakReference; Loading Loading @@ -351,6 +355,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt } else if (id == R.id.nav_partnership) { Intent intent = new Intent(this, PartnerShipActivity.class); startActivity(intent); } else if (id == R.id.nav_announcements) { Intent intent = new Intent(this, AnnouncementActivity.class); startActivity(intent); } binding.drawerLayout.close(); return false; Loading Loading @@ -724,6 +731,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt binding.toolbarSearch.setOnSearchClickListener(v -> binding.tabLayout.setVisibility(View.VISIBLE)); //For receiving data from other activities LocalBroadcastManager.getInstance(BaseMainActivity.this).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA)); if (emojis == null) { new Thread(() -> { try { emojis = new EmojiInstance(BaseMainActivity.this).getEmojiList(BaseMainActivity.currentInstance); } catch (DBException e) { e.printStackTrace(); } }).start(); } } Loading Loading @@ -856,6 +872,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt return false; }); popup.show(); } public void refreshFragment() { Loading app/src/main/java/app/fedilab/android/activities/AnnouncementActivity.java 0 → 100644 +82 −0 Original line number Diff line number Diff line package app.fedilab.android.activities; /* 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 static app.fedilab.android.BaseMainActivity.emojis; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.MenuItem; import androidx.appcompat.app.ActionBar; import androidx.core.content.ContextCompat; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.client.entities.api.EmojiInstance; import app.fedilab.android.databinding.ActivityAnnouncementBinding; import app.fedilab.android.exception.DBException; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonAnnouncement; public class AnnouncementActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ThemeHelper.applyTheme(this); ActivityAnnouncementBinding binding = ActivityAnnouncementBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); setSupportActionBar(binding.toolbar); ActionBar actionBar = getSupportActionBar(); //Remove title if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary))); } binding.title.setText(R.string.action_announcements); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_tags, new FragmentMastodonAnnouncement(), null, null, null); if (emojis == null) { new Thread(() -> { try { emojis = new EmojiInstance(AnnouncementActivity.this).getEmojiList(BaseMainActivity.currentInstance); } catch (DBException e) { e.printStackTrace(); } }).start(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } } app/src/main/java/app/fedilab/android/client/endpoints/MastodonAnnouncementsService.java +5 −6 Original line number Diff line number Diff line Loading @@ -30,28 +30,27 @@ import retrofit2.http.Query; public interface MastodonAnnouncementsService { @GET("/announcements") @GET("announcements") Call<List<Announcement>> getAnnouncements( @Header("Authorization") String token, @Query("with_dismissed") boolean with_dismissed @Query("with_dismissed") Boolean with_dismissed ); @FormUrlEncoded @POST("/announcements/{id}/dismiss") @POST("announcements/{id}/dismiss") Call<Void> dismiss( @Header("Authorization") String app_token, @Path("id") String id ); @FormUrlEncoded @PUT("/announcements/{id}/reactions/{name}") @PUT("announcements/{id}/reactions/{name}") Call<Void> addReaction( @Header("Authorization") String app_token, @Path("id") String id, @Path("name") String name ); @DELETE("/announcements/{id}/reactions/{name}") @DELETE("announcements/{id}/reactions/{name}") Call<Void> removeReaction( @Header("Authorization") String app_token, @Path("id") String id, Loading app/src/main/java/app/fedilab/android/client/entities/api/Announcement.java +5 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ package app.fedilab.android.client.entities.api; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import android.text.Spannable; import com.google.gson.annotations.SerializedName; import java.util.Date; Loading Loading @@ -46,4 +48,7 @@ public class Announcement { public List<Emoji> emojis; @SerializedName("reactions") public List<Reaction> reactions; //Some extra spannable element - They will be filled automatically when fetching the status public transient Spannable span_content; } Loading
app/src/main/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -150,6 +150,9 @@ <activity android:name=".activities.HashTagActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> <activity android:name=".activities.AnnouncementActivity" android:configChanges="keyboardHidden|orientation|screenSize" /> <activity android:name=".activities.MediaActivity" android:configChanges="keyboardHidden|orientation|screenSize" Loading
app/src/main/java/app/fedilab/android/BaseMainActivity.java +17 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,7 @@ import java.util.regex.Pattern; import app.fedilab.android.activities.AboutActivity; import app.fedilab.android.activities.ActionActivity; import app.fedilab.android.activities.AdminActionActivity; import app.fedilab.android.activities.AnnouncementActivity; import app.fedilab.android.activities.BaseActivity; import app.fedilab.android.activities.ComposeActivity; import app.fedilab.android.activities.ContextActivity; Loading @@ -99,6 +100,8 @@ import app.fedilab.android.activities.ScheduledActivity; import app.fedilab.android.activities.SearchResultTabActivity; import app.fedilab.android.activities.SettingsActivity; import app.fedilab.android.broadcastreceiver.NetworkStateReceiver; import app.fedilab.android.client.entities.api.Emoji; import app.fedilab.android.client.entities.api.EmojiInstance; import app.fedilab.android.client.entities.api.Filter; import app.fedilab.android.client.entities.api.Instance; import app.fedilab.android.client.entities.api.MastodonList; Loading Loading @@ -128,6 +131,7 @@ import es.dmoral.toasty.Toasty; public abstract class BaseMainActivity extends BaseActivity implements NetworkStateReceiver.NetworkStateReceiverListener { public static String currentInstance, currentToken, currentUserID, client_id, client_secret, software; public static List<Emoji> emojis; public static Account.API api; public static boolean admin; public static WeakReference<Account> accountWeakReference; Loading Loading @@ -351,6 +355,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt } else if (id == R.id.nav_partnership) { Intent intent = new Intent(this, PartnerShipActivity.class); startActivity(intent); } else if (id == R.id.nav_announcements) { Intent intent = new Intent(this, AnnouncementActivity.class); startActivity(intent); } binding.drawerLayout.close(); return false; Loading Loading @@ -724,6 +731,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt binding.toolbarSearch.setOnSearchClickListener(v -> binding.tabLayout.setVisibility(View.VISIBLE)); //For receiving data from other activities LocalBroadcastManager.getInstance(BaseMainActivity.this).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA)); if (emojis == null) { new Thread(() -> { try { emojis = new EmojiInstance(BaseMainActivity.this).getEmojiList(BaseMainActivity.currentInstance); } catch (DBException e) { e.printStackTrace(); } }).start(); } } Loading Loading @@ -856,6 +872,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt return false; }); popup.show(); } public void refreshFragment() { Loading
app/src/main/java/app/fedilab/android/activities/AnnouncementActivity.java 0 → 100644 +82 −0 Original line number Diff line number Diff line package app.fedilab.android.activities; /* 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 static app.fedilab.android.BaseMainActivity.emojis; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.MenuItem; import androidx.appcompat.app.ActionBar; import androidx.core.content.ContextCompat; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.client.entities.api.EmojiInstance; import app.fedilab.android.databinding.ActivityAnnouncementBinding; import app.fedilab.android.exception.DBException; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonAnnouncement; public class AnnouncementActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ThemeHelper.applyTheme(this); ActivityAnnouncementBinding binding = ActivityAnnouncementBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); setSupportActionBar(binding.toolbar); ActionBar actionBar = getSupportActionBar(); //Remove title if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary))); } binding.title.setText(R.string.action_announcements); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_tags, new FragmentMastodonAnnouncement(), null, null, null); if (emojis == null) { new Thread(() -> { try { emojis = new EmojiInstance(AnnouncementActivity.this).getEmojiList(BaseMainActivity.currentInstance); } catch (DBException e) { e.printStackTrace(); } }).start(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } }
app/src/main/java/app/fedilab/android/client/endpoints/MastodonAnnouncementsService.java +5 −6 Original line number Diff line number Diff line Loading @@ -30,28 +30,27 @@ import retrofit2.http.Query; public interface MastodonAnnouncementsService { @GET("/announcements") @GET("announcements") Call<List<Announcement>> getAnnouncements( @Header("Authorization") String token, @Query("with_dismissed") boolean with_dismissed @Query("with_dismissed") Boolean with_dismissed ); @FormUrlEncoded @POST("/announcements/{id}/dismiss") @POST("announcements/{id}/dismiss") Call<Void> dismiss( @Header("Authorization") String app_token, @Path("id") String id ); @FormUrlEncoded @PUT("/announcements/{id}/reactions/{name}") @PUT("announcements/{id}/reactions/{name}") Call<Void> addReaction( @Header("Authorization") String app_token, @Path("id") String id, @Path("name") String name ); @DELETE("/announcements/{id}/reactions/{name}") @DELETE("announcements/{id}/reactions/{name}") Call<Void> removeReaction( @Header("Authorization") String app_token, @Path("id") String id, Loading
app/src/main/java/app/fedilab/android/client/entities/api/Announcement.java +5 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,8 @@ package app.fedilab.android.client.entities.api; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import android.text.Spannable; import com.google.gson.annotations.SerializedName; import java.util.Date; Loading Loading @@ -46,4 +48,7 @@ public class Announcement { public List<Emoji> emojis; @SerializedName("reactions") public List<Reaction> reactions; //Some extra spannable element - They will be filled automatically when fetching the status public transient Spannable span_content; }