Add status notification for followed account

This commit is contained in:
Thomas 2021-01-22 15:03:06 +01:00
parent e43ffad4ef
commit 790e53096b
16 changed files with 290 additions and 76 deletions

View File

@ -38,6 +38,6 @@ For reporting issues, visit [Framagit](https://framagit.org/tom79/fedilab/issues
<img src="./images/device-2019-02-02-114910.png" width="250">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="./images/device-2019-02-02-114910.png" width="250">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Lead developer: [toot.fedilab.app/@fedilab](https://toot.fedilab.app/@fedilab) Lead developer: [toot.fedilab.app/@apps](https://toot.fedilab.app/@apps)

View File

@ -162,6 +162,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
private ScheduledExecutorService scheduledExecutorService; private ScheduledExecutorService scheduledExecutorService;
private action doAction; private action doAction;
private API.StatusAction doActionAccount; private API.StatusAction doActionAccount;
ImageButton account_notification;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -191,6 +192,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
account_dn = findViewById(R.id.account_dn); account_dn = findViewById(R.id.account_dn);
account_un = findViewById(R.id.account_un); account_un = findViewById(R.id.account_un);
account_bot = findViewById(R.id.account_bot); account_bot = findViewById(R.id.account_bot);
account_notification = findViewById(R.id.account_notification);
addToList = null; addToList = null;
account_pp.setBackgroundResource(R.drawable.account_pp_border); account_pp.setBackgroundResource(R.drawable.account_pp_border);
if (b != null) { if (b != null) {
@ -740,11 +742,17 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
startActivity(intent); startActivity(intent);
} }
}); });
//Follow button //Follow button
String target = account.getId(); String target = account.getId();
if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE)
target = account.getAcct(); target = account.getAcct();
String finalTarget = target; String finalTarget = target;
account_notification.setOnClickListener(v -> {
if (relationship != null) {
new PostActionAsyncTask(ShowAccountActivity.this, relationship.isNotifying() ? API.StatusAction.UNNOTIFY_FOR_ACCOUNT : API.StatusAction.NOTIFY_FOR_ACCOUNT, finalTarget, ShowAccountActivity.this);
}
});
account_follow.setOnClickListener(v -> { account_follow.setOnClickListener(v -> {
if (doAction == action.NOTHING) { if (doAction == action.NOTHING) {
Toasty.info(ShowAccountActivity.this, getString(R.string.nothing_to_do), Toast.LENGTH_LONG).show(); Toasty.info(ShowAccountActivity.this, getString(R.string.nothing_to_do), Toast.LENGTH_LONG).show();
@ -951,6 +959,17 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
account_follow.setVisibility(View.GONE); account_follow.setVisibility(View.GONE);
doAction = action.NOTHING; doAction = action.NOTHING;
} }
if (!relationship.isFollowing()) {
account_notification.setVisibility(View.GONE);
} else {
account_notification.setVisibility(View.VISIBLE);
}
if (relationship.isNotifying()) {
account_notification.setImageResource(R.drawable.ic_baseline_notifications_account_yes);
} else {
account_notification.setImageResource(R.drawable.ic_baseline_notifications_account_none);
}
} }
@Override @Override
@ -1520,24 +1539,21 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
return displayStatusFragment; return displayStatusFragment;
} }
case 1: case 1:
DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment();
if (peertubeAccount) { if (peertubeAccount) {
DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment();
bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.CHANNELS); bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.CHANNELS);
bundle.putString("targetedid", account.getId()); bundle.putString("targetedid", account.getId());
bundle.putString("instance", Helper.getLiveInstance(ShowAccountActivity.this)); bundle.putString("instance", Helper.getLiveInstance(ShowAccountActivity.this));
bundle.putString("name", account.getAcct()); bundle.putString("name", account.getAcct());
displayAccountsFragment.setArguments(bundle);
return displayAccountsFragment;
} else { } else {
DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment();
bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.FOLLOWING); bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.FOLLOWING);
bundle.putString("targetedid", account.getId()); bundle.putString("targetedid", account.getId());
displayAccountsFragment.setArguments(bundle);
return displayAccountsFragment;
} }
displayAccountsFragment.setArguments(bundle);
return displayAccountsFragment;
default: default:
DisplayAccountsFragment displayAccountsFragment = new DisplayAccountsFragment(); displayAccountsFragment = new DisplayAccountsFragment();
bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.FOLLOWERS); bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.FOLLOWERS);
bundle.putString("targetedid", account.getId()); bundle.putString("targetedid", account.getId());
displayAccountsFragment.setArguments(bundle); displayAccountsFragment.setArguments(bundle);

View File

@ -264,9 +264,11 @@ public class PostActionAsyncTask {
statusCode = gnuapi.postAction(apiAction, targetedId); statusCode = gnuapi.postAction(apiAction, targetedId);
error = gnuapi.getError(); error = gnuapi.getError();
} }
Handler mainHandler = new Handler(Looper.getMainLooper()); if (listener != null) {
Runnable myRunnable = () -> listener.onPostAction(statusCode, apiAction, targetedId, error); Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(myRunnable); Runnable myRunnable = () -> listener.onPostAction(statusCode, apiAction, targetedId, error);
mainHandler.post(myRunnable);
}
}).start(); }).start();
} }

View File

@ -3642,7 +3642,7 @@ public class API {
List<Status> tmp_status = parseStatuses(context, new JSONArray(response)); List<Status> tmp_status = parseStatuses(context, new JSONArray(response));
if (tmp_status.size() > 0) { if (tmp_status.size() > 0) {
for (Status status : tmp_status) { for (Status status : tmp_status) {
if (status.getAccount().getAcct().equals("fedilab")) { if (status.getAccount().getAcct().equals("apps")) {
statuses.add(status); statuses.add(status);
} }
} }
@ -4274,6 +4274,16 @@ public class API {
case FOLLOW: case FOLLOW:
action = String.format("/accounts/%s/follow", targetedId); action = String.format("/accounts/%s/follow", targetedId);
break; break;
case NOTIFY_FOR_ACCOUNT:
params = new HashMap<>();
params.put("notify", "true");
action = String.format("/accounts/%s/follow", targetedId);
break;
case UNNOTIFY_FOR_ACCOUNT:
params = new HashMap<>();
params.put("notify", "false");
action = String.format("/accounts/%s/follow", targetedId);
break;
case REMOTE_FOLLOW: case REMOTE_FOLLOW:
action = "/follows"; action = "/follows";
params = new HashMap<>(); params = new HashMap<>();
@ -4801,7 +4811,7 @@ public class API {
return apiResponse; return apiResponse;
} }
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean notif_follow, notif_add, notif_mention, notif_share, notif_poll; boolean notif_follow, notif_add, notif_mention, notif_share, notif_poll, notif_status;
StringBuilder parameters = new StringBuilder(); StringBuilder parameters = new StringBuilder();
//TODO: If pixelfed supports exclude_types this condition needs to be changed //TODO: If pixelfed supports exclude_types this condition needs to be changed
if (type == DisplayNotificationsFragment.Type.ALL && MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED) { if (type == DisplayNotificationsFragment.Type.ALL && MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED) {
@ -4811,12 +4821,14 @@ public class API {
notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION_FILTER, true); notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION_FILTER, true);
notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE_FILTER, true); notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE_FILTER, true);
notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL_FILTER, true); notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL_FILTER, true);
notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS_FILTER, true);
} else { } else {
notif_follow = sharedpreferences.getBoolean(Helper.SET_NOTIF_FOLLOW, true); notif_follow = sharedpreferences.getBoolean(Helper.SET_NOTIF_FOLLOW, true);
notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD, true); notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD, true);
notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true); notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true);
notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true); notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true);
notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true); notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true);
notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS, true);
} }
@ -4828,6 +4840,8 @@ public class API {
parameters.append("exclude_types[]=").append("favourite").append("&"); parameters.append("exclude_types[]=").append("favourite").append("&");
if (!notif_share) if (!notif_share)
parameters.append("exclude_types[]=").append("reblog").append("&"); parameters.append("exclude_types[]=").append("reblog").append("&");
if (!notif_status)
parameters.append("exclude_types[]=").append("status").append("&");
if (!notif_mention) if (!notif_mention)
parameters.append("exclude_types[]=").append("mention").append("&"); parameters.append("exclude_types[]=").append("mention").append("&");
if (!notif_poll) if (!notif_poll)
@ -4841,6 +4855,7 @@ public class API {
parameters.append("exclude_types[]=").append("follow_request").append("&"); parameters.append("exclude_types[]=").append("follow_request").append("&");
parameters.append("exclude_types[]=").append("favourite").append("&"); parameters.append("exclude_types[]=").append("favourite").append("&");
parameters.append("exclude_types[]=").append("reblog").append("&"); parameters.append("exclude_types[]=").append("reblog").append("&");
parameters.append("exclude_types[]=").append("status").append("&");
parameters.append("exclude_types[]=").append("poll").append("&"); parameters.append("exclude_types[]=").append("poll").append("&");
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16)); parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16));
params.put("exclude_types[]", parameters.toString()); params.put("exclude_types[]", parameters.toString());
@ -4848,6 +4863,7 @@ public class API {
parameters.append("exclude_types[]=").append("follow").append("&"); parameters.append("exclude_types[]=").append("follow").append("&");
parameters.append("exclude_types[]=").append("follow_request").append("&"); parameters.append("exclude_types[]=").append("follow_request").append("&");
parameters.append("exclude_types[]=").append("mention").append("&"); parameters.append("exclude_types[]=").append("mention").append("&");
parameters.append("exclude_types[]=").append("status").append("&");
parameters.append("exclude_types[]=").append("reblog").append("&"); parameters.append("exclude_types[]=").append("reblog").append("&");
parameters.append("exclude_types[]=").append("poll").append("&"); parameters.append("exclude_types[]=").append("poll").append("&");
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16)); parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16));
@ -4855,6 +4871,7 @@ public class API {
} else if (type == DisplayNotificationsFragment.Type.BOOST) { } else if (type == DisplayNotificationsFragment.Type.BOOST) {
parameters.append("exclude_types[]=").append("follow").append("&"); parameters.append("exclude_types[]=").append("follow").append("&");
parameters.append("exclude_types[]=").append("follow_request").append("&"); parameters.append("exclude_types[]=").append("follow_request").append("&");
parameters.append("exclude_types[]=").append("status").append("&");
parameters.append("exclude_types[]=").append("mention").append("&"); parameters.append("exclude_types[]=").append("mention").append("&");
parameters.append("exclude_types[]=").append("favourite").append("&"); parameters.append("exclude_types[]=").append("favourite").append("&");
parameters.append("exclude_types[]=").append("poll").append("&"); parameters.append("exclude_types[]=").append("poll").append("&");
@ -4863,12 +4880,22 @@ public class API {
} else if (type == DisplayNotificationsFragment.Type.POLL) { } else if (type == DisplayNotificationsFragment.Type.POLL) {
parameters.append("exclude_types[]=").append("reblog").append("&"); parameters.append("exclude_types[]=").append("reblog").append("&");
parameters.append("exclude_types[]=").append("follow").append("&"); parameters.append("exclude_types[]=").append("follow").append("&");
parameters.append("exclude_types[]=").append("status").append("&");
parameters.append("exclude_types[]=").append("follow_request").append("&"); parameters.append("exclude_types[]=").append("follow_request").append("&");
parameters.append("exclude_types[]=").append("mention").append("&"); parameters.append("exclude_types[]=").append("mention").append("&");
parameters.append("exclude_types[]=").append("favourite").append("&"); parameters.append("exclude_types[]=").append("favourite").append("&");
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16)); parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16));
params.put("exclude_types[]", parameters.toString()); params.put("exclude_types[]", parameters.toString());
} else if (type == DisplayNotificationsFragment.Type.FOLLOW) { } else if (type == DisplayNotificationsFragment.Type.FOLLOW) {
parameters.append("exclude_types[]=").append("status").append("&");
parameters.append("exclude_types[]=").append("reblog").append("&");
parameters.append("exclude_types[]=").append("mention").append("&");
parameters.append("exclude_types[]=").append("favourite").append("&");
parameters.append("exclude_types[]=").append("poll").append("&");
parameters = new StringBuilder(parameters.substring(0, parameters.length() - 1).substring(16));
params.put("exclude_types[]", parameters.toString());
} else if (type == DisplayNotificationsFragment.Type.STATUS) {
parameters.append("exclude_types[]=").append("follow").append("&");
parameters.append("exclude_types[]=").append("reblog").append("&"); parameters.append("exclude_types[]=").append("reblog").append("&");
parameters.append("exclude_types[]=").append("mention").append("&"); parameters.append("exclude_types[]=").append("mention").append("&");
parameters.append("exclude_types[]=").append("favourite").append("&"); parameters.append("exclude_types[]=").append("favourite").append("&");
@ -6081,6 +6108,17 @@ public class API {
} catch (Exception ignored) { } catch (Exception ignored) {
relationship.setBlocked_by(false); relationship.setBlocked_by(false);
} }
try {
relationship.setDomain_blocking(resobj.getBoolean("domain_blocking"));
} catch (Exception ignored) {
relationship.setDomain_blocking(false);
}
relationship.setNote(resobj.getString("note"));
try {
relationship.setNotifying(resobj.getBoolean("notifying"));
} catch (Exception ignored) {
relationship.setNotifying(false);
}
relationship.setRequested(resobj.getBoolean("requested")); relationship.setRequested(resobj.getBoolean("requested"));
} catch (JSONException e) { } catch (JSONException e) {
setDefaultError(e); setDefaultError(e);
@ -6257,6 +6295,8 @@ public class API {
UNBLOCK, UNBLOCK,
FOLLOW, FOLLOW,
UNFOLLOW, UNFOLLOW,
NOTIFY_FOR_ACCOUNT,
UNNOTIFY_FOR_ACCOUNT,
CREATESTATUS, CREATESTATUS,
UNSTATUS, UNSTATUS,
AUTHORIZE, AUTHORIZE,

View File

@ -76,7 +76,7 @@ public class ManageTimelines {
private String currentFilter; private String currentFilter;
private boolean notif_follow, notif_add, notif_mention, notif_share, notif_poll; private boolean notif_follow, notif_add, notif_mention, notif_share, notif_poll, notif_status;
public static Type typeFromDb(String value) { public static Type typeFromDb(String value) {
switch (value) { switch (value) {
@ -387,18 +387,21 @@ public class ManageTimelines {
final MenuItem itemMention = menu.findItem(R.id.action_mention); final MenuItem itemMention = menu.findItem(R.id.action_mention);
final MenuItem itemBoost = menu.findItem(R.id.action_boost); final MenuItem itemBoost = menu.findItem(R.id.action_boost);
final MenuItem itemPoll = menu.findItem(R.id.action_poll); final MenuItem itemPoll = menu.findItem(R.id.action_poll);
final MenuItem itemStatus = menu.findItem(R.id.action_status);
notif_follow = sharedpreferences.getBoolean(Helper.SET_NOTIF_FOLLOW_FILTER, true); notif_follow = sharedpreferences.getBoolean(Helper.SET_NOTIF_FOLLOW_FILTER, true);
notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD_FILTER, true); notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD_FILTER, true);
notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION_FILTER, true); notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION_FILTER, true);
notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE_FILTER, true); notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE_FILTER, true);
notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL_FILTER, true); notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL_FILTER, true);
notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS_FILTER, true);
itemFavourite.setChecked(notif_add); itemFavourite.setChecked(notif_add);
itemFollow.setChecked(notif_follow); itemFollow.setChecked(notif_follow);
itemMention.setChecked(notif_mention); itemMention.setChecked(notif_mention);
itemBoost.setChecked(notif_share); itemBoost.setChecked(notif_share);
if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) {
itemPoll.setChecked(notif_poll); itemPoll.setChecked(notif_poll);
else itemStatus.setChecked(notif_status);
} else
itemPoll.setVisible(false); itemPoll.setVisible(false);
popup.setOnDismissListener(menu1 -> { popup.setOnDismissListener(menu1 -> {
@ -423,42 +426,48 @@ public class ManageTimelines {
return false; return false;
} }
}); });
switch (item.getItemId()) { int itemId = item.getItemId();
case R.id.action_favorite: if (itemId == R.id.action_favorite) {
SharedPreferences.Editor editor = sharedpreferences.edit(); SharedPreferences.Editor editor = sharedpreferences.edit();
notif_add = !notif_add; notif_add = !notif_add;
editor.putBoolean(Helper.SET_NOTIF_ADD_FILTER, notif_add); editor.putBoolean(Helper.SET_NOTIF_ADD_FILTER, notif_add);
itemFavourite.setChecked(notif_add); itemFavourite.setChecked(notif_add);
editor.apply(); editor.apply();
break; } else if (itemId == R.id.action_follow) {
case R.id.action_follow: SharedPreferences.Editor editor;
editor = sharedpreferences.edit(); editor = sharedpreferences.edit();
notif_follow = !notif_follow; notif_follow = !notif_follow;
editor.putBoolean(Helper.SET_NOTIF_FOLLOW_FILTER, notif_follow); editor.putBoolean(Helper.SET_NOTIF_FOLLOW_FILTER, notif_follow);
itemFollow.setChecked(notif_follow); itemFollow.setChecked(notif_follow);
editor.apply(); editor.apply();
break; } else if (itemId == R.id.action_mention) {
case R.id.action_mention: SharedPreferences.Editor editor;
editor = sharedpreferences.edit(); editor = sharedpreferences.edit();
notif_mention = !notif_mention; notif_mention = !notif_mention;
editor.putBoolean(Helper.SET_NOTIF_MENTION_FILTER, notif_mention); editor.putBoolean(Helper.SET_NOTIF_MENTION_FILTER, notif_mention);
itemMention.setChecked(notif_mention); itemMention.setChecked(notif_mention);
editor.apply(); editor.apply();
break; } else if (itemId == R.id.action_boost) {
case R.id.action_boost: SharedPreferences.Editor editor;
editor = sharedpreferences.edit(); editor = sharedpreferences.edit();
notif_share = !notif_share; notif_share = !notif_share;
editor.putBoolean(Helper.SET_NOTIF_SHARE_FILTER, notif_share); editor.putBoolean(Helper.SET_NOTIF_SHARE_FILTER, notif_share);
itemBoost.setChecked(notif_share); itemBoost.setChecked(notif_share);
editor.apply(); editor.apply();
break; } else if (itemId == R.id.action_poll) {
case R.id.action_poll: SharedPreferences.Editor editor;
editor = sharedpreferences.edit(); editor = sharedpreferences.edit();
notif_poll = !notif_poll; notif_poll = !notif_poll;
editor.putBoolean(Helper.SET_NOTIF_POLL_FILTER, notif_poll); editor.putBoolean(Helper.SET_NOTIF_POLL_FILTER, notif_poll);
itemPoll.setChecked(notif_poll); itemPoll.setChecked(notif_poll);
editor.apply(); editor.apply();
break; } else if (itemId == R.id.action_status) {
SharedPreferences.Editor editor;
editor = sharedpreferences.edit();
notif_status = !notif_status;
editor.putBoolean(Helper.SET_NOTIF_STATUS_FILTER, notif_status);
itemStatus.setChecked(notif_status);
editor.apply();
} }
return false; return false;
}); });

View File

@ -25,12 +25,15 @@ public class Relationship {
private boolean following; private boolean following;
private boolean followed_by; private boolean followed_by;
private boolean blocking; private boolean blocking;
private boolean domain_blocking;
private boolean muting; private boolean muting;
private boolean requested; private boolean requested;
private boolean muting_notifications; private boolean muting_notifications;
private boolean endorsed; private boolean endorsed;
private boolean showing_reblogs; private boolean showing_reblogs;
private boolean blocked_by; private boolean blocked_by;
private String note;
private boolean notifying;
public String getId() { public String getId() {
@ -112,4 +115,28 @@ public class Relationship {
public void setBlocked_by(boolean blocked_by) { public void setBlocked_by(boolean blocked_by) {
this.blocked_by = blocked_by; this.blocked_by = blocked_by;
} }
public boolean isDomain_blocking() {
return domain_blocking;
}
public void setDomain_blocking(boolean domain_blocking) {
this.domain_blocking = domain_blocking;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public boolean isNotifying() {
return notifying;
}
public void setNotifying(boolean notifying) {
this.notifying = notifying;
}
} }

View File

@ -607,6 +607,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true); boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true);
boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true); boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true);
boolean notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true); boolean notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true);
boolean notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS, true);
boolean notif_wifi = sharedpreferences.getBoolean(Helper.SET_WIFI_ONLY, false); boolean notif_wifi = sharedpreferences.getBoolean(Helper.SET_WIFI_ONLY, false);
boolean notif_silent = sharedpreferences.getBoolean(Helper.SET_NOTIF_SILENT, false); boolean notif_silent = sharedpreferences.getBoolean(Helper.SET_NOTIF_SILENT, false);
@ -621,7 +622,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
final SwitchCompat set_notif_follow_mention = rootView.findViewById(R.id.set_notif_follow_mention); final SwitchCompat set_notif_follow_mention = rootView.findViewById(R.id.set_notif_follow_mention);
final SwitchCompat set_notif_follow_share = rootView.findViewById(R.id.set_notif_follow_share); final SwitchCompat set_notif_follow_share = rootView.findViewById(R.id.set_notif_follow_share);
final SwitchCompat set_notif_follow_poll = rootView.findViewById(R.id.set_notif_follow_poll); final SwitchCompat set_notif_follow_poll = rootView.findViewById(R.id.set_notif_follow_poll);
final SwitchCompat set_notif_status = rootView.findViewById(R.id.set_notif_status);
final SwitchCompat switchCompatWIFI = rootView.findViewById(R.id.set_wifi_only); final SwitchCompat switchCompatWIFI = rootView.findViewById(R.id.set_wifi_only);
final SwitchCompat switchCompatSilent = rootView.findViewById(R.id.set_silence); final SwitchCompat switchCompatSilent = rootView.findViewById(R.id.set_silence);
@ -637,6 +638,8 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
final Button sound_poll = rootView.findViewById(R.id.sound_poll); final Button sound_poll = rootView.findViewById(R.id.sound_poll);
final Button sound_backup = rootView.findViewById(R.id.sound_backup); final Button sound_backup = rootView.findViewById(R.id.sound_backup);
final Button sound_media = rootView.findViewById(R.id.sound_media); final Button sound_media = rootView.findViewById(R.id.sound_media);
final Button sound_status = rootView.findViewById(R.id.sound_status);
final ImageButton set_hide_status_bar = rootView.findViewById(R.id.set_hide_status_bar); final ImageButton set_hide_status_bar = rootView.findViewById(R.id.set_hide_status_bar);
Button set_notif_sound = rootView.findViewById(R.id.set_notif_sound); Button set_notif_sound = rootView.findViewById(R.id.set_notif_sound);
@ -703,6 +706,12 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
intent.putExtra(Settings.EXTRA_CHANNEL_ID, "channel_store"); intent.putExtra(Settings.EXTRA_CHANNEL_ID, "channel_store");
startActivity(intent); startActivity(intent);
}); });
sound_status.setOnClickListener(v -> {
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, "channel_status");
startActivity(intent);
});
} else { } else {
set_notif_sound.setVisibility(View.VISIBLE); set_notif_sound.setVisibility(View.VISIBLE);
channels_container.setVisibility(View.GONE); channels_container.setVisibility(View.GONE);
@ -817,7 +826,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
set_notif_follow_mention.setChecked(notif_mention); set_notif_follow_mention.setChecked(notif_mention);
set_notif_follow_share.setChecked(notif_share); set_notif_follow_share.setChecked(notif_share);
set_notif_follow_poll.setChecked(notif_poll); set_notif_follow_poll.setChecked(notif_poll);
set_notif_status.setChecked(notif_status);
switchCompatWIFI.setChecked(notif_wifi); switchCompatWIFI.setChecked(notif_wifi);
switchCompatSilent.setChecked(notif_silent); switchCompatSilent.setChecked(notif_silent);
@ -848,7 +857,11 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
editor.putBoolean(Helper.SET_NOTIF_POLL, set_notif_follow_poll.isChecked()); editor.putBoolean(Helper.SET_NOTIF_POLL, set_notif_follow_poll.isChecked());
editor.apply(); editor.apply();
}); });
set_notif_status.setOnClickListener(v -> {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Helper.SET_NOTIF_STATUS, set_notif_status.isChecked());
editor.apply();
});
switchCompatWIFI.setOnCheckedChangeListener((buttonView, isChecked) -> { switchCompatWIFI.setOnCheckedChangeListener((buttonView, isChecked) -> {
// Save the state here // Save the state here
@ -2112,7 +2125,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
update_tracking_domains.setOnClickListener(v -> { update_tracking_domains.setOnClickListener(v -> {
update_tracking_domains.setEnabled(false); update_tracking_domains.setEnabled(false);
Intent scriptIntent = new Intent(context, DownloadTrackingDBScriptsService.class); Intent scriptIntent = new Intent(context, DownloadTrackingDBScriptsService.class);
((Activity) context).startService(scriptIntent); context.startService(scriptIntent);
} }
); );

View File

@ -501,6 +501,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
MENTION, MENTION,
FAVORITE, FAVORITE,
BOOST, BOOST,
STATUS,
POLL, POLL,
FOLLOW FOLLOW
} }

View File

@ -33,6 +33,8 @@ import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import org.jetbrains.annotations.NotNull;
import java.util.Objects; import java.util.Objects;
import app.fedilab.android.R; import app.fedilab.android.R;
@ -67,6 +69,7 @@ public class TabLayoutNotificationsFragment extends Fragment {
TabLayout.Tab tabMention = tabLayout.newTab(); TabLayout.Tab tabMention = tabLayout.newTab();
TabLayout.Tab tabFav = tabLayout.newTab(); TabLayout.Tab tabFav = tabLayout.newTab();
TabLayout.Tab tabBoost = tabLayout.newTab(); TabLayout.Tab tabBoost = tabLayout.newTab();
TabLayout.Tab tabStatus = tabLayout.newTab();
TabLayout.Tab tabPoll = tabLayout.newTab(); TabLayout.Tab tabPoll = tabLayout.newTab();
TabLayout.Tab tabFollow = tabLayout.newTab(); TabLayout.Tab tabFollow = tabLayout.newTab();
@ -75,8 +78,10 @@ public class TabLayoutNotificationsFragment extends Fragment {
tabFav.setCustomView(R.layout.tab_badge); tabFav.setCustomView(R.layout.tab_badge);
if (MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) if (MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA)
tabBoost.setCustomView(R.layout.tab_badge); tabBoost.setCustomView(R.layout.tab_badge);
if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) {
tabPoll.setCustomView(R.layout.tab_badge); tabPoll.setCustomView(R.layout.tab_badge);
tabStatus.setCustomView(R.layout.tab_badge);
}
tabFollow.setCustomView(R.layout.tab_badge); tabFollow.setCustomView(R.layout.tab_badge);
@ -100,13 +105,19 @@ public class TabLayoutNotificationsFragment extends Fragment {
iconBoost.setImageResource(R.drawable.ic_repeat_notif_tab); iconBoost.setImageResource(R.drawable.ic_repeat_notif_tab);
} }
ImageView iconStatus = null;
if (tabStatus.getCustomView() != null) {
iconStatus = tabStatus.getCustomView().findViewById(R.id.tab_icon);
iconStatus.setImageResource(R.drawable.ic_baseline_home_notif);
}
ImageView iconPoll = null; ImageView iconPoll = null;
if (tabPoll.getCustomView() != null) { if (tabPoll.getCustomView() != null) {
iconPoll = tabPoll.getCustomView().findViewById(R.id.tab_icon); iconPoll = tabPoll.getCustomView().findViewById(R.id.tab_icon);
iconPoll.setImageResource(R.drawable.ic_view_list_poll_notif); iconPoll.setImageResource(R.drawable.ic_view_list_poll_notif);
} }
@SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") @SuppressLint("CutPasteId")
ImageView iconFollow = tabFollow.getCustomView().findViewById(R.id.tab_icon); ImageView iconFollow = tabFollow.getCustomView().findViewById(R.id.tab_icon);
iconFollow.setImageResource(R.drawable.ic_follow_notif_tab); iconFollow.setImageResource(R.drawable.ic_follow_notif_tab);
@ -118,6 +129,8 @@ public class TabLayoutNotificationsFragment extends Fragment {
tabLayout.addTab(tabBoost); tabLayout.addTab(tabBoost);
if (tabPoll.getCustomView() != null) if (tabPoll.getCustomView() != null)
tabLayout.addTab(tabPoll); tabLayout.addTab(tabPoll);
if (tabStatus.getCustomView() != null)
tabLayout.addTab(tabStatus);
tabLayout.addTab(tabFollow); tabLayout.addTab(tabFollow);
if (theme == Helper.THEME_BLACK) if (theme == Helper.THEME_BLACK)
@ -133,6 +146,8 @@ public class TabLayoutNotificationsFragment extends Fragment {
iconBoost.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN); iconBoost.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN);
if (iconPoll != null) if (iconPoll != null)
iconPoll.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN); iconPoll.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN);
if (iconStatus != null)
iconStatus.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN);
iconFollow.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN); iconFollow.setColorFilter(ContextCompat.getColor(context, R.color.action_light_header), PorterDuff.Mode.SRC_IN);
} else { } else {
iconMention.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN); iconMention.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN);
@ -142,14 +157,15 @@ public class TabLayoutNotificationsFragment extends Fragment {
iconBoost.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN); iconBoost.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN);
if (iconPoll != null) if (iconPoll != null)
iconPoll.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN); iconPoll.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN);
if (iconStatus != null)
iconStatus.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN);
iconFollow.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN); iconFollow.setColorFilter(ContextCompat.getColor(context, R.color.dark_text), PorterDuff.Mode.SRC_IN);
} }
viewPager = inflatedView.findViewById(R.id.viewpager); viewPager = inflatedView.findViewById(R.id.viewpager);
viewPager.setEnableSwipe(false); viewPager.setEnableSwipe(false);
viewPager.setAdapter(new PagerAdapter viewPager.setAdapter(new PagerAdapter(getChildFragmentManager(), tabLayout.getTabCount()));
(getChildFragmentManager(), tabLayout.getTabCount()));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override @Override
@ -206,7 +222,7 @@ public class TabLayoutNotificationsFragment extends Fragment {
/** /**
* Page Adapter for settings * Page Adapter for settings
*/ */
private class PagerAdapter extends FragmentStatePagerAdapter { private static class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs; int mNumOfTabs;
private PagerAdapter(FragmentManager fm, int NumOfTabs) { private PagerAdapter(FragmentManager fm, int NumOfTabs) {
@ -215,7 +231,7 @@ public class TabLayoutNotificationsFragment extends Fragment {
} }
@Override @Override
public Fragment getItem(int position) { public @NotNull Fragment getItem(int position) {
DisplayNotificationsFragment displayNotificationsFragment = new DisplayNotificationsFragment(); DisplayNotificationsFragment displayNotificationsFragment = new DisplayNotificationsFragment();
DisplayNotificationsFragment.Type type = null; DisplayNotificationsFragment.Type type = null;
String tag = ""; String tag = "";
@ -244,12 +260,15 @@ public class TabLayoutNotificationsFragment extends Fragment {
type = DisplayNotificationsFragment.Type.BOOST; type = DisplayNotificationsFragment.Type.BOOST;
break; break;
case 4: case 4:
type = DisplayNotificationsFragment.Type.STATUS;
break;
case 5:
if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON)
type = DisplayNotificationsFragment.Type.POLL; type = DisplayNotificationsFragment.Type.POLL;
else else
type = DisplayNotificationsFragment.Type.FOLLOW; type = DisplayNotificationsFragment.Type.FOLLOW;
break; break;
case 5: case 6:
if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON)
type = DisplayNotificationsFragment.Type.FOLLOW; type = DisplayNotificationsFragment.Type.FOLLOW;
default: default:

View File

@ -426,11 +426,13 @@ public class BaseHelper {
public static final String SET_NOTIF_MENTION = "set_notif_follow_mention"; public static final String SET_NOTIF_MENTION = "set_notif_follow_mention";
public static final String SET_NOTIF_SHARE = "set_notif_follow_share"; public static final String SET_NOTIF_SHARE = "set_notif_follow_share";
public static final String SET_NOTIF_POLL = "set_notif_follow_poll"; public static final String SET_NOTIF_POLL = "set_notif_follow_poll";
public static final String SET_NOTIF_STATUS = "set_notif_follow_status";
public static final String SET_NOTIF_FOLLOW_FILTER = "set_notif_follow_filter"; public static final String SET_NOTIF_FOLLOW_FILTER = "set_notif_follow_filter";
public static final String SET_NOTIF_ADD_FILTER = "set_notif_follow_add_filter"; public static final String SET_NOTIF_ADD_FILTER = "set_notif_follow_add_filter";
public static final String SET_NOTIF_MENTION_FILTER = "set_notif_follow_mention_filter"; public static final String SET_NOTIF_MENTION_FILTER = "set_notif_follow_mention_filter";
public static final String SET_NOTIF_SHARE_FILTER = "set_notif_follow_share_filter"; public static final String SET_NOTIF_SHARE_FILTER = "set_notif_follow_share_filter";
public static final String SET_NOTIF_POLL_FILTER = "set_notif_follow_poll_filter"; public static final String SET_NOTIF_POLL_FILTER = "set_notif_follow_poll_filter";
public static final String SET_NOTIF_STATUS_FILTER = "set_notif_follow_status_filter";
public static final String SET_FILTER_REGEX_HOME = "set_filter_regex_home"; public static final String SET_FILTER_REGEX_HOME = "set_filter_regex_home";
public static final String SET_FILTER_REGEX_LOCAL = "set_filter_regex_local"; public static final String SET_FILTER_REGEX_LOCAL = "set_filter_regex_local";
public static final String SET_FILTER_REGEX_PUBLIC = "set_filter_regex_public"; public static final String SET_FILTER_REGEX_PUBLIC = "set_filter_regex_public";
@ -4482,6 +4484,7 @@ public class BaseHelper {
BOOST, BOOST,
FAV, FAV,
POLL, POLL,
STATUS,
BACKUP, BACKUP,
STORE, STORE,
TOOT TOOT

View File

@ -56,8 +56,6 @@ import com.koushikdutta.async.http.WebSocket;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -67,7 +65,6 @@ import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.client.API; import app.fedilab.android.client.API;
import app.fedilab.android.client.Entities.Account; import app.fedilab.android.client.Entities.Account;
import app.fedilab.android.client.Entities.Notification; import app.fedilab.android.client.Entities.Notification;
import app.fedilab.android.client.TLSSocketFactory;
import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.Helper;
import app.fedilab.android.sqlite.AccountDAO; import app.fedilab.android.sqlite.AccountDAO;
import app.fedilab.android.sqlite.Sqlite; import app.fedilab.android.sqlite.Sqlite;
@ -231,14 +228,6 @@ public abstract class BaseLiveNotificationService extends Service implements Net
String urlKey = "wss://" + account.getInstance() + "/api/v1/streaming/?stream=" + notif_url + "&access_token=" + account.getToken(); String urlKey = "wss://" + account.getInstance() + "/api/v1/streaming/?stream=" + notif_url + "&access_token=" + account.getToken();
Uri url = Uri.parse(urlKey); Uri url = Uri.parse(urlKey);
AsyncHttpRequest.setDefaultHeaders(headers, url); AsyncHttpRequest.setDefaultHeaders(headers, url);
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
try {
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(account.getInstance()).getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true);
} catch (KeyManagementException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
String key = account.getAcct() + "@" + account.getInstance(); String key = account.getAcct() + "@" + account.getInstance();
if (webSocketFutures.get(key) == null || !Objects.requireNonNull(webSocketFutures.get(key)).isOpen()) { if (webSocketFutures.get(key) == null || !Objects.requireNonNull(webSocketFutures.get(key)).isOpen()) {
AsyncHttpClient.getDefaultInstance().websocket("wss://" + account.getInstance() + "/api/v1/streaming/?stream=" + notif_url + "&access_token=" + account.getToken(), "wss", (ex, webSocket) -> { AsyncHttpClient.getDefaultInstance().websocket("wss://" + account.getInstance() + "/api/v1/streaming/?stream=" + notif_url + "&access_token=" + account.getToken(), "wss", (ex, webSocket) -> {
@ -382,6 +371,30 @@ public abstract class BaseLiveNotificationService extends Service implements Net
canSendBroadCast = false; canSendBroadCast = false;
} }
break; break;
case "status":
notifType = Helper.NotifType.STATUS;
if (notif_mention) {
if (notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0)
message = String.format("%s %s", notification.getAccount().getDisplay_name(), getString(R.string.notif_status));
else
message = String.format("@%s %s", notification.getAccount().getAcct(), getString(R.string.notif_status));
if (notification.getStatus() != null) {
if (notification.getStatus().getSpoiler_text() != null && notification.getStatus().getSpoiler_text().length() > 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getSpoiler_text(), FROM_HTML_MODE_LEGACY));
else
message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getSpoiler_text()));
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getContent(), FROM_HTML_MODE_LEGACY));
else
message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getContent()));
}
}
} else {
canSendBroadCast = false;
}
break;
case "reblog": case "reblog":
notifType = Helper.NotifType.BOOST; notifType = Helper.NotifType.BOOST;
if (notif_share) { if (notif_share) {

View File

@ -77,6 +77,7 @@
android:layout_height="45dp" android:layout_height="45dp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:contentDescription="@string/make_an_action"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/account_pp" app:layout_constraintStart_toEndOf="@id/account_pp"
@ -90,6 +91,7 @@
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:contentDescription="@string/edit_profile"
android:src="@drawable/ic_edit" android:src="@drawable/ic_edit"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/account_pp" app:layout_constraintStart_toEndOf="@id/account_pp"
@ -104,10 +106,25 @@
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:src="@drawable/ic_note" android:src="@drawable/ic_note"
android:contentDescription="@string/action_add_notes"
android:visibility="gone" android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/account_follow" app:layout_constraintStart_toEndOf="@id/account_follow"
app:layout_constraintTop_toBottomOf="@id/banner_pp" /> app:layout_constraintTop_toBottomOf="@id/banner_pp" />
<ImageButton
android:id="@+id/account_notification"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:contentDescription="@string/set_notify"
android:scaleType="fitCenter"
android:src="@drawable/ic_baseline_notifications_account_none"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/account_personal_note"
app:layout_constraintTop_toBottomOf="@id/banner_pp" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"
@ -192,7 +209,8 @@
android:background="@drawable/red_border" android:background="@drawable/red_border"
android:text="Peertube" android:text="Peertube"
android:textColor="@color/red_1" android:textColor="@color/red_1"
android:visibility="gone" /> android:visibility="gone"
tools:ignore="HardcodedText" />
<TextView <TextView
android:id="@+id/account_bot" android:id="@+id/account_bot"

View File

@ -112,6 +112,21 @@
app:layout_constraintStart_toEndOf="@id/account_follow" app:layout_constraintStart_toEndOf="@id/account_follow"
app:layout_constraintTop_toBottomOf="@id/banner_pp" /> app:layout_constraintTop_toBottomOf="@id/banner_pp" />
<ImageButton
android:id="@+id/account_notification"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:contentDescription="@string/set_notify"
android:scaleType="fitCenter"
android:src="@drawable/ic_baseline_notifications_account_none"
android:visibility="gone"
app:layout_constraintStart_toEndOf="@id/account_personal_note"
app:layout_constraintTop_toBottomOf="@id/banner_pp" />
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"

View File

@ -341,10 +341,15 @@
android:tint="@android:color/white" /> android:tint="@android:color/white" />
<Button <Button
android:id="@+id/sound_status"
style="@style/colored_button"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:visibility="invisible" /> android:gravity="center"
android:singleLine="true"
android:text="@string/channel_notif_status"
android:tint="@android:color/white" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
@ -492,6 +497,30 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/settings_option_margin"
android:layout_marginBottom="@dimen/settings_option_margin"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:text="@string/set_notif_status"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/set_notif_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- END NOTIFICATIONS SETTINGS --> <!-- END NOTIFICATIONS SETTINGS -->
<LinearLayout <LinearLayout

View File

@ -27,6 +27,12 @@
android:title="@string/reblog" android:title="@string/reblog"
app:actionViewClass="android.widget.CheckBox" app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/action_status"
android:checkable="true"
android:title="@string/new_toot"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always" />
<item <item
android:id="@+id/action_poll" android:id="@+id/action_poll"
android:checkable="true" android:checkable="true"

View File

@ -236,6 +236,7 @@
<!-- Notifications --> <!-- Notifications -->
<string name="no_notifications">No notification to display</string> <string name="no_notifications">No notification to display</string>
<string name="notif_mention">mentioned you</string> <string name="notif_mention">mentioned you</string>
<string name="notif_status">wrote a new message</string>
<string name="notif_reblog">boosted your status</string> <string name="notif_reblog">boosted your status</string>
<string name="notif_favourite">favourited your status</string> <string name="notif_favourite">favourited your status</string>
<string name="notif_follow">followed you</string> <string name="notif_follow">followed you</string>
@ -306,6 +307,7 @@
<string name="set_notif_follow_add">Notify when someone favourites your status</string> <string name="set_notif_follow_add">Notify when someone favourites your status</string>
<string name="set_notif_follow_mention">Notify when someone mentions you</string> <string name="set_notif_follow_mention">Notify when someone mentions you</string>
<string name="set_notif_follow_poll">Notify when a poll ended</string> <string name="set_notif_follow_poll">Notify when a poll ended</string>
<string name="set_notif_status">Notify for new posts</string>
<string name="set_share_validation">Show confirmation dialog before boosting</string> <string name="set_share_validation">Show confirmation dialog before boosting</string>
<string name="set_share_validation_fav">Show confirmation dialog before adding to favourites</string> <string name="set_share_validation_fav">Show confirmation dialog before adding to favourites</string>
<string name="set_wifi_only">Notify in WIFI only</string> <string name="set_wifi_only">Notify in WIFI only</string>
@ -589,6 +591,7 @@
<string name="channel_notif_poll">Poll Ended</string> <string name="channel_notif_poll">Poll Ended</string>
<string name="channel_notif_toot">New Toot</string> <string name="channel_notif_toot">New Toot</string>
<string name="channel_notif_backup">Toots Backup</string> <string name="channel_notif_backup">Toots Backup</string>
<string name="channel_notif_status">New post</string>
<string name="channel_notif_media">Media Download</string> <string name="channel_notif_media">Media Download</string>
<string name="set_notif_sound">Change notification sound</string> <string name="set_notif_sound">Change notification sound</string>
<string name="select_sound">Select Tone</string> <string name="select_sound">Select Tone</string>