diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle b/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle index 74289b8..412ea2a 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/build.gradle @@ -114,6 +114,7 @@ dependencies { annotationProcessor 'com.google.dagger:dagger-compiler:2.7' provided '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' } 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 a1f9a1f..cf15c0b 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/AndroidManifest.xml @@ -17,7 +17,6 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> @@ -27,8 +26,8 @@ + @@ -69,7 +68,8 @@ android:name="io.fabric.ApiKey" android:value="1dcc8d0ead50f1b328778876834fea3392c6fc22" /> - + @@ -77,12 +77,19 @@ - + + + = 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() { 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 d396c70..aa3e7d6 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 @@ -144,7 +144,7 @@ public class HandleMessagesService extends FirebaseMessagingService { bitmapToDisplay = BitmapFactory.decodeResource(context.getResources(), R.drawable.avatar); } - NotificationCompat.Builder builder = new NotificationCompat.Builder(context) + NotificationCompat.Builder builder = new NotificationCompat.Builder(context, getString(R.string.default_notification_channel_id)) .setSmallIcon(getNotificationIcon()) .setContentTitle(setNotificationTitle(message, message.numberOfGroupUsers)) .setContentText(getTextFromNotification(message)) @@ -180,6 +180,7 @@ public class HandleMessagesService extends FirebaseMessagingService { false, mUserIdReference.get(), false); + storeMessageLocally(message); storeGroupLocally(groupId, message); } 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 9550fce..c346d94 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 @@ -1,5 +1,6 @@ package de.beyondsoft.ownchat.data.firebase; +import de.beyondsoft.ownchat.BewoplanerApplication; import de.beyondsoft.ownchat.R; import de.beyondsoft.ownchat.data.AppPrefsConstants; import de.beyondsoft.ownchat.data.api.common.ErrorHandlingResponseConverter; @@ -99,7 +100,7 @@ public class ReplyNotificationReceiver extends BroadcastReceiver { private void updateNotificationOnReply(Context context, String replyMessage, int groupId) { NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); - NotificationCompat.Builder builder = new NotificationCompat.Builder(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)) 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 fe9c141..10a340b 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 @@ -228,10 +228,12 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha mBaseChatAdapter.addMessages(messages); } - private void shareFile(int requestCode) { + private void shareFile() { mIsComingFromSharingActivity.set(false); - final Uri uri = Uri.parse(mSelectedFilePath.get()); + String path = mSelectedFilePath.get(); + + final Uri uri = Uri.parse(path); final File file = FileUtils.getFile(this, uri); String filePath = file.getPath(); @@ -294,10 +296,7 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha mBaseChatAdapter.setLoading(false); if(mIsComingFromSharingActivity.get()) { - requestAppPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, - R.string.permission_storage_explained, - STORAGE_REQUEST_CODE, - this::shareFile); + shareFile(); } } @@ -623,6 +622,25 @@ abstract class BaseChatActivity extends RuntimePermissionActivity implements Cha @Override public void onBackPressed() { + mIsComingFromSharingActivity.set(false); + mSelectedFilePath.delete(); + startActivity(new Intent(this, MainActivity.class)); } + + @Override + protected void onNewIntent(Intent intent) { + boolean test = intent.getBooleanExtra("TEST_EXTRA", false); + + if(test) { + Group group = intent.getParcelableExtra(GROUP_ARG); + + if(group != null) { + finish(); + startActivity(intent); + } + } + + super.onNewIntent(intent); + } } \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/PermissionDeniedListener.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/PermissionDeniedListener.java new file mode 100644 index 0000000..36050e9 --- /dev/null +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/PermissionDeniedListener.java @@ -0,0 +1,9 @@ +package de.beyondsoft.ownchat.page.common; + +/** + * Created by Lyndon on 06-Nov-2017. + */ + +public interface PermissionDeniedListener { + void onPermissionDenied(int requestCode); +} diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/RuntimePermissionActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/RuntimePermissionActivity.java index fecc19f..6d140c8 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/RuntimePermissionActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/common/RuntimePermissionActivity.java @@ -26,6 +26,7 @@ public abstract class RuntimePermissionActivity extends AppCompatActivity { private SparseIntArray mErrorString; private PermissionGrantedListener mPermissionGrantedListener; + private PermissionDeniedListener mPermissionDeniedListener; @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -69,6 +70,45 @@ public abstract class RuntimePermissionActivity extends AppCompatActivity { } } + public void requestAppPermissions(final String[] requestedPermissions, + final int stringId, + final int requestCode, + @NonNull PermissionGrantedListener permissionGrantedListener, + @NonNull PermissionDeniedListener permissionDeniedListener) { + mPermissionGrantedListener = permissionGrantedListener; + mPermissionDeniedListener = permissionDeniedListener; + + mErrorString.put(requestCode, stringId); + + int permissionCheck = PackageManager.PERMISSION_GRANTED; + boolean shouldShowRequestPermissionRationale = false; + + for (String permission : requestedPermissions) { + permissionCheck = permissionCheck + ContextCompat.checkSelfPermission(this, permission); + shouldShowRequestPermissionRationale = shouldShowRequestPermissionRationale || ActivityCompat.shouldShowRequestPermissionRationale(this, permission); + } + +// if(permissionCheck == PackageManager.PERMISSION_DENIED) { +// mPermissionDeniedListener.onPermissionDenied(requestCode); +// return; +// } + + if (permissionCheck != PackageManager.PERMISSION_GRANTED) { + if (shouldShowRequestPermissionRationale) { + Dialog dialog = DialogHandler.createNoTitleDialog(this, + stringId, + true, + R.string.permission_grant, + (dialogInterface, i) -> requestPermissionCorrectly(requestedPermissions, requestCode)); + dialog.show(); + } else { + requestPermissionCorrectly(requestedPermissions, requestCode); + } + } else { + mPermissionGrantedListener.onPermissionsGranted(requestCode); + } + } + protected void requestPermissionCorrectly(String[] requestedPermissions, int requestCode) { ActivityCompat.requestPermissions(this, requestedPermissions, requestCode); } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/fileconfirmation/FileConfirmationActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/fileconfirmation/FileConfirmationActivity.java index b23e906..af92a0f 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/fileconfirmation/FileConfirmationActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/fileconfirmation/FileConfirmationActivity.java @@ -19,6 +19,9 @@ import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; import butterknife.OnClick; import de.beyondsoft.ownchat.R; +import de.beyondsoft.ownchat.data.AppPrefsConstants; +import de.beyondsoft.ownchat.data.prefs.BooleanPreference; +import de.beyondsoft.ownchat.data.prefs.StringPreference; import de.beyondsoft.ownchat.di.InjectionHelper; import de.beyondsoft.ownchat.model.Group; import de.beyondsoft.ownchat.utils.Constants; @@ -27,6 +30,7 @@ import de.beyondsoft.ownchat.utils.FileUtils; import java.io.File; import javax.inject.Inject; +import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; @@ -172,8 +176,4 @@ public class FileConfirmationActivity extends AppCompatActivity implements FileC public void showError(String message) { } - - public File getFile(Uri fileUri) { - return FileUtils.getFile(this, fileUri); - } } 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 d8bf93c..0a8eee9 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 @@ -22,8 +22,6 @@ import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; -import android.text.Editable; -import android.util.Log; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.Button; 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 89436d4..6ca6654 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 @@ -47,7 +47,6 @@ import io.realm.Realm; import rx.Observable; import rx.Subscriber; import rx.Subscription; -import rx.functions.Func1; import rx.schedulers.Schedulers; /** 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 f6c8c20..e1fc9b9 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 @@ -39,7 +39,6 @@ import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingActivity.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingActivity.java index b2eab7c..e74f58e 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingActivity.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingActivity.java @@ -1,5 +1,6 @@ package de.beyondsoft.ownchat.page.sharing; +import android.Manifest; import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -12,6 +13,7 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; +import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; @@ -21,6 +23,7 @@ import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.OnClick; import de.beyondsoft.ownchat.R; import de.beyondsoft.ownchat.data.AppPrefsConstants; import de.beyondsoft.ownchat.data.prefs.BooleanPreference; @@ -30,7 +33,10 @@ import de.beyondsoft.ownchat.di.InjectionHelper; import de.beyondsoft.ownchat.model.Group; import de.beyondsoft.ownchat.page.chat.GroupChatActivity; import de.beyondsoft.ownchat.page.chat.SingleChatActivity; +import de.beyondsoft.ownchat.page.common.RuntimePermissionActivity; +import de.beyondsoft.ownchat.page.contacts.ContactsFragment; import de.beyondsoft.ownchat.page.login.LoginActivity; +import de.beyondsoft.ownchat.page.main.MainActivity; import de.beyondsoft.ownchat.utils.ui.EmptyLayout; import de.beyondsoft.ownchat.utils.ui.HorizontalDividerItemDecoration; @@ -38,7 +44,7 @@ import de.beyondsoft.ownchat.utils.ui.HorizontalDividerItemDecoration; * Created by Lyndon on 03-Nov-2017. */ -public class SharingActivity extends AppCompatActivity implements SharingView, SharingContactsAdapter.OnOpenClickListener { +public class SharingActivity extends RuntimePermissionActivity implements SharingView, SharingContactsAdapter.OnOpenClickListener { @Inject SharingPresenter mSharingPresenter; @@ -46,10 +52,6 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S @Named(AppPrefsConstants.LOGIN_TOKEN) StringPreference mLoginTokenPreference; - @Inject - @Named(AppPrefsConstants.USER_ID) - LongPreference mUserIdPreference; - @BindView(R.id.sharing_contacts_recycler_view) RecyclerView mContactsRecyclerView; @@ -73,9 +75,10 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S private SharingView.Callback mCallback; private SharingContactsAdapter mContactsAdapter; private Snackbar mSnackbar; + private Intent mIntent; @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sharing); @@ -85,20 +88,35 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S mSharingPresenter.attachView(this); + setToolBar(); + + mIntent = getIntent(); + + requestAppPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + R.string.permission_storage_explained, + 777, + this::shareFile); + } + + private void returnToContactList(int requestCode) { + mSelectedFilePath.delete(); + mIsComingFromSharingActivity.set(false); + startActivity(new Intent(this, MainActivity.class)); + finishAffinity(); + } + + private void shareFile(int requestCode) { mContactsRecyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).colorResId(R.color.colorFill).build()); mContactsRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - mContactsAdapter = new SharingContactsAdapter(this, mUserIdPreference.get()); + mContactsAdapter = new SharingContactsAdapter(this); mContactsRecyclerView.setAdapter(mContactsAdapter); - setToolBar(); - - Intent intent = getIntent(); - String action = intent.getAction(); - String type = intent.getType(); + String action = mIntent.getAction(); + String type = mIntent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { - handleSendFile(intent); + handleSendFile(mIntent); } } @@ -141,13 +159,20 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S @Override public void onOpenGroupMessage(Group group) { - startActivity(GroupChatActivity.createIntent(this, group)); + Intent intent = GroupChatActivity.createIntent(this, group); + intent.putExtra("TEST_EXTRA", true); + + startActivity(intent); finishAffinity(); } @Override public void onOpenPrivateMessage(Group contact) { - startActivity(SingleChatActivity.createIntent(this, contact)); + Intent intent = SingleChatActivity.createIntent(this, contact); + + intent.putExtra("TEST_EXTRA", true); + + startActivity(intent); finishAffinity(); } @@ -170,4 +195,9 @@ public class SharingActivity extends AppCompatActivity implements SharingView, S public void setGroups(ArrayList groups) { mContactsAdapter.setGroups(groups); } + + @OnClick(R.id.chat_toolbar_back_arrow) + public void onBackArrowClick(View view) { + returnToContactList(0); + } } diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingContactsAdapter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingContactsAdapter.java index e97c6e7..2dfb482 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingContactsAdapter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingContactsAdapter.java @@ -29,7 +29,6 @@ public class SharingContactsAdapter extends RecyclerView.Adapter mGroups; private SharingContactsAdapter.OnOpenClickListener mItemClickListener; - private long mUserId; interface OnOpenClickListener { void onOpenGroupMessage(Group group); @@ -37,10 +36,9 @@ public class SharingContactsAdapter extends RecyclerView.Adapter(); - mUserId = userId; } void setGroups(ArrayList groups) { diff --git a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingPresenter.java b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingPresenter.java index 835bb57..336a2df 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingPresenter.java +++ b/BeWoPlanerChat/bewoplaner-chat-android/app/src/main/java/de/beyondsoft/ownchat/page/sharing/SharingPresenter.java @@ -69,21 +69,6 @@ public class SharingPresenter extends MVPAbstractPresenter implemen @Named(AppPrefsConstants.USER_ID) LongPreference mUserIdReference; - @Inject - @Named(AppPrefsConstants.AVATAR) - StringPreference mAvatarPreference; - - @Inject - @Named(AppPrefsConstants.NAME) - StringPreference mProfileNamePreference; - - @Inject - @Named(AppPrefsConstants.UPLOAD_MAX_SIZE) - LongPreference mUploadMaxSizePreference; - - @Inject - RealmProvider mRealmProvider; - @Inject SharingPresenter() {} 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 65b44bd..aa77178 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,4 +88,6 @@ Die Datei, die Sie versuchen hochzuladen, ist zu groß Datei teilen + ownChat + \ No newline at end of file diff --git a/BeWoPlanerChat/bewoplaner-chat-android/build.gradle b/BeWoPlanerChat/bewoplaner-chat-android/build.gradle index 4414c47..3e37a24 100644 --- a/BeWoPlanerChat/bewoplaner-chat-android/build.gradle +++ b/BeWoPlanerChat/bewoplaner-chat-android/build.gradle @@ -3,16 +3,15 @@ buildscript { repositories { jcenter() + google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' - //classpath 'me.tatarka:gradle-retrolambda:3.3.0' - //classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2' 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.0.0' + classpath 'com.google.gms:google-services:3.1.1' } }