package org.magnum.soda.example.controllers.searchlocationfragment;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import leadtools.demos.BitmapUtils;
import leadtools.demos.BitmapUtils.GetBitmapListener;
import org.magnum.soda.Callback;
import org.magnum.soda.android.AndroidSoda;
import org.magnum.soda.android.AndroidSodaListener;
import org.magnum.soda.android.SodaInvokeInUi;
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 android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter;
import com.actionbarsherlock.app.SherlockFragment;
public class SearchLocationFragment extends SherlockFragment implements
AndroidSodaListener {
// UI references.
private Button searchButton;
private EditText rangeText;
// private ListView searchResultList;
private List<MaintenanceReport> mReportList = new ArrayList<MaintenanceReport>();
private ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
private Context ctx_;
private SimpleAdapter mAdapter;
private AndroidSodaListener asl_ = null;
private AndroidSoda as = null;
private ReportsListFragment mReportsListFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ctx_ = this.getActivity();
setupActionBar();
View rootView = inflater.inflate(R.layout.fragment_search_location,
container, false);
// setContentView(R.layout.activity_searchbylocation);
mReportsListFragment = new ReportsListFragment();
getFragmentManager().beginTransaction()
.replace(R.id.frameLayoutReportListFrame, mReportsListFragment)
.commit();
Button loadDummyReportsButton = (Button) rootView
.findViewById(R.id.buttonLoadDummyReports);
loadDummyReportsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
displayDummyReports();
}
});
searchButton = (Button) rootView.findViewById(R.id.searchButton);
rangeText = (EditText) rootView.findViewById(R.id.rangeText);
// searchResultList = (ListView) rootView
// .findViewById(R.id.location_listView);
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double range = Double.valueOf(rangeText.getText().toString());
AndroidSoda.async(new Runnable() {
@Override
public void run() {
GetReportListTask t = new GetReportListTask(ctx_);
t.execute((Void) null);
}
});
}
});
list = new ArrayList<HashMap<String, String>>();
// instantiate customized MyAdapter
mAdapter = new SimpleAdapter(
this.getActivity(),
list,// data source
R.layout.listview_item_nocheckbox,
new String[] { "itemDescription" },
new int[] { R.id.item_description });
// map the layout part in xml to element in HashMap
// bind Adapter
// searchResultList.setAdapter(mAdapter);
// bind listView's listener
// searchResultList.setOnItemClickListener(new OnItemClickListener() {
// @Override
// public void onItemClick(AdapterView<?> parent, View view,
// int position, long id) {
//
// HashMap<String, String> map = (HashMap<String, String>)
// searchResultList
// .getItemAtPosition(position);
// String des = map.get("itemDescription");
// ReportDetailIntent(des);
// }
//
// });
AndroidSoda.init(this.getActivity(), "10.0.1.8", 8081, this);
return rootView;
}
private void ReportDetailIntent(String descript) {
Intent i = new Intent(this.getActivity(), ReportEditorActivity.class);
i.putExtra("description", descript);
Log.d("SODA", "ReportDetailIntent");
startActivity(i);
}
@Override
public void connected(AndroidSoda s) {
this.as = s;
getReports();
}
private void getReports() {
List<Future> list = new ArrayList<Future>();
Future<?> Result = AndroidSoda.async(new Runnable() {
@Override
@SodaInvokeInUi
public void run() {
if (as != null) {
Log.e("conected", "------------------------------------");
MaintenanceReports reportHandle = as.get(
MaintenanceReports.class,
MaintenanceReports.SVC_NAME);
reportHandle
.getReports(new Callback<List<MaintenanceReport>>() {
// @SodaInvokeInUi
public void handle(List<MaintenanceReport> arg0) {
mReportList = arg0;
populateList(mReportList);
}
});
Log.e("obtained", "------------------------------------");
}
}
});
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 displayDummyReports() {
List<MaintenanceReport> dummyReports = new ArrayList<MaintenanceReport>();
final MaintenanceReport reportWithImage = new MaintenanceReport();
reportWithImage.setContents("This report has an image!");
reportWithImage.setTitle("Report with an image");
String url = "https://si0.twimg.com/profile_images/2725938749/60d4af1fa99056b83e9ccc746a81c88b.png";
BitmapUtils.getBitmapByteArrayFromUrlAsync(url,
new GetBitmapListener<byte[]>() {
@Override
public void onResponse(byte[] bitmaps) {
reportWithImage.setImageData(bitmaps);
}
});
dummyReports.add(reportWithImage);
for (int i = 0; i < 10; ++i) {
MaintenanceReport report = new MaintenanceReport();
report.setTitle("Report Title");
report.setCreateTime_(new Date());
report.setContents("These are the contents of this report.");
if (i == 4) {
report.setContents("The contents of this report are very very very very very long: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum");
}
dummyReports.add(report);
}
populateList(dummyReports);
}
private void populateList(List<MaintenanceReport> reports) {
mReportsListFragment.setReports(reports);
// Iterator<MaintenanceReport> itr = mReportList.iterator();
//
// while (itr.hasNext()) {
// HashMap<String, String> map = new HashMap<String, String>();
// MaintenanceReport temp = ((MaintenanceReport) itr.next());
// Log.e("-- items--", temp.getCreatorId());
// map.put("itemDescription", temp.getContents());
// list.add(map);
//
// }
// Log.e("size", ":" + list.size());
//
// getActivity().runOnUiThread(new Runnable() {
//
// @Override
// public void run() {
// mAdapter.notifyDataSetInvalidated();//
// mAdapter.notifyDataSetChanged();
// }
//
// });
}
/**
* Represents an asynchronous task used to get report list from server
*/
public class GetReportListTask extends AsyncTask<Void, Void, Boolean> {
private Context mcontext;
List<MaintenanceReport> reports = new ArrayList<MaintenanceReport>();
public GetReportListTask(Context context) {
mcontext = context;
}
@Override
protected Boolean doInBackground(Void... params) {
try {
// Simulate network access.
Thread.sleep(2000);
// hard coded for now, change to get from server later
for (int i = 0; i < 3; i++) {
MaintenanceReport r = new MaintenanceReport();
r.setContents("Report Id:" + i);
reports.add(r);
}
} catch (InterruptedException e) {
return false;
}
return true;
}
@Override
protected void onPostExecute(final Boolean success) {
for (MaintenanceReport r : reports) {
HashMap<String, String> t = new HashMap<String, String>();
t.put("itemDescription", r.getContents());
list.add(t);
}
dataChanged();
}
@Override
protected void onCancelled() {
}
}
// update listview
private void dataChanged() {
mAdapter.notifyDataSetChanged();
}
private void setupActionBar() {
final com.actionbarsherlock.app.ActionBar bar = getSherlockActivity()
.getSupportActionBar();
bar.hide();
}
}