public void checkBricks() {
        if (getFacedUpCount() < 2)
            return;

        ArrayList<BrickModel> facedUp = new ArrayList<BrickModel>();
        for (BrickModel brick : bricks)
            if (brick.getState() == State.FACE_UP)
                facedUp.add(brick);
        if (facedUp.size() > 2) {
            resetBrickStates();
            return;
        }

        if (tryInProgress)
            return;

        tryInProgress = true;

        final BrickModel a = facedUp.get(0);
        final BrickModel b = facedUp.get(1);

        // Workaround to make application close properly
        if (tryTimer == null)
            tryTimer = new Timer();

        // We want to run the match check and reset only after a set amount of time
        // this way the user will be able to see the bricks before they are cleared or reset.
        tryTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                clearIfMatch(a, b);
                resetBrickStates();
                if (getClearedCount() == getBrickCount())
                    sendEvent(FieldEventType.ALL_BRICKS_CLEARED);
                tryTimer.cancel();
                tryTimer = null;
            }
        }, TRY_DELAY);
    }