Filter admin accounts + reports

This commit is contained in:
tom79 2019-06-20 18:48:46 +02:00
parent 8b7c5a49e8
commit 4202441b07
6 changed files with 335 additions and 40 deletions

View File

@ -30,14 +30,18 @@ import androidx.appcompat.widget.PopupMenu;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import app.fedilab.android.R;
import app.fedilab.android.fragments.DisplayAdminAccountsFragment;
import app.fedilab.android.fragments.DisplayAdminReportsFragment;
import app.fedilab.android.fragments.DisplayStatusFragment;
import app.fedilab.android.helper.Helper;
import static app.fedilab.android.activities.BaseMainActivity.mPageReferenceMap;
/**
* Created by Thomas on 19/06/2019.
@ -50,6 +54,8 @@ public class AdminActivity extends BaseActivity {
private boolean unresolved;
private boolean local, remote, active, pending, disabled, silenced, suspended;
private DisplayAdminReportsFragment displayAdminReportsFragment;
private DisplayAdminAccountsFragment displayAdminAccountsFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -78,8 +84,8 @@ public class AdminActivity extends BaseActivity {
toolbar_title.setText(String.format(getString(R.string.administration)+ " %s", Helper.getLiveInstance(getApplicationContext())));
}
setContentView(R.layout.activity_admin);
unresolved = true;
unresolved = local = active = true;
remote = pending = disabled = silenced = suspended = false;
ViewPager admin_viewpager = findViewById(R.id.admin_viewpager);
TabLayout admin_tablayout = findViewById(R.id.admin_tablayout);
@ -103,8 +109,13 @@ public class AdminActivity extends BaseActivity {
popup.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
if( displayAdminReportsFragment != null)
displayAdminReportsFragment.refreshFilter();
FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
fragTransaction.detach(displayAdminReportsFragment);
Bundle bundle = new Bundle();
bundle.putBoolean("unresolved",unresolved);
displayAdminReportsFragment.setArguments(bundle);
fragTransaction.attach(displayAdminReportsFragment);
fragTransaction.commit();
}
});
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@ -128,10 +139,140 @@ public class AdminActivity extends BaseActivity {
if( admin_tablayout.getTabAt(0) != null)
//noinspection ConstantConditions
admin_tablayout.getTabAt(0).select();
PagerAdapter mPagerAdapter = new AdminPagerAdapter(getSupportFragmentManager());
admin_viewpager.setAdapter(mPagerAdapter);
itemUnresolved.setChecked(unresolved);
return true;
return false;
}
});
popup.show();
return true;
}
});
tabStrip.getChildAt(1).setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
PopupMenu popup = new PopupMenu(AdminActivity.this, tabStrip.getChildAt(1));
popup.getMenuInflater()
.inflate(R.menu.option_filter_admin_accounts, popup.getMenu());
Menu menu = popup.getMenu();
final MenuItem itemLocal = menu.findItem(R.id.action_local);
final MenuItem itemRemote = menu.findItem(R.id.action_remote);
final MenuItem itemActive = menu.findItem(R.id.action_active);
final MenuItem itemPending = menu.findItem(R.id.action_pending);
final MenuItem itemDisabled = menu.findItem(R.id.action_disabled);
final MenuItem itemSilenced = menu.findItem(R.id.action_silenced);
final MenuItem itemSuspended = menu.findItem(R.id.action_suspended);
itemLocal.setChecked(local);
itemRemote.setChecked(remote);
itemActive.setChecked(active);
itemPending.setChecked(pending);
itemDisabled.setChecked(disabled);
itemSilenced.setChecked(silenced);
itemSuspended.setChecked(suspended);
popup.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
fragTransaction.detach(displayAdminAccountsFragment);
Bundle bundle = new Bundle();
bundle.putBoolean("local",local);
bundle.putBoolean("remote",remote);
bundle.putBoolean("active",active);
bundle.putBoolean("pending",pending);
bundle.putBoolean("disabled",disabled);
bundle.putBoolean("silenced",silenced);
bundle.putBoolean("suspended",suspended);
displayAdminAccountsFragment.setArguments(bundle);
fragTransaction.attach(displayAdminAccountsFragment);
fragTransaction.commit();
}
});
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
item.setActionView(new View(getApplicationContext()));
item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return false;
}
});
switch (item.getItemId()){
case R.id.action_local:
if( !local) {
remote = false;
local = true;
}
break;
case R.id.action_remote:
if( !remote) {
remote = true;
local = false;
}
break;
case R.id.action_active:
if( !active) {
active = true;
pending = false;
disabled = false;
silenced = false;
suspended = false;
}
break;
case R.id.action_pending:
if( !pending) {
pending = true;
active = false;
disabled = false;
silenced = false;
suspended = false;
}
break;
case R.id.action_disabled:
if( !disabled) {
disabled = true;
active = false;
pending = false;
silenced = false;
suspended = false;
}
break;
case R.id.action_silenced:
if( !silenced) {
silenced = true;
active = false;
pending = false;
disabled = false;
suspended = false;
}
break;
case R.id.action_suspended:
if( !suspended) {
suspended = true;
active = false;
pending = false;
disabled = false;
silenced = false;
}
break;
}
itemLocal.setChecked(local);
itemRemote.setChecked(remote);
itemActive.setChecked(active);
itemPending.setChecked(pending);
itemDisabled.setChecked(disabled);
itemSilenced.setChecked(silenced);
itemSuspended.setChecked(suspended);
return false;
}
});
popup.show();
@ -143,26 +284,8 @@ public class AdminActivity extends BaseActivity {
PagerAdapter mPagerAdapter = new AdminPagerAdapter(getSupportFragmentManager());
admin_viewpager.setAdapter(mPagerAdapter);
admin_viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
TabLayout.Tab tab = admin_tablayout.getTabAt(position);
if( tab != null)
tab.select();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
admin_viewpager.setOffscreenPageLimit(2);
admin_viewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(admin_tablayout));
admin_tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
@ -188,7 +311,7 @@ public class AdminActivity extends BaseActivity {
break;
case 1:
if( fragment != null) {
DisplayAdminAccountsFragment displayAdminAccountsFragment = ((DisplayAdminAccountsFragment) fragment);
displayAdminAccountsFragment = ((DisplayAdminAccountsFragment) fragment);
displayAdminAccountsFragment.scrollToTop();
}
break;
@ -211,13 +334,22 @@ public class AdminActivity extends BaseActivity {
Bundle bundle = new Bundle();
switch (position){
case 0:
DisplayAdminReportsFragment displayAdminReportsFragment = new DisplayAdminReportsFragment();
displayAdminReportsFragment = new DisplayAdminReportsFragment();
bundle = new Bundle();
bundle.putBoolean("unresolved",unresolved);
displayAdminReportsFragment.setArguments(bundle);
return displayAdminReportsFragment;
case 1:
DisplayAdminAccountsFragment displayAdminAccountsFragment = new DisplayAdminAccountsFragment();
displayAdminAccountsFragment = new DisplayAdminAccountsFragment();
bundle = new Bundle();
bundle.putBoolean("local",local);
bundle.putBoolean("remote",remote);
bundle.putBoolean("active",active);
bundle.putBoolean("pending",pending);
bundle.putBoolean("disabled",disabled);
bundle.putBoolean("silenced",silenced);
bundle.putBoolean("suspended",suspended);
displayAdminAccountsFragment.setArguments(bundle);
return displayAdminAccountsFragment;
}
return null;

View File

@ -224,6 +224,21 @@ public class API {
String endpoint = null;
switch (action){
case GET_ACCOUNTS:
params = new HashMap<>();
if( adminAction.isLocal())
params.put("local", String.valueOf(adminAction.isLocal()));
if( adminAction.isRemote() )
params.put("remote", String.valueOf(adminAction.isRemote()));
if( adminAction.isActive() )
params.put("active", String.valueOf(adminAction.isActive()));
if( adminAction.isPending() )
params.put("pending", String.valueOf(adminAction.isPending()));
if( adminAction.isDisabled() )
params.put("disabled", String.valueOf(adminAction.isDisabled()));
if( adminAction.isSilenced() )
params.put("silenced", String.valueOf(adminAction.isSilenced()));
if( adminAction.isSuspended() )
params.put("suspended", String.valueOf(adminAction.isSuspended()));
endpoint = "/admin/accounts";
break;
case GET_ONE_ACCOUNT:
@ -241,9 +256,7 @@ public class API {
break;
}
try {
Log.v(Helper.TAG,"params: " + params);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(endpoint), 60, params, prefKeyOauthTokenT);
Log.v(Helper.TAG,"response: " + response);
switch (action){
case GET_ACCOUNTS:
List<AccountAdmin> accountAdmins = parseAccountAdminResponse(new JSONArray(response));

View File

@ -27,6 +27,65 @@ public class AdminAction {
private boolean send_email_notification;
private String text;
private boolean unresolved;
private boolean local, remote, active, pending, disabled, silenced, suspended;
public boolean isLocal() {
return local;
}
public void setLocal(boolean local) {
this.local = local;
}
public boolean isRemote() {
return remote;
}
public void setRemote(boolean remote) {
this.remote = remote;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public boolean isPending() {
return pending;
}
public void setPending(boolean pending) {
this.pending = pending;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public boolean isSilenced() {
return silenced;
}
public void setSilenced(boolean silenced) {
this.silenced = silenced;
}
public boolean isSuspended() {
return suspended;
}
public void setSuspended(boolean suspended) {
this.suspended = suspended;
}
public boolean isUnresolved() {

View File

@ -41,6 +41,7 @@ import app.fedilab.android.asynctasks.RetrieveAccountsAsyncTask;
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.drawers.AccountsAdminListAdapter;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.interfaces.OnAdminActionInterface;
@ -65,6 +66,7 @@ public class DisplayAdminAccountsFragment extends Fragment implements OnAdminAct
private SwipeRefreshLayout swipeRefreshLayout;
private boolean swiped;
private RecyclerView lv_admin_accounts;
private boolean local, remote, active, pending, disabled, silenced, suspended;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -75,6 +77,18 @@ public class DisplayAdminAccountsFragment extends Fragment implements OnAdminAct
accountAdmins = new ArrayList<>();
Bundle bundle = this.getArguments();
if (bundle != null) {
local = bundle.getBoolean("local", false);
remote = bundle.getBoolean("remote", false);
active = bundle.getBoolean("active", false);
pending = bundle.getBoolean("pending", false);
disabled = bundle.getBoolean("disabled", false);
silenced = bundle.getBoolean("silenced", false);
suspended = bundle.getBoolean("suspended", false);
}
max_id = null;
firstLoad = true;
flag_loading = true;
@ -104,7 +118,15 @@ public class DisplayAdminAccountsFragment extends Fragment implements OnAdminAct
if (firstVisibleItem + visibleItemCount == totalItemCount) {
if (!flag_loading) {
flag_loading = true;
asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_ACCOUNTS, null, null, DisplayAdminAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
AdminAction adminAction = new AdminAction();
adminAction.setLocal(local);
adminAction.setRemote(remote);
adminAction.setActive(active);
adminAction.setPending(pending);
adminAction.setDisabled(disabled);
adminAction.setSilenced(silenced);
adminAction.setSuspended(suspended);
asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_ACCOUNTS, null, adminAction, DisplayAdminAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
nextElementLoader.setVisibility(View.VISIBLE);
}
} else {
@ -122,7 +144,15 @@ public class DisplayAdminAccountsFragment extends Fragment implements OnAdminAct
firstLoad = true;
flag_loading = true;
swiped = true;
asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_ACCOUNTS, null, null, DisplayAdminAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
AdminAction adminAction = new AdminAction();
adminAction.setLocal(local);
adminAction.setRemote(remote);
adminAction.setActive(active);
adminAction.setPending(pending);
adminAction.setDisabled(disabled);
adminAction.setSilenced(silenced);
adminAction.setSuspended(suspended);
asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_ACCOUNTS, null, adminAction, DisplayAdminAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
});
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
@ -147,8 +177,15 @@ public class DisplayAdminAccountsFragment extends Fragment implements OnAdminAct
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ContextCompat.getColor(context, R.color.black_3));
break;
}
asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_ACCOUNTS, null, null, DisplayAdminAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
AdminAction adminAction = new AdminAction();
adminAction.setLocal(local);
adminAction.setRemote(remote);
adminAction.setActive(active);
adminAction.setPending(pending);
adminAction.setDisabled(disabled);
adminAction.setSilenced(silenced);
adminAction.setSuspended(suspended);
asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_ACCOUNTS, null, adminAction, DisplayAdminAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return rootView;
}
@ -160,6 +197,13 @@ public class DisplayAdminAccountsFragment extends Fragment implements OnAdminAct
/**
* Refresh accounts in list
*/
public void refreshFilter(){
accountsAdminListAdapter.notifyDataSetChanged();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);

View File

@ -3,10 +3,51 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_unresolved_reports"
android:id="@+id/action_local"
android:checkable="true"
android:checked="true"
android:title="@string/unresolved"
android:title="@string/local"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
<item
android:id="@+id/action_remote"
android:checkable="true"
android:title="@string/remote"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
<item
android:id="@+id/action_active"
android:checkable="true"
android:title="@string/active"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
<item
android:id="@+id/action_pending"
android:checkable="true"
android:title="@string/pending"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
<item
android:id="@+id/action_disabled"
android:checkable="true"
android:title="@string/disabled"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
<item
android:id="@+id/action_silenced"
android:checkable="true"
android:title="@string/silenced"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />
<item
android:id="@+id/action_suspended"
android:checkable="true"
android:title="@string/suspended"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="always"
tools:ignore="AlwaysShowAction" />

View File

@ -1035,6 +1035,12 @@
<string name="reconnect_account_message">The application failed to access the admin features. You might need to reconnect the account for having the correct scope.</string>
<string name="unresolved">Unresolved</string>
<string name="resolved">Resolved</string>
<string name="remote">Remote</string>
<string name="active">Active</string>
<string name="pending">Pending</string>
<string name="disabled">Disabled</string>
<string name="silenced">Silenced</string>
<string name="suspended">Suspended</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>