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;
}
}
}