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
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ class VoicemailCubit extends Cubit<VoicemailState> {
} on EndpointNotSupportedException catch (e) {
final error = DefaultErrorNotification(e);
_safeEmit(state.copyWith(status: VoicemailStatus.featureNotSupported, error: error));
} on VoicemailNotConfiguredException catch (e) {
final error = DefaultErrorNotification(e);
_safeEmit(state.copyWith(status: VoicemailStatus.featureNotSupported, error: error));
} catch (e) {
final error = DefaultErrorNotification(e);
_safeEmit(state.copyWith(status: VoicemailStatus.loaded, error: error));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import 'package:flutter/material.dart';

import 'package:auto_route/auto_route.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:provider/provider.dart';

import 'package:webtrit_phone/app/notifications/notifications.dart';
import 'package:webtrit_phone/data/data.dart';
import 'package:webtrit_phone/features/call/bloc/call_bloc.dart';
import 'package:webtrit_phone/repositories/repositories.dart';

import '../bloc/voicemail_cubit.dart';
import '../models/models.dart';
import '../utils/utils.dart';

Expand All @@ -22,12 +17,9 @@ class VoicemailScreenPage extends StatelessWidget {

@override
Widget build(BuildContext context) {
final voicemailRepository = context.read<VoicemailRepository>();
final secureStorage = context.read<SecureStorage>();
final notificationsBloc = context.read<NotificationsBloc>();
final appTime = context.read<AppTime>();
final appPath = context.read<AppPath>();
final callBloc = context.read<CallBloc>();

final mediaHeaders = MediaHeadersBuilder(secureStorage: secureStorage).build();

Expand All @@ -37,13 +29,6 @@ class VoicemailScreenPage extends StatelessWidget {
mediaHeaders: mediaHeaders,
);

return BlocProvider(
create: (context) => VoicemailCubit(
repository: voicemailRepository,
onCallStarted: (number) => callBloc.add(CallControlEvent.started(number: number, video: false)),
onSubmitNotification: (n) => notificationsBloc.add(NotificationsSubmitted(n)),
),
child: Provider<VoicemailScreenContext>(create: (context) => screenContext, child: const VoicemailScreen()),
);
return Provider<VoicemailScreenContext>(create: (context) => screenContext, child: const VoicemailScreen());
}
}
26 changes: 22 additions & 4 deletions lib/features/settings/view/settings_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -135,14 +135,32 @@ class SettingsScreen extends StatelessWidget {
showSeparator: showSeparators,
onTap: () => _onItemTap(context, item),
),
] else
] else if (item.flavor == SettingsFlavor.voicemail) ...[
BlocBuilder<VoicemailCubit, VoicemailState>(
builder: (context, voicemailState) {
return SettingsTile(
title: context.parseL10n(item.titleL10n),
icon: item.icon,
iconColor: item.iconColor ?? effectiveStyle?.leadingIconsColor,
trailing: !voicemailState.isFeatureNotSupported ? UnreadBadge(count: state.unreadVoicemailCount) : null,
textStyle: effectiveStyle?.itemTextStyle,
showSeparator: showSeparators,
onTap: () => !voicemailState.isFeatureNotSupported ? _onItemTap(context, item) : {
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text(context.l10n.voicemail_Snackbar_notConfigured)))
},
enabled: !voicemailState.isFeatureNotSupported,
opacity: voicemailState.isFeatureNotSupported ? 0.4 : 1.0,
);
},
),
]
else
SettingsTile(
title: context.parseL10n(item.titleL10n),
icon: item.icon,
iconColor: item.iconColor ?? effectiveStyle?.leadingIconsColor,
trailing: item.flavor == SettingsFlavor.voicemail
? UnreadBadge(count: state.unreadVoicemailCount)
: null,
textStyle: effectiveStyle?.itemTextStyle,
showSeparator: showSeparators,
onTap: () => _onItemTap(context, item),
Expand Down
37 changes: 26 additions & 11 deletions lib/features/settings/view/settings_screen_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,36 @@ class SettingsScreenPage extends StatelessWidget {

@override
Widget build(BuildContext context) {
final voicemailRepository = context.read<VoicemailRepository>();
final notificationsBloc = context.read<NotificationsBloc>();
final callBloc = context.read<CallBloc>();

final settingsFeature = context.read<FeatureAccess>().settingsConfig;

final widget = SettingsScreen(sections: settingsFeature.sections);

final provider = BlocProvider(
create: (context) {
return SettingsBloc(
notificationsBloc: context.read<NotificationsBloc>(),
appBloc: context.read<AppBloc>(),
userRepository: context.read<UserRepository>(),
voicemailRepository: context.read<VoicemailRepository>(),
sessionRepository: context.read(),
appPermissions: context.read<AppPermissions>(),
);
},
final provider = MultiBlocProvider(
providers: [
BlocProvider(
create: (context) {
return SettingsBloc(
notificationsBloc: context.read<NotificationsBloc>(),
appBloc: context.read<AppBloc>(),
userRepository: context.read<UserRepository>(),
voicemailRepository: context.read<VoicemailRepository>(),
sessionRepository: context.read(),
appPermissions: context.read<AppPermissions>(),
);
},
),
BlocProvider(
create: (context) => VoicemailCubit(
repository: voicemailRepository,
onCallStarted: (number) => callBloc.add(CallControlEvent.started(number: number, video: false)),
onSubmitNotification: (n) => notificationsBloc.add(NotificationsSubmitted(n)),
),
)
],
child: widget,
);
return provider;
Expand Down
18 changes: 13 additions & 5 deletions lib/features/settings/widgets/settings_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class SettingsTile extends StatelessWidget {
this.trailing,
this.textStyle,
this.showSeparator = true,
this.enabled = true,
this.opacity = 1.0,
super.key,
});

Expand All @@ -26,14 +28,20 @@ class SettingsTile extends StatelessWidget {
final TextStyle? textStyle;
final bool showSeparator;
final VoidCallback onTap;
final bool enabled;
final double opacity;

@override
Widget build(BuildContext context) {
final tile = ListTile(
leading: Icon(icon, color: iconColor),
title: Text(title, style: textStyle),
trailing: trailing,
onTap: onTap,
final tile = Opacity(
opacity: opacity,
child: ListTile(
leading: Icon(icon, color: iconColor),
title: Text(title, style: textStyle),
trailing: trailing,
onTap: onTap,
enabled: enabled,
),
);

if (!showSeparator) return tile;
Expand Down
6 changes: 6 additions & 0 deletions lib/l10n/app_localizations.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4332,6 +4332,12 @@ abstract class AppLocalizations {
/// **'Try again'**
String get voicemail_Label_retry;

/// No description provided for @voicemail_Snackbar_notConfigured.
///
/// In en, this message translates to:
/// **'Contact your administrator to activate voicemail'**
String get voicemail_Snackbar_notConfigured;

/// No description provided for @voicemail_Title_notSupported.
///
/// In en, this message translates to:
Expand Down
2 changes: 2 additions & 0 deletions lib/l10n/app_localizations.g.mapper.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions lib/l10n/app_localizations_en.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2337,6 +2337,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get voicemail_Label_retry => 'Try again';

@override
String get voicemail_Snackbar_notConfigured => 'Contact your administrator to activate voicemail';

@override
String get voicemail_Title_notSupported => 'Feature not supported';

Expand Down
4 changes: 4 additions & 0 deletions lib/l10n/app_localizations_it.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2360,6 +2360,10 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get voicemail_Label_retry => 'Riprova';

@override
String get voicemail_Snackbar_notConfigured =>
'Contatta il tuo amministratore per attivare la segreteria telefonica.';

@override
String get voicemail_Title_notSupported => 'Funzionalità non supportata';

Expand Down
3 changes: 3 additions & 0 deletions lib/l10n/app_localizations_uk.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2357,6 +2357,9 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get voicemail_Label_retry => 'Спробувати ще раз';

@override
String get voicemail_Snackbar_notConfigured => 'Зверніться до адміністратора, щоб активувати голосову пошту.';

@override
String get voicemail_Title_notSupported => 'Функція не підтримується';

Expand Down
2 changes: 2 additions & 0 deletions lib/l10n/arb/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1924,6 +1924,8 @@
"@voicemail_Label_playbackError": {},
"voicemail_Label_retry": "Try again",
"@voicemail_Label_retry": {},
"voicemail_Snackbar_notConfigured": "Contact your administrator to activate voicemail",
"@voicemail_Snackbar_notConfigured": {},
"voicemail_Title_notSupported": "Feature not supported",
"@voicemail_Title_notSupported": {},
"voicemail_Widget_screenTitle": "Voicemail",
Expand Down
2 changes: 2 additions & 0 deletions lib/l10n/arb/app_it.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1924,6 +1924,8 @@
"@voicemail_Label_playbackError": {},
"voicemail_Label_retry": "Riprova",
"@voicemail_Label_retry": {},
"voicemail_Snackbar_notConfigured": "Contatta il tuo amministratore per attivare la segreteria telefonica.",
"@voicemail_Snackbar_notConfigured": {},
"voicemail_Title_notSupported": "Funzionalità non supportata",
"@voicemail_Title_notSupported": {},
"voicemail_Widget_screenTitle": "Segreteria telefonica",
Expand Down
2 changes: 2 additions & 0 deletions lib/l10n/arb/app_uk.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1924,6 +1924,8 @@
"@voicemail_Label_playbackError": {},
"voicemail_Label_retry": "Спробувати ще раз",
"@voicemail_Label_retry": {},
"voicemail_Snackbar_notConfigured": "Зверніться до адміністратора, щоб активувати голосову пошту.",
"@voicemail_Snackbar_notConfigured": {},
"voicemail_Title_notSupported": "Функція не підтримується",
"@voicemail_Title_notSupported": {},
"voicemail_Widget_screenTitle": "Голосова пошта",
Expand Down
9 changes: 9 additions & 0 deletions packages/webtrit_api/lib/src/exceptions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,15 @@ class EndpointNotSupportedException extends RequestFailure {
}) : super();
}

class VoicemailNotConfiguredException extends RequestFailure {
VoicemailNotConfiguredException({
required super.url,
required super.requestId,
required super.statusCode,
// required List<String> recognizedNotConfiguredCodes,
}) : super();
}

class UserNotFoundException extends RequestFailure {
UserNotFoundException({required super.url, required super.requestId, required super.statusCode});

Expand Down
9 changes: 9 additions & 0 deletions packages/webtrit_api/lib/src/webtrit_api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,15 @@ class WebtritApiClient {
);
}

if (error?.code == 'voicemail_not_configured') {
throw VoicemailNotConfiguredException(
url: tenantUrl,
requestId: xRequestId,
statusCode: httpResponse.statusCode,
// recognizedNotConfiguredCodes: ,
);
}

throw RequestFailure(
url: tenantUrl,
statusCode: httpResponse.statusCode,
Expand Down
Loading