From 949d4a594b20b6b83123a5a569e22caeda909933 Mon Sep 17 00:00:00 2001
From: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
Date: Fri, 5 Jun 2020 20:14:50 +0200
Subject: [PATCH] Feature: IsBackgroundJob Enabled UI (#208)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Background work quick fix

* Formatting

* Background work improved

* Formatting

* Refactoring

* Refactoring

* Allow background data usage

* Added isBackgroundRestricted

* removed unused import

Co-authored-by: Alexander Alferov <a.alferov@sap.com>
Co-authored-by: Jakob Möller <jakob.moeller@sap.com>
Co-authored-by: AlexanderAlferov <64849422+AlexanderAlferov@users.noreply.github.com>
---
 .../rki/coronawarnapp/ui/main/MainActivity.kt |  4 +--
 .../coronawarnapp/util/ConnectivityHelper.kt  | 34 ++++++++++++++++++-
 2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt
index 1d03c732a..c2f9e7bd1 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt
@@ -2,7 +2,6 @@ package de.rki.coronawarnapp.ui.main
 
 import android.content.Intent
 import android.os.Bundle
-import android.util.Log
 import androidx.appcompat.app.AppCompatActivity
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentManager
@@ -69,8 +68,7 @@ class MainActivity : AppCompatActivity() {
         super.onResume()
         ConnectivityHelper.registerNetworkStatusCallback(this, callbackNetwork)
         ConnectivityHelper.registerBluetoothStatusCallback(this, callbackBluetooth)
-        Log.d(TAG, "Background work is available: ${!ConnectivityHelper.isDataSaverEnabled(this)}")
-        settingsViewModel.updateBackgroundJobEnabled(!ConnectivityHelper.isDataSaverEnabled(this))
+        settingsViewModel.updateBackgroundJobEnabled(ConnectivityHelper.isBackgroundJobEnabled(this))
         scheduleWork()
         showDialogWithStacktraceIfPreviouslyCrashed()
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt
index 457de57a6..7cd591d3b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt
@@ -1,5 +1,6 @@
 package de.rki.coronawarnapp.util
 
+import android.app.ActivityManager
 import android.bluetooth.BluetoothAdapter
 import android.content.BroadcastReceiver
 import android.content.Context
@@ -121,6 +122,20 @@ object ConnectivityHelper {
         }
     }
 
+    /**
+     * Checks if background jobs are enabled
+     *
+     * @param context the context
+     *
+     * @return Boolean
+     *
+     * @see isDataSaverEnabled
+     * @see isBackgroundRestricted
+     */
+    fun isBackgroundJobEnabled(context: Context): Boolean {
+        return !(isDataSaverEnabled(context) || isBackgroundRestricted(context))
+    }
+
     /**
      * For API level 24+ check if data saver is enabled
      * Else always return false
@@ -131,13 +146,30 @@ object ConnectivityHelper {
      *
      * @see ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED
      */
-    fun isDataSaverEnabled(context: Context): Boolean {
+    private fun isDataSaverEnabled(context: Context): Boolean {
         return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
             connectivityManager.restrictBackgroundStatus != ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED
         } else false
     }
 
+    /**
+     * For API level 28+ check if background is restricted
+     * Else always return false
+     *
+     * @param context the context
+     *
+     * @return Boolean
+     *
+     * @see isBackgroundRestricted
+     */
+    private fun isBackgroundRestricted(context: Context): Boolean {
+        val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+            return activityManager.isBackgroundRestricted
+        } else return false
+    }
+
     /**
      * Get bluetooth enabled status.
      *
-- 
GitLab