SettingsActivity.java 13.4 KB
    package com.huaheng.mmsrf;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.huaheng.mmsrf.LoginActivity;
import com.huaheng.mmsrf.R;
import com.huaheng.mmsrf.activity.log.LogListActivity;
import com.huaheng.mmsrf.activity.model.CommonActivity;
import com.huaheng.mmsrf.bean.ApkInfo;
import com.huaheng.mmsrf.bean.CompanyInfo;
import com.huaheng.mmsrf.bean.Constant;
import com.huaheng.mmsrf.bean.SysUser;
import com.huaheng.mmsrf.download.DownloadUtils;
import com.huaheng.mmsrf.https.HttpInterface;
import com.huaheng.mmsrf.https.HttpInterface2;
import com.huaheng.mmsrf.https.Subscribers.ProgressSubscriber;
import com.huaheng.mmsrf.https.Subscribers.SubscriberOnNextListener;
import com.huaheng.mmsrf.util.FileUtils;
import com.huaheng.mmsrf.util.WMSLog;
import com.huaheng.mmsrf.util.WMSUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

    public class SettingsActivity extends CommonActivity {


    @BindView(R.id.contentLayout)
    LinearLayout contentLayout;
    private ArrayList <SysUser> sysUserList;
    View getlistview;
    AlertDialog.Builder builder;
    SimpleAdapter adapter;
    ArrayList<Map<String, Object>> mData = new ArrayList<Map<String, Object>>();
    Boolean[] bl;
    String[] mlistText;

    @Override
    protected void initActivityOnCreate(Bundle savedInstanceState) {
        super.initActivityOnCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        ButterKnife.bind(this);
        setTitle(mContext.getString(R.string.menu_settings));

        initView();
    }

    private void initView() {
        String loginName = WMSUtils.getData(Constant.REAL_NAME);
        contentLayout.removeAllViews();
        contentLayout.addView(WMSUtils.newContent(mContext, mContext.getString(R.string.current_user), loginName));
        contentLayout.addView(WMSUtils.newDevider(mContext));
        View logView = WMSUtils.newContent(mContext, mContext.getString(R.string.list_log),
                String.valueOf(FileUtils.getCrashLogFiles().length) + "条");
        contentLayout.addView(logView);
        logView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showLogs();
            }
        });
        contentLayout.addView(WMSUtils.newDevider(mContext));
        String  roleCode =  WMSUtils.getData(Constant.ROLE_CODE);
        View  manualPermissionView = WMSUtils.newContent(mContext, mContext.getString(R.string.manual_permission), "");
        manualPermissionView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listUser();
            }
        });
        if(!"normal".equals(roleCode)) {
            contentLayout.addView(manualPermissionView);
            contentLayout.addView(WMSUtils.newDevider(mContext));
        }
        View versionView = WMSUtils.newContent(mContext, mContext.getString(R.string.current_version), WMSUtils.getVersionName());
        versionView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getUpdateApkInfo();
            }
        });
        contentLayout.addView(versionView);
        contentLayout.addView(WMSUtils.newDevider(mContext));
    }

    public void createDialog() {
        List<String> realNames  = sysUserList.stream().map(SysUser::getRealname).collect(Collectors.toList());
        realNames.add(0, "全选");
        mlistText = realNames.toArray(new String[realNames.size()]);
        int lengh = mlistText.length;
        bl = new Boolean[lengh];
        mData.clear();
        for (int i = 0; i < lengh; i++) {
            Map<String, Object> item = new HashMap<String, Object>();
            item.put("text", mlistText[i]);
            mData.add(item);
            if(i != 0) {
                SysUser sysUser = sysUserList.get(i-1);
                if (sysUser.getManualwork() == 1) {
                    bl[i] = true;
                } else {
                    bl[i] = false;
                }
            } else {
                bl[0] = false;
            }
        }

        // 动态加载一个listview的布局文件进来
        LayoutInflater inflater = LayoutInflater.from(mContext);
        getlistview = inflater.inflate(R.layout.listview, null);

        // 给ListView绑定内容
        ListView listview = (ListView) getlistview.findViewById(R.id.X_listview);
        adapter = new SetSimpleAdapter(mContext, mData, R.layout.listitem, new String[] { "text" },
                new int[] { R.id.X_item_text });
        // 给listview加入适配器
        listview.setAdapter(adapter);
        listview.setItemsCanFocus(false);
        listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listview.setOnItemClickListener(new ItemOnClick());

        builder = new AlertDialog.Builder(this);
        builder.setTitle(mContext.getString(R.string.choose_title));
        //设置加载的listview
        builder.setView(getlistview);
        builder.setPositiveButton(mContext.getString(R.string.str_confirm), new DialogOnClick());
        builder.setNegativeButton(mContext.getString(R.string.str_cancel), new DialogOnClick());
        builder.create().show();
    }

    class ItemOnClick implements AdapterView.OnItemClickListener {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
            CheckBox cBox = (CheckBox) view.findViewById(R.id.X_checkbox);
            if (cBox.isChecked()) {
                cBox.setChecked(false);
            } else {
                Log.i("TAG", "取消该选项");
                cBox.setChecked(true);
            }

            if (position == 0 && (cBox.isChecked())) {
                //如果是选中 全选  就把所有的都选上 然后更新
                for (int i = 0; i < bl.length; i++) {
                    bl[i] = true;
                }
                adapter.notifyDataSetChanged();
            } else if (position == 0 && (!cBox.isChecked())) {
                //如果是取消全选 就把所有的都取消 然后更新
                for (int i = 0; i < bl.length; i++) {
                    bl[i] = false;
                }
                adapter.notifyDataSetChanged();
            }
            if (position != 0 && (!cBox.isChecked())) {
                // 如果把其它的选项取消   把全选取消
                bl[0] = false;
                bl[position]=false;
                adapter.notifyDataSetChanged();
            } else if (position != 0 && (cBox.isChecked())) {
                //如果选择其它的选项,看是否全部选择
                //先把该选项选中 设置为true
                bl[position]=true;
                int a = 0;
                for (int i = 1; i < bl.length; i++) {
                    if (bl[i] == false) {
                        //如果有一个没选中  就不是全选 直接跳出循环
                        break;
                    } else {
                        //计算有多少个选中的
                        a++;
                        if (a == bl.length - 1) {
                            //如果选项都选中,就把全选 选中,然后更新
                            bl[0] = true;
                            adapter.notifyDataSetChanged();
                        }
                    }
                }
            }
        }

    }

    class DialogOnClick implements DialogInterface.OnClickListener {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which) {
                case Dialog.BUTTON_POSITIVE:
                    //确定按钮的事件
                    for(int i=0; i< sysUserList.size(); i++) {
                        SysUser sysUser = sysUserList.get(i);
                        if(bl[i+1]) {
                            sysUser.setManualwork(1);
                        } else {
                            sysUser.setManualwork(0);
                        }
                    }
                    setManualworkPermission(sysUserList);
                    break;
                case Dialog.BUTTON_NEGATIVE:
                    //取消按钮的事件
                    break;
                default:
                    break;
            }
        }
    }

    //重写simpleadapterd的getview方法
    class SetSimpleAdapter extends SimpleAdapter {

        public SetSimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from,
                                int[] to) {
            super(context, data, resource, from, to);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LinearLayout.inflate(getBaseContext(), R.layout.listitem, null);
            }
            CheckBox ckBox = (CheckBox) convertView.findViewById(R.id.X_checkbox);
            //每次都根据 bl[]来更新checkbox
            if (bl[position] == true) {
                ckBox.setChecked(true);
            } else if (bl[position] == false) {
                ckBox.setChecked(false);
            }
            return super.getView(position, convertView, parent);
        }
    }


    @OnClick(R.id.ensureLayout)
    public void onViewClicked() {
        logout();
    }

    private void logout() {
        WMSUtils.startActivity(mContext, LoginActivity.class);
    }


    private void showLogs(){
        Intent intent = new Intent();
        intent.setClass(mContext, LogListActivity.class);
        startActivity(intent);
    }

    private void showListDialog(final ArrayList<CompanyInfo> companyInfos) {
        if (companyInfos == null) {
            WMSUtils.showShort(mContext.getString(R.string.choose_current_company_error));
            return;
        }
        String[] companyNames = new String[companyInfos.size()];
        for(int i =0; i< companyInfos.size(); i++) {
            companyNames[i] = companyInfos.get(i).getCompanyName();
        }
        AlertDialog.Builder listDialog =
                new AlertDialog.Builder(mContext);
        listDialog.setTitle(mContext.getString(R.string.enter_current_company));
        listDialog.setItems(companyNames, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String currentCompanyCode = companyInfos.get(which).getCompanyCode();
                String currentCompanyName = companyInfos.get(which).getCompanyName();
                int currentId = companyInfos.get(which).getCompanyId();
                WMSUtils.saveData(Constant.CURREN_COMPANY_CODE, currentCompanyCode);
                WMSUtils.saveData(Constant.CURREN_COMPANY_NAME, currentCompanyName);
                WMSUtils.saveData(Constant.CURREN_COMPANY_ID, String.valueOf(currentId));
                initView();
            }
        });
        listDialog.show();
    }

    private void getUpdateApkInfo() {
        ProgressSubscriber progressSubscriber =  new ProgressSubscriber<ApkInfo>(mContext, getUpdateApkInfoListener);
        progressSubscriber.setPlaySound(false);
        HttpInterface2.getInsstance().getUpdateApkInfo(progressSubscriber, WMSUtils.getPackageName(), String.valueOf(WMSUtils.getVersionCode()));
    }

    SubscriberOnNextListener getUpdateApkInfoListener = new SubscriberOnNextListener<ApkInfo>() {

        @Override
        public void onNext(ApkInfo apkInfo) {
            String url = apkInfo.getUrl();
            String md5 = apkInfo.getMd5();
            int version  = apkInfo.getVersionCode();
            DownloadUtils.as(mContext).download(url, md5, version);
        }

        @Override
        public void onError(String str) {

        }
    };

    public void listUser() {
        SysUser sysUser = new SysUser();
        HttpInterface.getInsstance().listUser(new ProgressSubscriber <List<SysUser>>(mContext, listUserlistener),
                sysUser);
    }

    SubscriberOnNextListener listUserlistener = new SubscriberOnNextListener <ArrayList<SysUser>>() {
        @Override
        public void onNext(ArrayList<SysUser> sysUserList1) {
            WMSLog.d("listUser :" + sysUserList1);
            sysUserList = sysUserList1;
            Collections.reverse(sysUserList);
            createDialog();
        }

        @Override
        public void onError(String str) {

        }
    };

    public void setManualworkPermission(List<SysUser> sysUserList) {
        HttpInterface.getInsstance().setManualworkPermission(new ProgressSubscriber <String>(mContext, manualworkPermissionListener),
                sysUserList);
    }

    SubscriberOnNextListener manualworkPermissionListener = new SubscriberOnNextListener <String >() {
        @Override
        public void onNext(String reuslt) {

        }

        @Override
        public void onError(String str) {

        }
    };
}