1818#import " ios_uikit_bridge.h"
1919#import " utils.h"
2020
21+ #import < objc/runtime.h>
2122#include < sys/time.h>
2223
2324#define AUTORESIZE_MASKS UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin
@@ -28,7 +29,7 @@ @interface LauncherNavigationController () <UIDocumentPickerDelegate, UIPickerVi
2829}
2930
3031@property (nonatomic ) MinecraftResourceDownloadTask* task;
31- @property (nonatomic ) DownloadProgressViewController * progressVC;
32+ @property (nonatomic ) UINavigationController * progressVC;
3233@property (nonatomic ) NSArray * globalToolbarItems;
3334@property (nonatomic ) PLPickerView* versionPickerView;
3435@property (nonatomic ) UITextField* versionTextField;
@@ -85,7 +86,7 @@ - (void)viewDidLoad
8586 action: @selector (performInstallOrShowDetails: )];
8687 self.buttonInstallItem .enabled = NO ;
8788 dispatch_async (dispatch_get_main_queue (), ^{
88- self.buttonInstallItem .view . superview . superview . superview . superview .backgroundColor = [UIColor colorWithRed: 121 /255.0 green: 56 /255.0 blue: 162 /255.0 alpha: 0.5 ];
89+ self.buttonInstallItem .buttonGlassView .backgroundColor = [UIColor colorWithRed: 121 /255.0 green: 56 /255.0 blue: 162 /255.0 alpha: 0.5 ];
8990 });
9091 [textFieldContainer addSubview: self .versionTextField];
9192 UIBarButtonItem *textFieldItem = [[UIBarButtonItem alloc ] initWithCustomView: textFieldContainer];
@@ -257,12 +258,6 @@ - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocum
257258}
258259
259260- (void )setInteractionEnabled : (BOOL )enabled forDownloading : (BOOL )downloading {
260- for (UIControl *view in self.toolbar .subviews ) {
261- if ([view isKindOfClass: UIControl.class]) {
262- view.alpha = enabled ? 1 : 0.2 ;
263- view.enabled = enabled;
264- }
265- }
266261 self.versionTextField .alpha = enabled ? 1 : 0.2 ;
267262 self.versionTextField .enabled = enabled;
268263 self.progressViewMain .hidden = enabled;
@@ -276,6 +271,7 @@ - (void)setInteractionEnabled:(BOOL)enabled forDownloading:(BOOL)downloading {
276271 self.buttonInstallItem .enabled = YES ;
277272 }
278273 } else {
274+ self.buttonInstall .enabled = enabled;
279275 self.buttonInstallItem .enabled = enabled;
280276 }
281277 UIApplication.sharedApplication .idleTimerDisabled = !enabled;
@@ -327,18 +323,31 @@ - (void)launchMinecraft:(UIButton *)sender {
327323 });
328324}
329325
330- - (void )performInstallOrShowDetails : (UIBarButtonItem *)sender {
326+ - (void )performInstallOrShowDetails : (id )sender {
327+ BOOL usesBarButtonItem = [sender isKindOfClass: UIBarButtonItem.class];
331328 if (self.task ) {
332329 if (!self.progressVC ) {
333- self.progressVC = [[DownloadProgressViewController alloc ] initWithTask: self .task];
330+ UIViewController *vc = [[DownloadProgressViewController alloc ] initWithTask: self .task];
331+ self.progressVC = [[UINavigationController alloc ] initWithRootViewController: vc];
332+ self.progressVC .modalPresentationStyle = UIModalPresentationPopover;
333+ } else if (self.progressVC .popoverPresentationController ._isDismissing ) {
334+ // FIXME: stock bug? it crashes when users dismisses and presents this vc too fast
335+ // "UIPopoverPresentationController () should have a non-nil sourceView or barButtonItem set before the presentation occurs."
336+ return ;
334337 }
335- UINavigationController *nav = [[UINavigationController alloc ] initWithRootViewController: self .progressVC];
336- nav.modalPresentationStyle = UIModalPresentationPopover;
337- nav.popoverPresentationController .sourceView = sender.view ;
338- [self presentViewController: nav animated: YES completion: nil ];
338+
339+ if (usesBarButtonItem) {
340+ self.progressVC .popoverPresentationController .barButtonItem = sender;
341+ } else {
342+ self.progressVC .popoverPresentationController .sourceView = sender;
343+ }
344+ [self presentViewController: self .progressVC animated: YES completion: nil ];
339345 } else {
346+ if (usesBarButtonItem) {
347+ sender = ((UIBarButtonItem *)sender).buttonGlassView ;
348+ }
340349 [self launchMinecraft: sender];
341- }
350+ }
342351}
343352
344353- (void )observeValueForKeyPath : (NSString *)keyPath ofObject : (id )object change : (NSDictionary *)change context : (void *)context {
0 commit comments