[Demonstration 1]

[Buggy Method]
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    mPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    mUseInternalTranslator = mPrefs.getBoolean("keyUseInternalTranslator", false);
    mExtras = getIntent().getExtras();
    if (mExtras == null) {
        // Sometimes getExtras() returns null, we map it
        // to an empty Bundle if this occurs.
        Log.e(LOG_TAG, "getExtras() == null");
        mExtras = new Bundle();
    } else {
        Log.e(LOG_TAG, "getExtras() == " + mExtras.keySet().toString());
    }
    mBMicrophone = (ImageButton) findViewById(R.id.buttonMicrophone);
    String nameRecognizerPkg = getString(R.string.nameRecognizerPkg);
    String nameRecognizerCls = getString(R.string.nameRecognizerCls);
    mIntent = createRecognizerIntent(getString(R.string.defaultGrammar), getString(R.string.nameLangLinearize), mUseInternalTranslator);
    mIntent.setComponent(new ComponentName(nameRecognizerPkg, nameRecognizerCls));
    final LinearLayout mLlMicrophone = (LinearLayout) findViewById(R.id.llMicrophone);
    if (getRecognizers(mIntent).size() == 0) {
        mLlMicrophone.setVisibility(View.GONE);
        toast(String.format(getString(R.string.errorRecognizerNotPresent), nameRecognizerCls));
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(SPEAK_DOWNLOAD_URL)));
        finish();
    } else {
        mLlMicrophone.setVisibility(View.VISIBLE);
    }
    mListView = (ExpandableListView) findViewById(R.id.list);
    mListView.setGroupIndicator(getResources().getDrawable(R.drawable.list_selector_expandable));
    mEt = (EditText) findViewById(R.id.edittext);
    mEt.setOnEditorActionListener(new OnEditorActionListener() {

        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_GO) {
                List<String> inputs = new ArrayList<String>();
                inputs.add(mEt.getText().toString());
                new TranslateTask().execute(inputs);
            }
            return true;
        }
    });
    mBMicrophone.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            launchRecognizerIntent(mIntent);
        }
    });
    mListView.setFastScrollEnabled(true);
    mListView.setClickable(true);
    mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            Cursor cursor = (Cursor) parent.getExpandableListAdapter().getGroup(groupPosition);
            launchIntent(cursor, Query.Columns.VIEW, Query.Columns.TRANSLATION);
            return false;
        }
    });
    mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            Cursor cursor = (Cursor) parent.getExpandableListAdapter().getChild(groupPosition, childPosition);
            launchIntent(cursor, Qeval.Columns.VIEW, Qeval.Columns.TRANSLATION);
            return false;
        }
    });
    mListView.setOnScrollListener(new OnScrollListener() {

        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        }

        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
                mLlMicrophone.setVisibility(View.VISIBLE);
            } else {
                mLlMicrophone.setVisibility(View.GONE);
            }
        }
    });
    mAdapter = new MyExpandableListAdapter(this, R.layout.list_item_arvutaja_result, R.layout.list_item_arvutaja_result, new String[] { Query.Columns.TRANSLATION, Query.Columns.EVALUATION, Query.Columns.VIEW, Query.Columns.MESSAGE }, new int[] { R.id.list_item_translation, R.id.list_item_evaluation, R.id.list_item_view, R.id.list_item_message }, new String[] { Qeval.Columns.TRANSLATION, Qeval.Columns.EVALUATION, Qeval.Columns.VIEW, Qeval.Columns.MESSAGE }, new int[] { R.id.list_item_translation, R.id.list_item_evaluation, R.id.list_item_view, R.id.list_item_message });
    mListView.setAdapter(mAdapter);
    registerForContextMenu(mListView);
    mQueryHandler = new QueryHandler(this, mAdapter);
    startQuery(Query.Columns.TIMESTAMP + " DESC");
}

[Buggy Hunk]
startQuery(Query.Columns.TIMESTAMP + " DESC");

[Patch]
startQuery(mPrefs.getString(getString(R.string.prefCurrentSortOrder), Query.Columns.TIMESTAMP + " DESC"));

[Demonstration 2]

[Buggy Method]
@Override
public void onSensorChanged(SensorEvent event) {
    Filter bufferingFilter = new Filter(3.0);
    Filter smoothFilter = new Filter(1);
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        double[] doublesFilterValue = bufferingFilter.getFilteredValues(event.values);
        double[] filterValues = smoothFilter.getFilteredValues(convertToFloatArray(doublesFilterValue));
        //TODO: Detect steps! Call onStepDetected(...) when a step is detected.
        double vectorProducts = Math.pow(filterValues[0], 2) + Math.pow(filterValues[1], 2) + Math.pow(filterValues[2], 1);
        double vectorSqrt = Math.sqrt(vectorProducts);
        if (dataCounter == 0) {
            startValue = vectorSqrt;
            startTime = (double) event.timestamp;
        }
        switch(status) {
            case NATURAL:
                {
                    Log.d("=======>", "I am natural now");
                    if (dataCounter == 15) {
                        double endTime = ((double) event.timestamp);
                        int slope = slopeTimesTen(startTime, endTime, startValue, vectorSqrt);
                        if (slope > 0) {
                            status = INCREASING;
                        } else if (slope < 0) {
                            status = DECREASING;
                        } else {
                            status = NATURAL;
                        }
                        dataCounter = 0;
                    } else {
                        dataCounter += 1;
                    }
                    break;
                }
            case INCREASING:
                {
                    Log.d("=======>", "I am increasing now");
                    if (dataCounter == 15) {
                        double endTime = ((double) event.timestamp);
                        int slope = slopeTimesTen(startTime, endTime, startValue, vectorSqrt);
                        if (slope > 0) {
                            pendingZeroDataCounter = 0;
                            status = INCREASING;
                        } else if (slope < 0) {
                            pendingZeroDataCounter = 0;
                            //                            onStepDetected((long) ((double) event.timestamp / Constants.TIMESTAMPS.NANOSECONDS_PER_MILLISECOND),event.values);
                            status = DECREASING;
                        } else {
                            pendingZeroDataCounter += 1;
                        }
                        dataCounter = 0;
                    } else {
                        dataCounter += 1;
                    }
                    break;
                }
            case DECREASING:
                {
                    Log.d("=======>", "I am decreasing now");
                    if (dataCounter == 15) {
                        double endTime = ((double) event.timestamp);
                        int slope = slopeTimesTen(startTime, endTime, startValue, vectorSqrt);
                        if (slope > 0) {
                            pendingZeroDataCounter = 0;
                            onStepDetected((long) ((double) event.timestamp / Constants.TIMESTAMPS.NANOSECONDS_PER_MILLISECOND), event.values);
                            status = INCREASING;
                        } else if (slope < 0) {
                            pendingZeroDataCounter = 0;
                            status = DECREASING;
                        } else {
                            pendingZeroDataCounter += 1;
                        }
                        dataCounter = 0;
                    } else {
                        dataCounter += 1;
                    }
                    break;
                }
        }
        if (pendingZeroDataCounter == 10) {
            Log.d("=======>", "Natural pending max reach reset status");
            status = NATURAL;
            dataCounter = 0;
            pendingZeroDataCounter = 0;
        }
    }
}

[Buggy Hunk]
Math.pow(filterValues[2],1);

[Patch]
Math.pow(filterValues[2],2);

[Demonstration 3]

[Buggy Method]
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> data() {
    return TestScenario.localChromeAndFirefox();
}

[Buggy Hunk]
return TestScenario.localChromeAndFirefox();

[Patch]
return TestScenario.localChromesAndFirefoxs(2);