Program: 171225
Project: 171225
Buggy source:
@Override public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
  if (!loadPackageParam.packageName.equals(WECHAT_PACKAGE_NAME))   return;
  mClassLoader=loadPackageParam.classLoader;
  if (!AppSaveInfoUtils.INSTANCE.initVariableName())   return;
  if (!AppSaveInfoUtils.INSTANCE.openInfo())   return;
  XposedHelpers.findAndHookConstructor("String_Node_Str",loadPackageParam.classLoader,Context.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookFitSystemWindowLayoutViewConstructor(param);
    }
  }
);
  XposedHelpers.findAndHookConstructor("String_Node_Str",loadPackageParam.classLoader,Context.class,AttributeSet.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookFitSystemWindowLayoutViewConstructor(param);
    }
  }
);
  XposedHelpers.findAndHookConstructor(Class_Conversation_List_View_Adapter_Name,loadPackageParam.classLoader,Context.class,XposedHelpers.findClass(Method_Conversation_List_View_Adapter_Param,loadPackageParam.classLoader),new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookAdapterInit(param);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",Bundle.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      context=(Context)param.thisObject;
      SoftKeyboardUtil.observeSoftKeyboard((Activity)context,new SoftKeyboardUtil.OnSoftKeyboardChangeListener(){
        public void onSoftKeyBoardChange(        int softKeyboardHeight,        boolean visible){
          isSoftKeyBoardOpen=visible;
          if (chatRoomViewPresenter == null)           return;
          if (officialViewPresenter == null)           return;
          if (chatRoomViewPresenter.isShowing() || officialViewPresenter.isShowing()) {
            if (isSoftKeyBoardOpen)             maskView.setVisibility(View.VISIBLE);
 else             maskView.setVisibility(View.INVISIBLE);
          }
        }
      }
);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookNotifyDataSetChanged(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_View_Adapter_Parent_Name,loadPackageParam.classLoader,"String_Node_Str",new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookGetCount(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_View_Adapter_Parent_Name,loadPackageParam.classLoader,Method_Adapter_Get_Object,int.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookGetObject(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_View_Adapter_Name,loadPackageParam.classLoader,"String_Node_Str",int.class,View.class,ViewGroup.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookGetView(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_Adapter_OnItemClickListener_Name,loadPackageParam.classLoader,"String_Node_Str",AdapterView.class,View.class,int.class,long.class,new XC_MethodHook(){
    @Override protected void beforeHookedMethod(    MethodHookParam param) throws Throwable {
      hookOnItemClick(param);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",KeyEvent.class,new XC_MethodHook(){
    @Override protected void beforeHookedMethod(    MethodHookParam param) throws Throwable {
      hookDispatchKeyEvent(param);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",MotionEvent.class,new XC_MethodHook(){
    @Override protected void beforeHookedMethod(    MethodHookParam param) throws Throwable {
      if (param.thisObject.getClass().getSimpleName().equals("String_Node_Str")) {
        MotionEvent motionEvent=(MotionEvent)param.args[0];
        if (!isInChatting) {
          maskView.setVisibility(View.INVISIBLE);
          return;
        }
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
          break;
case MotionEvent.ACTION_MOVE:
        if (isSoftKeyBoardOpen)         maskView.setVisibility(View.INVISIBLE);
      break;
case MotionEvent.ACTION_UP:
    break;
}
}
}
}
);
hookLog(loadPackageParam);
}

Fixed version (ground truth):
@Override public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
  if (!loadPackageParam.packageName.equals(WECHAT_PACKAGE_NAME))   return;
  mClassLoader=loadPackageParam.classLoader;
  if (!AppSaveInfoUtils.INSTANCE.initVariableName())   return;
  if (!AppSaveInfoUtils.INSTANCE.openInfo())   return;
  XposedHelpers.findAndHookConstructor("String_Node_Str",loadPackageParam.classLoader,Context.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookFitSystemWindowLayoutViewConstructor(param);
    }
  }
);
  XposedHelpers.findAndHookConstructor("String_Node_Str",loadPackageParam.classLoader,Context.class,AttributeSet.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookFitSystemWindowLayoutViewConstructor(param);
    }
  }
);
  XposedHelpers.findAndHookConstructor(Class_Conversation_List_View_Adapter_Name,loadPackageParam.classLoader,Context.class,XposedHelpers.findClass(Method_Conversation_List_View_Adapter_Param,loadPackageParam.classLoader),new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      LogUtils.INSTANCE.log("String_Node_Str");
      hookAdapterInit(param);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",Bundle.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      context=(Context)param.thisObject;
      SoftKeyboardUtil.observeSoftKeyboard((Activity)context,new SoftKeyboardUtil.OnSoftKeyboardChangeListener(){
        public void onSoftKeyBoardChange(        int softKeyboardHeight,        boolean visible){
          isSoftKeyBoardOpen=visible;
          if (chatRoomViewPresenter == null)           return;
          if (officialViewPresenter == null)           return;
          if (chatRoomViewPresenter.isShowing() || officialViewPresenter.isShowing()) {
            if (isSoftKeyBoardOpen)             maskView.setVisibility(View.VISIBLE);
 else             maskView.setVisibility(View.INVISIBLE);
          }
        }
      }
);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookNotifyDataSetChanged(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_View_Adapter_Parent_Name,loadPackageParam.classLoader,"String_Node_Str",new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookGetCount(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_View_Adapter_Parent_Name,loadPackageParam.classLoader,Method_Adapter_Get_Object,int.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookGetObject(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_View_Adapter_Name,loadPackageParam.classLoader,"String_Node_Str",int.class,View.class,ViewGroup.class,new XC_MethodHook(){
    @Override protected void afterHookedMethod(    MethodHookParam param) throws Throwable {
      hookGetView(param);
    }
  }
);
  XposedHelpers.findAndHookMethod(Class_Conversation_List_Adapter_OnItemClickListener_Name,loadPackageParam.classLoader,"String_Node_Str",AdapterView.class,View.class,int.class,long.class,new XC_MethodHook(){
    @Override protected void beforeHookedMethod(    MethodHookParam param) throws Throwable {
      hookOnItemClick(param);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",KeyEvent.class,new XC_MethodHook(){
    @Override protected void beforeHookedMethod(    MethodHookParam param) throws Throwable {
      hookDispatchKeyEvent(param);
    }
  }
);
  XposedHelpers.findAndHookMethod("String_Node_Str",loadPackageParam.classLoader,"String_Node_Str",MotionEvent.class,new XC_MethodHook(){
    @Override protected void beforeHookedMethod(    MethodHookParam param) throws Throwable {
      if (param.thisObject.getClass().getSimpleName().equals("String_Node_Str")) {
        MotionEvent motionEvent=(MotionEvent)param.args[0];
        if (!isInChatting) {
          maskView.setVisibility(View.INVISIBLE);
          return;
        }
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
          break;
case MotionEvent.ACTION_MOVE:
        if (isSoftKeyBoardOpen)         maskView.setVisibility(View.INVISIBLE);
      break;
case MotionEvent.ACTION_UP:
    break;
}
}
}
}
);
hookLog(loadPackageParam);
}