// @Override
        public void handleMessage(Message msg) {
          if (msg.what == 1) {
            _progressDlg.hide();

            getNumPuzzles();
            if (_seekBar != null) {
              _seekBar.setMax(_num);
            }

            play();
          } else if (msg.what == 2) {
            _progressDlg.setMessage(
                _parent.getString(R.string.msg_progress)
                    + String.format(" %d", (_cnt * 100) / _num)
                    + " %");
          } else if (msg.what == 3) {
            _progressDlg.hide();
            _tvPuzzleText.setText("An error occured during install");
          }
        }
  public void OnResume(final SharedPreferences prefs) {
    super.OnResume();

    if (_seekBar != null) {
      if (prefs.getBoolean("PuzzleShowSeekBar", true)) {
        _seekBar.setVisibility(View.VISIBLE);

      } else {
        _seekBar.setVisibility(View.GONE);
      }
    }

    ChessImageView._colorScheme = prefs.getInt("ColorScheme", 0);

    _view.setFlippedBoard(prefs.getBoolean("flippedBoard", false));

    _iPos = prefs.getInt("puzzlePos", 0);

    getNumPuzzles();

    if (_num == 0) {

      _num = 500; // first puzzle set has fixed amount
      _progressDlg =
          ProgressDialog.show(
              _parent,
              _parent.getString(R.string.title_installing),
              _parent.getString(R.string.msg_wait),
              false,
              false);

      // if(iTmp > 0)
      //	_cr.delete(MyPuzzleProvider.CONTENT_URI_PUZZLES, "1=1", null);

      _thread =
          new Thread(
              new Runnable() {
                public void run() {

                  try {
                    InputStream is = _parent.getAssets().open("puzzles.pgn");

                    StringBuffer sb = new StringBuffer();
                    String s = "", data;
                    int pos1 = 0, pos2 = 0, len;
                    byte[] buffer = new byte[2048];

                    while ((len = is.read(buffer, 0, buffer.length)) != -1) {
                      data = new String(buffer, 0, len);
                      sb.append(data);
                      pos1 = sb.indexOf("[Event \"");
                      while (pos1 >= 0) {
                        pos2 = sb.indexOf("[Event \"", pos1 + 10);
                        if (pos2 == -1) break;
                        s = sb.substring(pos1, pos2);

                        processPGN(s);

                        sb.delete(0, pos2);

                        pos1 = sb.indexOf("[Event \"");
                      }
                      // break;

                      // Log.i("run", "left: " + sb);
                      // break;
                    }
                    processPGN(sb.toString());

                    Log.i("run", "Count " + _cnt);

                    Message msg = new Message();
                    msg.what = 1;
                    m_threadHandler.sendMessage(msg);

                    is.close();

                  } catch (Exception ex) {
                    Log.e("Install", ex.toString());
                  }
                }
              });
      _thread.start();

      return;
    }

    play();
  }