Skip to content

Commit 07b3a66

Browse files
authored
fix: session status stuck on Connection in progress on devices without GMS (#1092)
* fix: seed initial push tokens and call state in SessionStatusCubit On devices without Google Mobile Services (e.g. Huawei), PushTokensBloc never emits after initialization because GMS availability check returns a terminal status and aborts token retrieval without emitting any state. As a result, _lastPushTokensState remained null indefinitely, causing the condition `pushTokens != null && call != null` in _emitCombinedStatus to never pass — so the UI was stuck at SessionStatus.inProgress regardless of the actual signaling/registration state. Fix: seed _lastPushTokensState and _lastCallState from the blocs' initial states in the constructor, so subsequent _onCallChanged callbacks can emit the correct status even when PushTokensBloc never emits. * refactor: remove unused optional params from _emitCombinedStatus
1 parent 0398512 commit 07b3a66

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

lib/features/session_status/bloc/session_status_cubit.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ final _logger = Logger('SessionStatusCubit');
1616
class SessionStatusCubit extends Cubit<SessionStatusState> {
1717
SessionStatusCubit({required PushTokensBloc pushTokensBloc, required CallBloc callBloc})
1818
: super(const SessionStatusState()) {
19+
_lastPushTokensState = pushTokensBloc.state;
20+
_lastCallState = callBloc.state;
1921
_pushTokensSubscription = pushTokensBloc.stream.listen(_onPushTokensChanged);
2022
_callSubscription = callBloc.stream.listen(_onCallChanged);
2123

22-
_emitCombinedStatus(pushTokensBloc.state, callBloc.state);
24+
_emitCombinedStatus();
2325
}
2426

2527
late final StreamSubscription<PushTokensState> _pushTokensSubscription;
@@ -38,11 +40,11 @@ class SessionStatusCubit extends Cubit<SessionStatusState> {
3840
_emitCombinedStatus();
3941
}
4042

41-
void _emitCombinedStatus([PushTokensState? initialPushTokens, CallState? initialCall]) {
43+
void _emitCombinedStatus() {
4244
_logger.finest('emitCombinedStatus: $_lastPushTokensState, $_lastCallState');
4345

44-
final pushTokens = initialPushTokens ?? _lastPushTokensState;
45-
final call = initialCall ?? _lastCallState;
46+
final pushTokens = _lastPushTokensState;
47+
final call = _lastCallState;
4648

4749
if (pushTokens != null && call != null) {
4850
emit(state.copyWith(status: _mapCallStatusToSessionStatus(call.status, pushTokens)));

0 commit comments

Comments
 (0)