package com.jiuqi.njt.ui; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.jiuqi.njt.R; import com.jiuqi.njt.data.CheckStateInterface; import com.jiuqi.njt.data.MyApp; import com.jiuqi.njt.data.OptsharepreInterface; import com.jiuqi.njt.db.ModuleDBHelper; import com.jiuqi.njt.model.CModuleBean; import com.jiuqi.njt.util.TitleBarUtil; import com.jiuqi.njt.util.login.UpdateUserClientModuleTask; import com.jiuqi.util.UIUtil; public class ModulerCustomActivity extends Activity { // 用户定制的模块 List<CModuleBean> moduleUserList = new ArrayList<CModuleBean>();; // 显示的模块集合(整体) List<Module> moduleRoleList = new ArrayList<ModulerCustomActivity.Module>(); //显示的模块集合 (分级别的模块) List<Module> moduleBranchList = new ArrayList<ModulerCustomActivity.Module>(); //显示的模块集合 (没有子模块的一级模块) List<Module> moduleNoBranchList = new ArrayList<ModulerCustomActivity.Module>(); //用户选择的模块集合 List<Module> moduleSelectList = new ArrayList<ModulerCustomActivity.Module>(); ModuleDBHelper helper ; OptsharepreInterface sharePre ; MyApp myapp; private static int module_num = 3; private int width ; private int widthJG ; private int buttonWidth; private int firstmodule_textSize ; private int secondmodule_textSize; private int imgWidth; LinearLayout moduleLinearLayout; Button btnReset; private final static String TAG = "ModulerCustomActivity"; // private WriteFile writeFile = new WriteFile(TAG+ JqydDateUtil.getDateDayOne(new Date())); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); init(); } protected void init() { setContentView(R.layout.module_custom_activity); initTitleBar(); initUI(); initParam(); initList(); } private void initParam() { width = getWindow().getWindowManager().getDefaultDisplay().getWidth(); // widthJG = (int) (width * 0.02); widthJG = (int) (width * 0.03); buttonWidth = (int) (width - widthJG * (module_num + 1))/ module_num; firstmodule_textSize = (int) (buttonWidth / 6); secondmodule_textSize = (int) (buttonWidth / 7); imgWidth = (int) (buttonWidth / 5.5) ; helper = new ModuleDBHelper(ModulerCustomActivity.this); sharePre = new OptsharepreInterface(ModulerCustomActivity.this); myapp = (MyApp) getApplication(); getList(); } private void clearList(){ moduleRoleList.clear(); moduleBranchList.clear(); moduleNoBranchList.clear(); moduleUserList.clear(); } private List<Module> getList() { clearList(); moduleUserList = helper.queryRoleFirstModule(sharePre.getPres("roleguid")); for (CModuleBean moduleBean : moduleUserList) { Module mm = new Module(); mm.setBean(moduleBean); //查询子模块 List<CModuleBean> secondMol = helper.queryRolerSecondModuleByPcode(sharePre.getPres("roleguid"), moduleBean.getCode()); //检查模块是否被定制 mm.setCheck(helper.queryUserModuleForThis(sharePre.getPres("guid"), moduleBean.getCode())); mm.setModuleList(getModuleFromCModule(secondMol)); moduleRoleList.add(mm); //判断一级模块是否有子模块 if(secondMol!=null && secondMol.size()>0){ moduleBranchList.add(mm); }else{ moduleNoBranchList.add(mm); } } return moduleRoleList; } private List<Module> getModuleFromCModule(List<CModuleBean> list){ if(list==null || list.size()<1) return null; List<Module> clist = new ArrayList<ModulerCustomActivity.Module>(); for (CModuleBean cModuleBean : list) { Module mm = new Module(); mm.setBean(cModuleBean); //检查模块是否被定制 mm.setCheck(helper.queryUserModuleForThis(sharePre.getPres("guid"), cModuleBean.getCode())); clist.add(mm); } return clist; } private void initTitleBar() { View rlTitleBar = findViewById(R.id.titleBarStub); TitleBarUtil.createTitleBar(this, rlTitleBar, "模块定制", "", new OnClickListener() { @Override public void onClick(View v) { ModulerCustomActivity.this.finish(); } }, "保存", new OnClickListener() { @Override public void onClick(View v) { if(isValidateSelectModule()){ //先删除,保存到本地,再同步到服务器 helper.deleteUserModuleById(sharePre.getPres("guid")); helper.addUserModule(getModuleFromSelect(), sharePre.getPres("guid")); updateToServer("保存成功"); } } }); } protected void initUI() { moduleLinearLayout = (LinearLayout) findViewById(R.id.module_list); btnReset = (Button) findViewById(R.id.btnReset); btnReset.setOnClickListener(new btnResetOnClickListener()); } protected void initList() { btnReset.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX,firstmodule_textSize); btnReset.getLayoutParams().width = (int) (width*0.9); for (Module module : moduleBranchList) { // 一级按钮和checkbox LinearLayout l = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(0, widthJG, 0, widthJG); l.setLayoutParams(params); l.setGravity(Gravity.CENTER_VERTICAL); LinearLayout.LayoutParams firstModule_params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); firstModule_params.setMargins((int) (widthJG + widthJG / 2)+3, (int) (widthJG / 2), 0 , 0); TextView firstTv = new TextView(ModulerCustomActivity.this); firstTv.setTextColor(getResources() .getColor(R.color.firstmodulebtn)); firstTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, firstmodule_textSize); firstTv.setText(module.getBean().getName()); firstTv.setLayoutParams(firstModule_params); LinearLayout.LayoutParams firstModuleCb_params = new LinearLayout.LayoutParams(imgWidth,imgWidth); // LinearLayout.LayoutParams firstModuleCb_params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); firstModuleCb_params.setMargins(widthJG , (int) (widthJG / 2) , 0 , 0); CheckBox cb = (CheckBox) LayoutInflater.from(ModulerCustomActivity.this).inflate(R.layout.module_item_checkbox, null); cb.setLayoutParams(firstModuleCb_params); cb.setChecked(module.isCheck()); module.setcBox(cb); addModuleCheckOnChangeListener(cb, module); l.addView(firstTv); l.addView(cb); moduleLinearLayout.addView(l); // 分割线 genarateLine((int) (widthJG / 2)); //二级模块初始化 if(module.getModuleList()!=null){ addSecondView(module.getModuleList()); } } // 没有子模块的集合显示 addNoBranchView(moduleNoBranchList); } //二级模块控件初始化 private void addSecondView(List<Module> secondList){ // 二级按钮 LinearLayout secondModuleLayout = null; int j = 0; for (Module sModule : secondList) { if (j++ % module_num == 0) { secondModuleLayout = new LinearLayout(this); LinearLayout.LayoutParams second_params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); second_params.setMargins(widthJG, widthJG, widthJG, 0); secondModuleLayout.setLayoutParams(second_params); moduleLinearLayout.addView(secondModuleLayout); } LayoutInflater inflater = LayoutInflater.from(this); View item = inflater.inflate(R.layout.module_second_list_item, null); CheckBox itemCheckBox = (CheckBox) item .findViewById(R.id.item_checkbox); TextView itemTv = (TextView) item.findViewById(R.id.item_tv); LinearLayout.LayoutParams second_params = new LinearLayout.LayoutParams( buttonWidth, (int) (secondmodule_textSize * 2.5)); second_params.setMargins((int) (widthJG / 2), (int) (widthJG / 2), (int) (widthJG / 2), 0); item.setLayoutParams(second_params); RelativeLayout.LayoutParams secondCb_params = new RelativeLayout.LayoutParams( buttonWidth, (int) (secondmodule_textSize * 2.5)); secondCb_params.setMargins((int) (widthJG / 2), (int) (widthJG / 2), (int) (widthJG / 2), 0); itemCheckBox.setLayoutParams(secondCb_params); itemTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX,secondmodule_textSize); itemTv.setText(sModule.getBean().getName()); secondModuleLayout.addView(item); itemCheckBox.setChecked(sModule.isCheck()); setSecondModuleColor(itemTv, sModule.isCheck()); sModule.setcBox(itemCheckBox); sModule.setNameTv(itemTv); // 设置监听 addSecondModuleCheckOnChangeListener(itemCheckBox, sModule); } } /** * 没有分支的集合显示 * @param noBranchList */ private void addNoBranchView(List<Module> noBranchList){ genarateLine(widthJG*2); addSecondView(noBranchList); } /** * 生成分割线 */ private void genarateLine(int marginTop){ View line = new View(ModulerCustomActivity.this); LinearLayout.LayoutParams params_line = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, 2); params_line.setMargins(0,marginTop,0,0); line.setLayoutParams(params_line); line.setBackgroundResource(R.color.module_line); moduleLinearLayout.addView(line); } /** * 一级按钮选择处理事件 * @param cb * @param module */ protected void addModuleCheckOnChangeListener(CheckBox cb, final Module module) { cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { module.setCheck(isChecked); ///设置子模块被选择 if(module.getModuleList()!=null){ for (Module smodule : module.getModuleList()) { smodule.setCheck(isChecked); smodule.getcBox().setChecked(isChecked); } } } }); } /** * 二级按钮选择处理事件 * @param cb * @param module */ protected void addSecondModuleCheckOnChangeListener(CheckBox cb, final Module module) { cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { module.setCheck(isChecked); TextView tv = module.getNameTv(); if(null!=tv){ setSecondModuleColor(tv, isChecked); } //得到父模块,如果所有子模块都未选中,设置父模块不被选中 for (Module pmodule : moduleBranchList) {//一级模块 if(pmodule.getBean().getCode() == module.getBean().getpCode() && pmodule.getModuleList()!=null){ boolean isHasSelectBranch = false; for(Module m : pmodule.getModuleList()){ if(m.isCheck){ isHasSelectBranch = true; break; } } if(!isHasSelectBranch){ pmodule.getcBox().setChecked(false); } } } } }); } private void setSecondModuleColor(TextView tv,boolean isChecked){ if(isChecked){ tv.setTextColor(getResources().getColor(R.color.white)); }else{ tv.setTextColor(getResources().getColor(R.color.secondmodulebtn)); } } /** * TODO 重置数据 * 根据当前用户的角色guid获取默认显示的角色模块 * 删除用户定制表中的数据 * 把默认显示的模块添加进去 * 判断网络连接是否正常,当前用户是否是游客,是则不操作,否则需要同步更新到服务器 * */ private class btnResetOnClickListener implements OnClickListener{ @Override public void onClick(View v) { //默认显示模块都是一级模块,需再找到二级数据 List<CModuleBean> modulelist = helper.queryRoleModuleDefaultDisplay(sharePre.getPres("roleguid")); List<CModuleBean> moduleSecondlist = new ArrayList<CModuleBean>(); for(CModuleBean bean:modulelist){ List<CModuleBean> moduleSecondlistTemp = new ArrayList<CModuleBean>(); moduleSecondlistTemp = helper.queryRolerSecondModuleByPcode(sharePre.getPres("roleguid"), bean.getCode()); moduleSecondlist.addAll(moduleSecondlistTemp); } modulelist.addAll(moduleSecondlist); //先删除再添加 helper.deleteUserModuleById(sharePre.getPres("guid")); helper.addUserModule(modulelist, sharePre.getPres("guid")); //初始化界面 getList(); moduleLinearLayout.removeAllViews(); initList(); moduleUserList = modulelist; updateToServer("恢复成功"); } } /** * 检验总定制数量是否大于等于一个,小于等于16个 * 检验是否存在空子模块数据 * @return */ private boolean isValidateSelectModule(){ ///初始化选择的模块数据 if(moduleSelectList==null){ moduleSelectList = new ArrayList<ModulerCustomActivity.Module>(); }else{ moduleSelectList.clear(); } int length=0; //获取选中所有模块数据 for (Module module : moduleBranchList) {//一级模块 if(module.isCheck){ moduleSelectList.add(module); length++; //二级模块 if(module.getModuleList()!=null){ for(Module m : module.getModuleList()){ if(m.isCheck){ moduleSelectList.add(m); } } } } else { //二级模块 if(module.getModuleList()!=null){ for(Module m : module.getModuleList()){ if(m.isCheck){ moduleSelectList.add(m); length++; } } } } } //没有子模块数据 for (Module module : moduleNoBranchList) { if(module.isCheck){ moduleSelectList.add(module); length++; } } if(length<1){ UIUtil.showMsg(ModulerCustomActivity.this, "定制模块数据不能少于一个"); return false; }else if(length>16){ UIUtil.showMsg(ModulerCustomActivity.this, "定制模块数据不能多于16个"); return false; } return true; } private void updateToServer(String msg){ if(new CheckStateInterface(ModulerCustomActivity.this).checkConnection()&&myapp.getIsLogin()){ new UpdateUserClientModuleTask(ModulerCustomActivity.this, myapp, helper.getUserModuleBeans(moduleUserList)).execute(); } UIUtil.showMsg(ModulerCustomActivity.this, msg); } /** * Module集合转CmoduleBean集合 * @return */ private List<CModuleBean> getModuleFromSelect(){ moduleUserList.clear(); for (Module module : moduleSelectList) { moduleUserList.add(module.getBean()); } return moduleUserList; } // /二级页面 private class Module { private CModuleBean bean; private boolean isCheck; private List<Module> moduleList; private CheckBox cBox; private TextView nameTv; public TextView getNameTv() { return nameTv; } public void setNameTv(TextView nameTv) { this.nameTv = nameTv; } public CheckBox getcBox() { return cBox; } public void setcBox(CheckBox cBox) { this.cBox = cBox; } public CModuleBean getBean() { return bean; } public void setBean(CModuleBean bean) { this.bean = bean; } public boolean isCheck() { return isCheck; } public void setCheck(boolean isCheck) { this.isCheck = isCheck; } public List<Module> getModuleList() { return moduleList; } public void setModuleList(List<Module> moduleList) { this.moduleList = moduleList; } } }