use droidrun_adb::AdbServer;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
.with_env_filter("info")
.with_target(false)
.init();
let server = AdbServer::default();
let device = server.device().await?;
println!("Device: {}", device.serial);
println!("\n1. Current foreground app:");
match device.app_current().await {
Ok(app) => println!(" {}", app),
Err(e) => println!(" Could not determine: {e}"),
}
println!("\n2. Third-party packages:");
let packages = device.list_packages(&["-3"]).await?;
for p in &packages {
println!(" {p}");
}
println!(" Total: {}", packages.len());
println!("\n3. App details (com.android.settings):");
let info = device.app_info("com.android.settings").await?;
println!(" Package: {}", info.package);
println!(" Version: {}", info.version_name.as_deref().unwrap_or("?"));
println!(" Version Code: {:?}", info.version_code);
println!(" Install Path: {}", info.install_path.as_deref().unwrap_or("?"));
println!("\n4. Starting Settings...");
let result = device.app_start("com.android.settings", None).await?;
println!(" {}", result.trim());
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
println!("\n5. Current app after launch:");
match device.app_current().await {
Ok(app) => println!(" {}", app),
Err(e) => println!(" Could not determine: {e}"),
}
println!("\n6. Stopping Settings...");
device.app_stop("com.android.settings").await?;
println!(" Stopped!");
println!("\n7. Clearing Settings data...");
let clear_result = device.app_clear("com.android.settings").await?;
println!(" Result: {clear_result}");
println!("\nDone!");
Ok(())
}