diff --git a/Android/BewoMitarbeiterApp/app/app.iml b/Android/BewoMitarbeiterApp/app/app.iml
index bf9062721..08afa4ee3 100644
--- a/Android/BewoMitarbeiterApp/app/app.iml
+++ b/Android/BewoMitarbeiterApp/app/app.iml
@@ -96,6 +96,7 @@
+
diff --git a/Android/BewoMitarbeiterApp/app/src/main/AndroidManifest.xml b/Android/BewoMitarbeiterApp/app/src/main/AndroidManifest.xml
index 657b82893..50eb6ffc4 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/AndroidManifest.xml
+++ b/Android/BewoMitarbeiterApp/app/src/main/AndroidManifest.xml
@@ -2,8 +2,8 @@
-
-
+
+
+ android:theme="@android:style/Theme.NoTitleBar"
+ android:configChanges="orientation"
+ android:screenOrientation="portrait">
-
-
-
-
-
-
-
+ android:configChanges="orientation"
+ android:screenOrientation="portrait"
+ android:label="@string/contact_list_activity_name">
@@ -41,7 +36,9 @@
+ android:configChanges="orientation"
+ android:screenOrientation="portrait"
+ android:label="@string/Doku">
@@ -50,6 +47,8 @@
@@ -58,18 +57,30 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java
index 19aa907a1..4791fa116 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java
@@ -24,6 +24,8 @@ import soapConnection.SoapConnectionManager;
*/
public class DatabaseHandler extends SQLiteOpenHelper {
+ private static final String LOGTAG = "DATABASE_HANDLER";
+
//DataBase version
private static final int DATABASE_VERSION = 1;
@@ -62,8 +64,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
private static DatabaseHandler mInstance = null;
- private Context mContext;
-
public static DatabaseHandler getInstance(Context context) {
if(mInstance == null) {
mInstance = new DatabaseHandler(context.getApplicationContext());
@@ -74,7 +74,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
private DatabaseHandler(Context context){
super(context,DATABASE_NAME, null, DATABASE_VERSION);
- this.mContext = context;
}
public void clearDatabase() {
@@ -88,8 +87,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
deleteQuery = "DELETE FROM " + TABLE_CONTACTS;
db.execSQL(deleteQuery);
-
- db.close();
}
public void onCreate(SQLiteDatabase db) {
@@ -127,21 +124,20 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
public void insertOwnerOid(int ownerOid) {
- SQLiteDatabase db = this.getWritableDatabase();
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID_OWNER, ownerOid);
- db.insert(TABLE_DATABASEOWNER, null, values);
- db.close();
+ writableDatabase.insertOrThrow(TABLE_DATABASEOWNER, null, values);
}
public int getOwnerOid() {
- SQLiteDatabase db = this.getReadableDatabase();
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_DATABASEOWNER;
- Cursor cursor = db.rawQuery(selectQuery, null);
+ Cursor cursor = readableDatabase.rawQuery(selectQuery, null);
int ownerOid = 0;
@@ -150,7 +146,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
cursor.close();
- db.close();
return ownerOid;
}
@@ -182,18 +177,13 @@ public class DatabaseHandler extends SQLiteOpenHelper {
if(db.inTransaction()) {
db.endTransaction();
}
-
- db.close();
}
}
public long addChatMessage(ChatMessage message) {
- SQLiteDatabase db = this.getWritableDatabase();
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
- long rowId = db.insert(TABLE_CHATMESSAGE, null, fillValuesForChatMessage(message));
- db.close();
-
- return rowId;
+ return writableDatabase.insertOrThrow(TABLE_CHATMESSAGE, null, fillValuesForChatMessage(message));
}
private ContentValues fillValuesForChatMessage(ChatMessage message) {
@@ -211,7 +201,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
public int updateChatMessage(ChatMessage message) {
- SQLiteDatabase db = this.getWritableDatabase();
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_SENDER_PERSON_OID_CHATMESSAGE, message.SenderPersonOid);
@@ -222,10 +212,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
values.put(KEY_SERVERSEITIGE_OID_CHATMESSAGE, message.ServerseitigeOid);
values.put(KEY_IS_TEAM_CHATMESSAGE, message.IsTeam ? 1 : 0);
- int result = db.update(TABLE_CHATMESSAGE, values, KEY_ID_CHATMESSAGE + " = ?", new String[] { String.valueOf(message.Id)});
- db.close();
-
- return result;
+ return writableDatabase.update(TABLE_CHATMESSAGE, values, KEY_ID_CHATMESSAGE + " = ?", new String[] { String.valueOf(message.Id)});
}
public ArrayList getExistingChatMessageIds() {
@@ -244,7 +231,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
cursor.close();
- db.close();
return result;
}
@@ -265,7 +251,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
cursor.close();
- db.close();
return result;
}
@@ -289,7 +274,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
-
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CHATMESSAGE);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_DATABASEOWNER);
@@ -298,7 +282,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
public void addContact(ContactListItem contact) {
- SQLiteDatabase db = this.getWritableDatabase();
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_KONTAKT_NAME, contact.getChatName());
@@ -308,22 +292,20 @@ public class DatabaseHandler extends SQLiteOpenHelper {
values.put(KEY_TEAM_MEMBER_NAMES, contact.teamMemberNames);
values.put(KEY_TEAM_MEMBER_OIDS, contact.teamMemberOids);
- db.insert(TABLE_CONTACTS, null, values);
- db.close();
+ writableDatabase.insertOrThrow(TABLE_CONTACTS, null, values);
}
public ChatMessage getChatMessageById(int id) {
- SQLiteDatabase db = this.getReadableDatabase();
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
- Cursor cursor = db.query(
+ Cursor cursor = readableDatabase.query(
TABLE_CHATMESSAGE,
new String[] {KEY_ID_CHATMESSAGE, KEY_SENDER_PERSON_OID_CHATMESSAGE, KEY_RECIPIENT_PERSON_OID_CHATMESSAGE, KEY_INSTS_CHATMESSAGE, KEY_CHAT_TEXT_CHATMESSAGE, KEY_IS_DELIVERED_CHATMESSAGE, KEY_SERVERSEITIGE_OID_CHATMESSAGE, KEY_IS_TEAM_CHATMESSAGE},
KEY_ID_CHATMESSAGE + "=?",
new String[]{String.valueOf(id)},
null, null, null, null);
- if(cursor != null) {
- cursor.moveToFirst();
+ if(cursor != null && cursor.moveToFirst()){
int messageId = cursor.getInt(0);
int senderPersonOid = cursor.getInt(1);
@@ -335,22 +317,19 @@ public class DatabaseHandler extends SQLiteOpenHelper {
boolean isTeam = cursor.getInt(7) == 1;
cursor.close();
- db.close();
return new ChatMessage(messageId, senderPersonOid, recipientPersonOid, insTs, chatText, isDelivered, serverseitigeOid, isTeam);
}
- db.close();
-
return null;
}
public ArrayList getMessagesForRecipient(int recipientOid) {
ArrayList messages = new ArrayList<>();
- SQLiteDatabase db = this.getReadableDatabase();
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
- Cursor cursor = db.query(
+ Cursor cursor = readableDatabase.query(
TABLE_CHATMESSAGE,
new String[] {KEY_ID_CHATMESSAGE, KEY_SENDER_PERSON_OID_CHATMESSAGE, KEY_RECIPIENT_PERSON_OID_CHATMESSAGE, KEY_INSTS_CHATMESSAGE, KEY_CHAT_TEXT_CHATMESSAGE, KEY_IS_DELIVERED_CHATMESSAGE, KEY_SERVERSEITIGE_OID_CHATMESSAGE, KEY_IS_TEAM_CHATMESSAGE},
KEY_SENDER_PERSON_OID_CHATMESSAGE + "=? AND " + KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? OR " + KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? AND " + KEY_SENDER_PERSON_OID_CHATMESSAGE + "=?",
@@ -375,7 +354,6 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
cursor.close();
- db.close();
return messages;
}
@@ -383,9 +361,9 @@ public class DatabaseHandler extends SQLiteOpenHelper {
public ArrayList getMessagesForTeam(int teamOid) {
ArrayList messages = new ArrayList<>();
- SQLiteDatabase db = this.getReadableDatabase();
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
- Cursor cursor = db.query(
+ Cursor cursor = readableDatabase.query(
TABLE_CHATMESSAGE,
new String[] {KEY_ID_CHATMESSAGE, KEY_SENDER_PERSON_OID_CHATMESSAGE, KEY_RECIPIENT_PERSON_OID_CHATMESSAGE, KEY_INSTS_CHATMESSAGE, KEY_CHAT_TEXT_CHATMESSAGE, KEY_IS_DELIVERED_CHATMESSAGE, KEY_SERVERSEITIGE_OID_CHATMESSAGE, KEY_IS_TEAM_CHATMESSAGE},
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? AND " + KEY_IS_TEAM_CHATMESSAGE + "= 1",
@@ -411,16 +389,13 @@ public class DatabaseHandler extends SQLiteOpenHelper {
cursor.close();
- db.close();
-
return messages;
}
public ContactListItem getContact(int id) {
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
- SQLiteDatabase db = this.getReadableDatabase();
-
- Cursor cursor = db.query(TABLE_CONTACTS,
+ Cursor cursor = readableDatabase.query(TABLE_CONTACTS,
new String[]{
KEY_ID,
KEY_KONTAKT_NAME,
@@ -447,13 +422,10 @@ public class DatabaseHandler extends SQLiteOpenHelper {
ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames);
cursor.close();
- db.close();
return contact;
}
- db.close();
-
return null;
}
@@ -462,8 +434,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
- SQLiteDatabase db = this.getWritableDatabase();
- Cursor cursor = db.rawQuery(selectQuery, null);
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
+ Cursor cursor = writableDatabase.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
@@ -481,13 +453,44 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
cursor.close();
- db.close();
return contactList;
}
+ public ArrayList getAllChatMessages() {
+ ArrayList result = new ArrayList<>();
+
+ String selectQuery = "SELECT * FROM " + TABLE_CHATMESSAGE;
+
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
+
+ Cursor cursor = readableDatabase.rawQuery(selectQuery, null);
+
+ if(cursor.moveToFirst()) {
+ do {
+ ChatMessage message = new ChatMessage(
+ cursor.getInt(0),
+ cursor.getInt(1),
+ cursor.getInt(2),
+ getDateFromString(cursor.getString(3)),
+ cursor.getString(4),
+ cursor.getInt(5) == 1,
+ cursor.getInt(6),
+ cursor.getInt(7) == 1
+ );
+
+ result.add(message);
+
+ } while(cursor.moveToNext());
+
+ cursor.close();
+ }
+
+ return result;
+ }
+
public int updateContact(ContactListItem contact) {
- SQLiteDatabase db = this.getWritableDatabase();
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_KONTAKT_NAME, contact.getChatName());
@@ -497,23 +500,18 @@ public class DatabaseHandler extends SQLiteOpenHelper {
values.put(KEY_TEAM_MEMBER_NAMES, contact.teamMemberNames);
values.put(KEY_TEAM_MEMBER_OIDS, contact.teamMemberOids);
- int result = db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", new String[] { String.valueOf(contact.getId()) });
-
- db.close();
-
- return result;
+ return writableDatabase.update(TABLE_CONTACTS, values, KEY_ID + " = ?", new String[] { String.valueOf(contact.getId()) });
}
public void deleteContacts(ContactListItem contact){
- SQLiteDatabase db = this.getWritableDatabase();
- db.delete(TABLE_CONTACTS, KEY_ID + " = ?", new String[] { String.valueOf(contact.getId()) });
- db.close();
+ SQLiteDatabase writableDatabase = this.getWritableDatabase();
+ writableDatabase.delete(TABLE_CONTACTS, KEY_ID + " = ?", new String[] { String.valueOf(contact.getId()) });
}
public int getContactsCount(){
String countQuery = "SELECT COUNT(*) FROM " + TABLE_CONTACTS;
- SQLiteDatabase db = this.getReadableDatabase();
- Cursor cursor = db.rawQuery(countQuery, null);
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
+ Cursor cursor = readableDatabase.rawQuery(countQuery, null);
int result = 0;
@@ -522,32 +520,30 @@ public class DatabaseHandler extends SQLiteOpenHelper {
}
cursor.close();
- db.close();
return result;
}
public byte[] getUserImage(Integer personOid) {
- SQLiteDatabase db = this.getReadableDatabase();
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
- Cursor cursor = db.query(TABLE_CONTACTS, new String[] {KEY_PICTURE_BLOB}, KEY_PERSONOID + " = " + personOid, null, null, null, null);
+ Cursor cursor = readableDatabase.query(TABLE_CONTACTS, new String[] {KEY_PICTURE_BLOB}, KEY_PERSONOID + " = " + personOid, null, null, null, null);
byte[] picture = null;
if(cursor != null && cursor.moveToFirst()) {
- cursor.getBlob(0);
- }
+ picture = cursor.getBlob(0);
- cursor.close();
- db.close();
+ cursor.close();
+ }
return picture;
}
public ContactListItem getContactByPersonOid(int personOid, boolean isTeam) {
- SQLiteDatabase db = this.getReadableDatabase();
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
- Cursor cursor = db.query(TABLE_CONTACTS,
+ Cursor cursor = readableDatabase.query(TABLE_CONTACTS,
new String[]{
KEY_ID,
KEY_KONTAKT_NAME,
@@ -573,15 +569,53 @@ public class DatabaseHandler extends SQLiteOpenHelper {
ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames);
cursor.close();
- db.close();
return contact;
} else {
- Log.i("DATABASE_HANDLER", "Keinen Kontakt mit PersonOid " + personOid + " gefunden.");
+ Log.i(LOGTAG, "Keinen Kontakt mit PersonOid " + personOid + " gefunden.");
}
- db.close();
-
return null;
}
+
+ public ArrayList getUnsentChatMessages() {
+ ArrayList messages = new ArrayList<>();
+
+ SQLiteDatabase readableDatabase = this.getReadableDatabase();
+
+ Cursor cursor = readableDatabase.query(TABLE_CHATMESSAGE,
+ new String[] {
+ KEY_ID_CHATMESSAGE,
+ KEY_SENDER_PERSON_OID_CHATMESSAGE,
+ KEY_RECIPIENT_PERSON_OID_CHATMESSAGE,
+ KEY_INSTS_CHATMESSAGE,
+ KEY_CHAT_TEXT_CHATMESSAGE,
+ KEY_IS_DELIVERED_CHATMESSAGE,
+ KEY_SERVERSEITIGE_OID_CHATMESSAGE,
+ KEY_IS_TEAM_CHATMESSAGE
+ },
+ KEY_IS_DELIVERED_CHATMESSAGE + " =? AND " + KEY_SENDER_PERSON_OID_CHATMESSAGE + " =?",
+ new String[] {String.valueOf(0), String.valueOf(SoapConnectionManager.User.getPersonOid())}, null, null, null, null);
+
+ if(cursor.moveToFirst()) {
+ do{
+ ChatMessage message = new ChatMessage(
+ cursor.getInt(0),
+ cursor.getInt(1),
+ cursor.getInt(2),
+ getDateFromString(cursor.getString(3)),
+ cursor.getString(4),
+ cursor.getInt(5) == 1,
+ cursor.getInt(6),
+ cursor.getInt(7) == 1
+ );
+
+ messages.add(message);
+ } while(cursor.moveToNext());
+ }
+
+ cursor.close();
+
+ return messages;
+ }
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java
index cad7f339e..571394f97 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java
@@ -5,19 +5,38 @@ import android.app.NotificationManager;
import android.content.Context;
import android.util.Log;
+import util.ConnectivityReceiver;
+
/**
* Created by JettenM on 24.08.2016.
*/
public class BeWoChatApplication extends Application {
private Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler;
+ private static BeWoChatApplication mInstance;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ mInstance = this;
+ }
+
+ public static synchronized BeWoChatApplication getInstance() {
+ return mInstance;
+ }
+
+ public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
+ ConnectivityReceiver.connectivityReceiverListener = listener;
+ }
+
public BeWoChatApplication() {
defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
- Log.e("UNCAUGHT_EXCEPTION", "Eine unbehandelte Ausnahme ist aufgetreten!");
+ Log.e("UNCAUGHT_EXCEPTION", "Eine unbehandelte Ausnahme ist aufgetreten!\n" + ex.getMessage());
ex.printStackTrace();
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
index 660a4f427..45f26ba89 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ChatActivity.java
@@ -1,10 +1,6 @@
package beyondsoft.bewomitarbeiterapp;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -15,10 +11,8 @@ import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
-import android.util.Base64;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -43,21 +37,13 @@ import com.octo.android.robospice.request.listener.RequestListener;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapPrimitive;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
import java.lang.reflect.Type;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
-import java.util.Random;
-
-import javax.crypto.NoSuchPaddingException;
import Database.DatabaseHandler;
import entities.ChatMessage;
@@ -70,13 +56,13 @@ import soapConnection.SoapConnectionManager;
import tcpConnection.SocketManager;
import tcpConnection.UIHandler;
import util.ChatMessageDeserializer;
-import util.SecurityUtils;
+import util.ConnectivityReceiver;
import util.Util;
/**
* Created by bib on 03.05.2016.
*/
-public class ChatActivity extends ActionBarActivity {
+public class ChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener {
private DatabaseHandler databaseHandler;
protected EditText text;
@@ -98,6 +84,16 @@ public class ChatActivity extends ActionBarActivity {
private View mCustomView;
+ private final static String LOGTAG = "CHAT_ACTIVITY";
+
+ @Override
+ public void onNetworkConnectionChanged(boolean isConnected) {
+ //TODO: Socket neustarten
+ // Broken Pipe, weil die Internetverbindung abgerissen ist
+
+ Util.reconnectWithServer(isConnected, ChatActivity.this);
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -129,6 +125,8 @@ public class ChatActivity extends ActionBarActivity {
teamMemberOids = zielkorb.getString("TeamMemberOids");
teamMemberNames = zielkorb.getString("TeamMemberNames");
+ Log.i(LOGTAG, "onCreate aufgerufen");
+
ReloadChatView(recipientName, recipientPersonOid, bildArray, isTeam, teamMemberOids, teamMemberNames);
}
@@ -145,7 +143,9 @@ public class ChatActivity extends ActionBarActivity {
TextView titlename = (TextView) mCustomView.findViewById(R.id.PersonalName);
ImageView titlepic = (ImageView) mCustomView.findViewById(R.id.PersonalPic);
- status.setImageResource((SocketManager.onlinePersonOids.contains(recipientPersonOid) ? R.drawable.statusonline : R.drawable.statusoffline));
+ if(!isTeam) {
+ status.setImageResource((SocketManager.onlinePersonOids.contains(recipientPersonOid) ? R.drawable.statusonline : R.drawable.statusoffline));
+ }
Bitmap customerImage;
@@ -167,47 +167,22 @@ public class ChatActivity extends ActionBarActivity {
@Override
public void updateUserInterface(final Packet chatPacket) {
try {
- Log.i("CHAT_SOCKET_LISTENER", "Nachricht vom Typ " + chatPacket.ChatDataIdentifier.name() + " empfangen");
-
switch(chatPacket.ChatDataIdentifier) {
case MESSAGE:
listView.post(new Runnable() {
@Override
public void run() {
- ChatMessage message = new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, false, chatPacket.ServerseitigeOid, false);
-
- databaseHandler.addChatMessage(message);
-
if(chatPacket.SenderPersonOid == recipientPersonOid) {
- chatMessages.add(message);
+ chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false));
adapter.notifyDataSetChanged();
} else {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(getApplicationContext(), "ChatName: " + chatPacket.ChatName, Toast.LENGTH_LONG).show();
- }
- });
-
Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, getApplicationContext());
}
}
});
- break;
- case MESSAGE_RESPONSE:
- ChatMessage cm = databaseHandler.getChatMessageById(chatPacket.ClientseitigeOid);
-
- cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
-
- databaseHandler.updateChatMessage(cm);
-
break;
case STATUS_NOTIFICATION_LOGIN:
- if(!SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
- SocketManager.onlinePersonOids.add(chatPacket.SenderPersonOid);
- }
-
if(chatPacket.SenderPersonOid == recipientPersonOid) {
runOnUiThread(new Runnable() {
@Override
@@ -220,29 +195,23 @@ public class ChatActivity extends ActionBarActivity {
break;
case STATUS_NOTIFICATION_LOGOUT:
- if(SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
- SocketManager.onlinePersonOids.remove(Integer.valueOf(chatPacket.SenderPersonOid));
+ if(chatPacket.SenderPersonOid == recipientPersonOid) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ImageView status = (ImageView) mCustomView.findViewById(R.id.status);
+ status.setImageResource(R.drawable.statusoffline);
+ }
+ });
}
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- ImageView status = (ImageView) mCustomView.findViewById(R.id.status);
- status.setImageResource(R.drawable.statusoffline);
- }
- });
-
break;
case TEAM:
listView.post(new Runnable() {
@Override
public void run() {
- ChatMessage message = new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, false, chatPacket.ServerseitigeOid, true);
-
- databaseHandler.addChatMessage(message);
-
if(isTeam && chatPacket.RecipientPersonOid == recipientPersonOid) {
- chatMessages.add(message);
+ chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true));
adapter.notifyDataSetChanged();
} else {
Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.RecipientPersonOid, true, teamMemberOids, teamMemberNames, getApplicationContext());
@@ -281,6 +250,7 @@ public class ChatActivity extends ActionBarActivity {
final ChatMessage message = new ChatMessage(packet.SenderPersonOid, packet.RecipientPersonOid, packet.MessageTimeStamp, packet.ChatMessage, false, 0, isTeam);
+ Log.i("MESSAGE_TRACER", "ChatActivity: Speichere Nachricht in der Datenbank " + message.ChatText);
long coid = databaseHandler.addChatMessage(message);
packet.ClientseitigeOid = Long.valueOf(coid).intValue();
@@ -305,6 +275,8 @@ public class ChatActivity extends ActionBarActivity {
ArrayList test = isTeam ? databaseHandler.getExistingTeamChatMessageIds() : databaseHandler.getExistingChatMessageIds();
+ Log.i(LOGTAG, "Chat-Messages in der Datenbank: " + test.size());
+
String pExceptions = "";
for(int i = 0; i < test.size(); i++) {
pExceptions += test.get(i);
@@ -328,19 +300,19 @@ public class ChatActivity extends ActionBarActivity {
public void onResume() {
SocketManager.uiHandler = chatUIHandler;
+ BeWoChatApplication.getInstance().setConnectivityListener(this);
+
super.onResume();
}
@Override
public void onStop(){
spiceManager.shouldStop();
- databaseHandler.close();
super.onStop();
}
@Override
public void onPause() {
- databaseHandler.close();
super.onPause();
}
@@ -350,6 +322,7 @@ public class ChatActivity extends ActionBarActivity {
spiceManager.start(this);
}
+ @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menue_chat, menu);
@@ -359,8 +332,18 @@ public class ChatActivity extends ActionBarActivity {
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
- case R.id.action_delet_Storage:
- recreate(); // ---> gegebenenfals umändern, aber fürs erste reichts
+ case R.id.action_logout:
+ SocketManager.logout();
+
+ Intent intent = new Intent(ChatActivity.this, LoginActivity.class);
+ ChatActivity.this.startActivity(intent);
+
+ return true;
+ case R.id.action_doku:
+
+ Intent dokuActivity = new Intent(ChatActivity.this, WebdokuActivity.class);
+ ChatActivity.this.startActivity(dokuActivity);
+
return true;
default:
return super.onOptionsItemSelected(item);
@@ -378,10 +361,10 @@ public class ChatActivity extends ActionBarActivity {
String tMemberOids = zielkorb.getString("TeamMemberOids");
String tMemberNames = zielkorb.getString("TeamMemberNames");
- Toast.makeText(getApplicationContext(), "" + blahIsTeam, Toast.LENGTH_LONG).show();
-
byte[] imageAsByteArray = databaseHandler.getUserImage(rpoid);
+ Log.i("ON_NEW_INTENT", "Erzeuge neuen Intent");
+
ReloadChatView(rn, rpoid, imageAsByteArray, blahIsTeam, tMemberOids, tMemberNames);
}
@@ -428,6 +411,19 @@ public class ChatActivity extends ActionBarActivity {
final ArrayList result = gson.fromJson(soapPrimitive.toString(), listType);
+ Log.i(LOGTAG, "Chat-Messages aus der Serveranfrage: " + result.size());
+ String abc = "";
+ for(ChatMessage m : result) {
+
+ abc += "\t" + m.ChatText;
+
+ if(result.indexOf(m) < result.size() - 1) {
+ abc += "\n";
+ }
+ }
+
+ Log.i(LOGTAG, "Heruntergeladene Nachrichten:\n" + abc);
+
databaseHandler.addChatMessages(result);
listView.post(new Runnable() {
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java
index a51cfa89e..e0dc7f8ad 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktAdapter.java
@@ -49,7 +49,7 @@ public class KontaktAdapter extends ArrayAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View rowView = inflater.inflate(R.layout.kontakt_list_chat, parent, false);
+ View rowView = inflater.inflate(R.layout.contact_listview_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
minitext = (TextView) rowView.findViewById(R.id.subtitle);
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
index 13535d870..cd618317c 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java
@@ -1,19 +1,16 @@
package beyondsoft.bewomitarbeiterapp;
import android.app.ListActivity;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.Color;
import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
+import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
@@ -32,7 +29,6 @@ import java.io.ByteArrayOutputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
-import java.util.Random;
import Database.DatabaseHandler;
import entities.ChatMessage;
@@ -43,164 +39,189 @@ import soapConnection.SoapCalls;
import soapConnection.SoapConnectionManager;
import tcpConnection.SocketManager;
import tcpConnection.UIHandler;
+import util.ConnectivityReceiver;
import util.Util;
/**
* Created by bib on 02.05.2016.
*/
-public class KontaktChatActivity extends ListActivity {
+public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener {
private SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class);
private DatabaseHandler databaseHandler;
- private UIHandler kontaktChatUIHandler;
+// private UIHandler kontaktChatUIHandler;
public static ListView listView;
ArrayList contactList = new ArrayList<>();
+ @Override
+ public void onNetworkConnectionChanged(boolean isConnected) {
+ Util.reconnectWithServer(isConnected, KontaktChatActivity.this);
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.kontakt_list_chat);
databaseHandler = DatabaseHandler.getInstance(this);
- listView = getListView();
+ listView = (ListView) findViewById(R.id.contact_listview);
+ listView.setAdapter(new KontaktAdapter(this, new ArrayList()));
+ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ ContactListItem selectedValue = (ContactListItem) listView.getAdapter().getItem(position);
+
+ Bundle bundle = new Bundle();
+
+ bundle.putString("Name", selectedValue.getChatName());
+ bundle.putInt("RecipientOid", selectedValue.getPersonOid());
+ bundle.putBoolean("IsTeam", selectedValue.isTeam);
+ bundle.putString("TeamMemberOids", selectedValue.teamMemberOids);
+ bundle.putString("TeamMemberNames", selectedValue.teamMemberNames);
+
+ Intent in = new Intent(getBaseContext(), ChatActivity.class);
+ in.putExtras(bundle);
+
+ //Gib Bild für den Chat mit
+ if(selectedValue.getPicture() == null) {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ Bitmap a = BitmapFactory.decodeResource(getResources(), R.drawable.katze3);
+ a.compress(Bitmap.CompressFormat.JPEG,0,stream);
+ byte[] x = stream.toByteArray();
+ in.putExtra("Bild", x);
+ } else {
+ in.putExtra("Bild", selectedValue.getPicture());
+ }
+
+ startActivity(in);
+ }
+ });
+
+ if(SocketManager.uiHandler == null ||! SocketManager.uiHandler.equals(kontaktChatActivityUIHandler)) {
+ SocketManager.uiHandler = kontaktChatActivityUIHandler;
+ }
ArrayList propertyInfos = new ArrayList<>();
propertyInfos.add(SoapConnectionManager.BuildProperty("pPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class));
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos);
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
-
- kontaktChatUIHandler = new UIHandler() {
- @Override
- public void updateUserInterface(final Packet chatPacket) {
- try {
- switch(chatPacket.ChatDataIdentifier) {
- case MESSAGE:
- ChatMessage message = new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, false, chatPacket.ServerseitigeOid, false);
-
- databaseHandler.addChatMessage(message);
-
- Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, getApplicationContext());
- break;
- case TEAM:
- ChatMessage teamMessage = new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, false, chatPacket.ServerseitigeOid, true);
-
- databaseHandler.addChatMessage(teamMessage);
-
- ContactListItem cli = DatabaseHandler.getInstance(getApplicationContext()).getContactByPersonOid(chatPacket.RecipientPersonOid, true);
-
- Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.RecipientPersonOid, true, cli.teamMemberOids, cli.teamMemberNames, getApplicationContext());
- break;
- case STATUS_NOTIFICATION_LOGIN:
- Log.i("KONTAKTLISTE", "Login registriert: (" + chatPacket.SenderPersonOid + ") " + chatPacket.ChatName);
-
- if(!SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
- SocketManager.onlinePersonOids.add(chatPacket.SenderPersonOid);
-
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- KontaktAdapter ka =((KontaktAdapter) listView.getAdapter());
-
- for(ContactListItem item : ka.values) {
- if(item.getPersonOid() == chatPacket.SenderPersonOid) {
- item.isOnline = true;
- break;
- }
- }
-
- ka.notifyDataSetChanged();
- }
- });
- }
- break;
- case STATUS_NOTIFICATION_LOGOUT:
- if(SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
- SocketManager.onlinePersonOids.remove(Integer.valueOf(chatPacket.SenderPersonOid));
-
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- KontaktAdapter ka =((KontaktAdapter) listView.getAdapter());
-
- for(ContactListItem item : ka.values) {
- if(item.getPersonOid() == chatPacket.SenderPersonOid) {
- item.isOnline = false;
- break;
- }
- }
-
- ka.notifyDataSetChanged();
- }
- });
- }
- break;
- }
- } catch(Exception pe) {
- pe.printStackTrace();
- }
- }
- };
}
+ public UIHandler kontaktChatActivityUIHandler = new UIHandler() {
+ @Override
+ public void updateUserInterface(final Packet chatPacket) {
+ try {
+ switch(chatPacket.ChatDataIdentifier) {
+ case MESSAGE:
+
+ Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, getApplicationContext());
+
+ break;
+
+ case TEAM:
+ ContactListItem cli = DatabaseHandler.getInstance(getApplicationContext()).getContactByPersonOid(chatPacket.RecipientPersonOid, true);
+
+ Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.RecipientPersonOid, true, cli.teamMemberOids, cli.teamMemberNames, getApplicationContext());
+ break;
+ case STATUS_NOTIFICATION_LOGIN:
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ KontaktAdapter ka =((KontaktAdapter) listView.getAdapter());
+
+ for(ContactListItem item : ka.values) {
+ if(item.getPersonOid() == chatPacket.SenderPersonOid) {
+ item.isOnline = true;
+ break;
+ }
+ }
+
+ ka.notifyDataSetChanged();
+ }
+ });
+ break;
+ case STATUS_NOTIFICATION_LOGOUT:
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ KontaktAdapter ka =((KontaktAdapter) listView.getAdapter());
+
+ for(ContactListItem item : ka.values) {
+ if(item.getPersonOid() == chatPacket.SenderPersonOid) {
+ item.isOnline = false;
+ break;
+ }
+ }
+
+ ka.notifyDataSetChanged();
+ }
+ });
+ break;
+ case STATUS_NOTIFICATION_LOGIN_BROADCAST:
+
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ KontaktAdapter ka =((KontaktAdapter) listView.getAdapter());
+
+ for(ContactListItem item : ka.values) {
+ if(item.getPersonOid() == chatPacket.SenderPersonOid) {
+ item.isOnline = true;
+ break;
+ }
+ }
+
+ ka.notifyDataSetChanged();
+ }
+ });
+
+ break;
+ }
+ } catch(Exception pe) {
+ pe.printStackTrace();
+ }
+ }
+ };
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_main_activity_mitarbeiter, menu);
+ getMenuInflater().inflate(R.menu.menu_kontaktchat_activity, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
+ switch (item.getItemId()) {
+ case R.id.action_kontaktlist_doku:
- //noinspection SimplifiableIfStatement
+ Intent dokuActivity = new Intent(KontaktChatActivity.this, WebdokuActivity.class);
+ KontaktChatActivity.this.startActivity(dokuActivity);
- if (id == R.id.action_Logout) {
- System.exit(0);
+ return true;
+ case R.id.action_kontaktlist_logout:
+
+ SocketManager.logout();
+
+ Intent intent = new Intent(KontaktChatActivity.this, LoginActivity.class);
+ KontaktChatActivity.this.startActivity(intent);
+
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
}
-
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id) {
- ContactListItem selectedValue = (ContactListItem) getListAdapter().getItem(position);
-
- Bundle bundle = new Bundle();
-
- bundle.putString("Name", selectedValue.getChatName());
- bundle.putInt("RecipientOid", selectedValue.getPersonOid());
- bundle.putBoolean("IsTeam", selectedValue.isTeam);
- bundle.putString("TeamMemberOids", selectedValue.teamMemberOids);
- bundle.putString("TeamMemberNames", selectedValue.teamMemberNames);
-
- Intent in = new Intent(getBaseContext(), ChatActivity.class);
- in.putExtras(bundle);
-
- //Gib Bild für den Chat mit
- if(selectedValue.getPicture() == null) {
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- Bitmap a = BitmapFactory.decodeResource(getResources(), R.drawable.katze3);
- a.compress(Bitmap.CompressFormat.JPEG,0,stream);
- byte[] x = stream.toByteArray();
- in.putExtra("Bild", x);
- } else {
- in.putExtra("Bild", selectedValue.getPicture());
- }
-
- startActivity(in);
}
@Override
public void onResume() {
- SocketManager.uiHandler = kontaktChatUIHandler;
+ SocketManager.uiHandler = kontaktChatActivityUIHandler;
+
+ BeWoChatApplication.getInstance().setConnectivityListener(this);
KontaktAdapter adapter = (KontaktAdapter) listView.getAdapter();
@@ -218,7 +239,6 @@ public class KontaktChatActivity extends ListActivity {
@Override
public void onStop(){
spiceManager.shouldStop();
- databaseHandler.close();
super.onStop();
}
@@ -283,9 +303,12 @@ public class KontaktChatActivity extends ListActivity {
if(adapter == null) {
adapter = new KontaktAdapter(KontaktChatActivity.this, contactList);
+ } else {
+ adapter.values.clear();
+ adapter.values.addAll(contactList);
}
- setListAdapter(adapter);
+ listView.setAdapter(adapter);
((KontaktAdapter) listView.getAdapter()).notifyDataSetChanged();
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java
index 8497bba1b..f6773a3e3 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java
@@ -5,10 +5,7 @@ import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
+
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
@@ -24,11 +21,7 @@ import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
-import com.android.volley.Request;
import com.android.volley.RequestQueue;
-import com.android.volley.Response;
-import com.android.volley.VolleyError;
-import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.octo.android.robospice.SpiceManager;
import com.octo.android.robospice.UncachedSpiceService;
@@ -53,6 +46,7 @@ import soapConnection.ApplicationUser;
import soapConnection.JsonSoapPrimitiveRequest;
import soapConnection.SoapCalls;
import soapConnection.SoapConnectionManager;
+import tcpConnection.LoginCallback;
import tcpConnection.SocketManager;
import util.SecurityUtils;
import util.Util;
@@ -275,18 +269,6 @@ public class LoginActivity extends ActionBarActivity {
databaseHandler.insertOwnerOid(SoapConnectionManager.User.getPersonOid().intValue());
}
- ContactListItem cli = databaseHandler.getContactByPersonOid(4, false);
- if (getResources().getDrawable(R.drawable.katyperry) != null && cli != null) {
- Bitmap bitch = ((BitmapDrawable) getResources().getDrawable(R.drawable.katyperry)).getBitmap();
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- bitch.compress(Bitmap.CompressFormat.JPEG, 100, stream);
- byte[] byteArray = stream.toByteArray();
-
- cli.setPicture(byteArray);
-
- databaseHandler.getInstance(getApplicationContext()).updateContact(cli);
- }
-
SoapConnectionManager.User.setTenant(mTenantView.getText().toString());
if(mRememberMeCheckBoxView.isChecked()) {
@@ -318,8 +300,18 @@ public class LoginActivity extends ActionBarActivity {
SocketManager.tenant = mTenantView.getText().toString();
- Intent mainActivityMitarbeiter = new Intent(LoginActivity.this, MainActivityMitarbeiter.class);
- LoginActivity.this.startActivity(mainActivityMitarbeiter);
+ //TODO: stattdessen ConnectToServer und im Callback die ChatActivity aufrufen
+ SocketManager.loginCallback = new LoginCallback() {
+ @Override
+ public void doCallback() {
+ Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Ist verbunden und ruft die ChatActivity nun auf.");
+
+ Intent kontaktChatActivity = new Intent(LoginActivity.this, KontaktChatActivity.class);
+ LoginActivity.this.startActivity(kontaktChatActivity);
+ }
+ };
+
+ SocketManager.connectToServer();
}
else {
showProgress(false);
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java
index de1064b65..27253332b 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/MainActivityMitarbeiter.java
@@ -1,13 +1,7 @@
package beyondsoft.bewomitarbeiterapp;
import android.app.Activity;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
import android.content.Intent;
-import android.graphics.Color;
-import android.os.Looper;
-import android.support.v4.app.NotificationCompat;
import android.os.Bundle;
import android.util.Log;
@@ -15,20 +9,23 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
-import android.widget.Toast;
-import java.util.Random;
+import java.util.ArrayList;
import Database.DatabaseHandler;
+
+import entities.ChatMessage;
+
import soapConnection.Packet;
import soapConnection.SoapConnectionManager;
import tcpConnection.SocketManager;
import tcpConnection.UIHandler;
+import util.ConnectivityReceiver;
import util.Util;
-public class MainActivityMitarbeiter extends Activity {
+public class MainActivityMitarbeiter extends Activity implements ConnectivityReceiver.ConnectivityReceiverListener {
protected Button dokubutton;
protected Button chatbutton;
@@ -40,13 +37,19 @@ public class MainActivityMitarbeiter extends Activity {
int loggedInUserPersonOid;
- @Override
+ private final static String LOGTAG = "MAIN_ACTIVITY";
+
+ @Override
+ public void onNetworkConnectionChanged(boolean isConnected) {
+ Util.reconnectWithServer(isConnected, MainActivityMitarbeiter.this);
+ }
+
+ @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity_mitarbeiter);
SocketManager.connectToServer();
- SocketManager.loginOnServer();
setzeButtonListener();
@@ -61,6 +64,18 @@ public class MainActivityMitarbeiter extends Activity {
case MESSAGE:
Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, getApplicationContext());
+ break;
+
+ case MESSAGE_RESPONSE:
+ DatabaseHandler databaseHandler = DatabaseHandler.getInstance(getApplicationContext());
+
+ ChatMessage cm = databaseHandler.getChatMessageById(chatPacket.ClientseitigeOid);
+
+ cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
+ cm.IsDelivered = true;
+
+ databaseHandler.updateChatMessage(cm);
+
break;
case STATUS_NOTIFICATION_LOGIN_BROADCAST:
String[] bitch = chatPacket.ChatMessage.split(",");
@@ -91,6 +106,8 @@ public class MainActivityMitarbeiter extends Activity {
}
}
};
+
+ Util.sendUnsentMessages(MainActivityMitarbeiter.this);
}
@Override
@@ -151,11 +168,15 @@ public class MainActivityMitarbeiter extends Activity {
public void onResume() {
SocketManager.uiHandler = mainUIHandler;
+ BeWoChatApplication.getInstance().setConnectivityListener(this);
+
super.onResume();
}
@Override
public void onBackPressed() {
+ Log.i(LOGTAG, "Logge aus...");
+
SocketManager.logout();
finish();
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java
index ae728a727..216e20371 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/WebdokuActivity.java
@@ -1,6 +1,7 @@
package beyondsoft.bewomitarbeiterapp;
import android.app.Activity;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
@@ -9,6 +10,7 @@ import android.webkit.WebView;
import android.webkit.WebViewClient;
import soapConnection.SoapCalls;
+import tcpConnection.SocketManager;
/**
* Created by bib on 02.05.2016.
@@ -29,4 +31,29 @@ public class WebdokuActivity extends ActionBarActivity {
view.loadUrl(SoapCalls.WEB_DOKU_URL);
view.setWebViewClient(new WebViewClient());
}
+
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_webdoku, menu);
+ return true;
+ }
+
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle item selection
+ switch (item.getItemId()) {
+ case R.id.action_chat:
+ Intent kontaktChatActivity = new Intent(getBaseContext(), KontaktChatActivity.class);
+
+ startActivity(kontaktChatActivity);
+ return true;
+ case R.id.action_Logout:
+ SocketManager.logout();
+
+ finish();
+ System.exit(0);
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java
new file mode 100644
index 000000000..5a8a8d0a2
--- /dev/null
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatEntity.java
@@ -0,0 +1,22 @@
+package entities;
+
+/**
+ * Created by JettenM on 08.09.2016.
+ */
+public class ChatEntity {
+ private long oid;
+ private boolean isTeam;
+
+ public ChatEntity(long pOid, boolean pIsTeam) {
+ oid = pOid;
+ isTeam = pIsTeam;
+ }
+
+ public long getOid() {
+ return oid;
+ }
+
+ public boolean isTeam() {
+ return isTeam;
+ }
+}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatPerson.java b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatPerson.java
index 08bb3e165..c4b450d03 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatPerson.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/entities/ChatPerson.java
@@ -4,10 +4,10 @@ package entities;
* Created by JettenM on 05.07.2016.
*/
public class ChatPerson {
- public int Oid;
- public String Name;
+ public int Oid;
+ public String Name;
public boolean IsTeam;
- public String TeamMemberNames;
- public String TeamMemberOids;
- public int Version;
+ public String TeamMemberNames;
+ public String TeamMemberOids;
+ public int Version;
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/entities/NotificationLog.java b/Android/BewoMitarbeiterApp/app/src/main/java/entities/NotificationLog.java
new file mode 100644
index 000000000..90c396aee
--- /dev/null
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/entities/NotificationLog.java
@@ -0,0 +1,24 @@
+package entities;
+
+import java.util.Date;
+
+/**
+ * Created by JettenM on 09.09.2016.
+ */
+public class NotificationLog {
+ private int notificationId;
+ private Date notificationDate;
+
+ public NotificationLog(int notificationId, Date notificationDate) {
+ this.notificationId = notificationId;
+ this.notificationDate = notificationDate;
+ }
+
+ public int getNotificationId() {
+ return notificationId;
+ }
+
+ public Date getNotificationDate() {
+ return notificationDate;
+ }
+}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java
index 31ec3007e..d5231c693 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java
@@ -17,7 +17,8 @@ public enum DataIdentifier {
MESSAGE_RESPONSE(10),
STATUS_NOTIFICATION_BESCHAEFTIGT(11),
STATUS_NOTIFICATION_ONLINE(12),
- STATUS_NOTIFICATION_OFFLINE(13);
+ STATUS_NOTIFICATION_OFFLINE(13),
+ LOGIN_SUCCESS(14);
private final int value;
DataIdentifier(int value) {
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java
index 7a1552b3a..afb72f363 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/Packet.java
@@ -49,6 +49,8 @@ public class Packet {
//23;281;20;389;1;38;932[Tenant]; 8 Semikola
public Packet(String message) {
+ Log.i("PACKET_CONSTRUCTOR_MSG", message);
+
String[] gesplittet = message.split(";");
String senderPersonOidString = gesplittet[0];
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java
index 0709df599..5cab44727 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java
@@ -10,14 +10,26 @@ public class SoapCalls {
public static String GET_ALL_CHAT_MESSAGES = "GetAllChatMessagesForSenderAndRecipient";
- //"app4.bewoplaner.de";//
- public static String DESTINATION_ADDRESS = "app4.bewoplaner.de";//"192.168.1.103";
+ //TODO: "app4.bewoplaner.de";//
+// public static String DESTINATION_ADDRESS = "app4.bewoplaner.de";
+// public static int DESTINATION_PORT = 5000;
+//
+// public static String TOKEN_CHECK_URL = "https://" + DESTINATION_ADDRESS + "/mobil/main/checktoken?token=";
+//
+// public static String WEB_DOKU_URL = "https://" + DESTINATION_ADDRESS + "/mobil/login/demo";
+//
+// public static String WSDL_TARGET_NAME = "bliblablubb.org/";
+// public static String SOAP_ADDRESS = "https://" + DESTINATION_ADDRESS + "/BeWoPlanerAndroid/AndroidSoapService.asmx";
+
+
+
+ public static String DESTINATION_ADDRESS = "192.168.1.103";
public static int DESTINATION_PORT = 5000;
- public static String TOKEN_CHECK_URL = "https://" + DESTINATION_ADDRESS + "/mobil/main/checktoken?token=";
+ public static String TOKEN_CHECK_URL = "http://" + DESTINATION_ADDRESS + "/bewoplanermobil/main/checktoken?token=";
- public static String WEB_DOKU_URL = "https://" + DESTINATION_ADDRESS + "/mobil/login/demo";
+ public static String WEB_DOKU_URL = "http://" + DESTINATION_ADDRESS + "/bewoplanermobil/login/demo";
public static String WSDL_TARGET_NAME = "bliblablubb.org/";
- public static String SOAP_ADDRESS = "https://" + DESTINATION_ADDRESS + "/BeWoPlanerAndroid/AndroidSoapService.asmx";
+ public static String SOAP_ADDRESS = "http://" + DESTINATION_ADDRESS + "/BeWoPlanerAndroid/AndroidSoapService.asmx";
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/LoginCallback.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/LoginCallback.java
new file mode 100644
index 000000000..00a0c00c8
--- /dev/null
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/LoginCallback.java
@@ -0,0 +1,9 @@
+package tcpConnection;
+
+
+/**
+ * Created by JettenM on 08.09.2016.
+ */
+public interface LoginCallback {
+ void doCallback();
+}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
index a24d269ce..a04fef882 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java
@@ -1,15 +1,28 @@
package tcpConnection;
import android.util.Log;
+import android.widget.ImageView;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.NetworkInterface;
import java.net.Socket;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
+import Database.DatabaseHandler;
+import beyondsoft.bewomitarbeiterapp.BeWoChatApplication;
+import beyondsoft.bewomitarbeiterapp.R;
+import entities.ChatEntity;
+import entities.ChatMessage;
+import entities.NotificationLog;
+
import soapConnection.DataIdentifier;
import soapConnection.Packet;
import soapConnection.SoapCalls;
@@ -21,35 +34,49 @@ public class SocketManager {
private static final String TAG = "SOCKET_MANAGER";
+ private static DatabaseHandler databaseHandler = DatabaseHandler.getInstance(BeWoChatApplication.getInstance());
+
public static String tenant;
public static Socket socket;
public static Thread listenerThread;
public static SocketListener socketListener;
public static UIHandler uiHandler;
+ public static LoginCallback loginCallback;
public static DataOutputStream dataOutputStream;
public static ArrayList onlinePersonOids = new ArrayList<>();
+ public static ArrayList onlineEntities = new ArrayList<>();
+ public static HashMap notificationEntities = new HashMap<>();
public static void connectToServer(){
- new Thread(new OpenConnection()).start();
+ new Thread(new ConnectionOpener()).start();
}
public static void sendMessage(Packet packet) {
new Thread(new MessageSender(packet.getDataStream())).start();
}
- public static class OpenConnection implements Runnable {
+ private static class ConnectionOpener implements Runnable {
public void run() {
try {
+ if(socket != null) {
+ socket.close();
+ }
+
+ socket = null;
socket = new Socket(SoapCalls.DESTINATION_ADDRESS, SoapCalls.DESTINATION_PORT);
- loginOnServer();
+ dataOutputStream = null;
+ onlinePersonOids.clear();
+ onlineEntities.clear();
dataOutputStream = new DataOutputStream(socket.getOutputStream());
socketListener = new SocketListener();
listenerThread = new Thread(socketListener);
listenerThread.start();
+
+ loginOnServer();
} catch(Exception exception) {
socket = null;
try {
@@ -68,17 +95,6 @@ public class SocketManager {
}
}
- public static void closeSocketListener() {
- if(listenerThread != null && listenerThread.isAlive()) {
- try {
- socketListener.terminate();
- listenerThread.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
public static void logout() {
if(socket != null && socket.isConnected()) {
try {
@@ -97,9 +113,9 @@ public class SocketManager {
public static void loginOnServer() {
if(socket != null && socket.isConnected()) {
try {
- Packet packet = new Packet();
- packet.Tenant = tenant;
-
+ Packet packet = new Packet();
+ packet.Tenant = tenant;
+ packet.ChatMessage = getMACAddress();
packet.ChatDataIdentifier = DataIdentifier.LOGIN;
new Thread(new MessageSender(packet.getDataStream())).start();
@@ -109,7 +125,7 @@ public class SocketManager {
}
}
- public static class ConnectionClose implements Runnable{
+ public static class ConnectionCloser implements Runnable{
public void run(){
try {
if (dataOutputStream != null) {
@@ -121,7 +137,7 @@ public class SocketManager {
socket.close();
}
- }catch(IOException se){
+ } catch (IOException se) {
se.printStackTrace();
}
}
@@ -136,7 +152,7 @@ public class SocketManager {
@Override
public void run() {
- if(!socket.isConnected()) {
+ if(socket == null || !socket.isConnected()) {
Log.e("MESSAGE_SENDER", "Socket ist nicht verbunden");
}
@@ -145,6 +161,21 @@ public class SocketManager {
dataOutputStream.write(packetToSend);
dataOutputStream.flush();
} catch (IOException e) {
+ try {
+ Packet packet = new Packet(new String(packetToSend, "UTF-8"));
+
+ if(packet.ChatDataIdentifier == DataIdentifier.MESSAGE || packet.ChatDataIdentifier == DataIdentifier.TEAM) {
+ DatabaseHandler db = DatabaseHandler.getInstance(BeWoChatApplication.getInstance().getApplicationContext());
+ ChatMessage undeliveredMessage = db.getChatMessageById(packet.ClientseitigeOid);
+ if(undeliveredMessage != null) {
+ undeliveredMessage.IsDelivered = false;
+ int affectedRows = db.updateChatMessage(undeliveredMessage);
+ }
+ }
+ } catch (UnsupportedEncodingException e1) {
+ e1.printStackTrace();
+ }
+
e.printStackTrace();
}
}
@@ -182,9 +213,63 @@ public class SocketManager {
try {
chatPacket = new Packet(new String(message, "UTF-8"));
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
- Log.i(TAG, "Empfange Nachricht... " + chatPacket.ChatMessage);
+ if(chatPacket.ChatDataIdentifier.equals(DataIdentifier.LOGIN_SUCCESS) && loginCallback != null) {
+ Log.i(TAG, "Der Login war erfolgreich");
+ loginCallback.doCallback();
+ }
+
+ try {
+ switch (chatPacket.ChatDataIdentifier) {
+ case MESSAGE:
+
+ databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false));
+
+ break;
+
+ case TEAM:
+
+ databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true));
+
+ break;
+
+ case MESSAGE_RESPONSE:
+ ChatMessage cm = databaseHandler.getChatMessageById(chatPacket.ClientseitigeOid);
+
+ cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
+ cm.IsDelivered = true;
+
+ databaseHandler.updateChatMessage(cm);
+ break;
+ case STATUS_NOTIFICATION_LOGIN:
+
+ if(!SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
+ SocketManager.onlinePersonOids.add(chatPacket.SenderPersonOid);
+ }
+
+ break;
+ case STATUS_NOTIFICATION_LOGOUT:
+
+ if(SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
+ SocketManager.onlinePersonOids.remove(Integer.valueOf(chatPacket.SenderPersonOid));
+ }
+
+ break;
+
+ case STATUS_NOTIFICATION_LOGIN_BROADCAST:
+
+ String[] onlinePersons = chatPacket.ChatMessage.split(",");
+
+ for (String onlinePerson : onlinePersons) {
+ SocketManager.onlinePersonOids.add(Integer.parseInt(onlinePerson));
+ }
+
+ break;
+ }
} catch(Exception e) {
e.printStackTrace();
}
@@ -202,4 +287,36 @@ public class SocketManager {
}
}
}
+
+ public static String getMACAddress() {
+ try {
+ List all = Collections.list(NetworkInterface.getNetworkInterfaces());
+
+ for(NetworkInterface nif : all) {
+ if(!nif.getName().equalsIgnoreCase("wlan0")) {
+ continue;
+ }
+
+ byte[] macBytes = nif.getHardwareAddress();
+ if(macBytes == null) {
+ return "MAC-ADRESSE NICHT ERMITTELBAR";
+ }
+
+ StringBuilder res1 = new StringBuilder();
+ for(byte b : macBytes) {
+ res1.append(Integer.toHexString(b & 0xFF) + ":");
+ }
+
+ if(res1.length() > 0) {
+ res1.deleteCharAt(res1.length() - 1);
+ }
+
+ return res1.toString();
+ }
+ } catch(Exception ex) {
+ Log.e("GET_MAC_ADDRESS", ex.getMessage());
+ }
+
+ return "02:00:00:00:00:00";
+ }
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java
index 937e9fdd6..5949fe0cf 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java
@@ -31,7 +31,7 @@ public class ChatMessageDeserializer implements JsonDeserializer {
int recipientPersonOid = Long.valueOf(json.get("EmpfängerPersonOid").getAsLong()).intValue();
int serverseitigeOid = Long.valueOf(json.get("Oid").getAsLong()).intValue();
String chatText = json.get("ChatText").getAsString();
- boolean isDelivered = json.get("istZugestellt").getAsBoolean();
+ boolean isDelivered = json.get("IsDelivered").getAsBoolean();
boolean isTeam = !json.get("TeamOid").isJsonNull();
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/ConnectivityReceiver.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/ConnectivityReceiver.java
new file mode 100644
index 000000000..449304e26
--- /dev/null
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/ConnectivityReceiver.java
@@ -0,0 +1,67 @@
+package util;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.preference.PreferenceManager;
+
+import beyondsoft.bewomitarbeiterapp.BeWoChatApplication;
+
+/**
+ * Created by JettenM on 26.08.2016.
+ */
+public class ConnectivityReceiver extends BroadcastReceiver {
+ public static ConnectivityReceiverListener connectivityReceiverListener;
+
+ private static final String LOGTAG = "CONNECTIVITY";
+
+ private static final Long SYNCTIME = 800L;
+ private static final String LASTTIMESYNC = "DATE";
+ SharedPreferences sharedPreferences;
+
+ public ConnectivityReceiver() {
+ super();
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ NetworkInfo networkInfo = cm.getActiveNetworkInfo();
+
+ sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+
+ if(networkInfo != null && networkInfo.isConnected()) {
+ if(System.currentTimeMillis() - sharedPreferences.getLong(LASTTIMESYNC, 0) >= SYNCTIME) {
+ sharedPreferences.edit().putLong(LASTTIMESYNC, System.currentTimeMillis()).commit();
+
+ boolean isConnected = networkInfo.isConnected();
+
+ if(connectivityReceiverListener != null) {
+ connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
+ }
+ }
+ } else {
+ boolean isConnected = networkInfo != null && networkInfo.isConnected();
+
+ if(connectivityReceiverListener != null) {
+ connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
+ }
+ }
+ }
+
+ public static boolean isConnected() {
+ ConnectivityManager cm = (ConnectivityManager) BeWoChatApplication.getInstance().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+
+ return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
+ }
+
+ public interface ConnectivityReceiverListener {
+ void onNetworkConnectionChanged(boolean isConnected);
+ }
+}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java
new file mode 100644
index 000000000..0909af00f
--- /dev/null
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/NotificationBroadcastReceiver.java
@@ -0,0 +1,26 @@
+package util;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+/**
+ * Created by JettenM on 09.09.2016.
+ */
+public class NotificationBroadcastReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent)
+ {
+ String action = intent.getAction();
+ if(action.equals(Util.NOTIFICATION_CANCELLED))
+ {
+ Log.i("NOTIFICATION_CANCELLED", "Benachrichtigung gelöscht");
+
+ // nicht?
+ //Util.unreadMessagesCount--;
+
+ //TODO: auf die Konversationen achten
+ }
+ }
+}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
index 300bc8d71..db23b1cb1 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
+++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java
@@ -1,19 +1,35 @@
package util;
+import android.app.AlertDialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Map;
import java.util.Random;
+import Database.DatabaseHandler;
import beyondsoft.bewomitarbeiterapp.ChatActivity;
+import beyondsoft.bewomitarbeiterapp.KontaktChatActivity;
import beyondsoft.bewomitarbeiterapp.R;
+import entities.ChatEntity;
+import entities.ChatMessage;
+import entities.NotificationLog;
+import soapConnection.DataIdentifier;
+import soapConnection.Packet;
+import soapConnection.SoapConnectionManager;
+import tcpConnection.LoginCallback;
+import tcpConnection.SocketManager;
/**
* Created by JettenM on 05.07.2016.
@@ -28,34 +44,40 @@ public class Util {
public static final String PREFS_USERNAME_KEY = "username";
public static final String PREFS_PASSWORD = "password";
+ public static final String NOTIFICATION_CANCELLED = "notification_cancelled";
+
+ public static int unreadMessagesCount = 0;
+ public static int conversationsCount = 0;
+
+ //TODO: Notifications zählen. Bei Nachrichten verschiedener Unterhaltungen nur noch eine kleine Notification anzeigen mit "Sie haben x Nachrichten in y Unterhaltungen
+ public static void SetNotify(String username, String message, int recipientOid, boolean isTeam, String teamMemberOids, String teamMemberNames, Context packageContext) {
+ unreadMessagesCount++;
+ //TODO: unterscheiden, ob es sich um eine einzelne Benachrichtigung handelt
+
+ String mUsername = conversationsCount > 1 ? String.valueOf(conversationsCount) + " Konversationen" : username;
+ String mMessage = unreadMessagesCount > 1 ? String.valueOf(unreadMessagesCount) + " Nachrichten" : message;
- public static void SetNotify(String username, String message, int recipientOid, boolean isTeam, String teamMemberOids, String teamMemberNames, Context packageContext){
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(packageContext)
.setSmallIcon(R.drawable.ic_stat_name)
- .setContentTitle(username)
- .setContentText(message)
+ .setContentTitle(mUsername)
+ .setContentText(mMessage)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND)
.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }) //Notification.Default_Vibrate
- .setLights(Color.YELLOW, 3000, 3000) //Notification.Default_Lights
- .setOngoing(true);
+ .setLights(Color.YELLOW, 3000, 3000); //Notification.Default_Lights
- Log.i("CHAT_SET_NOTIFY", username + "; " + recipientOid + "; " + isTeam + "; " + teamMemberOids + "; " + teamMemberNames);
+ Intent resultIntent = new Intent(packageContext, (conversationsCount > 1 ? KontaktChatActivity.class : ChatActivity.class));
- Bundle bundle = new Bundle();
- bundle.putString("Name", username);
- bundle.putInt("RecipientOid", recipientOid);
- bundle.putBoolean("IsTeam", isTeam);
- bundle.putString("TeamMemberOids", teamMemberOids);
- bundle.putString("TeamMemberNames", teamMemberNames);
-
- //TODO: mehrere Notifications von mehrern Kontakten -> KontaktChatActivity öffnen, sonst ChatActivity
-
-
-
- Intent resultIntent = new Intent(packageContext, ChatActivity.class);
- resultIntent.putExtras(bundle);
+ if (conversationsCount <= 1) {
+ Bundle bundle = new Bundle();
+ bundle.putString("Name", username);
+ bundle.putInt("RecipientOid", recipientOid);
+ bundle.putBoolean("IsTeam", isTeam);
+ bundle.putString("TeamMemberOids", teamMemberOids);
+ bundle.putString("TeamMemberNames", teamMemberNames);
+ resultIntent.putExtras(bundle);
+ }
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -63,11 +85,119 @@ public class Util {
NotificationManager mNotifyMgr = (NotificationManager) packageContext.getSystemService(Context.NOTIFICATION_SERVICE);
-
-
+ mBuilder.setDeleteIntent(getDeletedIntent(packageContext));
mBuilder.setContentIntent(resultPendingIntent);
- mNotifyMgr.notify((new Random()).nextInt(9999 - 1000) + 1000, mBuilder.build());
+ Random random = new Random();
+ int notificationId = 1;
+ ChatEntity chatEntity = new ChatEntity(SoapConnectionManager.User.getPersonOid(), isTeam);
+ NotificationLog notificationLog = new NotificationLog(notificationId, Calendar.getInstance().getTime());
+
+ while(SocketManager.notificationEntities.containsValue(notificationLog)) {
+ notificationId = random.nextInt(10000);
+ notificationLog = new NotificationLog(notificationId, Calendar.getInstance().getTime());
+ }
+
+ SocketManager.notificationEntities.put(chatEntity, notificationLog);
+
+ //TODO: alte Notifications löschen ---------------------------------
+ ArrayList entities2remove = new ArrayList<>();
+
+ if(conversationsCount > 1 || unreadMessagesCount > 1) {
+ //TODO: differenzieren, welche Notifications gelöscht werden müssen. Alle bis auf die aktuelle Benachrichtigungen löschen.
+ for(Map.Entry entry : SocketManager.notificationEntities.entrySet()) {
+ if(!(entry.getKey().equals(chatEntity) && entry.getValue().equals(notificationLog))) {
+ mNotifyMgr.cancel(entry.getValue().getNotificationId());
+ entities2remove.add(entry.getKey());
+ }
+ }
+ }
+ //TODO: ------------------------------------------------------------
+
+ mNotifyMgr.notify(notificationId, mBuilder.build());
+ }
+
+ protected static PendingIntent getDeletedIntent(Context context) {
+ Intent intent = new Intent(context, NotificationBroadcastReceiver.class);
+ intent.setAction(Util.NOTIFICATION_CANCELLED);
+
+ return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+ }
+
+ public static void buildAlert(Context context, String message) {
+ AlertDialog.Builder alert = new AlertDialog.Builder(context);
+ alert.setMessage(message);
+ alert.setTitle("Debug-Info");
+ alert.setCancelable(true);
+
+ alert.setPositiveButton("OK",
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+
+ }
+ });
+
+ alert.create().show();
+ }
+
+ public static void reconnectWithServer(boolean isConnected, final Context context) {
+ Log.e("UTIL", isConnected ? "Ist mit dem Internet/WLAN verbunden" : "Ist mit keinem Netzwerk verbunden");
+
+ if(isConnected) {
+ try {
+ SocketManager.loginCallback = new LoginCallback() {
+ @Override
+ public void doCallback() {
+ Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Verschicke nicht verschickte Nachrichten...");
+
+ sendUnsentMessages(context);
+ }
+ };
+
+ SocketManager.connectToServer();
+
+ Log.i("RECONNECT_WITH_SERVER", "connectToServer aufgerufen...");
+ }
+ catch(Exception es) {
+ Log.e("RECONNECT_WITH_SERVER", "Ausnahme beim Login nach Reconnect");
+ es.printStackTrace();
+ }
+ }
+ }
+
+ public static void sendUnsentMessages(final Context context) {
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ DatabaseHandler databaseHandler = DatabaseHandler.getInstance(context);
+
+ ArrayList unsentMessages = databaseHandler.getUnsentChatMessages();
+
+ for(ChatMessage cm : unsentMessages) {
+ final Packet unsentPacket = new Packet();
+
+ unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
+ unsentPacket.ChatMessage = cm.ChatText;
+ unsentPacket.ChatName = SoapConnectionManager.User.getFullName();
+ unsentPacket.RecipientPersonOid = cm.RecipientPersonOid;
+ unsentPacket.ClientseitigeOid = cm.Id;
+ unsentPacket.MessageTimeStamp = cm.InsTs;
+ unsentPacket.SenderPersonOid = cm.SenderPersonOid;
+ unsentPacket.Tenant = SoapConnectionManager.User.getTenant();
+ unsentPacket.IsDelivered = cm.IsDelivered;
+
+ SocketManager.sendMessage(unsentPacket);
+
+ Thread.sleep(50);
+ }
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+
+ thread.start();
}
}
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectionoffline.png b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectionoffline.png
new file mode 100644
index 000000000..a5c8b9803
Binary files /dev/null and b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectionoffline.png differ
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectiononline.png b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectiononline.png
new file mode 100644
index 000000000..0ed3222b8
Binary files /dev/null and b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectiononline.png differ
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/activity_login.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/activity_login.xml
index 390b5148c..963e453ec 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/activity_login.xml
+++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/activity_login.xml
@@ -22,7 +22,7 @@
+ android:layout_height="wrap_content">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="@dimen/activity_horizontal_margin"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context=".ChatActivity">
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/contact_listview_item.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/contact_listview_item.xml
new file mode 100644
index 000000000..f128db92d
--- /dev/null
+++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/contact_listview_item.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/custom_menuebar.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/custom_menuebar.xml
index e3a89695e..ecee6abd0 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/custom_menuebar.xml
+++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/custom_menuebar.xml
@@ -9,9 +9,9 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/PersonalPic"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_centerVertical="true"
- android:layout_marginLeft="2dp"
+ android:layout_marginStart="2dp"
android:scaleType="fitXY"
/>
@@ -19,7 +19,6 @@
- />
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml
index 87d3136b5..26b6e515a 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml
+++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/kontakt_list_chat.xml
@@ -1,74 +1,18 @@
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/login.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/login.xml
deleted file mode 100644
index 77b9862a9..000000000
--- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/login.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/layout/webdoku.xml b/Android/BewoMitarbeiterApp/app/src/main/res/layout/webdoku.xml
index c3de58545..98e6fdbff 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/webdoku.xml
+++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/webdoku.xml
@@ -1,6 +1,8 @@
-
diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/menu/menu_kontaktchat_activity.xml b/Android/BewoMitarbeiterApp/app/src/main/res/menu/menu_kontaktchat_activity.xml
index 7ea1c9173..f0727250a 100644
--- a/Android/BewoMitarbeiterApp/app/src/main/res/menu/menu_kontaktchat_activity.xml
+++ b/Android/BewoMitarbeiterApp/app/src/main/res/menu/menu_kontaktchat_activity.xml
@@ -1,15 +1,16 @@
-