sashimi4’s diary

日々の雑多なメモを書きます

イースターエッグ等でのAndroidのボタン連打検知について

ふと、いま作っているアプリにイースターエッグを入れようと思い、ボタン連打の検知について簡単に考えてみました。
一番単純な、ボタンを一定回数/速度で連打すると何かが出てくるタイプです。

雑にやってみた

public class MainActivity extends AppCompatActivity {
  public static long CLICK_LIMIT_INTERVAL = 3000;
  private int count = 0;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(final View view) {
        count++;

        if (count >= 10) {
          Snackbar.make(view, "Wow!!!", Snackbar.LENGTH_LONG)
              .setAction("Action", null).show();
          count = 0;
          return;
        }

        new Handler().postDelayed(new Runnable() {
          public void run() {
            if (count > 0) {
              count--;
            }
          }
        }, CLICK_LIMIT_INTERVAL);
      }
    });
  }
  ...

雑〜にこんな感じで書いてみました。(プロトタイピングなのでfabかつMainActivityでやっています。) 3秒間で10回タップしないといけないようになっています。

ゆっくり押していると、10カウント到達前に最初に押したボタンからカウントが無効化(--;)されていく仕組みです。 単純で微妙に穴がありそうですが、とりあえずこれでもいいかなと思います。

おまけ : 本家はどうなっているか覗いてみた

本家イースターエッグ

src/com/android/settings/deviceinfo/FirmwareVersionPreferenceController.java - platform/packages/apps/Settings - Git at Google

最小3回のタップで行けるようです。 軽くトレースした感じ、最初のタップから3回目まで500msという制限になっているようです。たぶん。 System.arraycopy(...) とか久しぶりに見た…。

開発者向けオプションを表示するアレ

Android4.2以降は開発者向けオプションが隠れていて、ビルド番号を連打しないと表示されないのは皆さんご存知かと思います。

src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java - platform/packages/apps/Settings - Git at Google

こちらは、インターバル関係なしに7回タップすれば良いようですね。

もう一度やりたくなったら

もう一度開発者向けオプションを非表示にしたい場合は、 設定アプリ の詳細から データを消去 を行うことで可能のようです。

以上、メモ書きでした。