From 7612b2aa97f345aeb5e9c30ecedcfc6b63f1d8fa Mon Sep 17 00:00:00 2001 From: Lyndon Date: Fri, 1 Jun 2018 19:22:22 +0200 Subject: [PATCH] =?UTF-8?q?LED=20leuchtet=20wieder=20Gruppenbenachrichtigu?= =?UTF-8?q?ngen=20werden=20beim=20=C3=B6ffnen=20der=20betreffenden=20Grupp?= =?UTF-8?q?e=20gel=C3=B6scht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bewoplaner-chat-android/app/build.gradle | 54 ++++----- .../app/src/main/AndroidManifest.xml | 5 - .../ownchat/BewoplanerApplication.java | 23 ++-- .../data/firebase/HandleMessagesService.java | 107 ++++++++++++------ .../data/firebase/NotificationUtils.java | 38 +++++++ .../firebase/ReplyNotificationReceiver.java | 52 +++++++-- .../ownchat/page/chat/BaseChatActivity.java | 66 ++++++----- .../ownchat/page/chat/ChatPresenter.java | 2 + .../ownchat/page/chat/GroupChatActivity.java | 87 +++++++------- .../ownchat/page/chat/SingleChatActivity.java | 16 ++- .../page/contacts/ContactsAdapter.java | 6 + .../ownchat/page/login/LoginActivity.java | 1 + .../ownchat/page/login/LoginPresenter.java | 2 - .../beyondsoft/ownchat/utils/FileUtils.java | 3 + .../app/src/main/res/values/strings.xml | 3 +- .../bewoplaner-chat-android/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- 17 files changed, 301 insertions(+), 172 deletions(-) create mode 100644 BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/NotificationUtils.java diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle b/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle index 4c261c1..4aa5764 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle @@ -17,7 +17,6 @@ apply plugin: 'com.android.application' apply plugin: 'io.fabric' - repositories { maven { url 'https://maven.fabric.io/public' } maven { url "https://dl.bintray.com/hani-momanii/maven" } @@ -28,7 +27,7 @@ apply plugin: 'realm-android' android { compileSdkVersion 26 - buildToolsVersion '26.0.2' + buildToolsVersion '27.0.3' defaultConfig { applicationId "de.beyondsoft.ownchat" @@ -78,8 +77,8 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation fileTree(include: ['*.jar'], dir: 'libs') + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) // Android support libraries @@ -90,7 +89,7 @@ dependencies { // OkHttp // Glide // Circle ImageView - compile('com.crashlytics.sdk.android:crashlytics:2.6.6@aar') { + implementation('com.crashlytics.sdk.android:crashlytics:2.6.6@aar') { transitive = true } // Secure Preferences @@ -98,31 +97,32 @@ dependencies { // emojis // circle progress // event bus - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.android.support:design:26.1.0' - compile 'com.jakewharton:butterknife:8.4.0' - compile 'com.google.dagger:dagger:2.7' - compile 'io.reactivex:rxjava:1.1.6' - compile 'io.reactivex:rxandroid:1.2.1' - compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' - compile 'com.squareup.retrofit2:retrofit:2.1.0' - compile 'com.squareup.retrofit2:converter-gson:2.1.0' - compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' - compile 'com.squareup.okhttp3:okhttp:3.7.0' - compile 'com.squareup.okhttp3:logging-interceptor:3.4.1' - compile 'com.github.bumptech.glide:glide:3.7.0' - compile 'de.hdodenhof:circleimageview:2.1.0' - compile 'com.scottyab:secure-preferences-lib:0.1.4' - compile 'com.google.firebase:firebase-messaging:11.6.2' - compile 'hani.momanii.supernova_emoji_library:supernova-emoji-library:0.0.2' - compile 'com.github.lzyzsd:circleprogress:1.2.1' - compile 'org.greenrobot:eventbus:3.0.0' - testCompile 'junit:junit:4.12' + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:design:26.1.0' + implementation 'com.jakewharton:butterknife:8.4.0' + implementation 'com.google.dagger:dagger:2.7' + implementation 'io.reactivex:rxjava:1.1.6' + implementation 'io.reactivex:rxandroid:1.2.1' + implementation 'com.jakewharton.rxbinding:rxbinding:0.4.0' + implementation 'com.squareup.retrofit2:retrofit:2.1.0' + implementation 'com.squareup.retrofit2:converter-gson:2.1.0' + implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0' + implementation 'com.squareup.okhttp3:okhttp:3.7.0' + implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1' + implementation 'com.github.bumptech.glide:glide:3.7.0' + implementation 'de.hdodenhof:circleimageview:2.1.0' + implementation 'com.scottyab:secure-preferences-lib:0.1.4' + implementation 'com.google.firebase:firebase-messaging:17.0.0' + implementation 'com.google.firebase:firebase-core:16.0.0' + implementation 'hani.momanii.supernova_emoji_library:supernova-emoji-library:0.0.2' + implementation 'com.github.lzyzsd:circleprogress:1.2.1' + implementation 'org.greenrobot:eventbus:3.0.0' + testImplementation 'junit:junit:4.12' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.7' - provided 'javax.annotation:jsr250-api:1.0' + compileOnly 'javax.annotation:jsr250-api:1.0' implementation files('libs/sanselan-0_97-android-1.0.0.jar') - compile 'com.firebase:firebase-jobdispatcher:0.5.2' + implementation 'com.firebase:firebase-jobdispatcher:0.5.2' } task adp2upload(type: Exec, dependsOn: "build") { diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml index 6587dee..aefa828 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml @@ -91,11 +91,6 @@ - - = Build.VERSION_CODES.O) { - NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - String channelId = getString(R.string.default_notification_channel_id); - - if(manager != null && manager.getNotificationChannel(channelId) == null) { - NotificationChannel channel = new NotificationChannel(channelId, getString(R.string.default_notification_channel_id), NotificationManager.IMPORTANCE_HIGH); - channel.setDescription(getString(R.string.default_notification_channel_id)); - - manager.createNotificationChannel(channel); - } - } } private void buildGraphAndInject() { @@ -75,4 +66,12 @@ public class BewoplanerApplication extends Application { public static Context getAppContext() { return mContext; } + + public static NotificationUtils getNotificationUtils() { + if(mNotificationUtils == null) { + mNotificationUtils = new NotificationUtils(mContext); + } + + return mNotificationUtils; + } } 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 aa3e7d6..404f9e2 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 @@ -3,6 +3,7 @@ package de.beyondsoft.ownchat.data.firebase; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; +import de.beyondsoft.ownchat.BewoplanerApplication; import de.beyondsoft.ownchat.R; import de.beyondsoft.ownchat.data.AppPrefsConstants; import de.beyondsoft.ownchat.data.api.common.ErrorHandlingResponseConverter; @@ -132,39 +133,65 @@ public class HandleMessagesService extends FirebaseMessagingService { int numberOfUsers = message.numberOfGroupUsers; intent = MainActivity.createIntent(context, bundle, numberOfUsers, groupId); - PendingIntent pendingIntent = PendingIntent.getActivity(context, - groupId, - intent, - PendingIntent.FLAG_UPDATE_CURRENT); - - NotificationCompat.Action action = createAction(context, numberOfUsers, groupId, bundle); + PendingIntent pendingIntent = PendingIntent.getActivity(context, groupId, intent, PendingIntent.FLAG_UPDATE_CURRENT); Bitmap bitmapToDisplay = bitmap; if (bitmapToDisplay == null) { bitmapToDisplay = BitmapFactory.decodeResource(context.getResources(), R.drawable.avatar); } - NotificationCompat.Builder builder = new NotificationCompat.Builder(context, getString(R.string.default_notification_channel_id)) - .setSmallIcon(getNotificationIcon()) - .setContentTitle(setNotificationTitle(message, message.numberOfGroupUsers)) - .setContentText(getTextFromNotification(message)) - .setAutoCancel(true) - .setStyle(new NotificationCompat.BigTextStyle().bigText(getTextFromNotification(message))) - .setPriority(Notification.PRIORITY_MAX) - .setContentIntent(pendingIntent) - .setLargeIcon(getCircleBitmap(bitmapToDisplay)) - .setGroup(String.valueOf(groupId)) - .setGroupSummary(true) - .setDefaults(Notification.DEFAULT_ALL) - .setColor(ContextCompat.getColor(context, R.color.colorDefaultBright)); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationUtils notificationUtils = BewoplanerApplication.getNotificationUtils(); - if (action != null) { - builder.addAction(action); + if(notificationUtils.getManager() != null) { + Notification.Builder nb = new Notification.Builder(context, context.getString(R.string.default_notification_channel_id)).setSmallIcon(HandleMessagesService.getNotificationIcon()) + .setSmallIcon(getNotificationIcon()) + .setContentTitle(setNotificationTitle(message, message.numberOfGroupUsers)) + .setContentText(getTextFromNotification(message)) + .setAutoCancel(false) + .setStyle(new Notification.BigTextStyle().bigText(getTextFromNotification(message))) + .setContentIntent(pendingIntent) + .setLargeIcon(getCircleBitmap(bitmapToDisplay)) + .setGroup(String.valueOf(groupId)) + .setGroupSummary(true) + .setColor(ContextCompat.getColor(context, R.color.colorDefaultBright)); + + Notification.Action action2 = createAction2(context, numberOfUsers, groupId, bundle); + + if(action2 != null) { + nb.addAction(action2); + } + + notificationUtils.getManager().notify(groupId, nb.build()); + } + } else { + NotificationCompat.Action action = createAction(context, numberOfUsers, groupId, bundle); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, getString(R.string.default_notification_channel_id)) + .setSmallIcon(getNotificationIcon()) + .setContentTitle(setNotificationTitle(message, message.numberOfGroupUsers)) + .setContentText(getTextFromNotification(message)) + .setAutoCancel(false) + .setStyle(new NotificationCompat.BigTextStyle().bigText(getTextFromNotification(message))) + .setPriority(Notification.PRIORITY_MAX) + .setContentIntent(pendingIntent) + .setLargeIcon(getCircleBitmap(bitmapToDisplay)) + .setGroup(String.valueOf(groupId)) + .setGroupSummary(true) + .setDefaults(Notification.DEFAULT_ALL) + .setColor(ContextCompat.getColor(context, R.color.colorDefaultBright)); + + if (action != null) { + builder.addAction(action); + } + + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + if(notificationManager != null) { + notificationManager.notify(groupId, builder.build()); + } } - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(groupId, builder.build()); - Message message = new Message(bundle.getString(Constants.MESSAGE_ID), groupId, bundle.getLong(Constants.CREATED_AT), @@ -193,8 +220,7 @@ public class HandleMessagesService extends FirebaseMessagingService { } private Bitmap getCircleBitmap(Bitmap bitmap) { - final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), - bitmap.getHeight(), Bitmap.Config.ARGB_8888); + final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(output); final int color = Color.RED; @@ -237,25 +263,40 @@ public class HandleMessagesService extends FirebaseMessagingService { } private NotificationCompat.Action createAction(Context context, int noOfUsers, int groupId, Bundle bundle) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { return null; } Intent replyIntent = ReplyNotificationReceiver.createReplyIntent(context, bundle, noOfUsers, groupId); - PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), - groupId, - replyIntent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), groupId, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); String replyLabel = getResources().getString(R.string.chat_reply_label); RemoteInput remoteInput = new RemoteInput.Builder(Constants.KEY_TEXT_REPLY) .setLabel(replyLabel) .build(); - return new NotificationCompat.Action.Builder(R.drawable.send_enabled, - getString(R.string.chat_reply_label), replyPendingIntent) + return new NotificationCompat.Action.Builder(R.drawable.send_enabled, getString(R.string.chat_reply_label), replyPendingIntent) + .addRemoteInput(remoteInput) + .build(); + } + + private Notification.Action createAction2(Context context, int noOfUsers, int groupId, Bundle bundle) { + if(Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return null; + } + + Intent replyIntent = ReplyNotificationReceiver.createReplyIntent(context, bundle, noOfUsers, groupId); + + PendingIntent replyPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), groupId, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + String replyLabel = getResources().getString(R.string.chat_reply_label); + + android.app.RemoteInput remoteInput = new android.app.RemoteInput.Builder(Constants.KEY_TEXT_REPLY) + .setLabel(replyLabel) + .build(); + + return new Notification.Action.Builder(R.drawable.send_enabled, getString(R.string.chat_reply_label), replyPendingIntent) .addRemoteInput(remoteInput) .build(); } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/NotificationUtils.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/NotificationUtils.java new file mode 100644 index 0000000..d1c4d55 --- /dev/null +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/NotificationUtils.java @@ -0,0 +1,38 @@ +package de.beyondsoft.ownchat.data.firebase; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.content.ContextWrapper; + +import de.beyondsoft.ownchat.R; + +public class NotificationUtils extends ContextWrapper { + private NotificationManager mManager; + + public NotificationUtils(Context base) { + super(base); + + createNotificationChannel(); + } + + public void createNotificationChannel() { + if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + NotificationChannel androidChannel = new NotificationChannel(getString(R.string.default_notification_channel_id), getString(R.string.default_notification_channel_name), NotificationManager.IMPORTANCE_HIGH); + androidChannel.enableLights(true); + androidChannel.enableVibration(true); + androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); + + getManager().createNotificationChannel(androidChannel); + } + } + + public NotificationManager getManager() { + if(mManager == null) { + mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + } + + return mManager; + } +} diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/ReplyNotificationReceiver.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/ReplyNotificationReceiver.java index c346d94..8255d3b 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/ReplyNotificationReceiver.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/data/firebase/ReplyNotificationReceiver.java @@ -20,9 +20,11 @@ import de.beyondsoft.ownchat.page.chat.ChatPresenter; import de.beyondsoft.ownchat.utils.Constants; import de.beyondsoft.ownchat.utils.rx.RxUtils; +import android.app.Notification; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; @@ -38,6 +40,8 @@ import javax.inject.Named; import rx.Observable; import rx.Subscriber; +import static android.support.v4.app.NotificationCompat.DEFAULT_ALL; +import static android.support.v4.app.NotificationCompat.PRIORITY_MAX; import static de.beyondsoft.ownchat.utils.Constants.GROUP_ID; /** @@ -82,6 +86,7 @@ public class ReplyNotificationReceiver extends BroadcastReceiver { intent.putExtra(GROUP_ID, groupId); intent.putExtra(BUNDLE, bundle); intent.putExtra(Constants.GROUP_NR_USERS, numberOfUsers); + return intent; } @@ -93,21 +98,40 @@ public class ReplyNotificationReceiver extends BroadcastReceiver { Bundle bundle = intent.getBundleExtra(BUNDLE); long groupId = bundle.getLong(Constants.GROUP_ID); - if (replyMessage != null && replyMessage instanceof String) { + if(replyMessage != null && replyMessage instanceof String) { sendMessage(context, (String) replyMessage, (int) groupId); } } private void updateNotificationOnReply(Context context, String replyMessage, int groupId) { - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "ownChat") - .setSmallIcon(HandleMessagesService.getNotificationIcon()) - .setColor(ContextCompat.getColor(context, R.color.colorDefaultBright)) - .setContentTitle(context.getResources().getString(R.string.chat_you_name)) - .setContentText(replyMessage); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationUtils notificationUtils = BewoplanerApplication.getNotificationUtils(); - notificationManager.notify(groupId, builder.build()); - Observable.timer(2, TimeUnit.SECONDS).subscribe(aLong -> notificationManager.cancel(groupId)); + Notification.Builder nb = new Notification.Builder(context, context.getString(R.string.default_notification_channel_id)) + .setSmallIcon(HandleMessagesService.getNotificationIcon()) + .setColor(ContextCompat.getColor(context, R.color.colorDefaultBright)) + .setContentTitle(context.getResources().getString(R.string.chat_you_name)) + .setContentText(replyMessage); + + if(notificationUtils.getManager() != null) { + notificationUtils.getManager().notify(groupId, nb.build()); + + Observable.timer(2, TimeUnit.SECONDS).subscribe(aLong -> notificationUtils.getManager().cancel(groupId)); + } + } else { + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, context.getString(R.string.default_notification_channel_id)) + .setSmallIcon(HandleMessagesService.getNotificationIcon()) + .setColor(ContextCompat.getColor(context, R.color.colorDefaultBright)) + .setContentTitle(context.getResources().getString(R.string.chat_you_name)) + .setPriority(PRIORITY_MAX) + .setDefaults(DEFAULT_ALL) + .setContentText(replyMessage); + + notificationManager.notify(groupId, builder.build()); + Observable.timer(2, TimeUnit.SECONDS).subscribe(aLong -> notificationManager.cancel(groupId)); + } } public void sendMessage(Context context, String replyMessage, int groupId) { @@ -140,8 +164,14 @@ public class ReplyNotificationReceiver extends BroadcastReceiver { storeMessageLocally(message); storeGroupLocally(groupId, message); - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - notificationManager.cancel(groupId); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationUtils notificationUtils = BewoplanerApplication.getNotificationUtils(); + notificationUtils.getManager().cancel(groupId); + } else { + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + notificationManager.cancel(groupId); + } + Toast.makeText(context, R.string.error_message_not_sent, Toast.LENGTH_SHORT).show(); } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java index 9a78862..a1e4fb2 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/BaseChatActivity.java @@ -1,9 +1,11 @@ package de.beyondsoft.ownchat.page.chat; +import de.beyondsoft.ownchat.BewoplanerApplication; import de.beyondsoft.ownchat.R; import de.beyondsoft.ownchat.data.AppPrefsConstants; import de.beyondsoft.ownchat.data.events.InvalidTokenEvent; import de.beyondsoft.ownchat.data.events.LogoutDirectlyEvent; +import de.beyondsoft.ownchat.data.firebase.NotificationUtils; import de.beyondsoft.ownchat.data.prefs.BooleanPreference; import de.beyondsoft.ownchat.data.prefs.LongPreference; import de.beyondsoft.ownchat.data.prefs.StringPreference; @@ -32,6 +34,7 @@ import org.greenrobot.eventbus.ThreadMode; import android.Manifest; import android.app.Activity; import android.app.Dialog; +import android.app.NotificationManager; import android.content.Intent; import android.graphics.Rect; import android.media.MediaRecorder; @@ -172,7 +175,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Override public void onCreate(@Nullable Bundle savedInstanceState) { - if (!getIntent().hasExtra(GROUP_ARG) && !getIntent().hasExtra(MESSAGE_ARG)) { + if(!getIntent().hasExtra(GROUP_ARG) && !getIntent().hasExtra(MESSAGE_ARG)) { throw new RuntimeException("Arguments are missing. Please use createIntentMethodInstead;"); } @@ -209,9 +212,10 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha mEndlessScrollListener = new EndlessScrollListener(VISIBLE_THRESHOLD, linearLayoutManager) { @Override public boolean onLoad() { - if (mCallback == null || mCallback.isLoading()) { + if(mCallback == null || mCallback.isLoading()) { return false; } + mCallback.fetchMoreMessagesByGroupId(); return true; } @@ -240,7 +244,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Override public void messagesLoaded(ArrayList messages, boolean isFirstPage) { - if (isFirstPage) { + if(isFirstPage) { mEndlessScrollListener.reset(); mBaseChatAdapter.setMessages(messages); mRecyclerView.scrollToPosition(0); @@ -261,18 +265,18 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha mSelectedFilePath.delete(); - if (Build.VERSION.SDK_INT >= 19) { + if(Build.VERSION.SDK_INT >= 19) { final int takeFlags = (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); try { //noinspection WrongConstant getContentResolver().takePersistableUriPermission(uri, takeFlags); - } catch (Exception e) { + } catch(Exception e) { e.printStackTrace(); } } - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); } @@ -289,7 +293,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Override public void showError(@StringRes int errorRes) { - if (mSnackbar == null) { + if(mSnackbar == null) { mSnackbar = Snackbar.make(mCoordinatorLayout, errorRes, Snackbar.LENGTH_LONG); mSnackbar.setActionTextColor(ContextCompat.getColor(this, R.color.colorDefault)); } @@ -418,7 +422,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha try { dialog.dismiss(); mMediaRecorder.stop(); - } catch (IllegalStateException e) { + } catch(IllegalStateException e) { e.printStackTrace(); } } @@ -456,7 +460,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha mMediaRecorder.setMaxFileSize(mUploadMaxSize.get()); mMediaRecorder.prepare(); mMediaRecorder.start(); - } catch (IllegalStateException | IOException e) { + } catch(IllegalStateException | IOException e) { e.printStackTrace(); } @@ -468,7 +472,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha try { mMediaRecorder.stop(); - } catch (IllegalStateException e) { + } catch(IllegalStateException e) { e.printStackTrace(); } @@ -488,7 +492,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha return true; } - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); } @@ -527,7 +531,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha default: return true; } - } catch (Exception e) { + } catch(Exception e) { dialog.dismiss(); e.printStackTrace(); return true; @@ -555,36 +559,36 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (resultCode != Activity.RESULT_OK) { + if(resultCode != Activity.RESULT_OK) { return; } - if (null == data) { + if(null == data) { return; } ArrayList var1 = data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_MEDIA); ArrayList var2 = data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_DOCS); - if ((requestCode == SELECT_IMAGE_FILE || requestCode == SELECT_DOC_FILE) && ((var1 != null && var1.size() > 0) || (var2 != null && var2.size() > 0))) { + if((requestCode == SELECT_IMAGE_FILE || requestCode == SELECT_DOC_FILE) && ((var1 != null && var1.size() > 0) || (var2 != null && var2.size() > 0))) { String filePath = data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_MEDIA) != null ? data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_MEDIA).get(0) : data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_DOCS).get(0); final Uri uri = Uri.fromFile(new File(filePath)); - if (Build.VERSION.SDK_INT >= 19) { + if(Build.VERSION.SDK_INT >= 19) { final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); try { //noinspection WrongConstant getContentResolver().takePersistableUriPermission(uri, takeFlags); - } catch (Exception e) { + } catch(Exception e) { e.printStackTrace(); } } - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); } @@ -603,7 +607,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha String filePath = data.getStringExtra(Constants.FILE_PATH); String fileMessageText = data.getStringExtra(Constants.FILE_MESSAGE_TEXT); - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); } @@ -624,7 +628,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Override public void fileClicked(Message message, int itemPosition) { - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); } @@ -632,7 +636,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha String fileName = split[split.length - 1]; File file = getExternalFilesDir(null); - if (file != null) { + if(file != null) { mCallback.downloadFile(message, file + "/" + fileName, itemPosition); return; } @@ -652,7 +656,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Override public void resendMessage(Message message) { - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); } @@ -703,7 +707,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha intent.setDataAndType(uri, fileType); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Verify the original intent will resolve to at least one activity - if (intent.resolveActivity(getPackageManager()) != null) { + if(intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { showToastMessage(R.string.error_could_not_open_file); @@ -725,7 +729,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha protected void onDestroy() { mChatOpenedPref.set(false); - if (mEndlessScrollListener != null) { + if(mEndlessScrollListener != null) { mRecyclerView.removeOnScrollListener(mEndlessScrollListener); } @@ -743,7 +747,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha public void addOneMessage(Message message) { mBaseChatAdapter.addMessage(message); - if (mEndlessScrollListener.getVisibleItem() == 0) { + if(mEndlessScrollListener.getVisibleItem() == 0) { mBaseChatAdapter.notifyDataSetChanged(); } @@ -764,12 +768,16 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha } protected void cancelNotification() { - if (mGroup == null) { + if(mGroup == null) { return; } - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.cancel((int) mGroup.id); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + BewoplanerApplication.getNotificationUtils().getManager().cancel((int) mGroup.id); + } else { + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); + notificationManager.cancel((int) mGroup.id); + } } private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener = new ViewTreeObserver.OnGlobalLayoutListener() { @@ -786,7 +794,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha // if keypad is shown, the r.bottom is smaller than that before. int keypadHeight = screenHeight - r.bottom; - if (keypadHeight > screenHeight * 0.15 && !mKeyboardShown) { // 0.15 ratio is perhaps enough to determine keypad height. + if(keypadHeight > screenHeight * 0.15 && !mKeyboardShown) { // 0.15 ratio is perhaps enough to determine keypad height. // keyboard is opened mRecyclerView.scrollToPosition(0); mKeyboardShown = true; diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/ChatPresenter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/ChatPresenter.java index 22bcc39..120db68 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/ChatPresenter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/ChatPresenter.java @@ -931,9 +931,11 @@ public class ChatPresenter extends MVPAbstractPresenter implements Cha getView().setGroup(group); return; } + loadGroups(); } }); + addSubscription(subscription); } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatActivity.java index d21efab..3f85298 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/GroupChatActivity.java @@ -20,32 +20,66 @@ import android.view.View; */ public class GroupChatActivity extends BaseChatActivity { + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Bundle bundle = intent.getBundleExtra(Constants.MESSAGE); + if(mCallback == null) { + mChatPresenter.attachView(GroupChatActivity.this); + } + if(mCallback.getGroupId() == bundle.getLong(Constants.GROUP_ID)) { + Message message = new Message(bundle.getString(Constants.MESSAGE_ID), + bundle.getLong(Constants.GROUP_ID), + bundle.getLong(Constants.CREATED_AT), + bundle.getString(Constants.MESSAGE_TEXT), + bundle.getString(Constants.FILE), + bundle.getString(Constants.SMALLER_IMAGE), + bundle.getString(Constants.FILENAME), + null, + bundle.getLong(Constants.USER_ID), + bundle.getString(Constants.USERNAME), + bundle.getString(Constants.USER_AVATAR), + Message.Status.DELIVERED, + true, + mUserIdPreference.get(), + false); + mCallback.saveMessage(message); + Bundle results = getResultExtras(true); + results.putBoolean(Constants.CHAT_IS_ALREADY_OPEN, true); + } + } + }; + public static Intent createIntent(Context context, Group group) { Intent intent = new Intent(context, GroupChatActivity.class); intent.putExtra(GROUP_ARG, group); return intent; } - public static Intent createIntent(Context context, Bundle groupId) { + public static Intent createIntent(Context context, Bundle bundle) { Intent intent = new Intent(context, GroupChatActivity.class); - intent.putExtra(MESSAGE_ARG, groupId); + intent.putExtra(MESSAGE_ARG, bundle); return intent; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mChatPresenter.attachView(this); mCallback.resetMessages(); - if (getIntent().hasExtra(MESSAGE_ARG)) { + + if(getIntent().hasExtra(MESSAGE_ARG)) { Bundle bundle = getIntent().getBundleExtra(MESSAGE_ARG); long groupId = bundle.getLong(Constants.GROUP_ID); - if (mSystemUtils.isNetworkUnavailable()) { + + if(mSystemUtils.isNetworkUnavailable()) { mCallback.loadMessagesFromDBByGroupId(groupId, true); showError(R.string.error_no_internet_connection); } else { mCallback.loadMessagesFromServerByGroupId(groupId); } + mCallback.findGroupById(); } else { setGroupFromArguments(); @@ -54,19 +88,21 @@ public class GroupChatActivity extends BaseChatActivity { @Override protected void onResume() { - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); mBaseChatAdapter.resetItemsProgress(); - if (mSystemUtils.isNetworkUnavailable()) { + + if(mSystemUtils.isNetworkUnavailable()) { mCallback.loadMessagesFromDBByGroupId(mGroup.id, true); showError(R.string.error_no_internet_connection); } else { - if (mGroup == null) { - if (getIntent().hasExtra(MESSAGE_ARG)) { + if(mGroup == null) { + if(getIntent().hasExtra(MESSAGE_ARG)) { long groupId = getIntent().getBundleExtra(MESSAGE_ARG).getLong(Constants.GROUP_ID); mCallback.fetchNewMessages(groupId); return; } + setGroupFromArguments(); mCallback.fetchNewMessages(mGroup.id); } else { @@ -74,6 +110,7 @@ public class GroupChatActivity extends BaseChatActivity { } } } + cancelNotification(); IntentFilter filter = new IntentFilter(Constants.NOTIFICATION_BROADCAST); registerReceiver(mReceiver, filter); @@ -82,7 +119,7 @@ public class GroupChatActivity extends BaseChatActivity { @Override protected void loadMessages() { - if (mSystemUtils.isNetworkUnavailable()) { + if(mSystemUtils.isNetworkUnavailable()) { mCallback.loadMessagesFromDBByGroupId(mGroup.id, true); showError(R.string.error_no_internet_connection); } else { @@ -131,35 +168,7 @@ public class GroupChatActivity extends BaseChatActivity { public void setGroup(Group group) { mGroup = group; setToolbar(); - } - private BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Bundle bundle = intent.getBundleExtra(Constants.MESSAGE); - if (mCallback == null) { - mChatPresenter.attachView(GroupChatActivity.this); - } - if (mCallback.getGroupId() == bundle.getLong(Constants.GROUP_ID)) { - Message message = new Message(bundle.getString(Constants.MESSAGE_ID), - bundle.getLong(Constants.GROUP_ID), - bundle.getLong(Constants.CREATED_AT), - bundle.getString(Constants.MESSAGE_TEXT), - bundle.getString(Constants.FILE), - bundle.getString(Constants.SMALLER_IMAGE), - bundle.getString(Constants.FILENAME), - null, - bundle.getLong(Constants.USER_ID), - bundle.getString(Constants.USERNAME), - bundle.getString(Constants.USER_AVATAR), - Message.Status.DELIVERED, - true, - mUserIdPreference.get(), - false); - mCallback.saveMessage(message); - Bundle results = getResultExtras(true); - results.putBoolean(Constants.CHAT_IS_ALREADY_OPEN, true); - } - } - }; + cancelNotification(); + } } \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/SingleChatActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/SingleChatActivity.java index dccbd86..1ad5f01 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/SingleChatActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/chat/SingleChatActivity.java @@ -42,14 +42,14 @@ public class SingleChatActivity extends BaseChatActivity { mChatPresenter.attachView(this); mCallback.resetMessages(); - if (getIntent().hasExtra(MESSAGE_ARG)) { + if(getIntent().hasExtra(MESSAGE_ARG)) { Bundle bundle = getIntent().getBundleExtra(MESSAGE_ARG); mGroup = new Group(); mGroup.id = bundle.getLong(Constants.GROUP_ID); mGroup.name = bundle.getString(Constants.USERNAME); mGroup.avatar = bundle.getString(Constants.USER_AVATAR); - if (mSystemUtils.isNetworkUnavailable()) { + if(mSystemUtils.isNetworkUnavailable()) { mCallback.loadMessagesFromDBByGroupId(mGroup.id, true); showError(de.beyondsoft.ownchat.R.string.error_no_internet_connection); } else { @@ -64,11 +64,11 @@ public class SingleChatActivity extends BaseChatActivity { @Override protected void onResume() { - if (!mChatPresenter.isAttached()) { + if(!mChatPresenter.isAttached()) { mChatPresenter.attachView(this); mBaseChatAdapter.resetItemsProgress(); - if (mSystemUtils.isNetworkUnavailable()) { + if(mSystemUtils.isNetworkUnavailable()) { mCallback.loadMessagesFromDBByGroupId(mGroup.id, true); showError(de.beyondsoft.ownchat.R.string.error_no_internet_connection); } else { @@ -122,9 +122,7 @@ public class SingleChatActivity extends BaseChatActivity { @Override protected void extraImageClicked() { - Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", - mGroup.mobile, - null)); + Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", mGroup.mobile, null)); startActivity(intent); } @@ -145,11 +143,11 @@ public class SingleChatActivity extends BaseChatActivity { public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getBundleExtra(Constants.MESSAGE); - if (mCallback == null) { + if(mCallback == null) { mChatPresenter.attachView(SingleChatActivity.this); } - if (mCallback.getGroupId() == bundle.getLong(Constants.GROUP_ID)) { + if(mCallback.getGroupId() == bundle.getLong(Constants.GROUP_ID)) { Message message = new Message(bundle.getString(Constants.MESSAGE_ID), bundle.getLong(Constants.GROUP_ID), bundle.getLong(Constants.CREATED_AT), diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/contacts/ContactsAdapter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/contacts/ContactsAdapter.java index b421d6c..9962b95 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/contacts/ContactsAdapter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/contacts/ContactsAdapter.java @@ -11,6 +11,7 @@ import android.graphics.Typeface; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -178,6 +179,11 @@ class ContactsAdapter extends RecyclerView.Adapter { void onClickContact() { int type = getItemViewType(); + if(mGroups.size() < getAdapterPosition()) { + Log.e("Error", "index out of bounds! group count: " + mGroups.size() + "; adapter position: " + getAdapterPosition()); + return; + } + if (type == GROUP_TYPE) { mItemClickListener.onOpenGroupMessage(mGroups.get(getAdapterPosition())); return; diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginActivity.java index 0a8eee9..1d3ea82 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/login/LoginActivity.java @@ -157,6 +157,7 @@ public class LoginActivity extends AppCompatActivity implements LoginView { finish(); } + //TODO: change defaultValue: null to defaultValue: "" private void decryptPreference() { for (Map.Entry entry : mSecuredPrefs.getAll().entrySet()) { final String key = entry.getKey(); 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 f73003f..1a81208 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 @@ -372,8 +372,6 @@ public class LoginPresenter extends MVPAbstractPresenter implements L mStatus = serviceObject.get("Status").getAsInt(); } - - return Observable.just(false); }) .compose(RxUtils.provideDefaultTransformer()) diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java index 75c2f4f..d11911d 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/utils/FileUtils.java @@ -1223,6 +1223,7 @@ public class FileUtils { } Bitmap bitmap = Bitmap.createScaledBitmap(bitmapToScale, newWidth, newHeight, false); + tmpFile = new File(tmpFileLocation); //noinspection ResultOfMethodCallIgnored tmpFile.createNewFile(); @@ -1240,6 +1241,8 @@ public class FileUtils { Utils.copyExifData(image, tmpFile, null); + Log.i("COMPRESSING IMAGE", "file size after compression: " + tmpFile.length() + " bytes. Before compression: " + image.length()); + return tmpFile; } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/strings.xml b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/strings.xml index aa77178..a079dcf 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/strings.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/res/values/strings.xml @@ -88,6 +88,7 @@ Die Datei, die Sie versuchen hochzuladen, ist zu groß Datei teilen - ownChat + de.beyondsoft.ownchat.notification_channel + ownChat notification channel \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/build.gradle b/BeWoPlanerChat/bewoplaner-chat-android/build.gradle index f06d54a..e5f07d9 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/build.gradle +++ b/BeWoPlanerChat/bewoplaner-chat-android/build.gradle @@ -6,12 +6,12 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.2' classpath 'io.realm:realm-gradle-plugin:2.2.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files - classpath 'com.google.gms:google-services:3.1.1' + classpath 'com.google.gms:google-services:4.0.1' } } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties b/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties index cb30a16..cf98b2f 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties +++ b/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Oct 26 10:33:36 CEST 2017 +#Tue Apr 10 11:16:46 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip