/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #import "AppDelegate.h" #import "LodefusiLodefusiAbilityViewController.h" #import #define BUNDLE_DIRECTORY @"arkui-x" #define BUNDLE_NAME @"com.example.keeping_accounts" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [StageApplication configModuleWithBundleDirectory:BUNDLE_DIRECTORY]; [StageApplication launchApplication]; NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",BUNDLE_NAME, @"lodefusi", @"LodefusiAbility"]; LodefusiLodefusiAbilityViewController *mainView = [[LodefusiLodefusiAbilityViewController alloc] initWithInstanceName:instanceName]; [self setNavRootVC:mainView]; return YES; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { NSLog(@"appdelegate openUrl callback, url : %@", url.absoluteString); // eg: (com.entry.arkui://entry?OtherAbility) NSString *bundleName = url.scheme; NSString *moduleName = url.host; NSString *abilityName, *params; NSURLComponents * urlComponents = [NSURLComponents componentsWithString:url.absoluteString]; NSArray *array = urlComponents.queryItems; for (NSURLQueryItem * item in array) { if ([item.name isEqualToString:@"abilityName"]) { abilityName = item.value; } else if ([item.name isEqualToString:@"params"]) { params = item.value; } } [self handleOpenUrlWithBundleName:bundleName moduleName:moduleName abilityName:abilityName params:params, nil]; return YES; } - (BOOL)handleOpenUrlWithBundleName:(NSString *)bundleName moduleName:(NSString *)moduleName abilityName:(NSString *)abilityName params:(NSString *)params, ...NS_REQUIRES_NIL_TERMINATION { id rootVC = [[UIApplication sharedApplication].delegate window].rootViewController; BOOL hasRoot = NO; if ([rootVC isKindOfClass:[UINavigationController class]]) { hasRoot = YES; } id subStageVC = nil; if ([moduleName isEqualToString:@"lodefusi"] && [abilityName isEqualToString:@"LodefusiAbility"]) { NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",bundleName, moduleName, abilityName]; LodefusiLodefusiAbilityViewController *otherVC = [[LodefusiLodefusiAbilityViewController alloc] initWithInstanceName:instanceName]; subStageVC = (LodefusiLodefusiAbilityViewController *)otherVC; } else if ([moduleName isEqualToString:@"lodefusi"] && [abilityName isEqualToString:@"LodefusiAbility"]) { NSString *instanceName = [NSString stringWithFormat:@"%@:%@:%@",bundleName, moduleName, abilityName]; LodefusiLodefusiAbilityViewController *otherVC = [[LodefusiLodefusiAbilityViewController alloc] initWithInstanceName:instanceName]; subStageVC = (LodefusiLodefusiAbilityViewController *)otherVC; } // other ViewController if (!subStageVC) { return NO; } if (!hasRoot) { [self setNavRootVC:subStageVC]; } else { UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController; [rootNav pushViewController:subStageVC animated:YES]; } return YES; } - (void)setNavRootVC:(id)viewController { self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:viewController]; [self setNaviAppearance:navi]; self.window.rootViewController = navi; } - (void)setNaviAppearance:(UINavigationController *)navi { UINavigationBarAppearance *appearance = [UINavigationBarAppearance new]; [appearance configureWithOpaqueBackground]; appearance.backgroundColor = UIColor.whiteColor; navi.navigationBar.standardAppearance = appearance; navi.navigationBar.scrollEdgeAppearance = navi.navigationBar.standardAppearance; } @end