From 8b7c5a49e838f44f66aa7e23422bb6bf17bff086 Mon Sep 17 00:00:00 2001 From: tom79 Date: Thu, 20 Jun 2019 16:33:29 +0200 Subject: [PATCH] Add features for filtering reports --- .../android/activities/AdminActivity.java | 68 ++++++++++++++++++- .../asynctasks/PostAdminActionAsyncTask.java | 2 +- .../java/app/fedilab/android/client/API.java | 18 +++-- .../android/client/Entities/AdminAction.java | 9 +++ .../DisplayAdminReportsFragment.java | 26 +++++-- .../res/menu/option_filter_admin_accounts.xml | 13 ++++ .../res/menu/option_filter_admin_reports.xml | 13 ++++ app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 12 ++-- 9 files changed, 145 insertions(+), 18 deletions(-) create mode 100644 app/src/main/res/menu/option_filter_admin_accounts.xml create mode 100644 app/src/main/res/menu/option_filter_admin_reports.xml 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 dc12b12a6..56183bc2e 100644 --- a/app/src/main/java/app/fedilab/android/activities/AdminActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AdminActivity.java @@ -18,11 +18,15 @@ import android.annotation.SuppressLint; import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.PopupMenu; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; @@ -43,6 +47,9 @@ import app.fedilab.android.helper.Helper; public class AdminActivity extends BaseActivity { + private boolean unresolved; + private boolean local, remote, active, pending, disabled, silenced, suspended; + private DisplayAdminReportsFragment displayAdminReportsFragment; @Override protected void onCreate(Bundle savedInstanceState) { @@ -71,7 +78,7 @@ 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; ViewPager admin_viewpager = findViewById(R.id.admin_viewpager); @@ -80,6 +87,60 @@ public class AdminActivity extends BaseActivity { admin_tablayout.addTab(admin_tablayout.newTab().setText(getString(R.string.accounts))); + final LinearLayout tabStrip = (LinearLayout) admin_tablayout.getChildAt(0); + tabStrip.getChildAt(0).setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + PopupMenu popup = new PopupMenu(AdminActivity.this, tabStrip.getChildAt(0)); + popup.getMenuInflater() + .inflate(R.menu.option_filter_admin_reports, popup.getMenu()); + Menu menu = popup.getMenu(); + final MenuItem itemUnresolved = menu.findItem(R.id.action_unresolved_reports); + + + itemUnresolved.setChecked(unresolved); + + popup.setOnDismissListener(new PopupMenu.OnDismissListener() { + @Override + public void onDismiss(PopupMenu menu) { + if( displayAdminReportsFragment != null) + displayAdminReportsFragment.refreshFilter(); + } + }); + 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; + } + }); + if (item.getItemId() == R.id.action_unresolved_reports) { + unresolved = !unresolved; + } + 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; + } + }); + popup.show(); + return true; + } + }); + + + PagerAdapter mPagerAdapter = new AdminPagerAdapter(getSupportFragmentManager()); admin_viewpager.setAdapter(mPagerAdapter); @@ -121,7 +182,7 @@ public class AdminActivity extends BaseActivity { switch (tab.getPosition()){ case 0: if( fragment != null) { - DisplayAdminReportsFragment displayAdminReportsFragment = ((DisplayAdminReportsFragment) fragment); + displayAdminReportsFragment = ((DisplayAdminReportsFragment) fragment); displayAdminReportsFragment.scrollToTop(); } break; @@ -151,6 +212,9 @@ public class AdminActivity extends BaseActivity { switch (position){ case 0: DisplayAdminReportsFragment displayAdminReportsFragment = new DisplayAdminReportsFragment(); + bundle = new Bundle(); + bundle.putBoolean("unresolved",unresolved); + displayAdminReportsFragment.setArguments(bundle); return displayAdminReportsFragment; case 1: DisplayAdminAccountsFragment displayAdminAccountsFragment = new DisplayAdminAccountsFragment(); diff --git a/app/src/main/java/app/fedilab/android/asynctasks/PostAdminActionAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/PostAdminActionAsyncTask.java index abd89dc77..eb7a5f7e6 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/PostAdminActionAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/PostAdminActionAsyncTask.java @@ -58,7 +58,7 @@ public class PostAdminActionAsyncTask extends AsyncTask { case GET_ONE_ACCOUNT: case GET_REPORTS: case GET_ONE_REPORT: - apiResponse = new API(contextReference.get()).adminGet(action, id, null); + apiResponse = new API(contextReference.get()).adminGet(action, id, adminAction); break; default: apiResponse = new API(contextReference.get()).adminDo(action, id, adminAction); 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 dd84479b5..977cdf285 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -19,6 +19,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; +import android.util.Log; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -136,6 +137,7 @@ public class API { GET_ONE_REPORT } + public enum StatusAction{ FAVOURITE, UNFAVOURITE, @@ -171,12 +173,15 @@ public class API { UPDATESERVERSCHEDULE, DELETESCHEDULED, REFRESHPOLL - } + + public enum accountPrivacy { PUBLIC, LOCKED } + + public API(Context context) { this.context = context; if( context == null) { @@ -207,16 +212,15 @@ public class API { } - - /** * Execute admin get actions * @param action type of the action * @param id String can for an account or a status * @return APIResponse */ - public APIResponse adminGet(adminAction action, String id, HashMap params){ + public APIResponse adminGet(adminAction action, String id, AdminAction adminAction){ apiResponse = new APIResponse(); + HashMap params = null; String endpoint = null; switch (action){ case GET_ACCOUNTS: @@ -227,13 +231,19 @@ public class API { break; case GET_REPORTS: endpoint = "/admin/reports"; + if( !adminAction.isUnresolved()) { + params = new HashMap<>(); + params.put("resolved", "present"); + } break; case GET_ONE_REPORT: endpoint = String.format("/admin/reports/%s", id); 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 8c989273d..3dd694402 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 @@ -26,8 +26,17 @@ public class AdminAction { private adminActionType type; private boolean send_email_notification; private String text; + private boolean unresolved; + public boolean isUnresolved() { + return unresolved; + } + + public void setUnresolved(boolean unresolved) { + this.unresolved = unresolved; + } + public adminActionType getType() { return type; } diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayAdminReportsFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayAdminReportsFragment.java index 625d9f8d0..d139b208e 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayAdminReportsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayAdminReportsFragment.java @@ -48,6 +48,7 @@ import app.fedilab.android.asynctasks.PostAdminActionAsyncTask; import app.fedilab.android.asynctasks.RetrieveAccountsAsyncTask; import app.fedilab.android.client.API; import app.fedilab.android.client.APIResponse; +import app.fedilab.android.client.Entities.AdminAction; import app.fedilab.android.client.Entities.Report; import app.fedilab.android.drawers.ReportsListAdapter; import app.fedilab.android.helper.Helper; @@ -73,7 +74,7 @@ public class DisplayAdminReportsFragment extends Fragment implements OnAdminActi private SwipeRefreshLayout swipeRefreshLayout; private boolean swiped; private RecyclerView lv_reports; - + private boolean unresolved; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -83,6 +84,10 @@ public class DisplayAdminReportsFragment extends Fragment implements OnAdminActi reports = new ArrayList<>(); + Bundle bundle = this.getArguments(); + if (bundle != null) { + unresolved = bundle.getBoolean("unresolved", true); + } max_id = null; firstLoad = true; flag_loading = true; @@ -112,7 +117,9 @@ public class DisplayAdminReportsFragment extends Fragment implements OnAdminActi if (firstVisibleItem + visibleItemCount == totalItemCount) { if (!flag_loading) { flag_loading = true; - asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_REPORTS, null, null, DisplayAdminReportsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + AdminAction adminAction = new AdminAction(); + adminAction.setUnresolved(unresolved); + asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_REPORTS, null, adminAction, DisplayAdminReportsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); nextElementLoader.setVisibility(View.VISIBLE); } } else { @@ -130,7 +137,9 @@ public class DisplayAdminReportsFragment extends Fragment implements OnAdminActi firstLoad = true; flag_loading = true; swiped = true; - asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_REPORTS, null, null, DisplayAdminReportsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + AdminAction adminAction = new AdminAction(); + adminAction.setUnresolved(unresolved); + asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_REPORTS, null, adminAction, DisplayAdminReportsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } }); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); @@ -155,8 +164,9 @@ public class DisplayAdminReportsFragment extends Fragment implements OnAdminActi swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ContextCompat.getColor(context, R.color.black_3)); break; } - - asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_REPORTS, null, null, DisplayAdminReportsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + AdminAction adminAction = new AdminAction(); + adminAction.setUnresolved(unresolved); + asyncTask = new PostAdminActionAsyncTask(context, API.adminAction.GET_REPORTS, null, adminAction, DisplayAdminReportsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); return rootView; } @@ -167,6 +177,12 @@ public class DisplayAdminReportsFragment extends Fragment implements OnAdminActi } + /** + * Refresh report in list + */ + public void refreshFilter(){ + reportsListAdapter.notifyDataSetChanged(); + } @Override public void onAttach(Context 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 new file mode 100644 index 000000000..ef03cbe1b --- /dev/null +++ b/app/src/main/res/menu/option_filter_admin_accounts.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/menu/option_filter_admin_reports.xml b/app/src/main/res/menu/option_filter_admin_reports.xml new file mode 100644 index 000000000..ef03cbe1b --- /dev/null +++ b/app/src/main/res/menu/option_filter_admin_reports.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 228e2639a..5a391adb6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1033,6 +1033,8 @@ No reports to display! Reconnect the account The application failed to access the admin features. You might need to reconnect the account for having the correct scope. + Unresolved + Resolved %d vote %d votes diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2a1f29a6d..f7c992029 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -395,7 +395,7 @@ -