java - Casos de uso adequado para o Android UserManager.isUserAGoat()?




(8)

Complementando a answer do @djechlin (boa resposta, a propósito!), Essa chamada de função também pode ser usada como código fictício para manter um ponto de interrupção em um IDE quando você quiser parar em alguma iteração específica ou em uma chamada recursiva específica, por exemplo:

isUserAGoat() pode ser usado em vez de uma declaração de variável fictícia que será mostrada no IDE como um aviso e, no caso específico do Eclipse, obstruirá a marca do ponto de interrupção, dificultando a ativação / desativação. Se o método é usado como uma convenção, todas as invocações podem ser posteriormente filtradas por algum script (durante a fase de consolidação, talvez?).

Os caras do Google são usuários pesados ​​do Eclipse (eles fornecem vários de seus projetos como plugins do Eclipse: Android SDK, GAE, etc), então a resposta @djechlin e essa resposta complementar fazem muito sentido (pelo menos para mim).

Eu estava olhando para as novas APIs introduzidas no Android 4.2 . Enquanto olhava para a classe UserManager me deparei com o seguinte método:

public boolean isUserAGoat()

Usado para determinar se o usuário que está fazendo esta chamada está sujeito a teletransporte.

Retorna se o usuário que faz esta chamada é uma cabra.

Como e quando isso deve ser usado?


De sua source , o método usado para retornar false até que foi alterado na API 21.

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 * @return whether the user making this call is a goat 
 */
public boolean isUserAGoat() {
    return false;
}

Parece que o método não tem uso real para nós como desenvolvedores. Alguém já declarou anteriormente que pode ser um ovo de Páscoa .

Na API 21, a implementação foi alterada para verificar se existe um aplicativo instalado com o pacote com.coffeestainstudios.goatsimulator

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

Aqui está o link da fonte


Há um método chamado / constante / o que quer que seja em cada versão do Android.

O único uso prático que vi foi no Concurso de Última chamada do Google I / O , onde eles perguntaram o que era para uma versão específica, para ver se os concorrentes liam o relatório de diferenças da API para cada lançamento. O concurso também apresentava problemas de programação, mas geralmente algumas trivialidades que podiam ser classificadas automaticamente primeiro para que o número de envios chegasse a valores razoáveis ​​que seriam mais fáceis de verificar.


Há uma chamada semelhante, isUserAMonkey() , que retorna true se a ferramenta MonkeyRunner estiver sendo usada. A explicação do SDK é tão curiosa quanto esta.

public static boolean isUserAMonkey(){}     

Retorna true se a interface do usuário estiver sendo confundida por um macaco.

Here está a fonte.

Espero que isso tenha sido adicionado em antecipação a uma nova ferramenta SDK chamada algo com uma cabra e que, na verdade, será funcional para testar a presença dessa ferramenta.

Veja também uma pergunta semelhante, Função Estranha no ActivityManager: isUserAMonkey. O que isso significa, qual é o seu uso? .


Na disciplina de reconhecimento de fala, os usuários são divididos em cabras e ovelhas .

Por exemplo, aqui na página 89 :

Os ovinos são pessoas para quem o reconhecimento de fala funciona excepcionalmente bem, e as cabras são pessoas para as quais ele trabalha excepcionalmente mal. Apenas o reconhecedor de voz sabe o que os separa. As pessoas não podem prever qual voz será reconhecida facilmente e quem não será. A melhor política é projetar a interface para que possa lidar com todos os tipos de voz em todos os tipos de ambientes

Talvez, seja planejado marcar os usuários do Android como bodes no futuro para poder configurar o mecanismo de reconhecimento de fala para as necessidades dos bodes. ;-)


O Google tem um gosto sério por caprinos e ovos de Páscoa . Houve até postagens anteriores do sobre isso .

Como mencionado em postagens anteriores, ele também existe no gerenciador de tarefas do Chrome ( ele apareceu pela primeira vez em 2009 ):

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

E então nas versões Windows, Linux e Mac do Chrome no início de 2010 ). O número de "Goats Teleported" é de fato aleatório :

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

Outras referências do Google para cabras incluem:

A primeira correlação de cabras e do Google pertence ao post original do blog "Mowing with goats", até onde eu sei.

Podemos seguramente assumir que é apenas um ovo de Páscoa e não tem uso no mundo real, exceto por retornar false .


Por favor, veja o código fonte abaixo:

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

A partir da API 21 (o primeiro Android 5.0 / Lollipop SDK) , isso detecta se o aplicativo Goat Simulator está instalado:

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

Isso deve deixar claro que a sugestão de djechlin de usá-lo como um aviso livre if (false) é uma estratégia potencialmente desastrosa. O que anteriormente retornava false para cada dispositivo agora retorna um valor aparentemente aleatório: se isso estivesse enterrado o suficiente no seu código, poderia levar muito tempo para descobrir de onde os novos bugs estão vindo.

Resumindo: se você não controlar a implementação de um método e decidir usá-lo para outros fins que não os declarados na documentação da API, você está em busca de problemas.





usermanager