¿Cómo la aplicación de Android GitHub fuerza la authentication?

Estoy investigando el código fuente de la aplicación para Android GitHub .

Estoy tratando de averiguar cómo LoginActivity a LoginActivity a aparecer cuando la aplicación se inicia por primera vez. En su manifiesto , parecen tener HomeActivity como MAIN y LoginActivity solo se inicia explícitamente .

Eso significa que siempre se inicia HomeActivity cuando la aplicación se abre por primera vez. Sin embargo, no veo ninguna lógica en HomeActivity que demuestre que comtestingn si la count está presente o no, si no está presente, vaya a LoginActivity

En el código LoginActivity solo se inicia desde aquí .

De acuerdo, todo el mecanismo de authentication de counts y adaptadores de synchronization de Android puede ser bastante complicado a primera vista, y la aplicación de Android GitHub agrega otra capa de complejidad allí, pero intentaré explicarte todo el flujo (espero que mi comprensión sea correcta) .

Al principio, te recomendaría este artículo sobre Android Authenticator si aún no estás familiarizado con el tema. GitHub Android usa exactamente el mismo mecanismo, descrito en ese artículo.

Tiene razón, HomeActivity se lanzó primero. A continuación, inicia OrganizationLoader para cargar una list de orgs. Ese cargador invoca el método de OrganizationService que es parte de la API Java de GitHub . GitHub Android usa RoboGuice para configurar inyecciones de las classs más comúnmente usadas, como los services API de GitHub. Puede ver que OrganizationService se crea en ServicesModule . Toma GithubClient como un parámetro constructor y también hay un GitHubModule que está configurado para devolver AccountClient cuando se necesita una instancia de GitHubClient . AccountClient anula el método configureRequest() e invoca

String token = account.getAuthToken();

Este es un método de la class GitHubAccount , que invoca un método del AccountManager interno de Android. Y AccountManager está configurado para usar ese AccountAuthenticator del que ha hablado, que devuelve la intención de LoginActivity si no hay una count en el dispositivo.

Espero que esto ayude 🙂

La aplicación está usando el sistema de counts de Android, que en realidad está implementado en la class que ya encontraste. Ese sistema de count llamará en algún momento a getAuthToken() , y allí se verificará simplemente si la contraseña está vacía , lo que devuelve el Intento de LoginActivity al sistema de administración de counts. Utilizando esa intención, el sistema de gestión de counts devolverá la llamada a la aplicación y finalmente invocará la actividad de connection.