Do actions

This commit is contained in:
tom79 2019-06-22 11:01:01 +02:00
parent e1d3b84091
commit 17510ebeb4
6 changed files with 217 additions and 35 deletions

View File

@ -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();
}
}
}
}

View File

@ -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<AccountAdmin> 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) {

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -209,6 +209,19 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/stats_bottom_barrier" />
<Button
android:id="@+id/silence"
style="@style/Base.Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:text="@string/silence"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/disable"
app:layout_constraintTop_toBottomOf="@id/stats_bottom_barrier" />
<Button
android:id="@+id/disable"
style="@style/Base.Widget.AppCompat.Button.Colored"
@ -221,8 +234,9 @@
app:layout_constraintStart_toEndOf="@id/warn"
app:layout_constraintTop_toBottomOf="@id/stats_bottom_barrier" />
<Button
android:id="@+id/silence"
android:id="@+id/suspend"
style="@style/Base.Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="50dp"
@ -230,7 +244,7 @@
android:text="@string/silence"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/disable"
app:layout_constraintStart_toEndOf="@id/suspend"
app:layout_constraintTop_toBottomOf="@id/stats_bottom_barrier" />
<androidx.constraintlayout.widget.Barrier

View File

@ -1059,6 +1059,17 @@
<string name="unconfirmed">Not confirmed</string>
<string name="list_reported_statuses">Reported statuses</string>
<string name="account">Account</string>
<string name="unsilence">Undo silence</string>
<string name="undisable">Undo disable</string>
<string name="suspend">Suspend</string>
<string name="unsuspend">Undo suspend</string>
<string name="account_silenced">The account is silenced!</string>
<string name="account_unsilenced">The account is no longer silenced!</string>
<string name="account_suspended">The account is suspended!</string>
<string name="account_unsuspended">The account is no longer suspended!</string>
<string name="account_disabled">The account is disabled!</string>
<string name="account_undisabled">The account is no longer disabled!</string>
<string name="account_warned">The account has been warned!</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>