diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt index 0cf0426df..f6bc55a11 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt @@ -145,17 +145,21 @@ class PushNotificationManager( additionalData ) } + + val notificationFactory = HabiticaLocalNotificationFactory() + val localNotification = notificationFactory.build( + remoteMessageIdentifier, + context + ) + localNotification.setExtras(remoteMessage.data) val notification = remoteMessage.notification if (notification != null) { - val notificationManager = NotificationManagerCompat.from(context) - notificationManager.notify(notification.channelId, notification) - } else { - val notificationFactory = HabiticaLocalNotificationFactory() - val localNotification = notificationFactory.build( - remoteMessageIdentifier, - context + localNotification.notifyLocally( + notification.title ?: remoteMessage.data["title"], + notification.body ?: remoteMessage.data["body"], + remoteMessage.data ) - localNotification.setExtras(remoteMessage.data) + } else { localNotification.notifyLocally( remoteMessage.data["title"], remoteMessage.data["body"], diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt index e225fe2ae..1ecde81ab 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt @@ -41,6 +41,7 @@ import com.habitrpg.common.habitica.helpers.LanguageHelper import com.habitrpg.common.habitica.helpers.launchCatching import kotlinx.coroutines.launch import java.io.File +import java.io.FileNotFoundException import java.io.FileOutputStream import java.io.OutputStream import java.util.Date @@ -239,34 +240,39 @@ abstract class BaseActivity : AppCompatActivity() { if (message?.isNotBlank() == true) { sharingIntent.putExtra(Intent.EXTRA_TEXT, message) } - if (image != null) { - val fos: OutputStream - val uri: Uri - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - val resolver = contentResolver - val contentValues = ContentValues() - contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "${Date()}.png") - contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png") - contentValues.put( - MediaStore.MediaColumns.RELATIVE_PATH, - Environment.DIRECTORY_PICTURES - ) - uri = - resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) ?: return - fos = resolver.openOutputStream(uri, "wt") ?: return - } else { - val imagesDir = - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) - .toString() - val file = File(imagesDir, "${Date()}.png") - uri = file.absoluteFile.toUri() - fos = FileOutputStream(file) + try { + if (image != null) { + val fos: OutputStream + val uri: Uri + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val resolver = contentResolver + val contentValues = ContentValues() + contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "${Date()}.png") + contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/png") + contentValues.put( + MediaStore.MediaColumns.RELATIVE_PATH, + Environment.DIRECTORY_PICTURES + ) + uri = + resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) + ?: return + fos = resolver.openOutputStream(uri, "wt") ?: return + } else { + val imagesDir = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + .toString() + val file = File(imagesDir, "${Date()}.png") + uri = file.absoluteFile.toUri() + fos = FileOutputStream(file) + } + image.compress(Bitmap.CompressFormat.PNG, 100, fos) + fos.close() + sharingIntent.putExtra(Intent.EXTRA_STREAM, uri) } - image.compress(Bitmap.CompressFormat.PNG, 100, fos) - fos.close() - sharingIntent.putExtra(Intent.EXTRA_STREAM, uri) + startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_using))) + } catch (_: FileNotFoundException) { + } - startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_using))) } fun reload() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt index 035b224d2..c66f86499 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/TimeTravelersShopFragment.kt @@ -36,7 +36,14 @@ class TimeTravelersShopFragment : ShopFragment() { val subscriptionBottomSheet = EventOutcomeSubscriptionBottomSheetFragment().apply { eventType = EventOutcomeSubscriptionBottomSheetFragment.EVENT_HOURGLASS_SHOP_OPENED } - activity?.supportFragmentManager?.let { subscriptionBottomSheet.show(it, SubscriptionBottomSheetFragment.TAG) } + if (isAdded) { + activity?.supportFragmentManager?.let { + subscriptionBottomSheet.show( + it, + SubscriptionBottomSheetFragment.TAG + ) + } + } } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt index efd25bc50..87be64b6e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.kt @@ -511,8 +511,10 @@ class PartyDetailFragment : BaseFragment() { isDestructive = true ) { _, _ -> viewModel.leaveGroup(groupChallenges, false) { - parentFragmentManager.popBackStack() - MainNavigationController.navigate(R.id.noPartyFragment) + if (isAdded) { + parentFragmentManager.popBackStack() + MainNavigationController.navigate(R.id.noPartyFragment) + } } } alert.setExtraCloseButtonVisibility(View.VISIBLE) diff --git a/version.properties b/version.properties index 51749de69..5837126af 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -NAME=4.3.2 -CODE=6841 \ No newline at end of file +NAME=4.3.3 +CODE=6861 \ No newline at end of file diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt index e18ecc85b..aa078d866 100644 --- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt +++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/BaseActivity.kt @@ -8,6 +8,7 @@ import androidx.activity.ComponentActivity import androidx.core.view.children import androidx.lifecycle.lifecycleScope import androidx.viewbinding.ViewBinding +import com.google.android.gms.common.api.ApiException import com.google.android.gms.tasks.Tasks import com.google.android.gms.wearable.CapabilityClient import com.google.android.gms.wearable.MessageClient @@ -119,13 +120,17 @@ abstract class BaseActivity : ComponentActi val nodeID = info.nodes.firstOrNull() if (nodeID != null) { function?.invoke(true) - Tasks.await( - messageClient.sendMessage( - nodeID.id, - url, - data + try { + Tasks.await( + messageClient.sendMessage( + nodeID.id, + url, + data + ) ) - ) + } catch (_: ApiException) { + // It's not connected + } } else { function?.invoke(false) }