added function to add users to lists

This commit is contained in:
nuclearfog 2020-10-18 23:30:41 +02:00
parent 72321d62b4
commit cba5c96c78
No known key found for this signature in database
GPG Key ID: D5490E4A81F97B14
6 changed files with 170 additions and 1 deletions

View File

@ -1,10 +1,14 @@
package org.nuclearfog.twidda.activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.SearchView.OnQueryTextListener;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
@ -14,18 +18,26 @@ import com.google.android.material.tabs.TabLayout.Tab;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.adapter.FragmentAdapter;
import org.nuclearfog.twidda.backend.UserListManager;
import org.nuclearfog.twidda.backend.UserListManager.ListManagerCallback;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.utils.FontTool;
import org.nuclearfog.twidda.database.GlobalSettings;
import static android.os.AsyncTask.Status.RUNNING;
import static org.nuclearfog.twidda.backend.UserListManager.Action.ADD_USER;
/**
* Activity to show an user list, members and tweets
*/
public class ListDetail extends AppCompatActivity implements OnTabSelectedListener {
public class ListDetail extends AppCompatActivity implements OnTabSelectedListener, OnQueryTextListener, ListManagerCallback {
public static final String KEY_LISTDETAIL_ID = "list-id";
public static final String KEY_LISTDETAIL_TITLE = "list-title";
public static final String KEY_LISTDETAIL_DESCR = "list-descr";
private UserListManager listAsync;
private FragmentAdapter adapter;
private TabLayout tablayout;
private ViewPager pager;
@ -69,6 +81,17 @@ public class ListDetail extends AppCompatActivity implements OnTabSelectedListen
}
@Override
public boolean onCreateOptionsMenu(Menu m) {
getMenuInflater().inflate(R.menu.userlist, m);
MenuItem search = m.findItem(R.id.add_user);
SearchView addUser = (SearchView) search.getActionView();
addUser.setQueryHint(getString(R.string.list_add_user));
addUser.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(m);
}
@Override
public void onBackPressed() {
if (tablayout.getSelectedTabPosition() > 0) {
@ -93,4 +116,35 @@ public class ListDetail extends AppCompatActivity implements OnTabSelectedListen
@Override
public void onTabReselected(Tab tab) {
}
@Override
public boolean onQueryTextSubmit(String query) {
if (listAsync == null || listAsync.getStatus() != RUNNING) {
Bundle param = getIntent().getExtras();
if (param != null && param.containsKey(KEY_LISTDETAIL_ID)) {
long id = param.getLong(KEY_LISTDETAIL_ID);
listAsync = new UserListManager(id, ADD_USER, getApplicationContext(), this);
listAsync.execute(query);
}
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
@Override
public void onSuccess() {
}
@Override
public void onFailure(EngineException err) {
}
}

View File

@ -0,0 +1,72 @@
package org.nuclearfog.twidda.backend;
import android.content.Context;
import android.os.AsyncTask;
import org.nuclearfog.twidda.backend.engine.EngineException;
import org.nuclearfog.twidda.backend.engine.TwitterEngine;
import java.lang.ref.WeakReference;
public class UserListManager extends AsyncTask<String, Void, Boolean> {
public enum Action {
ADD_USER,
DEL_USER
}
private final TwitterEngine mTwitter;
private final WeakReference<ListManagerCallback> callback;
private final long listId;
private final Action mode;
private EngineException err;
public UserListManager(long listId, Action mode, Context c, ListManagerCallback callback) {
super();
this.listId = listId;
this.mode = mode;
mTwitter = TwitterEngine.getInstance(c);
this.callback = new WeakReference<>(callback);
}
@Override
protected Boolean doInBackground(String... strings) {
try {
switch (mode) {
case ADD_USER:
mTwitter.addUserToList(listId, strings);
break;
case DEL_USER:
mTwitter.delUserFromList(listId, strings[0]);
break;
}
} catch (EngineException err) {
this.err = err;
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean success) {
if (callback.get() != null) {
if (success) {
callback.get().onSuccess();
} else {
callback.get().onFailure(err);
}
}
}
public interface ListManagerCallback {
void onSuccess();
void onFailure(EngineException err);
}
}

View File

@ -1077,6 +1077,36 @@ public class TwitterEngine {
}
}
/**
* adds user to an user list
*
* @param listId I of the list
* @param usernames screen names of the users
* @throws EngineException if access is unavailable
*/
public void addUserToList(long listId, String[] usernames) throws EngineException {
try {
twitter.createUserListMembers(listId, usernames);
} catch (TwitterException err) {
throw new EngineException(err);
}
}
/**
* removes an user from user list
*
* @param listId I of the list
* @param username screen names of an user
* @throws EngineException if access is unavailable
*/
public void delUserFromList(long listId, String username) throws EngineException {
try {
twitter.destroyUserListMember(listId, username);
} catch (TwitterException err) {
throw new EngineException(err);
}
}
/**
* convert #twitter4j.User to TwitterUser List
*

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_user"
android:title="@string/list_add_user"
android:iconifiedByDefault="false"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always" />
</menu>

View File

@ -163,4 +163,5 @@
<string name="userlist_error_empty_text">Title und Beschreibung dürfen nicht leer sein!</string>
<string name="info_list_updated">Liste wurde aktualisiert</string>
<string name="info_list_created">Liste wurde erstellt</string>
<string name="list_add_user">Nutzer hinzufügen</string>
</resources>

View File

@ -169,4 +169,5 @@
<string name="userlist_error_empty_text">Title and description must be set!</string>
<string name="info_list_updated">Userlist updated</string>
<string name="info_list_created">Userlist created</string>
<string name="list_add_user">add user to list</string>
</resources>