use droidrun_core::driver::android::AndroidDriver;
use droidrun_core::driver::DeviceDriver;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
.with_env_filter("info")
.with_target(false)
.init();
let mut driver = AndroidDriver::new(None, true);
driver.connect().await?;
println!("Connected!");
let date = driver.get_date().await?;
println!("Device date: {date}");
let png = driver.screenshot(true).await?;
tokio::fs::write("driver_screenshot.png", &png).await?;
println!("Screenshot: {} bytes -> driver_screenshot.png", png.len());
driver.press_key(3).await?; tokio::time::sleep(std::time::Duration::from_secs(1)).await;
println!("Home screen");
let tree = driver.get_ui_tree().await?;
let keys: Vec<&String> = tree.as_object().map(|o| o.keys().collect()).unwrap_or_default();
println!("UI tree keys: {keys:?}");
println!("Tapping at center...");
driver.tap(540, 1200).await?;
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
println!("Swiping up...");
driver.swipe(540, 1800, 540, 600, 300).await?;
tokio::time::sleep(std::time::Duration::from_millis(500)).await;
let apps = driver.get_apps(false).await?; println!("\nInstalled apps ({}):", apps.len());
for app in &apps {
println!(" {:<50} {}", app.package, app.label);
}
let packages = driver.list_packages(false).await?;
println!("\nPackage count: {}", packages.len());
let typed = driver.input_text("Hello from droidrun-rs!", false).await?;
println!("Input text result: {typed}");
driver.press_key(3).await?;
println!("\nDone!");
Ok(())
}