diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/AppPrefsConstants.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/AppPrefsConstants.java index b4710e4..f1a9a29 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/AppPrefsConstants.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/AppPrefsConstants.java @@ -18,4 +18,5 @@ public interface AppPrefsConstants { String UPLOAD_MAX_SIZE = "upload_max_size"; String IS_EMPLOYEE = "is_employee"; String SHOW_LOGIN_AGAIN = "show_login_again"; + String LAST_ACCOUNT_NO = "last_account_no"; } \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/ChatService.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/ChatService.java index 4504540..d2fac63 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/ChatService.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/ChatService.java @@ -1,5 +1,7 @@ package de.beyondsoft.ownchat.data.api.services; +import com.google.gson.JsonObject; + import de.beyondsoft.ownchat.data.api.responses.GroupResponse; import de.beyondsoft.ownchat.data.api.responses.MessageResponse; import de.beyondsoft.ownchat.data.api.responses.MessagesResponse; @@ -12,6 +14,7 @@ import retrofit2.http.GET; import retrofit2.http.Multipart; import retrofit2.http.POST; import retrofit2.http.Part; +import retrofit2.http.Path; import retrofit2.http.Query; import rx.Observable; @@ -26,6 +29,9 @@ public interface ChatService { Observable getMessages(@Query("groupid") long groupId, @Query("page") int page); + @GET("api/chat/message/{oid}") + Observable getMessage(@Path("oid") String messageId); + @Multipart @POST("api/chat/messages/send") Observable sendFile( diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/LoginService.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/LoginService.java index 0046a6d..89e86b2 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/LoginService.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/api/services/LoginService.java @@ -14,12 +14,6 @@ import rx.Observable; * Created by laszloffiferenc on 2/21/17. */ public interface LoginService { - @FormUrlEncoded - @POST("api/user/login") - Observable login( - @Field("username") String username, - @Field("password") String password - ); @FormUrlEncoded @POST("api/user/loginwithchatcode") diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/HandleMessagesService.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/HandleMessagesService.java index 26c5b6a..1098a93 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/HandleMessagesService.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/HandleMessagesService.java @@ -2,9 +2,11 @@ package de.beyondsoft.ownchat.data.firebase; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; +import com.google.gson.JsonObject; import de.beyondsoft.ownchat.R; import de.beyondsoft.ownchat.data.AppPrefsConstants; +import de.beyondsoft.ownchat.data.api.services.ChatService; import de.beyondsoft.ownchat.data.prefs.LongPreference; import de.beyondsoft.ownchat.data.repository.GroupRealmRepository; import de.beyondsoft.ownchat.data.repository.MessageRealmRepository; @@ -16,6 +18,8 @@ import de.beyondsoft.ownchat.model.Message; import de.beyondsoft.ownchat.page.main.MainActivity; import de.beyondsoft.ownchat.utils.Constants; import de.beyondsoft.ownchat.utils.LoggedOutUtils; +import de.beyondsoft.ownchat.utils.rx.RxUtils; +import rx.Subscriber; import android.app.Activity; import android.app.Notification; @@ -55,6 +59,9 @@ import static de.beyondsoft.ownchat.utils.Constants.CHAT_IS_ALREADY_OPEN; */ public class HandleMessagesService extends FirebaseMessagingService { + @Inject + ChatService mChatService; + @Inject MessageRealmRepository mMessageRealmRepository; @@ -93,23 +100,52 @@ public class HandleMessagesService extends FirebaseMessagingService { } } - private void customizeNotification(Map data) { - Bundle bundle = new Bundle(); - bundle.putString(Constants.MESSAGE_ID, data.get(Constants.MESSAGE_ID)); - bundle.putLong(Constants.GROUP_ID, Long.parseLong(data.get(Constants.GROUP_ID))); - bundle.putLong(Constants.CREATED_AT, Long.parseLong(data.get(Constants.CREATED_AT))); - bundle.putString(Constants.MESSAGE_TEXT, data.get(Constants.MESSAGE_TEXT)); - bundle.putString(Constants.FILE, data.get(Constants.FILE)); - bundle.putString(Constants.SMALLER_IMAGE, data.get(Constants.SMALLER_IMAGE)); - bundle.putString(Constants.FILENAME, data.get(Constants.FILENAME)); - bundle.putLong(Constants.USER_ID, Long.parseLong(data.get(Constants.USER_ID))); - bundle.putString(Constants.USERNAME, data.get(Constants.USERNAME)); - bundle.putString(Constants.USER_AVATAR, data.get(Constants.USER_AVATAR)); + private void customizeNotification(Map dataMap) { + String messageId = dataMap.get(Constants.MESSAGE_ID); - final Bitmap bitmap = getBitmapFromUrl(data.get(Constants.USER_AVATAR)); + mChatService.getMessage(messageId) + .compose(RxUtils.provideDefaultTransformer()) + .subscribe(new Subscriber() { + @Override + public void onCompleted() {} + + @Override + public void onError(Throwable e) { + e.printStackTrace(); + } + + @Override + public void onNext(JsonObject remoteMessage) { + notifyTheUser(remoteMessage); + } + }); + } + + private String getJsonString(JsonObject object, String memberName) { + return object.get(memberName).isJsonNull() ? null : object.get(memberName).getAsString(); + } + + private void notifyTheUser(JsonObject remoteMessage) { + Bundle bundle = new Bundle(); + bundle.putString(Constants.MESSAGE_ID, getJsonString(remoteMessage, Constants.MESSAGE_ID)); + bundle.putLong(Constants.GROUP_ID, remoteMessage.get(Constants.GROUP_ID).getAsLong()); + bundle.putLong(Constants.CREATED_AT, remoteMessage.get(Constants.CREATED_AT).getAsLong()); + bundle.putString(Constants.MESSAGE_TEXT, getJsonString(remoteMessage, Constants.MESSAGE_TEXT)); + bundle.putString(Constants.FILE, getJsonString(remoteMessage, Constants.FILE)); + + bundle.putString(Constants.SMALLER_IMAGE, getJsonString(remoteMessage, Constants.SMALLER_IMAGE)); + + bundle.putString(Constants.FILENAME, getJsonString(remoteMessage, Constants.FILENAME)); + + bundle.putLong(Constants.USER_ID, remoteMessage.get(Constants.USER_ID).getAsLong()); + bundle.putString(Constants.USERNAME, getJsonString(remoteMessage, Constants.USERNAME)); + bundle.putString(Constants.USER_AVATAR, getJsonString(remoteMessage, Constants.USER_AVATAR)); + + final Bitmap bitmap = getBitmapFromUrl(remoteMessage.get(Constants.USER_AVATAR).getAsString()); Intent intent = new Intent(); intent.putExtra(Constants.MESSAGE, bundle); intent.setAction(Constants.NOTIFICATION_BROADCAST); + sendOrderedBroadcast(intent, null, new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -117,7 +153,7 @@ public class HandleMessagesService extends FirebaseMessagingService { if (!results.getBoolean(CHAT_IS_ALREADY_OPEN, false)) { int groupId = (int) bundle.getLong(Constants.GROUP_ID); - int numberOfUsers = Integer.parseInt(data.get(Constants.GROUP_NR_USERS)); + int numberOfUsers = remoteMessage.get(Constants.GROUP_NR_USERS).getAsInt(); intent = MainActivity.createIntent(context, bundle, numberOfUsers, groupId); PendingIntent pendingIntent = PendingIntent.getActivity(context, @@ -134,10 +170,10 @@ public class HandleMessagesService extends FirebaseMessagingService { NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(getNotificationIcon()) - .setContentTitle(setNotificationTitle(data, numberOfUsers)) - .setContentText(getTextFromNotification(data)) + .setContentTitle(remoteMessage.get(Constants.USERNAME).getAsString() + (numberOfUsers > 2 ? " @ " +remoteMessage.get(Constants.GROUP_NAME).getAsString() : "")) + .setContentText(getTextFromNotification(remoteMessage)) .setAutoCancel(true) - .setStyle(new NotificationCompat.BigTextStyle().bigText(getTextFromNotification(data))) + .setStyle(new NotificationCompat.BigTextStyle().bigText(getTextFromNotification(remoteMessage))) .setPriority(Notification.PRIORITY_MAX) .setContentIntent(pendingIntent) .setLargeIcon(getCircleBitmap(bitmapToDisplay)) @@ -242,14 +278,17 @@ public class HandleMessagesService extends FirebaseMessagingService { .build(); } - private String getTextFromNotification(Map data) { + private String getTextFromNotification(JsonObject jsonObject) { String message = null; - if (data.get(Constants.MESSAGE_TEXT) != null) { - message = String.valueOf(data.get(Constants.MESSAGE_TEXT)); + + if (!jsonObject.get(Constants.MESSAGE_TEXT).isJsonNull()) { + message = jsonObject.get(Constants.MESSAGE_TEXT).getAsString(); } - if (!data.get(Constants.FILE).equals("")) { + + if (!jsonObject.get(Constants.FILE).isJsonNull() && !jsonObject.get(Constants.FILE).getAsString().equals("")) { message = getString(R.string.chat_file_received); } + return message; } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/prefs/AppPrefsModule.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/prefs/AppPrefsModule.java index 0c459fd..d3d8fde 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/prefs/AppPrefsModule.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/prefs/AppPrefsModule.java @@ -68,6 +68,13 @@ public class AppPrefsModule { return new StringPreference(sharedPreferences, AppPrefsConstants.ACCOUNT_NO); } + @Provides + @ApplicationScope + @Named(AppPrefsConstants.LAST_ACCOUNT_NO) + StringPreference provideLastAccountNumber(@AppPrefs SecurePreferences sharedPreferences) { + return new StringPreference(sharedPreferences, AppPrefsConstants.LAST_ACCOUNT_NO); + } + @Provides @ApplicationScope @Named(AppPrefsConstants.USER_ID) diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/di/ApplicationComponent.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/di/ApplicationComponent.java index 54341c9..c9e14bb 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/di/ApplicationComponent.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/di/ApplicationComponent.java @@ -58,6 +58,9 @@ public interface ApplicationComponent { @Named(AppPrefsConstants.ACCOUNT_NO) StringPreference provideAccountNumber(); + @Named(AppPrefsConstants.LAST_ACCOUNT_NO) + StringPreference provideLastAccountNumber(); + @Named(AppPrefsConstants.USER_ID) LongPreference provideUserId(); diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/model/Message.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/model/Message.java index ef1bd37..e787108 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/model/Message.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/model/Message.java @@ -108,6 +108,7 @@ public class Message { if (status == null) { return STATUS_DELIVERED; } + switch (status) { case DELIVERED: return STATUS_DELIVERED; @@ -116,6 +117,7 @@ public class Message { case PENDING: return STATUS_PENDING; } + return 1; } } @@ -150,6 +152,7 @@ public class Message { if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } @@ -159,42 +162,54 @@ public class Message { if (senderId != message1.senderId) { return false; } + if (groupId != message1.groupId) { return false; } + if (createdAt != message1.createdAt && createdAt != message1.createdAt * 1000 && createdAt * 1000 != message1.createdAt) { return false; } + if (!id.equals(message1.id)) { return false; } + if (uri != null ? !uri.equals(message1.uri) : message1.uri != null) { return false; } + if (senderName != null ? !senderName.equals(message1.senderName) : message1.senderName != null) { return false; } + if (senderAvatar != null ? !senderAvatar.equals(message1.senderAvatar) : message1.senderAvatar != null) { return false; } + if (message != null ? !message.equals(message1.message) : message1.message != null) { return false; } + if (filePath != null ? !filePath.equals(message1.filePath) : message1.filePath != null) { return false; } + if (smallerImage != null ? !smallerImage.equals(message1.smallerImage) : message1.smallerImage != null) { return false; } + if (isRead != ((Message) o).isRead) { return false; } + return status == message1.status; } @Override public int hashCode() { int result = id.hashCode(); + result = 31 * result + (int) (senderId ^ (senderId >>> 32)); result = 31 * result + (senderName != null ? senderName.hashCode() : 0); result = 31 * result + (senderAvatar != null ? senderAvatar.hashCode() : 0); @@ -205,6 +220,7 @@ public class Message { result = 31 * result + (smallerImage != null ? smallerImage.hashCode() : 0); result = 31 * result + (int) (createdAt ^ (createdAt >>> 32)); result = 31 * result + (status != null ? status.hashCode() : 0); + return result; } @@ -233,6 +249,7 @@ public class Message { return true; } } + return false; } } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatAdapter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatAdapter.java index de1f5f6..f491cbf 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatAdapter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatAdapter.java @@ -155,11 +155,14 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter 1) { lastDay.setTimeInMillis(mMessages.get(1).createdAt); } + Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(message.createdAt); + if (calendar.get(Calendar.DAY_OF_YEAR) != lastDay.get(Calendar.DAY_OF_YEAR)) { // New date inserted setMessages(new ArrayList<>(mMessages)); @@ -180,13 +183,16 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter currentDatePositions = new ArrayList<>(); boolean newDateAdded = false; + if (calendar.get(Calendar.DAY_OF_YEAR) != lastDay.get(Calendar.DAY_OF_YEAR)) { currentDatePositions.add(1); newDateAdded = true; } + for (int i = 0, size = mDatePositions.size(); i < size; i++) { currentDatePositions.add(mDatePositions.get(i) + (newDateAdded ? 2 : 1)); } + mDatePositions.clear(); mDatePositions.addAll(currentDatePositions); @@ -300,13 +306,14 @@ abstract class BaseChatAdapter extends RecyclerView.Adapter implements Cha getView().hideMessagesLoading(); return; } + mGroupId = groupId; + Subscription subscription = mChatService.getMessages(groupId, mPage) .compose(RxUtils.provideDefaultTransformer()) .flatMap(new ErrorHandlingResponseConverter<>()) @@ -125,12 +127,15 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha @Override public Observable> call(MessagesResponse messageResponse) { ArrayList messages = messageResponse.response.messages; + for (int i = 0, size = messages.size(); i < size; i++) { messages.get(i).status = Message.Status.DELIVERED; messages.get(i).isRead = true; messages.get(i).userId = mUserIdPreference.get(); } + mFetchMore = messageResponse.response.hasMorePages; + return Observable.just(messageResponse.response.messages); } }) @@ -204,27 +209,34 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha if (messages == null) { return; } + for (int i = 0; i < messages.size(); i++) { if (!isAttached()) { break; } + Message message = messages.get(i); mMessages.add(message); + getView().addOneMessage(message); } } + /** * Send error messages to view. */ private void fetchNewMessagesError(Throwable throwable) { Log.e("fetchNewMessages", "onError", throwable); + if (!isAttached()) { return; } + if (mSystemUtils.isNetworkUnavailable()) { getView().showError(R.string.error_no_internet_connection); return; } + getView().showError(R.string.error_something_went_wrong); } @@ -300,18 +312,23 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha if (!isAttached()) { return; } + mMessages.clear(); mMessages.addAll(messages); mLoading = false; getView().hideLoading(); getView().hideMessagesLoading(); + if (!mMessages.isEmpty()) { int endOffset = mOffset + LIMIT > mMessages.size() ? mMessages.size() : mOffset + LIMIT; if (mOffset > endOffset) { return; } + boolean isFirstPage = mPage == FIRST_PAGE; + getView().messagesLoaded(new ArrayList<>(mMessages.subList(mOffset, endOffset)), isFirstPage); + if (isFirstPage && mSystemUtils.isNetworkUnavailable()) { Message firstMessage = mMessages.get(0); Message message = new Message(firstMessage.id, @@ -331,10 +348,13 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha firstMessage.fileDownloaded); storeGroupLocally(mGroupId, message); } + mPage++; mOffset += LIMIT; + return; } + getView().showEmptyMessage(); } @@ -342,6 +362,7 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha if (!isAttached()) { return; } + mLoading = false; getView().hideLoading(); getView().hideMessagesLoading(); @@ -356,17 +377,21 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha getView().hideMessagesLoading(); return; } + mLoading = true; + if (mPage == FIRST_PAGE) { getView().showLoading(); } else { getView().showMessagesLoading(); } + if (mSystemUtils.isNetworkUnavailable()) { loadMessagesFromDBByGroupId(); getView().showError(R.string.error_no_internet_connection); return; } + loadMessagesFromServerByGroupId(mGroupId); } @@ -496,6 +521,7 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha getView().fileDownloadedSuccessfully(filePath, FileUtils.getFileTypeFromFilePath(filePath)); return; } + downloadFileFromUrl(message.filePath, filePath, itemPosition) .compose(RxUtils.provideDefaultTransformer()) .subscribe(new Subscriber() { @@ -523,10 +549,13 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha if (!isAttached()) { return; } + getView().stopItemProgress(itemPosition); getView().fileDownloadedSuccessfully(filePath, fileType); + message.fileDownloaded = true; message.createdAt /= 1000; + storeMessageLocally(message).subscribe(); } }); @@ -593,6 +622,7 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha }); return; } + mChatService.sendMessage(message.groupId, message.message) .compose(RxUtils.provideDefaultTransformer()) .flatMap(new ErrorHandlingResponseConverter<>()) @@ -642,6 +672,7 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha true, mUserIdPreference.get(), false); + storeMessageLocally(message) .subscribe(new Subscriber() { @Override @@ -654,6 +685,7 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha storeGroupLocally(mGroupId, message); return; } + checkForEmptyMessageAndHideIt(); message.createdAt *= 1000; getView().addOneMessage(message); @@ -675,13 +707,16 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha newMessage.isRead = true; storeMessageLocally(newMessage, message.id, false); storeGroupLocally(mGroupId, message); + if (!isAttached()) { return; } + if (mSystemUtils.isNetworkUnavailable()) { getView().showError(R.string.error_no_internet_connection); return; } + getView().showError(R.string.error_something_went_wrong); } @@ -723,13 +758,17 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha messageToDelete.id = oldMessageId; messageToDelete.removeFromList(mMessages); mMessages.add(newMessage); + if (!isAttached()) { mMessageToUpdate.add(new Pair<>(newMessage, oldMessageId)); return; } + getView().lastMessageUpdated(newMessage, oldMessageId); + return; } + mPage = FIRST_PAGE; mOffset = 0; loadMessagesFromDBByGroupId(); diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatAdapter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatAdapter.java index a3467c2..f4fed3b 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatAdapter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatAdapter.java @@ -34,12 +34,14 @@ class GroupChatAdapter extends BaseChatAdapter { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_date, parent, false); return new DateViewHolder(view); } + ProgressBar progressBar = new ProgressBar(parent.getContext()); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER; params.setMargins(0, (int) parent.getContext().getResources().getDimension(R.dimen.messages_progress_top_margin), 0, 0); progressBar.setLayoutParams(params); ViewUtils.setProgressBarColor(progressBar, R.color.colorWhite); + return new ProgressViewHolder(progressBar); } @@ -62,6 +64,7 @@ class GroupChatAdapter extends BaseChatAdapter { final Message rightMessage = mMessages.get(position - mPositionOffset.get(position)); MessageViewHolder rightMessageViewHolder = (MessageViewHolder) holder; setGroupMessage(rightMessageViewHolder, rightMessage, position, false); + if (rightMessage.status == Message.Status.DELIVERED) { rightMessageViewHolder.statusProgressBar.setVisibility(View.GONE); rightMessageViewHolder.statusImageView.setVisibility(View.VISIBLE); @@ -78,6 +81,7 @@ class GroupChatAdapter extends BaseChatAdapter { rightMessageViewHolder.sendingFailedTextView.setVisibility(View.GONE); rightMessageViewHolder.statusImageView.setVisibility(View.GONE); } + break; } } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chatmembers/ChatMembersAdapter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chatmembers/ChatMembersAdapter.java index 2dd0fdf..ea9b964 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chatmembers/ChatMembersAdapter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chatmembers/ChatMembersAdapter.java @@ -37,8 +37,7 @@ class ChatMembersAdapter extends RecyclerView.Adapter { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_member, parent, - false); + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat_member, parent, false); return new ContactViewHolder(view); } @@ -47,13 +46,14 @@ class ChatMembersAdapter extends RecyclerView.Adapter { ContactViewHolder viewHolder = (ContactViewHolder) holder; User user = mUsers.get(position); viewHolder.contactTextView.setText(String.format(Locale.getDefault(), "%s %s", user.firstName, user.lastName)); - viewHolder.contactTextView.setTextColor(ContextCompat.getColor(viewHolder.contactTextView.getContext(), - user.isEmployee ? R.color.colorBlack : R.color.colorHelpGroup)); + viewHolder.contactTextView.setTextColor(ContextCompat.getColor(viewHolder.contactTextView.getContext(), user.isEmployee ? R.color.colorBlack : R.color.colorHelpGroup)); viewHolder.phoneImageView.setVisibility(TextUtils.isEmpty(user.mobile) ? View.GONE : View.VISIBLE); + if (TextUtils.isEmpty(user.avatar)) { viewHolder.avatarCircleImageView.setImageResource(R.drawable.avatar_list); return; } + Glide.with(viewHolder.avatarCircleImageView.getContext()) .load(user.avatar) .placeholder(R.drawable.avatar) diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginPresenter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginPresenter.java index 83df25e..93b4580 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginPresenter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginPresenter.java @@ -92,6 +92,10 @@ public class LoginPresenter extends MVPAbstractPresenter implements L @Named(AppPrefsConstants.ACCOUNT_NO) StringPreference mAccountNumberPreference; + @Inject + @Named(AppPrefsConstants.LAST_ACCOUNT_NO) + StringPreference mLastAccountNumberPreference; + @Inject @Named(AppPrefsConstants.AVATAR) StringPreference mAvatarPreference; @@ -229,6 +233,14 @@ public class LoginPresenter extends MVPAbstractPresenter implements L * @param user {@code User} the current logged in user. */ private void loginSuccess(User user) { + String accountNumber = mAccountNumberPreference.get(); + String lastAccountNumber = mLastAccountNumberPreference.get(); + + if(!accountNumber.equals(lastAccountNumber)) { + //deleteData(true); + deleteData2(); + } + mIsEmployee.set(user.isEmployee); mChatCodePreference.set(mLastVoucher); mLoginTokenPreference.set(user.token); @@ -295,6 +307,8 @@ public class LoginPresenter extends MVPAbstractPresenter implements L */ @Override public void checkTypeAndCustomerId(String customerId, String password, boolean isChecked) { + mLastAccountNumberPreference.set(mAccountNumberPreference.get()); + mAccountNumberPreference.set(customerId); mSavePasswordPreference.set(isChecked); @@ -529,6 +543,7 @@ public class LoginPresenter extends MVPAbstractPresenter implements L Observable.create(subscriber -> mGlide.clearDiskCache()) .subscribeOn(Schedulers.io()) .subscribe(); + mGlide.clearMemory(); mSharedPreferences.edit().clear().apply(); mAccountNumberPreference.deleteFromSecurePreference(); @@ -570,6 +585,45 @@ public class LoginPresenter extends MVPAbstractPresenter implements L } } + private void deleteData2() { +// Observable.create(subscriber -> mGlide.clearDiskCache()) +// .subscribeOn(Schedulers.io()) +// .subscribe(); +// +// mGlide.clearMemory(); + + File dir = mContext.getExternalFilesDir(null); + + if (dir != null) { + if (dir.isDirectory()) { + String[] children = dir.list(); + + for (String aChildren : children) { + //noinspection ResultOfMethodCallIgnored + new File(dir, aChildren).delete(); + } + } else { + Log.e("deleteData", dir.getAbsolutePath() + " is not a directory!"); + } + } else { + dir = new File(Environment.getExternalStorageDirectory(), "BeWoPlaner"); + + if (dir.isDirectory()) { + String[] children = dir.list(); + + for (String aChildren : children) { + //noinspection ResultOfMethodCallIgnored + new File(dir, aChildren).delete(); + } + } else { + Log.e("deleteData", dir.getAbsolutePath() + " is not a directory!"); + } + } + + Realm realm = mRealmProvider.provide(); + realm.executeTransaction(realm1 -> realm1.deleteAll()); + } + private boolean checkPassword(String password) { if (password.length() >= 1) { return true; diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/main/MainActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/main/MainActivity.java index 900ded8..185a154 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/main/MainActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/main/MainActivity.java @@ -261,7 +261,6 @@ public class MainActivity extends AppCompatActivity implements MainNavigation, L @SuppressWarnings("unused") @Subscribe(threadMode = ThreadMode.MAIN) public void onInvalidToken(InvalidTokenEvent invalidTokenEvent) { - Log.d("INVALID TOKEN", " invalid token event fired"); mLoginPresenter.verifyChatCode(this); } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_group_chat_left.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_group_chat_left.xml index 36fdc84..40f29da 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_group_chat_left.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/layout/item_group_chat_left.xml @@ -18,6 +18,7 @@ android:layout_width="40dp" android:layout_height="40dp" android:contentDescription="@null" + android:scaleType="centerCrop" tools:src="@drawable/avatar" />