From c7ffd51cecded6d59801c0c76e773a46d4d3c140 Mon Sep 17 00:00:00 2001 From: True Zhuanjia Date: Wed, 18 Feb 2026 13:01:08 +0800 Subject: [PATCH] pencil pro widget template import changes --- VoidLink/Input/CustomOSC/OSCProfilesManager.m | 12 ++++++++++++ VoidLink/Utility/IAPManager.swift | 1 + VoidLink/ViewControllers/SettingsViewController.m | 8 ++++++++ 3 files changed, 21 insertions(+) diff --git a/VoidLink/Input/CustomOSC/OSCProfilesManager.m b/VoidLink/Input/CustomOSC/OSCProfilesManager.m index ddc0ec75..d1c9cec4 100644 --- a/VoidLink/Input/CustomOSC/OSCProfilesManager.m +++ b/VoidLink/Input/CustomOSC/OSCProfilesManager.m @@ -222,14 +222,26 @@ static CGRect layoutViewBounds; NSMutableArray *defaultProfilesEncoded = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:fileData error:nil]; // Decode the encoded array itself, NOT the objects contained in the array OSCProfile *defaultProfileDecoded; NSMutableArray *targetProfilesDecoded = [self getAllProfiles]; + OSCProfile *newPencilProProfile; + bool pencilProProfileExisted = false; for (NSData *profileEncoded in defaultProfilesEncoded) { defaultProfileDecoded = [NSKeyedUnarchiver unarchivedObjectOfClasses: classes fromData:profileEncoded error: nil]; OSCProfile *targetProfile = [self findProfileByName:defaultProfileDecoded.name inProfileArray:targetProfilesDecoded]; + if([defaultProfileDecoded.name isEqualToString:@"Pencil Pro"]){ + newPencilProProfile = [defaultProfileDecoded mutableCopy]; + } if(targetProfile){ + if([targetProfile.name isEqualToString:@"Pencil Pro"]){ + pencilProProfileExisted = true; + } uint64_t targetIndex = [targetProfilesDecoded indexOfObject:targetProfile]; targetProfilesDecoded[targetIndex] = defaultProfileDecoded; } } + if(newPencilProProfile && !pencilProProfileExisted){ + if(newPencilProProfile) [targetProfilesDecoded insertObject:newPencilProProfile atIndex:1]; + } + NSMutableArray* targetPofilesEncoded = [self encodedProfilesFromArray:targetProfilesDecoded]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:targetPofilesEncoded requiringSecureCoding:YES error:nil]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"OSCProfiles"]; diff --git a/VoidLink/Utility/IAPManager.swift b/VoidLink/Utility/IAPManager.swift index 620fe8b2..c2bf266c 100644 --- a/VoidLink/Utility/IAPManager.swift +++ b/VoidLink/Utility/IAPManager.swift @@ -251,6 +251,7 @@ import StoreKit settings?.onscreenControls = 1 dataMan.saveData() let profileMan = OSCProfilesManager.sharedManager(.zero) + profileMan.updateDefaultTemplates() let profiles = profileMan.getAllProfiles() guard profiles.count > 1 else { break } guard let targetProfile = profiles[1] as? OSCProfile else { break } diff --git a/VoidLink/ViewControllers/SettingsViewController.m b/VoidLink/ViewControllers/SettingsViewController.m index a5d111d1..6ded761a 100644 --- a/VoidLink/ViewControllers/SettingsViewController.m +++ b/VoidLink/ViewControllers/SettingsViewController.m @@ -481,6 +481,10 @@ BOOL isCustomResolution(int resolutionSelected) { selector:@selector(pencilProPurchaseAborted:) name:@"PencilProPurchaseAbortedNotification" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(pencilProPurchaseSucceeded:) + name:@"PencilProPurchaseSucceededNotification" + object:nil]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ if(self.mainFrameViewController.settingsExpandedInStreamView){ @@ -3446,6 +3450,10 @@ BOOL isCustomResolution(int resolutionSelected) { }); } +- (void)pencilProPurchaseSucceeded:(NSNotification *)notification{ + self.onScreenWidgetSelector.selectedSegmentIndex = OnScreenControlsLevelCustom; +} + - (void)pencilTickIntervalSliderMoved:(UISlider* )sender{ [self findDynamicLabelFromStack:self.pencilTickIntervalStack].text = [NSString stringWithFormat:@" %d μs ", (uint16_t)sender.value]; }