package com.xiaomi.xms.sales.cache; import android.content.AsyncQueryHandler; import android.content.Context; import android.database.Cursor; import com.xiaomi.xms.sales.db.DBContract.Region; import com.xiaomi.xms.sales.model.Tags; import java.util.concurrent.CopyOnWriteArrayList; public class RegionCache extends AsyncQueryHandler { private static RegionCache mInstance; private static int mTokenId = -1; private Context mContext; public static synchronized RegionCache getInstance(Context context) { if (mInstance == null) { mInstance = new RegionCache(context); } return mInstance; } public RegionCache(Context context) { super(context.getContentResolver()); mContext = context; } public interface QueryCallback { public void queryComplete(Cursor cursor); } private CopyOnWriteArrayList<QueryCallback> mCallbackList = new CopyOnWriteArrayList<QueryCallback>(); @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { super.onQueryComplete(token, cookie, cursor); if (mCallbackList.size() <= token) { return; } QueryCallback callback = mCallbackList.get(token); if (callback != null) { callback.queryComplete(cursor); } } public void getProvince(QueryCallback callback) { mCallbackList.add(callback); startQuery(mCallbackList.size() - 1, null, Region.CONTENT_URI, null, Region.PARENT + "=" + Tags.AddressInfo.CHINA_ID + " and " + Region.NAME + " not in ('香港','澳门','台湾')", null, null);// TODO:暂时代码屏蔽,待后续改为通过接口更新 } public Cursor getProvince() { return mContext.getContentResolver().query(Region.CONTENT_URI, null, Region.PARENT + "=" + Tags.AddressInfo.CHINA_ID, null, null); } public void getCityByProvinceId(long id, QueryCallback callback) { mCallbackList.add(callback); startQuery(mCallbackList.size() - 1, null, Region.CONTENT_URI, null, Region.PARENT + "=" + id, null, null); } public Cursor getCityByProvinceId(long id) { return mContext.getContentResolver().query(Region.CONTENT_URI, null, Region.PARENT + "=" + id, null, null); } public void getDistrictByCityId(long id, QueryCallback callback) { mCallbackList.add(callback); startQuery(mCallbackList.size() - 1, null, Region.CONTENT_URI, null, Region.PARENT + "=" + id, null, null); } public Cursor getDistrictByCityId(long id) { return mContext.getContentResolver().query(Region.CONTENT_URI, null, Region.PARENT + "=" + id, null, null); } public String getNameById(int id) { Cursor cursor = mContext.getContentResolver().query(Region.CONTENT_URI, null, Region._ID + "=" + id, null, null); return cursor.getString(cursor.getColumnIndex(Region.NAME)); } public String getZipCodeById(int id) { Cursor cursor = mContext.getContentResolver().query(Region.CONTENT_URI, null, Region._ID + "=" + id, null, null); return cursor.getString(cursor.getColumnIndex(Region.ZIPCODE)); } public void getZipCodeById(long id, QueryCallback callback) { mCallbackList.add(callback); startQuery(mCallbackList.size() - 1, null, Region.CONTENT_URI, null, Region._ID + "=" + id, null, null); } public void updateFromResource(QueryCallback callback) { mCallbackList.add(callback); startUpdate(mCallbackList.size() - 1, null, Region.UPDATE_URI, null, null, null); } }