/* * Copyright (C) 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License")savedInstanceState; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package edu.stanford.cs.sujogger.viewer; import java.util.ArrayList; import java.util.Hashtable; import com.admob.android.ads.AdManager; import com.admob.android.ads.AdView; import edu.stanford.cs.gaming.sdk.model.AppResponse; import edu.stanford.cs.gaming.sdk.model.Obj; import edu.stanford.cs.gaming.sdk.model.ObjProperty; import edu.stanford.cs.gaming.sdk.model.User; import edu.stanford.cs.gaming.sdk.service.GamingServiceConnection; import edu.stanford.cs.sujogger.R; import edu.stanford.cs.sujogger.actions.utils.TrackCreator; import edu.stanford.cs.sujogger.db.DatabaseHelper; import edu.stanford.cs.sujogger.util.Common; import edu.stanford.cs.sujogger.util.Constants; import edu.stanford.cs.sujogger.util.DistanceView; import edu.stanford.cs.sujogger.util.DurationView; import android.app.ListActivity; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class PeopleTrackList extends ListActivity { class Track { public int id; public String name; public int duration; public double distance; } public static final String TAG = "PeopleTrackList"; private PeopleTrackListReceiver mReceiver; private GamingServiceConnection mGamingServiceConn; private Handler mHandler = new Handler(); private ArrayList<Track> trackList; private Hashtable<Integer, Track> trackHash; private ProgressDialog mProgressDialog; //Request IDs private static final int OBJ_PROPS_RID = 120; private Runnable mRefreshTask = new Runnable() { public void run() { mProgressDialog = ProgressDialog.show(PeopleTrackList.this, "", getString(R.string.dialog_download_track_list), true); int user_id = PeopleTrackList.this.getIntent().getExtras().getInt("userId"); try { String[] names = new String[3]; names[0] = "name"; names[1] = "duration"; names[2] = "distance"; mGamingServiceConn.getObjProperties(OBJ_PROPS_RID, user_id, -1, "track", names); } catch (RemoteException e) { e.printStackTrace(); } } }; private DatabaseHelper mDbHelper; class PeopleTrackListReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { try { AppResponse appResponse = null; while ((appResponse = mGamingServiceConn.getNextPendingNotification()) != null) { Common.log(TAG, appResponse.toString()); Common.log(TAG, "PUBLISHGPXReceiver: Response received with request id:" + appResponse.request_id); if (appResponse.result_code.equals(GamingServiceConnection.RESULT_CODE_ERROR)) { PeopleTrackList.this.runOnUiThread(new Runnable() { public void run() { if (mProgressDialog != null) mProgressDialog.dismiss(); Toast toast = Toast.makeText(PeopleTrackList.this, R.string.connection_error_toast, Toast.LENGTH_SHORT); toast.show(); } }); continue; } else if (appResponse.result_code.equals(GamingServiceConnection.RESULT_CODE_VERSION_ERROR)) { PeopleTrackList.this.runOnUiThread(new Runnable() { public void run() { if (mProgressDialog != null) mProgressDialog.dismiss(); Common.displayUpgradeDialog(PeopleTrackList.this); } }); continue; } switch (appResponse.request_id) { case OBJ_PROPS_RID: final PeopleTrackListAdapter adapter = createAdapter((ObjProperty[]) appResponse.object); PeopleTrackList.this.runOnUiThread(new Runnable() { public void run() { setListAdapter(adapter); Common.log(TAG, "HERE 3"); mProgressDialog.dismiss(); } }); break; case 101: Common.log(TAG, "PUBLISHGPXReceiver: Response received with request id: " + appResponse.request_id); Common.log(TAG, "Response is: " + appResponse); Obj[] objArray = (Obj[]) appResponse.object; for (int i = 0; i < objArray.length; i++) { for (int j = 0; j < objArray[i].object_properties.length; j++) { Common.log(TAG, "STRING_VAL IS: " + objArray[i].object_properties[j].string_val); } } default: break; } } } catch (Exception e) { e.printStackTrace(); } } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { Common.log(TAG, "HERE1"); super.onCreate(savedInstanceState); this.setContentView(R.layout.list_simple); TextView emptyView = (TextView)getListView().getEmptyView(); emptyView.setText(R.string.no_tracks); mReceiver = new PeopleTrackListReceiver(); mGamingServiceConn = new GamingServiceConnection(this, mReceiver, Constants.APP_ID, Constants.APP_API_KEY, this.getClass().getName()); mGamingServiceConn.bind(); User user = Common.getRegisteredUser(this); mGamingServiceConn.setUserId(user.id, user.fb_id, user.fb_token); trackList = new ArrayList<Track>(); trackHash = new Hashtable<Integer, Track>(); mDbHelper = new DatabaseHelper(this); mDbHelper.openAndGetDb(); if (Constants.AD_TEST) AdManager.setTestDevices(new String[] { "3468678E351E95A5F7A64D2271BCB7BF" }); AdView adView = (AdView)View.inflate(this, R.layout.adview, null); getListView().addHeaderView(adView); mHandler.postDelayed(mRefreshTask, 100); } public void finalize() { mDbHelper.close(); mGamingServiceConn.unbind(); finish(); onDestroy(); } public void onDestroy() { mDbHelper.close(); mGamingServiceConn.unbind(); super.onDestroy(); } protected PeopleTrackListAdapter createAdapter(ObjProperty[] objProp) { Common.log("TAG", "HERE5"); // String[] testValues = new String[0]; if (objProp != null && objProp.length > 0) { // testValues = new String[objProp.length]; for (int i = 0; i < objProp.length; i++) { if (trackHash.get(objProp[i].obj_id) == null) { Track track = new Track(); track.id = objProp[i].obj_id; trackHash.put(track.id, track); } Track track = trackHash.get(objProp[i].obj_id); Common.log(TAG, "ASLAI OBJPROP[i].NAME is " + objProp[i].name); if ("name".equals(objProp[i].name)) { trackList.add(0, track); track.name = objProp[i].string_val; // testValues[i] = objProp[i].string_val; } else if ("duration".equals(objProp[i].name)) { track.duration = objProp[i].int_val; } else if ("distance".equals(objProp[i].name)) { track.distance = objProp[i].float_val; } } } Common.log("TAG", "HERE6"); /* * // Create some mock data String[] testValues = new String[] { * "Test1", "Test2", "Test3" }; */ // Create a simple array adapter (of type string) with the test values PeopleTrackListAdapter adapter = new PeopleTrackListAdapter(PeopleTrackList.this, R.layout.trackitem, trackList); return adapter; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Log.v(TAG, "position = " + position + "; id = " + id); position--; //ignore ad header int objId = trackList.get(position).id; String name = trackHash.get(objId).name; Common.log(TAG, "objId = " + objId); if (mDbHelper.getIdFromTrackId(objId) == -1) { TrackCreator trackCreator = new TrackCreator(this); trackCreator.downloadTrack(objId, name); } else Toast.makeText(this, "The track is already downloaded", Toast.LENGTH_LONG).show(); } class PeopleTrackListAdapter extends ArrayAdapter<Track> { private ArrayList<Track> items; public PeopleTrackListAdapter(Context context, int textViewResourceId, ArrayList<PeopleTrackList.Track> items) { super(context, textViewResourceId, items); this.items = items; } public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.trackitem, null); } Track o = items.get(position); if (o != null) { TextView titleView = (TextView) v.findViewById(R.id.listitem_name); titleView.setText(o.name); DistanceView distanceView = (DistanceView) v.findViewById(R.id.listitem_distance); distanceView.setText("" + o.distance); DurationView durationView = (DurationView) v.findViewById(R.id.listitem_duration); durationView.setText("" + o.duration); ImageView iconView = (ImageView) v.findViewById(R.id.listitem_icon); iconView.setVisibility(View.GONE); } return v; } } }