Program: 55548
Project: 55548
Buggy source:
private void handleStart(){
  windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
  LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
  removeView=(RelativeLayout)inflater.inflate(R.layout.remove,null);
  WindowManager.LayoutParams paramRemove=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT);
  paramRemove.gravity=Gravity.TOP | Gravity.LEFT;
  removeView.setVisibility(View.GONE);
  removeImg=(ImageView)removeView.findViewById(R.id.remove_img);
  windowManager.addView(removeView,paramRemove);
  chatheadView=(RelativeLayout)inflater.inflate(R.layout.chathead,null);
  chatheadImg=(ImageView)chatheadView.findViewById(R.id.chathead_img);
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    windowManager.getDefaultDisplay().getSize(szWindow);
  }
 else {
    int w=windowManager.getDefaultDisplay().getWidth();
    int h=windowManager.getDefaultDisplay().getHeight();
    szWindow.set(w,h);
  }
  WindowManager.LayoutParams params=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT);
  params.gravity=Gravity.TOP | Gravity.LEFT;
  params.x=0;
  params.y=100;
  windowManager.addView(chatheadView,params);
  chatheadView.setOnTouchListener(new View.OnTouchListener(){
    long time_start=0, time_end=0;
    boolean isLongclick=false, inBounded=false;
    int remove_img_width=0, remove_img_height=0;
    Handler handler_longClick=new Handler();
    Runnable runnable_longClick=new Runnable(){
      @Override public void run(){
        Log.d(Utils.LogTag,"String_Node_Str");
        isLongclick=true;
        removeView.setVisibility(View.VISIBLE);
        chathead_longclick();
      }
    }
;
    @Override public boolean onTouch(    View v,    MotionEvent event){
      WindowManager.LayoutParams layoutParams=(WindowManager.LayoutParams)chatheadView.getLayoutParams();
      int x_cord=(int)event.getRawX();
      int y_cord=(int)event.getRawY();
      int x_cord_Destination, y_cord_Destination;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
        time_start=System.currentTimeMillis();
      handler_longClick.postDelayed(runnable_longClick,600);
    remove_img_width=removeImg.getLayoutParams().width;
  remove_img_height=removeImg.getLayoutParams().height;
x_init_cord=x_cord;
y_init_cord=y_cord;
x_init_margin=layoutParams.x;
y_init_margin=layoutParams.y;
if (txtView != null) {
txtView.setVisibility(View.GONE);
myHandler.removeCallbacks(myRunnable);
}
break;
case MotionEvent.ACTION_MOVE:
int x_diff_move=x_cord - x_init_cord;
int y_diff_move=y_cord - y_init_cord;
x_cord_Destination=x_init_margin + x_diff_move;
y_cord_Destination=y_init_margin + y_diff_move;
if (isLongclick) {
int x_bound_left=szWindow.x / 2 - (int)(remove_img_width * 1.5);
int x_bound_right=szWindow.x / 2 + (int)(remove_img_width * 1.5);
int y_bound_top=szWindow.y - (int)(remove_img_height * 1.5);
if ((x_cord >= x_bound_left && x_cord <= x_bound_right) && y_cord >= y_bound_top) {
inBounded=true;
int x_cord_remove=(int)((szWindow.x - (remove_img_height * 1.5)) / 2);
int y_cord_remove=(int)(szWindow.y - ((remove_img_width * 1.5) + getStatusBarHeight()));
if (removeImg.getLayoutParams().height == remove_img_height) {
removeImg.getLayoutParams().height=(int)(remove_img_height * 1.5);
removeImg.getLayoutParams().width=(int)(remove_img_width * 1.5);
WindowManager.LayoutParams param_remove=(WindowManager.LayoutParams)removeView.getLayoutParams();
param_remove.x=x_cord_remove;
param_remove.y=y_cord_remove;
windowManager.updateViewLayout(removeView,param_remove);
}
layoutParams.x=x_cord_remove + (Math.abs(removeView.getWidth() - chatheadView.getWidth())) / 2;
layoutParams.y=y_cord_remove + (Math.abs(removeView.getHeight() - chatheadView.getHeight())) / 2;
windowManager.updateViewLayout(chatheadView,layoutParams);
break;
}
 else {
inBounded=false;
removeImg.getLayoutParams().height=remove_img_height;
removeImg.getLayoutParams().width=remove_img_width;
WindowManager.LayoutParams param_remove=(WindowManager.LayoutParams)removeView.getLayoutParams();
int x_cord_remove=(szWindow.x - removeView.getWidth()) / 2;
int y_cord_remove=szWindow.y - (removeView.getHeight() + getStatusBarHeight());
param_remove.x=x_cord_remove;
param_remove.y=y_cord_remove;
windowManager.updateViewLayout(removeView,param_remove);
}
}
layoutParams.x=x_cord_Destination;
layoutParams.y=y_cord_Destination;
windowManager.updateViewLayout(chatheadView,layoutParams);
break;
case MotionEvent.ACTION_UP:
isLongclick=false;
removeView.setVisibility(View.GONE);
removeImg.getLayoutParams().height=remove_img_height;
removeImg.getLayoutParams().width=remove_img_width;
handler_longClick.removeCallbacks(runnable_longClick);
if (inBounded) {
if (MyDialog.active) {
MyDialog.myDialog.finish();
}
stopService(new Intent(ChatHeadService.this,ChatHeadService.class));
inBounded=false;
break;
}
int x_diff=x_cord - x_init_cord;
int y_diff=y_cord - y_init_cord;
if (Math.abs(x_diff) < 5 && Math.abs(y_diff) < 5) {
time_end=System.currentTimeMillis();
if ((time_end - time_start) < 300) {
chathead_click();
}
}
y_cord_Destination=y_init_margin + y_diff;
int BarHeight=getStatusBarHeight();
if (y_cord_Destination < 0) {
y_cord_Destination=0;
}
 else if (y_cord_Destination + (chatheadView.getHeight() + BarHeight) > szWindow.y) {
y_cord_Destination=szWindow.y - (chatheadView.getHeight() + BarHeight);
}
layoutParams.y=y_cord_Destination;
inBounded=false;
resetPosition(x_cord);
break;
default :
Log.d(Utils.LogTag,"String_Node_Str");
break;
}
return true;
}
}
);
txtView=(LinearLayout)inflater.inflate(R.layout.txt,null);
txt1=(TextView)txtView.findViewById(R.id.txt1);
txt_linearlayout=(LinearLayout)txtView.findViewById(R.id.txt_linearlayout);
WindowManager.LayoutParams paramsTxt=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT);
paramsTxt.gravity=Gravity.TOP | Gravity.LEFT;
txtView.setVisibility(View.GONE);
windowManager.addView(txtView,paramsTxt);
}

Fixed version (ground truth):
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) private void handleStart(){
  windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
  LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
  removeView=(RelativeLayout)inflater.inflate(R.layout.remove,null);
  WindowManager.LayoutParams paramRemove=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT);
  paramRemove.gravity=Gravity.TOP | Gravity.LEFT;
  removeView.setVisibility(View.GONE);
  removeImg=(ImageView)removeView.findViewById(R.id.remove_img);
  windowManager.addView(removeView,paramRemove);
  chatheadView=(RelativeLayout)inflater.inflate(R.layout.chathead,null);
  chatheadImg=(ImageView)chatheadView.findViewById(R.id.chathead_img);
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    windowManager.getDefaultDisplay().getSize(szWindow);
  }
 else {
    int w=windowManager.getDefaultDisplay().getWidth();
    int h=windowManager.getDefaultDisplay().getHeight();
    szWindow.set(w,h);
  }
  WindowManager.LayoutParams params=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT);
  params.gravity=Gravity.TOP | Gravity.LEFT;
  params.x=0;
  params.y=100;
  windowManager.addView(chatheadView,params);
  chatheadView.setOnTouchListener(new View.OnTouchListener(){
    long time_start=0, time_end=0;
    boolean isLongclick=false, inBounded=false;
    int remove_img_width=0, remove_img_height=0;
    Handler handler_longClick=new Handler();
    Runnable runnable_longClick=new Runnable(){
      @Override public void run(){
        Log.d(Utils.LogTag,"String_Node_Str");
        isLongclick=true;
        removeView.setVisibility(View.VISIBLE);
        chathead_longclick();
      }
    }
;
    @Override public boolean onTouch(    View v,    MotionEvent event){
      WindowManager.LayoutParams layoutParams=(WindowManager.LayoutParams)chatheadView.getLayoutParams();
      int x_cord=(int)event.getRawX();
      int y_cord=(int)event.getRawY();
      int x_cord_Destination, y_cord_Destination;
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
        time_start=System.currentTimeMillis();
      handler_longClick.postDelayed(runnable_longClick,600);
    remove_img_width=removeImg.getLayoutParams().width;
  remove_img_height=removeImg.getLayoutParams().height;
x_init_cord=x_cord;
y_init_cord=y_cord;
x_init_margin=layoutParams.x;
y_init_margin=layoutParams.y;
if (txtView != null) {
txtView.setVisibility(View.GONE);
myHandler.removeCallbacks(myRunnable);
}
break;
case MotionEvent.ACTION_MOVE:
int x_diff_move=x_cord - x_init_cord;
int y_diff_move=y_cord - y_init_cord;
x_cord_Destination=x_init_margin + x_diff_move;
y_cord_Destination=y_init_margin + y_diff_move;
if (isLongclick) {
int x_bound_left=szWindow.x / 2 - (int)(remove_img_width * 1.5);
int x_bound_right=szWindow.x / 2 + (int)(remove_img_width * 1.5);
int y_bound_top=szWindow.y - (int)(remove_img_height * 1.5);
if ((x_cord >= x_bound_left && x_cord <= x_bound_right) && y_cord >= y_bound_top) {
inBounded=true;
int x_cord_remove=(int)((szWindow.x - (remove_img_height * 1.5)) / 2);
int y_cord_remove=(int)(szWindow.y - ((remove_img_width * 1.5) + getStatusBarHeight()));
if (removeImg.getLayoutParams().height == remove_img_height) {
removeImg.getLayoutParams().height=(int)(remove_img_height * 1.5);
removeImg.getLayoutParams().width=(int)(remove_img_width * 1.5);
WindowManager.LayoutParams param_remove=(WindowManager.LayoutParams)removeView.getLayoutParams();
param_remove.x=x_cord_remove;
param_remove.y=y_cord_remove;
windowManager.updateViewLayout(removeView,param_remove);
}
layoutParams.x=x_cord_remove + (Math.abs(removeView.getWidth() - chatheadView.getWidth())) / 2;
layoutParams.y=y_cord_remove + (Math.abs(removeView.getHeight() - chatheadView.getHeight())) / 2;
windowManager.updateViewLayout(chatheadView,layoutParams);
break;
}
 else {
inBounded=false;
removeImg.getLayoutParams().height=remove_img_height;
removeImg.getLayoutParams().width=remove_img_width;
WindowManager.LayoutParams param_remove=(WindowManager.LayoutParams)removeView.getLayoutParams();
int x_cord_remove=(szWindow.x - removeView.getWidth()) / 2;
int y_cord_remove=szWindow.y - (removeView.getHeight() + getStatusBarHeight());
param_remove.x=x_cord_remove;
param_remove.y=y_cord_remove;
windowManager.updateViewLayout(removeView,param_remove);
}
}
layoutParams.x=x_cord_Destination;
layoutParams.y=y_cord_Destination;
windowManager.updateViewLayout(chatheadView,layoutParams);
break;
case MotionEvent.ACTION_UP:
isLongclick=false;
removeView.setVisibility(View.GONE);
removeImg.getLayoutParams().height=remove_img_height;
removeImg.getLayoutParams().width=remove_img_width;
handler_longClick.removeCallbacks(runnable_longClick);
if (inBounded) {
if (MyDialog.active) {
MyDialog.myDialog.finish();
}
stopService(new Intent(ChatHeadService.this,ChatHeadService.class));
inBounded=false;
break;
}
int x_diff=x_cord - x_init_cord;
int y_diff=y_cord - y_init_cord;
if (Math.abs(x_diff) < 5 && Math.abs(y_diff) < 5) {
time_end=System.currentTimeMillis();
if ((time_end - time_start) < 300) {
chathead_click();
}
}
y_cord_Destination=y_init_margin + y_diff;
int BarHeight=getStatusBarHeight();
if (y_cord_Destination < 0) {
y_cord_Destination=0;
}
 else if (y_cord_Destination + (chatheadView.getHeight() + BarHeight) > szWindow.y) {
y_cord_Destination=szWindow.y - (chatheadView.getHeight() + BarHeight);
}
layoutParams.y=y_cord_Destination;
inBounded=false;
resetPosition(x_cord);
break;
default :
Log.d(Utils.LogTag,"String_Node_Str");
break;
}
return true;
}
}
);
txtView=(LinearLayout)inflater.inflate(R.layout.txt,null);
txt1=(TextView)txtView.findViewById(R.id.txt1);
txt_linearlayout=(LinearLayout)txtView.findViewById(R.id.txt_linearlayout);
WindowManager.LayoutParams paramsTxt=new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.TYPE_PHONE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,PixelFormat.TRANSLUCENT);
paramsTxt.gravity=Gravity.TOP | Gravity.LEFT;
txtView.setVisibility(View.GONE);
windowManager.addView(txtView,paramsTxt);
}