Правильные варианты использования для Android UserManager.isUserAGoat()?

Я смотрел на новые API, представленные в Android 4.2. Глядя на класс UserManager я наткнулся на следующий метод:

public boolean isUserAGoat()

Используется для определения того, подвергается ли пользователь, совершающий этот вызов, телепортации.

Возвращает, является ли пользователь, делающий этот вызов, козлом.

Как и когда это следует использовать?

Ответ 1

Исходя из их источника, этот метод возвращал значение false пока он не был изменен в 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;
}

Похоже, что метод не имеет реального применения для нас как разработчиков. Кто-то ранее заявлял, что это может быть пасхальное яйцо.

В API 21 реализация была изменена для проверки наличия установленного приложения с пакетом 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");
}

Вот источник и изменения.

Ответ 2

Я не знаю, было ли это "официальным" вариантом использования, но следующее выдает предупреждение на Java (которое может дополнительно создавать ошибки компиляции, если они смешиваются с операторами return, что приводит к недостижимому коду):

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

Однако это законно:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

Итак, я часто нахожу, что я пишу глупый метод утилиты для самого быстрого способа заглушить блок кода, а затем при завершении отладки нахожу все вызовы к нему, поэтому, если реализация не изменится, это может быть использовано для этого.

JLS указывает if (false) не вызывает "недостижимый код" по той причине, что это нарушит поддержку флагов отладки, т.е. в основном этот прецедент (h/t @auselen). (например, static final boolean DEBUG = false;).

Я заменил while на if, создав более неясный вариант использования. Я считаю, что вы можете отключить вашу среду IDE, например Eclipse, с этим поведением, но это редактирование составляет 4 года в будущем, и у меня нет среды Eclipse для воспроизведения.

Ответ 3

Это, кажется, внутренняя шутка в Google. Он также отображается в диспетчере задач Google Chrome. У него нет никакой цели, кроме некоторых инженеров, которые считают это забавным. Какая цель сама по себе, если хотите.

  • В Chrome откройте диспетчер задач с помощью Shift + Esc.
  • Щелкните правой кнопкой мыши, чтобы добавить столбец Goats Teleported.
  • Wonder.

Существует даже огромный отчет об ошибке Chromium о слишком много телепортированных козлов.

chrome

Следующий фрагмент кода Chromium украден из комментариев HN.

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

Ответ 4

В дополнение к ответу @djechlin (хороший ответ, кстати!), этот вызов функции может быть также использован как фиктивный код для хранения точку останова в среде IDE, когда вы хотите остановиться в некоторой конкретной итерации или конкретном рекурсивном вызове, например:

enter image description here

isUserAGoat() может использоваться вместо объявления фиктивной переменной, которое будет отображаться в среде IDE в качестве предупреждения, а в частном случае Eclipse забивает метку точки останова, что затрудняет ее включение/отключение. Если метод используется как соглашение, все вызовы могут быть позже отфильтрованы некоторым script (во время фазы фиксации, возможно?).

enter image description here

Ребята из Google - это тяжелые пользователи Eclipse (они предоставляют несколько своих проектов как плагины Eclipse: Android SDK, GAE и т.д.), поэтому ответ @djechlin и этот дополнительный ответ имеют большой смысл (по крайней мере для меня).

Ответ 5

В каждой версии Android есть смешной метод /constant/whatever.

Единственное практическое применение, которое я когда-либо видел, было в последнем вызове конкурса Google I/O, на котором они спросили, что именно для конкретной версии, чтобы посмотреть, будут ли конкурсанты прочитайте отчет API diff для каждой версии. В конкурсе также были проблемы с программированием, но в целом некоторые мелочи, которые можно было автоматически классифицировать, чтобы получить количество материалов до разумных количеств, которые было бы легче проверить.

Ответ 6

В дисциплине распознавания речи пользователи делятся на коз и овец.

Например, здесь, на странице 89:

Овцы - это люди, для которых распознавание речи работает исключительно хорошо, а козы - это люди, для которых оно работает исключительно плохо. Только распознаватель голоса знает, что их разделяет. Люди не могут предсказать, чей голос будет легко распознан, а чей нет. Лучшая политика заключается в разработке интерфейса, чтобы он мог обрабатывать всевозможные голоса в любых средах.

Возможно, в будущем планируется пометить пользователей Android как козлов, чтобы иметь возможность настроить механизм распознавания речи для нужд коз. ;-)

Ответ 7

У Google есть серьезная симпатия к козам и козам Пасхальные яйца. Там даже были предыдущие Stack сообщения о переполнении.

Как уже упоминалось в предыдущих сообщениях, он также существует в диспетчере задач Chrome (он впервые появился в дикой природе в 2009 году):

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

А потом в Windows, Linux и Mac версии Chrome в начале 2010 года). Количество "Козлов телепортировано" на самом деле random:

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

Другие ссылки Google на коз включают:

Самое раннее соотношение коз и Google принадлежит, как я могу судить, в исходном блоге "Кошение с козами".

Мы можем с уверенностью предположить, что это просто пасхальное яйцо и не имеет реального использования, за исключением возврата false.

Ответ 8

Начиная с API 21 (первый Android 5.0/Lollipop SDK), это определяет, будет ли Установлено приложение Goat Simulator:

/**
 * 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");
}

Это должно дать понять, что предложение djechlin использовать его в качестве бесплатного if (false) без предупреждения - потенциально катастрофическая стратегия. То, что ранее возвращало false для каждого устройства, теперь возвращает кажущееся случайное значение: если это было достаточно глубоко погребено в коде, может потребоваться много времени, чтобы выяснить, откуда происходят ваши новые ошибки.

Нижняя строка: если вы не контролируете реализацию метода и не решили использовать его для целей, отличных от указанных в документации API, вы столкнулись с проблемами.

Ответ 9

Существует аналогичный вызов isUserAMonkey(), который возвращает true, если используется инструмент MonkeyRunner. Объяснение SDK так же любопытно, как и этот.

public static boolean isUserAMonkey(){}     

Возвращает true, если пользовательский интерфейс в настоящее время запущен обезьяной.

Здесь является источником.

Я ожидаю, что это было добавлено в ожидании нового инструмента Странная функция в ActivityManager: isUserAMonkey. Что это значит, каково его использование?.

Ответ 10

введите описание изображения здесь

В самых отдаленных горах планеты находится продвинутый вид козы, который, по-видимому, в настоящее время способен использовать телефоны, как и мы, люди!

Утечка: youtu.be/YJwZMUn7GdQ

введите описание изображения здесь

Google, должно быть, заметил это и решил оказать им поддержку, пытаясь остаться на переднем крае технологического развития.

Ответ 11

Смешное пасхальное яйцо.
В версии Ubuntu Chrome, в диспетчере задач (shift + esc), щелкнув правой кнопкой мыши, вы можете добавить научную колонку, которая в итальянской версии будет "Capre Teletrasportate" (Teleported Goats).

Смешная теория об этом здесь.

Ответ 12

Пожалуйста, смотрите ниже исходный код:

/**
 * 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");
}

Ответ 13

Это не внутренняя шутка. По-видимому, это просто проверка приложений для Goat Simulator - Coffee Stain Studios

Если у вас установлен Goat Simulator, ваш козел. Если он не установлен, вы не козел.

Я полагаю, что это был скорее личный эксперимент одного из разработчиков, скорее всего, социальный эксперимент по поиску людей с общими интересами.