package info.justaway; import android.annotation.SuppressLint; import android.app.ActionBar; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import java.util.ArrayList; import java.util.HashMap; import de.greenrobot.event.EventBus; import info.justaway.adapter.SubscribeUserListAdapter; import info.justaway.event.AlertDialogEvent; import info.justaway.event.model.DestroyUserListEvent; import info.justaway.model.AccessTokenManager; import info.justaway.model.TabManager; import info.justaway.model.UserListCache; import info.justaway.model.UserListWithRegistered; import info.justaway.task.UserListsLoader; import info.justaway.util.ThemeUtil; import twitter4j.ResponseList; import twitter4j.UserList; public class ChooseUserListsActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<ResponseList<UserList>> { private SubscribeUserListAdapter mAdapter; @SuppressLint("UseSparseArrays") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ThemeUtil.setTheme(this); setContentView(R.layout.activity_choose_user_lists); ActionBar actionBar = getActionBar(); if (actionBar != null) { actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); } ListView listView = (ListView) findViewById(R.id.list); mAdapter = new SubscribeUserListAdapter(this, R.layout.row_subscribe_user_list); listView.setAdapter(mAdapter); findViewById(R.id.button_cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setResult(RESULT_CANCELED); finish(); } }); findViewById(R.id.button_save).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { HashMap<Long, Boolean> checkMap = new HashMap<Long, Boolean>(); ArrayList<UserList> checkList = new ArrayList<UserList>(); int count = mAdapter.getCount(); for (int i = 0; i < count; i++) { UserListWithRegistered userListWithRegistered = mAdapter.getItem(i); UserList userList = userListWithRegistered.getUserList(); if (userListWithRegistered.isRegistered()) { checkMap.put(userList.getId(), true); checkList.add(userList); } } HashMap<Long, Boolean> tabMap = new HashMap<Long, Boolean>(); ArrayList<TabManager.Tab> tabs = new ArrayList<TabManager.Tab>(); for (TabManager.Tab tab : TabManager.loadTabs()) { if (tabMap.get(tab.id) != null) { continue; } if (tab.id < 0 || checkMap.get(tab.id) != null) { tabs.add(tab); tabMap.put(tab.id, true); } } for (UserList userList : checkList) { if (tabMap.get(userList.getId()) != null) { continue; } TabManager.Tab tab = new TabManager.Tab(userList.getId()); if (userList.getUser().getId() == AccessTokenManager.getUserId()) { tab.name = userList.getName(); } else { tab.name = userList.getFullName(); } tabs.add(tab); tabMap.put(tab.id, true); } TabManager.saveTabs(tabs); setResult(RESULT_OK); finish(); } }); getSupportLoaderManager().initLoader(0, null, this); } @Override protected void onResume() { super.onResume(); EventBus.getDefault().register(this); } @Override protected void onPause() { EventBus.getDefault().unregister(this); super.onPause(); } @SuppressWarnings("UnusedDeclaration") public void onEventMainThread(AlertDialogEvent event) { event.getDialogFragment().show(getSupportFragmentManager(), "dialog"); } @SuppressWarnings("UnusedDeclaration") public void onEventMainThread(DestroyUserListEvent event) { UserListWithRegistered userListWithRegistered = mAdapter.findByUserListId(event.getUserListId()); if (userListWithRegistered != null) { mAdapter.remove(userListWithRegistered); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; } return true; } @Override public Loader<ResponseList<UserList>> onCreateLoader(int arg0, Bundle arg1) { return new UserListsLoader(this); } @Override public void onLoadFinished(Loader<ResponseList<UserList>> arg0, ResponseList<UserList> userLists) { if (userLists != null) { for (UserList userList : userLists) { UserListWithRegistered userListWithRegistered = new UserListWithRegistered(); userListWithRegistered.setRegistered(TabManager.hasTabId(userList.getId())); userListWithRegistered.setUserList(userList); mAdapter.add(userListWithRegistered); } } UserListCache.setUserLists(userLists); } @Override public void onLoaderReset(Loader<ResponseList<UserList>> arg0) { } }