diff --git a/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java b/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java index 4d66ef714..7c434ee1f 100644 --- a/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AccountReportActivity.java @@ -40,6 +40,7 @@ import app.fedilab.android.asynctasks.PostAdminActionAsyncTask; import app.fedilab.android.client.API; import app.fedilab.android.client.APIResponse; import app.fedilab.android.client.Entities.AccountAdmin; +import app.fedilab.android.client.Entities.AdminAction; import app.fedilab.android.client.Entities.Report; import app.fedilab.android.client.Entities.Status; import app.fedilab.android.drawers.StatusReportAdapter; @@ -47,10 +48,15 @@ import app.fedilab.android.helper.Helper; import app.fedilab.android.interfaces.OnAdminActionInterface; import es.dmoral.toasty.Toasty; +import static app.fedilab.android.client.API.adminAction.DISABLE; +import static app.fedilab.android.client.API.adminAction.NONE; +import static app.fedilab.android.client.API.adminAction.SILENCE; +import static app.fedilab.android.client.API.adminAction.SUSPEND; + public class AccountReportActivity extends BaseActivity implements OnAdminActionInterface { TextView permissions, username, email, email_status, login_status, joined, recent_ip; - Button warn, disable, silence; + Button warn, disable, silence, suspend; private String account_id; private CheckBox email_user; private EditText comment; @@ -94,6 +100,7 @@ public class AccountReportActivity extends BaseActivity implements OnAdminAction warn = findViewById(R.id.warn); disable = findViewById(R.id.disable); silence = findViewById(R.id.silence); + suspend = findViewById(R.id.suspend); permissions = findViewById(R.id.permissions); username = findViewById(R.id.username); @@ -182,6 +189,8 @@ public class AccountReportActivity extends BaseActivity implements OnAdminAction email_user.setVisibility(View.VISIBLE); comment.setVisibility(View.VISIBLE); recent_ip.setText(accountAdmin.getIp()); + disable.setVisibility(View.GONE); + suspend.setVisibility(View.VISIBLE); }else{ warn.setVisibility(View.GONE); email_user.setVisibility(View.GONE); @@ -190,8 +199,108 @@ public class AccountReportActivity extends BaseActivity implements OnAdminAction recent_ip.setText("-"); permissions.setText("-"); email.setText("-"); + disable.setVisibility(View.VISIBLE); + suspend.setVisibility(View.GONE); + } + if( accountAdmin.getRole().equals("admin") || accountAdmin.getRole().equals("mod")){ + warn.setVisibility(View.GONE); + suspend.setVisibility(View.GONE); + silence.setVisibility(View.GONE); + disable.setVisibility(View.GONE); + email_user.setVisibility(View.GONE); + email_user.setChecked(false); + comment.setVisibility(View.GONE); } joined.setText(Helper.dateToString(accountAdmin.getCreated_at())); + warn.setOnClickListener(view->{ + AdminAction adminAction = new AdminAction(); + adminAction.setType(NONE); + adminAction.setSend_email_notification(email_user.isChecked()); + adminAction.setText(comment.getText().toString().trim()); + new PostAdminActionAsyncTask(getApplicationContext(), NONE, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }); + + + if( !accountAdmin.isSilenced() ) { + silence.setText(getString(R.string.silence)); + }else{ + silence.setText(getString(R.string.unsilence)); + } + silence.setOnClickListener(view->{ + if( !accountAdmin.isSilenced() ) { + AdminAction adminAction = new AdminAction(); + adminAction.setType(SILENCE); + adminAction.setSend_email_notification(email_user.isChecked()); + adminAction.setText(comment.getText().toString().trim()); + new PostAdminActionAsyncTask(getApplicationContext(), SILENCE, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }else{ + new PostAdminActionAsyncTask(getApplicationContext(), API.adminAction.UNSILENCE, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + }); + + if( !accountAdmin.isSilenced() ) { + silence.setText(getString(R.string.disable)); + }else{ + silence.setText(getString(R.string.undisable)); + } + disable.setOnClickListener(view->{ + if( !accountAdmin.isSilenced()) { + AdminAction adminAction = new AdminAction(); + adminAction.setType(DISABLE); + adminAction.setSend_email_notification(email_user.isChecked()); + adminAction.setText(comment.getText().toString().trim()); + new PostAdminActionAsyncTask(getApplicationContext(), DISABLE, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }else{ + new PostAdminActionAsyncTask(getApplicationContext(), API.adminAction.UNSUSPEND, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + }); + + if( !accountAdmin.isSilenced() ) { + silence.setText(getString(R.string.suspend)); + }else{ + silence.setText(getString(R.string.unsuspend)); + } + suspend.setOnClickListener(view->{ + if( !accountAdmin.isSuspended() ){ + AdminAction adminAction = new AdminAction(); + adminAction.setType(SUSPEND); + adminAction.setSend_email_notification(email_user.isChecked()); + adminAction.setText(comment.getText().toString().trim()); + new PostAdminActionAsyncTask(getApplicationContext(), SUSPEND, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }else{ + new PostAdminActionAsyncTask(getApplicationContext(), API.adminAction.UNSUSPEND, account_id, null, AccountReportActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + }); + + if( accountAdmin.getAction() != null) { + String message = null; + switch (accountAdmin.getAction()) { + case SILENCE: + message = getString(R.string.account_silenced); + break; + case UNSILENCE: + message = getString(R.string.account_unsilenced); + break; + case DISABLE: + message = getString(R.string.account_disabled); + break; + case UNDISABLE: + message = getString(R.string.account_undisabled); + break; + case SUSPEND: + message = getString(R.string.account_suspended); + break; + case UNSUSPEND: + message = getString(R.string.account_unsuspended); + break; + case NONE: + message = getString(R.string.account_warned); + break; + } + if( message != null){ + Toasty.success(getApplicationContext(), message, Toast.LENGTH_LONG).show(); + } + } } } diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 80c79a73b..415a6d8c5 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -124,13 +124,17 @@ public class API { ENABLE, APPROVE, REJECT, + NONE, + SILENCE, + UNDISABLE, + DISABLE, UNSILENCE, + SUSPEND, UNSUSPEND, ASSIGN_TO_SELF, UNASSIGN, REOPEN, RESOLVE, - MODERATION_ACTION, GET_ACCOUNTS, GET_ONE_ACCOUNT, GET_REPORTS, @@ -335,22 +339,36 @@ public class API { case RESOLVE: endpoint = String.format("/admin/reports/%s/resolve", id); break; - case MODERATION_ACTION: + case NONE: params = new HashMap<>(); - switch (adminAction.getType()){ - case NONE: - params.put("type","none"); - break; - case DISABLE: - params.put("type","disable"); - break; - case SILENCE: - params.put("type","silence"); - break; - case SUSPEND: - params.put("type","suspend"); - break; + params.put("type","none"); + endpoint = String.format("/admin/accounts/%s/action", id); + params.put("send_email_notification", String.valueOf(adminAction.isSend_email_notification())); + if( adminAction.getText() != null) { + params.put("text", adminAction.getText()); } + break; + case DISABLE: + params = new HashMap<>(); + params.put("type","disable"); + endpoint = String.format("/admin/accounts/%s/action", id); + params.put("send_email_notification", String.valueOf(adminAction.isSend_email_notification())); + if( adminAction.getText() != null) { + params.put("text", adminAction.getText()); + } + break; + case SILENCE: + params = new HashMap<>(); + params.put("type","silence"); + endpoint = String.format("/admin/accounts/%s/action", id); + params.put("send_email_notification", String.valueOf(adminAction.isSend_email_notification())); + if( adminAction.getText() != null) { + params.put("text", adminAction.getText()); + } + break; + case SUSPEND: + params = new HashMap<>(); + params.put("type","suspend"); endpoint = String.format("/admin/accounts/%s/action", id); params.put("send_email_notification", String.valueOf(adminAction.isSend_email_notification())); if( adminAction.getText() != null) { @@ -369,6 +387,7 @@ public class API { List accountAdmins = null; try { AccountAdmin accountAdmin = parseAccountAdminResponse(context, new JSONObject(response)); + accountAdmin.setAction(action); accountAdmins = new ArrayList<>(); accountAdmins.add(accountAdmin); } catch (JSONException e) { @@ -392,7 +411,31 @@ public class API { apiResponse.setReports(reports); break; - case MODERATION_ACTION: + case NONE: + break; + case DISABLE: + accountAdmins = new ArrayList<>(); + AccountAdmin accountAdmin = new AccountAdmin(); + accountAdmin.setDisabled(true); + accountAdmin.setAction(action); + accountAdmins.add(accountAdmin); + apiResponse.setAccountAdmins(accountAdmins); + break; + case SILENCE: + accountAdmins = new ArrayList<>(); + accountAdmin = new AccountAdmin(); + accountAdmin.setSilenced(true); + accountAdmin.setAction(action); + accountAdmins.add(accountAdmin); + apiResponse.setAccountAdmins(accountAdmins); + break; + case SUSPEND: + accountAdmins = new ArrayList<>(); + accountAdmin = new AccountAdmin(); + accountAdmin.setSuspended(true); + accountAdmin.setAction(action); + accountAdmins.add(accountAdmin); + apiResponse.setAccountAdmins(accountAdmins); break; } } catch (IOException e) { diff --git a/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java b/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java index 531b21d72..978aabc9a 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/AccountAdmin.java @@ -18,6 +18,8 @@ import android.os.Parcelable; import java.util.Date; +import app.fedilab.android.client.API; + public class AccountAdmin implements Parcelable { private String id; @@ -32,7 +34,7 @@ public class AccountAdmin implements Parcelable { private boolean silenced; private boolean disabled; private Account account; - + private API.adminAction action; public String getId() { return id; @@ -182,4 +184,12 @@ public class AccountAdmin implements Parcelable { return new AccountAdmin[size]; } }; + + public API.adminAction getAction() { + return action; + } + + public void setAction(API.adminAction action) { + this.action = action; + } } diff --git a/app/src/main/java/app/fedilab/android/client/Entities/AdminAction.java b/app/src/main/java/app/fedilab/android/client/Entities/AdminAction.java index 82a2f19a8..05703feb7 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/AdminAction.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/AdminAction.java @@ -1,4 +1,7 @@ package app.fedilab.android.client.Entities; + +import app.fedilab.android.client.API; + /* Copyright 2019 Thomas Schneider * * This file is a part of Fedilab @@ -16,14 +19,8 @@ package app.fedilab.android.client.Entities; public class AdminAction { - public enum adminActionType{ - NONE, - DISABLE, - SILENCE, - SUSPEND - } - private adminActionType type; + private API.adminAction type; private boolean send_email_notification; private String text; private boolean unresolved; @@ -96,13 +93,6 @@ public class AdminAction { this.unresolved = unresolved; } - public adminActionType getType() { - return type; - } - - public void setType(adminActionType type) { - this.type = type; - } public boolean isSend_email_notification() { return send_email_notification; @@ -121,6 +111,11 @@ public class AdminAction { } + public API.adminAction getType() { + return type; + } - + public void setType(API.adminAction type) { + this.type = type; + } } diff --git a/app/src/main/res/layout/activity_admin_report.xml b/app/src/main/res/layout/activity_admin_report.xml index 3416c9a3f..b585eeea8 100644 --- a/app/src/main/res/layout/activity_admin_report.xml +++ b/app/src/main/res/layout/activity_admin_report.xml @@ -209,6 +209,19 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/stats_bottom_barrier" /> + +