converted user lists selector to kotlin
This commit is contained in:
parent
7fda28ba30
commit
9e73c8b31c
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue