package edu.mit.mitmobile2.facilities;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.ListView;
import android.widget.TextView;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.Global;
import edu.mit.mitmobile2.NewModule;
import edu.mit.mitmobile2.NewModuleActivity;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.TwoLineActionRow;
import edu.mit.mitmobile2.facilities.FacilitiesDB.LocationTable;
import edu.mit.mitmobile2.objs.FacilitiesItem.CategoryRecord;
import edu.mit.mitmobile2.objs.FacilitiesItem.LocationRecord;
public class FacilitiesProblemLocationActivity extends NewModuleActivity {
public static final String TAG = "FacilitiesProblemLocationActivity";
Context mContext;
ListView mListView;
final FacilitiesDB db = FacilitiesDB.getInstance(this);
FullScreenLoader mLoader;
Handler mFacilitiesLoadedHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG,"message = " + msg.arg1);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate()");
mContext = this;
createViews();
}
public void createViews() {
setContentView(R.layout.facilities_problem_location);
addSecondaryTitle("Where is it?");
mLoader = (FullScreenLoader) findViewById(R.id.facilitiesLoader);
mLoader.showLoading();
new DatabaseUpdater().execute("");
// Set up location search
// Set up use my location button
TwoLineActionRow useMyLocationActionRow = (TwoLineActionRow) findViewById(R.id.facilitiesUseMyLocationActionRow);
String title1 = "Use My Location";
String title2 = "";
useMyLocationActionRow.setTitle(title1 + " " + title2, TextView.BufferType.SPANNABLE);
useMyLocationActionRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, FacilitiesUseMyLocationActivity.class);
startActivity(intent);
}
});
AutoCompleteTextView facilitiesTextLocation = (AutoCompleteTextView) findViewById(R.id.facilitiesTextLocation);
facilitiesTextLocation.setAdapter(new LocationsSearchCursorAdapter(this, db));
facilitiesTextLocation.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View row, int position,
long id) {
Cursor cursor = (Cursor) listView.getItemAtPosition(position);
LocationRecord locationRecord = FacilitiesDB.getLocationRecord(cursor);
int dbIdIndex = cursor.getColumnIndexOrThrow(LocationTable._ID);
long dbId = cursor.getLong(dbIdIndex);
/*
* if the user selected a use what I typed option, use this as the actual location
* and jump to the problem type selection screen
* Else, go to the room selection screen if building number is defined, else inside/outside screen
*/
Log.d(TAG,"locastion search _id = " + dbId);
if (dbId == -1) {
int nameIndex = cursor.getColumnIndexOrThrow("name");
Global.sharedData.getFacilitiesData().setUserAssignedLocationName(cursor.getString(nameIndex));
Intent intent = new Intent(mContext, FacilitiesProblemTypeActivity.class);
startActivity(intent);
return;
} else {
Global.sharedData.getFacilitiesData().setUserAssignedLocationName(null);
}
FacilitiesActivity.launchActivityForLocation(mContext, locationRecord);
}
});
}
private class DatabaseUpdater extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... msg) {
// Executed in worker thread
String result = "";
try {
db.updateDatabase(mContext, mFacilitiesLoadedHandler);
result = "success";
} catch (Exception e) {
Log.d(TAG,"DatabaseUpdater exception: " + e.getMessage());
}
return result;
}
@Override
protected void onPostExecute(String result) {
// Executed in UI thread
CategoryAdapter adapter = new CategoryAdapter(FacilitiesProblemLocationActivity.this, db.getCategoryCursor());
ListView listView = (ListView) findViewById(R.id.facilitiesProblemLocationListView);
listView.setAdapter(adapter);
listView.setVisibility(View.VISIBLE);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
CategoryRecord category = db.getCategory(position);
Log.d(TAG,"position = " + position + " id = " + category.id + " name = " + category.name);
// save the selected category
Global.sharedData.getFacilitiesData().setLocationCategory(category.id);
Intent intent = new Intent(mContext, FacilitiesLocationsForCategoryActivity.class);
startActivity(intent);
}
});
mLoader.setVisibility(View.GONE);
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
//mBackgroundView.startBackgroundAnimation();
}
@Override
public boolean isModuleHomeActivity() {
return false;
}
@Override
protected NewModule getNewModule() {
// TODO Auto-generated method stub
return new FacilitiesModule();
}
@Override
protected boolean isScrollable() {
// TODO Auto-generated method stub
return false;
}
@Override
protected void onOptionSelected(String optionId) {
// TODO Auto-generated method stub
}
}