package kr.kdev.dg1s.biowiki.ui.accounts; import android.content.Context; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckedTextView; import android.widget.ListView; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockListActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import java.util.List; import java.util.Map; import kr.kdev.dg1s.biowiki.BioWiki; import kr.kdev.dg1s.biowiki.BioWikiDB; import kr.kdev.dg1s.biowiki.R; import kr.kdev.dg1s.biowiki.ui.PullToRefreshHelper; import kr.kdev.dg1s.biowiki.ui.PullToRefreshHelper.RefreshListener; import kr.kdev.dg1s.biowiki.util.ListScrollPositionManager; import kr.kdev.dg1s.biowiki.util.MapUtils; import kr.kdev.dg1s.biowiki.util.NetworkUtils; import kr.kdev.dg1s.biowiki.util.StringUtils; import kr.kdev.dg1s.biowiki.util.ToastUtils; import uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout; public class ManageBlogsActivity extends SherlockListActivity { private static boolean mIsRefreshing; private List<Map<String, Object>> mAccounts; private ListScrollPositionManager mListScrollPositionManager; private PullToRefreshHelper mPullToRefreshHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.empty_listview); mListScrollPositionManager = new ListScrollPositionManager(getListView(), false); setTitle(getString(R.string.blogs_visibility)); ActionBar actionBar = getSupportActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); // pull to refresh setup mPullToRefreshHelper = new PullToRefreshHelper(this, (PullToRefreshLayout) findViewById(R.id.ptr_layout), new RefreshListener() { @Override public void onRefreshStarted(View view) { if (!NetworkUtils.checkConnection(getBaseContext())) { mPullToRefreshHelper.setRefreshing(false); return; } new SetupBlogTask().execute(); } } ); // Load accounts and update from server loadAccounts(); refreshBlogs(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); CheckedTextView checkedView = (CheckedTextView) v; checkedView.setChecked(!checkedView.isChecked()); setItemChecked(position, checkedView.isChecked()); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.manage_blogs, menu); return true; } @Override public boolean onOptionsItemSelected(final MenuItem item) { int itemId = item.getItemId(); switch (itemId) { case R.id.menu_show_all: selectAll(); return true; case R.id.menu_hide_all: deselectAll(); return true; case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } private void selectAll() { for (Map<String, Object> item : mAccounts) { item.put("isHidden", false); } BioWiki.wpDB.setAllDotComAccountsVisibility(true); ((BlogsAdapter) getListView().getAdapter()).notifyDataSetChanged(); } private void deselectAll() { for (Map<String, Object> item : mAccounts) { item.put("isHidden", true); } BioWiki.wpDB.setAllDotComAccountsVisibility(false); ((BlogsAdapter) getListView().getAdapter()).notifyDataSetChanged(); } private void refreshBlogs() { mPullToRefreshHelper.setRefreshing(true); new SetupBlogTask().execute(); } private void loadAccounts() { ListView listView = getListView(); mAccounts = BioWiki.wpDB.getAccountsBy("dotcomFlag=1", new String[]{"isHidden"}); listView.setAdapter(new BlogsAdapter(this, R.layout.manageblogs_listitem, mAccounts)); } private void setItemChecked(int position, boolean checked) { int blogId = MapUtils.getMapInt(mAccounts.get(position), "id"); BioWiki.wpDB.setDotComAccountsVisibility(blogId, checked); Map<String, Object> item = mAccounts.get(position); item.put("isHidden", checked ? "0" : "1"); } private class BlogsAdapter extends ArrayAdapter<Map<String, Object>> { private int mResource; public BlogsAdapter(Context context, int resource, List objects) { super(context, resource, objects); mResource = resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(mResource, parent, false); CheckedTextView nameView = (CheckedTextView) rowView.findViewById(R.id.blog_name); String name = MapUtils.getMapStr(getItem(position), "blogName"); if (name.trim().length() == 0) { name = MapUtils.getMapStr(getItem(position), "url"); name = StringUtils.getHost(name); } nameView.setText(name); nameView.setChecked(!MapUtils.getMapBool(getItem(position), "isHidden")); return rowView; } } private class SetupBlogTask extends AsyncTask<Void, Void, List<Map<String, Object>>> { private SetupBlog mSetupBlog; private int mErrorMsgId; @Override protected void onPreExecute() { mSetupBlog = new SetupBlog(); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); String username = settings.getString(BioWiki.WPCOM_USERNAME_PREFERENCE, null); String password = BioWikiDB.decryptPassword(settings.getString(BioWiki.WPCOM_PASSWORD_PREFERENCE, null)); mSetupBlog.setUsername(username); mSetupBlog.setPassword(password); } @Override protected List<Map<String, Object>> doInBackground(Void... args) { List<Map<String, Object>> userBlogList = mSetupBlog.getBlogList(); mErrorMsgId = mSetupBlog.getErrorMsgId(); if (userBlogList != null) { mSetupBlog.syncBlogs(getApplicationContext(), userBlogList); } return userBlogList; } @Override protected void onPostExecute(final List<Map<String, Object>> userBlogList) { if (mErrorMsgId != 0) { ToastUtils.showToast(getBaseContext(), mErrorMsgId, ToastUtils.Duration.SHORT); } mListScrollPositionManager.saveScrollOffset(); loadAccounts(); mListScrollPositionManager.restoreScrollOffset(); mPullToRefreshHelper.setRefreshing(false); } } }