Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions MiniSim/MiniSim.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ class MiniSim: NSObject {
onboarding.show()
return
}

if UserDefaults.standard.enableAndroidEmulators {
_ = try? ADB.configureDefaultAndroidHomeIfNeeded()
}

menu = Menu()
statusItem.menu = menu
setMenuImage()
Expand Down
16 changes: 16 additions & 0 deletions MiniSim/Service/Adb.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
25 changes: 25 additions & 0 deletions MiniSimTests/ADBTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down