mirror of
https://github.com/bspeice/itcs4180
synced 2024-12-04 21:28:10 -05:00
Merge branch 'master' of git@github.com:DjBushido/itcs4180.git
This commit is contained in:
commit
f2c2158082
@ -8,9 +8,21 @@
|
|||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
tools:context=".MainActivity" >
|
tools:context=".MainActivity" >
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/listLocations"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentTop="true" >
|
||||||
|
</ListView>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/txtNoLocations"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/hello_world" />
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:text="There are currently no locations available. Contacting the server to get them now..." />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
34
UNCCScavenger/res/layout/list_location.xml
Normal file
34
UNCCScavenger/res/layout/list_location.xml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical" >
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imgIsFound"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:src="@drawable/ic_launcher" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtName"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_toRightOf="@+id/imgIsFound"
|
||||||
|
android:text="TextView"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/txtRiddle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignLeft="@+id/txtName"
|
||||||
|
android:layout_below="@+id/txtName"
|
||||||
|
android:text="TextView"
|
||||||
|
android:textColor="@android:color/secondary_text_light"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -1,15 +1,56 @@
|
|||||||
package edu.uncc.scavenger;
|
package edu.uncc.scavenger;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import java.util.List;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import edu.uncc.scavenger.database.LocationDatabaseClient;
|
||||||
|
import edu.uncc.scavenger.rest.LocationClient;
|
||||||
|
import edu.uncc.scavenger.rest.RestLocation;
|
||||||
|
|
||||||
public class MainActivity extends Activity {
|
public class MainActivity extends Activity {
|
||||||
|
|
||||||
|
ListView locationList;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
|
|
||||||
|
// Get our list of events loaded
|
||||||
|
locationList = (ListView)findViewById(R.id.listLocations);
|
||||||
|
List<RestLocation> locations = new LocationDatabaseClient().getAllLocations();
|
||||||
|
if (locations != null && locations.size() > 0) {
|
||||||
|
LocationAdapter mLocationAdapter = new LocationAdapter(locations);
|
||||||
|
locationList.setAdapter(mLocationAdapter);
|
||||||
|
} else {
|
||||||
|
// We don't yet have any locations...
|
||||||
|
((TextView)findViewById(R.id.txtNoLocations)).setVisibility(View.VISIBLE);
|
||||||
|
((ListView)findViewById(R.id.listLocations)).setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// And kick off contacting to server to see if there are any new ones
|
||||||
|
new LocationClient.LocationsDownloader(this) {
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(List<RestLocation> result) {
|
||||||
|
super.onPostExecute(result);
|
||||||
|
// And update our adapter when done
|
||||||
|
LocationAdapter mLocationAdapter = new LocationAdapter(result);
|
||||||
|
locationList.setAdapter(mLocationAdapter);
|
||||||
|
|
||||||
|
// Always show the ListView and hide the TextView
|
||||||
|
// We're back on the main thread at this point, so it's legal.
|
||||||
|
((TextView)findViewById(R.id.txtNoLocations)).setVisibility(View.GONE);
|
||||||
|
((ListView)findViewById(R.id.listLocations)).setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -18,5 +59,58 @@ public class MainActivity extends Activity {
|
|||||||
getMenuInflater().inflate(R.menu.main, menu);
|
getMenuInflater().inflate(R.menu.main, menu);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class LocationAdapter extends BaseAdapter {
|
||||||
|
private List<RestLocation> locations;
|
||||||
|
|
||||||
|
public LocationAdapter(List<RestLocation> locations) {
|
||||||
|
this.locations = locations;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return locations.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getItem(int position) {
|
||||||
|
return locations.get(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getItemId(int position) {
|
||||||
|
return locations.get(position).getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
Holder holder = new Holder();
|
||||||
|
View v = convertView;
|
||||||
|
|
||||||
|
if (v == null) {
|
||||||
|
v = getLayoutInflater().inflate(R.layout.list_location, null);
|
||||||
|
|
||||||
|
holder.imgFound = (ImageView)v.findViewById(R.id.imgIsFound);
|
||||||
|
holder.name = (TextView)v.findViewById(R.id.txtName);
|
||||||
|
holder.riddle = (TextView)v.findViewById(R.id.txtRiddle);
|
||||||
|
|
||||||
|
v.setTag(holder);
|
||||||
|
} else {
|
||||||
|
holder = (Holder)v.getTag();
|
||||||
|
}
|
||||||
|
|
||||||
|
RestLocation location = locations.get(position);
|
||||||
|
holder.name.setText(location.getName());
|
||||||
|
holder.riddle.setText(location.getRiddle());
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Holder {
|
||||||
|
ImageView imgFound;
|
||||||
|
TextView name;
|
||||||
|
TextView riddle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package edu.uncc.scavenger.database;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import edu.uncc.scavenger.rest.RestLocation;
|
||||||
|
|
||||||
|
public class LocationDatabaseClient {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Super high-level API for working with locations.
|
||||||
|
* Also helpful for just drawing out skeletons of code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public List<RestLocation> getAllLocations() {
|
||||||
|
// TODO: Implement method to get all locations that exist in the database
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void persistLocation(RestLocation location) {
|
||||||
|
// TODO: Save a location to the database
|
||||||
|
}
|
||||||
|
|
||||||
|
public void persistLocation(List<RestLocation> locations) {
|
||||||
|
for (RestLocation l: locations) {
|
||||||
|
persistLocation(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void synchronizeLocations(List<RestLocation> locations) {
|
||||||
|
// TODO: Implement method to save all values in locations, and remove values that aren't there.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,51 +6,49 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import edu.uncc.scavenger.R;
|
import edu.uncc.scavenger.R;
|
||||||
|
import edu.uncc.scavenger.database.LocationDatabaseClient;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
import retrofit.RestAdapter;
|
import retrofit.RestAdapter;
|
||||||
|
|
||||||
public class LocationClient {
|
public class LocationClient {
|
||||||
|
|
||||||
private Context ctx;
|
private static LocationService getAdapter(Context ctx) {
|
||||||
|
|
||||||
public LocationClient(Context ctx) {
|
|
||||||
this.ctx = ctx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LocationService getAdapter() {
|
|
||||||
String endpoint = ctx.getString(R.string.endpoint);
|
String endpoint = ctx.getString(R.string.endpoint);
|
||||||
RestAdapter ra = new RestAdapter.Builder().setEndpoint(endpoint).build();
|
RestAdapter ra = new RestAdapter.Builder().setEndpoint(endpoint)
|
||||||
|
.build();
|
||||||
return ra.create(LocationService.class);
|
return ra.create(LocationService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String validateLocation(int id, String key) {
|
public static String validateLocation(Context ctx, int id, String key) {
|
||||||
LocationService client = getAdapter();
|
LocationService client = getAdapter(ctx);
|
||||||
Map<String, String> keys = new HashMap<String, String>();
|
Map<String, String> keys = new HashMap<String, String>();
|
||||||
keys.put("key", key);
|
keys.put("key", key);
|
||||||
keys.put("id", String.valueOf(id));
|
keys.put("id", String.valueOf(id));
|
||||||
return client.getResult(keys);
|
return client.getResult(keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RestLocation> getLocations() {
|
public static class LocationsDownloader extends
|
||||||
try {
|
AsyncTask<Void, Void, List<RestLocation>> {
|
||||||
// Inline AsyncTask
|
LocationService client;
|
||||||
return new AsyncTask<Void, Void, List<RestLocation>>() {
|
|
||||||
@Override
|
public LocationsDownloader(Context ctx) {
|
||||||
protected List<RestLocation> doInBackground(Void... params) {
|
client = getAdapter(ctx);
|
||||||
// Work happens here
|
|
||||||
return getAdapter().listLocations();
|
|
||||||
}
|
|
||||||
}.get();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (ExecutionException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
@Override
|
||||||
|
protected List<RestLocation> doInBackground(Void... arg0) {
|
||||||
|
return client.listLocations();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AsyncTask<Void, Void, List<RestLocation>> updateDatabase(Context ctx) {
|
||||||
|
// Start the downloader and wait until it's finished.
|
||||||
|
return new LocationsDownloader(ctx) {
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(List<RestLocation> result) {
|
||||||
|
new LocationDatabaseClient().synchronizeLocations(result);
|
||||||
|
}
|
||||||
|
}.execute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user