package org.magnum.soda.example.controllers.followingfragment; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.magnum.soda.android.AndroidSoda; import org.magnum.soda.android.AndroidSodaListener; import org.magnum.soda.android.SodaInvokeInUi; import org.magnum.soda.example.maint.LoginActivity; import org.magnum.soda.example.maint.MaintenanceReport; import org.magnum.soda.example.maint.MaintenanceReports; import org.magnum.soda.example.maint.R; import org.magnum.soda.example.maint.ReportEditorActivity; import org.magnum.soda.example.maint.ReportParcelable; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import com.actionbarsherlock.app.SherlockFragment; public class FollowingFragment extends SherlockFragment implements AndroidSodaListener{ private static final String TAG = "FollowingFragment"; // UI references. private ListView searchResultList; private static SimpleAdapter mAdapter; private List<MaintenanceReport> mReportList = new ArrayList<MaintenanceReport>(); private List<HashMap<String, String>> mDisplayList = new ArrayList<HashMap<String, String>>(); private List<HashMap<String, MaintenanceReport>> mMapList = new ArrayList<HashMap<String, MaintenanceReport>>(); Context ctx_; private AndroidSodaListener asl_ = null; private AndroidSoda as = null; private View mRootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { asl_ = this; ctx_ = this.getActivity(); mRootView = inflater.inflate(R.layout.fragment_following, container, false); searchResultList = (ListView) mRootView .findViewById(R.id.ListView_following); mAdapter = new SimpleAdapter( this.getActivity(), mDisplayList,// data source R.layout.listview_item_nocheckbox, new String[] { "itemDescription" }, new int[] { R.id.item_description }); mAdapter.notifyDataSetChanged(); searchResultList.setAdapter(mAdapter); searchResultList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { @SuppressWarnings("unchecked") HashMap<String, String> map = (HashMap<String, String>) searchResultList .getItemAtPosition(position); String des = map.get("itemDescription"); ReportDetailIntent(des); } }); // AndroidSoda.init(ctx_, LoginActivity.mHost, 8081, asl_); return mRootView; } @Override public void onResume() { super.onResume(); Log.i(TAG,"onResume()."); // getFollowing(); } private void ReportDetailIntent(String descript) { Intent i = new Intent(this.getActivity(), ReportEditorActivity.class); i.putExtra("description", descript); Iterator<HashMap<String, MaintenanceReport>> itr = mMapList.iterator(); while (itr.hasNext()) { HashMap<String, MaintenanceReport> m = itr.next(); if (m.containsKey(descript)) { i.putExtra("mReport", new ReportParcelable(m.get(descript))); break; } } startActivity(i); } private void getFollowing() { List<Future> list = new ArrayList<Future>(); Future<?> Result = AndroidSoda.async(new Runnable() { @Override @SodaInvokeInUi public void run() { if (as != null) { Log.d(TAG, "conected"); SharedPreferences sharedPref = ctx_.getSharedPreferences( getString(R.string.app_name), Context.MODE_PRIVATE); String username = sharedPref.getString("username", "no"); MaintenanceReports reportHandle = as.get( MaintenanceReports.class, MaintenanceReports.SVC_NAME); mReportList = reportHandle.getFollowing(username); Log.i(TAG, "Download reportlist size:" + mReportList.size()); populateList(); } } }); list.add(Result); for (Future f : list) { try { while (!f.isDone()) { } f.get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void populateList() { mDisplayList.clear(); mMapList.clear(); Iterator<MaintenanceReport> itr = mReportList.iterator(); while (itr.hasNext()) { HashMap<String, String> map = new HashMap<String, String>(); HashMap<String, MaintenanceReport> sm = new HashMap<String, MaintenanceReport>(); MaintenanceReport temp = ((MaintenanceReport) itr.next()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); String item = "Title:" + temp.getTitle() + "\n content:" + temp.getContents() + "\n" + temp.getCreatorId() + " " + sdf.format(temp.getCreateTime_()); map.put("itemDescription", item); sm.put(item, temp); mMapList.add(sm); mDisplayList.add(map); } Log.e(TAG, "displayList.size():" + mDisplayList.size()); getActivity().runOnUiThread(new Runnable() { @Override public void run() { mAdapter.notifyDataSetInvalidated();// mAdapter.notifyDataSetChanged(); } }); } @Override public void connected(final AndroidSoda s) { Log.d(TAG, "connected"); this.as = s; getFollowing(); } }