|  |  |  | // | 
					
						
							|  |  |  | //  Copyright (c) 2018 Open Whisper Systems. All rights reserved. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #import "Environment.h" | 
					
						
							|  |  |  | #import "OWSPreferences.h" | 
					
						
							|  |  |  | #import <SignalServiceKit/AppContext.h> | 
					
						
							|  |  |  | #import <SignalServiceKit/SSKEnvironment.h> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Environment *sharedEnvironment = nil; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @implementation Environment | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | + (Environment *)shared | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     OWSAssertDebug(sharedEnvironment); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return sharedEnvironment; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | + (void)setShared:(Environment *)environment | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // The main app environment should only be set once. | 
					
						
							|  |  |  |     // | 
					
						
							|  |  |  |     // App extensions may be opened multiple times in the same process, | 
					
						
							|  |  |  |     // so statics will persist. | 
					
						
							|  |  |  |     OWSAssertDebug(!sharedEnvironment || !CurrentAppContext().isMainApp); | 
					
						
							|  |  |  |     OWSAssertDebug(environment); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sharedEnvironment = environment; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | + (void)clearSharedForTests | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     sharedEnvironment = nil; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (instancetype)initWithPreferences:(OWSPreferences *)preferences | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     self = [super init]; | 
					
						
							|  |  |  |     if (!self) { | 
					
						
							|  |  |  |         return self; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     OWSAssertDebug(preferences); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     _preferences = preferences; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     OWSSingletonAssert(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - (OWSContactsManager *)contactsManager | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return (OWSContactsManager *)SSKEnvironment.shared.contactsManager; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @end |