diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt index c3fbb70..94ca30e 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt @@ -192,8 +192,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { handleDrawer() handleSwipeRefreshLayout() - - handleRecurringTask() } private fun handleSwipeRefreshLayout() { @@ -349,6 +347,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { getElementsAccordingToTab() handleGDPRDialog(sharedPref.getBoolean("GDPR_shown", false)) + + handleRecurringTask() } private fun getAndStoreAllItems() { @@ -1425,7 +1425,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { .build() - WorkManager.getInstance().enqueueUniquePeriodicWork("selfoss-loading", ExistingPeriodicWorkPolicy.KEEP, backgroundWork) + WorkManager.getInstance().enqueueUniquePeriodicWork("selfoss-loading", ExistingPeriodicWorkPolicy.REPLACE, backgroundWork) } } } diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt index c9aecc9..165c8de 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/MyApp.kt @@ -1,8 +1,11 @@ package apps.amine.bou.readerforselfoss +import android.app.NotificationChannel +import android.app.NotificationManager import android.content.Context import android.graphics.drawable.Drawable import android.net.Uri +import android.os.Build import android.preference.PreferenceManager import androidx.multidex.MultiDexApplication import android.widget.ImageView @@ -59,6 +62,18 @@ class MyApp : MultiDexApplication() { initTheme() tryToHandleBug() + + handleNotificationChannels() + } + + private fun handleNotificationChannels() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val name = getString(R.string.notification_channel_sync) + val importance = NotificationManager.IMPORTANCE_LOW + val mChannel = NotificationChannel(Config.syncChannelId, name, importance) + val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager + notificationManager.createNotificationChannel(mChannel) + } } override fun attachBaseContext(base: Context?) { diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt index 7366045..60453e3 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt @@ -1,10 +1,15 @@ package apps.amine.bou.readerforselfoss.background +import android.app.NotificationManager import android.content.Context +import android.os.Handler import android.preference.PreferenceManager +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationCompat.PRIORITY_LOW import androidx.room.Room import androidx.work.Worker import androidx.work.WorkerParameters +import apps.amine.bou.readerforselfoss.R import apps.amine.bou.readerforselfoss.api.selfoss.Item import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi import apps.amine.bou.readerforselfoss.persistence.database.AppDatabase @@ -14,12 +19,9 @@ import apps.amine.bou.readerforselfoss.utils.persistence.toEntity import retrofit2.Call import retrofit2.Callback import retrofit2.Response +import java.util.* +import kotlin.concurrent.schedule import kotlin.concurrent.thread -import android.app.NotificationManager -import android.app.NotificationChannel -import android.util.Log -import androidx.core.app.NotificationCompat -import apps.amine.bou.readerforselfoss.R class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(context, params) { @@ -27,18 +29,13 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - //If on Oreo then notification required a notification channel. - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - val channel = - NotificationChannel("default", "Default", NotificationManager.IMPORTANCE_DEFAULT) - notificationManager.createNotificationChannel(channel) - } - - val notification = NotificationCompat.Builder(applicationContext, "default") - .setContentTitle("Loading") - .setContentText("Loading new items") + val notification = NotificationCompat.Builder(applicationContext, Config.syncChannelId) + .setContentTitle(context.getString(R.string.loading_notification_title)) + .setContentText(context.getString(R.string.loading_notification_text)) .setOngoing(true) - .setSmallIcon(R.mipmap.ic_launcher) + .setPriority(PRIORITY_LOW) + .setChannelId(Config.syncChannelId) + .setSmallIcon(R.drawable.ic_cloud_download) notificationManager.notify(1, notification.build()) @@ -59,7 +56,9 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con ) api.allItems().enqueue(object : Callback> { override fun onFailure(call: Call>, t: Throwable) { - notificationManager.cancel(1) + Timer("", false).schedule(4000) { + notificationManager.cancel(1) + } } override fun onResponse( @@ -73,7 +72,9 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con db.itemsDao() .insertAllItems(*(apiItems.map { it.toEntity() }).toTypedArray()) } - notificationManager.cancel(1) + Timer("", false).schedule(4000) { + notificationManager.cancel(1) + } } } }) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt index e5cb510..0956737 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/Config.kt @@ -36,6 +36,8 @@ class Config(c: Context) { const val trackerUrl = "https://github.com/aminecmi/ReaderforSelfoss/issues" + const val syncChannelId = "sync-channel-id" + fun logoutAndRedirect( c: Context, callingActivity: Activity, diff --git a/app/src/main/res/drawable-hdpi/ic_cloud_download.png b/app/src/main/res/drawable-hdpi/ic_cloud_download.png new file mode 100644 index 0000000..9421b3c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_cloud_download.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_cloud_download.png b/app/src/main/res/drawable-mdpi/ic_cloud_download.png new file mode 100644 index 0000000..f7881ba Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_cloud_download.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_cloud_download.png b/app/src/main/res/drawable-xhdpi/ic_cloud_download.png new file mode 100644 index 0000000..ddd3c68 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_cloud_download.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_cloud_download.png b/app/src/main/res/drawable-xxhdpi/ic_cloud_download.png new file mode 100644 index 0000000..e0678b8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_cloud_download.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_cloud_download.png b/app/src/main/res/drawable-xxxhdpi/ic_cloud_download.png new file mode 100644 index 0000000..e129a08 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_cloud_download.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a935b3f..a053277 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -158,4 +158,7 @@ Articles will periodically be synced = 15 minutes)]]> Only refresh when phone is charging + Loading ... + Selfoss is syncing your articles + Sync notification