fn android_start()

in components/support/nimbus-cli/src/cmd.rs [478:536]


    fn android_start(&self, app_protocol: StartAppProtocol, open: &AppOpenArgs) -> Result<Command> {
        if let Self::Android {
            package_name,
            activity_name,
            ..
        } = self
        {
            let mut args: Vec<String> = Vec::new();

            let (start_args, ending_args) = open.args();
            args.extend_from_slice(start_args);

            if let Some(deeplink) = self.deeplink(open)? {
                args.extend([
                    "-a android.intent.action.VIEW".to_string(),
                    "-c android.intent.category.DEFAULT".to_string(),
                    "-c android.intent.category.BROWSABLE".to_string(),
                    format!("-d {}", deeplink),
                ]);
            } else {
                args.extend([
                    format!("-n {}/{}", package_name, activity_name),
                    "-a android.intent.action.MAIN".to_string(),
                    "-c android.intent.category.LAUNCHER".to_string(),
                ]);
            }

            let StartAppProtocol {
                reset_db,
                experiments,
                log_state,
            } = app_protocol;

            if log_state || experiments.is_some() || reset_db {
                args.extend(["--esn nimbus-cli".to_string(), "--ei version 1".to_string()]);
            }

            if reset_db {
                args.push("--ez reset-db true".to_string());
            }
            if let Some(s) = experiments {
                let json = s.to_string().replace('\'', "&apos;");
                args.push(format!("--es experiments '{}'", json))
            }
            if log_state {
                args.push("--ez log-state true".to_string());
            };
            args.extend_from_slice(ending_args);

            let sh = format!(r#"am start {}"#, args.join(" \\\n        "),);
            let term = Term::stdout();
            prompt(&term, &format!("adb shell \"{}\"", sh))?;
            let mut cmd = self.exe()?;
            cmd.arg("shell").arg(&sh);
            Ok(cmd)
        } else {
            unreachable!();
        }
    }