Loading app/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -13,8 +13,8 @@ android { defaultConfig { minSdk 21 targetSdk 32 versionCode 446 versionName "3.11.0" versionCode 448 versionName "3.11.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" Loading app/src/main/assets/release_notes/notes.json +5 −0 Original line number Diff line number Diff line [ { "version": "3.11.2", "code": "448", "note": "Added:\n- Mute/Unmute accounts in the Home timeline from their messages or their profiles\n- Add all users from a list to \"Muted home\" in one click\n- Display/Manage users that are muted for home\n\nFixed:\n- Timeline crashes" }, { "version": "3.11.0", "code": "446", Loading app/src/main/java/app/fedilab/android/BaseMainActivity.java +7 −1 Original line number Diff line number Diff line Loading @@ -127,6 +127,7 @@ 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.BottomMenu; import app.fedilab.android.client.entities.app.MutedAccounts; import app.fedilab.android.client.entities.app.Pinned; import app.fedilab.android.client.entities.app.PinnedTimeline; import app.fedilab.android.client.entities.app.StatusCache; Loading Loading @@ -164,6 +165,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt public static status networkAvailable = UNKNOWN; public static Instance instanceInfo; public static List<Filter> mainFilters; public static List<app.fedilab.android.client.entities.api.Account> filteredAccounts; public static boolean filterFetched; public static boolean show_boosts, show_replies, show_art_nsfw; public static String regex_home, regex_local, regex_public; Loading Loading @@ -302,7 +304,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt } else { BaseMainActivity.currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null); } filteredAccounts = new ArrayList<>(); mamageNewIntent(getIntent()); filterFetched = false; networkStateReceiver = new NetworkStateReceiver(); Loading Loading @@ -565,6 +567,10 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt currentAccount = new Account(BaseMainActivity.this).getConnectedAccount(); //Delete cache older than 7 days new StatusCache(BaseMainActivity.this).deleteForAllAccountAfter7Days(); MutedAccounts mutedAccounts = new MutedAccounts(BaseMainActivity.this).getMutedAccount(currentAccount); if (mutedAccounts != null && mutedAccounts.accounts != null) { filteredAccounts = mutedAccounts.accounts; } } catch (DBException e) { e.printStackTrace(); } Loading app/src/main/java/app/fedilab/android/activities/ActionActivity.java +5 −1 Original line number Diff line number Diff line Loading @@ -54,11 +54,12 @@ public class ActionActivity extends BaseBarActivity { binding.muted.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE)); binding.blocked.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_TIMELINE)); binding.domainBlock.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_DOMAIN_TIMELINE)); binding.mutedHome.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE_HOME)); } private void displayTimeline(Timeline.TimeLineEnum type) { canGoBack = true; if (type == Timeline.TimeLineEnum.MUTED_TIMELINE || type == Timeline.TimeLineEnum.BLOCKED_TIMELINE) { if (type == Timeline.TimeLineEnum.MUTED_TIMELINE || type == Timeline.TimeLineEnum.BLOCKED_TIMELINE || type == Timeline.TimeLineEnum.MUTED_TIMELINE_HOME) { ThemeHelper.slideViewsToLeft(binding.buttonContainer, binding.fragmentContainer, () -> { fragmentMastodonAccount = new FragmentMastodonAccount(); Loading Loading @@ -114,6 +115,9 @@ public class ActionActivity extends BaseBarActivity { case BLOCKED_DOMAIN_TIMELINE: setTitle(R.string.blocked_domains); break; case MUTED_TIMELINE_HOME: setTitle(R.string.muted_menu_home); break; } } Loading app/src/main/java/app/fedilab/android/activities/MastodonListActivity.java +16 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,22 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; } else if (item.getItemId() == R.id.action_user_mute_home) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MastodonListActivity.this, Helper.dialogStyle()); dialogBuilder.setTitle(R.string.put_all_accounts_in_home_muted); dialogBuilder.setPositiveButton(R.string.mute_them_all, (dialog, id) -> { timelinesVM.getAccountsInList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, mastodonList.id, null, null, 0) .observe(MastodonListActivity.this, accounts -> { if (accounts != null && accounts.size() > 0) { for (Account account : accounts) { accountsVM.muteHome(MainActivity.currentAccount, account); } } }); dialog.dismiss(); }); dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); dialogBuilder.show(); } else if (item.getItemId() == R.id.action_manage_users) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MastodonListActivity.this, Helper.dialogStyle()); PopupManageAccountsListBinding popupManageAccountsListBinding = PopupManageAccountsListBinding.inflate(getLayoutInflater()); Loading Loading
app/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -13,8 +13,8 @@ android { defaultConfig { minSdk 21 targetSdk 32 versionCode 446 versionName "3.11.0" versionCode 448 versionName "3.11.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" Loading
app/src/main/assets/release_notes/notes.json +5 −0 Original line number Diff line number Diff line [ { "version": "3.11.2", "code": "448", "note": "Added:\n- Mute/Unmute accounts in the Home timeline from their messages or their profiles\n- Add all users from a list to \"Muted home\" in one click\n- Display/Manage users that are muted for home\n\nFixed:\n- Timeline crashes" }, { "version": "3.11.0", "code": "446", Loading
app/src/main/java/app/fedilab/android/BaseMainActivity.java +7 −1 Original line number Diff line number Diff line Loading @@ -127,6 +127,7 @@ 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.BottomMenu; import app.fedilab.android.client.entities.app.MutedAccounts; import app.fedilab.android.client.entities.app.Pinned; import app.fedilab.android.client.entities.app.PinnedTimeline; import app.fedilab.android.client.entities.app.StatusCache; Loading Loading @@ -164,6 +165,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt public static status networkAvailable = UNKNOWN; public static Instance instanceInfo; public static List<Filter> mainFilters; public static List<app.fedilab.android.client.entities.api.Account> filteredAccounts; public static boolean filterFetched; public static boolean show_boosts, show_replies, show_art_nsfw; public static String regex_home, regex_local, regex_public; Loading Loading @@ -302,7 +304,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt } else { BaseMainActivity.currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null); } filteredAccounts = new ArrayList<>(); mamageNewIntent(getIntent()); filterFetched = false; networkStateReceiver = new NetworkStateReceiver(); Loading Loading @@ -565,6 +567,10 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt currentAccount = new Account(BaseMainActivity.this).getConnectedAccount(); //Delete cache older than 7 days new StatusCache(BaseMainActivity.this).deleteForAllAccountAfter7Days(); MutedAccounts mutedAccounts = new MutedAccounts(BaseMainActivity.this).getMutedAccount(currentAccount); if (mutedAccounts != null && mutedAccounts.accounts != null) { filteredAccounts = mutedAccounts.accounts; } } catch (DBException e) { e.printStackTrace(); } Loading
app/src/main/java/app/fedilab/android/activities/ActionActivity.java +5 −1 Original line number Diff line number Diff line Loading @@ -54,11 +54,12 @@ public class ActionActivity extends BaseBarActivity { binding.muted.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE)); binding.blocked.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_TIMELINE)); binding.domainBlock.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_DOMAIN_TIMELINE)); binding.mutedHome.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE_HOME)); } private void displayTimeline(Timeline.TimeLineEnum type) { canGoBack = true; if (type == Timeline.TimeLineEnum.MUTED_TIMELINE || type == Timeline.TimeLineEnum.BLOCKED_TIMELINE) { if (type == Timeline.TimeLineEnum.MUTED_TIMELINE || type == Timeline.TimeLineEnum.BLOCKED_TIMELINE || type == Timeline.TimeLineEnum.MUTED_TIMELINE_HOME) { ThemeHelper.slideViewsToLeft(binding.buttonContainer, binding.fragmentContainer, () -> { fragmentMastodonAccount = new FragmentMastodonAccount(); Loading Loading @@ -114,6 +115,9 @@ public class ActionActivity extends BaseBarActivity { case BLOCKED_DOMAIN_TIMELINE: setTitle(R.string.blocked_domains); break; case MUTED_TIMELINE_HOME: setTitle(R.string.muted_menu_home); break; } } Loading
app/src/main/java/app/fedilab/android/activities/MastodonListActivity.java +16 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,22 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; } else if (item.getItemId() == R.id.action_user_mute_home) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MastodonListActivity.this, Helper.dialogStyle()); dialogBuilder.setTitle(R.string.put_all_accounts_in_home_muted); dialogBuilder.setPositiveButton(R.string.mute_them_all, (dialog, id) -> { timelinesVM.getAccountsInList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, mastodonList.id, null, null, 0) .observe(MastodonListActivity.this, accounts -> { if (accounts != null && accounts.size() > 0) { for (Account account : accounts) { accountsVM.muteHome(MainActivity.currentAccount, account); } } }); dialog.dismiss(); }); dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); dialogBuilder.show(); } else if (item.getItemId() == R.id.action_manage_users) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MastodonListActivity.this, Helper.dialogStyle()); PopupManageAccountsListBinding popupManageAccountsListBinding = PopupManageAccountsListBinding.inflate(getLayoutInflater()); Loading