From 984647084ba78f8fd454af52c3239d0ba3077fc6 Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Fri, 27 May 2022 21:54:26 +0700 Subject: [PATCH] Fixes - [Internal] Changed how setting current viewController work - [Internal] Correct 018e46a: avoid duplicating code - [Internal] Saving JSON now uses NSData to write directly - Correct a check of the Launch .jar option - Set the AWT window size for the game --- .../main/java/org/lwjgl/opengl/Display.java | 2 + Natives/AboutLauncherViewController.m | 3 +- Natives/AppDelegate.h | 2 +- Natives/AppDelegate.m | 7 ++- Natives/CustomControlsViewController.m | 1 - Natives/JavaGUIViewController.m | 3 +- Natives/LauncherFAQViewController.m | 1 - Natives/LauncherPreferencesViewController.m | 9 ++- Natives/LauncherViewController.h | 2 +- Natives/LauncherViewController.m | 57 ++++--------------- Natives/LoginViewController.m | 3 - Natives/SceneDelegate.h | 2 +- Natives/SceneDelegate.m | 8 ++- Natives/UpdateHistoryViewController.m | 3 +- Natives/utils.h | 2 +- Natives/utils.m | 3 +- 16 files changed, 37 insertions(+), 71 deletions(-) diff --git a/JavaApp/src/main/java/org/lwjgl/opengl/Display.java b/JavaApp/src/main/java/org/lwjgl/opengl/Display.java index 4fd85518..37e1ce7a 100644 --- a/JavaApp/src/main/java/org/lwjgl/opengl/Display.java +++ b/JavaApp/src/main/java/org/lwjgl/opengl/Display.java @@ -341,6 +341,8 @@ public class Display { latestResized = true; latestWidth = width; latestHeight = height; + + if(parent != null) parent.setSize(width, height); } }; diff --git a/Natives/AboutLauncherViewController.m b/Natives/AboutLauncherViewController.m index e7f09e7f..f3afc3a1 100644 --- a/Natives/AboutLauncherViewController.m +++ b/Natives/AboutLauncherViewController.m @@ -26,8 +26,7 @@ - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; - + [self setTitle:@"About PojavLauncher"]; CGRect screenBounds = [[UIScreen mainScreen] bounds]; diff --git a/Natives/AppDelegate.h b/Natives/AppDelegate.h index f4a18f4c..451791d3 100644 --- a/Natives/AppDelegate.h +++ b/Natives/AppDelegate.h @@ -4,7 +4,7 @@ #import "MGLKit.h" -@interface AppDelegate : UIResponder +@interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; diff --git a/Natives/AppDelegate.m b/Natives/AppDelegate.m index 90a4b183..edf743e0 100644 --- a/Natives/AppDelegate.m +++ b/Natives/AppDelegate.m @@ -2,15 +2,20 @@ #import "LoginViewController.h" #import "SceneDelegate.h" #import "ios_uikit_bridge.h" -#include "utils.h" +#import "utils.h" @implementation AppDelegate +- (void)navigationController:(UINavigationController *)controller willShowViewController:(UIViewController *)vc animated:(BOOL)animated { + viewController = vc; +} + - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (@available(iOS 13.0, *)) { } else { self.window = ([[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]); launchInitialViewController(self.window); + ((UINavigationController *)self.window.rootViewController).delegate = self; [self.window makeKeyAndVisible]; } diff --git a/Natives/CustomControlsViewController.m b/Natives/CustomControlsViewController.m index a475d517..8f06e760 100644 --- a/Natives/CustomControlsViewController.m +++ b/Natives/CustomControlsViewController.m @@ -86,7 +86,6 @@ NSMutableArray *keyCodeMap, *keyValueMap; - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; isControlModifiable = YES; [self.navigationController setNavigationBarHidden:YES animated:YES]; diff --git a/Natives/JavaGUIViewController.m b/Natives/JavaGUIViewController.m index 942f45a3..883a9dfe 100644 --- a/Natives/JavaGUIViewController.m +++ b/Natives/JavaGUIViewController.m @@ -69,8 +69,7 @@ const void * _CGDataProviderGetBytePointerCallbackAWT(void *info) { - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; - + [self.navigationController setNavigationBarHidden:YES animated:NO]; [self setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; [self setNeedsUpdateOfHomeIndicatorAutoHidden]; diff --git a/Natives/LauncherFAQViewController.m b/Natives/LauncherFAQViewController.m index bc025de8..6717c4e0 100644 --- a/Natives/LauncherFAQViewController.m +++ b/Natives/LauncherFAQViewController.m @@ -12,7 +12,6 @@ CGFloat faqcurrY = 4.0; - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; [self setTitle:@"Launcher FAQ"]; diff --git a/Natives/LauncherPreferencesViewController.m b/Natives/LauncherPreferencesViewController.m index 39ed507c..a0965976 100644 --- a/Natives/LauncherPreferencesViewController.m +++ b/Natives/LauncherPreferencesViewController.m @@ -102,7 +102,6 @@ int tempIndex; - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; [self setTitle:@"Preferences"]; @@ -931,19 +930,19 @@ int tempIndex; break; case TAG_SWITCH_VRELEASE: setPreference(@"vertype_release", @(sender.isOn)); - [LauncherViewController reloadVersionList]; + [LauncherViewController reloadVersionList:nil]; break; case TAG_SWITCH_VSNAPSHOT: setPreference(@"vertype_snapshot", @(sender.isOn)); - [LauncherViewController reloadVersionList]; + [LauncherViewController reloadVersionList:nil]; break; case TAG_SWITCH_VOLDBETA: setPreference(@"vertype_oldbeta", @(sender.isOn)); - [LauncherViewController reloadVersionList]; + [LauncherViewController reloadVersionList:nil]; break; case TAG_SWITCH_VOLDALPHA: setPreference(@"vertype_oldalpha", @(sender.isOn)); - [LauncherViewController reloadVersionList]; + [LauncherViewController reloadVersionList:nil]; break; case TAG_CHECKSHA: setPreference(@"check_sha", @(sender.isOn)); diff --git a/Natives/LauncherViewController.h b/Natives/LauncherViewController.h index 412f653e..9237e2f4 100644 --- a/Natives/LauncherViewController.h +++ b/Natives/LauncherViewController.h @@ -8,7 +8,7 @@ NSArray* versionList; @property UILabel* progressText; @property UIButton* buttonInstall; -+ (void)reloadVersionList; ++ (void)reloadVersionList:(LauncherViewController *)vc; + (void)fetchLocalVersionList:(NSMutableArray *)finalVersionList withPreviousIndex:(int)index; @end diff --git a/Natives/LauncherViewController.m b/Natives/LauncherViewController.m index 52df21ff..cd6cf653 100644 --- a/Natives/LauncherViewController.m +++ b/Natives/LauncherViewController.m @@ -25,7 +25,6 @@ int versionSelectedAt = 0; - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; [self setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; [self setNeedsUpdateOfHomeIndicatorAutoHidden]; @@ -62,7 +61,7 @@ int versionSelectedAt = 0; versionTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentTop; versionTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; - [LauncherViewController fetchVersionList]; + [LauncherViewController reloadVersionList:self]; versionPickerView = [[UIPickerView alloc] init]; versionPickerView.delegate = self; versionPickerView.dataSource = self; @@ -150,21 +149,20 @@ int versionSelectedAt = 0; } } -+ (void)fetchVersionList ++ (void)reloadVersionList:(LauncherViewController *)vc { - __weak LauncherViewController *weakSelf = ((LauncherViewController *)viewController); AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:@"https://launchermeta.mojang.com/mc/game/version_manifest.json" parameters:nil headers:nil progress:^(NSProgress * _Nonnull progress) { - weakSelf.progressViewMain.progress = progress.fractionCompleted; + vc.progressViewMain.progress = progress.fractionCompleted; } success:^(NSURLSessionTask *task, id responseObject) { NSDictionary *jsonArray = responseObject; - NSArray *remoteVersionList = [jsonArray valueForKey:@"versions"]; + NSArray *remoteVersionList = jsonArray[@"versions"]; assert(remoteVersionList != nil); NSMutableArray *finalVersionList = [[NSMutableArray alloc] init]; int i = 0; for (NSDictionary *versionInfo in remoteVersionList) { - NSString *versionId = [versionInfo valueForKey:@"id"]; - NSString *versionType = [versionInfo valueForKey:@"type"]; + NSString *versionId = versionInfo[@"id"]; + NSString *versionType = versionInfo[@"type"]; if (([versionType containsString:@"release"] && [getPreference(@"vertype_release") boolValue]) || ([versionType containsString:@"snapshot"] && [getPreference(@"vertype_snapshot") boolValue]) || ([versionType containsString:@"old_beta"] && [getPreference(@"vertype_oldbeta") boolValue]) || @@ -184,49 +182,14 @@ int versionSelectedAt = 0; [versionPickerView reloadAllComponents]; [versionPickerView selectRow:versionSelectedAt inComponent:0 animated:NO]; - weakSelf.buttonInstall.enabled = YES; - weakSelf.progressViewMain.progress = 0; + vc.buttonInstall.enabled = YES; + vc.progressViewMain.progress = 0; } failure:^(NSURLSessionTask *operation, NSError *error) { NSLog(@"Warning: Error fetching version list: %@", error); - weakSelf.buttonInstall.enabled = YES; + vc.buttonInstall.enabled = YES; }]; } -+ (void)reloadVersionList -{ - AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; - [manager GET:@"https://launchermeta.mojang.com/mc/game/version_manifest.json" parameters:nil headers:nil progress:^(NSProgress * _Nonnull progress) { - } success:^(NSURLSessionTask *task, id responseObject) { - NSDictionary *jsonArray = responseObject; - NSArray *remoteVersionList = [jsonArray valueForKey:@"versions"]; - assert(remoteVersionList != nil); - NSMutableArray *finalVersionList = [[NSMutableArray alloc] init]; - int i = 0; - for (NSDictionary *versionInfo in remoteVersionList) { - NSString *versionId = [versionInfo valueForKey:@"id"]; - NSString *versionType = [versionInfo valueForKey:@"type"]; - if (([versionType containsString:@"release"] && [getPreference(@"vertype_release") boolValue]) || - ([versionType containsString:@"snapshot"] && [getPreference(@"vertype_snapshot") boolValue]) || - ([versionType containsString:@"old_beta"] && [getPreference(@"vertype_oldbeta") boolValue]) || - ([versionType containsString:@"old_alpha"] && [getPreference(@"vertype_oldalpha") boolValue]) || - [versionType containsString:@"modified"] || - [self isVersionInstalled:versionId]) { - [finalVersionList addObject:versionInfo]; - - if ([versionTextField.text isEqualToString:versionId]) { - versionSelectedAt = i; - } - i++; - } - } - [self fetchLocalVersionList:finalVersionList withPreviousIndex:i]; - versionList = [finalVersionList copy]; - [versionPickerView reloadAllComponents]; - [versionPickerView selectRow:versionSelectedAt inComponent:0 animated:NO]; - } failure:^(NSURLSessionTask *operation, NSError *error) { - NSLog(@"Warning: Error fetching version list: %@", error); - }]; -} #pragma mark - Button click events - (void)displayOptions:(UIBarButtonItem*)sender { if (@available(iOS 14.0, *)) { @@ -271,7 +234,7 @@ int versionSelectedAt = 0; - (void)enterModInstaller:(UIBarButtonItem*)sender { NSString *javaVer = getPreference(@"java_home"); NSFileManager *fileManager = [NSFileManager defaultManager]; - if(![fileManager fileExistsAtPath:JRE8_HOME_JB] && !getenv("POJAV_DETECTEDJB")) { + if(![fileManager fileExistsAtPath:JRE8_HOME_JB] && getenv("POJAV_DETECTEDJB")) { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Cannot use the mod installer" message:@"In order to use the mod installer, you need to install Java 8." preferredStyle:UIAlertControllerStyleActionSheet]; if (alert.popoverPresentationController != nil) { alert.popoverPresentationController.sourceView = self.view; diff --git a/Natives/LoginViewController.m b/Natives/LoginViewController.m index cf330966..a8976798 100644 --- a/Natives/LoginViewController.m +++ b/Natives/LoginViewController.m @@ -34,7 +34,6 @@ - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(msaLoginCallback:) name:@"MSALoginCallback" object:nil]; @@ -57,8 +56,6 @@ self.view.backgroundColor = [UIColor whiteColor]; } - - if(getenv("POJAV_DETECTEDJB")) { if(strcmp(getenv("POJAV_DETECTEDJB"), "Other") == 0 && [getPreference(@"jb_warn") boolValue] == YES) { UIAlertController *jbAlert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"login.warn.title.otherjb", nil) message:NSLocalizedString(@"login.warn.message.otherjb", nil) preferredStyle:UIAlertControllerStyleAlert]; diff --git a/Natives/SceneDelegate.h b/Natives/SceneDelegate.h index 9d3a8ba4..3a08bcf3 100644 --- a/Natives/SceneDelegate.h +++ b/Natives/SceneDelegate.h @@ -1,6 +1,6 @@ #import -@interface SceneDelegate : UIResponder +@interface SceneDelegate : UIResponder @property (strong, nonatomic) UIWindow * window; diff --git a/Natives/SceneDelegate.m b/Natives/SceneDelegate.m index 6c9e0bd3..a6e22cf5 100644 --- a/Natives/SceneDelegate.m +++ b/Natives/SceneDelegate.m @@ -1,7 +1,7 @@ #import "SceneDelegate.h" #import "LoginViewController.h" #import "ios_uikit_bridge.h" -#include "utils.h" +#import "utils.h" @interface SceneDelegate () @@ -10,6 +10,11 @@ @implementation SceneDelegate +- (void)navigationController:(UINavigationController *)controller willShowViewController:(UIViewController *)vc animated:(BOOL)animated { + viewController = vc; +} + + - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)) API_AVAILABLE(ios(13.0)) API_AVAILABLE(ios(13.0)){ if (@available(iOS 13.0, *)) { @@ -17,6 +22,7 @@ self.window = [[UIWindow alloc] initWithWindowScene:windowScene]; self.window.frame = windowScene.coordinateSpace.bounds; launchInitialViewController(self.window); + ((UINavigationController *)self.window.rootViewController).delegate = self; [self.window makeKeyAndVisible]; } else { diff --git a/Natives/UpdateHistoryViewController.m b/Natives/UpdateHistoryViewController.m index 1105fb58..b353cc34 100644 --- a/Natives/UpdateHistoryViewController.m +++ b/Natives/UpdateHistoryViewController.m @@ -18,8 +18,7 @@ CGFloat uhcurrY = 4.0; - (void)viewDidLoad { [super viewDidLoad]; - viewController = self; - + [self setTitle:@"Update History"]; CGRect screenBounds = [[UIScreen mainScreen] bounds]; diff --git a/Natives/utils.h b/Natives/utils.h index 73d54057..d155962f 100644 --- a/Natives/utils.h +++ b/Natives/utils.h @@ -39,7 +39,7 @@ int minJavaVersion; JavaVM* runtimeJavaVMPtr; JNIEnv* runtimeJNIEnvPtr; -UIViewController *viewController; +__weak UIViewController *viewController; void* gbuffer; // OSMesa framebuffer long showingWindow; diff --git a/Natives/utils.m b/Natives/utils.m index 627d4fb0..dd81a401 100644 --- a/Natives/utils.m +++ b/Natives/utils.m @@ -33,8 +33,7 @@ NSError* saveJSONToFile(NSDictionary *dict, NSString *path) { if (jsonData == nil) { return error; } - NSString *jsonStr = [NSString stringWithUTF8String:jsonData.bytes]; - BOOL success = [jsonStr writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error]; + BOOL success = [jsonData writeToFile:path options:NSDataWritingAtomic error:&error]; if (!success) { return error; }