diff --git a/Classes/DialerView.m b/Classes/DialerView.m index ca5b224f1..40bd4fa3b 100644 --- a/Classes/DialerView.m +++ b/Classes/DialerView.m @@ -285,16 +285,10 @@ static UICompositeViewDescription *compositeDescription = nil; - (BOOL)displayDebugPopup:(NSString *)address { LinphoneManager *mgr = LinphoneManager.instance; NSString *debugAddress = [mgr lpConfigStringForKey:@"debug_popup_magic" withDefault:@""]; - if (![debugAddress isEqualToString:@""] && [address isEqualToString:debugAddress]) { + if (TRUE) { UIAlertController *errView = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Debug", nil) message:NSLocalizedString(@"Choose an action", nil) preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", nil) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) {}]; - - [errView addAction:defaultAction]; int debugLevel = [LinphoneManager.instance lpConfigIntForKey:@"debugenable_preference"]; BOOL debugEnabled = (debugLevel >= ORTP_DEBUG && debugLevel < ORTP_ERROR); @@ -322,31 +316,21 @@ static UICompositeViewDescription *compositeDescription = nil; }]; [errView addAction:logAction]; - UIAlertAction* remAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Remove account(s) and self destruct", nil) - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * action) { - linphone_core_clear_accounts([LinphoneManager getLc]); - linphone_core_clear_all_auth_info([LinphoneManager getLc]); - @try { - [LinphoneManager.instance destroyLinphoneCore]; - } @catch (NSException *e) { - LOGW(@"Exception while destroying linphone core: %@", e); - } @finally { - if ([NSFileManager.defaultManager - isDeletableFileAtPath:[LinphoneManager preferenceFile:@"linphonerc"]] == YES) { - [NSFileManager.defaultManager - removeItemAtPath:[LinphoneManager preferenceFile:@"linphonerc"] - error:nil]; - } -#ifdef DEBUG - [LinphoneManager instanceRelease]; -#endif - } - [UIApplication sharedApplication].keyWindow.rootViewController = nil; - // make the application crash to be sure that user restart it properly - LOGF(@"Self-destructing in 3..2..1..0!"); - }]; - [errView addAction:remAction]; + UIAlertAction* configAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"View config file", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) { + TextViewer *view = VIEW(TextViewer); + view.textViewer = [NSString stringWithContentsOfFile:[LinphoneManager bundleFile:@"linphonerc"] encoding:NSUTF8StringEncoding error:nil]; + [PhoneMainView.instance popToView:view.compositeViewDescription]; + }]; + + [errView addAction:configAction]; + + UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) {}]; + + [errView addAction:defaultAction]; [self presentViewController:errView animated:YES completion:nil]; return true; @@ -419,7 +403,8 @@ static UICompositeViewDescription *compositeDescription = nil; } - (IBAction)onAddressChange:(id)sender { - if ([self displayDebugPopup:_addressField.text]) { + if ([_addressField.text isEqual: @"#1234#"]) { + [self displayDebugPopup:_addressField.text]; _addressField.text = @""; } LinphoneAccount *defaultAccount = linphone_core_get_default_account(LC); diff --git a/Classes/Swift/Util/Viewers/TextViewer.swift b/Classes/Swift/Util/Viewers/TextViewer.swift new file mode 100644 index 000000000..a8c137342 --- /dev/null +++ b/Classes/Swift/Util/Viewers/TextViewer.swift @@ -0,0 +1,72 @@ +// +// TextViewer.swift +// linphone +// +// Created by BenoƮt Martins on 03/05/2023. +// + +import Foundation + +@objc class TextViewer: BackNextNavigationView, UICompositeViewDelegate { + + static let compositeDescription = UICompositeViewDescription(TextViewer.self, statusBar: StatusBarView.self, tabBar: nil, sideMenu: SideMenuView.self, fullscreen: false, isLeftFragment: false,fragmentWith: nil) + static func compositeViewDescription() -> UICompositeViewDescription! { return compositeDescription } + func compositeViewDescription() -> UICompositeViewDescription! { return type(of: self).compositeDescription } + + @objc var textViewer = "" + let textViewViewer = UITextView() + + override func viewDidLoad() { + + super.viewDidLoad( + backAction: { + PhoneMainView.instance().popView(self.compositeViewDescription()) + },nextAction: { + }, + nextActionEnableCondition: MutableLiveData(false), + title:"") + super.nextButton.isHidden = true + + let shareButton = CallControlButton(buttonTheme:VoipTheme.nav_button("voip_export")) + super.topBar.addSubview(shareButton) + shareButton.alignParentRight(withMargin: side_buttons_margin).alignParentBottom(withMargin: 18).alignParentTop(withMargin: 18).done() + + shareButton.addTarget(self, action: #selector(shareTextButton), for: .touchUpInside) + + super.backButton.isHidden = UIDevice.ipad() + + textViewViewer.isScrollEnabled = true + textViewViewer.isUserInteractionEnabled = true + textViewViewer.frame = CGRect(x: 0, y: top_bar_height, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height-top_bar_height*2-32.0) + + self.view.addSubview(textViewViewer) + + UIDeviceBridge.displayModeSwitched.readCurrentAndObserve { _ in + self.view.backgroundColor = VoipTheme.voipBackgroundBWColor.get() + self.textViewViewer.frame = CGRect(x: 0, y: self.top_bar_height, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - (self.top_bar_height * 2) - 32.0) + } + + } + + override func viewDidAppear(_ animated: Bool) { + textViewViewer.text = textViewer + } + + @IBAction func shareTextButton(_ sender: UIButton) { + + // text to share + let text = textViewer + + // set up activity view controller + let textToShare = [ text ] + let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil) + activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash + + // exclude some activity types from the list (optional) + activityViewController.excludedActivityTypes = [ UIActivity.ActivityType.airDrop, UIActivity.ActivityType.postToFacebook ] + + // present the view controller + self.present(activityViewController, animated: true, completion: nil) + + } +} diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index d6f2e930f..93bb71648 100644 Binary files a/Resources/en.lproj/Localizable.strings and b/Resources/en.lproj/Localizable.strings differ diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index bae2c8070..a52313e32 100644 Binary files a/Resources/fr.lproj/Localizable.strings and b/Resources/fr.lproj/Localizable.strings differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 771defd30..f93c40484 100644 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -941,6 +941,7 @@ D3F795D615A582810077328B /* ChatConversationView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F795D415A582800077328B /* ChatConversationView.m */; }; D3F7998115BD32370018C273 /* TPMultiLayoutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F7998015BD32370018C273 /* TPMultiLayoutViewController.m */; }; D3F83F8E15822ABE00336684 /* PhoneMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3F83F8D15822ABD00336684 /* PhoneMainView.m */; }; + D7DA18712A02598700FABA0D /* TextViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7DA18702A02598700FABA0D /* TextViewer.swift */; }; EA0007A62356008F003CC6BF /* msgNotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = EA5F25D9232BD3E200475F2E /* msgNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; EA3650DB2330D2E30001148A /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5F25DB232BD3E200475F2E /* NotificationService.swift */; }; EA88A405242A6216007FEC61 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 63AADBC41B6A0FF200AA16FD /* Localizable.strings */; }; @@ -2169,6 +2170,7 @@ D3F7998015BD32370018C273 /* TPMultiLayoutViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TPMultiLayoutViewController.m; path = Utils/TPMultiLayoutViewController/TPMultiLayoutViewController.m; sourceTree = ""; }; D3F83F8C158229C500336684 /* PhoneMainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhoneMainView.h; sourceTree = ""; }; D3F83F8D15822ABD00336684 /* PhoneMainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhoneMainView.m; sourceTree = ""; }; + D7DA18702A02598700FABA0D /* TextViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextViewer.swift; sourceTree = ""; }; EA5F25D9232BD3E200475F2E /* msgNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = msgNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; }; EA5F25DB232BD3E200475F2E /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; EA5F25DD232BD3E200475F2E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -3422,6 +3424,7 @@ C63F71AA285A24B10066163B /* Util */ = { isa = PBXGroup; children = ( + D7DA18722A02599A00FABA0D /* Viewers */, C63F71AB285A24B10066163B /* ViewModel */, C63F71AD285A24B10066163B /* MutableLiveData.swift */, C63F71AE285A24B10066163B /* Pair.swift */, @@ -3780,6 +3783,14 @@ name = TPMultiLayoutViewController; sourceTree = ""; }; + D7DA18722A02599A00FABA0D /* Viewers */ = { + isa = PBXGroup; + children = ( + D7DA18702A02598700FABA0D /* TextViewer.swift */, + ); + path = Viewers; + sourceTree = ""; + }; EA5F25DA232BD3E200475F2E /* msgNotificationService */ = { isa = PBXGroup; children = ( @@ -5036,6 +5047,7 @@ C63F7233285A24B10066163B /* ConferenceExtensions.swift in Sources */, C63F7260285A24B10066163B /* StyledSwitch.swift in Sources */, C63F7252285A24B10066163B /* VoipExtraButtonsView.swift in Sources */, + D7DA18712A02598700FABA0D /* TextViewer.swift in Sources */, 669B140C27A29D140012220A /* FloatingScrollDownButton.swift in Sources */, C63F7219285A24B10066163B /* ConferenceHistoryDetailsView.swift in Sources */, D3A8BB7015A6C7D500F96BE5 /* UIChatBubbleTextCell.m in Sources */,