package com.wise.wawc;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.wise.data.BrankModel;
import com.wise.data.CharacterParser;
import com.wise.list.XListView;
import com.wise.list.XListView.IXListViewListener;
import com.wise.pubclas.Constant;
import com.wise.pubclas.GetSystem;
import com.wise.pubclas.NetThread;
import com.wise.pubclas.Variable;
import com.wise.service.BrankAdapter;
import com.wise.service.ClearEditText;
import com.wise.service.PinyinComparator;
import com.wise.service.SeriesAdapter;
import com.wise.service.SideBar;
import com.wise.service.SideBar.OnTouchingLetterChangedListener;
import com.wise.sql.DBExcute;
import com.wise.sql.DBHelper;
import com.wise.wawc.ChoiceCarInformationActivity.MyHandler;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
/**
* 选择车辆品牌
*/
public class ChoiceCarInformationActivity extends Activity implements IXListViewListener{
private static final String TAG = "CarBrankListActivity";
/**
* 品牌
*/
private RelativeLayout carBrankLayout = null; //车牌
private ListView carModlesLayout = null; //车型
private ListView carTypeLayout = null; //车款
private ClearEditText mClearEditText; //自定义搜索栏
private XListView vehicleBrankList = null; //显示车的品牌
private TextView letterIndex = null; //字母索引选中提示框
private SideBar sideBar = null; //右侧字母索引栏
private CharacterParser characterParser; //将汉字转成拼音
private List<BrankModel> brankModelList = new ArrayList<BrankModel>(); //车辆品牌集合
private List<String> brankLogo = null;
private List<String[]> carSeriesList = new ArrayList<String[]>();
private List<String[]> carSeriesNameList = new ArrayList<String[]>();
private PinyinComparator comparator; //根据拼音排序
private BrankAdapter brankAdapter = null;
private SeriesAdapter seriesAdapter = null;
//组件
private ImageView choiceBrankBack = null;
private Intent parentIntent = null;
private int code = 0;
private MyHandler myHandler = null;
private ProgressDialog progressDialog;
private static final int GET_BRANK = 1;
private static final int GET_SERIES = 3;
private static final int GET_TYPE = 4;
private static final int REFRESH_BRANK = 2;
private DBExcute dBExcute = null;
private DBHelper dbHelper = null;
private String imageName = "";
private ImageView back;
private TextView title = null;
String carSeriesId;
String carBrankId;
String carSeries;
String carBrank;
String logoUrl = "";
private MyThread myThread = null;
private boolean imageDownload = true;
public static final String carBrankTitle = "carBrank"; //数据库基础表车辆品牌的标题字段
public static final String carSeriesTitle = "carSeries"; //数据库基础表车辆款式的标题字段
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
setContentView(R.layout.choice_car_information);
parentIntent = getIntent();
code = parentIntent.getIntExtra("code", 0);
myHandler = new MyHandler();
brankLogo = new ArrayList<String>();
dbHelper = new DBHelper(ChoiceCarInformationActivity.this);
dBExcute = new DBExcute();
//初始化控件
initViews();
}
private void initViews() {
carBrankLayout = (RelativeLayout) findViewById(R.id.choice_car_brank);
vehicleBrankList = (XListView) findViewById(R.id.vehicle_brank_list); // 车牌
carModlesLayout = (ListView) findViewById(R.id.choice_car_modles); //车型
carTypeLayout = (ListView) findViewById(R.id.choice_car_type); //车款
back = (ImageView) findViewById(R.id.choice_vechile_information_back);
title = (TextView) findViewById(R.id.choice_vechile_information_title);
back.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(code == 3 || code == NewVehicleActivity.newVehicleBrank){
if(carBrankLayout.getVisibility() == View.VISIBLE){
ChoiceCarInformationActivity.this.finish();
}else if(carModlesLayout.getVisibility() == View.VISIBLE){
carModlesLayout.setVisibility(View.GONE);
title.setText(R.string.choice_brank);
carBrankLayout.setVisibility(View.VISIBLE);
}else if(carTypeLayout.getVisibility() == View.VISIBLE){
carTypeLayout.setVisibility(View.GONE);
title.setText(R.string.choice_series);
carModlesLayout.setVisibility(View.VISIBLE);
}
}else if(code == 12 || code == NewVehicleActivity.newVehicleSeries){
if(carModlesLayout.getVisibility() == View.VISIBLE){
ChoiceCarInformationActivity.this.finish();
}
if(carTypeLayout.getVisibility() == View.VISIBLE){
carTypeLayout.setVisibility(View.GONE);
title.setText(R.string.choice_series);
carModlesLayout.setVisibility(View.VISIBLE);
}
}else if(code == 14 || code == NewVehicleActivity.newVehicleType){
ChoiceCarInformationActivity.this.finish();
}
}
});
//选择品牌页面
vehicleBrankList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
BrankModel brankModel = (BrankModel) vehicleBrankList.getItemAtPosition(arg2);
// TODO
carBrank = brankModel.getVehicleBrank();
carBrankId = brankModel.getBrankId();
logoUrl = brankModel.getLogoUrl();
Log.e("品牌id:",carBrankId);
Log.e("品牌:",carBrank);
//点击品牌列表 选择车型
progressDialog = ProgressDialog.show(ChoiceCarInformationActivity.this, getString(R.string.dialog_title), getString(R.string.dialog_message));
progressDialog.setCancelable(true);
getDate(carBrankTitle + carBrankId, Constant.BaseUrl + "base/car_series?pid=" + carBrankId,GET_SERIES);
}
});
//选择车型页面
carModlesLayout.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
//点击车型 选择车款
String[] str = (String[]) carModlesLayout.getItemAtPosition(arg2);
carSeriesId = str[0];
carSeries = str[1];
progressDialog = ProgressDialog.show(ChoiceCarInformationActivity.this,getString(R.string.dialog_title),getString(R.string.dialog_message));
progressDialog.setCancelable(true);
getDate(carSeriesTitle + carSeriesId, Constant.BaseUrl + "base/car_type?pid=" + carSeriesId,GET_TYPE);
}
});
//选择车款页面
carTypeLayout.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
//点击返回我的爱车 并将相关数据显示出来
Intent intent = new Intent();
intent.putExtra("brank", carBrank);
intent.putExtra("brankId", carBrankId);
intent.putExtra("series", carSeries);
intent.putExtra("seriesId", carSeriesId);
intent.putExtra("typeId", carSeriesNameList.get(arg2)[0]);
intent.putExtra("type", carSeriesNameList.get(arg2)[1]);
intent.putExtra("logo", logoUrl);
ChoiceCarInformationActivity.this.setResult(code, intent);
ChoiceCarInformationActivity.this.finish();
}
});
mClearEditText = (ClearEditText) findViewById(R.id.filter_edit);
vehicleBrankList.setXListViewListener(this);
vehicleBrankList.setPullLoadEnable(false);
letterIndex = (TextView) findViewById(R.id.dialog);
sideBar = (SideBar) findViewById(R.id.sidrbar);
choiceBrankBack = (ImageView) findViewById(R.id.choice_vechile_back);
sideBar.setTextView(letterIndex); //选中某个拼音索引 提示框显示
characterParser = new CharacterParser().getInstance();
comparator = new PinyinComparator();
//设置右侧触摸监听
sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {
public void onTouchingLetterChanged(String s) {
int position = brankAdapter.getPositionForSection(s.charAt(0));
if(position != -1){
vehicleBrankList.setSelection(position);
}
}
});
mClearEditText = (ClearEditText) findViewById(R.id.filter_edit);
//根据输入框输入值的改变来过滤搜索
mClearEditText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
//当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表
filterData(s.toString());
}
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
public void afterTextChanged(Editable s) {
}
});
progressDialog = ProgressDialog.show(ChoiceCarInformationActivity.this, getString(R.string.dialog_title), getString(R.string.dialog_message));
progressDialog.setCancelable(true);
myHandler = new MyHandler();
//获取车牌
if(code == 3 || code == NewVehicleActivity.newVehicleBrank){
Log.e("点击选择品牌","点击选择品牌");
getDate(carBrankTitle,Constant.BaseUrl + "base/car_brand",GET_BRANK);
}else if(code == 12 || code == NewVehicleActivity.newVehicleSeries){
carBrankId = getIntent().getStringExtra("brankId");
carBrank = getIntent().getStringExtra("carBrank");
logoUrl = getIntent().getStringExtra("logo");
getDate(carBrankTitle + carBrankId, Constant.BaseUrl + "base/car_series?pid=" + carBrankId,GET_SERIES);
Log.e("点击车型","点击车型");
}else if(code == 14 || code == NewVehicleActivity.newVehicleType){
carBrankId = getIntent().getStringExtra("brankId");
carBrank = getIntent().getStringExtra("carBrank");
carSeriesId = getIntent().getStringExtra("seriesId");
carSeries = getIntent().getStringExtra("series");
logoUrl = getIntent().getStringExtra("logo");
Log.e("点击车款","点击车款");
getDate(carSeriesTitle + carSeriesId, Constant.BaseUrl + "base/car_type?pid=" + carSeriesId,GET_TYPE);
}
}
//处理服务器返回的数据
class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
progressDialog.dismiss();
switch(msg.what){
case GET_BRANK:
String brankData = msg.obj.toString();
//存到数据库
insertDatabases(carBrankTitle,brankData,ChoiceCarInformationActivity.this);
if(!"".equals(brankData)){
ContentValues contentValues = new ContentValues();
contentValues.put("Title", carBrankTitle);
contentValues.put("Content", brankData);
dBExcute.InsertDB(ChoiceCarInformationActivity.this, contentValues, Constant.TB_Base);
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(brankData);
} catch (JSONException e) {
e.printStackTrace();
}
parseJSON(jsonArray,GET_BRANK);
}else{
Toast.makeText(getApplicationContext(), "获取数据失败,稍后再试", 0).show();
}
break;
case REFRESH_BRANK:
onLoad();
String refreshData = msg.obj.toString();
if(!"".equals(refreshData)){
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + Constant.TB_Base + " where Title = ?", new String[]{"carBrank"});
if(cursor.moveToFirst()){
db.delete(Constant.TB_Base, "Title = ?", new String[]{"carBrank"});
}
ContentValues contentValues = new ContentValues();
contentValues.put("Title", carBrankTitle);
contentValues.put("Content", refreshData);
//更新数据库
dBExcute.InsertDB(ChoiceCarInformationActivity.this, contentValues, Constant.TB_Base);
JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(refreshData);
} catch (JSONException e) {
e.printStackTrace();
}
parseJSON(jsonArray,REFRESH_BRANK);
}else{
Toast.makeText(getApplicationContext(), "获取数据失败,稍后再试", 0).show();
}
Log.e(TAG,"imageDownload = " + imageDownload);
// TODO
imageDownload = true;
new Thread(new Runnable() {
public void run() {
myThread.run();
}
}).start();
break;
case GET_SERIES: //车型
String seriesData = msg.obj.toString();
JSONArray jsonArray = null;
if(!"[]".equals(seriesData)){
try {
jsonArray = new JSONArray(seriesData);
} catch (JSONException e) {
e.printStackTrace();
}
}
insertDatabases(carBrankTitle + carBrankId,seriesData,ChoiceCarInformationActivity.this);
parseJSON(jsonArray,GET_SERIES);
break;
case GET_TYPE: //车款
String resultType = msg.obj.toString();
JSONArray jsonType = null;
try {
jsonType = new JSONArray(msg.obj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
//更新数据库
insertDatabases(carSeriesTitle + carSeriesId,resultType,ChoiceCarInformationActivity.this);
parseJSON(jsonType,GET_TYPE);
break;
case 38:
brankAdapter.notifyDataSetChanged();
break;
default:
return;
}
super.handleMessage(msg);
}
}
/**
* @param whereValues 查询数据库时搜索条件
* @param url 数据库没有数据 服务器获取的地址
* @param handlerWhat 服务器获取handler异步处理的标识
*/
private void getDate(String whereValues,String url,int handlerWhat) {
Log.e("title:",whereValues);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + Constant.TB_Base + " where Title = ?", new String[]{whereValues});
JSONArray jsonArray = null;
if(cursor.moveToFirst()){
Log.e("数据库数据","数据库数据");
try {
jsonArray = new JSONArray(cursor.getString(cursor.getColumnIndex("Content")));
parseJSON(jsonArray,handlerWhat);
} catch (JSONException e) {
e.printStackTrace();
}
}else{
Log.e("服务器数据","服务器数据");
new Thread(new NetThread.GetDataThread(myHandler, url, handlerWhat)).start();
}
cursor.close();
db.close();
}
//解析json数据
public void parseJSON(JSONArray jsonArray,int what){
progressDialog.dismiss();
switch(what){
case GET_BRANK: //解析车牌数据
List<BrankModel> brankList = null;
try {
int arrayLength = jsonArray.length();
brankList = new ArrayList<BrankModel>();
for(int i = 0 ; i < arrayLength ; i ++){
JSONObject jsonObj = jsonArray.getJSONObject(i);
BrankModel brankModel = new BrankModel();
brankModel.setVehicleBrank(jsonObj.getString("name"));
brankModel.setBrankId(jsonObj.getString("id"));
if(jsonObj.opt("url_icon") != null){
brankModel.setLogoUrl(jsonObj.getString("url_icon"));
}else{
brankModel.setLogoUrl("");
}
brankList.add(brankModel);
}
} catch (JSONException e1) {
e1.printStackTrace();
}
brankModelList = filledData(brankList);
//排序
Collections.sort(brankModelList, comparator);
carModlesLayout.setVisibility(View.GONE);
carTypeLayout.setVisibility(View.GONE);
title.setText(R.string.choice_brank);
brankAdapter = new BrankAdapter(ChoiceCarInformationActivity.this, brankModelList);
vehicleBrankList.setAdapter(brankAdapter);
//刷新品牌logo
myThread = new MyThread();
myThread.start();
break;
case GET_SERIES: //解析车型数据
carSeriesList.clear();
int jsonLength = jsonArray.length();
for(int i = 0 ; i < jsonLength ; i ++){
String[] series = new String[2];
try {
series[0] = jsonArray.getJSONObject(i).getString("id");
series[1] = jsonArray.getJSONObject(i).getString("show_name");
carSeriesList.add(series);
} catch (JSONException e) {
e.printStackTrace();
}
}
//隐藏车牌列表 显示车型列表
carBrankLayout.setVisibility(View.GONE);
carTypeLayout.setVisibility(View.GONE);
seriesAdapter = new SeriesAdapter(carSeriesList, ChoiceCarInformationActivity.this,1,null);
carModlesLayout.setAdapter(seriesAdapter);
title.setText(R.string.choice_series);
carModlesLayout.setVisibility(View.VISIBLE);
break;
case REFRESH_BRANK: //刷新车牌数据
break;
case GET_TYPE: //获取车款
int jsonTypeLength = jsonArray.length();
for(int i = 0 ; i < jsonTypeLength ; i ++){
String[] typeStr = new String[2];
try {
typeStr[0] = jsonArray.getJSONObject(i).getString("id");
typeStr[1] = jsonArray.getJSONObject(i).getString("name");
carSeriesNameList.add(typeStr);
} catch (JSONException e) {
e.printStackTrace();
}
}
carBrankLayout.setVisibility(View.GONE);
carModlesLayout.setVisibility(View.GONE);
seriesAdapter = new SeriesAdapter(null,ChoiceCarInformationActivity.this,2,carSeriesNameList);
seriesAdapter.refresh(2, carSeriesNameList);
carTypeLayout.setAdapter(seriesAdapter);
title.setText(R.string.choice_type);
carTypeLayout.setVisibility(View.VISIBLE);
break;
}
}
/**
* 为ListView填充数据
* @param date
* @return
*/
private List<BrankModel> filledData(List<BrankModel> brankList){
for(int i=0; i<brankList.size(); i++){
//汉字转换成拼音
String pinyin = characterParser.getSelling(brankList.get(i).getVehicleBrank());
String sortString = pinyin.substring(0, 1).toUpperCase();
// 正则表达式,判断首字母是否是英文字母
if(sortString.matches("[A-Z]")){
brankList.get(i).setVehicleLetter(sortString.toUpperCase());
}else{
brankList.get(i).setVehicleLetter("#");
}
}
return brankList;
}
/**
* 根据输入框中的值来过滤数据并更新ListView
* @param filterStr
*/
private void filterData(String filterStr){
List<BrankModel> filterDateList = new ArrayList<BrankModel>();
//编辑框的内容为空的时候
if(TextUtils.isEmpty(filterStr)){
filterDateList = brankModelList;
}else{
//匹配某些类型的品牌
filterDateList.clear();
for(BrankModel sortModel : brankModelList){
String name = sortModel.getVehicleBrank();
if(name.indexOf(filterStr.toString()) != -1 || characterParser.getSelling(name).startsWith(filterStr.toString())){
filterDateList.add(sortModel);
}
}
}
// 根据a-z进行排序
Collections.sort(filterDateList, comparator);
brankAdapter.updateListView(filterDateList);
}
@Override //下拉刷新
public void onRefresh() {
new Thread(new NetThread.GetDataThread(myHandler, Constant.BaseUrl + "base/car_brand", REFRESH_BRANK)).start();
}
@Override //上拉加载
public void onLoadMore() {
}
private void onLoad() {
//获取当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
String temp = sdf.format(new Date());
String date = temp.substring(5, 16);
vehicleBrankList.stopRefresh();
vehicleBrankList.stopLoadMore();
vehicleBrankList.setRefreshTime(date);
}
protected void onDestroy() {
super.onDestroy();
}
protected void onPause() {
imageDownload = false;
super.onPause();
}
protected void onRestart() {
super.onRestart();
}
protected void onResume() {
super.onResume();
}
//将获取的数据存到数据库
public static void insertDatabases(String titleName,String content,Context context){
ContentValues values = new ContentValues();
values.put("Cust_id", Variable.cust_id);
values.put("Title", titleName);
values.put("Content", content);
DBExcute dBExcute = new DBExcute();
dBExcute.InsertDB(context, values, Constant.TB_Base);
}
public void logoImageIsExist(final String imagePath,final String name,final String logoUrl){
File filePath = new File(imagePath);
File imageFile = new File(imagePath + name + ".png");
if(!filePath.exists()){
filePath.mkdir();
}
if(!imageFile.exists()){
Bitmap bitmap = GetSystem.getBitmapFromURL(Constant.ImageUrl + logoUrl);
if (bitmap != null) {
createImage(imagePath + name + ".png", bitmap);
}
}
}
class MyThread extends Thread{
public void run() {
Log.e(TAG,"run()");
for(int i = 0 ; i < brankModelList.size() ; i++){
if(!"".equals(brankModelList.get(i).getLogoUrl()) && brankModelList.get(i).getLogoUrl() != null){
if(imageDownload){
logoImageIsExist(Constant.VehicleLogoPath, brankModelList.get(i).getVehicleBrank(), brankModelList.get(i).getLogoUrl());
}else{
continue;
}
}
}
super.run();
}
public void reStart(){
run();
}
}
//向SD卡中添加图片
public void createImage(String fileName,Bitmap bitmap){
FileOutputStream b = null;
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, b);// 把数据写入文件
Message msg = new Message();
msg.what = 38;
myHandler.sendMessage(msg);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}