diff --git a/app/src/main/java/app/fedilab/android/activities/AdminActivity.java b/app/src/main/java/app/fedilab/android/activities/AdminActivity.java index 56183bc2e..908041262 100644 --- a/app/src/main/java/app/fedilab/android/activities/AdminActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AdminActivity.java @@ -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; 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 977cdf285..cac39308d 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -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 accountAdmins = parseAccountAdminResponse(new JSONArray(response)); 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 3dd694402..82a2f19a8 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 @@ -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() { diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayAdminAccountsFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayAdminAccountsFragment.java index ba4788ee4..ce822f75f 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayAdminAccountsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayAdminAccountsFragment.java @@ -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); diff --git a/app/src/main/res/menu/option_filter_admin_accounts.xml b/app/src/main/res/menu/option_filter_admin_accounts.xml index ef03cbe1b..37b9dfe16 100644 --- a/app/src/main/res/menu/option_filter_admin_accounts.xml +++ b/app/src/main/res/menu/option_filter_admin_accounts.xml @@ -3,10 +3,51 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a391adb6..5bc26082f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1035,6 +1035,12 @@ The application failed to access the admin features. You might need to reconnect the account for having the correct scope. Unresolved Resolved + Remote + Active + Pending + Disabled + Silenced + Suspended %d vote %d votes