@Override
 public void onGameFinished() {
   Debug.c();
   stopTimer();
   Debug.showLong("Game Finished", this);
   showScoreActivity();
 }
  private void startTimer() {
    Debug.c();
    if (mGameManager != null && !mGameManager.isGameFinished()) {
      // Game holds the timer
      // so need to start Game timer via GameManager
      mGameManager.startTimer();

      TimerTask timerTask =
          new TimerTask() {
            @Override
            public void run() {
              runOnUiThread(
                  new Runnable() {
                    @Override
                    public void run() {
                      updateTimeElapsed(mGameManager.getElapsedTime());
                    }
                  });
            }
          };

      mTimer = new Timer();

      mTimer.schedule(timerTask, 0, 1000);
    }
  }
 @Override
 protected void onResume() {
   super.onResume();
   Debug.c();
   if (mGameManager != null) {
     startTimer();
   }
 }
 private void stopTimer() {
   Debug.c();
   if (mGameManager != null && mTimer != null) {
     mGameManager.stopTimer();
     mTimer.cancel();
     mTimer = null;
   }
 }
 @Override
 public void updateTimeElapsed(long elapsedTime) {
   int elapsedTimeInSeconds = (int) elapsedTime / 1000;
   int remainingTime = (GameConstants.GAME_DURATION - elapsedTimeInSeconds);
   String toShow;
   if (remainingTime > 0) {
     toShow = getResources().getString(R.string.time) + " " + remainingTime;
   } else {
     toShow = "Time's Up";
     mGameManager.finishGame();
   }
   Debug.i(String.valueOf(elapsedTimeInSeconds), false);
   timeTextView.setText(toShow);
 }
 private void setupGame() {
   Debug.c();
   mGameManager = new GameManager(mBoardLayoutView, this);
 }