/*
********************* [ P O C K E T C A M P U S ] *****************
* [ LICENCE ] see "licence"-file in the root directory
* [ MAINTAINER ] andreas.kirchner@epfl.ch
* [ STATUS ] not used
*
**************************[ C O M M E N T S ]**********************
*
* I tried a service. Maybe useful as a code snippet-collection,
* but is not really in use
*
*******************************************************************
*/
package org.pocketcampus.gui.unstable;
import java.util.Timer;
import java.util.TimerTask;
import org.pocketcampus.gui.social.PositionUpdater;
import org.pocketcampus.map.Position;
import org.pocketcampus.map.element.MapPerson;
import org.pocketcampus.positioning.Locator;
import org.pocketcampus.serverapi.ServerAPI;
import org.pocketcampus.shared.accounts.AuthToken;
import org.pocketcampus.shared.accounts.SessionId;
import org.pocketcampus.shared.accounts.Username;
import org.pocketcampus.shared.exceptions.ServerException;
import org.pocketcampus.shared.map.MapPersonData;
import org.pocketcampus.shared.map.PositionData;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
public class PositionUpdateService extends Service {
private Timer timer = new Timer();
private static final long UPDATE_INTERVAL = 60000;
private static final String TAG = "pocketCampusDaemon";
AndroidPositionManager posmgr = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
startTimer();
Log.d(TAG, "onCreate");
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
stopTimer();
}
private void startTimer() {
timer.scheduleAtFixedRate(new PositionUpdatingTask(this.getApplicationContext()), 0, UPDATE_INTERVAL);
}
private void stopTimer() {
if(timer != null) {
timer.cancel();
}
}
public class PositionUpdatingTask extends TimerTask {
private Context context;
public PositionUpdatingTask(Context context) {
this.context = context;
}
public void run() {
Log.d(TAG, "Update UserPosition");
updatePositionToServer();
}
private void updatePositionToServer() {
ServerAPI serverAPI_ = new ServerAPI();
SharedPreferences sharedPreferences_ = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
String username = sharedPreferences_.getString("preferences_keyUsername", "N/a");
String sessionId = sharedPreferences_.getString("preferences_keySessionId", "N/a");
AuthToken authToken = new AuthToken(new Username(username), new SessionId(sessionId));
try {
if(serverAPI_.authenticate(authToken)) {
Locator locator = Locator.getInstance(getApplicationContext());
MapPerson mp =locator.getUserMapElement();
if(mp != null) {
Position pos = mp.position();
double lat = pos.getLat();
double lon = pos.getLon();
int level = pos.getLevel();
MapPersonData mapPersonData = new MapPersonData(new PositionData(lat, lon, level), username.toString(), username.toString());
Log.d(TAG, "User: "+username.toString()+" has new Position: "+lat+" / "+lon+" / "+level);
serverAPI_.updateUserPosition(authToken, mapPersonData);
}
}
} catch(ServerException e) {
Log.d(TAG, "Cannot send Position to the Server. Details: "+e.getMessage());
}
// } catch(Exception e) {
// Log.d(TAG, "Unkown Exception at PositionUpdating. Details: "+e.getMessage()+e.toString());
// }
}
}
}
|