Switch to getSystemService's extension method everywhere

Null-safe and avoids type-casting

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-09-12 12:05:27 +05:30
parent a0c9e398cb
commit f6a6f34a81
12 changed files with 46 additions and 54 deletions

View File

@@ -38,6 +38,7 @@ import android.view.LayoutInflater
import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.app.ActivityCompat
import androidx.core.app.ActivityOptionsCompat
import androidx.core.content.getSystemService
import com.aurora.Constants
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
@@ -101,9 +102,9 @@ fun Context.getEmptyActivityBundle(): Bundle? {
}
fun Context.copyToClipBoard(data: String?) {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipboard = getSystemService<ClipboardManager>()
val clip = ClipData.newPlainText("Download Url", data)
clipboard.setPrimaryClip(clip)
clipboard?.setPrimaryClip(clip)
}
fun Context.getStyledAttributeColor(id: Int): Int {
@@ -115,9 +116,7 @@ fun Context.getStyledAttributeColor(id: Int): Int {
fun Context.isIgnoringBatteryOptimizations(): Boolean {
return if (isMAndAbove()) {
(getSystemService(Context.POWER_SERVICE) as PowerManager).isIgnoringBatteryOptimizations(
packageName
)
(getSystemService<PowerManager>())?.isIgnoringBatteryOptimizations(packageName) ?: true
} else {
true
}
@@ -137,8 +136,8 @@ fun Context.isExternalStorageAccessible(): Boolean {
fun Context.isDomainVerified(domain: String): Boolean {
return if (isSAndAbove()) {
val domainVerificationManager = getSystemService(DomainVerificationManager::class.java)
val userState = domainVerificationManager.getDomainVerificationUserState(packageName)
val domainVerificationManager = getSystemService<DomainVerificationManager>()
val userState = domainVerificationManager!!.getDomainVerificationUserState(packageName)
val domainMap = userState?.hostToStateMap?.filterKeys { it == domain }
domainMap?.values?.first() == DomainVerificationUserState.DOMAIN_STATE_SELECTED
} else {

View File

@@ -19,9 +19,9 @@
package com.aurora.extensions
import android.content.Context
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.core.content.getSystemService
fun View.isVisible() = visibility == View.VISIBLE
@@ -38,15 +38,15 @@ fun View.invisible() {
}
fun View.showKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val imm = context.getSystemService<InputMethodManager>()
this.requestFocus()
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
fun View.hideKeyboard(): Boolean {
try {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
return imm.hideSoftInputFromWindow(windowToken, 0)
val imm = context.getSystemService<InputMethodManager>()
return imm?.hideSoftInputFromWindow(windowToken, 0) ?: false
} catch (ignored: RuntimeException) {
}
return false

View File

@@ -28,6 +28,7 @@ import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.content.getSystemService
import androidx.core.content.pm.PackageInfoCompat
import com.aurora.extensions.isOAndAbove
import com.aurora.extensions.isPAndAbove
@@ -101,10 +102,9 @@ class AppInstaller @Inject constructor(
}
fun notifyInstallation(context: Context, displayName: String, packageName: String) {
val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationManager = context.getSystemService<NotificationManager>()
val notification = NotificationUtil.getInstallNotification(context, displayName, packageName)
notificationManager.notify(packageName.hashCode(), notification)
notificationManager!!.notify(packageName.hashCode(), notification)
}
fun getErrorString(context: Context, status: Int): String {

View File

@@ -20,9 +20,9 @@ package com.aurora.store.data.providers
import android.app.ActivityManager
import android.content.Context
import android.content.Context.ACTIVITY_SERVICE
import android.content.res.Configuration
import android.os.Build
import androidx.core.content.getSystemService
import com.aurora.extensions.isHuawei
import java.util.Properties
@@ -77,11 +77,10 @@ class NativeDeviceInfoProvider(val context: Context) {
//Shared Libraries
setProperty("SharedLibraries", getSharedLibraries().joinToString(separator = ","))
//GL Extensions
val activityManager =
context.getSystemService(ACTIVITY_SERVICE) as ActivityManager
val activityManager = context.getSystemService<ActivityManager>()
setProperty(
"GL.Version",
activityManager.deviceConfigurationInfo.reqGlEsVersion.toString()
activityManager!!.deviceConfigurationInfo.reqGlEsVersion.toString()
)
setProperty(
"GL.Extensions",

View File

@@ -16,6 +16,7 @@ import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.getSystemService
import androidx.fragment.app.Fragment
import com.aurora.extensions.checkManifestPermission
import com.aurora.extensions.isDomainVerified
@@ -128,9 +129,8 @@ class PermissionProvider : ActivityResultCallback<ActivityResult> {
PermissionType.INSTALL_UNKNOWN_APPS -> PackageUtil.canRequestPackageInstalls(context)
PermissionType.DOZE_WHITELIST -> {
if (isMAndAbove()) {
val powerManager =
context.getSystemService(Context.POWER_SERVICE) as PowerManager
powerManager.isIgnoringBatteryOptimizations(BuildConfig.APPLICATION_ID)
val powerManager = context.getSystemService<PowerManager>()
powerManager?.isIgnoringBatteryOptimizations(BuildConfig.APPLICATION_ID) ?: false
} else {
true
}

View File

@@ -25,6 +25,7 @@ import android.content.Intent
import android.content.pm.PackageInstaller
import android.util.Log
import androidx.core.content.IntentCompat
import androidx.core.content.getSystemService
import com.aurora.extensions.runOnUiThread
import com.aurora.store.AuroraApp
import com.aurora.store.R
@@ -86,15 +87,14 @@ class InstallerStatusReceiver : BroadcastReceiver() {
displayName: String,
status: Int
) {
val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationManager = context.getSystemService<NotificationManager>()
val notification = NotificationUtil.getInstallerStatusNotification(
context,
packageName,
displayName,
AppInstaller.getErrorString(context, status)
)
notificationManager.notify(packageName.hashCode(), notification)
notificationManager!!.notify(packageName.hashCode(), notification)
}
private fun promptUser(intent: Intent, context: Context) {

View File

@@ -1,12 +1,12 @@
package com.aurora.store.data.work
import android.app.NotificationManager
import android.app.Service
import android.content.Context
import android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.util.Log
import androidx.core.content.getSystemService
import androidx.hilt.work.HiltWorker
import androidx.work.CoroutineWorker
import androidx.work.ForegroundInfo
@@ -79,6 +79,8 @@ class DownloadWorker @AssistedInject constructor(
private val TAG = DownloadWorker::class.java.simpleName
override suspend fun doWork(): Result {
notificationManager = appContext.getSystemService<NotificationManager>()!!
// Bail out immediately if authData is not valid
if (!authProvider.isSavedAuthDataValid()) {
Log.e(TAG, "AuthData is not valid, exiting!")
@@ -106,9 +108,6 @@ class DownloadWorker @AssistedInject constructor(
purchaseHelper = PurchaseHelper(authProvider.authData!!)
.using(httpClient)
notificationManager =
appContext.getSystemService(Service.NOTIFICATION_SERVICE) as NotificationManager
// Bail out if file list is empty
download.fileList = download.fileList.ifEmpty {
purchase(download.packageName, download.versionCode, download.offerType)
@@ -204,9 +203,7 @@ class DownloadWorker @AssistedInject constructor(
notifyStatus(DownloadStatus.FAILED)
}
with(appContext.getSystemService(Service.NOTIFICATION_SERVICE) as NotificationManager) {
cancel(NOTIFICATION_ID)
}
notificationManager.cancel(NOTIFICATION_ID)
}
}

View File

@@ -1,11 +1,11 @@
package com.aurora.store.data.work
import android.app.NotificationManager
import android.app.Service
import android.content.Context
import android.content.pm.PackageManager
import android.net.Uri
import android.util.Log
import androidx.core.content.getSystemService
import androidx.hilt.work.HiltWorker
import androidx.work.CoroutineWorker
import androidx.work.Data
@@ -99,8 +99,7 @@ class ExportWorker @AssistedInject constructor(
val displayName = inputData.getString(DISPLAY_NAME)
val versionCode = inputData.getInt(VERSION_CODE, -1)
notificationManager =
appContext.getSystemService(Service.NOTIFICATION_SERVICE) as NotificationManager
notificationManager = appContext.getSystemService<NotificationManager>()!!
if (packageName.isNullOrEmpty() || isDownload && versionCode == -1) {
Log.e(TAG, "Input data is corrupt, bailing out!")

View File

@@ -3,6 +3,7 @@ package com.aurora.store.data.work
import android.app.NotificationManager
import android.content.Context
import android.util.Log
import androidx.core.content.getSystemService
import androidx.hilt.work.HiltWorker
import androidx.work.Constraints
import androidx.work.CoroutineWorker
@@ -111,8 +112,7 @@ class UpdateWorker @AssistedInject constructor(
Log.i(TAG, "Checking for app updates")
val autoUpdatesMode = Preferences.getInteger(appContext, PREFERENCE_UPDATES_AUTO, 3)
val notifyManager =
appContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationManager = appContext.getSystemService<NotificationManager>()
// Exit if auto-updates is turned off in settings
if (autoUpdatesMode == 0) {
@@ -140,7 +140,7 @@ class UpdateWorker @AssistedInject constructor(
if (updatesList.isNotEmpty()) {
if (autoUpdatesMode == 1) {
Log.i(TAG, "Found updates, notifying!")
notifyManager.notify(
notificationManager!!.notify(
notificationID,
NotificationUtil.getUpdateNotification(appContext, updatesList)
)
@@ -159,7 +159,7 @@ class UpdateWorker @AssistedInject constructor(
if (list.isEmpty()) return@let
Log.i(TAG, "Found apps that cannot be auto-updated, notifying!")
notifyManager.notify(
notificationManager!!.notify(
notificationID,
NotificationUtil.getUpdateNotification(appContext, list)
)
@@ -167,7 +167,7 @@ class UpdateWorker @AssistedInject constructor(
} else {
// Fallback to notification if battery optimizations are enabled
Log.i(TAG, "Found updates, but battery optimizations are enabled!")
notifyManager.notify(
notificationManager!!.notify(
notificationID,
NotificationUtil.getUpdateNotification(appContext, updatesList)
)

View File

@@ -1,6 +1,5 @@
package com.aurora.store.util
import android.app.Application
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
@@ -13,6 +12,7 @@ import android.net.Uri
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.PendingIntentCompat
import androidx.core.content.getSystemService
import androidx.core.os.bundleOf
import androidx.navigation.NavDeepLinkBuilder
import androidx.work.WorkManager
@@ -30,8 +30,7 @@ object NotificationUtil {
fun createNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManager =
context.getSystemService(Application.NOTIFICATION_SERVICE) as NotificationManager
val notificationManager = context.getSystemService<NotificationManager>()
val channels = ArrayList<NotificationChannel>()
channels.add(
NotificationChannel(
@@ -65,7 +64,7 @@ object NotificationUtil {
setSound(null, null)
}
)
notificationManager.createNotificationChannels(channels)
notificationManager!!.createNotificationChannels(channels)
}
}

View File

@@ -20,11 +20,11 @@
package com.aurora.store.view.ui.preferences
import android.app.admin.DevicePolicyManager
import android.content.Context
import android.content.DialogInterface
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.core.content.getSystemService
import androidx.navigation.fragment.findNavController
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
@@ -63,17 +63,16 @@ class InstallationPreference : PreferenceFragmentCompat() {
findPreference<Preference>(PREFERENCE_INSTALLATION_DEVICE_OWNER)?.apply {
val packageName = context.packageName
val devicePolicyManager =
context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
val devicePolicyManager = context.getSystemService<DevicePolicyManager>()
isVisible = devicePolicyManager.isDeviceOwnerApp(packageName)
isVisible = devicePolicyManager?.isDeviceOwnerApp(packageName) ?: false
setOnPreferenceClickListener {
context.showDialog(
context.getString(R.string.pref_clear_device_owner_title),
context.getString(R.string.pref_clear_device_owner_desc),
{ _: DialogInterface, _: Int ->
@Suppress("DEPRECATION")
devicePolicyManager.clearDeviceOwnerApp(packageName)
devicePolicyManager!!.clearDeviceOwnerApp(packageName)
activity?.recreate()
},
{ dialog: DialogInterface, _: Int -> dialog.dismiss() }

View File

@@ -24,6 +24,7 @@ import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import androidx.core.content.getSystemService
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.aurora.extensions.isMAndAbove
@@ -38,8 +39,7 @@ class NetworkViewModel @Inject constructor(
) : ViewModel() {
val status: MutableLiveData<NetworkStatus> = MutableLiveData(NetworkStatus.UNAVAILABLE)
private val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private val connectivityManager = context.getSystemService<ConnectivityManager>()
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
@@ -53,11 +53,11 @@ class NetworkViewModel @Inject constructor(
}
fun register() {
connectivityManager.registerNetworkCallback(getNetworkRequest(), networkCallback)
connectivityManager?.registerNetworkCallback(getNetworkRequest(), networkCallback)
}
fun unregister() {
connectivityManager.unregisterNetworkCallback(networkCallback)
connectivityManager?.unregisterNetworkCallback(networkCallback)
}
private fun getNetworkRequest(): NetworkRequest {
@@ -70,4 +70,4 @@ class NetworkViewModel @Inject constructor(
return networkRequest.build()
}
}
}