diff --git a/app/src/main/java/de/seemoo/at_tracking_detection/ui/dashboard/RiskDetailFragment.kt b/app/src/main/java/de/seemoo/at_tracking_detection/ui/dashboard/RiskDetailFragment.kt index 7d2cfef2..a824a74a 100644 --- a/app/src/main/java/de/seemoo/at_tracking_detection/ui/dashboard/RiskDetailFragment.kt +++ b/app/src/main/java/de/seemoo/at_tracking_detection/ui/dashboard/RiskDetailFragment.kt @@ -55,7 +55,7 @@ class RiskDetailFragment : Fragment() { // Intent.ACTION_VIEW, // Uri.parse("https://support.apple.com/en-us/HT212227") // ) -// startActivity(intent) +// startActivitySafe(intent) // } view.findViewById(R.id.card_trackers_found).setOnClickListener { diff --git a/app/src/main/java/de/seemoo/at_tracking_detection/ui/onboarding/IgnoreBatteryOptimizationFragment.kt b/app/src/main/java/de/seemoo/at_tracking_detection/ui/onboarding/IgnoreBatteryOptimizationFragment.kt index c2fc7364..f4327066 100644 --- a/app/src/main/java/de/seemoo/at_tracking_detection/ui/onboarding/IgnoreBatteryOptimizationFragment.kt +++ b/app/src/main/java/de/seemoo/at_tracking_detection/ui/onboarding/IgnoreBatteryOptimizationFragment.kt @@ -18,6 +18,7 @@ import androidx.fragment.app.Fragment import dagger.hilt.android.AndroidEntryPoint import de.seemoo.at_tracking_detection.R import de.seemoo.at_tracking_detection.databinding.FragmentIgnoreBatteryOptimizationBinding +import de.seemoo.at_tracking_detection.util.startActivitySafe @AndroidEntryPoint class IgnoreBatteryOptimizationFragment : Fragment() { @@ -64,7 +65,7 @@ class IgnoreBatteryOptimizationFragment : Fragment() { intent.action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS intent.data = Uri.parse("package:$packageName") } - requireContext().startActivity(intent) + startActivitySafe(intent) } companion object { diff --git a/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/InformationFragment.kt b/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/InformationFragment.kt index c843677a..873d1491 100644 --- a/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/InformationFragment.kt +++ b/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/InformationFragment.kt @@ -16,6 +16,7 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import de.seemoo.at_tracking_detection.R +import de.seemoo.at_tracking_detection.util.startActivitySafe class InformationFragment : Fragment() { @@ -84,7 +85,7 @@ class InformationFragment : Fragment() { Intent.ACTION_VIEW, Uri.parse("https://twitter.com/AirGuardAndroid") ) - startActivity(intent) + startActivitySafe(intent) } } @@ -102,7 +103,7 @@ class InformationFragment : Fragment() { private fun openAttributionLink(link: String) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(link)) - startActivity(intent) + startActivitySafe(intent) } private fun getAttributions(): List { @@ -119,8 +120,7 @@ class InformationFragment : Fragment() { putExtra(Intent.EXTRA_SUBJECT, "Subject of the email") putExtra(Intent.EXTRA_TEXT, "Body of the email") } - - startActivity(emailIntent) + startActivitySafe(emailIntent) } } diff --git a/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/SettingsFragment.kt b/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/SettingsFragment.kt index d2602127..1c7c8b7b 100644 --- a/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/de/seemoo/at_tracking_detection/ui/settings/SettingsFragment.kt @@ -16,6 +16,7 @@ import de.seemoo.at_tracking_detection.ATTrackingDetectionApplication import de.seemoo.at_tracking_detection.R import de.seemoo.at_tracking_detection.util.SharedPrefs import de.seemoo.at_tracking_detection.util.Utility +import de.seemoo.at_tracking_detection.util.startActivitySafe import de.seemoo.at_tracking_detection.worker.BackgroundWorkScheduler import timber.log.Timber import javax.inject.Inject @@ -52,7 +53,7 @@ class SettingsFragment : PreferenceFragmentCompat() { Intent.ACTION_VIEW, Uri.parse("https://tpe.seemoo.tu-darmstadt.de/privacy-policy.html") ) - startActivity(intent) + startActivitySafe(intent) return@OnPreferenceClickListener true } diff --git a/app/src/main/java/de/seemoo/at_tracking_detection/util/SafeImplicitIntent.kt b/app/src/main/java/de/seemoo/at_tracking_detection/util/SafeImplicitIntent.kt new file mode 100644 index 00000000..9bb2f00d --- /dev/null +++ b/app/src/main/java/de/seemoo/at_tracking_detection/util/SafeImplicitIntent.kt @@ -0,0 +1,28 @@ +package de.seemoo.at_tracking_detection.util + +import android.content.ActivityNotFoundException +import android.content.Context +import android.content.Intent +import android.widget.Toast +import androidx.fragment.app.Fragment +import de.seemoo.at_tracking_detection.R + +inline fun Context.startActivitySafe(intent: Intent, onError: () -> Unit = { showNotAppFound() }) { + try { + startActivity(intent) + } catch (e: ActivityNotFoundException) { + onError() + } +} + +fun Context.showNotAppFound() { + val message = getString(R.string.app_handler_not_found) + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() +} + +inline fun Fragment.startActivitySafe( + intent: Intent, + onError: () -> Unit = { context?.showNotAppFound() } +) { + context?.startActivitySafe(intent, onError) +} \ No newline at end of file diff --git a/app/src/main/java/de/seemoo/at_tracking_detection/util/ble/BLEScanner.kt b/app/src/main/java/de/seemoo/at_tracking_detection/util/ble/BLEScanner.kt index f0bc565e..5a91a923 100644 --- a/app/src/main/java/de/seemoo/at_tracking_detection/util/ble/BLEScanner.kt +++ b/app/src/main/java/de/seemoo/at_tracking_detection/util/ble/BLEScanner.kt @@ -13,6 +13,7 @@ import de.seemoo.at_tracking_detection.ATTrackingDetectionApplication import de.seemoo.at_tracking_detection.database.models.device.DeviceManager import de.seemoo.at_tracking_detection.detection.LocationRequester import de.seemoo.at_tracking_detection.util.Utility +import de.seemoo.at_tracking_detection.util.startActivitySafe import timber.log.Timber @@ -159,6 +160,6 @@ object BLEScanner { fun openBluetoothSettings(context: Context) { val intentOpenBluetoothSettings = Intent() intentOpenBluetoothSettings.action = Settings.ACTION_BLUETOOTH_SETTINGS - context.startActivity(intentOpenBluetoothSettings) + context.startActivitySafe(intentOpenBluetoothSettings) } } \ 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 4d87ddce..533bb24d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -109,6 +109,7 @@ Information & Contact Get information about us + App for opening this content isn\'t found Delete study data Request deletion of study data