Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sphinx/activity/main/activitymain/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ dependencies {
implementation project(path: ':sphinx:screens-detail:common:detail-resources')
implementation project(path: ':sphinx:application:data:concepts:repositories:concept-repository-actions')
implementation project(path: ':sphinx:application:data:concepts:repositories:concept-repository-feed')
implementation project(path: ':sphinx:application:data:concepts:concept-sphinx-notification-manager')

api project(path: ':sphinx:screens-detail:add-friend:add-friend')
api project(path: ':sphinx:screens-detail:camera:camera')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ import chat.sphinx.activitymain.ui.MainViewState
import chat.sphinx.activitymain.ui.MotionLayoutNavigationActivity
import chat.sphinx.insetter_activity.InsetPadding
import chat.sphinx.insetter_activity.InsetterActivity
import chat.sphinx.notification.SphinxNotificationManager
import dagger.hilt.android.AndroidEntryPoint
import dev.chrisbanes.insetter.applyInsetter
import io.matthewnelson.android_feature_navigation.requests.PopBackStack
import io.matthewnelson.android_feature_viewmodel.updateViewState
import kotlinx.coroutines.launch
import javax.inject.Inject
import chat.sphinx.resources.R as R_common


Expand All @@ -41,6 +43,9 @@ class MainActivity: MotionLayoutNavigationActivity<
{
override val binding: ActivityMainBinding by viewBinding(ActivityMainBinding::bind)

@Inject
lateinit var sphinxNotificationManager: SphinxNotificationManager

private var sessionDepth = 0

override val navController: NavController by lazy(LazyThreadSafetyMode.NONE) {
Expand Down Expand Up @@ -71,6 +76,7 @@ class MainActivity: MotionLayoutNavigationActivity<
private var statusBarInsets: InsetPadding? = null
private var navigationBarInsets: InsetPadding? = null
private var keyboardInsets: InsetPadding? = null
private const val EXTRA_CHAT_ID = "chat_id"

var isActive = false
}
Expand Down Expand Up @@ -124,9 +130,7 @@ class MainActivity: MotionLayoutNavigationActivity<
askNotificationPermission()
addWindowInsetChangeListener()

intent.extras?.getString("chat_id")?.toLongOrNull()?.let { chatId ->
handlePushNotification(chatId)
}
handlePushNotificationIntent(intent)
}

override fun onStart() {
Expand Down Expand Up @@ -195,6 +199,8 @@ class MainActivity: MotionLayoutNavigationActivity<
handleDeepLink(deepLink)
}

handlePushNotificationIntent(intent)

setIntent(intent)
}

Expand Down Expand Up @@ -229,6 +235,30 @@ class MainActivity: MotionLayoutNavigationActivity<
}
}

private fun handlePushNotificationIntent(intent: Intent) {
if (!intent.hasExtra(EXTRA_CHAT_ID)) {
return
}

sphinxNotificationManager.clearAllNotifications()

val chatId = intent.getPushNotificationChatId()
intent.removeExtra(EXTRA_CHAT_ID)

chatId?.let { handlePushNotification(it) }
}

private fun Intent.getPushNotificationChatId(): Long? {
val extras = extras ?: return null

return when (val chatId = extras.get(EXTRA_CHAT_ID)) {
is String -> chatId.toLongOrNull()
is Long -> chatId
is Int -> chatId.toLong()
else -> null
}
}

override suspend fun onViewStateFlowCollect(viewState: MainViewState) {
when (viewState) {
is MainViewState.DetailScreenActive -> {
Expand Down Expand Up @@ -337,4 +367,3 @@ class MainActivity: MotionLayoutNavigationActivity<
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ interface SphinxNotificationManager {
)

fun clearNotification(notificationId: Int)

fun clearAllNotifications()
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,8 @@ class SphinxNotificationManagerImpl(
notificationManager.cancel(notificationId)
}

override fun clearAllNotifications() {
notificationManager.cancelAll()
}

}