Filter admin accounts + reports
This commit is contained in:
parent
8b7c5a49e8
commit
4202441b07
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue