1package de.gultsch.chat.services;
2
3import java.io.BufferedInputStream;
4import java.io.BufferedReader;
5import java.io.IOException;
6import java.io.InputStream;
7import java.io.OutputStream;
8import java.net.Socket;
9import java.net.UnknownHostException;
10import java.util.List;
11
12import org.xmlpull.v1.XmlPullParser;
13import org.xmlpull.v1.XmlPullParserException;
14
15import de.gultsch.chat.entities.Account;
16import de.gultsch.chat.entities.Contact;
17import de.gultsch.chat.entities.Conversation;
18import de.gultsch.chat.entities.Message;
19import de.gultsch.chat.persistance.DatabaseBackend;
20import de.gultsch.chat.xml.Tag;
21import de.gultsch.chat.xml.XmlReader;
22import de.gultsch.chat.xmpp.XmppConnection;
23import android.app.Service;
24import android.content.Context;
25import android.content.Intent;
26import android.os.Binder;
27import android.os.IBinder;
28import android.os.PowerManager;
29import android.util.Log;
30
31public class XmppConnectionService extends Service {
32
33 protected static final String LOGTAG = "xmppService";
34 protected DatabaseBackend databaseBackend;
35
36 public long startDate;
37
38 private List<Account> accounts;
39
40 public boolean connectionRunnig = false;
41
42 private final IBinder mBinder = new XmppConnectionBinder();
43
44 public class XmppConnectionBinder extends Binder {
45 public XmppConnectionService getService() {
46 return XmppConnectionService.this;
47 }
48 }
49
50 @Override
51 public int onStartCommand(Intent intent, int flags, int startId) {
52 Log.d(LOGTAG,"recieved start command. been running for "+((System.currentTimeMillis() - startDate) / 1000)+"s");
53 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
54 if (!connectionRunnig) {
55 for(Account account : accounts) {
56 Log.d(LOGTAG,"connection wasnt running");
57 XmppConnection connection = new XmppConnection(account, pm);
58 Thread thread = new Thread(connection);
59 thread.start();
60 }
61 connectionRunnig = true;
62 }
63 return START_STICKY;
64 }
65
66 @Override
67 public void onCreate() {
68 databaseBackend = DatabaseBackend.getInstance(getApplicationContext());
69 this.accounts = databaseBackend.getAccounts();
70 startDate = System.currentTimeMillis();
71 }
72
73 @Override
74 public IBinder onBind(Intent intent) {
75 return mBinder;
76 }
77
78 public void sendMessage(Message message) {
79 databaseBackend.createMessage(message);
80 }
81
82 public void addConversation(Conversation conversation) {
83 databaseBackend.createConversation(conversation);
84 }
85
86 public List<Conversation> getConversations(int status) {
87 return databaseBackend.getConversations(status);
88 }
89
90 public List<Account> getAccounts() {
91 return databaseBackend.getAccounts();
92 }
93
94 public List<Message> getMessages(Conversation conversation) {
95 return databaseBackend.getMessages(conversation, 100);
96 }
97
98 public Conversation findOrCreateConversation(Account account, Contact contact) {
99 Conversation conversation = databaseBackend.findConversation(account, contact);
100 if (conversation!=null) {
101 Log.d("gultsch","found one. unarchive it");
102 conversation.setStatus(Conversation.STATUS_AVAILABLE);
103 this.databaseBackend.updateConversation(conversation);
104 } else {
105 conversation = new Conversation(contact.getDisplayName(), contact.getProfilePhoto(), account, contact.getJid());
106 this.databaseBackend.createConversation(conversation);
107 }
108 return conversation;
109 }
110
111 public void updateConversation(Conversation conversation) {
112 this.databaseBackend.updateConversation(conversation);
113 }
114
115 public int getConversationCount() {
116 return this.databaseBackend.getConversationCount();
117 }
118
119 public void createAccount(Account account) {
120 databaseBackend.createAccount(account);
121 }
122
123 public void updateAccount(Account account) {
124 databaseBackend.updateAccount(account);
125 }
126
127 public void deleteAccount(Account account) {
128 databaseBackend.deleteAccount(account);
129 }
130}