converted user lists selector to kotlin

This commit is contained in:
Mariotaku Lee 2017-01-28 21:01:37 +08:00
parent 7fda28ba30
commit 9e73c8b31c
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
3 changed files with 320 additions and 415 deletions

View File

@ -1,407 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.ListView;
import com.squareup.otto.Subscribe;
import org.mariotaku.microblog.library.MicroBlog;
import org.mariotaku.microblog.library.MicroBlogException;
import org.mariotaku.microblog.library.twitter.http.HttpResponseCode;
import org.mariotaku.microblog.library.twitter.model.Paging;
import org.mariotaku.microblog.library.twitter.model.ResponseList;
import org.mariotaku.microblog.library.twitter.model.User;
import org.mariotaku.microblog.library.twitter.model.UserList;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.SimpleParcelableUserListsAdapter;
import org.mariotaku.twidere.adapter.SimpleParcelableUsersAdapter;
import org.mariotaku.twidere.adapter.UserAutoCompleteAdapter;
import org.mariotaku.twidere.fragment.CreateUserListDialogFragment;
import org.mariotaku.twidere.fragment.ProgressDialogFragment;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.model.UserKey;
import org.mariotaku.twidere.model.message.UserListCreatedEvent;
import org.mariotaku.twidere.model.util.ParcelableUserListUtils;
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
import org.mariotaku.twidere.util.AsyncTaskUtils;
import org.mariotaku.twidere.util.MicroBlogAPIFactory;
import org.mariotaku.twidere.util.ParseUtils;
import java.util.ArrayList;
import java.util.List;
import static android.text.TextUtils.isEmpty;
import static org.mariotaku.twidere.TwidereConstants.LOGTAG;
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY;
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_IS_MY_ACCOUNT;
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_SCREEN_NAME;
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER;
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_USER_LIST;
import static org.mariotaku.twidere.constant.IntentConstants.INTENT_ACTION_SELECT_USER;
import static org.mariotaku.twidere.util.DataStoreUtils.getAccountScreenName;
public class UserListSelectorActivity extends BaseActivity implements OnClickListener,
OnItemClickListener {
private AutoCompleteTextView mEditScreenName;
private ListView mUserListsListView, mUsersListView;
private SimpleParcelableUserListsAdapter mUserListsAdapter;
private SimpleParcelableUsersAdapter mUsersAdapter;
private View mUsersListContainer, mUserListsContainer, mCreateUserListContainer;
private String mScreenName;
private Runnable mResumeFragmentRunnable;
private boolean mFragmentsResumed;
private View mScreenNameConfirm, mCreateList;
@Override
public void onClick(final View v) {
switch (v.getId()) {
case R.id.screen_name_confirm: {
final String screen_name = ParseUtils.parseString(mEditScreenName.getText());
if (isEmpty(screen_name)) return;
searchUser(screen_name);
break;
}
case R.id.create_list: {
final DialogFragment f = new CreateUserListDialogFragment();
final Bundle args = new Bundle();
args.putParcelable(EXTRA_ACCOUNT_KEY, getAccountKey());
f.setArguments(args);
f.show(getSupportFragmentManager(), null);
break;
}
}
}
@Override
public void onContentChanged() {
super.onContentChanged();
mUsersListContainer = findViewById(R.id.users_list_container);
mUserListsContainer = findViewById(R.id.user_lists_container);
mEditScreenName = (AutoCompleteTextView) findViewById(R.id.edit_screen_name);
mUserListsListView = (ListView) findViewById(R.id.user_lists_list);
mUsersListView = (ListView) findViewById(R.id.users_list);
mCreateUserListContainer = findViewById(R.id.create_list_container);
mScreenNameConfirm = findViewById(R.id.screen_name_confirm);
mCreateList = findViewById(R.id.create_list);
}
@Override
public void onItemClick(final AdapterView<?> view, final View child, final int position, final long id) {
final int view_id = view.getId();
final ListView list = (ListView) view;
if (view_id == R.id.users_list) {
final ParcelableUser user = mUsersAdapter.getItem(position - list.getHeaderViewsCount());
if (user == null) return;
if (isSelectingUser()) {
final Intent data = new Intent();
data.setExtrasClassLoader(getClassLoader());
data.putExtra(EXTRA_USER, user);
setResult(RESULT_OK, data);
finish();
} else {
getUserLists(user.screen_name);
}
} else if (view_id == R.id.user_lists_list) {
final Intent data = new Intent();
data.putExtra(EXTRA_USER_LIST, mUserListsAdapter.getItem(position - list.getHeaderViewsCount()));
setResult(RESULT_OK, data);
finish();
}
}
public void setUsersData(final List<ParcelableUser> data) {
mUsersAdapter.setData(data, true);
mUsersListContainer.setVisibility(View.VISIBLE);
mUserListsContainer.setVisibility(View.GONE);
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
if (!intent.hasExtra(EXTRA_ACCOUNT_KEY)) {
finish();
return;
}
setContentView(R.layout.activity_user_list_selector);
if (savedInstanceState == null) {
mScreenName = intent.getStringExtra(EXTRA_SCREEN_NAME);
} else {
mScreenName = savedInstanceState.getString(EXTRA_SCREEN_NAME);
}
final boolean selecting_user = isSelectingUser();
setTitle(selecting_user ? R.string.select_user : R.string.select_user_list);
if (!isEmpty(mScreenName)) {
if (selecting_user) {
searchUser(mScreenName);
} else {
getUserLists(mScreenName);
}
}
final UserAutoCompleteAdapter adapter = new UserAutoCompleteAdapter(this);
adapter.setAccountKey(getAccountKey());
mEditScreenName.setAdapter(adapter);
mEditScreenName.setText(mScreenName);
mUserListsListView.setAdapter(mUserListsAdapter = new SimpleParcelableUserListsAdapter(this));
mUsersListView.setAdapter(mUsersAdapter = new SimpleParcelableUsersAdapter(this));
mUserListsListView.setOnItemClickListener(this);
mUsersListView.setOnItemClickListener(this);
mScreenNameConfirm.setOnClickListener(this);
mCreateList.setOnClickListener(this);
if (selecting_user) {
mUsersListContainer.setVisibility(View.VISIBLE);
mUserListsContainer.setVisibility(View.GONE);
} else {
mUsersListContainer.setVisibility(isEmpty(mScreenName) ? View.VISIBLE : View.GONE);
mUserListsContainer.setVisibility(isEmpty(mScreenName) ? View.GONE : View.VISIBLE);
}
}
@Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(EXTRA_SCREEN_NAME, mScreenName);
}
@Override
protected void onStart() {
super.onStart();
bus.register(this);
}
@Override
protected void onStop() {
bus.unregister(this);
super.onStop();
}
@Subscribe
public void onUserListCreated(UserListCreatedEvent event) {
getUserLists(mScreenName);
}
private UserKey getAccountKey() {
return getIntent().getParcelableExtra(EXTRA_ACCOUNT_KEY);
}
private void getUserLists(final String screenName) {
if (screenName == null) return;
mScreenName = screenName;
final GetUserListsTask task = new GetUserListsTask(this, getAccountKey(), screenName);
AsyncTaskUtils.executeTask(task);
}
private boolean isSelectingUser() {
return INTENT_ACTION_SELECT_USER.equals(getIntent().getAction());
}
private void searchUser(final String name) {
final SearchUsersTask task = new SearchUsersTask(this, getAccountKey(), name);
AsyncTaskUtils.executeTask(task);
}
private void setUserListsData(final List<ParcelableUserList> data, final boolean isMyAccount) {
mUserListsAdapter.setData(data, true);
mUsersListContainer.setVisibility(View.GONE);
mUserListsContainer.setVisibility(View.VISIBLE);
mCreateUserListContainer.setVisibility(isMyAccount ? View.VISIBLE : View.GONE);
}
@Override
protected void onResumeFragments() {
super.onResumeFragments();
if (!mFragmentsResumed && mResumeFragmentRunnable != null) {
mResumeFragmentRunnable.run();
}
mFragmentsResumed = true;
}
@Override
protected void onPause() {
mFragmentsResumed = false;
super.onPause();
}
private void dismissDialogFragment(final String tag) {
mResumeFragmentRunnable = new Runnable() {
@Override
public void run() {
final FragmentManager fm = getSupportFragmentManager();
final Fragment f = fm.findFragmentByTag(tag);
if (f instanceof DialogFragment) {
((DialogFragment) f).dismiss();
}
mResumeFragmentRunnable = null;
}
};
if (mFragmentsResumed) {
mResumeFragmentRunnable.run();
}
}
private void showDialogFragment(final DialogFragment df, final String tag) {
mResumeFragmentRunnable = new Runnable() {
@Override
public void run() {
df.show(getSupportFragmentManager(), tag);
mResumeFragmentRunnable = null;
}
};
if (mFragmentsResumed) {
mResumeFragmentRunnable.run();
}
}
private static class GetUserListsTask extends AsyncTask<Object, Object, SingleResponse<List<ParcelableUserList>>> {
private static final String FRAGMENT_TAG_GET_USER_LISTS = "get_user_lists";
private final UserListSelectorActivity mActivity;
private final UserKey mAccountKey;
private final String mScreenName;
GetUserListsTask(final UserListSelectorActivity activity, final UserKey accountKey,
final String screenName) {
mActivity = activity;
mAccountKey = accountKey;
mScreenName = screenName;
}
@Override
protected SingleResponse<List<ParcelableUserList>> doInBackground(final Object... params) {
final MicroBlog twitter = MicroBlogAPIFactory.getInstance(mActivity, mAccountKey);
if (twitter == null) return SingleResponse.Companion.getInstance();
try {
final ResponseList<UserList> lists = twitter.getUserListsByScreenName(mScreenName, true);
final List<ParcelableUserList> data = new ArrayList<>();
boolean isMyAccount = mScreenName.equalsIgnoreCase(getAccountScreenName(mActivity,
mAccountKey));
for (final UserList item : lists) {
final User user = item.getUser();
if (user != null && mScreenName.equalsIgnoreCase(user.getScreenName())) {
if (!isMyAccount && TextUtils.equals(user.getId(), mAccountKey.getId())) {
isMyAccount = true;
}
data.add(ParcelableUserListUtils.from(item, mAccountKey));
}
}
final SingleResponse<List<ParcelableUserList>> result = SingleResponse.Companion.getInstance(data);
result.getExtras().putBoolean(EXTRA_IS_MY_ACCOUNT, isMyAccount);
return result;
} catch (final MicroBlogException e) {
Log.w(LOGTAG, e);
return SingleResponse.Companion.getInstance(e);
}
}
@Override
protected void onPostExecute(final SingleResponse<List<ParcelableUserList>> result) {
mActivity.dismissDialogFragment(FRAGMENT_TAG_GET_USER_LISTS);
if (result.getData() != null) {
mActivity.setUserListsData(result.getData(), result.getExtras().getBoolean(EXTRA_IS_MY_ACCOUNT));
} else if (result.getException() instanceof MicroBlogException) {
final MicroBlogException te = (MicroBlogException) result.getException();
if (te.getStatusCode() == HttpResponseCode.NOT_FOUND) {
mActivity.searchUser(mScreenName);
}
}
}
@Override
protected void onPreExecute() {
final ProgressDialogFragment df = new ProgressDialogFragment();
df.setCancelable(false);
mActivity.showDialogFragment(df, FRAGMENT_TAG_GET_USER_LISTS);
}
}
private static class SearchUsersTask extends AsyncTask<Object, Object, SingleResponse<List<ParcelableUser>>> {
private static final String FRAGMENT_TAG_SEARCH_USERS = "search_users";
private final UserListSelectorActivity mActivity;
private final UserKey mAccountKey;
private final String mName;
SearchUsersTask(final UserListSelectorActivity activity, final UserKey accountKey,
final String name) {
mActivity = activity;
mAccountKey = accountKey;
mName = name;
}
@Override
protected SingleResponse<List<ParcelableUser>> doInBackground(final Object... params) {
final MicroBlog twitter = MicroBlogAPIFactory.getInstance(mActivity, mAccountKey);
if (twitter == null) return SingleResponse.Companion.getInstance();
try {
final Paging paging = new Paging();
final ResponseList<User> lists = twitter.searchUsers(mName, paging);
final List<ParcelableUser> data = new ArrayList<>();
for (final User item : lists) {
data.add(ParcelableUserUtils.fromUser(item, mAccountKey));
}
return SingleResponse.Companion.getInstance(data);
} catch (final MicroBlogException e) {
Log.w(LOGTAG, e);
return SingleResponse.Companion.getInstance(e);
}
}
@Override
protected void onPostExecute(final SingleResponse<List<ParcelableUser>> result) {
mActivity.dismissDialogFragment(FRAGMENT_TAG_SEARCH_USERS);
if (result.getData() != null) {
mActivity.setUsersData(result.getData());
}
}
@Override
protected void onPreExecute() {
final ProgressDialogFragment df = new ProgressDialogFragment();
df.setCancelable(false);
mActivity.showDialogFragment(df, FRAGMENT_TAG_SEARCH_USERS);
}
}
}

View File

@ -0,0 +1,312 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.activity
import android.app.Activity
import android.content.Intent
import android.os.AsyncTask
import android.os.Bundle
import android.support.v4.app.DialogFragment
import android.text.TextUtils
import android.text.TextUtils.isEmpty
import android.util.Log
import android.view.View
import android.view.View.OnClickListener
import android.widget.AdapterView
import android.widget.AdapterView.OnItemClickListener
import android.widget.ListView
import com.squareup.otto.Subscribe
import kotlinx.android.synthetic.main.activity_user_list_selector.*
import org.mariotaku.microblog.library.MicroBlogException
import org.mariotaku.microblog.library.twitter.http.HttpResponseCode
import org.mariotaku.microblog.library.twitter.model.Paging
import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.LOGTAG
import org.mariotaku.twidere.adapter.SimpleParcelableUserListsAdapter
import org.mariotaku.twidere.adapter.SimpleParcelableUsersAdapter
import org.mariotaku.twidere.adapter.UserAutoCompleteAdapter
import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.fragment.CreateUserListDialogFragment
import org.mariotaku.twidere.fragment.ProgressDialogFragment
import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.ParcelableUserList
import org.mariotaku.twidere.model.SingleResponse
import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.message.UserListCreatedEvent
import org.mariotaku.twidere.model.util.ParcelableUserListUtils
import org.mariotaku.twidere.model.util.ParcelableUserUtils
import org.mariotaku.twidere.util.AsyncTaskUtils
import org.mariotaku.twidere.util.DataStoreUtils.getAccountScreenName
import org.mariotaku.twidere.util.MicroBlogAPIFactory
import org.mariotaku.twidere.util.ParseUtils
import java.util.*
class UserListSelectorActivity : BaseActivity(), OnClickListener, OnItemClickListener {
private lateinit var userListsAdapter: SimpleParcelableUserListsAdapter
private lateinit var usersAdapter: SimpleParcelableUsersAdapter
private var screenName: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val intent = intent
if (!intent.hasExtra(EXTRA_ACCOUNT_KEY)) {
finish()
return
}
setContentView(R.layout.activity_user_list_selector)
if (savedInstanceState == null) {
screenName = intent.getStringExtra(EXTRA_SCREEN_NAME)
} else {
screenName = savedInstanceState.getString(EXTRA_SCREEN_NAME)
}
val selectingUser = isSelectingUser
setTitle(if (selectingUser) R.string.select_user else R.string.select_user_list)
if (!isEmpty(screenName)) {
if (selectingUser) {
searchUser(screenName!!)
} else {
getUserLists(screenName)
}
}
val adapter = UserAutoCompleteAdapter(this)
adapter.accountKey = accountKey
editScreenName.setAdapter(adapter)
editScreenName.setText(screenName)
userListsAdapter = SimpleParcelableUserListsAdapter(this)
usersAdapter = SimpleParcelableUsersAdapter(this)
userListsList.adapter = userListsAdapter
usersList.adapter = usersAdapter
userListsList.onItemClickListener = this
usersList.onItemClickListener = this
screenNameConfirm.setOnClickListener(this)
createList.setOnClickListener(this)
if (selectingUser) {
usersListContainer.visibility = View.VISIBLE
userListsContainer.visibility = View.GONE
} else {
usersListContainer.visibility = if (isEmpty(screenName)) View.VISIBLE else View.GONE
userListsContainer.visibility = if (isEmpty(screenName)) View.GONE else View.VISIBLE
}
}
override fun onClick(v: View) {
when (v.id) {
R.id.screenNameConfirm -> {
val screen_name = ParseUtils.parseString(editScreenName.text)
if (isEmpty(screen_name)) return
searchUser(screen_name)
}
R.id.createList -> {
val f = CreateUserListDialogFragment()
val args = Bundle()
args.putParcelable(EXTRA_ACCOUNT_KEY, accountKey)
f.arguments = args
f.show(supportFragmentManager, null)
}
}
}
override fun onItemClick(view: AdapterView<*>, child: View, position: Int, id: Long) {
val view_id = view.id
val list = view as ListView
if (view_id == R.id.usersList) {
val user = usersAdapter.getItem(position - list.headerViewsCount) ?: return
if (isSelectingUser) {
val data = Intent()
data.setExtrasClassLoader(classLoader)
data.putExtra(EXTRA_USER, user)
setResult(Activity.RESULT_OK, data)
finish()
} else {
getUserLists(user.screen_name)
}
} else if (view_id == R.id.userListsList) {
val data = Intent()
data.putExtra(EXTRA_USER_LIST, userListsAdapter.getItem(position - list.headerViewsCount))
setResult(Activity.RESULT_OK, data)
finish()
}
}
fun setUsersData(data: List<ParcelableUser>) {
usersAdapter.setData(data, true)
usersListContainer.visibility = View.VISIBLE
userListsContainer.visibility = View.GONE
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString(EXTRA_SCREEN_NAME, screenName)
}
@Subscribe
fun onUserListCreated(event: UserListCreatedEvent) {
getUserLists(screenName)
}
private val accountKey: UserKey
get() = intent.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY)
private fun getUserLists(screenName: String?) {
if (screenName == null) return
this.screenName = screenName
val task = GetUserListsTask(this, accountKey, screenName)
AsyncTaskUtils.executeTask(task)
}
private val isSelectingUser: Boolean
get() = INTENT_ACTION_SELECT_USER == intent.action
private fun searchUser(name: String) {
val task = SearchUsersTask(this, accountKey, name)
AsyncTaskUtils.executeTask(task)
}
private fun setUserListsData(data: List<ParcelableUserList>, isMyAccount: Boolean) {
userListsAdapter.setData(data, true)
usersListContainer.visibility = View.GONE
userListsContainer.visibility = View.VISIBLE
createListContainer.visibility = if (isMyAccount) View.VISIBLE else View.GONE
}
private fun dismissDialogFragment(tag: String) {
executeAfterFragmentResumed { activity ->
val fm = activity.supportFragmentManager
val f = fm.findFragmentByTag(tag)
if (f is DialogFragment) {
f.dismiss()
}
}
}
private fun showDialogFragment(df: DialogFragment, tag: String) {
executeAfterFragmentResumed { activity ->
df.show(activity.supportFragmentManager, tag)
}
}
override fun onStart() {
super.onStart()
bus.register(this)
}
override fun onStop() {
bus.unregister(this)
super.onStop()
}
private class GetUserListsTask internal constructor(private val mActivity: UserListSelectorActivity, private val mAccountKey: UserKey,
private val mScreenName: String) : AsyncTask<Any, Any, SingleResponse<List<ParcelableUserList>>>() {
override fun doInBackground(vararg params: Any): SingleResponse<List<ParcelableUserList>> {
val twitter = MicroBlogAPIFactory.getInstance(mActivity, mAccountKey) ?: return SingleResponse.getInstance<List<ParcelableUserList>>()
try {
val lists = twitter.getUserListsByScreenName(mScreenName, true)
val data = ArrayList<ParcelableUserList>()
var isMyAccount = mScreenName.equals(getAccountScreenName(mActivity,
mAccountKey), ignoreCase = true)
for (item in lists) {
val user = item.user
if (user != null && mScreenName.equals(user.screenName, ignoreCase = true)) {
if (!isMyAccount && TextUtils.equals(user.id, mAccountKey.id)) {
isMyAccount = true
}
data.add(ParcelableUserListUtils.from(item, mAccountKey))
}
}
val result = SingleResponse.getInstance<List<ParcelableUserList>>(data)
result.extras.putBoolean(EXTRA_IS_MY_ACCOUNT, isMyAccount)
return result
} catch (e: MicroBlogException) {
Log.w(LOGTAG, e)
return SingleResponse.getInstance<List<ParcelableUserList>>(e)
}
}
override fun onPostExecute(result: SingleResponse<List<ParcelableUserList>>) {
mActivity.dismissDialogFragment(FRAGMENT_TAG_GET_USER_LISTS)
if (result.data != null) {
mActivity.setUserListsData(result.data, result.extras.getBoolean(EXTRA_IS_MY_ACCOUNT))
} else if (result.exception is MicroBlogException) {
if (result.exception.statusCode == HttpResponseCode.NOT_FOUND) {
mActivity.searchUser(mScreenName)
}
}
}
override fun onPreExecute() {
val df = ProgressDialogFragment()
df.isCancelable = false
mActivity.showDialogFragment(df, FRAGMENT_TAG_GET_USER_LISTS)
}
companion object {
private const val FRAGMENT_TAG_GET_USER_LISTS = "get_user_lists"
}
}
private class SearchUsersTask internal constructor(private val activity: UserListSelectorActivity, private val mAccountKey: UserKey,
private val mName: String) : AsyncTask<Any, Any, SingleResponse<List<ParcelableUser>>>() {
override fun doInBackground(vararg params: Any): SingleResponse<List<ParcelableUser>> {
val twitter = MicroBlogAPIFactory.getInstance(activity, mAccountKey) ?: return SingleResponse.getInstance<List<ParcelableUser>>()
try {
val paging = Paging()
val lists = twitter.searchUsers(mName, paging)
val data = ArrayList<ParcelableUser>()
for (item in lists) {
data.add(ParcelableUserUtils.fromUser(item, mAccountKey))
}
return SingleResponse.getInstance<List<ParcelableUser>>(data)
} catch (e: MicroBlogException) {
Log.w(LOGTAG, e)
return SingleResponse.getInstance<List<ParcelableUser>>(e)
}
}
override fun onPostExecute(result: SingleResponse<List<ParcelableUser>>) {
activity.dismissDialogFragment(FRAGMENT_TAG_SEARCH_USERS)
if (result.data != null) {
activity.setUsersData(result.data)
}
}
override fun onPreExecute() {
val df = ProgressDialogFragment()
df.isCancelable = false
activity.showDialogFragment(df, FRAGMENT_TAG_SEARCH_USERS)
}
companion object {
private const val FRAGMENT_TAG_SEARCH_USERS = "search_users"
}
}
}

View File

@ -26,7 +26,7 @@
tools:context=".activity.UserListSelectorActivity">
<LinearLayout
android:id="@+id/user_lists_container"
android:id="@+id/userListsContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?android:dividerVertical"
@ -35,13 +35,13 @@
android:visibility="gone">
<ListView
android:id="@+id/user_lists_list"
android:id="@+id/userListsList"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:id="@+id/create_list_container"
android:id="@+id/createListContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
@ -49,7 +49,7 @@
android:visibility="gone">
<Button
android:id="@+id/create_list"
android:id="@+id/createList"
style="?android:borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="@dimen/button_bar_height"
@ -59,7 +59,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/users_list_container"
android:id="@+id/usersListContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?android:dividerVertical"
@ -86,7 +86,7 @@
android:padding="@dimen/element_spacing_normal">
<AutoCompleteTextView
android:id="@+id/edit_screen_name"
android:id="@+id/editScreenName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
@ -94,7 +94,7 @@
android:maxLines="1"/>
<org.mariotaku.twidere.view.IconActionButton
android:id="@+id/screen_name_confirm"
android:id="@+id/screenNameConfirm"
android:layout_width="@dimen/minimum_element_size"
android:layout_height="@dimen/minimum_element_size"
android:layout_weight="0"
@ -108,7 +108,7 @@
</LinearLayout>
<ListView
android:id="@+id/users_list"
android:id="@+id/usersList"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>