From b0bc4c216b6f4d74ce70f19d71df18263778d690 Mon Sep 17 00:00:00 2001 From: Artem Date: Fri, 23 Apr 2021 15:06:07 +0300 Subject: [PATCH 1/2] added simple push notifications --- app/src/main/AndroidManifest.xml | 14 ++++- .../uzlov/moviefind/services/SampleService.kt | 60 +++++++++---------- app/src/main/res/values/strings.xml | 1 + 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cb2ada8..413c3c3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,7 +24,7 @@ android:value="@string/google_maps_key" /> @@ -36,12 +36,20 @@ + android:theme="@style/Theme.MovieFind.NoActionBar" /> + android:exported="true"> + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/uzlov/moviefind/services/SampleService.kt b/app/src/main/java/com/uzlov/moviefind/services/SampleService.kt index 5607a4b..fecf02c 100644 --- a/app/src/main/java/com/uzlov/moviefind/services/SampleService.kt +++ b/app/src/main/java/com/uzlov/moviefind/services/SampleService.kt @@ -1,50 +1,46 @@ package com.uzlov.moviefind.services -import android.app.* +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent import android.content.Intent import android.os.Build -import android.os.IBinder -import android.util.Log import androidx.core.app.NotificationCompat -import com.uzlov.moviefind.HostActivity +import com.google.firebase.messaging.FirebaseMessagingService +import com.google.firebase.messaging.RemoteMessage import com.uzlov.moviefind.R +import com.uzlov.moviefind.activities.HostActivity -class SampleService : Service() { - private val CHANNEL_ID: String = "ForegroundServiceChannel" +class SampleService : FirebaseMessagingService() { + private val NOTIFICATION_ID : Int = 1 + private val CHANNEL_ID by lazy {resources.getString(R.string.default_notification_channel_id)} companion object{ - val VALUE_KEY: String = "sample_key" - val ACTION = "ACTION_SAMPLE_SERVICE" + const val VALUE_KEY: String = "sample_key" } - override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { - createNotificationChannel() + override fun onNewToken(p0: String) { + super.onNewToken(p0) + } + + override fun onMessageReceived(message: RemoteMessage) { + + val manager = createNotificationChannel() val notificationIntent = Intent(this, HostActivity::class.java) - val pendingIntent = PendingIntent.getActivity(this, - 0, notificationIntent, 0) - val notification: Notification = NotificationCompat.Builder(this, CHANNEL_ID) + val pendingIntent = PendingIntent.getActivity( + this, + 0, notificationIntent, 0 + ) + val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle(getString(R.string.funny_string)) .setSmallIcon(R.drawable.ic_baseline_favorite_border_24) + .setContentText(message.notification?.body ?: "Empty body") .setContentIntent(pendingIntent) - .build() - startForeground(1, notification) - - Thread { - for (i in 0..5){ - Thread.sleep(1000) - val data = Intent().apply { - putExtra(VALUE_KEY, (i % 2 == 0).toString()) - action = ACTION - } - sendBroadcast(data) - if (i == 4) stopSelf() - } - }.start() - - return START_STICKY + + manager?.notify(NOTIFICATION_ID, notificationBuilder.build()) } - private fun createNotificationChannel() { + private fun createNotificationChannel() : NotificationManager? { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val serviceChannel = NotificationChannel( CHANNEL_ID, @@ -53,10 +49,8 @@ class SampleService : Service() { ) val manager = getSystemService(NotificationManager::class.java) manager.createNotificationChannel(serviceChannel) + return manager } - } - - override fun onBind(p0: Intent?): IBinder? { return null } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4926201..c32c36f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -131,4 +131,5 @@ Only download attachments when manually requested Поделись с друзьями + channel_fcm \ No newline at end of file From 2bfdeca0bbc38753595c4f49fd08e8cb032c46fe Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 27 Apr 2021 09:06:00 +0300 Subject: [PATCH 2/2] any files --- app/build.gradle | 3 +++ app/src/main/AndroidManifest.xml | 1 + .../com/uzlov/moviefind/{ => activities}/HostActivity.kt | 9 +++++++-- .../java/com/uzlov/moviefind/fragments/ActorFragment.kt | 1 - app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/values-night/strings.xml | 1 + app/src/main/res/values/dimens.xml | 1 + build.gradle | 1 + 8 files changed, 15 insertions(+), 4 deletions(-) rename app/src/main/java/com/uzlov/moviefind/{ => activities}/HostActivity.kt (95%) diff --git a/app/build.gradle b/app/build.gradle index abd394e..c85d449 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' + id 'com.google.gms.google-services' } android { @@ -47,6 +48,8 @@ dependencies { implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5' implementation 'androidx.navigation:navigation-ui-ktx:2.3.5' implementation 'androidx.preference:preference-ktx:1.1.1' + implementation 'com.google.android.gms:play-services-maps:17.0.0' + implementation 'com.google.firebase:firebase-messaging:21.0.1' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 413c3c3..b7a7041 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ diff --git a/app/src/main/java/com/uzlov/moviefind/HostActivity.kt b/app/src/main/java/com/uzlov/moviefind/activities/HostActivity.kt similarity index 95% rename from app/src/main/java/com/uzlov/moviefind/HostActivity.kt rename to app/src/main/java/com/uzlov/moviefind/activities/HostActivity.kt index a898d37..77c023d 100644 --- a/app/src/main/java/com/uzlov/moviefind/HostActivity.kt +++ b/app/src/main/java/com/uzlov/moviefind/activities/HostActivity.kt @@ -1,4 +1,4 @@ -package com.uzlov.moviefind +package com.uzlov.moviefind.activities import com.uzlov.moviefind.services.SampleService import android.content.BroadcastReceiver @@ -11,6 +11,7 @@ import android.view.MenuItem import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment +import com.uzlov.moviefind.R import com.uzlov.moviefind.databinding.ActivityMainBinding import com.uzlov.moviefind.fragments.* import com.uzlov.moviefind.services.NetworkListener @@ -42,7 +43,7 @@ class HostActivity : AppCompatActivity() { setActiveFragment(homeFragment) true } - R.id.menu_favorite-> { + R.id.menu_favorite -> { setActiveFragment(popularFilmsFragment) true } @@ -53,7 +54,11 @@ class HostActivity : AppCompatActivity() { else -> false } } + startNetworkListener() + + val intent = Intent(this, SampleService::class.java) + startService(intent) } private fun startNetworkListener(){ diff --git a/app/src/main/java/com/uzlov/moviefind/fragments/ActorFragment.kt b/app/src/main/java/com/uzlov/moviefind/fragments/ActorFragment.kt index 878865f..2f8d661 100644 --- a/app/src/main/java/com/uzlov/moviefind/fragments/ActorFragment.kt +++ b/app/src/main/java/com/uzlov/moviefind/fragments/ActorFragment.kt @@ -18,7 +18,6 @@ import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.MarkerOptions import com.uzlov.moviefind.R import com.uzlov.moviefind.databinding.FragmentMapsBinding -import com.uzlov.moviefind.repository.RepositoryRemoteImpl import com.uzlov.moviefind.viewmodels.FilmsViewModel import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4723548..b2c2542 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,7 +7,7 @@ android:layout_height="match_parent" android:orientation="vertical" tools:viewBindingIgnore="false" - tools:context=".HostActivity"> + tools:context=".activities.HostActivity"> diff --git a/app/src/main/res/values-night/strings.xml b/app/src/main/res/values-night/strings.xml index 6104ba8..348664a 100644 --- a/app/src/main/res/values-night/strings.xml +++ b/app/src/main/res/values-night/strings.xml @@ -20,4 +20,5 @@ Это уведомление из MovieFind Популярные Поделись с друзьями + channel_fcm \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 1ee32ef..dc03d48 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -10,4 +10,5 @@ 32dp 100dp 18sp + 300dp \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7675dc5..dc5d79c 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,7 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:4.2.0-alpha09" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.5' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files