From e31e69c5cfef87113022509c62d96a2fe6f68ec8 Mon Sep 17 00:00:00 2001 From: wang Date: Mon, 21 Dec 2015 00:22:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86cu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/xrecyclerview/httphelper.java | 199 ++++++++ app/src/main/java/cu/DeviceUtil.java | 336 +++++++++++++ app/src/main/java/cu/Preferences.java | 26 + app/src/main/java/cu/db/DaoMaster.java | 97 ++++ app/src/main/java/cu/db/DaoSession.java | 62 +++ app/src/main/java/cu/db/DaoUtil.java | 47 ++ .../db/Migration/AbstractMigratorHelper.java | 12 + .../cu/db/Migration/DBMigrationHelper1.java | 34 ++ .../cu/db/Migration/DBMigrationHelper2.java | 35 ++ app/src/main/java/cu/db/MigrationHelper.java | 157 ++++++ app/src/main/java/cu/db/cache/Cache.java | 113 +++++ app/src/main/java/cu/db/cache/CacheDB.java | 103 ++++ app/src/main/java/cu/db/cache/CacheDao.java | 134 +++++ app/src/main/java/cu/db/config/Config.java | 61 +++ app/src/main/java/cu/db/config/ConfigDao.java | 117 +++++ .../main/java/cu/db/config/ConfigUtil.java | 124 +++++ .../ArrowRefreshHeaderOriginal.java | 269 ++++++++++ .../xrecyclerview/XRecyclerViewOriginal.java | 462 ++++++++++++++++++ .../src/main/res/drawable-hdpi/a1.png | Bin 0 -> 8895 bytes .../src/main/res/drawable-hdpi/a2.png | Bin 0 -> 11082 bytes .../src/main/res/drawable-hdpi/a3.png | Bin 0 -> 13465 bytes .../src/main/res/drawable-hdpi/a4.png | Bin 0 -> 16022 bytes .../src/main/res/drawable-hdpi/a5.png | Bin 0 -> 18522 bytes .../src/main/res/drawable-hdpi/a6.png | Bin 0 -> 21325 bytes .../src/main/res/drawable-hdpi/a7.png | Bin 0 -> 21342 bytes .../src/main/res/drawable-hdpi/a8.png | Bin 0 -> 21195 bytes .../res/layout/listview_header_original.xml | 70 +++ 27 files changed, 2458 insertions(+) create mode 100644 app/src/main/java/com/example/xrecyclerview/httphelper.java create mode 100644 app/src/main/java/cu/DeviceUtil.java create mode 100644 app/src/main/java/cu/Preferences.java create mode 100644 app/src/main/java/cu/db/DaoMaster.java create mode 100644 app/src/main/java/cu/db/DaoSession.java create mode 100644 app/src/main/java/cu/db/DaoUtil.java create mode 100644 app/src/main/java/cu/db/Migration/AbstractMigratorHelper.java create mode 100644 app/src/main/java/cu/db/Migration/DBMigrationHelper1.java create mode 100644 app/src/main/java/cu/db/Migration/DBMigrationHelper2.java create mode 100644 app/src/main/java/cu/db/MigrationHelper.java create mode 100644 app/src/main/java/cu/db/cache/Cache.java create mode 100644 app/src/main/java/cu/db/cache/CacheDB.java create mode 100644 app/src/main/java/cu/db/cache/CacheDao.java create mode 100644 app/src/main/java/cu/db/config/Config.java create mode 100644 app/src/main/java/cu/db/config/ConfigDao.java create mode 100644 app/src/main/java/cu/db/config/ConfigUtil.java create mode 100755 xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/ArrowRefreshHeaderOriginal.java create mode 100755 xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/XRecyclerViewOriginal.java create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a1.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a2.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a3.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a4.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a5.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a6.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a7.png create mode 100755 xrecyclerview/src/main/res/drawable-hdpi/a8.png create mode 100755 xrecyclerview/src/main/res/layout/listview_header_original.xml diff --git a/app/src/main/java/com/example/xrecyclerview/httphelper.java b/app/src/main/java/com/example/xrecyclerview/httphelper.java new file mode 100644 index 0000000..19a69fe --- /dev/null +++ b/app/src/main/java/com/example/xrecyclerview/httphelper.java @@ -0,0 +1,199 @@ +package com.example.xrecyclerview; + +import android.app.Activity; +import android.os.Handler; + +import com.squareup.okhttp.Cache; +import com.squareup.okhttp.CacheControl; +import com.squareup.okhttp.Call; +import com.squareup.okhttp.Callback; +import com.squareup.okhttp.FormEncodingBuilder; +import com.squareup.okhttp.Headers; +import com.squareup.okhttp.MediaType; +import com.squareup.okhttp.MultipartBuilder; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.RequestBody; +import com.squareup.okhttp.Response; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.CookieManager; +import java.net.CookiePolicy; +import java.net.Proxy; +import java.net.SocketAddress; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.concurrent.TimeUnit; + +import cu.DeviceUtil; +import cu.Preferences; +import cu.db.config.ConfigUtil; + +/** + * Created by wang on 15/12/20. + */ +public class httphelper { + + private final String TAG = "httphelper"; + + private static final String contentType = "application/json;charset=UTF-8"; + public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); + + public static String DEV_HOST = "api-test.365hr.com"; + public static String RELEASE_HOST = "api.365hr.com"; + + //public static String BASE_URL_DEV = "http://m.hrloo.com/hrloo.php?"; + public static String BASE_URL_DEV = "http://eebochina.oicp.net:18080/hrloo.php?"; + public static String BASE_URL_RELEASE = "http://m.hrloo.com/hrloo.php?"; + public static String BASE_URL = "http://m.hrloo.com/hrloo.php?"; + + private static httphelper httphelperInstance; + private OkHttpClient mOkHttpClient; + private Handler hd; + private Activity activity; + private DeviceUtil mDeviceUtil; + + private httphelper() {} + + private httphelper(Activity activity) { + this.activity = activity; + this.mDeviceUtil = new DeviceUtil(activity); + mOkHttpClient = new OkHttpClient(); + //cookie enabled + mOkHttpClient.setCookieHandler(new CookieManager(null, CookiePolicy.ACCEPT_ORIGINAL_SERVER)); + hd = new Handler(activity.getMainLooper()); + if (BuildConfig.DEBUG) { + BASE_URL = BASE_URL_DEV; + } else { + BASE_URL = BASE_URL_RELEASE; + } + } + + public static httphelper getInstance(Activity activity) + { + if (httphelperInstance == null) + { + synchronized (httphelper.class) + { + if (httphelperInstance == null) + { + httphelperInstance = new httphelper(activity); + } + } + } + return httphelperInstance; + } + + private String getUrlEnd() { + // token,devid这二个参数以GET方式放在每次请求的URL后面,登录成功后服务器返回token,未登录时token可为空值,devid设备ID要求唯一由APP产生 + return "&m=mapi2&token=" + encode(ConfigUtil.getConfigValue(Preferences.TOKEN)) + "&devid=" + mDeviceUtil.getAndroidId(); + } + + public String requestUrl(String module, String method) { + return BASE_URL + "c=" + module + "&a=" + method + getUrlEnd(); + } + + + private void testCode() throws IOException { + OkHttpClient okHttpClient = new OkHttpClient(); + RequestBody requestBody = new MultipartBuilder() // 多模块 + .type(MultipartBuilder.FORM) + .addPart( + Headers.of("", ""), + RequestBody.create(JSON, "") + ) + .addFormDataPart("k", "v") + .build(); + RequestBody requestBodyJson = RequestBody.create(JSON, "json..."); // json串 + RequestBody requestBodyKV = new FormEncodingBuilder() // 键值对 + .add("k1", "v1") + .addEncoded("k2", "v2") + .build(); + final Request request = new Request.Builder() + .url("") + .header("User-Agent", "OkHttp Headers.java") + .addHeader("Accept", contentType) + .cacheControl(CacheControl.FORCE_CACHE) + .put(requestBody) + .post(requestBodyJson) + .post(requestBodyKV) + .get() + .tag("1") // OkHttpClient.cancel(tag)来取消所有带有这个tag的call + .build(); + int cacheSize = 10 * 1024 * 1024; // 10 MiB + Cache cache = new Cache(new File("filename"), cacheSize); + + okHttpClient.setConnectTimeout(15, TimeUnit.SECONDS); + okHttpClient.setWriteTimeout(10, TimeUnit.SECONDS); + okHttpClient.setReadTimeout(30, TimeUnit.SECONDS); + okHttpClient.setCache(cache); + okHttpClient.setProxy(new Proxy(Proxy.Type.SOCKS, new SocketAddress() { + @Override + protected Object clone() throws CloneNotSupportedException { + return super.clone(); + } + })); + okHttpClient.setRetryOnConnectionFailure(true); + + Call call = okHttpClient.newCall(request); + call.enqueue(new Callback() { // 异步 + @Override + public void onFailure(Request request, IOException e) { + } + @Override + public void onResponse(Response response) throws IOException { + if (response.isSuccessful()) { + String res = response.body().string(); + InputStream inputStream = response.body().byteStream(); + Headers responseHeaders = response.headers(); + for (int i = 0; i < responseHeaders.size(); i++) { + System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i)); + } + } + } + }); + Response response = call.execute(); // 阻塞式 + if(response.isSuccessful()) {} + okHttpClient.cancel("1"); + } + + + + /** + * 参数编码 + * + * @return + */ + public static String encode(String s) { + if (s == null) { + return ""; + } + try { + return URLEncoder.encode(s, "UTF-8").replace("+", "%20").replace("*", "%2A") + .replace("%7E", "~").replace("#", "%23"); + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + /** + * 参数反编码 + * + * @param s + * @return + */ + public static String decode(String s) { + if (s == null) { + return ""; + } + try { + return URLDecoder.decode(s, "utf-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + +} diff --git a/app/src/main/java/cu/DeviceUtil.java b/app/src/main/java/cu/DeviceUtil.java new file mode 100644 index 0000000..93ff1ec --- /dev/null +++ b/app/src/main/java/cu/DeviceUtil.java @@ -0,0 +1,336 @@ +package cu; + +import android.content.Context; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.provider.Settings.Secure; +import android.telephony.TelephonyManager; +import android.text.TextUtils; +import android.view.Display; +import android.view.WindowManager; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * 设备信息 + */ +public class DeviceUtil { + private String manufacturer; + private String model; + private String releaseVersion; + private String sdkVersion; + + private int displayWidth; + private int displayHeight; + + private String deviceId; + private String networkOperatorName; + private String networkOperator; + private String networkCountryISO; + private String simOperator; + private String simCountryISO; + private String simSerialNumber; + private String subscriberId; + // private String phoneNumber; + private String androidId; + private int dpi; + + private String localMacAddress; + + public DeviceUtil(Context context) { + getSysinfo(context); + } + + private void getSysinfo(Context context) { + this.manufacturer = Build.MANUFACTURER; + this.model = Build.MODEL; + this.releaseVersion = Build.VERSION.RELEASE; + this.sdkVersion = Build.VERSION.SDK; + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + Display d = wm.getDefaultDisplay(); + this.displayWidth = d.getWidth(); + this.displayHeight = d.getHeight(); + this.dpi = context.getResources().getDisplayMetrics().densityDpi; + + TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + this.deviceId = tm.getDeviceId(); + this.networkOperatorName = tm.getNetworkOperatorName(); + this.networkOperator = tm.getNetworkOperator(); + this.networkCountryISO = tm.getNetworkCountryIso(); + this.simOperator = tm.getSimOperator(); + this.simCountryISO = tm.getSimCountryIso(); + this.simSerialNumber = tm.getSimSerialNumber(); + this.subscriberId = tm.getSubscriberId(); + // this.phoneNumber = tm.getLine1Number(); + + WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiInfo info = wifi.getConnectionInfo(); + this.localMacAddress = info.getMacAddress(); + + this.androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); + } + + /** + * @return 厂商 + */ + public String getManufacturer() { + return manufacturer; + } + + /** + * @return 产品型号 + */ + public String getModel() { + return model; + } + + /** + * @return 系统版本 + */ + public String getReleaseVersion() { + return releaseVersion; + } + + /** + * @return SDK版本 + */ + public String getSdkVersion() { + return sdkVersion; + } + + /** + * @return 屏幕宽 + */ + public int getDisplayWidth() { + return displayWidth; + } + + /** + * @return 屏幕高 + */ + public int getDisplayHeight() { + return displayHeight; + } + + /** + * @return IMEI + */ + public String getDeviceId() { + return deviceId; + } + + /** + * @return 网络服务提供名称 + */ + public String getNetworkOperatorName() { + return networkOperatorName; + } + + /** + * @return 网络服务提供 + */ + public String getNetworkOperator() { + return networkOperator; + } + + /** + * @return 网络服务提供商国家编码 + */ + public String getNetworkCountryISO() { + return networkCountryISO; + } + + /** + * @return SIM服务提供商 中国移动:46000&46002 中国联通:46001 中国电信:46003 + */ + public String getSimOperator() { + if (TextUtils.isEmpty(simOperator)) { + return "46000"; + } + return simOperator; + } + + /** + * @return SIM国家编码 + */ + public String getSimCountryISO() { + return simCountryISO; + } + + /** + * @return SIM 序列号 + */ + public String getSimSerialNumber() { + if (TextUtils.isEmpty(simSerialNumber)) { + return "000000"; + } + return simSerialNumber; + } + + /** + * @return IMSI + */ + public String getSubscriberId() { + if (TextUtils.isEmpty(subscriberId)) { + return "9"; + } + return "9" + subscriberId; + } + + /** + * @return 手机号码 + */ + /* + * public String getPhoneNumber() { return phoneNumber; } + */ + + /** + * 获取wifi mac地址 + * + * @return wifi mac地址(xx:xx:xx:xx:xx:xx) + */ + public String getLocalMacAddress() { + // if(TextUtils.isEmpty(localMacAddress)){ + // return localMacAddress;//mac[new Random().nextInt(10)]; + // } + // .replace(":", "") + return localMacAddress; + } + + public String buildUUID() { + //TODO 最后添加了时间 + String pid = + "86" + Build.BOARD.length() % 10 + Build.BRAND.length() % 10 + Build.CPU_ABI.length() % 10 + + Build.DEVICE.length() % 10 + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 + + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10 + + Build.PRODUCT.length() % 10 + Build.TAGS.length() % 10 + Build.TYPE.length() % 10 + + Build.USER.length() % 10 + System.currentTimeMillis(); + String lid = getDeviceId() + pid + getAndroidId() + getLocalMacAddress(); + + MessageDigest m = null; + try { + m = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + m.update(lid.getBytes(), 0, lid.length()); + byte p_md5Data[] = m.digest(); + + String uniqueID = new String(); + for (int i = 0; i < p_md5Data.length; i++) { + int b = (0xFF & p_md5Data[i]); + // if it is a single digit, make sure it have 0 in front (proper padding) + if (b <= 0xF) uniqueID += "0"; + // add number to string + uniqueID += Integer.toHexString(b); + } + uniqueID = uniqueID.toUpperCase(); + if (TextUtils.isEmpty(uniqueID) || "null".equals(uniqueID)) return buildUUID2(); + return uniqueID; + } + + private String buildUUID2() { + String pid = "86"; + + if (Build.BOARD != null) { + pid = pid + Build.BOARD.length() % 10; + } + if (Build.BRAND != null) { + pid = pid + Build.BRAND.length() % 10; + } + if (Build.CPU_ABI != null) { + pid = pid + Build.CPU_ABI.length() % 10; + } + if (Build.DEVICE != null) { + pid = pid + Build.DEVICE.length() % 10; + } + if (Build.DISPLAY != null) { + pid = pid + Build.DISPLAY.length() % 10; + } + if (Build.HOST != null) { + pid = pid + Build.HOST.length() % 10; + } + if (Build.ID != null) { + pid = pid + Build.ID.length() % 10; + } + if (Build.MANUFACTURER != null) { + pid = pid + Build.MANUFACTURER.length() % 10; + } + if (Build.MODEL != null) { + pid = pid + Build.MODEL.length() % 10; + } + if (Build.PRODUCT != null) { + pid = pid + Build.PRODUCT.length() % 10; + } + if (Build.TAGS != null) { + pid = pid + Build.TAGS.length() % 10; + } + if (Build.TYPE != null) { + pid = pid + Build.TYPE.length() % 10; + } + if (Build.USER != null) { + pid = pid + Build.USER.length() % 10; + } + + String lid = getDeviceId() + pid + getAndroidId() + getLocalMacAddress(); + + MessageDigest m = null; + + try { + m = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + m.update(lid.getBytes(), 0, lid.length()); + byte p_md5Data[] = m.digest(); + + String uniqueID = new String(); + for (int i = 0; i < p_md5Data.length; i++) { + int b = (0xFF & p_md5Data[i]); + // if it is a single digit, make sure it have 0 in front (proper padding) + if (b <= 0xF) uniqueID += "0"; + // add number to string + uniqueID += Integer.toHexString(b); + } + + uniqueID = uniqueID.toUpperCase(); + + return uniqueID; + } + + public String getAndroidId() { + return androidId; + } + + public void setAndroidId(String androidId) { + this.androidId = androidId; + } + + @Override + public String toString() { + return "DeviceId: " + getDeviceId() + " || DisplayHeight: " + getDisplayHeight() + + " || DisplayWidth: " + getDisplayWidth() + " || Manufacturer: " + getManufacturer() + + " || Model: " + getModel() + " || NetworkCountryISO: " + getNetworkCountryISO() + + " || NetworkOperator: " + + getNetworkOperator() + + " || NetworkOperatorName: " + + getNetworkOperatorName() + // +" || PhoneNumber: "+getPhoneNumber() + + " || ReleaseVersion: " + getReleaseVersion() + " || SdkVersion: " + getSdkVersion() + + " || SimCountryISO: " + getSimCountryISO() + " || SimOperator: " + getSimOperator() + + " || SimSerialNumber: " + getSimSerialNumber() + " || SubscriberId: " + getSubscriberId() + + " || LocalMacAddress: " + getLocalMacAddress(); + } + + public int getDpi() { + return dpi; + } + + public void setDpi(int dpi) { + this.dpi = dpi; + } + + +} diff --git a/app/src/main/java/cu/Preferences.java b/app/src/main/java/cu/Preferences.java new file mode 100644 index 0000000..4cb8192 --- /dev/null +++ b/app/src/main/java/cu/Preferences.java @@ -0,0 +1,26 @@ +package cu; + +/** + * Created by Wang on 2015/10/28. + */ +public class Preferences { + + // DEBUG调试模式 +// public static boolean DEBUG = true; + + public static final String UUID = "uuid"; + + public static final String KEYS = "keys"; // 设备注册后的标识 + //public static final String APPKEY = "appkey"; // header中固定参数,由服务端产生 + public static final String TOKEN = "token"; // 登录成功后服务器返回token,每次请求放在URL的后面 + + public static final String PUNCH_REMIND_TIME = "punc_remind_time"; // 每日打卡提醒 + + // 首次使用 + public static final String NOT_FIRST_USE_APP = "not_first_use_app"; + + // setActiveDeviceFlag这个接口,是一次性调用的,这个接口是当用户正式登录进去应用程序,第一次正式使用的时候调用。 + public static final String SET_ACTIVE_DEVICE_FLAG = "set_active_device_flag"; + + +} diff --git a/app/src/main/java/cu/db/DaoMaster.java b/app/src/main/java/cu/db/DaoMaster.java new file mode 100644 index 0000000..f592340 --- /dev/null +++ b/app/src/main/java/cu/db/DaoMaster.java @@ -0,0 +1,97 @@ +package cu.db; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import cu.db.Migration.AbstractMigratorHelper; +import cu.db.cache.CacheDao; +import cu.db.config.ConfigDao; +import de.greenrobot.dao.AbstractDaoMaster; +import de.greenrobot.dao.identityscope.IdentityScopeType; + + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * Master of DAO (schema version 1): knows all DAOs. +*/ +public class DaoMaster extends AbstractDaoMaster { + public static final int SCHEMA_VERSION = 3; + + /** Creates underlying database table using DAOs. */ + public static void createAllTables(SQLiteDatabase db, boolean ifNotExists) { + ConfigDao.createTable(db, ifNotExists); + CacheDao.createTable(db, ifNotExists); + } + + /** Drops underlying database table using DAOs. */ + public static void dropAllTables(SQLiteDatabase db, boolean ifExists) { + ConfigDao.dropTable(db, ifExists); + CacheDao.dropTable(db, ifExists); + } + + public static abstract class OpenHelper extends SQLiteOpenHelper { + + public OpenHelper(Context context, String name, CursorFactory factory) { + super(context, name, factory, SCHEMA_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); + createAllTables(db, false); + } + } + + /** WARNING: Drops all table on Upgrade! Use only during development. */ + public static class DevOpenHelper extends OpenHelper { + public DevOpenHelper(Context context, String name, CursorFactory factory) { + super(context, name, factory); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); +// dropAllTables(db, true); +// onCreate(db); + + + /* i represent the version where the user is now and the class named with this number implies that is upgrading from i to i++ schema */ + for (int i = oldVersion; i < newVersion; i++) { + try { + /* New instance of the class that migrates from i version to i++ version named DBMigratorHelper{version that the db has on this moment} */ + AbstractMigratorHelper migratorHelper = (AbstractMigratorHelper) Class.forName("com.commons.support.db.Migration.DBMigrationHelper" + i).newInstance(); + if (migratorHelper != null) { + System.out.println("greenDAO.11111111111111"); + /* Upgrade de db */ + migratorHelper.onUpgrade(db); + } + } catch (ClassNotFoundException | ClassCastException | IllegalAccessException | InstantiationException e) { + Log.e("greenDAO", "Could not migrate from schema from schema: " + i + " to " + i++); + /* If something fail prevent the DB to be updated to future version if the previous version has not been upgraded successfully */ + break; + } + } + + + } + } + + public DaoMaster(SQLiteDatabase db) { + super(db, SCHEMA_VERSION); + registerDaoClass(ConfigDao.class); + registerDaoClass(CacheDao.class); + } + + public DaoSession newSession() { + return new DaoSession(db, IdentityScopeType.Session, daoConfigMap); + } + + public DaoSession newSession(IdentityScopeType type) { + return new DaoSession(db, type, daoConfigMap); + } + +} diff --git a/app/src/main/java/cu/db/DaoSession.java b/app/src/main/java/cu/db/DaoSession.java new file mode 100644 index 0000000..242d0b5 --- /dev/null +++ b/app/src/main/java/cu/db/DaoSession.java @@ -0,0 +1,62 @@ +package cu.db; + +import android.database.sqlite.SQLiteDatabase; + +import java.util.Map; + +import cu.db.cache.Cache; +import cu.db.cache.CacheDao; +import cu.db.config.Config; +import cu.db.config.ConfigDao; +import de.greenrobot.dao.AbstractDao; +import de.greenrobot.dao.AbstractDaoSession; +import de.greenrobot.dao.identityscope.IdentityScopeType; +import de.greenrobot.dao.internal.DaoConfig; + + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * {@inheritDoc} + * + * @see AbstractDaoSession + */ +public class DaoSession extends AbstractDaoSession { + + private final DaoConfig configDaoConfig; + private final DaoConfig cacheDaoConfig; + + private final ConfigDao configDao; + private final CacheDao cacheDao; + + public DaoSession(SQLiteDatabase db, IdentityScopeType type, Map>, DaoConfig> + daoConfigMap) { + super(db); + + configDaoConfig = daoConfigMap.get(ConfigDao.class).clone(); + configDaoConfig.initIdentityScope(type); + + cacheDaoConfig = daoConfigMap.get(CacheDao.class).clone(); + cacheDaoConfig.initIdentityScope(type); + + configDao = new ConfigDao(configDaoConfig, this); + cacheDao = new CacheDao(cacheDaoConfig, this); + + registerDao(Config.class, configDao); + registerDao(Cache.class, cacheDao); + } + + public void clear() { + configDaoConfig.getIdentityScope().clear(); + cacheDaoConfig.getIdentityScope().clear(); + } + + public ConfigDao getConfigDao() { + return configDao; + } + + public CacheDao getCacheDao() { + return cacheDao; + } + +} diff --git a/app/src/main/java/cu/db/DaoUtil.java b/app/src/main/java/cu/db/DaoUtil.java new file mode 100644 index 0000000..02d40b9 --- /dev/null +++ b/app/src/main/java/cu/db/DaoUtil.java @@ -0,0 +1,47 @@ +package cu.db; + +import android.content.Context; + +import cu.db.cache.CacheDB; +import cu.db.config.ConfigUtil; + + +/** + * Created by qianjin on 2015/9/29. + */ +public class DaoUtil { + + + private static DaoMaster daoMaster; + private static DaoSession daoSession; + public static final String DB_NAME = "m_android_db"; + + /** + * 使用Db前需init + * @param context + */ + public static void init(Context context) { + daoSession = getDaoSession(context); + ConfigUtil.init(context); + CacheDB.init(context); + } + + private static DaoMaster getDaoMaster(Context context) { + if (daoMaster == null) { + DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null); + daoMaster = new DaoMaster(helper.getWritableDatabase()); + } + return daoMaster; + } + + public static DaoSession getDaoSession(Context context) { + if (daoSession == null) { + if (daoMaster == null) { + daoMaster = getDaoMaster(context); + } + daoSession = daoMaster.newSession(); + } + return daoSession; + } + +} diff --git a/app/src/main/java/cu/db/Migration/AbstractMigratorHelper.java b/app/src/main/java/cu/db/Migration/AbstractMigratorHelper.java new file mode 100644 index 0000000..15b1de6 --- /dev/null +++ b/app/src/main/java/cu/db/Migration/AbstractMigratorHelper.java @@ -0,0 +1,12 @@ +package cu.db.Migration; + +import android.database.sqlite.SQLiteDatabase; + +/** + * Created by User on 2015/9/30. + */ +public abstract class AbstractMigratorHelper { + + public abstract void onUpgrade(SQLiteDatabase db); + +} diff --git a/app/src/main/java/cu/db/Migration/DBMigrationHelper1.java b/app/src/main/java/cu/db/Migration/DBMigrationHelper1.java new file mode 100644 index 0000000..18ae6d0 --- /dev/null +++ b/app/src/main/java/cu/db/Migration/DBMigrationHelper1.java @@ -0,0 +1,34 @@ +package cu.db.Migration; + +import android.database.sqlite.SQLiteDatabase; + +/** + * Created by User on 2015/9/30. + */ +public class DBMigrationHelper1 extends AbstractMigratorHelper { + + @Override + public void onUpgrade(SQLiteDatabase db) { + + /* Create a temporal table where you will copy all the data from the previous table that you need to modify with a non supported sqlite operation */ + db.execSQL("CREATE TABLE \"CONFIG2\" (" + // + "\"_id\" INTEGER PRIMARY KEY ," + // 0: id + "\"KEY\" TEXT NOT NULL ," + // 1: key + "\"VALUE\" TEXT NOT NULL );"); // 2: value + + /* Copy the data from one table to the new one */ + db.execSQL("INSERT INTO CONFIG2 (_id, KEY, VALUE)" + + " SELECT _id, KEY, VALUE FROM CONFIG;"); + + /* Delete the previous table */ + db.execSQL("DROP TABLE CONFIG"); + /* Rename the just created table to the one that I have just deleted */ + db.execSQL("ALTER TABLE CONFIG2 RENAME TO CONFIG"); + + /* Add Index/es if you want them */ +// db.execSQL("CREATE INDEX " + "IDX_post_USER_ID ON CONFIG" + +// " (KEY);"); + //Example sql statement + db.execSQL("ALTER TABLE CONFIG ADD COLUMN COLUMNTEST TEXT"); + } +} diff --git a/app/src/main/java/cu/db/Migration/DBMigrationHelper2.java b/app/src/main/java/cu/db/Migration/DBMigrationHelper2.java new file mode 100644 index 0000000..748380b --- /dev/null +++ b/app/src/main/java/cu/db/Migration/DBMigrationHelper2.java @@ -0,0 +1,35 @@ +package cu.db.Migration; + +import android.database.sqlite.SQLiteDatabase; + +/** + * Created by User on 2015/9/30. + */ +public class DBMigrationHelper2 extends AbstractMigratorHelper { + + @Override + public void onUpgrade(SQLiteDatabase db) { + + /* Create a temporal table where you will copy all the data from the previous table that you need to modify with a non supported sqlite operation */ + db.execSQL("CREATE TABLE \"CONFIG2\" (" + // + "\"_id\" INTEGER PRIMARY KEY ," + // 0: id + "\"KEY\" TEXT NOT NULL ," + // 1: key + "\"VALUE\" TEXT NOT NULL ," + // 1: key + "\"COLUMNTEST\" TEXT );"); // 2: value + + /* Copy the data from one table to the new one */ + db.execSQL("INSERT INTO CONFIG2 (_id, KEY, VALUE)" + + " SELECT _id, KEY, VALUE FROM CONFIG;"); + + /* Delete the previous table */ + db.execSQL("DROP TABLE CONFIG"); + /* Rename the just created table to the one that I have just deleted */ + db.execSQL("ALTER TABLE CONFIG2 RENAME TO CONFIG"); + + /* Add Index/es if you want them */ +// db.execSQL("CREATE INDEX " + "IDX_post_USER_ID ON CONFIG" + +// " (KEY);"); + //Example sql statement + db.execSQL("ALTER TABLE CONFIG ADD COLUMN COLUMNTEST2 TEXT"); + } +} diff --git a/app/src/main/java/cu/db/MigrationHelper.java b/app/src/main/java/cu/db/MigrationHelper.java new file mode 100644 index 0000000..b0849d5 --- /dev/null +++ b/app/src/main/java/cu/db/MigrationHelper.java @@ -0,0 +1,157 @@ +package cu.db;//package com.commons.support.db; +// +//import android.database.Cursor; +//import android.database.sqlite.SQLiteDatabase; +//import android.text.TextUtils; +//import android.util.Log; +// +// +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.List; +// +//import de.greenrobot.dao.AbstractDao; +//import de.greenrobot.dao.internal.DaoConfig; +// +// +///** +// * Created by pokawa on 18/05/15. +// */ +//public class MigrationHelper { +// +// private static final String CONVERSION_CLASS_NOT_FOUND_EXCEPTION = "MIGRATION HELPER - CLASS DOESN'T MATCH WITH THE CURRENT PARAMETERS"; +// private static MigrationHelper instance; +// +// public static MigrationHelper getInstance() { +// if(instance == null) { +// instance = new MigrationHelper(); +// } +// return instance; +// } +// +// public void migrate(SQLiteDatabase db, Class>... daoClasses) { +// generateTempTables(db, daoClasses); +// DaoMaster.dropAllTables(db, true); +// DaoMaster.createAllTables(db, false); +// restoreData(db, daoClasses); +// } +// +// private void generateTempTables(SQLiteDatabase db, Class>... daoClasses) { +// for(int i = 0; i < daoClasses.length; i++) { +// DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]); +// +// String divider = ""; +// String tableName = daoConfig.tablename; +// String tempTableName = daoConfig.tablename.concat("_TEMP"); +// ArrayList properties = new ArrayList<>(); +// +// StringBuilder createTableStringBuilder = new StringBuilder(); +// +// createTableStringBuilder.append("CREATE TABLE ").append(tempTableName).append(" ("); +// +// for(int j = 0; j < daoConfig.properties.length; j++) { +// String columnName = daoConfig.properties[j].columnName; +// +// if(getColumns(db, tableName).contains(columnName)) { +// properties.add(columnName); +// +// String type = null; +// +// try { +// type = getTypeByClass(daoConfig.properties[j].type); +// } catch (Exception exception) { +// //Crashlytics.logException(exception); +// exception.printStackTrace(); +// } +// +// createTableStringBuilder.append(divider).append(columnName).append(" ").append(type); +// +// if(daoConfig.properties[j].primaryKey) { +// createTableStringBuilder.append(" PRIMARY KEY"); +// } +// +// divider = ","; +// } +// } +// createTableStringBuilder.append(");"); +// +// db.execSQL(createTableStringBuilder.toString()); +// +// StringBuilder insertTableStringBuilder = new StringBuilder(); +// +// insertTableStringBuilder.append("INSERT INTO ").append(tempTableName).append(" ("); +// insertTableStringBuilder.append(TextUtils.join(",", properties)); +// insertTableStringBuilder.append(") SELECT "); +// insertTableStringBuilder.append(TextUtils.join(",", properties)); +// insertTableStringBuilder.append(" FROM ").append(tableName).append(";"); +// +// db.execSQL(insertTableStringBuilder.toString()); +// } +// } +// +// private void restoreData(SQLiteDatabase db, Class>... daoClasses) { +// for(int i = 0; i < daoClasses.length; i++) { +// DaoConfig daoConfig = new DaoConfig(db, daoClasses[i]); +// +// String tableName = daoConfig.tablename; +// String tempTableName = daoConfig.tablename.concat("_TEMP"); +// ArrayList properties = new ArrayList(); +// +// for (int j = 0; j < daoConfig.properties.length; j++) { +// String columnName = daoConfig.properties[j].columnName; +// +// if(getColumns(db, tempTableName).contains(columnName)) { +// properties.add(columnName); +// } +// } +// +// StringBuilder insertTableStringBuilder = new StringBuilder(); +// +// insertTableStringBuilder.append("INSERT INTO ").append(tableName).append(" ("); +// insertTableStringBuilder.append(TextUtils.join(",", properties)); +// insertTableStringBuilder.append(") SELECT "); +// insertTableStringBuilder.append(TextUtils.join(",", properties)); +// insertTableStringBuilder.append(" FROM ").append(tempTableName).append(";"); +// +// StringBuilder dropTableStringBuilder = new StringBuilder(); +// +// dropTableStringBuilder.append("DROP TABLE ").append(tempTableName); +// +// db.execSQL(insertTableStringBuilder.toString()); +// db.execSQL(dropTableStringBuilder.toString()); +// } +// } +// +// private String getTypeByClass(Class type) throws Exception { +// if(type.equals(String.class)) { +// return "TEXT"; +// } +// if(type.equals(Long.class) || type.equals(Integer.class) || type.equals(long.class)) { +// return "INTEGER"; +// } +// if(type.equals(Boolean.class)) { +// return "BOOLEAN"; +// } +// +// Exception exception = new Exception(CONVERSION_CLASS_NOT_FOUND_EXCEPTION.concat(" - Class: ").concat(type.toString())); +// throw exception; +// } +// +// private static List getColumns(SQLiteDatabase db, String tableName) { +// List columns = new ArrayList<>(); +// Cursor cursor = null; +// try { +// cursor = db.rawQuery("SELECT * FROM " + tableName + " limit 1", null); +// if (cursor != null) { +// columns = new ArrayList<>(Arrays.asList(cursor.getColumnNames())); +// } +// } catch (Exception e) { +// Log.v(tableName, e.getMessage(), e); +// e.printStackTrace(); +// } finally { +// if (cursor != null) +// cursor.close(); +// } +// return columns; +// } +//} \ No newline at end of file diff --git a/app/src/main/java/cu/db/cache/Cache.java b/app/src/main/java/cu/db/cache/Cache.java new file mode 100644 index 0000000..63abc06 --- /dev/null +++ b/app/src/main/java/cu/db/cache/Cache.java @@ -0,0 +1,113 @@ +package cu.db.cache; + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. + +/** + * Entity mapped to table "CACHE". + */ +public class Cache { + + private Long id; + /** + * Not-null value. + */ + private String key; + /** + * Not-null value. + */ + private String value; + private Long timeout; + private Long currentTime; + + public Cache() { + } + + public Cache(Long id) { + this.id = id; + } + + public Cache(Long id, String key, String value, Long timeout, Long currentTime) { + this.id = id; + this.key = key; + this.value = value; + this.timeout = timeout; + this.currentTime = currentTime; + } + + public Cache(String key, String value) { + this.key = key; + this.value = value; + this.currentTime = System.currentTimeMillis(); + } + + public Cache(String key, String value, long timeout) { + this.key = key; + this.value = value; + this.timeout = timeout; + this.currentTime = System.currentTimeMillis(); + } + + public boolean isTimeout(){ + if (timeout == 0) { + return false; + } + if (System.currentTimeMillis() - currentTime < timeout) { + return false; + } + return true; + } + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + /** + * Not-null value. + */ + public String getKey() { + return key; + } + + /** + * Not-null value; ensure this value is available before it is saved to the database. + */ + public void setKey(String key) { + this.key = key; + } + + /** + * Not-null value. + */ + public String getValue() { + return value; + } + + /** + * Not-null value; ensure this value is available before it is saved to the database. + */ + public void setValue(String value) { + this.value = value; + } + + public Long getTimeout() { + return timeout; + } + + public void setTimeout(Long timeout) { + this.timeout = timeout; + } + + public Long getCurrentTime() { + return currentTime; + } + + public void setCurrentTime(Long currentTime) { + this.currentTime = currentTime; + } + +} diff --git a/app/src/main/java/cu/db/cache/CacheDB.java b/app/src/main/java/cu/db/cache/CacheDB.java new file mode 100644 index 0000000..67a6840 --- /dev/null +++ b/app/src/main/java/cu/db/cache/CacheDB.java @@ -0,0 +1,103 @@ +package cu.db.cache; + +import android.content.Context; +import android.text.TextUtils; + +import cu.db.DaoUtil; +import de.greenrobot.dao.query.DeleteQuery; +import de.greenrobot.dao.query.QueryBuilder; + +/** + * Created by qianjin on 2015/9/29. + */ +public class CacheDB { + + private static CacheDao cacheDao; + + public static final long CACHE_DAY = 3600 * 1000 * 24; + public static final long CACHE_HOUR = 3600 * 1000; + public static final long CACHE_MIN = 60 * 1000; + + + public static void init(Context context) { + cacheDao = DaoUtil.getDaoSession(context).getCacheDao(); + } + + + + + + + public static void save(Cache cache) { + Cache savedCache = getCache(cache.getKey()); + if (savedCache == null) { + cacheDao.insertOrReplace(cache); + } else { + savedCache.setValue(cache.getValue()); + savedCache.setCurrentTime(System.currentTimeMillis()); + savedCache.setTimeout(cache.getTimeout()); + cacheDao.insertOrReplace(savedCache); + } + } + + public static Cache getCache(String key) { + QueryBuilder qb = cacheDao.queryBuilder(); + qb.where(CacheDao.Properties.Key.eq(key)); + Cache cache = (Cache) qb.unique(); + if (cache == null) { + cache = new Cache(key, ""); + } else { + //timeout + if (cache.isTimeout()) { + delete(key); + cache = new Cache(key, ""); + } + } + return cache; + } + + public static String getCacheValue(String key) { + if (TextUtils.isEmpty(key)) { + return ""; + } + QueryBuilder qb = cacheDao.queryBuilder(); + qb.where(CacheDao.Properties.Key.eq(key)); + Cache cache = (Cache) qb.unique(); + if (cache == null) { + return ""; + } else { + if (cache.isTimeout()) { + delete(key); + return ""; + } + } + return cache.getValue(); + } + + + public static void deleteAll() { + cacheDao.deleteAll(); + } + + public static void delete(String key) { + QueryBuilder qb = cacheDao.queryBuilder(); + DeleteQuery bd = qb.where(CacheDao.Properties.Key.eq(key)).buildDelete(); + bd.executeDeleteWithoutDetachingEntities(); + //or + //Config config = getConfig(key); + //configDao.delete(config); + } + + public static boolean exist(String key) { + QueryBuilder qb = cacheDao.queryBuilder(); + qb.where(CacheDao.Properties.Key.eq(key)); + long cnt = qb.count(); + return cnt > 0 ? true : false; + } + + private static long currentTime() { + return System.currentTimeMillis(); + } + + +} diff --git a/app/src/main/java/cu/db/cache/CacheDao.java b/app/src/main/java/cu/db/cache/CacheDao.java new file mode 100644 index 0000000..0f8054b --- /dev/null +++ b/app/src/main/java/cu/db/cache/CacheDao.java @@ -0,0 +1,134 @@ +package cu.db.cache; + +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteStatement; + +import cu.db.DaoSession; +import de.greenrobot.dao.AbstractDao; +import de.greenrobot.dao.Property; +import de.greenrobot.dao.internal.DaoConfig; + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * DAO for table "CACHE". +*/ +public class CacheDao extends AbstractDao { + + public static final String TABLENAME = "CACHE"; + + /** + * Properties of entity Cache.
+ * Can be used for QueryBuilder and for referencing column names. + */ + public static class Properties { + public final static Property Id = new Property(0, Long.class, "id", true, "_id"); + public final static Property Key = new Property(1, String.class, "key", false, "KEY"); + public final static Property Value = new Property(2, String.class, "value", false, "VALUE"); + public final static Property Timeout = new Property(3, Long.class, "timeout", false, "TIMEOUT"); + public final static Property CurrentTime = new Property(4, Long.class, "currentTime", false, "CURRENT_TIME"); + }; + + + public CacheDao(DaoConfig config) { + super(config); + } + + public CacheDao(DaoConfig config, DaoSession daoSession) { + super(config, daoSession); + } + + /** Creates the underlying database table. */ + public static void createTable(SQLiteDatabase db, boolean ifNotExists) { + String constraint = ifNotExists? "IF NOT EXISTS ": ""; + db.execSQL("CREATE TABLE " + constraint + "\"CACHE\" (" + // + "\"_id\" INTEGER PRIMARY KEY ," + // 0: id + "\"KEY\" TEXT NOT NULL ," + // 1: key + "\"VALUE\" TEXT NOT NULL ," + // 2: value + "\"TIMEOUT\" INTEGER," + // 3: timeout + "\"CURRENT_TIME\" INTEGER);"); // 4: currentTime + } + + /** Drops the underlying database table. */ + public static void dropTable(SQLiteDatabase db, boolean ifExists) { + String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"CACHE\""; + db.execSQL(sql); + } + + /** @inheritdoc */ + @Override + protected void bindValues(SQLiteStatement stmt, Cache entity) { + stmt.clearBindings(); + + Long id = entity.getId(); + if (id != null) { + stmt.bindLong(1, id); + } + stmt.bindString(2, entity.getKey()); + stmt.bindString(3, entity.getValue()); + + Long timeout = entity.getTimeout(); + if (timeout != null) { + stmt.bindLong(4, timeout); + } + + Long currentTime = entity.getCurrentTime(); + if (currentTime != null) { + stmt.bindLong(5, currentTime); + } + } + + /** @inheritdoc */ + @Override + public Long readKey(Cursor cursor, int offset) { + return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); + } + + /** @inheritdoc */ + @Override + public Cache readEntity(Cursor cursor, int offset) { + Cache entity = new Cache( // + cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id + cursor.getString(offset + 1), // key + cursor.getString(offset + 2), // value + cursor.isNull(offset + 3) ? null : cursor.getLong(offset + 3), // timeout + cursor.isNull(offset + 4) ? null : cursor.getLong(offset + 4) // currentTime + ); + return entity; + } + + /** @inheritdoc */ + @Override + public void readEntity(Cursor cursor, Cache entity, int offset) { + entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); + entity.setKey(cursor.getString(offset + 1)); + entity.setValue(cursor.getString(offset + 2)); + entity.setTimeout(cursor.isNull(offset + 3) ? null : cursor.getLong(offset + 3)); + entity.setCurrentTime(cursor.isNull(offset + 4) ? null : cursor.getLong(offset + 4)); + } + + /** @inheritdoc */ + @Override + protected Long updateKeyAfterInsert(Cache entity, long rowId) { + entity.setId(rowId); + return rowId; + } + + /** @inheritdoc */ + @Override + public Long getKey(Cache entity) { + if(entity != null) { + return entity.getId(); + } else { + return null; + } + } + + /** @inheritdoc */ + @Override + protected boolean isEntityUpdateable() { + return true; + } + +} diff --git a/app/src/main/java/cu/db/config/Config.java b/app/src/main/java/cu/db/config/Config.java new file mode 100644 index 0000000..8b2477c --- /dev/null +++ b/app/src/main/java/cu/db/config/Config.java @@ -0,0 +1,61 @@ +package cu.db.config; + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. +/** + * Entity mapped to table "CONFIG". + */ +public class Config { + + private Long id; + /** Not-null value. */ + private String key; + /** Not-null value. */ + private String value; + + public Config() { + } + + public Config(Long id) { + this.id = id; + } + + public Config(Long id, String key, String value) { + this.id = id; + this.key = key; + this.value = value; + } + + public Config(String key, String value) { + this.key = key; + this.value = value; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + /** Not-null value. */ + public String getKey() { + return key; + } + + /** Not-null value; ensure this value is available before it is saved to the database. */ + public void setKey(String key) { + this.key = key; + } + + /** Not-null value. */ + public String getValue() { + return value; + } + + /** Not-null value; ensure this value is available before it is saved to the database. */ + public void setValue(String value) { + this.value = value; + } + +} diff --git a/app/src/main/java/cu/db/config/ConfigDao.java b/app/src/main/java/cu/db/config/ConfigDao.java new file mode 100644 index 0000000..aa39a37 --- /dev/null +++ b/app/src/main/java/cu/db/config/ConfigDao.java @@ -0,0 +1,117 @@ +package cu.db.config; + +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteStatement; + +import cu.db.DaoSession; +import de.greenrobot.dao.AbstractDao; +import de.greenrobot.dao.Property; +import de.greenrobot.dao.internal.DaoConfig; + +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. + +/** + * DAO for table "CONFIG". +*/ +public class ConfigDao extends AbstractDao { + + public static final String TABLENAME = "CONFIG"; + + /** + * Properties of entity Config.
+ * Can be used for QueryBuilder and for referencing column names. + */ + public static class Properties { + public final static Property Id = new Property(0, Long.class, "id", true, "_id"); + public final static Property Key = new Property(1, String.class, "key", false, "KEY"); + public final static Property Value = new Property(2, String.class, "value", false, "VALUE"); + }; + + + public ConfigDao(DaoConfig config) { + super(config); + } + + public ConfigDao(DaoConfig config, DaoSession daoSession) { + super(config, daoSession); + } + + /** Creates the underlying database table. */ + public static void createTable(SQLiteDatabase db, boolean ifNotExists) { + String constraint = ifNotExists? "IF NOT EXISTS ": ""; + db.execSQL("CREATE TABLE " + constraint + "\"CONFIG\" (" + // + "\"_id\" INTEGER PRIMARY KEY ," + // 0: id + "\"KEY\" TEXT NOT NULL ," + // 1: key + "\"VALUE\" TEXT NOT NULL );"); // 2: value + } + + /** Drops the underlying database table. */ + public static void dropTable(SQLiteDatabase db, boolean ifExists) { + String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"CONFIG\""; + db.execSQL(sql); + } + + /** @inheritdoc */ + @Override + protected void bindValues(SQLiteStatement stmt, Config entity) { + stmt.clearBindings(); + + Long id = entity.getId(); + if (id != null) { + stmt.bindLong(1, id); + } + stmt.bindString(2, entity.getKey()); + stmt.bindString(3, entity.getValue()); + + } + + /** @inheritdoc */ + @Override + public Long readKey(Cursor cursor, int offset) { + return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); + } + + /** @inheritdoc */ + @Override + public Config readEntity(Cursor cursor, int offset) { + Config entity = new Config( // + cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id + cursor.getString(offset + 1), // key + cursor.getString(offset + 2) // value + ); + return entity; + } + + /** @inheritdoc */ + @Override + public void readEntity(Cursor cursor, Config entity, int offset) { + entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); + entity.setKey(cursor.getString(offset + 1)); + entity.setValue(cursor.getString(offset + 2)); + } + + /** @inheritdoc */ + @Override + protected Long updateKeyAfterInsert(Config entity, long rowId) { + entity.setId(rowId); + return rowId; + } + + /** @inheritdoc */ + @Override + public Long getKey(Config entity) { + if(entity != null) { + return entity.getId(); + } else { + return null; + } + } + + /** @inheritdoc */ + @Override + protected boolean isEntityUpdateable() { + return true; + } + +} diff --git a/app/src/main/java/cu/db/config/ConfigUtil.java b/app/src/main/java/cu/db/config/ConfigUtil.java new file mode 100644 index 0000000..fb60c3c --- /dev/null +++ b/app/src/main/java/cu/db/config/ConfigUtil.java @@ -0,0 +1,124 @@ +package cu.db.config; + +import android.content.Context; +import android.support.annotation.Nullable; +import android.text.TextUtils; + +import com.alibaba.fastjson.JSON; + +import cu.db.DaoUtil; +import de.greenrobot.dao.query.DeleteQuery; +import de.greenrobot.dao.query.QueryBuilder; + +/** + * Created by qianjin on 2015/9/7. + */ +public class ConfigUtil { + + private static ConfigDao configDao; + + /** + * 使用ConfigUtil前需init + * + * @param context + */ + public static void init(Context context) { + configDao = DaoUtil.getDaoSession(context).getConfigDao(); + } + + + public static void save(Config config) { + Config savedConfig = getConfig(config.getKey()); + if (savedConfig == null) { // 不会出现为空的情况 + configDao.insertOrReplace(config); + } else { + savedConfig.setValue(config.getValue()); + configDao.insertOrReplace(savedConfig); + } + } + + public static void save(String key, String value) { + Config config = new Config(key, value); + save(config); + } + + public static void save(String key, int value) { + save(key, String.valueOf(value)); + } + + public static void save(String key, boolean value) { + save(key, String.valueOf(value)); + } + + public static Config getConfig(String key) { + QueryBuilder qb = configDao.queryBuilder(); + qb.where(ConfigDao.Properties.Key.eq(key)); + Config config = (Config) qb.unique(); + if (config == null) { + config = new Config(key, "no data"); + } + return config; + } + + public static String getConfigValue(String key) { + QueryBuilder qb = configDao.queryBuilder(); + qb.where(ConfigDao.Properties.Key.eq(key)); + Config config = (Config) qb.unique(); + if (config == null) { + return ""; + } + return config.getValue(); + } + + + public static int getIntConfigValue(String key) { + String value = getConfigValue(key); + if (!TextUtils.isEmpty(value)) { + return Integer.valueOf(value); + } + return 0; + } + + public static boolean getBooleanConfigValue(String key) { + String value = getConfigValue(key); + if (!TextUtils.isEmpty(value)) { + return Boolean.valueOf(value); + } + return false; + } + + public static void deleteAll() { + configDao.deleteAll(); + } + + public static void delete(String key) { + QueryBuilder qb = configDao.queryBuilder(); + DeleteQuery bd = qb.where(ConfigDao.Properties.Key.eq(key)).buildDelete(); + bd.executeDeleteWithoutDetachingEntities(); + //or + //Config config = getConfig(key); + //configDao.delete(config); + } + + public static boolean exist(String key) { + QueryBuilder qb = configDao.queryBuilder(); + qb.where(ConfigDao.Properties.Key.eq(key)); + long cnt = qb.count(); + return cnt > 0 ? true : false; + } + + public static void savaObjConfigData(String key, Object obj) { + ConfigUtil.save(key, JSON.toJSONString(obj)); + } + + public static @Nullable + T getObjConfigData(String key, Class clazz) { + String value = ConfigUtil.getConfigValue(key); + if (!TextUtils.isEmpty(value)) { + return JSON.parseObject(value, clazz); + } + return null; + } + + +} diff --git a/xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/ArrowRefreshHeaderOriginal.java b/xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/ArrowRefreshHeaderOriginal.java new file mode 100755 index 0000000..23aa83a --- /dev/null +++ b/xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/ArrowRefreshHeaderOriginal.java @@ -0,0 +1,269 @@ +package com.jcodecraeer.xrecyclerview; + +import android.animation.ValueAnimator; +import android.content.Context; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.jcodecraeer.xrecyclerview.progressindicator.AVLoadingIndicatorView; + +import java.util.Date; + +public class ArrowRefreshHeaderOriginal extends LinearLayout implements BaseRefreshHeader{ + private LinearLayout mContainer; + private ImageView mArrowImageView; + private SimpleViewSwithcer mProgressBar; + private TextView mStatusTextView; + private int mState = STATE_NORMAL; + private Context mContext; + + private TextView mHeaderTimeView; + + private Animation mRotateUpAnim; + private Animation mRotateDownAnim; + + private final int ROTATE_ANIM_DURATION = 180; + + public int mMeasuredHeight; + + public ArrowRefreshHeaderOriginal(Context context) { + super(context); + initView(context); + } + + /** + * @param context + * @param attrs + */ + public ArrowRefreshHeaderOriginal(Context context, AttributeSet attrs) { + super(context, attrs); + initView(context); + } + + private void initView(Context context) { + + mContext = context; + // 初始情况,设置下拉刷新view高度为0 + mContainer = (LinearLayout) LayoutInflater.from(context).inflate( + R.layout.listview_header, null); + LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + lp.setMargins(0, 0, 0, 0); + this.setLayoutParams(lp); + this.setPadding(0, 0, 0, 0); + + addView(mContainer, new LayoutParams(LayoutParams.MATCH_PARENT, 0)); + setGravity(Gravity.BOTTOM); + + mArrowImageView = (ImageView)findViewById(R.id.listview_header_arrow); + mStatusTextView = (TextView)findViewById(R.id.refresh_status_textview); + + //init the progress view + mProgressBar = (SimpleViewSwithcer)findViewById(R.id.listview_header_progressbar); + AVLoadingIndicatorView progressView = new AVLoadingIndicatorView(context); + progressView.setIndicatorColor(0xffB5B5B5); + progressView.setIndicatorId(ProgressStyle.BallSpinFadeLoader); + mProgressBar.setView(progressView); + + + mRotateUpAnim = new RotateAnimation(0.0f, -180.0f, + Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + mRotateUpAnim.setDuration(ROTATE_ANIM_DURATION); + mRotateUpAnim.setFillAfter(true); + mRotateDownAnim = new RotateAnimation(-180.0f, 0.0f, + Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + mRotateDownAnim.setDuration(ROTATE_ANIM_DURATION); + mRotateDownAnim.setFillAfter(true); + + mHeaderTimeView = (TextView)findViewById(R.id.last_refresh_time); + measure(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); + mMeasuredHeight = getMeasuredHeight(); + } + + public void setProgressStyle(int style) { + if(style == ProgressStyle.SysProgress){ + mProgressBar.setView(new ProgressBar(mContext, null, android.R.attr.progressBarStyle)); + }else{ + AVLoadingIndicatorView progressView = new AVLoadingIndicatorView(this.getContext()); + progressView.setIndicatorColor(0xffB5B5B5); + progressView.setIndicatorId(style); + mProgressBar.setView(progressView); + } + } + + public void setArrowImageView(int resid){ + mArrowImageView.setImageResource(resid); + } + + public void setState(int state) { + if (state == mState) return ; + + if (state == STATE_REFRESHING) { // 显示进度 + mArrowImageView.clearAnimation(); + mArrowImageView.setVisibility(View.INVISIBLE); + mProgressBar.setVisibility(View.VISIBLE); + } else if(state == STATE_DONE) { + mArrowImageView.setVisibility(View.INVISIBLE); + mProgressBar.setVisibility(View.INVISIBLE); + } else { // 显示箭头图片 + mArrowImageView.setVisibility(View.VISIBLE); + mProgressBar.setVisibility(View.INVISIBLE); + } + + switch(state){ + case STATE_NORMAL: + if (mState == STATE_RELEASE_TO_REFRESH) { + mArrowImageView.startAnimation(mRotateDownAnim); + } + if (mState == STATE_REFRESHING) { + mArrowImageView.clearAnimation(); + } + mStatusTextView.setText(R.string.listview_header_hint_normal); + break; + case STATE_RELEASE_TO_REFRESH: + if (mState != STATE_RELEASE_TO_REFRESH) { + mArrowImageView.clearAnimation(); + mArrowImageView.startAnimation(mRotateUpAnim); + mStatusTextView.setText(R.string.listview_header_hint_release); + } + break; + case STATE_REFRESHING: + mStatusTextView.setText(R.string.refreshing); + break; + case STATE_DONE: + mStatusTextView.setText(R.string.refresh_done); + break; + default: + } + + mState = state; + } + + public int getState() { + return mState; + } + + @Override + public void refreshComplate(){ + mHeaderTimeView.setText(friendlyTime(new Date())); + setState(STATE_DONE); + new Handler().postDelayed(new Runnable(){ + public void run() { + reset(); + } + }, 500); + } + + public void setVisiableHeight(int height) { + if (height < 0) + height = 0; + LayoutParams lp = (LayoutParams) mContainer + .getLayoutParams(); + lp.height = height; + mContainer.setLayoutParams(lp); + } + + public int getVisiableHeight() { + int height = 0; + LayoutParams lp = (LayoutParams) mContainer + .getLayoutParams(); + height = lp.height; + return height; + } + + @Override + public void onMove(float delta) { + if(getVisiableHeight() > 0 || delta > 0) { + setVisiableHeight((int) delta + getVisiableHeight()); + if (mState <= STATE_RELEASE_TO_REFRESH) { // 未处于刷新状态,更新箭头 + if (getVisiableHeight() > mMeasuredHeight) { + setState(STATE_RELEASE_TO_REFRESH); + }else { + setState(STATE_NORMAL); + } + } + } + } + + @Override + public boolean releaseAction() { + boolean isOnRefresh = false; + int height = getVisiableHeight(); + if (height == 0) // not visible. + isOnRefresh = false; + + if(getVisiableHeight() > mMeasuredHeight && mState < STATE_REFRESHING){ + setState(STATE_REFRESHING); + isOnRefresh = true; + } + // refreshing and header isn't shown fully. do nothing. + if (mState == STATE_REFRESHING && height <= mMeasuredHeight) { + //return; + } + int destHeight = 0; // default: scroll back to dismiss header. + // is refreshing, just scroll back to show all the header. + if (mState == STATE_REFRESHING) { + destHeight = mMeasuredHeight; + } + smoothScrollTo(destHeight); + + return isOnRefresh; + } + + public void reset() { + smoothScrollTo(0); + setState(STATE_NORMAL); + } + + private void smoothScrollTo(int destHeight) { + ValueAnimator animator = ValueAnimator.ofInt(getVisiableHeight(), destHeight); + animator.setDuration(300).start(); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) + { + setVisiableHeight((int) animation.getAnimatedValue()); + } + }); + animator.start(); + } + + public static String friendlyTime(Date time) { + //获取time距离当前的秒数 + int ct = (int)((System.currentTimeMillis() - time.getTime())/1000); + + if(ct == 0) { + return "刚刚"; + } + + if(ct > 0 && ct < 60) { + return ct + "秒前"; + } + + if(ct >= 60 && ct < 3600) { + return Math.max(ct / 60,1) + "分钟前"; + } + if(ct >= 3600 && ct < 86400) + return ct / 3600 + "小时前"; + if(ct >= 86400 && ct < 2592000){ //86400 * 30 + int day = ct / 86400 ; + return day + "天前"; + } + if(ct >= 2592000 && ct < 31104000) { //86400 * 30 + return ct / 2592000 + "月前"; + } + return ct / 31104000 + "年前"; + } + +} diff --git a/xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/XRecyclerViewOriginal.java b/xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/XRecyclerViewOriginal.java new file mode 100755 index 0000000..5e7a36d --- /dev/null +++ b/xrecyclerview/src/main/java/com/jcodecraeer/xrecyclerview/XRecyclerViewOriginal.java @@ -0,0 +1,462 @@ +package com.jcodecraeer.xrecyclerview; + +import android.content.Context; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.StaggeredGridLayoutManager; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; + +import java.util.ArrayList; + +public class XRecyclerViewOriginal extends RecyclerView { + + private Context mContext; + private boolean isLoadingData = false; + private boolean isnomore = false; + private int mRefreshProgressStyle = ProgressStyle.SysProgress; + private int mLoadingMoreProgressStyle = ProgressStyle.SysProgress; + private ArrayList mHeaderViews = new ArrayList<>(); + private ArrayList mFootViews = new ArrayList<>(); + private Adapter mAdapter; + private Adapter mWrapAdapter; + private float mLastY = -1; + private static final float DRAG_RATE = 3; + private LoadingListener mLoadingListener; + private ArrowRefreshHeader mRefreshHeader; + private boolean pullRefreshEnabled = true; + private boolean loadingMoreEnabled = true; + private static final int TYPE_REFRESH_HEADER = -5; + private static final int TYPE_HEADER = -4; + private static final int TYPE_NORMAL = 0; + private static final int TYPE_FOOTER = -3; + private int previousTotal = 0; + private int mPageCount = 0; + + public XRecyclerViewOriginal(Context context) { + this(context, null); + } + + public XRecyclerViewOriginal(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public XRecyclerViewOriginal(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context); + } + + private void init(Context context) { + mContext = context; + if(pullRefreshEnabled) { + ArrowRefreshHeader refreshHeader = new ArrowRefreshHeader(mContext); + mHeaderViews.add(0, refreshHeader); + mRefreshHeader = refreshHeader; + mRefreshHeader.setProgressStyle(mRefreshProgressStyle); + } + LoadingMoreFooter footView = new LoadingMoreFooter(mContext); + footView.setProgressStyle(mLoadingMoreProgressStyle); + addFootView(footView); + mFootViews.get(0).setVisibility(GONE); + } + + public void addHeaderView(View view) { + if (pullRefreshEnabled && !(mHeaderViews.get(0) instanceof ArrowRefreshHeader)) { + ArrowRefreshHeader refreshHeader = new ArrowRefreshHeader(mContext); + mHeaderViews.add(0, refreshHeader); + mRefreshHeader = refreshHeader; + mRefreshHeader.setProgressStyle(mRefreshProgressStyle); + } + mHeaderViews.add(view); + } + + public void addFootView(final View view) { + mFootViews.clear(); + mFootViews.add(view); + } + + public void loadMoreComplete() { + isLoadingData = false; + View footView = mFootViews.get(0); + if(previousTotal < getLayoutManager().getItemCount()) { + if(footView instanceof LoadingMoreFooter) { + ( (LoadingMoreFooter) footView ).setState(LoadingMoreFooter.STATE_COMPLETE); + } else{ + footView.setVisibility(View.GONE); + } + } else { + if(footView instanceof LoadingMoreFooter) { + ( (LoadingMoreFooter) footView ).setState(LoadingMoreFooter.STATE_NOMORE); + }else{ + footView.setVisibility(View.GONE); + } + isnomore = true; + } + previousTotal = getLayoutManager().getItemCount(); + } + + public void noMoreLoading() { + isLoadingData = false; + View footView = mFootViews.get(0); + isnomore = true; + if(footView instanceof LoadingMoreFooter) { + ( (LoadingMoreFooter) footView ).setState(LoadingMoreFooter.STATE_NOMORE); + }else{ + footView.setVisibility(View.GONE); + } + } + + public void refreshComplete() { + mRefreshHeader.refreshComplate(); + } + + public void setRefreshHeader(ArrowRefreshHeader refreshHeader){ + mRefreshHeader = refreshHeader; + } + + public void setPullRefreshEnabled(boolean enabled){ + pullRefreshEnabled = enabled; + } + + public void setLoadingMoreEnabled(boolean enabled){ + loadingMoreEnabled = enabled; + if(!enabled) { + if (mFootViews.size() > 0) { + mFootViews.get(0).setVisibility(GONE); + } + } + } + + public void setRefreshProgressStyle(int style) { + mRefreshProgressStyle = style; + if (mRefreshHeader != null){ + mRefreshHeader.setProgressStyle(style); + } + } + + public void setLaodingMoreProgressStyle(int style) { + mLoadingMoreProgressStyle = style; + if(mFootViews.size() > 0 && mFootViews.get(0) instanceof LoadingMoreFooter){ + ((LoadingMoreFooter) mFootViews.get(0)).setProgressStyle(style); + } + } + + public void setArrowImageView(int resid) { + if (mRefreshHeader != null){ + mRefreshHeader.setArrowImageView(resid); + } + } + + @Override + public void setAdapter(Adapter adapter) { + mAdapter = adapter; + mWrapAdapter = new WrapAdapter(mHeaderViews, mFootViews, adapter); + super.setAdapter(mWrapAdapter); + mAdapter.registerAdapterDataObserver(mDataObserver); + } + + @Override + public void onScrollStateChanged(int state) { + super.onScrollStateChanged(state); + + if (state == RecyclerView.SCROLL_STATE_IDLE && mLoadingListener != null && !isLoadingData && loadingMoreEnabled) { + LayoutManager layoutManager = getLayoutManager(); + int lastVisibleItemPosition; + if (layoutManager instanceof GridLayoutManager) { + lastVisibleItemPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition(); + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + int[] into = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()]; + ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(into); + lastVisibleItemPosition = findMax(into); + } else { + lastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); + } + if (layoutManager.getChildCount() > 0 + && lastVisibleItemPosition >= layoutManager.getItemCount() - 1 && layoutManager.getItemCount() > layoutManager.getChildCount() && !isnomore && mRefreshHeader.getState() < ArrowRefreshHeader.STATE_REFRESHING) { + + View footView = mFootViews.get(0); + isLoadingData = true; + if(footView instanceof LoadingMoreFooter) { + ( (LoadingMoreFooter) footView ).setState(LoadingMoreFooter.STATE_LAODING); + } else{ + footView.setVisibility(View.VISIBLE); + } + mLoadingListener.onLoadMore(); + } + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (mLastY == -1) { + mLastY = ev.getRawY(); + } + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + mLastY = ev.getRawY(); + break; + case MotionEvent.ACTION_MOVE: + final float deltaY = ev.getRawY() - mLastY; + mLastY = ev.getRawY(); + if ( isOnTop() && pullRefreshEnabled) { + mRefreshHeader.onMove(deltaY / DRAG_RATE); + if(mRefreshHeader.getVisiableHeight() > 0 && mRefreshHeader.getState() < ArrowRefreshHeader.STATE_REFRESHING ) { + Log.i("getVisiableHeight", "getVisiableHeight = " + mRefreshHeader.getVisiableHeight()); + Log.i("getVisiableHeight", " mRefreshHeader.getState() = " + mRefreshHeader.getState()); + return false; + } + } + break; + default: + mLastY = -1; // reset + if ( isOnTop() && pullRefreshEnabled) { + if( mRefreshHeader.releaseAction()) { + if (mLoadingListener != null) { + mLoadingListener.onRefresh(); + isnomore = false; + previousTotal = 0; + } + } + } + break; + } + return super.onTouchEvent(ev); + } + + private int findMax(int[] lastPositions) { + int max = lastPositions[0]; + for (int value : lastPositions) { + if (value > max) { + max = value; + } + } + return max; + } + + private int findMin(int[] firstPositions) { + int min = firstPositions[0]; + for (int value : firstPositions) { + if (value < min) { + min = value; + } + } + return min; + } + + private boolean isOnTop() { + if (mHeaderViews == null || mHeaderViews.isEmpty()) { + return false; + } + + View view = mHeaderViews.get(0); + if (view.getParent() != null) { + return true; + } else { + return false; + } +// LayoutManager layoutManager = getLayoutManager(); +// int firstVisibleItemPosition; +// if (layoutManager instanceof GridLayoutManager) { +// firstVisibleItemPosition = ((GridLayoutManager) layoutManager).findFirstVisibleItemPosition(); +// } else if ( layoutManager instanceof StaggeredGridLayoutManager ) { +// int[] into = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()]; +// ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(into); +// firstVisibleItemPosition = findMin(into); +// } else { +// firstVisibleItemPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); +// } +// if ( firstVisibleItemPosition <= 1 ) { +// return true; +// } +// return false; + } + + private final AdapterDataObserver mDataObserver = new AdapterDataObserver() { + @Override + public void onChanged() { + mWrapAdapter.notifyDataSetChanged(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + mWrapAdapter.notifyItemRangeInserted(positionStart, itemCount); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + mWrapAdapter.notifyItemRangeChanged(positionStart, itemCount); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount, Object payload) { + mWrapAdapter.notifyItemRangeChanged(positionStart, itemCount, payload); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + mWrapAdapter.notifyItemRangeRemoved(positionStart, itemCount); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { + mWrapAdapter.notifyItemMoved(fromPosition, toPosition); + } + }; + + private class WrapAdapter extends Adapter { + + private Adapter adapter; + + private ArrayList mHeaderViews; + + private ArrayList mFootViews; + + private int headerPosition = 1; + + public WrapAdapter(ArrayList headerViews, ArrayList footViews, Adapter adapter) { + this.adapter = adapter; + this.mHeaderViews = headerViews; + this.mFootViews = footViews; + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + LayoutManager manager = recyclerView.getLayoutManager(); + if(manager instanceof GridLayoutManager) { + final GridLayoutManager gridManager = ((GridLayoutManager) manager); + gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { + @Override + public int getSpanSize(int position) { + return (isHeader(position)|| isFooter(position)) + ? gridManager.getSpanCount() : 1; + } + }); + } + } + + @Override + public void onViewAttachedToWindow(ViewHolder holder) { + super.onViewAttachedToWindow(holder); + ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); + if(lp != null + && lp instanceof StaggeredGridLayoutManager.LayoutParams + && (isHeader( holder.getLayoutPosition()) || isFooter( holder.getLayoutPosition())) ) { + StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; + p.setFullSpan(true); + } + } + + public boolean isHeader(int position) { + return position >= 0 && position < mHeaderViews.size(); + } + + public boolean isFooter(int position) { + return position < getItemCount() && position >= getItemCount() - mFootViews.size(); + } + + public boolean isRefreshHeader(int position) { + return position == 0 ; + } + + public int getHeadersCount() { + return mHeaderViews.size(); + } + + public int getFootersCount() { + return mFootViews.size(); + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (viewType == TYPE_REFRESH_HEADER) { + return new SimpleViewHolder(mHeaderViews.get(0)); + } else if (viewType == TYPE_HEADER) { + return new SimpleViewHolder(mHeaderViews.get(headerPosition++ )); + } else if (viewType == TYPE_FOOTER) { + return new SimpleViewHolder(mFootViews.get(0)); + } + return adapter.onCreateViewHolder(parent, viewType); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + if (isHeader(position)) { + return; + } + int adjPosition = position - getHeadersCount(); + int adapterCount; + if (adapter != null) { + adapterCount = adapter.getItemCount(); + if (adjPosition < adapterCount) { + adapter.onBindViewHolder(holder, adjPosition); + return; + } + } + } + + @Override + public int getItemCount() { + if (adapter != null) { + return getHeadersCount() + getFootersCount() + adapter.getItemCount(); + } else { + return getHeadersCount() + getFootersCount(); + } + } + + @Override + public int getItemViewType(int position) { + if(isRefreshHeader(position)){ + return TYPE_REFRESH_HEADER; + } + if (isHeader(position)) { + return TYPE_HEADER; + } + if(isFooter(position)){ + return TYPE_FOOTER; + } + int adjPosition = position - getHeadersCount();; + int adapterCount; + if (adapter != null) { + adapterCount = adapter.getItemCount(); + if (adjPosition < adapterCount) { + return adapter.getItemViewType(adjPosition); + } + } + return TYPE_NORMAL; + } + + @Override + public long getItemId(int position) { + if (adapter != null && position >= getHeadersCount()) { + int adjPosition = position - getHeadersCount(); + int adapterCount = adapter.getItemCount(); + if (adjPosition < adapterCount) { + return adapter.getItemId(adjPosition); + } + } + return -1; + } + + private class SimpleViewHolder extends ViewHolder { + public SimpleViewHolder(View itemView) { + super(itemView); + } + } + } + + public void setLoadingListener(LoadingListener listener) { + mLoadingListener = listener; + } + + public interface LoadingListener { + + void onRefresh(); + + void onLoadMore(); + } +} diff --git a/xrecyclerview/src/main/res/drawable-hdpi/a1.png b/xrecyclerview/src/main/res/drawable-hdpi/a1.png new file mode 100755 index 0000000000000000000000000000000000000000..5713b8dde87b4c615df70fb7a52e1fbbda7db5cf GIT binary patch literal 8895 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 literal 0 HcmV?d00001 diff --git a/xrecyclerview/src/main/res/drawable-hdpi/a2.png b/xrecyclerview/src/main/res/drawable-hdpi/a2.png new file mode 100755 index 0000000000000000000000000000000000000000..05227444eca887dd2aa8cad683b003d4699c1c1c GIT binary patch literal 11082 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 literal 0 HcmV?d00001 diff --git a/xrecyclerview/src/main/res/drawable-hdpi/a3.png b/xrecyclerview/src/main/res/drawable-hdpi/a3.png new file mode 100755 index 0000000000000000000000000000000000000000..1993c647978b7f49d88472b9353a97959bae07d7 GIT binary patch literal 13465 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 literal 0 HcmV?d00001 diff --git a/xrecyclerview/src/main/res/drawable-hdpi/a6.png b/xrecyclerview/src/main/res/drawable-hdpi/a6.png new file mode 100755 index 0000000000000000000000000000000000000000..2fe2e65a8e301004bef4c041f700b65ffaea9c97 GIT binary patch literal 21325 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 RGw=^^si$SE*{JRm`(KY$_ul{j literal 0 HcmV?d00001 diff --git a/xrecyclerview/src/main/res/drawable-hdpi/a7.png b/xrecyclerview/src/main/res/drawable-hdpi/a7.png new file mode 100755 index 0000000000000000000000000000000000000000..bc2768e78d2cae368f5949ce12e315da9ae97988 GIT binary patch literal 21342 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 XPu``xP;Pz100000NkvXXu0mjfie3=T literal 0 HcmV?d00001 diff --git a/xrecyclerview/src/main/res/drawable-hdpi/a8.png b/xrecyclerview/src/main/res/drawable-hdpi/a8.png new file mode 100755 index 0000000000000000000000000000000000000000..fd8717068aaab2bb88dd69d83b8e9263c16189a1 GIT binary patch literal 21195 zcmaI7b9g1ewzQ2(i^r1|lE!v>0L0aXDOKzCzja}Z%O zfQdPgw7s#Vxr({5nWxi;IUfiJxVg2O7EnuGj>i;W&tUu?7zPh}$8T&95I#WGaV5N6EiC#6DuP#D?Kv{4-+>JGdt0L|46>MIh$GVsEA4YH?Qv}eiADn z(2<9c(cRsh!JU->;B3jr%+1Zs$i%|P!b1NILGR+}05tZXcW@#79|~gTE~d`bjzDXG z1JQpd8k+!If&3)jlKw9h>>cIh|2JU=m;W}@x5*eij2#)78JHOD?f;|Ke?hwdRm}fi zG5(LxE^3~R=8P)lE&x|&)9?PUApIZYZ`=Lf8T|+FTN)lkXY21yF}4!}n7Z1VI{>A{ z_({H77|g8Ac*MAw#khny*||A6g~i#JnYp;wSwxsP#ke_{xY$^QIsS*n{|T3aOPGmU zjFX*Bj7^l8S)83qn3+vPltY+9f?1eLTvXzJaHSnwfW{7{=KsUj`kU{6_+7XL67?=)DYLlKyz8YGZ$3V!o<2vxyb9`^j^Mj`BTq4*X9OYE<@te|MFl59X z_Ko9ylNtXuCK43f`Y4{--Pg@od3jxqe4i4%BXUb=$fOhIJ4eVug%ZeMfYJ$M(%G`# z7cl+r%Nv9?$xSZw!zBt#%0Cf3aXsun7fCcEqD%SpKh3;OJWe!DBsCda8iJErPh??kE7tNs>vj&0@o*d?>4pMY?ao&4JHWyJNc2XFOrgM!VqQPn4I6c$m4i zRYaR&?Y}*+Z(w)H`^j%>WWpIn6fse|L$ZtCuZR|#s44{3K`M2( z_weKg{c%COdls&F^3@5GI%nJQDZtQs)d6>N(dsp2P?{3<^hZ?$tb>1c0Q4#ne6vd; zUFe?hJakW)69eN=N0OcT5liNv8LGC;65{8!+*m3_6g zkIW%sc|2}05!4U29~T^xC^asLWcaX|AIG<<-`XwKIi6c$21|87d3SQq*Pr;g2Xuz-DSc(LwX2<$=dJ+B`z)Ud$f6 zugJv)yfo@DeQsxK1;3U;h);rqC>%KhnJ;Q;mskRXSKYCcz75%kb@ddQV4n1A?l^Tr zI$M8CI~F$^>M;UJs3ilL#{SPRu2WcgguhKkTuqsI$by0E!U;l1B((MP%yqxsQDoaI zUa)I$bv$Zh{TNFKPQ%KGBrOnTg~ndGv=Kuf zyqKKmUTJURn`pfVbXLlQovFyC5n6QxF5RTt#aok~f!se)kM)puRbHCc*qzj~C=Zx` zcG-$av8|%WR}FrQp*f~t8E^~)M1-!PIn2{E3xlIM$67*JB!n)Zqz20^Mg_oGSLEzE zdxprLZgRUZ>|H_{btlL|UD5)(i1HcPuBq7HHuDYF#mb;KYE3+!4zzuh%5G9jB|2&* z%itQbXW(&c)b)ns(e!DNn*>OMvMHsU&!8S(gieO68^qUB)>M3cYw<>`?JK1s>aynx zb3aUZ3GSAjK9zuz4V}$ipC}Y-w7U;gmOhq%lk=q9))oWd6&z0|K~zHBFRr=yM<`Zq zw_|q38Bx}T1RtuxIP|-DhT8d3#)g8w9NYkmzxUilIw4gSAe}9VSb#=IdQ_f|fqYf9 zMHfJTeNVVc#cfI65JwQw$W9y38T*Hhf!G=_jOeH64Ri1FHzwIdeb!($sb5km`>L%! zNl0?Ulcogy*!a6KB_`ocRfQJi%?mL}Xp8g2gIkcifkZyxKV?U5&hK)DIG+lb&sHvY zxc5j4bxG2R#Wz}Hev`fmRT%Bhhi@$R;~(6Vh_90FW`? z&*+Zw@{v*8y|~rDIxejLrbi}-$YDxnH}OkLrspfotxT8Bd>fm%A?*i+xbpUcm$H_g zL{;f?Q@&3iSDt+ogx8uf<1WgDIY$dWLI2PSGf;?efB)+D&|Z?!R#Sc}gct72^dsA! zc8K%#U6uCFXZ_~8Qn+enTV6c}PB{vgM<4%uu@oTyeyKB$ans+K25+cK&l}}+=beAc z=@~&bMUmYO2}-uQySaIx-%=qw02u3r<%A~bsrqyB9wqH;SmM$mk2XDVo(z0Y8ZU>% z&D9&YBvjI7za79{lz*-7+?cn$c9nY55I6|qzW~c#1v1RoFUlwwNa@f5`>&-)gJG+#o@!-5aV<~3n#xeum%%P~rBtSC4 zet5J;{b@7mAEQ9jhB*1~=tR(hNqn^}Zuq7u7=L@BP&(EKM@!vch^ua$BSFCX9g-o0 zlvi0>iUk_%3-rNR2-vot8C!$?tm=Ny(@CWJlnG!XUV%ZQR;x z{#;a!P4yLJbx4%*NMGUe4xD8whIK1Mf-O4q8Xu(xb{%~ZLb+W9EcFJal#-F3GcIVsF_1Rw})142mMN5+nEKPm=u+-x<;Mxps-TaxBM$Rew z^q`BJmK^x9)gB66g&k{OFZJ_hij=wlU%g?zfk(cVYc6RIVik}F68WD3|EUt6+Z_Zv zp*NqB2B_H)h;+CT9zpR7Bu-pf?(e$PtR(OPRhCQd3+AZhD#6K?2jYFqWFyBcg6rAb zUbx8oIAq>El`wbNZ1?T6MLUbI{zUx{aVcQ`&S;&&;6hQBzvy5Fe7_|Kd)vwiq6eSW z)0&AE>h4VJyc1OC=}p4C1Ie;Grf^AdKlYMgggW@^cB^-0Z?E}RuI3W3UqZ4^w6rrn z?r+q_xAntHd|=k;glS95YRa;u`iqc`R}h+F1mTtpohf#acr@D9?Z3l{-ZV-A!iZTiKxi~_-ZNLatqvOLgj8_iIc=Zs>b$q#ZK!0ou& zVy=v(x(uFgs=DG6uwtnq3rPJtyv1Y&rRtBM9xk0wJH~Bs7xa1-FIs{{SzjN{BT&HK zcHj46dPj<)a~e7cmEwXt=eh>VSPzk_S>qd66{TMCJ)jf9D>P*3smG3}DN342t3XmR zo#{5y9=Q?|$%^kcDAq3I%1b4+bMA9J|E7h8X8nq`dq(Pid7E<$^sQwV9zGgfQTP8> zB@j`buHSr`NjcNuLdmsjGC(pNa{{vqy=XsCnvBYSzmM4Vb16u#(Qc|oOC_mj6A1Ym z{sQU#2n&`K_EXEBlF$Pqi~d=>zpzdwGc`SIQ=j!$raQ6EgQfwKhiw$7fq^!;z?;!! ztQONP*{|DsA1t3nPX5-gUF?f_>S1PjYs1N*b;B=I|BG2__2PP(lDi(!v2CO5 z3py$>X-`O=BC@@>ogl~VIM87!d5kUHE_U7X7DLy^lH+x9gzSNWm8q}-UTNn7MI@G7 z+3S-x*6Z<5Lz9uyhkO&tY*u=q3Q!LY7-#9!sf-VX7=Z&Yy03eBxnK9;mOL-sZQr>wv`@>AC*^WjIM z*7ABsTR|TNx_VJlS_7zp)XqM7=CfoB-fuWXevBdlPbM!!3fC+(*PYc}%N`hdvnEZ; zBcfFd`p&XOyzk+_38d`uAMf>}ch*jgy8w9wndbQqVBr>fdN}=p^PQ&Hr{heP?~nrVZ7)+6Y>c)vU9v|qds6907Q+*pL8^xgZ$fK*Im zJ>Z>fjV68)1AjkNS8?bT9VnbL%|dIj7Mx(5#PgRp_!dQ-#!*Y6<}Erv2AxD#5% z9R`7{!IrHWa(NFHyuG1u80(sBAU^ZAb3!A)=N4Ungw>c@+GCN$%M2(1PfxRn@oo@3 z783X_^6PFUk}Gx2&gIts5_|Z=9)`f{g@640#{GO%Ura{~H31FZgg(+S$u|V?9zZ@V ziUh2DuHn`bI{KcY0fIrweW6D4BYW}c)w;`@%rmaCj-QB(U@N?LN;=BnE{c3m?uJeR z5_sNZ$b^*nnWMt25!AnMLvVVtfilDhfkKKDy@7;Z-JuZAo?Q$Wvnfp@%jsdT&R86U z7iL%Ek~;0+T@#*2CqZxEXU8*f8Hlrv5ue)8OP1pUx`yKehZo${Yj(#8$*^!fj3WH^ zy5U#3+&3iG?1~85toPm0T?~5-Wns`G8LYGGhvrj?1L}{3qBeOR9mE<=0fM z9lrVL{jFwSI4@V}Di_1l0msW&h@Xuk zFAeFx9s4k->Omd^fMgW-?qn1P=e;ywJGBpK;vKDiC%)Wc4w(NK3J!Fb;z06CD*}H_ zwYyJ-Fn_Yzkga^U#s8z6o+^YUOiQEm<*2mfp;-3>r-%}Sll3)>xJrHxn)>lfd)$Oq z!+b2$*xrbEap%t|N#a1Fo_jZjvAdb`o>6L3w2Zd-`Na2&A3&_o<(2S!vCX{KaXK3T zo6}3c?o74mYX|$91*DUAR++hTpUdaG60Q05Q2fA$J*)t|GMgO|(O(}odH__^9lo3# zp%pT=#vY|Dh1k}138%E4GI$q&*zN3S6E$|t_^eDAQLzLP{^N!X(2?>~*~zfwG#TU+ zG+K?~ezt#+nZ?T;z#uBR^?KSsHbC_2NF#eaQ^^etjS&3+e_@-M;@YvwwsrsYbVs5y ziVkslR^FNl)8F1S>3y!a4uquG^7*3_xu9-~K*|A@?9JaBGZC?_pXxQ06(5bi#17s! z0>oChYFO0-1u-K8|7shR#t{j*J}-M+G|1>z$voSO|1F9NH8T?4>@oV#{G7|m^zmoK z<0I1Z+57~yzh5krJlLI)t~D%A3d+m4*e^Tce3)4h4?-k&diFXExb$6&L->M30$ij zgiOf@y0Y{O9bs&z7x~==ltD4=j9nO3b&a8l*pGmG$yu;aS5Au#(jFa2-VouiZST8u zX?E&{Tk>w(-#4wfeN$vg6g3*zRD+8o#ohOA5TGL4cRhTPul0}~P0@@96L5nka36Tl z5_ke{=R1Ikm+ejhK5Nfwt{K=FCt$?OQm7DE8=0dg6+5+vmcV!bzvn!;dfG(FDhhUv zJXID%EFNSRKOM3JMIQ1&v|;*Q;ep1tv;0Cs))Sr@#fr+6Z1lL}9}5QX3j#bccbh{i z4R41DniA=4(r>()wc^Sp)3AZ2kdI1dFvmpFlQo~5d;*X~_qx)Yb3n39+z#oi^ zNwY)|StHh>`)R+&R!?z=4q?S%-5jeI%W#4<+Xjue;rC-V6meRp%d|)Xys8s2zHAFs z2_4LCO8ISX?;l`y9CNdW{E1KeOdR|5>6pfiAHF#`o+Iw>Uw=gduOE*d&~AV!l#a7n z=i6$VJq@}%NDpj%(jgHs?TX{nWH4Re{U+BNjcc+H08^-{yf?0sKji5p%QX#Iem1<1 zUosXiBDPRoJOw-ytZc~!HMgVe^tWcGE|2sfOZn#~=eT}7yx`|U>~O_a4Q*9Vm9BJ{ zq4QvP^Fu-%^L=w(c3i%C(^a|OdN6`w6@uzA$C7J+AWj^?KU<7%O zj*gzx(ijzq6NO+zBnp2pjblWsu6SgJ6vfSdRr$Wa8GhYE`{s(b<=Yhv^X)JDV}Nvm ztu9tVc>T4Kq*62xRoV0ZfT}*j@1p%s?maErw~^xJ zkFd|W<|=DVYcXUj|8QllOueT{u2_RFs!L^9f|o2unBu=GKHW_@I>f@+JQcGw?DBP_DTDtl!c%A$0GHX4JVRF6Q zu3aDW3ifkQej%o*v{PZC|ICH^r<+bm^k~{|AZSg5L7M=5-vcp=NTKJ#+(`e1`PBIe zD)9cwOExr=2Pf^Z$zTVSbn^WjPBDs50K!U30Z+J$x%G#vxVW?zI#!{F+%6XFS{)H~ z1($k~gJG>nIvmfJ!tPh9{puz=beiK&{E~lo<0Oq0w{Q)Ei1stu3$k6ZsP|Pbf_uw% zl(T`FK?WNv!FjWyOKrAG3~KTAzlL)jo`~MBCYrMA^C18oFBA@0Y%t8=F}m4oGmU%f(LZShl#xi96QbJ{bXdAEOW?{bd{<636U zij|+c@(_ETpDc~uHxz%++dF1uPJnu&^j7c9oyN@mK>WK?+&rcF2wAj8@4%|vvD^^+ z@dCc76zanvy#R)CXRGs$%QN+jQ!$aZXIG6Tk*y>{Kv~-q@gQo_#R2^a@AYf_lH)|f z61!JtX#{M#+oAUJ%^RfFOJ5Ndj}6y6{fc}fXLgNpt3_B%v&Z|yv&W|hGiEdLaM9Fe zC@V!ewCmdAAOXWq#2=?ixGj;%yJ9?3HeQu>h3qKjUy|>FwJ%Mw;RFP`>PdgT-Wngn zJxN@mIERz*d_J{^?H3x-fUdLizx?aeWUe5%c9j&mKi@ADZw4*vZjMG>U4QiiZ&$4D zA>#Z#y6nUjRm2Amc{+jdFusEW%JkeT9ul*9^9HnA(pPc9!DwW7g1(syMp1zB4>}AX zZA}aXmsJiD7wP}rE!gU{i48nevxVN9=hmfHvi?@by+?A+uqS5bXy*vM3BU-*;O_}=jSRYl9jNDAF_C<@Q&zqz`GE}DN#`KP>dn+@ploe+4?H1v&; z;l!-lV}7*y1Sx>24IR@5Oo|DzSQ~iXI;6W^{KQ#P$$_M{8r(Cfu-dSIC-5Po*aAX2 z_&s})QF8Uy0ca_!6OUcz8a43YD=&5SB!s1@C;4xz$XqYr)f&s8h^|`h2;R{YyJEgN zu9HE=K~#KJ9vf%CoX7kC-I!T^i~D!@-sd%rytF$tlsnrsnqbOqJOyyX2ptyF_EY^W zri#K%zCks!#uC`I(lV}|FhPl#j>C9B15c97%( zf9|V>@t%U9jvBhlpBQ#Fgd4kb_U64;SuqFR5)=Aat!Dj(3V@BzBuK$$YU` zv#K^^V83AfAa@H1Jg=Do_pQ-*=39V9K$5DQZk*3x&E|1Jz)i|lOsvJkK(_$@6IH-C z&6O9}D61lW$l7Id-ht41ZEz)fmYs%fabcL2Tp~)IlG<@EoT5OqxNLGl;l<$er_cAm zqiH&wbC2a_AE={Vxbkq%+0&3{CH|+GE}YwbNlqhg1(rObat%imZd4(=Tv?qMxHj`8njAWCrHUvXSWlc zb{y-hp1BysGa_+kW0V=wLG8CV{aO>Qi`<-ey6EWMM@z~o-XioPb7aO+WV{(mhyJZ5 zFbPtuo<^r+V6K_V@gSIy#pV93_q1I+6a(2dznw$tX_PM z$W(jK4|9R$I<*hQvJabN3rKhZ5O5d_B6bow`jQqRkx`Lc5y0#^oB{EfCoe`H=#t!{ zEKd>%e14hplq+=t?jRy=NNMVlVrS1_G}>iTdn=W`-?3J?F0tL)mBi8~v&&`R=I)IY zkfN)U89fd~kOg2eCtfJyq`t9sZp6Z-cop}o^l^h;Eb>7&ck*5q`2l2uru%W9f4TjP zeI)Ip)Uw5Rrr{pc-KIA)hs6_iii2Q)Gc(@!A%&&sx!OT@Qv{(?0vQbXjT;1%-42QA zCPRzFp?DFjL(y=p$hE8)WNhh4f$Ew`kN=SN9T4{0l{`*5258i_Faq)+6BOBnP^b{r zK%MOPx1_HsPkN(Nqo1K+?i)!>BSR_i11wl?3_vr2giv?!vBoc=xEfm_i8Sv&4|Yq( zmD$J_cgkH92SgPGBHt*speltDjbgAvmHdfK_7B#}gQzU05K%`OmR3xZ04e@Ew1`tTB{xifX24f`M z&Kk{bLdMF?E$@x*MVFJ82^@u3d>ov2y(39z>g`5>YLdtN_*a?hFyV|nTcauf^=zRZCTl1i_KP6icnYc$$Kagj zQ$vG6%U&{pqg-tJkPM%}Lwl-SoBmsn*VhHf0a|Fz_s^%({1w5EfcO5m!h^Bz^F*ms<|B}o|}F8r@ghVPYg&zuIb-NU@;hxP5+oZ zmZfGze*Qgyw$ngcwBP(a(4-esio?lw?}8|qe(W_$LrNK`MQ`z;?gwai{+xK2_5?Mp z>dd{fr4`q;YVHX`vhK;Pj)Hq~XuF$raXR{F5~;BiBJbvW@#R_xs_XJ{ zo2%{CYjqj>@v$%__M#&Rc^M1c`2^K}0w)-#^X9SW@hi*o?9&2 zs9|CDwG)|zxl>iO6l_5ubZU?G_~gzD&N@P4rM3o+7Ei6Q(mE#x1f zGb!-w2h%TdU<;^1UE>YV)wDBl2^1C1iBlp~5JYr|1#b(g zCXKF3)&Q(V)MfcXrZfzf=7)sEUoL7L} z3hA`k@L&3#bMpzfqRx-*N~k$F5Du)k-ZcBo_IVs1JoQlt$@l&=W)1F{90XnR*n?#` znq_^v%0CnPBSjices9HOiaCKx`OhSxQ=PJPCT?-(rr4Hbi&?Q-F)=8Zkw_bLFzis<%%5n+jcC*8K zucB#lwro)Ctz46VhuLbHsQqcv+vB`usM@y=itqI}?|J*9kn!iaXvxkE(sJb<6v}#S zxaVQ7__Nbvn-UMXZAlBU+_o}s!ot=eb0%!CsiV=>T{&j#z<0!s<9nM6G-EM8PfMkm z^L?w~xPD8B?(Z9D;rcB|=6e^TjXH+Byh6V-*z0e0TxO$ZBjxz~ox9X+>MCJz^^0el zg-lYRzUupt`?XSQ^A8|RgjX?`Xr#wk83^laP zkJBNZDVML0r^w*c*W;rszrg`a!zj>?x4o>cFNX#1XX_Ezb*>lX_V?92C7DqXU7bkQ z6)QfDKP|{;1tUl(SJm{mO@_V(j}1q$73-a>hG6{T^GVOeg^Wwzp&d3ak&LL={=kNa z$MFMmm3(7MgU@%)@r$tJUXXzP@JoTo<7TC7skxYZ2pbi078pJ zA(Kyg`FO3-9&QALoRYGeCjp~;gM8Sa71p-aoh0_$wbFA^Hm)W-c~J@&BEtqZ8h;g`Q-ibT2}t2 zbr)h>qD=>Hz^Sgs%N?M`PJct%w~>lgfe#4b&~iQBny%<^oD+)k9=!(W!Z#g^Lg9Ga zixnhDcr%JF$!`8ht-LrrSsd(9ZcvZ6R_h`)C;QXQ6Ow+o>C-*1xHj*z?UkohnQ%Jk z14=qOG~hS;4@W5Kl0AdiMsc%QeC}QgPTOd(M0Q-q=a!#+PZR5=pAjHRz>#VYj}JZ+fsm>- z`8BpeUniBFxN!nE*ZZmiGfyH~#Ka_bng0j6Q$Go3kUwv5L7kQ^QQh{@z*jc`zIE%v=!b8BiDA7}5vh^Bi1cvt|xsaFiL?hR(5y=Vi-@5Wj zgV@PFD3cw{tL@`ChM`ydmgh)~N7_+oA4^FCpO*=sucbd50KWOW<EWKK~KVZ~?JekKgAM(k*`z3j*Sm`1s{gbodd`BnD9e$~ss}|9Z)O|P(0#)di_-xwAt8auew8gT z`8UV#X~Ny$?&Q&C|L`A)zFzXe6+7w@q7n5<^2>g)ytPkJ$4Pqk?Y^hXp!mcwkfV#P z-^Z!8l_+bWeW6I0aG1~^!4Y_FymB0AnfquY4g8w{EnN%}2F56`QfPSVb-0<{+Z+|o z!h81;(nBbXB{WLTU*P}+&fYsj+wPTp$9{7?7gn?i&=zxA~N}5>I zXlxg|Ak4SJG(bdHv-f4okY!$IDk>L7cN#(x8S2w-(=Ldurc<|Yf#cjDY5?W|K!Tk! zdcJF@4GdvH&a?~c4HMq49~aP$GW!-rxuDJFa{rr3bgH!E!jJ9)a|WYqIH}ohRBYLL zN7MaqA!%=t_Vvg2CVX6(`B)H%Nm&QmOw#r?9Msz@Jr+y8pn&fiHCc_mmi9vTFm(#M&BVc>s`q@O??Q%gVkUvmsK2w$o&e-* zvUShP8b;D<*yg9H|=yr8(9y2$(x4B=%%;ZT%UKIah zwft@F-^}j#=T^p=ue6N4$V5j+Cn(f84(aNj;$J4v?<7_dDT;kK4ZCtdYifx6%TdWD z~?T(lU9;byd0VZC}t&UGN%py4m(-Mu|qd>)@ypqYh51ixirih&ok z9r({7;wpJ%_X>;|_jKygfJBYQ+Nm^7B*xC?+~+4~!e7YAZ&GgkC#jl3GX4szIpZ`UN@gg-_vlr24uVD+9HF#*xpO%jhgk!0m6rWp z3uTSgl&jZRhj{#pMXx2HCZ~)G)x^22 zp5NzHFW#T$LwLry^ZSgUNA~ND@z(vKzXuv0!UYKLg@hd=01j>Xbh%L-*WdgQGs5-R z|0lSK2QM)-AvoxX5Dax8nlRlkY%hini&@!%?`_rVNo~abn*~d zvM)qD*X4@GSEJpk_ygiX2EvUx< zTtyeMbWCVGAQJ~*Q|}Cm^zdWFG7G&bXSBI2(yOS*8rzNCq2d%FwoBHJAn?HpBESeB zV~G{-qeYxch2H0cOLoC7yi;P^#=L9OCTUiL;o2Zo!k6+~cgSc@q0ci7zHgtVLmsEp zmXFfq1xBH4giY4>R>VoJ#8UuL&TyBE>uo1};j%QJonMMGaF9e*Fco2Kf}WC`*IW)C zLVjQ})mU9G=W!(~)8L0YlsI>@FqvBTc>Y*+UNWNfF=r{YF9xsBU?0e~D?Mc~T=ygx zv_`n(2CXvNwjHM&8rF+kXXzUNYL+UO%J(n-O{M+j^~}{x!`_G4Oyn>HkSn<*pad8B z3sfmk-fKaBt8C<}B{!vA<+SGLMGK6n?C4?j{k4vLh&T8J^C$7k-`cI3@ARHf=;Pn2 z4n{5+*17LL0a@5?tvC>lS!7EEEjbjdQX}!|a5_-OsrD7m_%IOk~Dv3pkqR{^s$6N1%WPZ9@ zfz0&z@3;8^->%6(2_fReT4NiJv!?Mpv9W3Ac~2}ZoDy9Li!$oKwn%qWg(LDCTb zeip~b0kBqmFLN>SCdw)$$i_ImLeJ7K#$@{m2loDU4GWYunH?2RE6c%YIHx=OCjX%l z7Nh7X)3r0S-E>Z<98)IKJ%+V2)acv5E?`;rB;S$y8|?`hrm3?m3>Bu(0Ui9qDKT|*G(Fp zC)3{`k}#i-@WsOzmg+OZ-y$(d6TV?i>3hnw{?kDIu&|uJvvk3|DrQMf))ToWy7u}~5Mm8rTUFE9?BUm9{ zXFBvw)eg%la4Nz{z(A?ob~6y&7R z3b#|Zu)~cF>T+&uoiPbD=l}uCay!wjt$(^!qDbZf6MnWGv%di z|KqG*8iI4yPj|SgN|N@I-z&}PU7y|P^j=MHvYD}oN1{42An#ksKAkxH$Mz0xUej%N zI~GXasch7Uq$UK=#LMhX7UY@G=x&@KfEDf;s~&&t8xVot38x4(YDZQDW2t0N3*Gdr zDSv-~?JJ}}d8JfFyxKkaV@M%HY6@AdCX66o%ChfLX*4hKvrIi!g>N!vtH`J>@dE2*uQe zS#?s(qlS546R5LKIzq(=z8NZHnt1fbZ$>ta71ce|i==+5C5@+v)I+1jA*&wMN(+0# zPLz_^e16c36PXPIOT}Mbt>=n2=Pf9y3@x?+>y*ZP@_!f}=*b!=Ot(G1zgTs4MnR4e zcF-|Wg&=}DlCAe2Y^6-1Y}q)*bGwf@&JVP_11D(x?7C7<=R`-JmpiC z)a06oFSe^x&epCL$YX3A@QZYG1J{{6*L~acP>7J~#}Ih2UC&MGx7~A|eZY3r9JU&Z zuq@qvrap8&S#Gh(v~t)&BTi9c=&7rGP?-dr z7xUvxhs_TP!?=i&MJWGjUE6yj%vcAG;>}n7H+ga>O&ONN%#H1p)R0r|tsY%HIxwML zi?p*g>_GcfG#9)#dZ+P0R8l)PRA(? z-SI${k6+)Rh9YGLh%on3psknknqu)%Wu>dR1WFz3 zp#0r^Mp)1?xQf#PokQ0mR~Z&LVWTWG5d^+C167KW<0C^oH^XyG@xhv7qoRy6J_=m1 z1lm~J+ji1C){&X+AZNsbr6|~z6#APcH*B>rwYz@2H!BwsITu{08GU&4O6AH*au!rE z&qxbYXead!^g0vy!Intgv20rUt1peIz=w_kRDH26ZDR#Rv?jHNZOUTYWU!6a;7YPT z5&URD>!1ppib`t6#aZk>{r;A7Qz>?v?c)Ed1k%%01eN(6BD*j+lzy%{49_wPU54lw zR7zv^VGke)QXKl(m`~imR=MN-xpaNmn-mqGewbFTgK~>WM_U2n62$0?`!uRqyiav>H6@EHVMijRiL87wikF zd6t3;3cf!g&7L46rXabZbYOpM%FxjK4kz>K?Q`#OTMj6G^?`IA)bpQxBM6=?U`_Op zJkwNv;NGqGRsqW}LI^=@D(#F}O-Rq8rYyvQ;l>!F2cqzTl@2;~I9xuw>v}_Z4uSAY zRpD4x$CT7aT|}kjO6a=5qHk*b_*w9{50g|uKnG(>K6wtwbWc||iX{HVu0#pt1s83m}IwYL4&|*p(_Pn?*VeBdMrrTVL^yt`5j+>2)A>99qf!rDw~sR zg5OI>PQSEtSy6p7F3~Y*sr<@Ccfz+ibkz)rLAxPTvo)l&QhO}2DxDjyac(f)%n!Cv zb&%v?tV+3#o^Zf@U4GO??#y%Nsd@&y^d{JO%^4|4KUR90yu~9~BBI))bpw;Z)=J@m zq)G@(-#e~d5g&^PW&C~GzL8tXk*~1SLEaT}vc-Q-lww8MR#Cg8V3)?*X^jHK=Cq=G zQA7dUueKEyz3xzmo?(ISzQT=Em_pig#kT^%IUc9nsuM%`Ahe)G-5U_u8fl>U`f0(D zm#6&ZHdvDCQaVGAFEHrPrCZ?~BP#x2G>|U~+Ju9Qi2G_=fv#1DIji_nJ*R_wgU)W?J>>rIa7 zv+{}|oKp0EkW)aZ-*pAK972cjA6hLB3Bne*;LPjgA*Ri~KB=7f6l+KoAhxBGa|h_n zpP{+Fal|JI=4r&VgF4%WfrpVz_fgNd4k@WpuzDXeQxUi>Wo; zLqt22KRc$Cu}HviM@8q#{bvE9v;v-eh)ra{l)4A{5`U?QS3x5_VZRb@;!($k46sIb zka)~4%QNkXKNiMDWV}L&e?&(4rJ&QHoUexOIt|>r?3TL6h!Zk^PlO@|^?H!X+nxn- zU9sDV9-oDrifHg>b@bpPm#lNbEW|C6TI7N9;^65AvoeW)q*Se1lT5Z`y-?AY=SvUT zbkgA@g8`;T8O4YbcDQzvik?>pl^W4u1)|%P!RoodiRCT2C~}uIY{GFoi4#~89e7*u zJWc70$WgjVihLzxzoWJdd#YB&PAdKt>UNd?(n@d^3T@+G%2J5$LlhkYzpJQn&UdJ4 zX*(#E<-`jxv3qPHlslJk)qYiL&r*ZT2W0<{%TXh7EOxaXTQP~a>P$?Qz3cXI&TFqT z{^R1?aU7?Muu$3_jrFGf3Ck*j#?ZVM2a|xKbagM3{M;P505SBZRK0FSeG`@ymwiCj zO7&_cjEJaDMww*H4gQfHVk>rJzE-MFr-zB6i+?iHmEqiqxo3~YGOnw#e^CDbuIu7^ zkw6H5UhOSTiPXPRL`3addkkeVi{l?Q!;15RjU9!8NspDtY;LKSy1Gn?OkS%GjbIs$ zo=IHIdN5FH41x(dxW0CdUWYAAN#4MNKMCTwSQ_H??4277bst~J6+q5H)7#(ACoZ&} zpPcAZqSgknjBY%YR=*n?z~73aa)j=8M&W1J;D63dwG-Zel$24)Xhh?#xbt>*ysZhI zJ2&su%1Y&G#p@Lq5e7+A?ai++JGrqwb0AVXQWR+kE^eYHbFV?NSr}0}DJG-h&dy*_ zw_L@JJFCB<+6paOrBe}n4`atXOBF=MLxQ}oWJ8&(b>EMgXPK7M3+@^l4dX4*DsGF& z*}rU6j_$FZRPSG$hC;Z7xmbMCsRi?Wc&`G^4M}nTLQ3YiXmD*ymA;h*0J6E%t675Z zY!q8Ru&XIakMSkolih(EUZ|i{T5JQ;ENH4HCoGSin4Rg0;b#&Nb{H8!0@*DNtBPK7 z(Wou+OGI$MY&Edsc%CMJp~Q)07Vn}4Ee=mmAv&62j-ndMZK0Z8UU-t{j|%NgZX+A# zi!kyCjaBv_2?mR;&`zjO#ekab0w<)u9z^#toAhKO7wEdJvMdTAr$G(xVE6`7m1gPb ztOQc%9|cAuWOR185#?|j@q;xP&x3>9-IC15@?uZ~Y>=*w5?MNSno-6D1YCZVf)+)5 zP1ot(EIt!5Ovo5Rqnl8nY}}H9TtZQVXwp#fwL_vsUqs3k8x_6N)9)-_{nj(#YqE`n z{O7%4x2c`Zi-%x%qv+E>0r&GsBFeVAOA(rSI} z)_?UTNC63a%gX2{HA@m!)iq@xb&Q%BrZ4EnS-7Yh#fPT3U1bg?Nc6DD&g2xIhyymB z8=gTfn?t&@}jk5tUnsn z`8^FYWBtyX$X(k6+h!)K znYd2nhj5_ebL_>n9|`OekaprqfO&t4NEEFyj+CWlP=E6AOfK_E(*9EtMfUDu79>zq zd>UT5xK(` zT_0gdp<~g{`LMshW}2MVvIg(Sn$H|9)1qFJk5x_PMa}Pnj(TAHyJYQ}ws2-OlbS}U z0Ow_IV)9Q8fWs!%!U2xSq!dJHhLARjG0T1bW00O=1&=aHb^-hg9K)ZTRH< zFY(F3zp!NO79`kXZZTWTSorUHq$S4VpaDH`_|Sgh^}xQ}Vb4f`$rhz~rWu&kH6nAC z_vck3AcrKrAFjd8AJjcWu}V^v7Y)Vc(7zuboqa8vy#b5Kp3N5&J+55%(1i(Lu6-_X zK9Be<)$N4ptmN3$?y8~`D_YqeT~lF}A*^8$G-?DE##2}S*aYEafv1vG;i@ud6 zG9-mb{Z!3j%SQ>U1S^tQ^ne+YAt`m~%1$S@n>1JY&D124%;osuw`G|3_iB9o*9vUN z%0Z{31awVJ8frG1R(k0?43-*~8~G(=D6ObMT&xZKyLQH~KHbo-OB%YTC81wNC-f)a z$MZQIb}e#D6v3e1b$R`5iA8vxVKW1P{#N!2_-u1;U5y-rvgR7hpbN6+gXfWM1}M6j z;H@eqO`@_?F_{me&(|1cfk+DC1;eXH8S%LBbsE>A+v}=Git*A{EZTzQ_4so5MFCw! z*L1|+YMQVJdti!7hAGOfjZ1T<$9~63iN5cz6yCtF3T_;KHlDgI6=t(Shia3yYg#H^ z{p_1VU;gxKdY=+>YE8n&6R?>La+BoVRaAmaJ9eSk=@QkhY*7|CVq(bbk0rJvnP1~# z5lSjXKh7FM%8nV&&7lI$;&mUWr7JKBQc2@wr&MMAlATp|kK%6xp?l7?zv*%5 z7MlnJQMfsy5#h$AmFbXVyB%Zu_VVXp2U4f*y?ZQMc}0}~TuRd(6rCqNHb$`D1)$Pe z<3)K@HFlSl!%6DD+wFmix9sR|CPmT1@>P`O=i`&a&bZ);^MFm;!tdc`=}o{j#U`>U ze<}U@c^dn__wf7qFzpR^uT=o_Rd4m#6{a8)qY>#(nvyBr0WY_ya@9znw_AsVqT8u7 zDNJ!GnnZ7)TZtl4(G)#sP4S1R8X>F3YoIerPn{IK&YgvIpEoM%#*7%7ViiRVRiBh; zE-{czB(YiTx7(r{yz#9Bl)1nDg$ph{8w$ssbN7;PgPj&k;Rv*F%z(SUDK75srk9}( z6z8S@KY$Vddc9Gmu+i(dw*&`%`+gB@v=AONa$tv&>K)ET7u!?1^TiaK)Tl$Q)+*r_ zrG5{!yV;JMt|+gVIHX@MWRTikRqaG<+?3b1xl8|_=G zFq65Fo4wV(yEKawB1?zCF-w=pd*Yx3*1Z(bPmt zefryBug&}seYN}x*$DV^Y(^CVdCi|ehl>J3WdyvP)m2=@<>U<>|d5(Yfe7wG0}E8B_z<>Bkk`Wc^dlM zJY0M3X*hJ`5NyiMC23<08`%4FONZ5J!P$2`j$0?*g@UykN!RENB_$~|fahI^?p?6; z&t-V|gD*LFh$Dqc<&=;>Z*LS&Jgk-`TT%*Brxd*U;2kijUS#de3me#Zzr9mp0{W9Q zpZ4WE97NLnxd)zuGk>=R_%7*CNY!l>J;URLlAb0CPfU8`Wo*kULTZ9z4J{?x<+PAM zZ*SC_IHA@j4C>777=FY-`0Ry;#KYLRyO6=o+X2N0ar`Gc=**;94C~h$R*MBwUU?UX zUw#{&edu{?UGk3>I@_}w6q3YBfC0RlSQpN#ZbpZ1BHNSHKQn` zp_!DFVaZnuaObNZVDakp=*PYQU@3j$2{|Ps(Ay)`9TlVKt(>xRtJ4o0c0#X#eO4?b zKoHRRuM5I;aiZ%KnGcDMI3&kA;B>jLWX%SA_t$d7#l)a@*K}dmGf=yAPDNT$B9h|c z5NnG@lrHIc!KilDpuDmgWtEl4%+14}E7#$tB`ZXt&%j>YIbNW~tEv~u=^%mLUddU% zj;m}S1pEhOVaZE>MqkxgeodP)*9NP@G9Uszg(%q6=p=eH#yxQDl?VxptP zab~>@6<53!nR&EGIBQ(udyd!`bftxXkMn9X@&>JLN}K`ADfg8IjKHIyGu{G*%-66o!jRucb%z%4dl7V$W-oz*=9)1G+) z^M7B0em%QEKkfjdnoC)ADM~7f5gTPkiX#>22^p|iZ3O5jm=!aD-b2!~hE#4RDqWQ* zt13Z3S-w~h__#Qm1JPWP$|yy(m&7m@lDui|+=cq0RUoH<1bRoHqlxc>w$1iD@wdX6 z)uS8M{kj-aUwI#$cpsaqrKsvyGfCzW0&HDznWR1ABCwkof!eI6z47vg$JIDBg~ZJJ(@l_6n@cS&bcq z+Xcvz;*x}xpcR*CRnT8gJWoDy3G@z6BECH}5l=n&GG_n$D~9yzjq>UWVRw@hA9NIf z`>JEE$H0ui$S=!7c2SmAait02vK3Chjcp}cy?b&G49?gOCl4QstlitNhQPjN$4dO0 z{g06PtR18{I?-Zb)+)H}Jq?sVmq3@q!ZS4iJN{jXS3jPE-d(#3Tbe;$R8iwqb|Zp!%icxFU04Ir(?s;wMdIk_bogvq;&a|CD5fb zPXKmra-v{!B1ZJytv1n?b2*|_w`D=~KDIOLY>Xo+@FDJPKxdW48y_*;bSEn7AHsc0RroTRxWinx9_ zSG4JE6WG~5kYAdIix0aD{n7@Yq^h{d>mx_!dAy$8itLUmRrh@!;|?HqJxSh`KujxG zn;b35m7xpswf8Zx4VG!!+U62~BzRFpA^LXikI{q2VA_u_i9j49c3#z6NqJOm7~w*- zy9&-4&3Txfm`?YmX0dlaRL;cuh@FbOg{Z2sm6HT|6Gx_sqw3^o=t`Go>)?9I(TX zwTtKHKZR`tTM-`>}Tv}6%3_2SZP`D|$U-h5neFW}#aecRymnC54~3o_yC9 z1D(L_aW`vkTH5Cl=#tui`t6M_z#wNfTg*)XJNHuiTMoGdx}@+^x0Zg9!R@MY3Dw^_5Xa_!Er(kIT~ganvsG!6*#wW%Bcyq3Qj-Jy8RW7-g9N&yHlk()%ZM#B`hR(0 zxsc>hu~AKt=1lL&p_V|G)ON&CYGqABxd!yg!b)M6$0o+Y<7!fZ2uJ44mqRUqE~#x* z_gPInxTd-W<|wlOc@rf$)5mg{CD0|cJzWbe47NdHFFS9eMcboABwRCsWImHaEP*bm z?Wu}*s1A5eeo=!YewAULi;!1Ovr0REq@Pog1iGYsgx-Lb_L@q3IB{>{10br*8)CiL z=X_ias|32FeUl2I#iVZ|=5`V-E$sGgQ%nL$66liJo>E%)y=vn7 zzsZ)vCxI?0GRW3~@9ZLeP!630x}?aVmULL)T686H=p@i3MGiH$Hu6iv^W?Bepi7D@ zYEGZG6~wp5A(KFt6nT{2#N&8NjvGpN<&a6BONu;V&v{KF$8ZVfqltIO;gUd?6q%Gq zyrzM_Z--VYS_Z~Qpi7Ey`l6oC+407WBeLWWMK;L>4w9H2(IxhA(7M2I1BP!PYqYl; zQe-b_Ns^@ME=iIk33N%4BuSu4k|aq2U6Le8;i3N*U;vJ;?u}}z*`)vg002ovPDHLk FV1hiJ*=PU& literal 0 HcmV?d00001 diff --git a/xrecyclerview/src/main/res/layout/listview_header_original.xml b/xrecyclerview/src/main/res/layout/listview_header_original.xml new file mode 100755 index 0000000..07672c3 --- /dev/null +++ b/xrecyclerview/src/main/res/layout/listview_header_original.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file