From 3baa5dd28c595c497a1669b3f25cda8c52139c87 Mon Sep 17 00:00:00 2001 From: Goblin911 Date: Wed, 28 Aug 2013 00:55:27 +0800 Subject: settings almost finished --- client/Piztor/src/com/macaroon/piztor/AppMgr.java | 25 ++- .../Piztor/src/com/macaroon/piztor/Infomation.java | 11 ++ client/Piztor/src/com/macaroon/piztor/InitAct.java | 2 +- client/Piztor/src/com/macaroon/piztor/Login.java | 7 +- client/Piztor/src/com/macaroon/piztor/Main.java | 192 ++++++++++++--------- client/Piztor/src/com/macaroon/piztor/MapInfo.java | 67 +++++++ .../Piztor/src/com/macaroon/piztor/PiztorAct.java | 2 + .../Piztor/src/com/macaroon/piztor/ReqLogout.java | 12 ++ .../Piztor/src/com/macaroon/piztor/ResLogout.java | 13 ++ .../Piztor/src/com/macaroon/piztor/Rlocation.java | 2 +- .../Piztor/src/com/macaroon/piztor/Settings.java | 124 ++++++++++++- .../src/com/macaroon/piztor/SocketClient.java | 21 ++- client/Piztor/src/com/macaroon/piztor/Transam.java | 5 +- .../Piztor/src/com/macaroon/piztor/UserInfo.java | 10 -- 14 files changed, 387 insertions(+), 106 deletions(-) create mode 100644 client/Piztor/src/com/macaroon/piztor/Infomation.java create mode 100644 client/Piztor/src/com/macaroon/piztor/MapInfo.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ReqLogout.java create mode 100644 client/Piztor/src/com/macaroon/piztor/ResLogout.java delete mode 100644 client/Piztor/src/com/macaroon/piztor/UserInfo.java (limited to 'client/Piztor/src/com') diff --git a/client/Piztor/src/com/macaroon/piztor/AppMgr.java b/client/Piztor/src/com/macaroon/piztor/AppMgr.java index 99171cc..0ba28e0 100644 --- a/client/Piztor/src/com/macaroon/piztor/AppMgr.java +++ b/client/Piztor/src/com/macaroon/piztor/AppMgr.java @@ -2,6 +2,7 @@ package com.macaroon.piztor; import java.util.HashMap; import java.util.HashSet; +import java.util.Stack; import android.annotation.SuppressLint; import android.content.Intent; @@ -17,7 +18,7 @@ public class AppMgr { static ActivityStatus status; static PiztorAct nowAct; // TODO fix - static Handler fromTransam, fromGPS; + static Handler handler, fromGPS; static Transam transam = null; static Tracker tracker = null; static Thread tTransam, tGPS; @@ -27,6 +28,9 @@ public class AppMgr { final static int errorToken = 103; final static int hasToken = 104; final static int toSettings = 105; + final static int logout = 106; + + static MapInfo mapInfo; static HashMap, HashMap>> mp; static HashSet acts; @@ -63,7 +67,12 @@ public class AppMgr { System.out.println("second"); i.setClass(nowAct, mp.get(nowAct.getClass()).get(event)); if (event == errorToken) - UserInfo.token = null; + Infomation.token = null; + if (event == toSettings) { + if (nowAct.actMgr.nowStatus.getClass() == Main.FetchStatus.class) + i.putExtra("status", true); + else i.putExtra("status", false); + } nowAct.startActivity(i); } @@ -95,19 +104,16 @@ public class AppMgr { static void init() { mp = new HashMap, HashMap>>(); - fromTransam = new Handler(); - transam = new Transam(UserInfo.ip, UserInfo.port, fromTransam); - fromGPS = new Handler(); - tracker = new Tracker(nowAct.getApplicationContext(), fromGPS); + handler = new Handler(); + transam = new Transam(Infomation.ip, Infomation.port, handler); tTransam = new Thread(transam); tTransam.start(); - tGPS = new Thread(tracker); - tGPS.start(); - System.out.println("!!!!!!"); + mapInfo = new MapInfo(); addStatus(InitAct.class); addStatus(Login.class); addStatus(Main.class); addStatus(Settings.class); + addTransition(Main.class, logout, Login.class); addTransition(InitAct.class, noToken, Login.class); addTransition(Login.class, loginSuccess, Main.class); addTransition(Main.class, errorToken, Login.class); @@ -115,6 +121,7 @@ public class AppMgr { addTransition(InitAct.class, hasToken, Main.class); addTransition(InitAct.class, errorToken, Login.class); addTransition(Main.class, toSettings, Settings.class); + addTransition(Settings.class, logout, Login.class); } } diff --git a/client/Piztor/src/com/macaroon/piztor/Infomation.java b/client/Piztor/src/com/macaroon/piztor/Infomation.java new file mode 100644 index 0000000..3cad2ba --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/Infomation.java @@ -0,0 +1,11 @@ +package com.macaroon.piztor; + +public class Infomation { +// static String ip = "69.85.86.42"; + static String ip = "192.168.1.101"; + static int port = 2222; + static String token = null; + static String username = null; + static int uid = -1; + static int gid = -1; +} diff --git a/client/Piztor/src/com/macaroon/piztor/InitAct.java b/client/Piztor/src/com/macaroon/piztor/InitAct.java index 4d2b656..8090f3b 100644 --- a/client/Piztor/src/com/macaroon/piztor/InitAct.java +++ b/client/Piztor/src/com/macaroon/piztor/InitAct.java @@ -17,7 +17,7 @@ public class InitAct extends PiztorAct { @Override protected void onStart() { super.onStart(); - if (UserInfo.token == null) + if (Infomation.token == null) AppMgr.trigger(AppMgr.noToken); else { //TODO jump to main diff --git a/client/Piztor/src/com/macaroon/piztor/Login.java b/client/Piztor/src/com/macaroon/piztor/Login.java index 3ad6cfb..ab523f8 100644 --- a/client/Piztor/src/com/macaroon/piztor/Login.java +++ b/client/Piztor/src/com/macaroon/piztor/Login.java @@ -13,7 +13,6 @@ import android.widget.Toast; public class Login extends PiztorAct { - ActMgr actMgr; Button btnLogin; EditText edtUser, edtPass; @@ -35,9 +34,9 @@ public class Login extends PiztorAct { actMgr.trigger(loginFailed); return; } - UserInfo.token = res.t; - UserInfo.id = res.uid; - UserInfo.username = edtUser.getText().toString(); + Infomation.token = res.t; + Infomation.uid = res.uid; + Infomation.username = edtUser.getText().toString(); System.out.println(res.s + " :!!! " + res.t); actMgr.trigger(AppMgr.loginSuccess); } else { diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java index 8b0918d..28a32ff 100644 --- a/client/Piztor/src/com/macaroon/piztor/Main.java +++ b/client/Piztor/src/com/macaroon/piztor/Main.java @@ -2,8 +2,9 @@ package com.macaroon.piztor; import java.util.Timer; import java.util.TimerTask; +import java.util.Vector; + import android.annotation.SuppressLint; -import android.location.Location; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -12,41 +13,35 @@ import android.view.Menu; import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.Toast; public class Main extends PiztorAct { final static int SearchButtonPress = 1; - final static int FetchButtonPress = 2; final static int FocuseButtonPress = 3; final static int SuccessFetch = 4; final static int FailedFetch = 5; - final static int TimerFlush = 6; - ActMgr actMgr; + final static int Fetch = 6; + final static int mapViewtouched = 7; ImageButton btnSearch, btnFetch, btnFocus, btnSettings; Timer autodate; - @SuppressLint("HandlerLeak") - Handler fromGPS = new Handler() { - @Override - public void handleMessage(Message m) { - if (m.what != 0) { - Location l = (Location) m.obj; - if (l == null) - System.out.println("fuck!!!"); - else { - ReqUpdate r = new ReqUpdate(UserInfo.token, - UserInfo.username, l.getLatitude(), - l.getLongitude(), System.currentTimeMillis(), 1000); - AppMgr.transam.send(r); - } - } - } - }; + MapInfo mapInfo; + /* + * @SuppressLint("HandlerLeak") Handler fromGPS = new Handler() { + * + * @Override public void handleMessage(Message m) { if (m.what != 0) { + * Location l = (Location) m.obj; if (l == null) + * System.out.println("fuck!!!"); else { ReqUpdate r = new + * ReqUpdate(Infomation.token, Infomation.username, l.getLatitude(), + * l.getLongitude(), System.currentTimeMillis(), 1000); + * AppMgr.transam.send(r); } } } }; + */ @SuppressLint("HandlerLeak") - Handler fromTransam = new Handler() { + Handler handler = new Handler() { @Override public void handleMessage(Message m) { switch (m.what) { - case 1: + case 1:// 上传自己信息成功or失败 ResUpdate update = (ResUpdate) m.obj; if (update.s == 0) System.out.println("update success"); @@ -55,31 +50,48 @@ public class Main extends PiztorAct { actMgr.trigger(AppMgr.errorToken); } break; - case 2: + case 2:// 得到别人的信息 ResLocation location = (ResLocation) m.obj; if (location.s == 0) { - for (int i = 0; i < location.n; i++) { - System.out.println(location.l.get(i).i + " : " - + location.l.get(i).lat + " " - + location.l.get(i).lot); + mapInfo.clear(); + for (Rlocation i : location.l) { + System.out.println(i.i + " : " + i.lat + " " + i.lot); + UserInfo info = new UserInfo(i.i); + info.setLocation(i.lat, i.lot); + mapInfo.addUserInfo(info); } actMgr.trigger(SuccessFetch); } else { - System.out - .println("resquest for location must be wrong!!!"); + System.out.println("resquest for location failed!"); actMgr.trigger(AppMgr.errorToken); } break; - case 3: + case 3:// 得到用户信息 ResUserinfo r = (ResUserinfo) m.obj; if (r.s == 0) { System.out.println("id : " + r.uid + " sex : " + r.sex + " group : " + r.gid); + if (r.uid == Infomation.uid) { + Infomation.gid = r.gid; + autodate.schedule(new AutoUpdate(), 0, 5000); + } else { + UserInfo user = mapInfo.getUserInfo(r.uid); + if (user != null) + user.setInfo(r.gid, r.sex); + else + System.out.println("fuck!!!!"); + } + flushMap(); } else { System.out.println("reqest for userInfo must be wrong!!!"); actMgr.trigger(AppMgr.errorToken); } break; + case 4:// 登出 + Toast toast = Toast.makeText(getApplicationContext(), + "logout failed", Toast.LENGTH_LONG); + toast.show(); + break; default: break; } @@ -90,16 +102,14 @@ public class Main extends PiztorAct { switch (t) { case SearchButtonPress: return "Search Button Press"; - case FetchButtonPress: - return "Fetch Button Press"; + case Fetch: + return "Fetch "; case FocuseButtonPress: return "Focuse Button Press"; case SuccessFetch: return "Success Fetch"; case FailedFetch: return "Failed Fetch"; - case TimerFlush: - return "TimerFlush"; default: return "Fuck!!!"; } @@ -116,15 +126,16 @@ public class Main extends PiztorAct { void enter(int e) { System.out.println("enter start status!!!!"); if (e == ActMgr.Create) { - AppMgr.transam.send(new ReqUserinfo(UserInfo.token, - UserInfo.username, UserInfo.id, System + System.out.println(Infomation.token + " " + + Infomation.username + " " + Infomation.uid); + AppMgr.transam.send(new ReqUserinfo(Infomation.token, + Infomation.username, Infomation.uid, System .currentTimeMillis(), 5000)); + // TODO flush mapinfo.myinfo } - if (e == TimerFlush) { - ReqLocation r = new ReqLocation(UserInfo.token, - UserInfo.username, 1, System.currentTimeMillis(), 1000); - AppMgr.transam.send(r); + if (e == Fetch) { + requesLocation(Infomation.gid); } if (e == SuccessFetch) flushMap(); @@ -142,10 +153,11 @@ public class Main extends PiztorAct { @Override void enter(int e) { System.out.println("enter Fetch status!!!!"); - if (e == FetchButtonPress) { - ReqLocation r = new ReqLocation(UserInfo.token, - UserInfo.username, 1, System.currentTimeMillis(), 1000); - AppMgr.transam.send(r); + if (e == Fetch) { + requesLocation(Infomation.gid); + } + if (e == SuccessFetch) { + flushMap(); } } @@ -160,51 +172,72 @@ public class Main extends PiztorAct { @Override void enter(int e) { + // TODO + switch (e) { + case Fetch: + requesLocation(Infomation.gid); + break; + case FocuseButtonPress: + // TODO setFocus + break; + case SuccessFetch: + requesLocation(Infomation.gid); + break; + default: + break; + } System.out.println("enter focus status!!!!"); - } @Override void leave(int e) { + // TODO leave focus System.out.println("leave focus status!!!! because" + cause(e)); - } } - class AutoUpdate extends TimerTask { + void requesLocation(int gid) { + ReqLocation r = new ReqLocation(Infomation.token, Infomation.username, + gid, System.currentTimeMillis(), 2000); + System.out.println("get others infomation!!!"); + AppMgr.transam.send(r); + } + class AutoUpdate extends TimerTask { @Override public void run() { - actMgr.trigger(Main.TimerFlush); + actMgr.trigger(Main.Fetch); } - } @Override protected void onCreate(Bundle savedInstanceState) { id = "Main"; super.onCreate(savedInstanceState); - AppMgr.tracker.setHandler(fromGPS); + mapInfo = AppMgr.mapInfo; ActStatus[] r = new ActStatus[3]; - r[0] = new StartStatus(); - r[1] = new FetchStatus(); - r[2] = new FocusStatus(); - actMgr = new ActMgr(this, r[0], r); - actMgr.add(r[0], FocuseButtonPress, r[2]); - actMgr.add(r[0], FetchButtonPress, r[1]); - actMgr.add(r[0], SuccessFetch, r[0]); - actMgr.add(r[1], FetchButtonPress, r[0]); - actMgr.add(r[1], FailedFetch, r[0]); - actMgr.add(r[1], SuccessFetch, r[0]); - actMgr.add(r[2], FocuseButtonPress, r[0]); - actMgr.add(r[0], TimerFlush, r[0]); - actMgr.add(r[2], TimerFlush, r[2]); + ActStatus startStatus = r[0] = new StartStatus(); + ActStatus fetchStatus = r[1] = new FetchStatus(); + ActStatus focusStatus = r[2] = new FocusStatus(); + AppMgr.transam.setHandler(handler); + actMgr = new ActMgr(this, startStatus, r); + actMgr.add(startStatus, FocuseButtonPress, focusStatus); + actMgr.add(startStatus, Fetch, fetchStatus); + actMgr.add(startStatus, SuccessFetch, startStatus); + actMgr.add(startStatus, Fetch, startStatus); + actMgr.add(fetchStatus, Fetch, startStatus); + actMgr.add(fetchStatus, FailedFetch, startStatus); + actMgr.add(fetchStatus, SuccessFetch, startStatus); + actMgr.add(focusStatus, FocuseButtonPress, startStatus); + actMgr.add(focusStatus, mapViewtouched, startStatus); + actMgr.add(focusStatus, SuccessFetch, focusStatus); + actMgr.add(focusStatus, Fetch, focusStatus); autodate = new Timer(); - AppMgr.transam.setHandler(fromTransam); + flushMap(); + // ImageView view = (ImageView) findViewById(R.id.main_mapview); + // view.setOnTouchListener(new MultiTouchListener()); setContentView(R.layout.activity_main); - ImageView view = (ImageView) findViewById(R.id.main_mapview); - view.setOnTouchListener(new MultiTouchListener()); } @Override @@ -215,16 +248,15 @@ public class Main extends PiztorAct { btnSearch = (ImageButton) findViewById(R.id.footbar_btn_search); btnSettings = (ImageButton) findViewById(R.id.footbar_btn_settings); btnFetch.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View arg0) { - // actMgr.trigger(FetchButtonPress); + actMgr.trigger(Fetch); } }); btnFocus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - // actMgr.trigger(FocuseButtonPress); + actMgr.trigger(FocuseButtonPress); } }); btnSettings.setOnClickListener(new View.OnClickListener() { @@ -233,16 +265,22 @@ public class Main extends PiztorAct { actMgr.trigger(AppMgr.toSettings); } }); - //autodate.schedule(new AutoUpdate(), 0, 5000); + } - + + @Override + public void onStop() { + super.onStart(); + autodate.cancel(); + } + @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) { - AppMgr.exit(); - return true; - } - return super.onKeyDown(keyCode, event); + if (keyCode == KeyEvent.KEYCODE_BACK) { + AppMgr.exit(); + return true; + } + return super.onKeyDown(keyCode, event); } @Override diff --git a/client/Piztor/src/com/macaroon/piztor/MapInfo.java b/client/Piztor/src/com/macaroon/piztor/MapInfo.java new file mode 100644 index 0000000..37e3002 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/MapInfo.java @@ -0,0 +1,67 @@ +package com.macaroon.piztor; + +import java.util.HashMap; +import java.util.Vector; + +import android.annotation.SuppressLint; +import android.graphics.drawable.Drawable; + +import com.baidu.platform.comapi.basestruct.GeoPoint; + +public class MapInfo { + HashMap mp; + Vector allUsers; + UserInfo myInfo; + Style layout; + + @SuppressLint("UseSparseArrays") + MapInfo() { + mp = new HashMap(); + allUsers = new Vector(); + } + + void clear() { + mp.clear(); + allUsers.clear(); + } + + void addUserInfo(UserInfo userInfo) { + allUsers.add(userInfo); + mp.put(userInfo.uid, userInfo); + } + + void setStyle(Style layout) { + this.layout = layout; + } + + UserInfo getUserInfo(int uid) { + if (mp.containsKey(uid)) + return mp.get(uid); + else + return null; + } + +} + +class UserInfo { + int uid, gid, sex; + GeoPoint p; + + UserInfo(int uid) { + this.uid = uid; + } + + void setLocation(double lat, double lot) { + p = new GeoPoint((int) (lat * 10e6), (int) (lot * 10e6)); + } + + void setInfo(int gid, int sex) { + this.gid = gid; + this.sex = sex; + } + +} + +interface Style { + Drawable getDrawable(UserInfo user); +} \ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/PiztorAct.java b/client/Piztor/src/com/macaroon/piztor/PiztorAct.java index 1093fb9..abfab12 100644 --- a/client/Piztor/src/com/macaroon/piztor/PiztorAct.java +++ b/client/Piztor/src/com/macaroon/piztor/PiztorAct.java @@ -5,6 +5,8 @@ import android.os.Bundle; public class PiztorAct extends Activity { String id; + ActMgr actMgr; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/client/Piztor/src/com/macaroon/piztor/ReqLogout.java b/client/Piztor/src/com/macaroon/piztor/ReqLogout.java new file mode 100644 index 0000000..22bddfa --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ReqLogout.java @@ -0,0 +1,12 @@ +package com.macaroon.piztor; + +//--------------------------------------// +// Log out // +//--------------------------------------// + +public class ReqLogout extends Req{ + + ReqLogout(String token,String name,long time,long alive){ + super(4,token,name,time,alive); //for type 4 + } +} \ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/ResLogout.java b/client/Piztor/src/com/macaroon/piztor/ResLogout.java new file mode 100644 index 0000000..4b2a8d1 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/ResLogout.java @@ -0,0 +1,13 @@ +package com.macaroon.piztor; + + +//--------------------------------------// +// Respond to logout // +//--------------------------------------// + +public class ResLogout extends Res{ + + ResLogout(int status){ + super(4,status); //for type 4 + } +} \ No newline at end of file diff --git a/client/Piztor/src/com/macaroon/piztor/Rlocation.java b/client/Piztor/src/com/macaroon/piztor/Rlocation.java index 6ac9154..8f7d42b 100644 --- a/client/Piztor/src/com/macaroon/piztor/Rlocation.java +++ b/client/Piztor/src/com/macaroon/piztor/Rlocation.java @@ -10,4 +10,4 @@ class Rlocation{ lat = latitude; lot = longitude; } -} \ No newline at end of file +} diff --git a/client/Piztor/src/com/macaroon/piztor/Settings.java b/client/Piztor/src/com/macaroon/piztor/Settings.java index 94c6a94..457d916 100644 --- a/client/Piztor/src/com/macaroon/piztor/Settings.java +++ b/client/Piztor/src/com/macaroon/piztor/Settings.java @@ -1,17 +1,139 @@ package com.macaroon.piztor; +import android.annotation.SuppressLint; import android.os.Bundle; -import android.app.Activity; +import android.os.Handler; +import android.os.Message; import android.view.Menu; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; public class Settings extends PiztorAct { + Button logout; + MapInfo mapInfo; + + // Event + final static int logoutButtonPressed = 1; + final static int logoutFailed = 2; + @SuppressLint("HandlerLeak") + Handler handler = new Handler() { + @Override + public void handleMessage(Message m) { + System.out.println("!!!!!!!!!!!!!!!!!!!!!settings" + m.what); + switch (m.what) { + case 1:// 上传自己信息成功or失败 + ResUpdate update = (ResUpdate) m.obj; + if (update.s == 0) + System.out.println("update success"); + else { + System.out.println("update failed"); + actMgr.trigger(AppMgr.errorToken); + } + break; + case 2:// 得到别人的信息 + ResLocation location = (ResLocation) m.obj; + if (location.s == 0) { + mapInfo.clear(); + for (Rlocation i : location.l) { + System.out.println(i.i + " : " + i.lat + " " + i.lot); + UserInfo info = new UserInfo(i.i); + info.setLocation(i.lat, i.lot); + mapInfo.addUserInfo(info); + } + } else { + System.out.println("resquest for location failed!"); + actMgr.trigger(AppMgr.errorToken); + } + break; + case 3:// 得到用户信息 + ResUserinfo r = (ResUserinfo) m.obj; + if (r.s == 0) { + System.out.println("id : " + r.uid + " sex : " + r.sex + + " group : " + r.gid); + UserInfo user = mapInfo.getUserInfo(r.uid); + user.setInfo(r.gid, r.sex); + } else { + System.out.println("reqest for userInfo must be wrong!!!"); + actMgr.trigger(AppMgr.errorToken); + } + break; + case 4:// 登出 + ResLogout logout = (ResLogout) m.obj; + System.out.println("logout status" + logout.s); + if (logout.s == 0) { + Infomation.token = null; + Infomation.gid = -1; + Infomation.uid = -1; + Infomation.username = null; + actMgr.trigger(AppMgr.logout); + break; + } else { + Toast toast = Toast.makeText(getApplicationContext(), + "logout failed", Toast.LENGTH_LONG); + toast.show(); + actMgr.trigger(logoutFailed); + } + break; + default: + break; + } + } + }; + + class StartStatus extends ActStatus { + + @Override + void enter(int e) { + } + + @Override + void leave(int e) { + } + } + + class LogoutStatus extends ActStatus { + + @Override + void enter(int e) { + AppMgr.transam.send(new ReqLogout(Infomation.token, + Infomation.username, System.currentTimeMillis(), 2000)); + } + + @Override + void leave(int e) { + // TODO Auto-generated method stub + + } + + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ActStatus[] r = new ActStatus[3]; + ActStatus start = r[0] = new StartStatus(); + ActStatus logout = r[2] = new LogoutStatus(); + actMgr = new ActMgr(this, start, r); + actMgr.add(start, logoutButtonPressed, logout); + actMgr.add(logout, logoutFailed, start); + AppMgr.transam.setHandler(handler); + mapInfo = AppMgr.mapInfo; setContentView(R.layout.activity_settings); } + @Override + protected void onStart() { + super.onStart(); + logout = (Button) findViewById(R.id.settings_btn_logout); + logout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + actMgr.trigger(logoutButtonPressed); + } + }); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. diff --git a/client/Piztor/src/com/macaroon/piztor/SocketClient.java b/client/Piztor/src/com/macaroon/piztor/SocketClient.java index fe926d9..ed75e52 100644 --- a/client/Piztor/src/com/macaroon/piztor/SocketClient.java +++ b/client/Piztor/src/com/macaroon/piztor/SocketClient.java @@ -7,7 +7,6 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; import java.net.UnknownHostException; -import java.util.Locale; import java.util.Vector; import android.annotation.SuppressLint; @@ -100,6 +99,18 @@ public class SocketClient { out.writeByte(0); out.writeInt(usid); break; + case 4: + ReqLogout rlo = (ReqLogout) req; + String tk4 = rlo.token; + String name4 = rlo.uname; + len = IntLength+ByteLength+TokenLength+name4.length()+ByteLength; + out.writeInt(len); + out.writeByte(tmp); + byte[] b4 = hexStringToBytes(tk4); + out.write(b4); + out.writeBytes(name4); + out.writeByte(0); + break; } out.flush(); DataInputStream in = new DataInputStream(client.getInputStream()); @@ -175,11 +186,17 @@ public class SocketClient { msg.what = 3; recall.sendMessage(msg); break; + case 4: + int status4 = in.readUnsignedByte(); + ResLogout rlogout = new ResLogout(status4); + msg.obj = rlogout; + msg.what = 4; + recall.sendMessage(msg); + break; } return 0; } catch (SocketTimeoutException e){ - System.out.println("Time out!"); return 1; } catch (IOException e) { throw e; diff --git a/client/Piztor/src/com/macaroon/piztor/Transam.java b/client/Piztor/src/com/macaroon/piztor/Transam.java index e946387..f77df39 100644 --- a/client/Piztor/src/com/macaroon/piztor/Transam.java +++ b/client/Piztor/src/com/macaroon/piztor/Transam.java @@ -10,7 +10,7 @@ import android.annotation.SuppressLint; import android.os.Handler; import android.os.Message; -// Piztor Transmission Protocol v0.4 // +// Piztor Transmission Protocol v0.4a // //------------------------------------------------// // // @@ -19,6 +19,7 @@ import android.os.Message; // 1 for updateLocation // // 2 for locationRequest // // 3 for userinfo // +// 4 for logout // // // // ----------I'm the division line-------- // // // @@ -31,6 +32,7 @@ import android.os.Message; //update -- token & username & latitude & longitude// // getlocation -- token & username & groupid // // getuserinfo -- token & userinfo & userid // +// logout -- token & username // // // // ----------I'm the division line-------- // // // @@ -41,6 +43,7 @@ import android.os.Message; // entry -- userid & latitude & longitude // // // // getuserinfo -- status & uid & gid & gender // +// logout -- status // // // // status -- 0 for success // // 1 for failed/invalid // diff --git a/client/Piztor/src/com/macaroon/piztor/UserInfo.java b/client/Piztor/src/com/macaroon/piztor/UserInfo.java deleted file mode 100644 index d404c7e..0000000 --- a/client/Piztor/src/com/macaroon/piztor/UserInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.macaroon.piztor; - -public class UserInfo { -// static String ip = "69.85.86.42"; - static String ip = "192.168.1.101"; - static int port = 2222; - static String token = null; - static String username = null; - static int id = -1; -} -- cgit v1.2.3-70-g09d2 From 0a8315a94d8ed1252f3f96d4ca41ddc632c3bc98 Mon Sep 17 00:00:00 2001 From: Goblin911 Date: Wed, 28 Aug 2013 02:38:11 +0800 Subject: now can run!!! --- client/Piztor/AndroidManifest.xml | 54 ++++++- client/Piztor/res/drawable/marka.png | Bin 0 -> 3371 bytes client/Piztor/res/layout/activity_main.xml | 61 ++++---- client/Piztor/res/values/strings.xml | 1 + client/Piztor/src/com/macaroon/piztor/AppMgr.java | 30 +++- .../Piztor/src/com/macaroon/piztor/Infomation.java | 7 +- client/Piztor/src/com/macaroon/piztor/InitAct.java | 2 +- client/Piztor/src/com/macaroon/piztor/Login.java | 2 +- client/Piztor/src/com/macaroon/piztor/Main.java | 119 +++++++++++++-- client/Piztor/src/com/macaroon/piztor/MapInfo.java | 28 +++- .../Piztor/src/com/macaroon/piztor/MapMaker.java | 165 +++++++++++++++++++++ .../Piztor/src/com/macaroon/piztor/Settings.java | 4 +- 12 files changed, 410 insertions(+), 63 deletions(-) create mode 100644 client/Piztor/res/drawable/marka.png create mode 100644 client/Piztor/src/com/macaroon/piztor/MapMaker.java (limited to 'client/Piztor/src/com') diff --git a/client/Piztor/AndroidManifest.xml b/client/Piztor/AndroidManifest.xml index ef91844..ece39f1 100644 --- a/client/Piztor/AndroidManifest.xml +++ b/client/Piztor/AndroidManifest.xml @@ -8,6 +8,37 @@ android:minSdkVersion="8" android:targetSdkVersion="17" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -28,15 +58,27 @@ + android:label="@string/title_activity_main" + android:screenOrientation="sensor" + android:configChanges="orientation"> + android:label="@string/title_activity_settings" + android:screenOrientation="sensor" + android:configChanges="orientation"> + + - - - + + diff --git a/client/Piztor/res/drawable/marka.png b/client/Piztor/res/drawable/marka.png new file mode 100644 index 0000000..a478d36 Binary files /dev/null and b/client/Piztor/res/drawable/marka.png differ diff --git a/client/Piztor/res/layout/activity_main.xml b/client/Piztor/res/layout/activity_main.xml index a36f8b5..f72ac62 100644 --- a/client/Piztor/res/layout/activity_main.xml +++ b/client/Piztor/res/layout/activity_main.xml @@ -1,33 +1,34 @@ - - - - - - - + xmlns:android1="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/white" > - - \ No newline at end of file + + + + + + + + + + + + + diff --git a/client/Piztor/res/values/strings.xml b/client/Piztor/res/values/strings.xml index 4268ca1..5500982 100644 --- a/client/Piztor/res/values/strings.xml +++ b/client/Piztor/res/values/strings.xml @@ -17,5 +17,6 @@ Login Main Settings + MapMaker diff --git a/client/Piztor/src/com/macaroon/piztor/AppMgr.java b/client/Piztor/src/com/macaroon/piztor/AppMgr.java index 0ba28e0..8e82384 100644 --- a/client/Piztor/src/com/macaroon/piztor/AppMgr.java +++ b/client/Piztor/src/com/macaroon/piztor/AppMgr.java @@ -2,14 +2,24 @@ package com.macaroon.piztor; import java.util.HashMap; import java.util.HashSet; -import java.util.Stack; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; import android.os.Handler; +import android.util.Log; + +import com.baidu.mapapi.BMapManager; +import com.baidu.mapapi.MKGeneralListener; @SuppressLint("UseSparseArrays") public class AppMgr { + + private static final String strKey = "5ba8abf7b4694ad49706b8b7538c9d6a"; + static BMapManager mBMapManager = null; + static Context context; + + // Status public enum ActivityStatus { create, start, resume, restart, stop, pause, destroy @@ -102,13 +112,29 @@ public class AppMgr { mp.put(a, new HashMap>()); } - static void init() { + static void init(Context context) { + if (mBMapManager == null) { + mBMapManager = new BMapManager(context); + mBMapManager.init(strKey, new MKGeneralListener(){ + @Override + public void onGetNetworkState(int iError) { + Log.d("Network","failure"); + } + + @Override + public void onGetPermissionState(int iError) { + Log.d("Permission","wrong key"); + } + }); + } + AppMgr.context = context; mp = new HashMap, HashMap>>(); handler = new Handler(); transam = new Transam(Infomation.ip, Infomation.port, handler); tTransam = new Thread(transam); tTransam.start(); mapInfo = new MapInfo(); + Infomation.myInfo = new UserInfo(-1); addStatus(InitAct.class); addStatus(Login.class); addStatus(Main.class); diff --git a/client/Piztor/src/com/macaroon/piztor/Infomation.java b/client/Piztor/src/com/macaroon/piztor/Infomation.java index 3cad2ba..cd0b49e 100644 --- a/client/Piztor/src/com/macaroon/piztor/Infomation.java +++ b/client/Piztor/src/com/macaroon/piztor/Infomation.java @@ -1,11 +1,10 @@ package com.macaroon.piztor; public class Infomation { -// static String ip = "69.85.86.42"; - static String ip = "192.168.1.101"; + static String ip = "69.85.86.42"; +// static String ip = "192.168.1.101"; static int port = 2222; static String token = null; static String username = null; - static int uid = -1; - static int gid = -1; + static UserInfo myInfo; } diff --git a/client/Piztor/src/com/macaroon/piztor/InitAct.java b/client/Piztor/src/com/macaroon/piztor/InitAct.java index 8090f3b..8a7ad7a 100644 --- a/client/Piztor/src/com/macaroon/piztor/InitAct.java +++ b/client/Piztor/src/com/macaroon/piztor/InitAct.java @@ -9,7 +9,7 @@ public class InitAct extends PiztorAct { protected void onCreate(Bundle savedInstanceState) { id = "initAct"; super.onCreate(savedInstanceState); - AppMgr.init(); + AppMgr.init(getApplicationContext()); AppMgr.transam.setTimeOutTime(5000); setContentView(R.layout.activity_init); } diff --git a/client/Piztor/src/com/macaroon/piztor/Login.java b/client/Piztor/src/com/macaroon/piztor/Login.java index ab523f8..b55cd2e 100644 --- a/client/Piztor/src/com/macaroon/piztor/Login.java +++ b/client/Piztor/src/com/macaroon/piztor/Login.java @@ -35,7 +35,7 @@ public class Login extends PiztorAct { return; } Infomation.token = res.t; - Infomation.uid = res.uid; + Infomation.myInfo.uid = res.uid; Infomation.username = edtUser.getText().toString(); System.out.println(res.s + " :!!! " + res.t); actMgr.trigger(AppMgr.loginSuccess); diff --git a/client/Piztor/src/com/macaroon/piztor/Main.java b/client/Piztor/src/com/macaroon/piztor/Main.java index 28a32ff..2820090 100644 --- a/client/Piztor/src/com/macaroon/piztor/Main.java +++ b/client/Piztor/src/com/macaroon/piztor/Main.java @@ -2,19 +2,25 @@ package com.macaroon.piztor; import java.util.Timer; import java.util.TimerTask; -import java.util.Vector; import android.annotation.SuppressLint; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.widget.ImageButton; -import android.widget.ImageView; import android.widget.Toast; +import com.baidu.location.BDLocation; +import com.baidu.location.BDLocationListener; +import com.baidu.location.LocationClient; +import com.baidu.location.LocationClientOption; +import com.baidu.mapapi.map.LocationData; +import com.baidu.mapapi.map.MapView; + public class Main extends PiztorAct { final static int SearchButtonPress = 1; final static int FocuseButtonPress = 3; @@ -22,6 +28,17 @@ public class Main extends PiztorAct { final static int FailedFetch = 5; final static int Fetch = 6; final static int mapViewtouched = 7; + + MapMaker mapMaker = null; + MapView mMapView; + + /** + * Locating component + */ + LocationClient mLocClient; + LocationData locData = null; + public MyLocationListener myListener = new MyLocationListener(); + ImageButton btnSearch, btnFetch, btnFocus, btnSettings; Timer autodate; MapInfo mapInfo; @@ -71,9 +88,13 @@ public class Main extends PiztorAct { if (r.s == 0) { System.out.println("id : " + r.uid + " sex : " + r.sex + " group : " + r.gid); - if (r.uid == Infomation.uid) { - Infomation.gid = r.gid; - autodate.schedule(new AutoUpdate(), 0, 5000); + if (r.uid == Infomation.myInfo.uid) { + Infomation.myInfo.gid = r.gid; + try { + autodate.schedule(new AutoUpdate(), 0, 5000); + } catch (Exception e) { + e.printStackTrace(); + } } else { UserInfo user = mapInfo.getUserInfo(r.uid); if (user != null) @@ -120,6 +141,31 @@ public class Main extends PiztorAct { } + public class MyLocationListener implements BDLocationListener { + @Override + public void onReceiveLocation(BDLocation location) { + Log.d("GPS", "Gotten"); + if (location == null) { + return; + } + + locData.latitude = location.getLatitude(); + locData.longitude = location.getLongitude(); + locData.accuracy = location.getRadius(); + locData.direction = location.getDerect(); + + mapMaker.UpdateLocationOverlay(locData, false); + + } + + @Override + public void onReceivePoi(BDLocation poiLocation) { + if (poiLocation == null) { + return; + } + } + } + class StartStatus extends ActStatus { @Override @@ -127,15 +173,15 @@ public class Main extends PiztorAct { System.out.println("enter start status!!!!"); if (e == ActMgr.Create) { System.out.println(Infomation.token + " " - + Infomation.username + " " + Infomation.uid); + + Infomation.username + " " + Infomation.myInfo.uid); AppMgr.transam.send(new ReqUserinfo(Infomation.token, - Infomation.username, Infomation.uid, System + Infomation.username, Infomation.myInfo.uid, System .currentTimeMillis(), 5000)); // TODO flush mapinfo.myinfo } if (e == Fetch) { - requesLocation(Infomation.gid); + requesLocation(Infomation.myInfo.gid); } if (e == SuccessFetch) flushMap(); @@ -154,7 +200,7 @@ public class Main extends PiztorAct { void enter(int e) { System.out.println("enter Fetch status!!!!"); if (e == Fetch) { - requesLocation(Infomation.gid); + requesLocation(Infomation.myInfo.gid); } if (e == SuccessFetch) { flushMap(); @@ -175,13 +221,13 @@ public class Main extends PiztorAct { // TODO switch (e) { case Fetch: - requesLocation(Infomation.gid); + requesLocation(Infomation.myInfo.gid); break; case FocuseButtonPress: // TODO setFocus break; case SuccessFetch: - requesLocation(Infomation.gid); + requesLocation(Infomation.myInfo.gid); break; default: break; @@ -238,6 +284,19 @@ public class Main extends PiztorAct { // ImageView view = (ImageView) findViewById(R.id.main_mapview); // view.setOnTouchListener(new MultiTouchListener()); setContentView(R.layout.activity_main); + mMapView = (MapView) findViewById(R.id.bmapView); + mapMaker = new MapMaker(mMapView, getApplicationContext()); + mapMaker.InitMap(); + mLocClient = new LocationClient(this); + locData = new LocationData(); + mLocClient.registerLocationListener(myListener); + LocationClientOption option = new LocationClientOption(); + option.setOpenGps(true); + option.setCoorType("bd09ll"); + option.setScanSpan(5000); + mLocClient.setLocOption(option); + mLocClient.start(); + mapMaker.UpdateLocationOverlay(locData, false); } @Override @@ -265,15 +324,36 @@ public class Main extends PiztorAct { actMgr.trigger(AppMgr.toSettings); } }); - + + } + + @Override + protected void onResume() { + mapMaker.onResume(); + super.onResume(); + } + + @Override + protected void onPause() { + mapMaker.onPause(); + super.onPause(); } @Override public void onStop() { - super.onStart(); + super.onStop(); autodate.cancel(); } + @Override + protected void onDestroy() { + if (mLocClient != null) { + mLocClient.stop(); + } + mapMaker.onDestroy(); + super.onDestroy(); + } + @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { @@ -290,4 +370,17 @@ public class Main extends PiztorAct { return false; } + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mMapView.onSaveInstanceState(outState); + + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + super.onRestoreInstanceState(savedInstanceState); + mMapView.onRestoreInstanceState(savedInstanceState); + } + } diff --git a/client/Piztor/src/com/macaroon/piztor/MapInfo.java b/client/Piztor/src/com/macaroon/piztor/MapInfo.java index 37e3002..f5840c7 100644 --- a/client/Piztor/src/com/macaroon/piztor/MapInfo.java +++ b/client/Piztor/src/com/macaroon/piztor/MapInfo.java @@ -3,10 +3,12 @@ package com.macaroon.piztor; import java.util.HashMap; import java.util.Vector; +import com.baidu.platform.comapi.basestruct.GeoPoint; + import android.annotation.SuppressLint; import android.graphics.drawable.Drawable; +import android.location.Location; -import com.baidu.platform.comapi.basestruct.GeoPoint; public class MapInfo { HashMap mp; @@ -41,27 +43,45 @@ public class MapInfo { return null; } + public Vector getVector() { + return allUsers; + } + + public UserInfo getMyInfo() { + return myInfo; + } } class UserInfo { int uid, gid, sex; - GeoPoint p; + GeoPoint location; UserInfo(int uid) { this.uid = uid; } void setLocation(double lat, double lot) { - p = new GeoPoint((int) (lat * 10e6), (int) (lot * 10e6)); + location = new GeoPoint((int)(lat * 1e6), (int)(lot * 1e6)); } void setInfo(int gid, int sex) { this.gid = gid; this.sex = sex; } + + public GeoPoint getLocation(){ + return location; + } + + public double getLatitude() { + return location.getLatitudeE6() / 1e6; + } + public double getLongitude() { + return location.getLongitudeE6() / 1e6; + } } interface Style { Drawable getDrawable(UserInfo user); -} \ No newline at end of file +} diff --git a/client/Piztor/src/com/macaroon/piztor/MapMaker.java b/client/Piztor/src/com/macaroon/piztor/MapMaker.java new file mode 100644 index 0000000..bdc3554 --- /dev/null +++ b/client/Piztor/src/com/macaroon/piztor/MapMaker.java @@ -0,0 +1,165 @@ +package com.macaroon.piztor; + +import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; +import java.util.Vector; +import android.util.Log; +import android.util.AttributeSet; +import android.annotation.SuppressLint; +import android.location.Location; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.drawable.Drawable; +import android.widget.FrameLayout; +import android.widget.Toast; +import android.view.View.OnClickListener; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import com.baidu.location.BDLocation; +import com.baidu.location.BDLocationListener; +import com.baidu.location.LocationClient; +import com.baidu.location.LocationClientOption; + +import com.baidu.mapapi.map.LocationData; +import com.baidu.mapapi.BMapManager; +import com.baidu.mapapi.MKGeneralListener; +import com.baidu.mapapi.map.ItemizedOverlay; +import com.baidu.mapapi.map.MKMapViewListener; +import com.baidu.mapapi.map.MapController; +import com.baidu.mapapi.map.MapPoi; +import com.baidu.mapapi.map.MapView; +import com.baidu.mapapi.map.MyLocationOverlay; +import com.baidu.mapapi.map.OverlayItem; +import com.baidu.mapapi.map.PopupOverlay; +import com.baidu.platform.comapi.basestruct.GeoPoint; + +public class MapMaker extends Activity{ + + private MapView mMapView = null; + private MapController mMapController = null; + private static GeoPoint sjtuCenter = new GeoPoint((int)(31.032247 * 1E6), (int)(121.445937 * 1E6)); + private MyOverlay mOverlay = null; + private MapView.LayoutParams layoutParam = null; + private OverlayItem curItem = null; + private ArrayList mItems = null; + private LocationOverlay mLocationOverlay; + private Context context; + + public MapMaker(MapView mapView, Context c) { + mMapView = mapView; + mMapController = mMapView.getController(); + mMapController.setCenter(sjtuCenter); + mMapController.setZoom(17); + mMapController.setRotation(-22); + mMapController.enableClick(true); + context = c; + mLocationOverlay = null; + mOverlay = null; + } + + public class LocationOverlay extends MyLocationOverlay { + public LocationOverlay(MapView mapView) { + super(mapView); + } + } + + public class MyOverlay extends ItemizedOverlay { + public MyOverlay(Drawable defaultMarker, MapView mapView) { + super(defaultMarker, mapView); + } + } + + public void UpdateLocationOverlay(LocationData locationData, boolean hasAnimation) { + /** + * Update only location overlay + */ + mLocationOverlay.setData(locationData); + mMapView.refresh(); + if (hasAnimation) { + mMapController.animateTo(new GeoPoint((int)(locationData.latitude * 1E6), (int)(locationData.longitude * 1E6))); + } + } + + public void InitMap() { + Log.d("GPS", "init"); + mLocationOverlay = new LocationOverlay(mMapView); + //mLocationOverlay.setMarker(context.getResources().getDrawable(R.drawable.marker1)); + LocationData locationData = new LocationData(); + mLocationOverlay.setData(locationData); + mMapView.getOverlays().add(mLocationOverlay); + mLocationOverlay.enableCompass(); + mMapView.refresh(); + } + + public void UpdateMap(MapInfo mapInfo) { + /** + * Update Location Overlay + */ + GeoPoint location = mapInfo.getMyInfo().getLocation(); + LocationData locationData = new LocationData(); + locationData.latitude = location.getLatitudeE6() / 1e6; + locationData.longitude = location.getLongitudeE6() / 1e6; + mLocationOverlay.setData(locationData); + mMapView.refresh(); + + /** + * Update location of others + */ + mOverlay.removeAll(); + //mMapView.refresh(); + GeoPoint p; + Vector allUsers = mapInfo.getVector(); + + for(int i = 0; i < allUsers.size(); i++) { + p = new GeoPoint((int)(allUsers.get(i).getLatitude() * 1E6) + ,(int)(allUsers.get(i).getLongitude() * 1E6)); + curItem = new OverlayItem(p, "^_^", ""); + curItem.setMarker(context.getResources().getDrawable(R.drawable.marka)); + mOverlay.addItem(curItem); + } + mItems = new ArrayList(); + mItems.addAll(mOverlay.getAllItem()); + mMapView.getOverlays().add(mOverlay); + mMapView.refresh(); + } + + + public void clearOverlay(View view) { + mOverlay.removeAll(); + mMapView.refresh(); + } + + public void resetOverlay(View view) { + clearOverlay(null); + mOverlay.addItem(mItems); + mMapView.refresh(); + } + + @Override + protected void onPause() { + mMapView.onPause(); + } + + @Override + protected void onResume() { + mMapView.onResume(); + } + + @Override + protected void onDestroy() { + mMapView.destroy(); + } +} + diff --git a/client/Piztor/src/com/macaroon/piztor/Settings.java b/client/Piztor/src/com/macaroon/piztor/Settings.java index 457d916..8ad44b5 100644 --- a/client/Piztor/src/com/macaroon/piztor/Settings.java +++ b/client/Piztor/src/com/macaroon/piztor/Settings.java @@ -63,8 +63,8 @@ public class Settings extends PiztorAct { System.out.println("logout status" + logout.s); if (logout.s == 0) { Infomation.token = null; - Infomation.gid = -1; - Infomation.uid = -1; + Infomation.myInfo.gid = -1; + Infomation.myInfo.uid = -1; Infomation.username = null; actMgr.trigger(AppMgr.logout); break; -- cgit v1.2.3-70-g09d2