diff --git a/MiniSim/MiniSim.swift b/MiniSim/MiniSim.swift index 961a420..8dbdaf7 100644 --- a/MiniSim/MiniSim.swift +++ b/MiniSim/MiniSim.swift @@ -80,6 +80,11 @@ class MiniSim: NSObject { onboarding.show() return } + + if UserDefaults.standard.enableAndroidEmulators { + _ = try? ADB.configureDefaultAndroidHomeIfNeeded() + } + menu = Menu() statusItem.menu = menu setMenuImage() diff --git a/MiniSim/Service/Adb.swift b/MiniSim/Service/Adb.swift index aa9eb30..e2cb832 100644 --- a/MiniSim/Service/Adb.swift +++ b/MiniSim/Service/Adb.swift @@ -57,6 +57,22 @@ final class ADB: ADBProtocol { return path + Paths.home.rawValue } + /** + Persists the default Android SDK path when a valid SDK exists and no path was saved during onboarding. + */ + @discardableResult static func configureDefaultAndroidHomeIfNeeded( + fileManager: FileManager = .default + ) throws -> Bool { + guard UserDefaults.standard.androidHome == nil else { + return false + } + + let androidHome = try getAndroidHome() + try checkAndroidHome(path: androidHome, fileManager: fileManager) + UserDefaults.standard.androidHome = androidHome + return true + } + static func getAdbPath() throws -> String { try getAndroidHome() + Paths.adb.rawValue } diff --git a/MiniSimTests/ADBTests.swift b/MiniSimTests/ADBTests.swift index 6cde317..8158507 100644 --- a/MiniSimTests/ADBTests.swift +++ b/MiniSimTests/ADBTests.swift @@ -48,6 +48,31 @@ final class ADBTests: XCTestCase { ) } + func testConfigureDefaultAndroidHomeIfNeeded() throws { + XCTAssertTrue( + try ADB.configureDefaultAndroidHomeIfNeeded(fileManager: FileManagerStub()) + ) + XCTAssertEqual(UserDefaults.standard.androidHome, defaultHomePath) + XCTAssertEqual(shellStub.lastExecutedCommand, defaultHomePath + "/emulator/emulator") + XCTAssertEqual(shellStub.lastPassedArguments, ["-list-avds"]) + } + + func testConfigureDefaultAndroidHomeIfNeededDoesNotOverrideSavedPath() throws { + UserDefaults.standard.androidHome = "customAndroidHome" + + XCTAssertFalse( + try ADB.configureDefaultAndroidHomeIfNeeded(fileManager: FileManagerStub()) + ) + XCTAssertEqual(UserDefaults.standard.androidHome, "customAndroidHome") + } + + func testConfigureDefaultAndroidHomeIfNeededRequiresValidSDK() { + XCTAssertThrowsError( + try ADB.configureDefaultAndroidHomeIfNeeded(fileManager: FileManagerEmptyStub()) + ) + XCTAssertNil(UserDefaults.standard.androidHome) + } + func testCheckAndroidHome() throws { let output = try ADB.checkAndroidHome( path: defaultHomePath,