Commit e66fbf5f authored by Thomas's avatar Thomas
Browse files

Domain blocks for admin (create/update)

parent 23d26263
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -243,6 +243,11 @@
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/action_about"
            android:theme="@style/AppThemeBar" />
        <activity
            android:name=".activities.admin.AdminDomainBlockActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/blocked_domains"
            android:theme="@style/AppThemeBar" />
        <activity
            android:name=".activities.SuggestionActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
+4 −1
Original line number Diff line number Diff line
@@ -128,7 +128,7 @@ public class AdminActionActivity extends BaseActivity {

    @Override
    public boolean onCreateOptionsMenu(@NonNull Menu menu) {
        if (canGoBack) {
        if (canGoBack && fragmentAdminAccount != null) {
            getMenuInflater().inflate(R.menu.menu_admin_account, menu);
        }
        return super.onCreateOptionsMenu(menu);
@@ -297,12 +297,15 @@ public class AdminActionActivity extends BaseActivity {
            ThemeHelper.slideViewsToRight(binding.fragmentContainer, binding.buttonContainer, () -> {
                if (fragmentAdminReport != null) {
                    fragmentAdminReport.onDestroyView();
                    fragmentAdminReport = null;
                }
                if (fragmentAdminAccount != null) {
                    fragmentAdminAccount.onDestroyView();
                    fragmentAdminAccount = null;
                }
                if (fragmentAdminDomain != null) {
                    fragmentAdminDomain.onDestroyView();
                    fragmentAdminDomain = null;
                }
                setTitle(R.string.administration);
                invalidateOptionsMenu();
+123 −0
Original line number Diff line number Diff line
package app.fedilab.android.activities.admin;
/* 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 android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;

import androidx.core.content.ContextCompat;
import androidx.lifecycle.ViewModelProvider;

import app.fedilab.android.R;
import app.fedilab.android.activities.BaseActivity;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.client.entities.api.admin.AdminDomainBlock;
import app.fedilab.android.databinding.ActivityAdminDomainblockBinding;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.viewmodel.mastodon.AdminVM;
import es.dmoral.toasty.Toasty;

public class AdminDomainBlockActivity extends BaseActivity {


    private final String[] severityChoices = {"silence", "suspend", "noop"};
    private AdminVM adminVM;
    private AdminDomainBlock adminDomainBlock;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ThemeHelper.applyThemeBar(this);
        ActivityAdminDomainblockBinding binding = ActivityAdminDomainblockBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary)));
        }
        Bundle b = getIntent().getExtras();
        if (b != null) {
            adminDomainBlock = (AdminDomainBlock) b.getSerializable(Helper.ARG_ADMIN_DOMAINBLOCK);
        }

        ArrayAdapter<CharSequence> adapterResize = ArrayAdapter.createFromResource(this,
                R.array.admin_block_severity, android.R.layout.simple_spinner_dropdown_item);
        binding.severity.setAdapter(adapterResize);

        if (adminDomainBlock != null) {
            binding.domain.setText(adminDomainBlock.domain);
            binding.domain.setEnabled(false);
            for (int i = 0; i < severityChoices.length; i++) {
                if (adminDomainBlock.severity.equalsIgnoreCase(severityChoices[i])) {
                    binding.severity.setSelection(i, false);
                    break;
                }
            }
            binding.obfuscate.setChecked(adminDomainBlock.obfuscate);
            binding.rejectMedia.setChecked(adminDomainBlock.reject_media);
            binding.rejectReports.setChecked(adminDomainBlock.reject_reports);
            binding.privateComment.setText(adminDomainBlock.private_comment);
            binding.publicComment.setText(adminDomainBlock.public_comment);
        } else {
            adminDomainBlock = new AdminDomainBlock();
        }

        binding.severity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
                adminDomainBlock.severity = severityChoices[position];
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
        binding.obfuscate.setOnCheckedChangeListener((compoundButton, checked) -> adminDomainBlock.obfuscate = checked);
        binding.rejectMedia.setOnCheckedChangeListener((compoundButton, checked) -> adminDomainBlock.reject_media = checked);
        binding.rejectReports.setOnCheckedChangeListener((compoundButton, checked) -> adminDomainBlock.reject_reports = checked);
        adminVM = new ViewModelProvider(AdminDomainBlockActivity.this).get(AdminVM.class);
        binding.saveChanges.setOnClickListener(v -> {
            adminDomainBlock.domain = binding.domain.getText().toString().trim();
            adminDomainBlock.public_comment = binding.publicComment.getText().toString().trim();
            adminDomainBlock.private_comment = binding.privateComment.getText().toString().trim();
            adminVM.createOrUpdateDomainBlock(MainActivity.currentInstance, MainActivity.currentToken, adminDomainBlock)
                    .observe(AdminDomainBlockActivity.this, adminDomainBlockResult -> {
                                if (adminDomainBlockResult != null) {
                                    Toasty.success(AdminDomainBlockActivity.this, getString(R.string.saved_changes), Toasty.LENGTH_SHORT).show();
                                } else {
                                    Toasty.error(AdminDomainBlockActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show();
                                }

                            }
                    );
        });
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        if (itemId == android.R.id.home) {
            finish();
            return true;
        }
        return true;
    }

}
+3 −3
Original line number Diff line number Diff line
@@ -188,7 +188,7 @@ public interface MastodonAdminService {
    @POST("admin/domain_blocks")
    Call<AdminDomainBlock> blockDomain(
            @Header("Authorization") String app_token,
            @Path("domain") String domain,
            @Field("domain") String domain,
            @Field("severity") String severity,
            @Field("reject_media") Boolean reject_media,
            @Field("reject_reports") Boolean reject_reports,
@@ -205,10 +205,10 @@ public interface MastodonAdminService {
    );

    @FormUrlEncoded
    @PUT("admin/domain_blocks")
    @PUT("admin/domain_blocks/{id}")
    Call<AdminDomainBlock> updateBlockDomain(
            @Header("Authorization") String app_token,
            @Path("domain") String domain,
            @Path("id") String id,
            @Field("severity") String severity,
            @Field("reject_media") Boolean reject_media,
            @Field("reject_reports") Boolean reject_reports,
+2 −0
Original line number Diff line number Diff line
@@ -238,6 +238,8 @@ public class Helper {
    public static final String ARG_STATUS_REPLY_ID = "ARG_STATUS_REPLY_ID";
    public static final String ARG_ACCOUNT = "ARG_ACCOUNT";
    public static final String ARG_ACCOUNT_ID = "ARG_ACCOUNT_ID";
    public static final String ARG_ADMIN_DOMAINBLOCK = "ARG_ADMIN_DOMAINBLOCK";

    public static final String ARG_REPORT = "ARG_REPORT";
    public static final String ARG_ACCOUNT_MENTION = "ARG_ACCOUNT_MENTION";
    public static final String ARG_MINIFIED = "ARG_MINIFIED";
Loading