ChooseAddressActivity.java 10.4 KB

package com.people.location;

import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.amap.api.location.AMapLocation;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseQuickAdapter.OnItemClickListener;
import com.wd.base.log.Logger;
import com.wd.common.base.BaseActivity;
import com.wd.common.constant.RouterConstants;
import com.wd.common.permissions.IPmsCallBack;
import com.wd.common.permissions.PermissionsUtils;
import com.wd.common.permissions.PmsConstant;
import com.wd.foundation.bean.response.GdDistrictBean;
import com.people.listener.GetDistrictDataListener;
import com.people.viewmodel.GdDistrictDataModel;
import com.qmuiteam.qmui.util.QMUIKeyboardHelper;

import java.util.ArrayList;
import java.util.List;

/**
 * 选择地址
 *
 * @author lvjinhui
 */
@Route(path = RouterConstants.PATH_BASE_LOCATION_SELECT)
public class ChooseAddressActivity extends BaseActivity
    implements View.OnClickListener {
    private static final String TAG = "ChooseAddressActivity";

    public static final String KEY_ADDRESS = "key_address";

    public static final String KEY_ADCODE = "key_adCode";

    public static final String KEY_CITYCODE = "key_cityCode";

    public static final String KEY_AREA = "区";

    private RecyclerView mRecyclerView;

    private AddressAdapter mAdapter;

    private EditText editText;

    private LocationUtils locationUtils;

    private int pageSize = 20;

    private int pageNum = 0;

    private String cityName;

    private String provinceName;

    private GdDistrictDataModel viewModel;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_choose_address;
    }

    @Override
    protected String getTag() {
        return TAG;
    }

    @Override
    public void initView() {
        ImageView backView = findViewById(R.id.back);
        backView.setOnClickListener(this);
        mRecyclerView = findViewById(R.id.listview);
        initRecyclerView();

        editText = findViewById(R.id.editext);
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() == 0) {
                    areaList.clear();
                    if (mAdapter != null) {
                        mAdapter.setNewData(areaList);
                        mAdapter.notifyDataSetChanged();
                    }
                    return;
                }
                viewModel.getDistrictData(s.toString());
                Logger.t(TAG).d("afterTextChanged=====>"+s.toString());
            }
        });

        editText.setFocusable(true);
        QMUIKeyboardHelper.showKeyboard(editText, false);

    }

    public void initRecyclerView() {
        LinearLayoutManager mManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mManager);
        mRecyclerView.setHasFixedSize(true);
        mAdapter = new AddressAdapter();
        mAdapter.setHasStableIds(true);
        mRecyclerView.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                QMUIKeyboardHelper.hideKeyboard(editText);

                GdDistrictBean bean = (GdDistrictBean) adapter.getData().get(position);
                Intent intent = new Intent();
                if (bean.isAloneCity()) {
                    if (null != bean.getProvince()){
                        if (bean.getProvince().equals(bean.getParentName())) {
                            intent.putExtra(KEY_ADDRESS, bean.getParentName());
                        } else {
                            intent.putExtra(KEY_ADDRESS, bean.getProvince() + bean.getParentName());
                        }
                    }else {
                        intent.putExtra(KEY_ADDRESS, bean.getParentName());
                    }


                } else {
                    intent.putExtra(KEY_ADDRESS, bean.getParentName() + bean.getName());
                }
                intent.putExtra(KEY_ADCODE, bean.getAdcode());
                intent.putExtra(KEY_CITYCODE, bean.getCitycode());
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }

    @Override
    protected void initData() {
        locationUtils = new LocationUtils();
    }

    List<GdDistrictBean> areaList = new ArrayList<>();

    @Override
    protected void initViewModel() {
        viewModel = getViewModel(GdDistrictDataModel.class);
        viewModel.observeDetailListener(this, new GetDistrictDataListener() {
            @Override
            public void onSuccess(List<GdDistrictBean> data) {
                stopLoading();
                if (data != null && !data.isEmpty()) {
                    if (editText.getText().toString().trim().contains(KEY_AREA)) {
                        mAdapter.setNewData(data);
                        return;
                    }
                    String keywords = editText.getText().toString().trim();
                    areaList.clear();
                    if (data.size() == 1) {
                        GdDistrictBean gdDistrictBean = data.get(0);
                        gdDistrictBean.setAloneCity(false);
                        areaList.add(gdDistrictBean);
                        if(gdDistrictBean.getParentName() != null && gdDistrictBean.getParentName().contains(keywords))
                        {
                            initList(gdDistrictBean);
                        }else if(gdDistrictBean.getCityName() != null && gdDistrictBean.getCityName().contains(keywords)){
                            initList(gdDistrictBean);
                        }
                        mAdapter.setNewData(areaList);
                        mAdapter.notifyDataSetChanged();
                        return;
                    }

                    for (int i = 0; i < data.size(); i++) {
                        GdDistrictBean gdDistrictBean = data.get(i);
                        gdDistrictBean.setAloneCity(false);
                        areaList.add(gdDistrictBean);
                        if (i == data.size() - 1) {
                            // 特殊处理最后一个
                            if(gdDistrictBean.getParentName() != null && gdDistrictBean.getParentName().contains(keywords))
                            {
                                initList(gdDistrictBean);
                            }else if(gdDistrictBean.getCityName() != null && gdDistrictBean.getCityName().contains(keywords)){
                                initList(gdDistrictBean);
                            }
                            mAdapter.setNewData(areaList);
                            mAdapter.notifyDataSetChanged();
                        } else {
                            if (!data.get(i).getParentName().equals(data.get(i + 1).getParentName())) {
                                if(gdDistrictBean.getParentName() != null && gdDistrictBean.getParentName().contains(keywords))
                                {
                                    initList(gdDistrictBean);
                                }else if(gdDistrictBean.getCityName() != null && gdDistrictBean.getCityName().contains(keywords)){
                                    initList(gdDistrictBean);
                                }
                            }
                        }
                    }

                }
            }

            @Override
            public void onFailure() {
                stopLoading();
            }
        });
    }

    private void initList(GdDistrictBean gdDistrictBean) {
        GdDistrictBean bean = new GdDistrictBean();
        bean.setAloneCity(true);
        bean.setParentName(gdDistrictBean.getParentName());
        bean.setAdcode(gdDistrictBean.getAdcode());
        bean.setCitycode(gdDistrictBean.getCitycode());
        bean.setProvince(gdDistrictBean.getProvince());
        areaList.add(bean);
    }

    @Override
    protected void afterCreate() {
        super.afterCreate();
        String[] permissions = new String[]{PmsConstant.ACCESS_FINE_LOCATION,
                PmsConstant.ACCESS_COARSE_LOCATION};
        boolean hPermission = PermissionsUtils.checkPermissionsGroup(this, permissions);
        if(hPermission){
            requestLocationPremission();
        }else {
            cityName = "北京";
            viewModel.getDistrictData(cityName);
        }
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.back) {
            QMUIKeyboardHelper.hideKeyboard(editText);
            finish();
        }
    }

    @Override
    public void onDestroy() {
        if (locationUtils != null) {
            locationUtils.destroyLocation();
        }
        super.onDestroy();
    }

    /**
     * 请求定位信息
     */
    public void requestLocationPremission() {
        PermissionsUtils.getLocation(this,null, null, new IPmsCallBack() {
            @Override
            public void granted() {
                requestLocation();
            }

            @Override
            public void notGranted() {
                cityName = "北京";
                viewModel.getDistrictData(cityName);
            }
        });
    }

    /**
     * 获取定位信息
     */
    public void requestLocation() {
        startLoading();

        locationUtils.startLocation();
        locationUtils.setOnLocationSuccessListener(new LocationUtils.OnLocationSuccessListener() {
            @Override
            public void onLocationSuccess(AMapLocation aMapLocation) {
                provinceName = aMapLocation.getProvince();
                cityName = aMapLocation.getCity();
                viewModel.getDistrictData(cityName);
            }

            @Override
            public void onLocationFail(AMapLocation aMapLocation) {
                cityName = "北京";
                viewModel.getDistrictData(cityName);
            }
        });
    }

}