XmppConnectionService.java

  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}