diff --git a/Android/BewoMitarbeiterApp/.idea/gradle.xml b/Android/BewoMitarbeiterApp/.idea/gradle.xml index bb1e6cef5..e5e9072bd 100644 --- a/Android/BewoMitarbeiterApp/.idea/gradle.xml +++ b/Android/BewoMitarbeiterApp/.idea/gradle.xml @@ -13,13 +13,7 @@ - + diff --git a/Android/BewoMitarbeiterApp/app/app.iml b/Android/BewoMitarbeiterApp/app/app.iml index fb99e4f6e..3d5797514 100644 --- a/Android/BewoMitarbeiterApp/app/app.iml +++ b/Android/BewoMitarbeiterApp/app/app.iml @@ -32,12 +32,14 @@ + + @@ -83,7 +85,6 @@ - @@ -93,9 +94,11 @@ + + @@ -114,10 +117,32 @@ - + + + + + + + + + + + + + + + + + + + + + + + \ 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 4791fa116..628a5144b 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/Database/DatabaseHandler.java @@ -50,6 +50,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { private static final String KEY_IS_TEAM = "isteam"; private static final String KEY_TEAM_MEMBER_OIDS = "teammemberoids"; private static final String KEY_TEAM_MEMBER_NAMES = "teammembernames"; + private static final String KEY_VERSION = "version"; // ChatMessage-Tabelle @@ -98,7 +99,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { KEY_PICTURE_BLOB + " BLOB, " + KEY_IS_TEAM + " INTEGER, " + KEY_TEAM_MEMBER_NAMES + " TEXT, " + - KEY_TEAM_MEMBER_OIDS + " TEXT)"; + KEY_TEAM_MEMBER_OIDS + " TEXT, " + + KEY_VERSION + " INTEGER)"; db.execSQL(CREATE_CONTACTS_TABLE); @@ -291,6 +293,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { values.put(KEY_IS_TEAM, contact.isTeam); values.put(KEY_TEAM_MEMBER_NAMES, contact.teamMemberNames); values.put(KEY_TEAM_MEMBER_OIDS, contact.teamMemberOids); + values.put(KEY_VERSION, contact.getVersion()); writableDatabase.insertOrThrow(TABLE_CONTACTS, null, values); } @@ -403,7 +406,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { KEY_PICTURE_BLOB, KEY_IS_TEAM, KEY_TEAM_MEMBER_NAMES, - KEY_TEAM_MEMBER_OIDS}, + KEY_TEAM_MEMBER_OIDS, + KEY_VERSION}, KEY_ID + "=?", new String[]{String.valueOf(id)}, null,null,null,null); @@ -418,8 +422,9 @@ public class DatabaseHandler extends SQLiteOpenHelper { boolean contactIsTeam = cursor.getInt(4) == 1; String teamMemberOids = cursor.getString(5); String teamMemberNames = cursor.getString(6); + int contactVersion = cursor.getInt(7); - ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames); + ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames, contactVersion); cursor.close(); @@ -447,6 +452,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { contact.isTeam = cursor.getInt(4) == 1; contact.teamMemberNames = cursor.getString(5); contact.teamMemberOids = cursor.getString(6); + contact.setVersion(cursor.getInt(7)); contactList.add(contact); } while (cursor.moveToNext()); @@ -499,6 +505,7 @@ public class DatabaseHandler extends SQLiteOpenHelper { values.put(KEY_IS_TEAM, (contact.isTeam ? 1 : 0)); values.put(KEY_TEAM_MEMBER_NAMES, contact.teamMemberNames); values.put(KEY_TEAM_MEMBER_OIDS, contact.teamMemberOids); + values.put(KEY_VERSION, contact.getVersion()); return writableDatabase.update(TABLE_CONTACTS, values, KEY_ID + " = ?", new String[] { String.valueOf(contact.getId()) }); } @@ -551,7 +558,8 @@ public class DatabaseHandler extends SQLiteOpenHelper { KEY_PICTURE_BLOB, KEY_IS_TEAM, KEY_TEAM_MEMBER_NAMES, - KEY_TEAM_MEMBER_OIDS}, + KEY_TEAM_MEMBER_OIDS, + KEY_VERSION}, KEY_PERSONOID + "=? AND " + KEY_IS_TEAM + "=?", new String[]{String.valueOf(personOid), String.valueOf((isTeam ? 1 : 0))}, null,null,null,null); @@ -565,8 +573,9 @@ public class DatabaseHandler extends SQLiteOpenHelper { boolean contactIsTeam = cursor.getInt(4) == 1; String teamMemberOids = cursor.getString(5); String teamMemberNames = cursor.getString(6); + int contactVersion = cursor.getInt(7); - ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames); + ContactListItem contact = new ContactListItem(contactId, contactName, contactPersonOid, contactPicture, contactIsTeam, teamMemberOids, teamMemberNames, contactVersion); cursor.close(); 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 571394f97..835c2da31 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/BeWoChatApplication.java @@ -5,6 +5,22 @@ import android.app.NotificationManager; import android.content.Context; import android.util.Log; +import com.octo.android.robospice.SpiceManager; +import com.octo.android.robospice.UncachedSpiceService; +import com.octo.android.robospice.persistence.exception.SpiceException; +import com.octo.android.robospice.request.listener.RequestListener; + +import org.ksoap2.serialization.PropertyInfo; +import org.ksoap2.serialization.SoapPrimitive; + +import java.util.ArrayList; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import soapConnection.JsonSoapPrimitiveRequest; +import soapConnection.SoapCalls; import util.ConnectivityReceiver; /** @@ -13,13 +29,42 @@ import util.ConnectivityReceiver; public class BeWoChatApplication extends Application { private Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler; + private static final SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class); + private static BeWoChatApplication mInstance; + private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + @Override public void onCreate() { super.onCreate(); mInstance = this; + + spiceManager.start(this); + + keepAlive(); + } + + public void keepAlive() { + final Runnable blubb = new Runnable() { + @Override + public void run() { + JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.KEEP_ALIVE, new ArrayList()); + spiceManager.execute(request, new JsonSoapPrimitiveRequestListener()); + + Log.i("LOOPER", "Halte Verbindung zum Soap-Server am leben..."); + } + }; + + final ScheduledFuture blubbHandle = scheduler.scheduleAtFixedRate(blubb, 10, 10, TimeUnit.MINUTES); + + scheduler.schedule(new Runnable() { + @Override + public void run() { + blubbHandle.cancel(true); + } + }, 10, TimeUnit.DAYS); } public static synchronized BeWoChatApplication getInstance() { @@ -49,4 +94,21 @@ public class BeWoChatApplication extends Application { Thread.setDefaultUncaughtExceptionHandler(uncaughtExceptionHandler); } + + private class JsonSoapPrimitiveRequestListener implements RequestListener { + + @Override + public void onRequestFailure(SpiceException spiceException) { + + } + + @Override + public void onRequestSuccess(SoapPrimitive soapPrimitive) { + if(soapPrimitive == null) { + Log.e("BEWOAPP", "Antwort ist null!"); + } else { + Log.i("BEWOAPP", "Die Antwort hat einen Wert"); + } + } + } } diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java index 4c07d07c2..b1986e9e7 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/ContactListItem.java @@ -1,5 +1,7 @@ package beyondsoft.bewomitarbeiterapp; +import entities.ChatPerson; + /** * Created by JettenM on 24.08.2016. */ @@ -8,6 +10,7 @@ public class ContactListItem { private String mChatName; private byte[] mPicture; private int mPersonOid; + private int mVersion; public boolean isTeam; public boolean isOnline; @@ -16,7 +19,7 @@ public class ContactListItem { public ContactListItem(){} - public ContactListItem(int id, String kontaktname, int personOid, byte[] picture, boolean isTeam, String teamMemberOids, String teamMemberNames){ + public ContactListItem(int id, String kontaktname, int personOid, byte[] picture, boolean isTeam, String teamMemberOids, String teamMemberNames, int version){ this.mId = id; this.mChatName = kontaktname; this.mPersonOid = personOid; @@ -24,15 +27,17 @@ public class ContactListItem { this.isTeam = isTeam; this.teamMemberNames = teamMemberNames; this.teamMemberOids = teamMemberOids; + this.mVersion = version; } - public ContactListItem(String kontaktname, int personOid, boolean isTeam, String teamMemberOids, String teamMemberNames){ + public ContactListItem(String kontaktname, int personOid, boolean isTeam, String teamMemberOids, String teamMemberNames, int version){ this.mChatName = kontaktname; this.mPersonOid = personOid; this.mPicture = null; this.isTeam = isTeam; this.teamMemberNames = teamMemberNames; this.teamMemberOids = teamMemberOids; + this.mVersion = version; } public int getId(){ @@ -73,4 +78,34 @@ public class ContactListItem { this.mPersonOid = mPersonOid; } + + public int getVersion() { + return mVersion; + } + + public void setVersion(int mVersion) { + this.mVersion = mVersion; + } + + @Override + public String toString() { + String result = ""; + + result += "Id: " + mId; + result += "\nChatName: " + mChatName; + result += "\nPersonOid: " + mPersonOid; + result += "\nIsTeam: " + isTeam; + if(isTeam) { + result += "\nTeam members: " + teamMemberNames; + result += "\nMember Oids: " + teamMemberOids; + } + + result += "\nVersion: " + mVersion; + + return result; + } + + public Boolean compareToChatPerson(ChatPerson chatPerson) { + return mPersonOid == chatPerson.Oid && isTeam == chatPerson.IsTeam; + } } 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 be53bbd38..236e5291d 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/KontaktChatActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; @@ -27,11 +28,15 @@ import org.ksoap2.serialization.SoapPrimitive; import java.io.ByteArrayOutputStream; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import Database.DatabaseHandler; +import entities.ChatEntity; import entities.ChatPerson; import soapConnection.JsonSoapPrimitiveRequest; +import soapConnection.OnRequestSuccessCallback; import soapConnection.Packet; import soapConnection.SoapCalls; import soapConnection.SoapConnectionManager; @@ -43,14 +48,16 @@ import util.Util; /** * Created by bib on 02.05.2016. */ -public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener { +public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener, SwipeRefreshLayout.OnRefreshListener { - private static final String LOGTAG = ""; + private static final String LOGTAG = "KONTAKT_CHAT_ACTIVITY"; private SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class); private DatabaseHandler databaseHandler; - public static ListView listView; + public ListView listView; + + private SwipeRefreshLayout swipeRefreshLayout; ArrayList contactList = new ArrayList<>(); @@ -64,6 +71,8 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi super.onCreate(savedInstanceState); setContentView(R.layout.kontakt_list_chat); + swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); + databaseHandler = DatabaseHandler.getInstance(this); listView = (ListView) findViewById(R.id.contact_listview); @@ -84,7 +93,6 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi 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); @@ -99,41 +107,49 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi } }); + swipeRefreshLayout.setOnRefreshListener(this); + + swipeRefreshLayout.post(new Runnable() { + @Override + public void run() { + swipeRefreshLayout.setRefreshing(true); + + updateContactList(); + } + } + ); + 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()); + } + + @Override + public void onRefresh() { + updateContactList(); + } + + private void updateContactList() { + swipeRefreshLayout.setRefreshing(true); + 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()); + spiceManager.execute(request, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() { + @Override + public void doCallback() { + Util.sendStatusRequest(); - - - - -// 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); -// -// if(i < test.size() - 1) { -// pExceptions += ";"; -// } -// } -// -// ArrayList propertyInfos2 = new ArrayList<>(); -// propertyInfos.add(SoapConnectionManager.BuildProperty("pSenderPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class)); -// propertyInfos.add(SoapConnectionManager.BuildProperty("pRecipientPersonOid", recipientPersonOid, Long.class)); -// propertyInfos.add(SoapConnectionManager.BuildProperty("pExceptions", pExceptions, String.class)); -// propertyInfos.add(SoapConnectionManager.BuildProperty("pIsForTeam", isTeam, Boolean.class)); -// -// JsonSoapPrimitiveRequest request2 = new JsonSoapPrimitiveRequest(SoapCalls.GET_ALL_CHAT_MESSAGES, propertyInfos); -// spiceManager.execute(request2, new JsonSoapPrimitiveRequestListenerForUnreadMessages()); + swipeRefreshLayout.setRefreshing(false); + } + })); } public UIHandler kontaktChatActivityUIHandler = new UIHandler() { @@ -185,6 +201,7 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi ka.notifyDataSetChanged(); } }); + break; case STATUS_NOTIFICATION_LOGIN_BROADCAST: runOnUiThread(new Runnable() { @@ -203,6 +220,25 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi } }); + break; + + case STATUS_REQUEST: + + Log.i(LOGTAG, "Aktualisiere die Kontaktliste"); + + runOnUiThread(new Runnable() { + @Override + public void run() { + KontaktAdapter ka =((KontaktAdapter) listView.getAdapter()); + + for(ContactListItem item : ka.values) { + item.isOnline = SocketManager.onlinePersonOids.contains(item.getPersonOid()); + } + + ka.notifyDataSetChanged(); + } + }); + break; } } catch(Exception pe) { @@ -290,6 +326,13 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi private final class JsonSoapPrimitiveRequestListener implements RequestListener { + //TODO: zusätzliches onRequestSuccess-Callback einbauen + OnRequestSuccessCallback callback; + + JsonSoapPrimitiveRequestListener(OnRequestSuccessCallback callback) { + this.callback = callback; + } + @Override public void onRequestFailure(SpiceException spiceException) { Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der Kontaktliste aufgetreten.", Toast.LENGTH_SHORT).show(); @@ -298,9 +341,11 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi @Override public void onRequestSuccess(SoapPrimitive soapPrimitive) { if(soapPrimitive == null) { - Log.i("KONTAKT_CHAT_ACTIVITY", "soapPrimitive ist NULL!"); + Log.e("KONTAKT_CHAT_ACTIVITY", "soapPrimitive ist NULL!"); } + Log.i(LOGTAG, "Lade Kontakte vom Server herunter"); + Gson gson = new GsonBuilder().create(); Type listType = new TypeToken>(){}.getType(); @@ -309,20 +354,31 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi List lc = databaseHandler.getAllContacts(); - List oidList = new ArrayList<>(); + Map oid2VersionList = new HashMap<>(); for(ContactListItem item : lc) { - oidList.add(item.getPersonOid()); + Log.i(LOGTAG, "Aus DB: Oid: " + item.getPersonOid() + "; Version: " + item.getVersion() + "; " + item.getChatName()); + oid2VersionList.put(new ChatEntity(item.getPersonOid(), item.isTeam), item.getVersion()); } for(ChatPerson cp : result) { - Log.i("KONTAKTLISTE", "Version: " + cp.Version); + ContactListItem contact = new ContactListItem(cp.Name, cp.Oid, cp.IsTeam, cp.TeamMemberOids, cp.TeamMemberNames, cp.Version); - if(!oidList.contains(cp.Oid)) { - databaseHandler.addContact(new ContactListItem(cp.Name, cp.Oid, cp.IsTeam, cp.TeamMemberOids, cp.TeamMemberNames)); + ChatEntity cliEntity = new ChatEntity(cp.Oid, cp.IsTeam); + + if(!oid2VersionList.containsKey(cliEntity)) { + databaseHandler.addContact(contact); + } else if(oid2VersionList.get(cliEntity) < cp.Version) { + + contact.setId(databaseHandler.getContactByPersonOid(cp.Oid, cp.IsTeam).getId()); + databaseHandler.updateContact(contact); + + //TODO: Team updaten, wenn Person Mitglied ist } } + oid2VersionList.clear(); + lc = databaseHandler.getAllContacts(); for(ContactListItem item : lc) { @@ -345,23 +401,10 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi listView.setAdapter(adapter); ((KontaktAdapter) listView.getAdapter()).notifyDataSetChanged(); - } - } - private final class JsonSoapPrimitiveRequestListenerForUnreadMessages implements RequestListener { - @Override - public void onRequestFailure(SpiceException spiceException) { - Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der ungelesenen Nachrichten aufgetreten.", Toast.LENGTH_SHORT).show(); - } - - @Override - public void onRequestSuccess(SoapPrimitive soapPrimitive) { - //TODO: Nachrichten, die empfangen wurden als man offline war, laden und jeweils die neueste anzeigen. - if(soapPrimitive == null) { - Log.i("KONTAKT_CHAT_ACTIVITY", "soapPrimitive ist NULL!"); + if(callback != null) { + callback.doCallback(); } - - Gson gson = new GsonBuilder().create(); } } } 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 f6773a3e3..bf30b91dc 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/beyondsoft/bewomitarbeiterapp/LoginActivity.java @@ -9,6 +9,7 @@ import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; + import android.text.TextUtils; import android.util.Base64; import android.util.Log; @@ -300,7 +301,6 @@ public class LoginActivity extends ActionBarActivity { SocketManager.tenant = mTenantView.getText().toString(); - //TODO: stattdessen ConnectToServer und im Callback die ChatActivity aufrufen SocketManager.loginCallback = new LoginCallback() { @Override public void doCallback() { diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java index d5231c693..92e3393ce 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/DataIdentifier.java @@ -18,7 +18,8 @@ public enum DataIdentifier { STATUS_NOTIFICATION_BESCHAEFTIGT(11), STATUS_NOTIFICATION_ONLINE(12), STATUS_NOTIFICATION_OFFLINE(13), - LOGIN_SUCCESS(14); + LOGIN_SUCCESS(14), + STATUS_REQUEST(15); private final int value; DataIdentifier(int value) { diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java new file mode 100644 index 000000000..fbd2fe1d6 --- /dev/null +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/OnRequestSuccessCallback.java @@ -0,0 +1,9 @@ +package soapConnection; + +/** + * Created by JettenM on 20.09.2016. + */ + +public interface OnRequestSuccessCallback { + void doCallback(); +} diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java index 5cab44727..2bc5ed252 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/soapConnection/SoapCalls.java @@ -9,6 +9,7 @@ public class SoapCalls { public static String GET_CONTACTS_FOR_PERSON = "GetContactsForPerson"; public static String GET_ALL_CHAT_MESSAGES = "GetAllChatMessagesForSenderAndRecipient"; + public static String KEEP_ALIVE = "KeepAlive"; //TODO: "app4.bewoplaner.de";// // public static String DESTINATION_ADDRESS = "app4.bewoplaner.de"; @@ -22,7 +23,6 @@ public class SoapCalls { // 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; diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java index 88c0397b0..e0c76f7d0 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/tcpConnection/SocketManager.java @@ -38,12 +38,12 @@ public class SocketManager { private static DatabaseHandler databaseHandler = DatabaseHandler.getInstance(BeWoChatApplication.getInstance()); public static String tenant; - public static Socket socket; - public static Thread listenerThread; - public static SocketListener socketListener; + private static Socket socket; + private static Thread listenerThread; + private static SocketListener socketListener; public static UIHandler uiHandler; public static LoginCallback loginCallback; - public static DataOutputStream dataOutputStream; + private static DataOutputStream dataOutputStream; public static ArrayList onlinePersonOids = new ArrayList<>(); public static ArrayList onlineEntities = new ArrayList<>(); @@ -86,7 +86,7 @@ public class SocketManager { public void run() { connectToServer(); } - }, 30000); + }, 5000); } catch(Exception exception2) { exception2.printStackTrace(); } @@ -299,6 +299,20 @@ public class SocketManager { } } + break; + + case STATUS_REQUEST: + + String contactsCsv = chatPacket.ChatMessage; + + String[] stringOids = contactsCsv.split(","); + + SocketManager.onlinePersonOids.clear(); + + for(String item : stringOids) { + SocketManager.onlinePersonOids.add(Integer.valueOf(item)); + } + break; } } catch(Exception e) { diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java index 869de1d4d..e2f165a39 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/ChatMessageDeserializer.java @@ -18,7 +18,6 @@ import entities.ChatMessage; * Created by JettenM on 09.08.2016. */ public class ChatMessageDeserializer implements JsonDeserializer { - private static final String LOGTAG = "MESSAGE_DESERIALIZER"; @Override public ChatMessage deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { diff --git a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java index f3ae7d4c9..12c12e28a 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java +++ b/Android/BewoMitarbeiterApp/app/src/main/java/util/Util.java @@ -13,6 +13,7 @@ import android.support.v4.app.NotificationCompat; import android.util.Log; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.Map; @@ -46,7 +47,6 @@ public class Util { public static final String NOTIFICATION_CANCELLED = "notification_cancelled"; - //public static int unreadMessagesCount = 0; public static int conversationsCount = 0; public static HashMap entity2MessagesCountRel = new HashMap<>(); @@ -171,6 +171,11 @@ public class Util { Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Verschicke nicht verschickte Nachrichten..."); sendUnsentMessages(context); + + sendStatusRequest(); + + // TODO: Nachrichten herunterladen, sofern man sich in der ChatActivity befindet + } }; @@ -220,6 +225,17 @@ public class Util { thread.start(); } + public static void sendStatusRequest() { + final Packet requestPacket = new Packet(); + + requestPacket.ChatDataIdentifier = DataIdentifier.STATUS_REQUEST; + requestPacket.ChatName = SoapConnectionManager.User.getFullName(); + requestPacket.SenderPersonOid = SoapConnectionManager.User.getPersonOid().intValue(); + requestPacket.Tenant = SoapConnectionManager.User.getTenant(); + + SocketManager.sendMessage(requestPacket); + } + public static ChatEntity getChatEntityFromOnlineEntitiesByOid(int personOid, boolean isTeam) { for(ChatEntity item : SocketManager.onlineEntities) { if(item.getOid() == personOid && item.isTeam() == isTeam) { @@ -245,4 +261,25 @@ public class Util { entity2MessagesCountRel.remove(entity); } } + + public static Integer[] convertStringArrayToIntegerArray(String[] arrayToConvert) { + Integer[] result = new Integer[arrayToConvert.length]; + + try { + for(int i = 0; i < arrayToConvert.length; i++) { + result[i] = Integer.parseInt(arrayToConvert[i]); + } + } catch(NumberFormatException nfe) { + Log.e("UTIL", nfe.getMessage()); + nfe.printStackTrace(); + + return null; + } + + return result; + } + + public static boolean contains(final Integer[] array, final int key) { + return Arrays.asList(array).contains(key); + } } diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/bewo_btn.xml b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/bewo_btn.xml new file mode 100644 index 000000000..c607d28e2 --- /dev/null +++ b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/bewo_btn.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/orange_button.xml b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/orange_button.xml new file mode 100644 index 000000000..b2530ba38 --- /dev/null +++ b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/orange_button.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/roundedbutton.xml b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/roundedbutton.xml deleted file mode 100644 index 1a5836519..000000000 --- a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/roundedbutton.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectionoffline.png b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectionoffline.png deleted file mode 100644 index a5c8b9803..000000000 Binary files a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectionoffline.png and /dev/null differ diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectiononline.png b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectiononline.png deleted file mode 100644 index 0ed3222b8..000000000 Binary files a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/serverconnectiononline.png and /dev/null differ diff --git a/Android/BewoMitarbeiterApp/app/src/main/res/drawable/textlines.xml b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/textlines.xml new file mode 100644 index 000000000..c9d711afe --- /dev/null +++ b/Android/BewoMitarbeiterApp/app/src/main/res/drawable/textlines.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file 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 963e453ec..81e389ad2 100644 --- a/Android/BewoMitarbeiterApp/app/src/main/res/layout/activity_login.xml +++ b/Android/BewoMitarbeiterApp/app/src/main/res/layout/activity_login.xml @@ -8,6 +8,7 @@ android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" + android:background="@color/white" tools:context="beyondsoft.bewomitarbeiterapp.LoginActivity"> @@ -37,7 +38,10 @@ android:hint="@string/prompt_token" android:inputType="text" android:maxLines="1" - android:singleLine="true"/> + android:paddingTop="10dp" + android:paddingBottom="2dp" + android:background="@drawable/textlines" + /> + android:paddingTop="10dp" + android:paddingBottom="2dp" + android:background="@drawable/textlines" + /> + android:paddingTop="10dp" + android:paddingBottom="2dp" + android:background="@drawable/textlines" + /> + android:paddingTop="10dp" + android:paddingBottom="3dp" + android:background="@drawable/textlines" + />