From e2becee5d08dc91e0fb31ca94b93c2a978a6980a Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Mon, 26 Sep 2016 16:13:23 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=9A=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E4=B8=8A=E4=BC=A0=20app=E5=AE=89=E8=A3=85=EF=BC=8C?= =?UTF-8?q?=E5=BC=80=E6=9C=BA=EF=BC=8C=E9=94=81=E5=B1=8F=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StatInterface/src/main/AndroidManifest.xml | 20 ++++++++++++++++++- .../statsdk/core/TcUploadCoreReceiver.java | 17 ++++++---------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/StatInterface/src/main/AndroidManifest.xml b/StatInterface/src/main/AndroidManifest.xml index 4238b43..2f46f92 100644 --- a/StatInterface/src/main/AndroidManifest.xml +++ b/StatInterface/src/main/AndroidManifest.xml @@ -3,14 +3,32 @@ + + + + + + + + + + - + + + + + + + + diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java index 15c4bf0..ee880ad 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java @@ -7,6 +7,9 @@ import android.util.Log; import android.widget.Toast; +import com.tamic.statInterface.statsdk.db.helper.StaticsAgent; +import com.tamic.statInterface.statsdk.util.JsonUtil; + /** * * 轮询广播 @@ -22,20 +25,12 @@ public class TcUploadCoreReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.d(TAG, "pollSever is started"); - if (context == null || intent ==null ) { + if (context == null || intent == null ) { return; } - if (TextUtils.equals(intent.getAction(), REPORT_ACTION)) { - - - Toast.makeText(context, "send statData", Toast.LENGTH_LONG).show(); - - //发送数据 -// TcStatSdk.getInstance(context).send(JsonUtil.toJSONString(StaticsAgent.getDataBlock())); - } - - + //发送数据 + TcStatSdk.getInstance(context).send(); } } From ef021f91c9b13f82f242bf53c62f9042838326bb Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Mon, 26 Sep 2016 17:41:31 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0crash=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statsdk/core/TcCrashHandler.java | 52 +++++++ .../statInterface/statsdk/db/Customer.java | 40 +---- .../statInterface/statsdk/db/CustomerDao.java | 119 --------------- .../statInterface/statsdk/db/DaoMaster.java | 73 ---------- .../statInterface/statsdk/db/DaoSession.java | 61 -------- .../statInterface/statsdk/db/TcNote.java | 56 +++---- .../statInterface/statsdk/db/TcNoteDao.java | 122 ---------------- .../statsdk/db/database/DataAccess.java | 76 ++++++++++ .../statsdk/db/database/DataBaseHandler.java | 137 ++++++++++++++++++ .../db/database/ReadDataBaseAccess.java | 50 +++++++ .../db/database/WriteDataBaseAccess.java | 114 +++++++++++++++ .../statsdk/db/helper/NoteDaoHelper.java | 48 ------ .../statsdk/db/helper/StaticsAgent.java | 64 +++++--- .../statsdk/model/ExceptionInfo.java | 55 +++++++ 14 files changed, 561 insertions(+), 506 deletions(-) create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java delete mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/CustomerDao.java delete mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoMaster.java delete mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoSession.java delete mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNoteDao.java create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java delete mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/NoteDaoHelper.java create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java new file mode 100644 index 0000000..845bcf8 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java @@ -0,0 +1,52 @@ +package com.tamic.statInterface.statsdk.core; + +import android.content.Context; +import android.util.Log; + +import com.tamic.statInterface.statsdk.db.helper.StaticsAgent; +import com.tamic.statInterface.statsdk.model.ExceptionInfo; +import com.tamic.statInterface.statsdk.util.DeviceUtil; + +/** + * Created by null on 2016/9/22. + */ +public class TcCrashHandler implements Thread.UncaughtExceptionHandler { + private Context context; + public static TcCrashHandler INSTANCE; + private Thread.UncaughtExceptionHandler uncaughtExceptionHandler; + + private TcCrashHandler() { + } + + public void init(Context context) { + this.context = context; + uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); + Thread.setDefaultUncaughtExceptionHandler(this); + } + + + public static TcCrashHandler getInstance() { + if (INSTANCE == null) { + INSTANCE = new TcCrashHandler(); + } + return INSTANCE; + } + + @Override + public void uncaughtException(Thread thread, Throwable ex) { + if (ex != null) { + StackTraceElement[] stackTraceElements = ex.getStackTrace(); + Log.i("jiangTest", stackTraceElements.length + "---"); + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(ex.getMessage()).append("\n"); + for (int i = stackTraceElements.length - 1; i >= 0; i--) { + stringBuffer.append(stackTraceElements[i].getFileName()).append(":").append(stackTraceElements[i].getClassName()).append(stackTraceElements[i].getMethodName()).append("(").append(stackTraceElements[i].getLineNumber()).append(")").append("\n"); + } + Log.i("jiangTest", stringBuffer.toString()); + StaticsAgent.storeObject(new ExceptionInfo(DeviceUtil.getPhoneModel(), DeviceUtil.getSystemModel(), String.valueOf(DeviceUtil.getSystemVersion()), stringBuffer.toString())); + } + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + + } +} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java index f58019e..7af4e5d 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java @@ -1,9 +1,6 @@ package com.tamic.statInterface.statsdk.db; import java.util.List; - -import de.greenrobot.dao.DaoException; - // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. /** @@ -15,11 +12,7 @@ public class Customer { /** Not-null value. */ private String name; - /** Used to resolve relations */ - private transient DaoSession daoSession; - /** Used for active entity operations. */ - private transient CustomerDao myDao; public Customer() { } @@ -33,11 +26,7 @@ public Customer(Long id, String name) { this.name = name; } - /** called by internal mechanisms, do not call yourself. */ - public void __setDaoSession(DaoSession daoSession) { - this.daoSession = daoSession; - myDao = daoSession != null ? daoSession.getCustomerDao() : null; - } + public Long getId() { return id; @@ -58,31 +47,4 @@ public void setName(String name) { } - - - - /** Convenient call for {@link AbstractDao#delete(Object)}. Entity must attached to an entity context. */ - public void delete() { - if (myDao == null) { - throw new DaoException("Entity is detached from DAO context"); - } - myDao.delete(this); - } - - /** Convenient call for {@link AbstractDao#update(Object)}. Entity must attached to an entity context. */ - public void update() { - if (myDao == null) { - throw new DaoException("Entity is detached from DAO context"); - } - myDao.update(this); - } - - /** Convenient call for {@link AbstractDao#refresh(Object)}. Entity must attached to an entity context. */ - public void refresh() { - if (myDao == null) { - throw new DaoException("Entity is detached from DAO context"); - } - myDao.refresh(this); - } - } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/CustomerDao.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/CustomerDao.java deleted file mode 100644 index 45c6d5b..0000000 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/CustomerDao.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.tamic.statInterface.statsdk.db; - -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteStatement; - -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 "CUSTOMER". -*/ -public class CustomerDao extends AbstractDao { - - public static final String TABLENAME = "CUSTOMER"; - - /** - * Properties of entity Customer.
- * 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 Name = new Property(1, String.class, "name", false, "NAME"); - }; - - private DaoSession daoSession; - - - public CustomerDao(DaoConfig config) { - super(config); - } - - public CustomerDao(DaoConfig config, DaoSession daoSession) { - super(config, daoSession); - this.daoSession = 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 + "\"CUSTOMER\" (" + // - "\"_id\" INTEGER PRIMARY KEY ," + // 0: id - "\"NAME\" TEXT NOT NULL );"); // 1: name - } - - /** Drops the underlying database table. */ - public static void dropTable(SQLiteDatabase db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"CUSTOMER\""; - db.execSQL(sql); - } - - /** @inheritdoc */ - @Override - protected void bindValues(SQLiteStatement stmt, Customer entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - stmt.bindString(2, entity.getName()); - } - - @Override - protected void attachEntity(Customer entity) { - super.attachEntity(entity); - entity.__setDaoSession(daoSession); - } - - /** @inheritdoc */ - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - /** @inheritdoc */ - @Override - public Customer readEntity(Cursor cursor, int offset) { - Customer entity = new Customer( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.getString(offset + 1) // name - ); - return entity; - } - - /** @inheritdoc */ - @Override - public void readEntity(Cursor cursor, Customer entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setName(cursor.getString(offset + 1)); - } - - /** @inheritdoc */ - @Override - protected Long updateKeyAfterInsert(Customer entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - /** @inheritdoc */ - @Override - public Long getKey(Customer entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - /** @inheritdoc */ - @Override - protected boolean isEntityUpdateable() { - return true; - } - -} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoMaster.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoMaster.java deleted file mode 100644 index 87d76e8..0000000 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoMaster.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.tamic.statInterface.statsdk.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 de.greenrobot.dao.AbstractDaoMaster; -import de.greenrobot.dao.identityscope.IdentityScopeType; - -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. - -/** - * Master of DAO (schema version 1000): knows all DAOs. -*/ -public class DaoMaster extends AbstractDaoMaster { - public static final int SCHEMA_VERSION = 1000; - - /** Creates underlying database table using DAOs. */ - public static void createAllTables(SQLiteDatabase db, boolean ifNotExists) { - TcNoteDao.createTable(db, ifNotExists); - CustomerDao.createTable(db, ifNotExists); - } - - /** Drops underlying database table using DAOs. */ - public static void dropAllTables(SQLiteDatabase db, boolean ifExists) { - TcNoteDao.dropTable(db, ifExists); - CustomerDao.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); - } - } - - public DaoMaster(SQLiteDatabase db) { - super(db, SCHEMA_VERSION); - registerDaoClass(TcNoteDao.class); - registerDaoClass(CustomerDao.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/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoSession.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoSession.java deleted file mode 100644 index b236acf..0000000 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/DaoSession.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.tamic.statInterface.statsdk .db; - -import android.database.sqlite.SQLiteDatabase; - -import java.util.Map; - -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 paNoteDaoConfig ; - private final DaoConfig customerDaoConfig; - - private final TcNoteDao paNoteDao ; - private final CustomerDao customerDao; - - - public DaoSession(SQLiteDatabase db, IdentityScopeType type, Map>, DaoConfig> - daoConfigMap) { - super(db); - paNoteDaoConfig = daoConfigMap.get(TcNoteDao.class).clone(); - paNoteDaoConfig.initIdentityScope(type); - - - customerDaoConfig = daoConfigMap.get(CustomerDao.class).clone(); - customerDaoConfig.initIdentityScope(type); - - - paNoteDao = new TcNoteDao(paNoteDaoConfig,this); - customerDao = new CustomerDao(customerDaoConfig, this); - - registerDao(TcNote.class,paNoteDao); - registerDao(Customer.class, customerDao); - } - - public void clear() { - paNoteDaoConfig.getIdentityScope().clear(); - customerDaoConfig.getIdentityScope().clear(); - } - - - - public TcNoteDao getPaNoteDao(){ - return paNoteDao ; - } - - public CustomerDao getCustomerDao() { - return customerDao; - } - -} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java index fdb4e3a..c060c32 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java @@ -2,17 +2,19 @@ // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. /** - * Entity mapped to table "Stact_NOTE". + * Entity mapped to table "PA_NOTE". */ public class TcNote { private Long id; /** Not-null value. */ - private String firstcloumn; + private String firstCloumn; /** Not-null value. */ - private String secondcloumn; + private String secondCloumn; /** Not-null value. */ - private String thirdcloumn; + private String thirdCloumn; + + private String forthCloumn; public TcNote() { } @@ -21,11 +23,12 @@ public TcNote(Long id) { this.id = id; } - public TcNote(Long id, String firstcloumn, String secondcloumn, String thirdcloumn) { + public TcNote(Long id, String firstCloumn, String secondCloumn, String thirdCloumn,String forthCloumn) { this.id = id; - this.firstcloumn = firstcloumn; - this.secondcloumn = secondcloumn; - this.thirdcloumn = thirdcloumn; + this.firstCloumn = firstCloumn; + this.secondCloumn = secondCloumn; + this.thirdCloumn = thirdCloumn; + this.forthCloumn=forthCloumn; } public Long getId() { @@ -36,34 +39,35 @@ public void setId(Long id) { this.id = id; } - /** Not-null value. */ - public String getFirstcloumn() { - return firstcloumn; + public String getFirstCloumn() { + return firstCloumn; } - /** Not-null value; ensure this value is available before it is saved to the database. */ - public void setFirstcloumn(String firstcloumn) { - this.firstcloumn = firstcloumn; + public void setFirstCloumn(String firstCloumn) { + this.firstCloumn = firstCloumn; } - /** Not-null value. */ - public String getSecondcloumn() { - return secondcloumn; + public String getSecondCloumn() { + return secondCloumn; } - /** Not-null value; ensure this value is available before it is saved to the database. */ - public void setSecondcloumn(String secondcloumn) { - this.secondcloumn = secondcloumn; + public void setSecondCloumn(String secondCloumn) { + this.secondCloumn = secondCloumn; } - /** Not-null value. */ - public String getThirdcloumn() { - return thirdcloumn; + public String getThirdCloumn() { + return thirdCloumn; } - /** Not-null value; ensure this value is available before it is saved to the database. */ - public void setThirdcloumn(String thirdcloumn) { - this.thirdcloumn = thirdcloumn; + public void setThirdCloumn(String thirdCloumn) { + this.thirdCloumn = thirdCloumn; } + public String getForthCloumn() { + return forthCloumn; + } + + public void setForthCloumn(String forthCloumn) { + this.forthCloumn = forthCloumn; + } } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNoteDao.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNoteDao.java deleted file mode 100644 index 815b190..0000000 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNoteDao.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.tamic.statInterface.statsdk.db; - -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteStatement; - -import com.tamic.statInterface.statsdk.constants.StaticsConfig; - -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 "PA_NOTE". -*/ -public class TcNoteDao extends AbstractDao { - - public static final String TABLENAME = StaticsConfig.SDK_TABLE_NAME; - - - /** - * Properties of entity TcNote.
- * 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 appActionInfo = new Property(1, String.class, StaticsConfig.APPACTION_INFO, false, "FIRSTCLOUMN"); - public final static Property pageInfo = new Property(2, String.class, StaticsConfig.PAGE_INFO, false, "SECONDCLOUMN"); - public final static Property enventInfo = new Property(3, String.class, StaticsConfig.ENVENT_INFO, false, "THIRDCLOUMN"); - } - - public TcNoteDao(DaoConfig config) { - super(config); - } - - public TcNoteDao(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 + TABLENAME + "(" + // - "\"_id\" INTEGER PRIMARY KEY ," + // 0: id - "\"FIRSTCLOUMN\" TEXT NOT NULL ," + // 1: firstcloumn - "\"SECONDCLOUMN\" TEXT NOT NULL ," + // 2: secondcloumn - "\"THIRDCLOUMN\" TEXT NOT NULL );"); // 3: thirdcloumn - } - - /** Drops the underlying database table. */ - public static void dropTable(SQLiteDatabase db, boolean ifExists) { - String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + TABLENAME; - db.execSQL(sql); - } - - /** @inheritdoc */ - @Override - protected void bindValues(SQLiteStatement stmt, TcNote entity) { - stmt.clearBindings(); - - Long id = entity.getId(); - if (id != null) { - stmt.bindLong(1, id); - } - stmt.bindString(2, entity.getFirstcloumn()); - stmt.bindString(3, entity.getSecondcloumn()); - stmt.bindString(4, entity.getThirdcloumn()); - } - - /** @inheritdoc */ - @Override - public Long readKey(Cursor cursor, int offset) { - return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); - } - - /** @inheritdoc */ - @Override - public TcNote readEntity(Cursor cursor, int offset) { - TcNote entity = new TcNote( // - cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id - cursor.getString(offset + 1), // firstcloumn - cursor.getString(offset + 2), // secondcloumn - cursor.getString(offset + 3) // thirdcloumn - ); - return entity; - } - - /** @inheritdoc */ - @Override - public void readEntity(Cursor cursor, TcNote entity, int offset) { - entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); - entity.setFirstcloumn(cursor.getString(offset + 1)); - entity.setSecondcloumn(cursor.getString(offset + 2)); - entity.setThirdcloumn(cursor.getString(offset + 3)); - } - - /** @inheritdoc */ - @Override - protected Long updateKeyAfterInsert(TcNote entity, long rowId) { - entity.setId(rowId); - return rowId; - } - - /** @inheritdoc */ - @Override - public Long getKey(TcNote entity) { - if(entity != null) { - return entity.getId(); - } else { - return null; - } - } - - /** @inheritdoc */ - @Override - protected boolean isEntityUpdateable() { - return true; - } - -} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java new file mode 100644 index 0000000..a62d629 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java @@ -0,0 +1,76 @@ +/* + * DataAccess.java + * + * Created by: 唐俊豪 on 2014-1-9 + * Copyright (c) 2014年 SAIC. All rights reserved. + */ +package com.tamic.statInterface.statsdk.db.database; + +import android.content.Context; + +import com.tamic.statInterface.statsdk.db.TcNote; + +import java.util.ArrayList; + +/* + * 对外接口,数据库访问层,所有的数据库操作都只能通过该类访问 + */ +public class DataAccess { + private static DataBaseHandler handler = null; + private static DataAccess access = null; + + private static ReadDataBaseAccess readAccess = null; + private static WriteDataBaseAccess writeAccess = null; + private static Context appContext; + + public static synchronized DataAccess shareInstance(Context context) { + appContext = context; + readAccess = ReadDataBaseAccess.shareInstance(appContext); + if (access == null) { + access = new DataAccess(); + handler = DataBaseHandler.writeInstance(appContext); + writeAccess = WriteDataBaseAccess.shareInstance(appContext); + } + return access; + } + + public void closeDataBase() { + handler.close(); + } + + //创建所有表 + public void createAllTables() { + createNoteTable(); + createCustomerTable(); + } + + private void createNoteTable() { + boolean isCreatedSec = handler.createTableWithSQL("create table if not exists T_Note(_id integer primary key autoincrement,firstcloumn text,secondcloumn text," + + "thirdcloumn text,forthcloumn text)"); + if (!isCreatedSec) { + System.out.println("create table T_Note failure!"); + } + } + + private void createCustomerTable() { + boolean isCreatedSec = handler.createTableWithSQL("create table if not exists T_Customer(_id integer primary key autoincrement,name text)"); + if (!isCreatedSec) { + System.out.println("create table T_Customer failure!"); + } + } + + //添加接口 + public boolean insertData(Object obj) { + return writeAccess.insertData(obj); + } + + //批量插入事件 + public boolean insertNotes(ArrayList notes) { + return writeAccess.insertDatas(notes); + } + + //插入事件 + public boolean insertNote(TcNote note) { + return writeAccess.insertData(note); + } +} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java new file mode 100644 index 0000000..be5faa9 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java @@ -0,0 +1,137 @@ +/* + * DataBaseHandler.java + * + * Created by: 唐俊豪 on 2014-1-9 + * Copyright (c) 2014年 SAIC. All rights reserved. + */ +package com.tamic.statInterface.statsdk.db.database; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.concurrent.locks.ReentrantLock; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + + +/* + * 负责和数据库建立连接的类 + * 负责打开关闭数据库连接 + * 通过getWritableDatabase()或getReadableDatabase()方法获取和数据库的连接后对数据库进行操作 + */ +public class DataBaseHandler extends SQLiteOpenHelper { + private static final String DB_NAME = "statlog.db"; + private static final int DB_VERSION = 1; + + private static DataBaseHandler mDataBaseHandler = null; + private ReentrantLock lock = null; + + /* + * 构造函数 + * + * @param context上下文 + * @param dbName数据库名 + * @param dbVersion数据库版本号 + */ + protected DataBaseHandler(Context context, String dbName, int dbVersion) { + super(context, dbName, null, dbVersion); + } + + protected DataBaseHandler(Context context) { + this(context, DB_NAME, DB_VERSION); + } + + protected DataBaseHandler(Context context, int dbVersion) { + this(context, DB_NAME, dbVersion); + } + + /* + * 读接口 + */ + public static DataBaseHandler readInstance(Context context) { + return new DataBaseHandler(context); + } + + /* + * 写接口 + */ + public static synchronized DataBaseHandler writeInstance(Context context) { + if (mDataBaseHandler == null) { + mDataBaseHandler = new DataBaseHandler(context); + } + return mDataBaseHandler; + } + + @Override + public void onCreate(SQLiteDatabase db) { + // TODO Auto-generated method stub + /*db.execSQL();*/ + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // TODO Auto-generated method stub + } + + // 获得和数据库的连接对象 + // getWritableDatabase和getReadableDatabase会自动创建数据库打开并获取其引用 + public SQLiteDatabase getReadConnection(String methodName) { + Log.e("dblog", methodName + " read begin"); + SQLiteDatabase connection = null; + try { + connection = getReadableDatabase(); + } catch (Exception e) { + e.printStackTrace(); + } + Log.e("dblog", methodName + " read end"); + return connection; + } + + public synchronized SQLiteDatabase getWriteConnection(String methodName) { + Log.e("dblog", methodName + " write begin"); + if (lock == null) + lock = new ReentrantLock(); + lock.lock(); + SQLiteDatabase connection = null; + try { + connection = getWritableDatabase(); + } catch (Exception e) { + e.printStackTrace(); + } + Log.e("dblog", methodName + " write end"); + return connection; + } + + // 关闭用完的数据库连接 + public void closeConnection(SQLiteDatabase connection, String methodName) { + Log.e("dblog", methodName + " close begin"); + if (connection.isOpen()) { + connection.close(); + } + if (lock != null) + lock.unlock(); + Log.e("dblog", methodName + " close end"); + } + + // 关闭数据库 + public void close() { + super.close(); + } + + public boolean createTableWithSQL(String sql) { + boolean result = false; + SQLiteDatabase db = getWriteConnection("createTableWithSQL"); + if (db != null) { + db.execSQL(sql); + result = true; + } else { + result = false; + } + closeConnection(db, "createTableWithSQL"); + return result; + } + +} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java new file mode 100644 index 0000000..5a70773 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java @@ -0,0 +1,50 @@ +/* + * ReadDataBaseAccess.java + * + * Created by: 唐俊豪 on 2014-1-9 + * Copyright (c) 2014年 SAIC. All rights reserved. + */ +package com.tamic.statInterface.statsdk.db.database; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; + +import com.tamic.statInterface.statsdk.db.TcNote; + +import java.util.ArrayList; + + +public class ReadDataBaseAccess { + private DataBaseHandler handler = null; + private static ReadDataBaseAccess readAccess = null; + private static boolean isConnectionBusy = false; + + protected ReadDataBaseAccess(Context context) { + handler = DataBaseHandler.readInstance(context); + } + + public static synchronized ReadDataBaseAccess shareInstance(Context context) { + readAccess = new ReadDataBaseAccess(context); + return readAccess; + } + + + //查询所有的note + public ArrayList loadAll() { + SQLiteDatabase connection = handler.getReadConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); + Cursor cursor = connection.rawQuery("select * from T_Note", null); + ArrayList notes = new ArrayList<>(); + while (cursor.moveToNext()) { + TcNote note = new TcNote(); + note.setFirstCloumn(cursor.getString(1)); + note.setSecondCloumn(cursor.getString(2)); + note.setThirdCloumn(cursor.getString(3)); + note.setForthCloumn(cursor.getString(4)); + notes.add(note); + } + cursor.close(); + handler.closeConnection(connection, Thread.currentThread().getStackTrace()[2].getMethodName()); + return notes; + } +} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java new file mode 100644 index 0000000..8f650ec --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java @@ -0,0 +1,114 @@ +/* + * WriteDataBaseAccess.java + * + * Created by: 唐俊豪 on 2014-1-9 + * Copyright (c) 2014年 SAIC. All rights reserved. + */ +package com.tamic.statInterface.statsdk.db.database; + +import android.content.ContentValues; +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteStatement; + +import com.tamic.statInterface.statsdk.db.TcNote; + +import java.util.ArrayList; + +public class WriteDataBaseAccess { + private DataBaseHandler handler = null; + private static WriteDataBaseAccess writeAccess = null; + private Context context; + + public WriteDataBaseAccess(Context context) { + handler = DataBaseHandler.writeInstance(context); + this.context = context; + } + + public static WriteDataBaseAccess shareInstance(Context context) { + if (writeAccess == null) { + writeAccess = new WriteDataBaseAccess(context); + } + return writeAccess; + } + + /** + * 数据库插入相关接口 + */ + //添加接口 + public boolean insertData(Object obj) { + if (obj instanceof TcNote) { + return insertNote((TcNote) obj); + } else { + System.out.println("Unknown object!"); + return false; + } + } + + + private boolean insertNote(TcNote note) { + ContentValues values = new ContentValues(); + values.put("firstcloumn", note.getFirstCloumn()); + values.put("secondCloumn", note.getSecondCloumn()); + values.put("thirdCloumn", note.getThirdCloumn()); + values.put("forthCloumn", note.getForthCloumn()); + SQLiteDatabase connection = handler.getWriteConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); + long result = connection.insert("T_Note", null, values); + if (!connection.inTransaction()) { + handler.closeConnection(connection, Thread.currentThread().getStackTrace()[2].getMethodName()); + } + return (result != -1); + } + + //批量添加接口 + public boolean insertDatas(ArrayList list) { + if (list.isEmpty()) { + System.out.println("no datas"); + return false; + } else { + if (list.get(0) instanceof TcNote) { + return insertTcNotes(list); + } else { + System.out.println("Unknown object!"); + return false; + } + } + } + + private boolean insertTcNotes(ArrayList notes) { + boolean result = false; + SQLiteDatabase connection = handler.getWriteConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); + String sql = "insert into T_Note (firstCloumn,secondCloumn,thirdCloumn,forthCloumn) values (?,?,?,?)"; + connection.beginTransaction(); + try { + SQLiteStatement stmt = connection.compileStatement(sql); + for (int i = 0; i < notes.size(); i++) { + TcNote note = (TcNote) notes.get(i); + stmt.bindString(1, note.getFirstCloumn()); + stmt.bindString(2, note.getSecondCloumn()); + stmt.bindString(3, note.getThirdCloumn()); + stmt.bindString(4, note.getForthCloumn()); + stmt.execute(); + stmt.clearBindings(); + } + connection.setTransactionSuccessful(); + result = true; + } catch (Exception e) { + e.printStackTrace(); + result = false; + } finally { + connection.endTransaction(); + handler.closeConnection(connection, Thread.currentThread().getStackTrace()[2].getMethodName()); + } + return result; + } + + public boolean deleteAllNote() { + SQLiteDatabase connection = handler.getWriteConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); + int result = connection.delete("T_Note", "1=?", new String[]{"1"}); + if (!connection.inTransaction()) { + handler.closeConnection(connection, Thread.currentThread().getStackTrace()[2].getMethodName()); + } + return result != -1; + } +} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/NoteDaoHelper.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/NoteDaoHelper.java deleted file mode 100644 index 01d3f48..0000000 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/NoteDaoHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.tamic.statInterface.statsdk.db.helper; - -import android.content.Context; -import android.database.sqlite.SQLiteDatabase; - -import com.tamic.statInterface.statsdk.db.DaoMaster; -import com.tamic.statInterface.statsdk.db.DaoSession; -import com.tamic.statInterface.statsdk.db.TcNoteDao; - -/** - * Created by Tamic on 2016-03-16. - */ -public class NoteDaoHelper { - private SQLiteDatabase db; - private DaoMaster daoMaster; - private DaoSession daoSession; - private TcNoteDao paNoteDao ; - - public TcNoteDao getPaNoteDao(Context context){ - if(paNoteDao == null){ - paNoteDao = getDaoSession(context).getPaNoteDao(); - } - return paNoteDao ; - } - - - - - private DaoMaster getDaoMaster(Context context){ - if(daoMaster == null){ - DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "tamic-db", null); - db = helper.getWritableDatabase(); - daoMaster = new DaoMaster(db); - } - return daoMaster ; - } - - private DaoSession getDaoSession(Context context){ - if(daoSession == null){ - daoSession = getDaoMaster(context).newSession(); - } - return daoSession ; - } - - - - -} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java index f199999..01c3579 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java @@ -5,10 +5,13 @@ import com.alibaba.fastjson.JSONObject; import com.tamic.statInterface.statsdk.db.TcNote; -import com.tamic.statInterface.statsdk.db.TcNoteDao; +import com.tamic.statInterface.statsdk.db.database.DataAccess; +import com.tamic.statInterface.statsdk.db.database.ReadDataBaseAccess; +import com.tamic.statInterface.statsdk.db.database.WriteDataBaseAccess; import com.tamic.statInterface.statsdk.model.AppAction; import com.tamic.statInterface.statsdk.model.DataBlock; import com.tamic.statInterface.statsdk.model.Event; +import com.tamic.statInterface.statsdk.model.ExceptionInfo; import com.tamic.statInterface.statsdk.model.Page; import com.tamic.statInterface.statsdk.util.JsonUtil; @@ -19,16 +22,18 @@ * Created by Tamic on 2016-03-17. */ public class StaticsAgent { - private static NoteDaoHelper helper; - private static TcNoteDao noteDao; + private static Context mContext; private static TcNote note; /** * @param context */ public static void init(Context context) { - helper = new NoteDaoHelper(); - noteDao = helper.getPaNoteDao(context); + + mContext = context; + + DataAccess.shareInstance(context).createAllTables(); + } /** @@ -64,43 +69,63 @@ public static void storeEvent(String eventString) { storeData("", "", eventString); } + /** + * storePage + * + * @param exceptionInfo + */ + public static void storeException(String exceptionInfo) { + if (TextUtils.isEmpty(exceptionInfo)) + throw new NullPointerException("exceptionInfo is null"); + storeData("", "", "", exceptionInfo); + } + public static DataBlock getDataBlock() { DataBlock dataBlock = new DataBlock(); - List list = noteDao.loadAll(); + List list = ReadDataBaseAccess.shareInstance(mContext).loadAll(); AppAction appAction = new AppAction(); Page page = new Page(); Event event = new Event(); + ExceptionInfo exceptionInfo = new ExceptionInfo(); List actionList = new ArrayList(); List pageList = new ArrayList(); List eventList = new ArrayList(); + List exceptionInfos = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { - if (!TextUtils.isEmpty(list.get(i).getFirstcloumn())) { - appAction = JsonUtil.parseObject(list.get(i).getFirstcloumn(), AppAction.class); + if (!TextUtils.isEmpty(list.get(i).getFirstCloumn())) { + appAction = JsonUtil.parseObject(list.get(i).getFirstCloumn(), AppAction.class); actionList.add(appAction); } - if (!TextUtils.isEmpty(list.get(i).getSecondcloumn())) { - page = JsonUtil.parseObject(list.get(i).getSecondcloumn(), Page.class); + if (!TextUtils.isEmpty(list.get(i).getSecondCloumn())) { + page = JsonUtil.parseObject(list.get(i).getSecondCloumn(), Page.class); pageList.add(page); } - if (!TextUtils.isEmpty(list.get(i).getThirdcloumn())) { - event = JsonUtil.parseObject(list.get(i).getThirdcloumn(), Event.class); + if (!TextUtils.isEmpty(list.get(i).getThirdCloumn())) { + event = JsonUtil.parseObject(list.get(i).getThirdCloumn(), Event.class); eventList.add(event); + }if (!TextUtils.isEmpty(list.get(i).getForthCloumn())) { + exceptionInfo = JsonUtil.parseObject(list.get(i).getForthCloumn(), ExceptionInfo.class); + exceptionInfos.add(exceptionInfo); } } dataBlock.setApp_action(actionList); dataBlock.setPage(pageList); + dataBlock.setExceptionInfos(exceptionInfos); dataBlock.setEvent(eventList); return dataBlock; } + public static void storeData(String firstcloumn, String secondcloumn, String thirdcloumn) { + storeData(firstcloumn, secondcloumn, thirdcloumn, null); + } - public static void storeData(String appActionInfo, String pageInfo, String eventInfo) { - note = new TcNote(null, appActionInfo, pageInfo, eventInfo); - if (null != helper) { - noteDao.insert(note); - } + + public static void storeData(String firstcloumn, String secondcloumn, String thirdcloumn, String forthCloumn) { + note = new TcNote(null, firstcloumn, secondcloumn, thirdcloumn, forthCloumn); + WriteDataBaseAccess.shareInstance(mContext).insertData(note); } + /** * storeObject * @@ -113,11 +138,14 @@ public static void storeObject(Object o) { storeAppAction(JSONObject.toJSONString(o)); } else if (o instanceof Page) { storePage(JSONObject.toJSONString(o)); + } else if (o instanceof ExceptionInfo) { + storeException(JSONObject.toJSONString(o)); } + } public static void deleteData() { - noteDao.deleteAll(); + WriteDataBaseAccess.shareInstance(mContext).deleteAllNote(); } } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java new file mode 100644 index 0000000..6f3dd83 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java @@ -0,0 +1,55 @@ +package com.tamic.statInterface.statsdk.model; + +/** + * Created by null on 2016/9/22. + */ +public class ExceptionInfo { + private String phoneModel; + private String systemModel; + private String systemVersion; + private String exceptionString; + + + public ExceptionInfo() { + + } + + public ExceptionInfo(String phoneModel, String systemModel, String systemVersion, String exceptionString) { + this.phoneModel = phoneModel; + this.systemModel = systemModel; + this.systemVersion = systemVersion; + this.exceptionString = exceptionString; + } + + public String getPhoneModel() { + return phoneModel; + } + + public void setPhoneModel(String phoneModel) { + this.phoneModel = phoneModel; + } + + public String getSystemModel() { + return systemModel; + } + + public void setSystemModel(String systemModel) { + this.systemModel = systemModel; + } + + public String getSystemVersion() { + return systemVersion; + } + + public void setSystemVersion(String systemVersion) { + this.systemVersion = systemVersion; + } + + public String getExceptionString() { + return exceptionString; + } + + public void setExceptionString(String exceptionString) { + this.exceptionString = exceptionString; + } +} From a4a61ef8987c052771ab937d342e5f3a7468cd80 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Mon, 26 Sep 2016 17:42:42 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0crash=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=94=B6=E9=9B=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statsdk/constants/StaticsConfig.java | 14 +------------ .../statsdk/core/TcStaticsManagerImpl.java | 3 +++ .../statsdk/model/DataBlock.java | 10 +++++++++ .../statsdk/util/DeviceUtil.java | 21 +++++++++++++++++++ 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java index e22199f..7913c75 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java @@ -1,7 +1,4 @@ package com.tamic.statInterface.statsdk.constants; - -import de.greenrobot.dao.Property; - /** * StaticsConfig * Created by Tamic on 2016-03-30. @@ -22,16 +19,7 @@ private StaticsConfig() { public final static String ENVENT_INFO = "enventInfo"; public final static String CRASH_INFO = "crashInfo"; - /**1*/ - public static final int APP_ID_HF = 100; - /**1*/ - public static final int APP_ID_AAZ = 200; - /**1)*/ - public static final int APP_ID_HFT = 300; - /***/ - public static final int APP_ID_HGJ = 400; - /***/ - public static final int APP_ID_HSH = 500; + /* 1分钟,5分钟,10分钟,20分钟,30分钟发送 diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java index 090a950..6a408cb 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java @@ -54,6 +54,9 @@ public boolean onInit(int appId, String channel, String fileName) { // init StaticsAgent StaticsAgent.init(mContext); + // init CrashHandler + TcCrashHandler.getInstance().init(mContext); + // load pageIdMaps pageIdMaps = getStatIdMaps(fileName); diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java index a0eca2e..df34cf4 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java @@ -10,6 +10,16 @@ public class DataBlock { private List app_action ; private List page ; private List event ; + private ListexceptionInfos; + + + public List getExceptionInfos() { + return exceptionInfos; + } + + public void setExceptionInfos(List exceptionInfos) { + this.exceptionInfos = exceptionInfos; + } public List getApp_action() { return app_action; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java index d7ceb21..685dbc5 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java @@ -6,6 +6,7 @@ import android.content.pm.PackageManager; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.os.Build; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.WindowManager; @@ -128,6 +129,26 @@ public static float getScreenDensity(Context context) { return context.getResources().getDisplayMetrics().density; } + /** + * 获取当前手机型号 + */ + public static String getPhoneModel() { + return android.os.Build.MODEL; + } + + + /** + * 获取手机系统类型 + */ + public static String getSystemModel() { + return Build.BRAND; + } + + /**获取手机系统版本*/ + public static int getSystemVersion() { + return Build.VERSION.SDK_INT; + } + } From d899f9f9030154bc31110be123fc48ef0860a64b Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Mon, 26 Sep 2016 17:44:06 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E6=9F=90=E4=BA=9B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StatInterface/build.gradle | 1 - .../bundles/release/AndroidManifest.xml | 19 ++++++++++++++++++- .../bundles/release/res/values/values.xml | 2 +- app/src/main/AndroidManifest.xml | 11 ++++++----- .../com/tamic/statsdkdemo/StatAppliation.java | 3 +++ app/src/main/res/values/strings.xml | 2 +- 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/StatInterface/build.gradle b/StatInterface/build.gradle index 3f9a105..6736163 100644 --- a/StatInterface/build.gradle +++ b/StatInterface/build.gradle @@ -20,7 +20,6 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'de.greenrobot:greendao:2.1.0' compile 'com.alibaba:fastjson:1.2.8+' compile 'com.loopj.android:android-async-http:1.4.9' } diff --git a/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml b/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml index 15eb723..001b770 100644 --- a/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml +++ b/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml @@ -10,6 +10,15 @@ + + + + + + + + + - + + + + + + +
diff --git a/StatInterface/build/intermediates/bundles/release/res/values/values.xml b/StatInterface/build/intermediates/bundles/release/res/values/values.xml index aed9459..7a17175 100644 --- a/StatInterface/build/intermediates/bundles/release/res/values/values.xml +++ b/StatInterface/build/intermediates/bundles/release/res/values/values.xml @@ -1,6 +1,6 @@ - + statLibrary \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ae4b829..f175f95 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,23 +1,24 @@ + package="com.tamic.statsdkdemo"> + android:taskAffinity="string" + android:theme="@style/AppTheme"> + android:label="@string/app_name"> - + @@ -29,7 +30,7 @@ - + diff --git a/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java b/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java index cfcb0ee..144b4db 100644 --- a/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java +++ b/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java @@ -15,10 +15,13 @@ public void onCreate() { int appId = 21212; // assets String fileName = "stat_id.json"; + String url = "http://www.baidu.com"; // init statSdk TcStatInterface.initialize(this, appId, "you app chanel", fileName); + // set upload url TcStatInterface.setUrl(url); + // Set loadPolicy TcStatInterface.setUploadPolicy(TcStatInterface.UploadPolicy.UPLOAD_POLICY_DEVELOPMENT, TcStatInterface.UPLOAD_TIME_ONE); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0447da9..bb77582 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - StaticticsSdkDemo + TcSdk_Demo Hello world! Settings From b26942dc1adc6e8bc6139a74a34e7481425a6336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tamic=20=28=E7=A0=81=E5=B0=8F=E7=99=BD=29?= <719887916@qq.com> Date: Mon, 26 Sep 2016 17:48:39 +0800 Subject: [PATCH 05/18] Update README.md --- README.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a22ecdd..6f40e71 100644 --- a/README.md +++ b/README.md @@ -115,20 +115,35 @@ API说明 4.3 加入权限 见2.1的说明。 - 4.4 初始化 + 4.4 初始化 + + Application的onCreate(): + + // assets + String fileName = "stat_id.json"; + + String url = "http://www.baidu.com"; + // init statSdk + TcStatInterface.initialize(this, appId, "you app chanel", fileName); + // set upload url + TcStatInterface.setUrl(url); + 见2.3说明 具体见demo 4.5 其他 + 如果你还在用Eclispe,直接用源码或者依赖jar - TcStatSdk_1.0.jar + + TcStatSdk_2.0.jar 注意 -- - 目前服务端代码需要你自我实现,数据结结构按客户端数据Modle实现即可。 + + 目前服务端代码需要你自我实现,数据结结构按客户端数据Model实现即可。 > 作者:Tamic : http://www.jianshu.com/p/cd83e81b78aa -> 统计数据存储前期:Zhangliang +> crash日志:NULL From c3d1c1118a5ab5bb1048e93fd6d92d05ca68cbc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tamic=20=28=E7=A0=81=E5=B0=8F=E7=99=BD=29?= <719887916@qq.com> Date: Mon, 26 Sep 2016 17:50:25 +0800 Subject: [PATCH 06/18] Update README.md --- README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/README.md b/README.md index 6f40e71..74612d6 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,7 @@ API说明 include ':app' ,':StatInterface' 4.3 加入权限 + 见2.1的说明。 4.4 初始化 @@ -135,6 +136,35 @@ API说明 如果你还在用Eclispe,直接用源码或者依赖jar TcStatSdk_2.0.jar + + 4.6 调用 + + + + findViewById(R.id.id_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + TcStatInterface.onEvent("main", "onlick", "send data"); + //发送数据 + TcStatInterface.reportData(); + + } + + }); + + findViewById(R.id.id_button2).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + // 测试 + TcStatInterface.onEventParameter("onclick", "open next"); + + Intent intent = new Intent(MainActivity.this, SecondActivity.class); + startActivity(intent); + + } + + }); 注意 -- From b0627e5734954c36b6b1db609ba79146129314d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tamic=20=28=E7=A0=81=E5=B0=8F=E7=99=BD=29?= <719887916@qq.com> Date: Mon, 26 Sep 2016 17:52:06 +0800 Subject: [PATCH 07/18] Update README.md --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 74612d6..bf51dbf 100644 --- a/README.md +++ b/README.md @@ -84,12 +84,12 @@ APP常规数据统计 设置上报策略的代码示例如下: - // 设置策略模式 第一个是策略模式 ,第二是是时间(单位/分) + + // 设置策略模式 第一个是策略模式 ,第二是是时间(单位/分) TcStatInterface.setUploadPolicy(TcStatInterface.UploadPolicy.UPLOAD_POLICY_INTERVA, 3); - - + API说明 @@ -99,7 +99,8 @@ API说明 请具体看demo 注释 5. 集成步骤 -4.1 依赖项目 + +5.1 依赖项目 gradle中配置依赖module, 将项目增加为自己的子模块 @@ -109,14 +110,14 @@ API说明 compile project(':StatInterface') } - 4.2 配置Settings.gradle + 5.2 配置Settings.gradle include ':app' ,':StatInterface' - 4.3 加入权限 + 5.3 加入权限 见2.1的说明。 - 4.4 初始化 + 5.4 初始化 Application的onCreate(): @@ -131,13 +132,13 @@ API说明 见2.3说明 具体见demo - 4.5 其他 + 5.5 其他 如果你还在用Eclispe,直接用源码或者依赖jar TcStatSdk_2.0.jar - 4.6 调用 + 5.6 调用 From 20efe73893659378a7f870838187d4ab9152a88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tamic=20=28=E7=A0=81=E5=B0=8F=E7=99=BD=29?= <719887916@qq.com> Date: Mon, 26 Sep 2016 17:54:11 +0800 Subject: [PATCH 08/18] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bf51dbf..cff7cd0 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ 自定义统计SDK, 完全放弃第三方平台,让app拥有自主的数据统计功能 >支持页面统计 >自定义事件统计 ->APP启动退出统计,不同渠道统计 +>APP启动退出统计,crsah日志统计 From 6d07e8ca4a32f10972b035ab65df667824792710 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Mon, 26 Sep 2016 18:00:32 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tamic/statInterface/statsdk/db/database/DataAccess.java | 2 +- .../statInterface/statsdk/db/database/DataBaseHandler.java | 6 ++---- .../statsdk/db/database/ReadDataBaseAccess.java | 2 +- .../statsdk/db/database/WriteDataBaseAccess.java | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java index a62d629..533e68e 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java @@ -1,7 +1,7 @@ /* * DataAccess.java * - * Created by: 唐俊豪 on 2014-1-9 + * Created by: NuLL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ package com.tamic.statInterface.statsdk.db.database; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java index be5faa9..be3fbdc 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java @@ -1,14 +1,12 @@ /* * DataBaseHandler.java * - * Created by: 唐俊豪 on 2014-1-9 + * Created by: NULL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ package com.tamic.statInterface.statsdk.db.database; -import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; + import java.util.concurrent.locks.ReentrantLock; import android.content.Context; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java index 5a70773..9b8f6ed 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java @@ -1,7 +1,7 @@ /* * ReadDataBaseAccess.java * - * Created by: 唐俊豪 on 2014-1-9 + * Created by: NULL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ package com.tamic.statInterface.statsdk.db.database; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java index 8f650ec..7c03181 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java @@ -1,7 +1,7 @@ /* * WriteDataBaseAccess.java * - * Created by: 唐俊豪 on 2014-1-9 + * Created by: NULL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ package com.tamic.statInterface.statsdk.db.database; From ec79cca22d54cefa6ce44e6f2e0cc922c3afea55 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Fri, 10 Mar 2017 14:44:52 +0800 Subject: [PATCH 10/18] v2.0 --- StatInterface/build.gradle | 95 +++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/StatInterface/build.gradle b/StatInterface/build.gradle index 6736163..3b4d564 100644 --- a/StatInterface/build.gradle +++ b/StatInterface/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.library' - +apply plugin: 'com.github.dcendents.android-maven' +apply plugin: 'com.jfrog.bintray' android { compileSdkVersion 23 buildToolsVersion '23.0.2' @@ -23,3 +24,95 @@ dependencies { compile 'com.alibaba:fastjson:1.2.8+' compile 'com.loopj.android:android-async-http:1.4.9' } +version = "2.0" +def siteUrl = 'https://github.com/NeglectedByBoss/TcStatInterface' +def gitUrl = 'https://github.com/NeglectedByBoss/TcStatInterface.git' +group = "com.tamic" + +install { + repositories.mavenInstaller { + // This generates POM.xml with proper parameters + pom { + project { + packaging 'aar' + // Add your description here + name 'TcStat' + url siteUrl + // Set your license + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + developers { + developer { + id 'tamic' + name 'tamic' + email 'skay5200@163.com' + } + } + scm { + connection gitUrl + developerConnection gitUrl + url siteUrl + } + } + } + } +} + +task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' +} +task javadoc(type: Javadoc) { + source = android.sourceSets.main.java.srcDirs + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) +} +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} +artifacts { + archives javadocJar + archives sourcesJar +} + +Properties properties = new Properties() +properties.load(project.rootProject.file('local.properties').newDataInputStream()) + + +bintray { + user = properties.getProperty("bintray.user") + key = properties.getProperty("bintray.apikey") + configurations = ['archives'] + pkg { + repo = "maven" + name = "TcStat" + desc = "App 多维度统计库" + websiteUrl = siteUrl + vcsUrl = gitUrl + licenses = ["Apache-2.0"] + labels = ['android'] + publish = true + publicDownloadNumbers = true + } +} + + +javadoc { + options{ + encoding "UTF-8" + charSet 'UTF-8' + author true + version true + links "http://docs.oracle.com/javase/7/docs/api" + } +} + +tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') + options.addStringOption('encoding', 'UTF-8') + options.addStringOption('charSet', 'UTF-8') +} \ No newline at end of file From 72171772ac2e1a67b0e82d23c75d9e661eed31ba Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Fri, 10 Mar 2017 16:25:08 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AD=98=E5=82=A8?= =?UTF-8?q?=EF=BC=8C=E5=87=8F=E5=B0=91=E6=95=B0=E6=8D=AE=E9=81=97=E6=BC=8F?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E6=96=B0=E5=A2=9E=E4=BA=8B=E4=BB=B6=E5=92=8C?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=B8=80=E8=B5=B7=E6=89=93=E7=82=B9=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statsdk/core/IUpLoadlistener.java | 19 ++- .../statsdk/core/TcStatInterface.java | 6 + .../statInterface/statsdk/core/TcStatSdk.java | 23 +++ .../statsdk/core/TcStaticsManager.java | 20 +++ .../statsdk/core/TcStaticsManagerImpl.java | 40 +++-- .../statsdk/core/TcUpLoadManager.java | 17 ++ .../statsdk/db/helper/DataConstruct.java | 159 ++++++++++++------ .../statsdk/db/helper/StaticsAgent.java | 12 +- .../statsdk/http/TcHttpClient.java | 19 ++- .../statsdk/model/DataBlock.java | 20 ++- 10 files changed, 263 insertions(+), 72 deletions(-) diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java index 04653fc..b2b4223 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java @@ -1,8 +1,25 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.core; /** * 上报状态接口 - * Created by LIUYONGKUI726 on 2016-03-25. + * Created by Tamic on 2016-03-25. */ public interface IUpLoadlistener { diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java index 74c936e..b12afd2 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java @@ -4,6 +4,8 @@ import com.tamic.statInterface.statsdk.constants.NetConfig; +import java.util.HashMap; + /** * StatInterface @@ -231,4 +233,8 @@ public static void onEvent(String eventName, String k,String v) { } + public static void onEvent(String eventName, HashMap parameters) { + TcStatSdk.getInstance(context).onEvent(eventName, parameters); + } + } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java index eccb900..75db782 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java @@ -1,7 +1,26 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.core; import android.content.Context; +import java.util.HashMap; + /** * StatSdk @@ -117,6 +136,10 @@ protected void setEventParameter(String k, String v) { } + protected void onEvent(String eventName, HashMap parameters) { + this.staticsManager.onEvent(eventName, parameters); + } + protected void initPage(String pageId, String referPageId) { staticsManager.onInitPage(pageId, referPageId); diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java index f042c33..369722c 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java @@ -1,7 +1,26 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.core; import android.content.Context; +import java.util.HashMap; + /** * Created by Tamic on 2016-04-05. * StaticsManager @@ -32,5 +51,6 @@ public interface TcStaticsManager { void onEventParameter(String... strings); + void onEvent(String var1, HashMap var2); } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java index 6a408cb..1401035 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.core; import android.content.Context; @@ -88,7 +105,7 @@ public void run() { @Override public void onStore() { - DataConstruct.storeEvent(); + DataConstruct.storeEvents(); DataConstruct.storePage(); } @@ -112,7 +129,7 @@ public void onRecordAppStart() { @Override public void onRrecordPageEnd() { - DataConstruct.storeEvent(); + DataConstruct.storeEvents(); DataConstruct.storePage(); if (paObserverPresenter != null) { paObserverPresenter.onStop(mContext); @@ -127,10 +144,9 @@ public void onRecordPageStart(Context context) { return; } - //开始计时 + //startSchedule startSchedule(); - String pageId = checkValidId(context.getClass().getSimpleName()); if (pageId == null) { pageId = context.getClass().getSimpleName(); @@ -162,30 +178,28 @@ public void onRrecordAppEnd() { @Override public void onInitPage(String... strings) { - DataConstruct.initPage(mContext, eventInterface, strings[0], strings[1]); - } @Override public void onPageParameter(String... strings) { - DataConstruct.initPageParameter(strings[0], strings[1]); - } @Override public void onInitEvent(String eventName) { - DataConstruct.initEvent(eventInterface, eventName); } @Override public void onEventParameter(String... strings) { - DataConstruct.onEvent(strings[0], strings[1]); + } + @Override + public void onEvent(String eventName, HashMap parameters) { + DataConstruct.initEvent(this.eventInterface, eventName, parameters); } /** @@ -193,11 +207,9 @@ public void onEventParameter(String... strings) { */ private boolean initHeader(int appId, String channel) { - if (!TcHeadrHandle.isInit()) { return TcHeadrHandle.initHeader(mContext, appId, channel); } - return false; } @@ -208,7 +220,6 @@ private boolean initHeader(int appId, String channel) { void onScheduleTimeOut() { StatLog.d(LOG_TAG, "onScheduleTimeOut is sendData"); - onSend(); } @@ -227,7 +238,6 @@ public void startSchedule() { } else { statiPollMgr.start(TcStatInterface.UPLOAD_TIME_THIRTY * 60 *1000); } - } } @@ -278,7 +288,6 @@ public void onStart() { @Override public void onStop() { - stopSchedule(); } @@ -293,7 +302,6 @@ public void onReStart() { public HashMap getStatIdMaps(String jsonName) { - HashMap map = null; if (getFromAsset(jsonName) != null) { map = (HashMap) JSON.parseObject(getFromAsset("stat_id.json"), HashMap.class); diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java index 5e7e1d3..a7e5663 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.core; import android.content.Context; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java index 845bc8f..5a83dca 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java @@ -1,6 +1,5 @@ package com.tamic.statInterface.statsdk.db.helper; -import android.app.Activity; import android.content.Context; import android.text.TextUtils; @@ -13,93 +12,125 @@ import com.tamic.statInterface.statsdk.util.DateUtil; import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ConcurrentSkipListMap; +import java.util.concurrent.CopyOnWriteArrayList; /** - * DataConstruct - * Created by tamic on 2016-04-11. + * Created by Tamic on 2016-04-11. */ public class DataConstruct { private static Event event = null; - private static ArrayList parameter = new ArrayList<>() ; - - private static Page page = null ; - private static ArrayList pageParameter = new ArrayList<>() ; - - private static AppAction appAction = null ; - + private static CopyOnWriteArrayList parameter = new CopyOnWriteArrayList<>(); + private static ConcurrentSkipListMap events = new ConcurrentSkipListMap<>(); + private static Page page = null; + private static ArrayList pageParameter = new ArrayList<>(); + private static AppAction appAction = null; private static StaticsListener staticsListener; - private static String pageId; - private static String referPageId; - private static String REFERPAGE_ID = "referPage_Id"; private DataConstruct() { } - - /** * initEvent + * * @param eventInterface * @param event_name */ - public static void initEvent(StaticsListener eventInterface, String event_name){ - event = new Event(); + public static void initEvent(StaticsListener eventInterface, String event_name) { + initEvent(eventInterface, event_name, null); + } + + /** + * initEvent 带参数的事件 + * @param eventInterface + * @param eventName 事件ID + * @param parameters 事件参数(k-v) + */ + public static synchronized void initEvent(StaticsListener eventInterface, String eventName, Map parameters) { + + if (eventInterface == null || TextUtils.isEmpty(eventName)) { + throw new RuntimeException("you must set eventName!"); + } + + Event event = new Event(); event.setPage_id(pageId); event.setReferer_page_id(referPageId); - event.setEvent_name(event_name); + event.setEvent_name(eventName); event.setAction_time(DateUtil.getDateString(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); + + if (parameters !=null && !parameters.isEmpty() && parameters.size() > 0) { + CopyOnWriteArrayList parameter = new CopyOnWriteArrayList<>(); + + Iterator keys = parameters.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + if (parameters.get(key) != null) { + parameter.add(new KeyValueBean(key, parameters.get(key))); + } + } + if (!parameter.isEmpty()) { + event.setParameter(parameter); + } + } + storeEvent(event); } /** - * onEvent + * onEvent parameter 自定义业务类型统计 k-v + * * @param businessName * @param businessValue */ - public static void onEvent(String businessName,String businessValue){ + public static void onEvent(String businessName, String businessValue) { + if (TextUtils.isEmpty(businessName) || TextUtils.isEmpty(businessValue)) { + return; + } parameter.add(new KeyValueBean(businessName, businessValue)); - if(event == null){ + if (event == null || event.getEvent_name().isEmpty()) { throw new RuntimeException("you must call initEvent before onEvent!"); } - event.setParameter(parameter); + event.setParameter(parameter); + events.put(event.getEvent_name(), event); + parameter.clear(); } - /** - * storeEvent - * Activity destory call - */ - public static void storeEvent(){ - if(event == null){ - return; - } - StaticsAgent.storeObject(event); - } /** - * initPage + * initPage + * * @param eventInterface */ - public static void initPage(Context context, StaticsListener eventInterface, String page_Id, String referPage_Id){ + public static void initPage(Context context, StaticsListener eventInterface, String page_Id, String referPage_Id) { staticsListener = eventInterface; pageId = page_Id; - recardPageId(context, page_Id); - if (TextUtils.isEmpty(referPage_Id)){ + if (TextUtils.isEmpty(referPage_Id)) { referPageId = getReferPageId(context); } else { referPageId = referPage_Id; } + recardPageId(context, page_Id); page = new Page(); page.setPage_start_time(DateUtil.getDateString(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); page.setReferer_page_id(referPageId); page.setPage_id(pageId); + pageParameter.clear(); } - public static void initPageParameter(String name,String value){ + public static void initPageParameter(String name, String value) { + if (TextUtils.isEmpty(name) || TextUtils.isEmpty(value)) { + return; + } + if (page == null) { + return; + } pageParameter.add(new KeyValueBean(name, value)); page.setParameter(pageParameter); } @@ -108,8 +139,8 @@ public static void initPageParameter(String name,String value){ /** * storePage */ - public static void storePage(){ - if(page == null){ + public static void storePage() { + if (page == null) { throw new RuntimeException("you must init before storePage"); } page.setPage_end_time(DateUtil.getDateString(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); @@ -119,41 +150,75 @@ public static void storePage(){ /** * storeAppAction - * @param type 1 app打开 2app关闭 3唤醒 + * + * @param type 1 app打开 2app关闭 3唤醒 */ - public static void storeAppAction(String type){ + public static void storeAppAction(String type) { appAction = new AppAction(); appAction.setAction_time(DateUtil.getDateString(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss")); appAction.setApp_action_type(type); StaticsAgent.storeObject(appAction); + appAction = null; } + /** + * storeEvent + *you need store to call this + */ + private static synchronized void storeEvent(Event event) { + if (event == null) { + return; + } + StaticsAgent.storeObject(event); + } /** - * deleteData + * storeEvent + * Activity destory call */ - public static void deleteData(){ + public static synchronized void storeEvents() { + if (events == null || events.size() == 0) { + return; + } + if (events.size() > 0) { + Iterator keys = events.keySet().iterator(); + while (keys.hasNext()) { + String key = keys.next(); + StaticsAgent.storeObject(events.get(key)); + } + } + event = null; + events.clear(); + + } + + + + /** + deleteData + */ + public static void deleteData() { StaticsAgent.deleteData(); } /** * recardPageId + * * @param context * @param page_Id */ - private static void recardPageId (Context context, String page_Id) { + private static void recardPageId(Context context, String page_Id) { SharedPreferencesHelper.getInstance(context).putString(REFERPAGE_ID, page_Id); } /** * get ReferPageId + * * @param context * @return */ - private static String getReferPageId (Context context) { + private static String getReferPageId(Context context) { return SharedPreferencesHelper.getInstance(context).getString(REFERPAGE_ID); } - - } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java index 01c3579..54007b9 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java @@ -37,8 +37,7 @@ public static void init(Context context) { } /** - * 存储appAction相关信息 - * + * storeAppAction * @param appAction */ public static void storeAppAction(String appAction) { @@ -87,9 +86,9 @@ public static DataBlock getDataBlock() { Page page = new Page(); Event event = new Event(); ExceptionInfo exceptionInfo = new ExceptionInfo(); - List actionList = new ArrayList(); - List pageList = new ArrayList(); - List eventList = new ArrayList(); + List actionList = new ArrayList<>(); + List pageList = new ArrayList<>(); + List eventList = new ArrayList<>(); List exceptionInfos = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { if (!TextUtils.isEmpty(list.get(i).getFirstCloumn())) { @@ -144,9 +143,10 @@ public static void storeObject(Object o) { } - public static void deleteData() { + public static synchronized void deleteData() { WriteDataBaseAccess.shareInstance(mContext).deleteAllNote(); } + } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java index dacd28b..8bad125 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.http; import android.content.Context; @@ -7,7 +24,7 @@ import cz.msebera.android.httpclient.Header; /** - * Created by LIUYONGKUI726 on 2016-05-26. + * Created by Tamic on 2016-05-26. */ public class TcHttpClient { diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java index df34cf4..7b63fc2 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java @@ -1,10 +1,28 @@ +/* + * Copyright (C) 2016 Tamic + * + * link :https://github.com/Tamicer + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.tamic.statInterface.statsdk.model; + import java.util.List; /** * 上传数据对象bean - * Created by ZHANGLIANG098 on 2016-03-24. + * Created by tamic on 2016-03-24. */ public class DataBlock { private List app_action ; From cd9b00ce76cf5cf3742d75c3bf0516726be4b029 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Fri, 10 Mar 2017 16:35:01 +0800 Subject: [PATCH 12/18] v2.1 --- StatInterface/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/StatInterface/build.gradle b/StatInterface/build.gradle index 3b4d564..39855b0 100644 --- a/StatInterface/build.gradle +++ b/StatInterface/build.gradle @@ -8,7 +8,7 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 23 - versionCode 1 + versionCode 2 versionName "1.0" } buildTypes { @@ -24,7 +24,7 @@ dependencies { compile 'com.alibaba:fastjson:1.2.8+' compile 'com.loopj.android:android-async-http:1.4.9' } -version = "2.0" +version = "2.1" def siteUrl = 'https://github.com/NeglectedByBoss/TcStatInterface' def gitUrl = 'https://github.com/NeglectedByBoss/TcStatInterface.git' group = "com.tamic" From c72a8f5ad5128ebe2ef05bdc7c867bd306dd0343 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Fri, 10 Mar 2017 16:49:08 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B92.1=E7=9A=84?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=A4=BA=E5=88=97=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tamic/statsdkdemo/MainActivity.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java b/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java index 36be676..40033fd 100644 --- a/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java +++ b/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java @@ -6,6 +6,8 @@ import com.tamic.statInterface.statsdk.core.TcStatInterface; +import java.util.HashMap; + public class MainActivity extends BaseActivity { @@ -16,7 +18,12 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.id_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - TcStatInterface.onEvent("main", "onlick", "send data"); + // 按钮埋了点 + HashMap map = new HashMap(); + map.put("参数1", "xxx"); + map.put("参数2", "yyyy"); + + TcStatInterface.onEvent("main", map); //发送数据 TcStatInterface.reportData(); @@ -28,8 +35,11 @@ public void onClick(View v) { @Override public void onClick(View v) { - // test - TcStatInterface.onEventParameter("onclick", "open next"); + HashMap map = new HashMap(); + map.put("参数3", "打开第二界面"); + map.put("参数4", "打开第二界面22"); + TcStatInterface.onEvent("open", map); + Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); From 29eb2696a873d1f317a9e79d8ee4f07bb8540cb3 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Tue, 20 Jun 2017 18:17:12 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D6.0=E4=BB=A5=E4=B8=8A?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=97=AE=E9=A2=98=E5=92=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E6=97=A0=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statsdk/core/TcHeadrHandle.java | 32 +++++++++++++++---- .../statInterface/statsdk/core/TcStatSdk.java | 1 + .../statsdk/core/TcStaticsManager.java | 1 + .../statsdk/core/TcStaticsManagerImpl.java | 5 +-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java index 39dac9f..ebb25a6 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java @@ -1,10 +1,12 @@ package com.tamic.statInterface.statsdk.core; +import android.Manifest; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; +import android.os.Build; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -35,7 +37,7 @@ public class TcHeadrHandle { private static HeaderInfo headerInfo; - private static boolean isInit ; + private static boolean isInit; private static int appId; @@ -47,7 +49,7 @@ protected static boolean initHeader(Context context, int AppId, String channel) if (headerInfo == null) { appId = AppId; - mChannel= channel; + mChannel = channel; networkinfo = new NetworkInfo(); headerInfo = new HeaderInfo(getAppInfo(context), getDeviceInfo(context), getNetWorkInfo(context)); isInit = true; @@ -100,8 +102,8 @@ private static AppInfo getAppInfo(Context context) { appinfo.setSdk_verson_name(DeviceUtil.getSdkName()); return appinfo; - }catch (PackageManager.NameNotFoundException e1) { - e1.printStackTrace(); + } catch (PackageManager.NameNotFoundException e1) { + e1.printStackTrace(); return null; } } @@ -176,12 +178,12 @@ protected static NetworkInfo getNetWorkInfo(Context context) { networkinfo.setWifi_ind(NetworkUtil.isWifi(context)); - if(mTelephonyMgr.getSimState() == TelephonyManager.SIM_STATE_READY) { + if (mTelephonyMgr.getSimState() == TelephonyManager.SIM_STATE_READY) { networkinfo.setCarrier(mTelephonyMgr.getSimOperatorName()); } Location location = getLocation(context); - if(location != null){ + if (location != null) { networkinfo.setLatitude(String.valueOf(location.getLatitude())); networkinfo.setLongitude(String.valueOf(location.getLongitude())); } @@ -208,8 +210,24 @@ private static Location getLocation(Context context) { locationProvider = LocationManager.NETWORK_PROVIDER; } else { - locationProvider = LocationManager.GPS_PROVIDER;; + locationProvider = LocationManager.GPS_PROVIDER; + + } + + if (Build.VERSION.SDK_INT > 23) { + if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && + context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // Activity#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for Activity#requestPermissions for more details. + return locationManager.getLastKnownLocation(locationProvider); + } } + return locationManager.getLastKnownLocation(locationProvider); } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java index 75db782..a1a1131 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java @@ -25,6 +25,7 @@ /** * StatSdk * Created by Tamic on 2016-04-05. + * {https://github.com/Tamicer/SkyMonitoring} */ public class TcStatSdk { diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java index 369722c..1feef68 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java @@ -24,6 +24,7 @@ /** * Created by Tamic on 2016-04-05. * StaticsManager + * #{https://github.com/Tamicer/SkyMonitoring} */ public interface TcStaticsManager { diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java index 1401035..6137e64 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java @@ -40,7 +40,8 @@ /** * StaticsManagerImpl core - * Created by LIUYONGKUI726 on 2016-03-24. + * Created by Tamic on 2016-03-24. + * #{https://github.com/Tamicer/SkyMonitoring} */ public class TcStaticsManagerImpl implements TcStaticsManager, TcObserverPresenter.ScheduleListener { /** context */ @@ -304,7 +305,7 @@ public HashMap getStatIdMaps(String jsonName) { HashMap map = null; if (getFromAsset(jsonName) != null) { - map = (HashMap) JSON.parseObject(getFromAsset("stat_id.json"), HashMap.class); + map = (HashMap) JSON.parseObject(getFromAsset(jsonName), HashMap.class); } return map; } From ef8637d82cead5a4386c5460a06bacd8830f2746 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Tue, 20 Jun 2017 18:22:21 +0800 Subject: [PATCH 15/18] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tamic/statsdkdemo/imp/StaticsImpl.java | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 app/src/main/java/com/tamic/statsdkdemo/imp/StaticsImpl.java diff --git a/app/src/main/java/com/tamic/statsdkdemo/imp/StaticsImpl.java b/app/src/main/java/com/tamic/statsdkdemo/imp/StaticsImpl.java deleted file mode 100644 index 5ddf6a0..0000000 --- a/app/src/main/java/com/tamic/statsdkdemo/imp/StaticsImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.tamic.statsdkdemo.imp; - -import android.content.Context; - -import com.alibaba.fastjson.JSON; -import com.tamic.statInterface.statsdk.core.StaticsListener; - -import java.io.InputStream; -import java.util.HashMap; - -import cz.msebera.android.httpclient.util.EncodingUtils; - -/** - * Created by Tmaic on 2016-04-13. - */ -public class StaticsImpl implements StaticsListener { - - - - String json; - - private Context context; - - - public StaticsImpl(Context context) { - this.context = context; - } - - @Override - public HashMap getStatIdMaps() { - - - HashMap map = null; - if (getFromAsset("stat_id.json") != null) { - map = (HashMap) JSON.parseObject(getFromAsset("stat_id.json"), HashMap.class); - } - return map; - } - - public String getFromAsset(String fileName){ - String result=""; - try{ - InputStream in = context.getResources().getAssets().open(fileName); - int length = in.available(); - byte [] buffer = new byte[length]; - in.read(buffer); - result = EncodingUtils.getString(buffer, "UTF-8"); - } - catch(Exception e){ - e.printStackTrace(); - } - return result; - } - -} From 3b33f6d45d10bb54f16cea074df2865474a58013 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Tue, 20 Jun 2017 18:22:58 +0800 Subject: [PATCH 16/18] =?UTF-8?q?2.2=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StatInterface/build.gradle | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/StatInterface/build.gradle b/StatInterface/build.gradle index 39855b0..5b8285f 100644 --- a/StatInterface/build.gradle +++ b/StatInterface/build.gradle @@ -1,6 +1,8 @@ apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' + +version = "2.2" android { compileSdkVersion 23 buildToolsVersion '23.0.2' @@ -8,8 +10,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 23 - versionCode 2 - versionName "1.0" + versionCode 3 + versionName version } buildTypes { release { @@ -24,7 +26,7 @@ dependencies { compile 'com.alibaba:fastjson:1.2.8+' compile 'com.loopj.android:android-async-http:1.4.9' } -version = "2.1" + def siteUrl = 'https://github.com/NeglectedByBoss/TcStatInterface' def gitUrl = 'https://github.com/NeglectedByBoss/TcStatInterface.git' group = "com.tamic" From 1142a399082adc28649b2f2c2398393c4698b912 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Thu, 15 Mar 2018 17:17:33 +0800 Subject: [PATCH 17/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statsdk/test/BuildConfig.java | 13 - .../statInterface/statsdk/BuildConfig.java | 13 - .../statInterface/statsdk/BuildConfig.java | 13 - .../com/tamic/statInterface/statsdk/R.java | 13 - .../tamic/statInterface/statsdk/test/R.java | 16 - .../com/tamic/statInterface/statsdk/R.java | 16 - .../com/tamic/statInterface/statsdk/R.java | 16 - .../bundles/debug/AndroidManifest.xml | 32 -- .../build/intermediates/bundles/debug/R.txt | 2 +- .../bundles/debug/aapt/AndroidManifest.xml | 32 -- .../intermediates/bundles/debug/classes.jar | Bin 94960 -> 101598 bytes .../bundles/debug/res/values/values.xml | 2 - .../bundles/release/AndroidManifest.xml | 49 --- .../build/intermediates/bundles/release/R.txt | 1 - .../bundles/release/aapt/AndroidManifest.xml | 32 -- .../intermediates/bundles/release/classes.jar | Bin 83190 -> 0 bytes .../bundles/release/res/values/values.xml | 6 - .../androidTest/debug/AndroidManifest.xml | 39 --- .../tmp/manifestMerger7085977054703475003.xml | 16 - .../res/androidTest/debug/values/values.xml | 6 - .../build/tmp/packageDebugJar/MANIFEST.MF | 2 - .../build/tmp/packageReleaseJar/MANIFEST.MF | 2 - StatInterface/src/main/AndroidManifest.xml | 7 +- .../constants/NetConfig.java | 2 +- .../constants/StaticsConfig.java | 2 +- .../core/IUpLoadlistener.java | 2 +- .../core/StaticsListener.java | 2 +- .../core/TcCrashHandler.java | 8 +- .../core/TcHeadrHandle.java | 14 +- .../core/TcIntentManager.java | 2 +- .../{statsdk => stats}/core/TcNetEngine.java | 12 +- .../core/TcObserverPresenter.java | 14 +- .../core/TcStatInterface.java | 39 +-- .../{statsdk => stats}/core/TcStatSdk.java | 2 +- .../core/TcStatiPollMgr.java | 4 +- .../core/TcStaticsManager.java | 2 +- .../core/TcStaticsManagerImpl.java | 114 +++++-- .../core/TcUpLoadManager.java | 16 +- .../core/TcUploadCoreReceiver.java | 7 +- .../{statsdk => stats}/db/Customer.java | 5 +- .../{statsdk => stats}/db/TcNote.java | 37 ++- .../db/database/DataAccess.java | 7 +- .../db/database/DataBaseHandler.java | 2 +- .../db/database/ReadDataBaseAccess.java | 25 +- .../db/database/WriteDataBaseAccess.java | 17 +- .../db/helper/DataConstruct.java | 26 +- .../stats/db/helper/NoteDaoHelper.java | 56 ++++ .../stats/db/helper/StaticsAgent.java | 301 ++++++++++++++++++ .../{statsdk => stats}/http/TcHttpClient.java | 2 +- .../{statsdk => stats}/model/AppAction.java | 2 +- .../model/AppActionList.java | 2 +- .../{statsdk => stats}/model/DataBlock.java | 2 +- .../{statsdk => stats}/model/Event.java | 2 +- .../{statsdk => stats}/model/EventList.java | 2 +- .../model/ExceptionInfo.java | 2 +- .../model/KeyValueBean.java | 2 +- .../{statsdk => stats}/model/Page.java | 2 +- .../{statsdk => stats}/model/PageList.java | 2 +- .../model/ParamterList.java | 2 +- .../model/header/AppInfo.java | 2 +- .../model/header/DeviceInfo.java | 2 +- .../model/header/HeaderInfo.java | 2 +- .../model/header/NetworkInfo.java | 2 +- .../presenter/TcDeblockObserver.java | 8 +- .../presenter/TcNetworkObserver.java | 4 +- .../presenter/TcScreenObserver.java | 6 +- .../{statsdk => stats}/service/Platform.java | 4 +- .../service/PriorityThreadFactory.java | 2 +- .../service/TcHandleThreadPool.java | 4 +- .../sp/SharedPreferencesHelper.java | 4 +- .../{statsdk => stats}/util/DateUtil.java | 2 +- .../{statsdk => stats}/util/DeviceUtil.java | 4 +- .../{statsdk => stats}/util/JsonUtil.java | 2 +- .../{statsdk => stats}/util/NetworkUtil.java | 2 +- .../{statsdk => stats}/util/PollUtil.java | 4 +- .../{statsdk => stats}/util/StatLog.java | 4 +- .../statsdk/db/helper/StaticsAgent.java | 152 --------- app/build.gradle | 10 +- app/src/main/AndroidManifest.xml | 7 +- .../com/tamic/statsdkdemo/BaseActivity.java | 8 +- .../com/tamic/statsdkdemo/MainActivity.java | 2 +- .../com/tamic/statsdkdemo/SecondActivity.java | 15 +- .../com/tamic/statsdkdemo/StatAppliation.java | 2 +- app/src/main/res/values/strings.xml | 2 +- 84 files changed, 644 insertions(+), 680 deletions(-) delete mode 100644 StatInterface/build/generated/source/buildConfig/androidTest/debug/com/tamic/statInterface/statsdk/test/BuildConfig.java delete mode 100644 StatInterface/build/generated/source/buildConfig/debug/com/tamic/statInterface/statsdk/BuildConfig.java delete mode 100644 StatInterface/build/generated/source/buildConfig/release/com/tamic/statInterface/statsdk/BuildConfig.java delete mode 100644 StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/R.java delete mode 100644 StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/test/R.java delete mode 100644 StatInterface/build/generated/source/r/debug/com/tamic/statInterface/statsdk/R.java delete mode 100644 StatInterface/build/generated/source/r/release/com/tamic/statInterface/statsdk/R.java delete mode 100644 StatInterface/build/intermediates/bundles/debug/AndroidManifest.xml delete mode 100644 StatInterface/build/intermediates/bundles/debug/aapt/AndroidManifest.xml delete mode 100644 StatInterface/build/intermediates/bundles/release/AndroidManifest.xml delete mode 100644 StatInterface/build/intermediates/bundles/release/R.txt delete mode 100644 StatInterface/build/intermediates/bundles/release/aapt/AndroidManifest.xml delete mode 100644 StatInterface/build/intermediates/bundles/release/classes.jar delete mode 100644 StatInterface/build/intermediates/bundles/release/res/values/values.xml delete mode 100644 StatInterface/build/intermediates/manifests/androidTest/debug/AndroidManifest.xml delete mode 100644 StatInterface/build/intermediates/manifests/tmp/manifestMerger7085977054703475003.xml delete mode 100644 StatInterface/build/intermediates/res/androidTest/debug/values/values.xml delete mode 100644 StatInterface/build/tmp/packageDebugJar/MANIFEST.MF delete mode 100644 StatInterface/build/tmp/packageReleaseJar/MANIFEST.MF rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/constants/NetConfig.java (92%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/constants/StaticsConfig.java (93%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/IUpLoadlistener.java (95%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/StaticsListener.java (77%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcCrashHandler.java (88%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcHeadrHandle.java (94%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcIntentManager.java (99%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcNetEngine.java (93%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcObserverPresenter.java (95%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcStatInterface.java (88%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcStatSdk.java (98%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcStatiPollMgr.java (95%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcStaticsManager.java (96%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcStaticsManagerImpl.java (74%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcUpLoadManager.java (89%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/core/TcUploadCoreReceiver.java (75%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/Customer.java (88%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/TcNote.java (71%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/database/DataAccess.java (92%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/database/DataBaseHandler.java (98%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/database/ReadDataBaseAccess.java (59%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/database/WriteDataBaseAccess.java (88%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/db/helper/DataConstruct.java (87%) create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/NoteDaoHelper.java create mode 100644 StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/StaticsAgent.java rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/http/TcHttpClient.java (98%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/AppAction.java (91%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/AppActionList.java (86%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/DataBlock.java (97%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/Event.java (96%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/EventList.java (86%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/ExceptionInfo.java (96%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/KeyValueBean.java (94%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/Page.java (96%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/PageList.java (86%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/ParamterList.java (87%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/header/AppInfo.java (95%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/header/DeviceInfo.java (97%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/header/HeaderInfo.java (94%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/model/header/NetworkInfo.java (95%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/presenter/TcDeblockObserver.java (90%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/presenter/TcNetworkObserver.java (96%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/presenter/TcScreenObserver.java (93%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/service/Platform.java (94%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/service/PriorityThreadFactory.java (94%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/service/TcHandleThreadPool.java (89%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/sp/SharedPreferencesHelper.java (98%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/util/DateUtil.java (93%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/util/DeviceUtil.java (97%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/util/JsonUtil.java (97%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/util/NetworkUtil.java (99%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/util/PollUtil.java (94%) rename StatInterface/src/main/java/com/tamic/statInterface/{statsdk => stats}/util/StatLog.java (98%) delete mode 100644 StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java diff --git a/StatInterface/build/generated/source/buildConfig/androidTest/debug/com/tamic/statInterface/statsdk/test/BuildConfig.java b/StatInterface/build/generated/source/buildConfig/androidTest/debug/com/tamic/statInterface/statsdk/test/BuildConfig.java deleted file mode 100644 index 1af0a1d..0000000 --- a/StatInterface/build/generated/source/buildConfig/androidTest/debug/com/tamic/statInterface/statsdk/test/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package com.tamic.statInterface.statsdk.test; - -public final class BuildConfig { - public static final boolean DEBUG = Boolean.parseBoolean("true"); - public static final String APPLICATION_ID = "com.tamic.statInterface.statsdk.test"; - public static final String BUILD_TYPE = "debug"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/StatInterface/build/generated/source/buildConfig/debug/com/tamic/statInterface/statsdk/BuildConfig.java b/StatInterface/build/generated/source/buildConfig/debug/com/tamic/statInterface/statsdk/BuildConfig.java deleted file mode 100644 index b24282c..0000000 --- a/StatInterface/build/generated/source/buildConfig/debug/com/tamic/statInterface/statsdk/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package com.tamic.statInterface.statsdk; - -public final class BuildConfig { - public static final boolean DEBUG = Boolean.parseBoolean("true"); - public static final String APPLICATION_ID = "com.tamic.statInterface.statsdk"; - public static final String BUILD_TYPE = "debug"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/StatInterface/build/generated/source/buildConfig/release/com/tamic/statInterface/statsdk/BuildConfig.java b/StatInterface/build/generated/source/buildConfig/release/com/tamic/statInterface/statsdk/BuildConfig.java deleted file mode 100644 index b73fd18..0000000 --- a/StatInterface/build/generated/source/buildConfig/release/com/tamic/statInterface/statsdk/BuildConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Automatically generated file. DO NOT MODIFY - */ -package com.tamic.statInterface.statsdk; - -public final class BuildConfig { - public static final boolean DEBUG = false; - public static final String APPLICATION_ID = "com.tamic.statInterface.statsdk"; - public static final String BUILD_TYPE = "release"; - public static final String FLAVOR = ""; - public static final int VERSION_CODE = 1; - public static final String VERSION_NAME = "1.0"; -} diff --git a/StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/R.java b/StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/R.java deleted file mode 100644 index 8d38c7e..0000000 --- a/StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/R.java +++ /dev/null @@ -1,13 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ -package com.tamic.statInterface.statsdk; - -public final class R { - public static final class string { - public static final int app_name = 0x7f020000; - } -} diff --git a/StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/test/R.java b/StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/test/R.java deleted file mode 100644 index 6c60325..0000000 --- a/StatInterface/build/generated/source/r/androidTest/debug/com/tamic/statInterface/statsdk/test/R.java +++ /dev/null @@ -1,16 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ - -package com.tamic.statInterface.statsdk.test; - -public final class R { - public static final class attr { - } - public static final class string { - public static final int app_name=0x7f020000; - } -} diff --git a/StatInterface/build/generated/source/r/debug/com/tamic/statInterface/statsdk/R.java b/StatInterface/build/generated/source/r/debug/com/tamic/statInterface/statsdk/R.java deleted file mode 100644 index 02c3ca0..0000000 --- a/StatInterface/build/generated/source/r/debug/com/tamic/statInterface/statsdk/R.java +++ /dev/null @@ -1,16 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ - -package com.tamic.statInterface.statsdk; - -public final class R { - public static final class attr { - } - public static final class string { - public static int app_name=0x7f020000; - } -} diff --git a/StatInterface/build/generated/source/r/release/com/tamic/statInterface/statsdk/R.java b/StatInterface/build/generated/source/r/release/com/tamic/statInterface/statsdk/R.java deleted file mode 100644 index 02c3ca0..0000000 --- a/StatInterface/build/generated/source/r/release/com/tamic/statInterface/statsdk/R.java +++ /dev/null @@ -1,16 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ - -package com.tamic.statInterface.statsdk; - -public final class R { - public static final class attr { - } - public static final class string { - public static int app_name=0x7f020000; - } -} diff --git a/StatInterface/build/intermediates/bundles/debug/AndroidManifest.xml b/StatInterface/build/intermediates/bundles/debug/AndroidManifest.xml deleted file mode 100644 index 27561f8..0000000 --- a/StatInterface/build/intermediates/bundles/debug/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/StatInterface/build/intermediates/bundles/debug/R.txt b/StatInterface/build/intermediates/bundles/debug/R.txt index a80644b..a0e507b 100644 --- a/StatInterface/build/intermediates/bundles/debug/R.txt +++ b/StatInterface/build/intermediates/bundles/debug/R.txt @@ -1 +1 @@ -int string app_name 0x7f020000 +int string app_name 0x7f150001 diff --git a/StatInterface/build/intermediates/bundles/debug/aapt/AndroidManifest.xml b/StatInterface/build/intermediates/bundles/debug/aapt/AndroidManifest.xml deleted file mode 100644 index 27561f8..0000000 --- a/StatInterface/build/intermediates/bundles/debug/aapt/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/StatInterface/build/intermediates/bundles/debug/classes.jar b/StatInterface/build/intermediates/bundles/debug/classes.jar index b8651683ebc2f990608a5220944f4e433ff02323..cd2d114c68846d324a21dfde198debdb356b2672 100644 GIT binary patch literal 101598 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

Ne#p*(0CQK3|oG3&IpX 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

jM(69~H^ASsJ6Fkc)gJFCg+$H1}RF5 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 literal 94960 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 diff --git a/StatInterface/build/intermediates/bundles/debug/res/values/values.xml b/StatInterface/build/intermediates/bundles/debug/res/values/values.xml index 7f658ad..cadb10e 100644 --- a/StatInterface/build/intermediates/bundles/debug/res/values/values.xml +++ b/StatInterface/build/intermediates/bundles/debug/res/values/values.xml @@ -1,6 +1,4 @@ - - statLibrary \ No newline at end of file diff --git a/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml b/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml deleted file mode 100644 index 001b770..0000000 --- a/StatInterface/build/intermediates/bundles/release/AndroidManifest.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/StatInterface/build/intermediates/bundles/release/R.txt b/StatInterface/build/intermediates/bundles/release/R.txt deleted file mode 100644 index a80644b..0000000 --- a/StatInterface/build/intermediates/bundles/release/R.txt +++ /dev/null @@ -1 +0,0 @@ -int string app_name 0x7f020000 diff --git a/StatInterface/build/intermediates/bundles/release/aapt/AndroidManifest.xml b/StatInterface/build/intermediates/bundles/release/aapt/AndroidManifest.xml deleted file mode 100644 index 15eb723..0000000 --- a/StatInterface/build/intermediates/bundles/release/aapt/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/StatInterface/build/intermediates/bundles/release/classes.jar b/StatInterface/build/intermediates/bundles/release/classes.jar deleted file mode 100644 index 37040273494e8e61f67f82d633afd912f3c64c03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83190 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

}&tw{V%T=cB%w!9`ZZ~jij3+x=YZgC6zzfc$ z-megbOAa-s+ClmoAxiTcj#37xrV!G3lYlps40xEAXodbpK|EnXgP)Xms(y0}cHUK$ za?92uw_Vomw$DJWg4M5=&CCi9nq<{LEu9lYdm>i?=0P1F^F(z%g*0ElYvq^pg&Q0Q zFbmmA`$KlKsE4Rm!G#na>qmQVtPDK(6bml03f65^-gzv-t#mL0hBGT5E4P04TcZve zd4%8O8X>!IpC;>Z`P=7k)+*SWu** z8F3RysEffMKCnY+))<4`-)v)9@E`&fQ&F8Q&xpi^Dh9?vNpk0B-ttN_Msj?9=|p_g zSd0X>wM1MG8F;4?ffR8QWfew2N1_o(M(51NHpFKBR^iH;P zM-M#Y`_VyNC?X~ToFVIJTJ>_gV5hOK%PfW47DyP#BOt^Tt zxK^*Q1j-fdp2I$O7*%UHV19aU9dVSgey~{ppp5etd2f@oe505N`~reXSt0S+1bRlV zxd&SD`>d7!MWHoqaEp*QmL`Z=_>i=IQ4h1>u#=^X*c{x_DI#i>GPg;Nw%^Ks?QE8Fzx`+J4%`wpgu32*i1IxY&5#^G7*NetyW zEJ%~ZsA~TH zn`h@mM5=z?>aHJp(7YpewOhtWf0XZS5t7Z_1UNJH*!e}s9Zm2z7!GQW#el&1VWTMo zK4{mB=+e5gAGdg5#Bk7rslfStf8&iaubex%E`N4aa2-tjF}Ob~_HAUMO&L?HXNf?iLJ za=N5ZR_f<2Dt5LVJmD{Ya;uPVe^~94Fh21I;>$qpz2yXX#hAzJd-DCbEhE%50Ci43 z=0HnH#LX8=l1nAww)__)&D}F;kszR{dkf}GUern=OHwf)r|ucVcM#XgV7iZ+rrIz9 ziG7Iw!kN5_99ICsd9#FAOkeS0gz`K*v=YN6@}3o^GlB}O+itcuKfwC@Sj`nTu{Kwj zU3)Pgic!n^Vhq=^DiXNMWxu+OIsT^h@1ME9@ryn>sy6eozGI8dVbenUd=^|UfE2ue z7X!gB=ar*AKg&ZY09{mO70hyOIPQFjrh_h?)m?V?Vq`>je77WW;_t0R`<#3$8Mh4E zJt%GvFb{c*?SATQCYsp3joRa~)=>8JHX+6*Gg`q5qm%tBJq;rt=I|788NW*ptzNcY zR{ouaA|l!)M0y@qdz5{*t&a}Jsc35nv+Uo@+3{ahz8zLM5%y1h;E(k4#$~HAEey|3 zn1dq6QQZD~6aREy+)Ux*Ka|{=mZ`%WeOEB-X~Kwi!()~9C0TMW#4^j|)FKycym4Q} z_b89HjbSBr*?W_8AQ0>Y4l8_FL=T|l^3agwBIFmfc9E1lz>VxE+WH9EK&-VtSrmU2 zW)P^xJ5D8yhoo|hQNY+cfXKkHLSz;N9;9mrL|-E;(2d|+SaS6lUFXG3u-U?~3GTpL zaKx~dcEwJ8{oAe^mE0|S`FAw)e=Btv|Kn&@G6(>c(pN1UU%KI(GK%fE+h?ADSvG{joCxboz9Lj zBvTy|$>%t6F>%dab2l-yxw?Al`GV8~lbvS^wggvUe1_7+ekP3qtuCPt$WN94?_QE% zkHWAqJLzB==A4%XX_;qIf!SPcc4cUd@C3iaRx?ap-^0#EYH3rw*|c8MYt?cNT)Gaj z^RBt1nApoE(I)XqVXey6j@v8Uf=gUM^1)|YavZ5uYwAiaa+6$F$!*nGkZEqC5uma2 zY0hkKGIzZg(=VR+H84+qJTs_1=m32a(kve4M@Y7&e^e@C}zO0v>`f0hBX48@kZMduo+6j8CPSG8ZW zx_5~)E-23&PSIRSR=JWPpSHnZROD(7 zP}T-JZ^8x`jgr&$xy&^$D`08csHK#~11%B|;$uDYyKSoqwWG+PL!XEfb!>&3KoKt| z#imuY&SCjF`r>?*m6lRfnYV$uWE^bJV8j;SUcag>va(sk%OHkN`ef-~$c*U|kzDC) zwvFgez<*lwiK0CXOl6C@!aNiWo9t~5qr{`v!XjlSWx1Xmw9ll!`5AMf$%qApoMV1$ z{;s!AY$Bc6e+1K(N5mpOKq{yos4e{-N&~{1rq)Y1(EtBX_Kne%aLcxxq{EJF+qP}n zw(WGZgN|+6M#r{o+vpfC-?`_Vch9-+$9Kord+hwkSbtWnnpLx^W{G#;r6zUuo~EJz zs(f{1kw6ZlMMMV#(D<9GtMC@}Ahb}NLW+A=@3kp^QYTK=xB))+;qFoTEFXwC6+%9V z5#8O_5W4DDT?Wx$FiLErD~#b>J(b}eGsTYgAWZJQEgT$6zq6@HuJnq3%P21YK!0Z< zrmuVrEU?fy-w`jwjZ(hI1ujCp{SNCSHF-hol~H2|w^4jsBiL-Z2AG^GB- z8a#Z|KQ6rSFGQv(>@DPj_bR)%wTsyl0o*%O7K^jFF~nx~5SOO%NXNPd^+O`+%~d&M z6uRMBcxLB{PbyX%9k+^q@+QmoV=u-IFx4%K0?{$ZS*`L$q_FFK6Fec*sF#01Ob$y; zI)uOwi!!cnV-*`_e+JSRpTl+`?r=d}w3uhDPaD9E>KtGWG`$w^#R+h(iQfmV89qS- zZNmneU(s*Eg4eleSah&>XL)wXXx$9ZZC{?iaZJBYrJu?(#?P-+?@e z&^^WQE93kE_0~6g zFdP&p`*skh40(6i9nfG^pjA+MbcoB89^22s7sFJgvGf$5t@L)I9Gx}+^c5vP-aB+< zRZK92?ORkHXX`Dj&#RfdDchK;gvY8Q(Ie=7)z@%;=bdOAu!GJsj^w+QVMxHD`Dsj@ zoz@%`mAyr#wIn$T(mp4k3-Nel>_G+^4KK`UHmDiUT z;M(#=`>2kqxKtLq0^CJe!)iKU#Ne$yNM=Ljs?2Jm)T@wwPR;5-jwXLwf8xY3Wg|DY zPvup@$3_U}>8{)LH|=xzKvCu_H;$zI;tuZlaZW%{plmJ#X5d5S#SmG8@h9_dhjWOi z>r|9$6iNITPE}x-Z4EicSTh)O0sZxZ>ZBcTd@MeHpCcPDbd~X+Up>-q-$>k%&V^8z zAm>@Zeo$T4>rMn|-!T4K_n;bT^# z;$y&A0Npx@BGJKKe=}p2FAk%GQ+WNR7X8$|RIA8YojRT$4vpw8f*RIN7*G7>hsR=s z$<%lZ4zV@c1GU9H-dG&F>XfydZ(I=u!#l`CM%6@4Q53g2+yBERAXFp9m3A2DcMJ%j zsetTFL@TK9fgGS`PaB@%hhx%@TVg!n(SY_ICcEaJ$B@GYw4oWG&oMt76W|EV1bBB- zf6?F%eBYKbYB_Lf0^t5zwWm2#XF$$tTo823U@0P z;C~RI3g_h+QtZjp8kq{7O^-%wvRl+846v4uEMnk|-2`A{-T--%4{fMxPTvSR)ox|Q z-yLvy)ouBCKZEImG!ja-6dGv^*?^#cP>C4VX#R}k;#`DYXQ`=*G1|`Zf3OdHHz%Eu3`TYd4>Z=@Lwnbita@+ zcZJp97JarsWw=S;FRwU9GCt!j_&$gG%iM|mc(!HF?KQ5J2lwgShtCu$dbon!7*fE2 zIZXkQnl0R1`|4F9Pk-UZQ#ZoLPf%Gx?;X*AL2zGwrGy~6%$hUj08%vPp(Ckyx)CGv zH37f@4 z31HN7HbJm{?GI%t(%K-xgb1h%Ka*L$*PCzOno{+8Co8P#UhQJ9zaIsY$vzYig~(BdsNqyTgr7aT^viLg*cc=E!15h&I~*Gry@kQn7Y^ri zD}me37O?v z=215ZSnVW`^0hGBpA+Q2odf;L7XO(8{rA$I zJ#>m9Jpw7vNS#8CMf~7$B|R|Qa9yo&(`;NUGb>2lzBm!^#v_Z(T!*vX>@0~zj)gGN zY62^b&D{Iv{nuRUggLeK&glEw^Q6`kkDJFMPsc-cvL4Vi*c(+Sfi~i99p2Ubo(|0u{rKU>gK5&Rb7?wWw`4GuvkRsUnq zQz!fs#0>}vpR$9>Ks56A;;}-JdTT9H5&t5zU#1@I`pT4fSi}8r#7L!2#)1NNx9tuy zp(qi%-qbe9mAh}D0hc$5wT4(CuPq8CX})jj0!O~(<|{@}ggeHY5fjNW_3E@HQm)i? z35KdOtYaei@Lc8zEpC%(cwyLT)4aN)=}?Pgm3gUUw8j&TgTtuOxs3@-P(zV*Brlix zZ9bEPZ9F5|76hhPKU8T&5u0dhjv_KByb|An)p@bT_7zFi3Rvqd#w8-5TpI_adqz-g z%!47-iYFuoC{YSWdfJ!N;I)W;22^RUFrWVx1N2Jdr_d!=aAT~BE|%CIA%Tvu8l4zP zNU?Wg;Be45zuszq(%9uPT1DwfYu8b-zE@?CzGgspujJ6BfLg2#>!dKFl3=0m863iU z%#a*4AD(KhmH3+pe=SXlZ4CEFWy@f{=~|W#wxLZCX(Q3&QgBl&H>8U(DlqXrgyc)| z(GYNk`F*THRh?73lR_-TO-z}klEbL}oPT(57>ik*L{)ejimTD7R#1_lRCAEE)>6XE zrp91VkT+K;sM5=_eOj+tT9m@{J+;gA(EIA-@K_oBbUdlVF{EuO`g15Y>g>@hHm3(2 zh)Z~;{aGP5G(|g8H>6Oa$L?h+o%ve_4T;EN!X`<4HS1}UiI#?FlIDT)Kg(dVi{3Le z(7}?1-rhC>)s#C>V-kJobXA0;au@(v^{Ue)4$s)L3lA`jLW^ zE#4T}2)RPosyck8+^KaVUdFtgBX@rll|H&_!cv@!)HK(XSqA21Cf4m*RfRcwkSVJt z5?#Z@*=t5y%dfp+l{+ZyIXi4Eg*(l8f4G1?G5~5fUNC;$HZXqu+3HGKuqgn(J(ivE zF7qdN^JN9CNkahra5pz3E#4=oLZw*v~YbGPmm8`Dm7SCitK&k2$UU}O3)4BdY-Z?WW+61B0zPu`ky3CV?%;nUzZkXb6q4Lb1WNJlE-^#iAmbKmbL5OWo5uzo& zixJ0XI&UgOkC;B0st{k<_ZAx}j{c+E*EDvH@v!>5fmUe%!eS>4vjsr4!K*S*g7KMw zjk2lQahZ{2Z3+d94xX*3=dpj|JAiNywfKYn8zYl<)t3(vAmKoV^QXkQcz$2R8L!Ae zTGScOG$sil5|&*=c@ebZmUV^OyDa*C!ckzQ(k}<0jXpt4D(0 zmHC^;&X{cQk}z}(PKdtYlW8{ga_dHDkIMr(u7oGS`Ph%peQw}bGex@<;X@d@UG^B4 zIaU@G6By-MMlFl&r=mWF@tT`!U1{R;VL4eg0^&nHk2!JP(`1o-NdUBP+I@1>PHab zJ}eV3xEfbXH4YFyen@eadJnfwP1&;)X}8zDwr~h|x(MF{WFHytv6xVVPd>NvUw{_b z)#k#wdR*(!z8SPiLE6^_-_gFrP{$arepC!CNvxKApUcnyuOO4vMO)9zx7C1!7PT|* zf`QZ30-K)eCf%-uj5z^L$O^pIn+Z;{M zzt&mArktQIjSRE8n6pLlnu+%4FedPmjQGf=wLbjU?JKe2tb{k}ZQg2Nx8Hw=S9~Re z|LSt3{CnA<`9BJK|D)NJtaVFT68zgYQ~19fxc~DcVFPCap|6$J&W<+zCEDfUyA<9p<)k3J^NEAD=teD{6yz3RxG@;SfG{`}a>{+88U)MFwd zHpma6s%ej`p`pEUC_MVhSqF9MXEZ(_z+a`EoQzG_KxRk^%yqXOEbb{ID%r?=fS*hk zB{CgMx9>>g;s;nV9p)2aC-tnFbGxm+-tjF=Y$xT|*IuQq>M&;}K=s%i7H6l$wtmSw zO|0$ktxfGmk$>|w&hvH~p^seB)!CDOP(5NF2@c=G(V@h_i;}chgMan$h0w$9{4r5HGDD9|a z?5$y;zIu66y1;N!HX|)16T`>V(7`c7O$>VpQr6u3{4AS{#V8`aR)(X>rz%FLuH$Y| zaS(N^H6byznOp2(#z4t_;f96VXQ^dQYNXti)XrWOY>R z9No9uoQRI0ha>;gw$X0XaZYzq0tvRyDR4i9+wObcC*9khy(OhwEEq37dSFWl2AVR( zQsk&rUU`80+;f1@1q%2BP7{w4#~IuY z_|a1`zZFK$`m{tF&ctN+cHmLo$^+#cM+T%eD`wx4LawN;d@z$Rj1`*I`jWg1 zT_*tYA9*23PLE{XFuP`^bx8D^w!vfB^vRM`IqPj#-e! z$1+Sn`T-*Co7GX+0Tx~S{*%iRbw9X-1`kp>Y1FENS20Y7FY^+RL271C)&}_@JX<~q zwRCr?q?2@fShk)|6Zv0WmLF21iuRA|(z+_k1V^!#BK;5BMwtY`gl@Uf2>jPiqWEGb zz^yPJ7IbmiEIpha{sdeUS%c=)XK)Yhfg)T+-R52tq-Oy+v@L2*k0g&ilUf6xv zN_=@a#6Dd;MJFu6diW}9=8)@IM=0yHpAXxv4f?J=HcHT11?8(EP+zFWLQW@MxT2@~ z)W*r4X4k(ejf5mZq?pX!5sn~Phgl%}nbGU6lTj*1*o>zm7G+sRGfvt(GL}xfcZc<- z2ikjdHAJ;Q7fFmRniOpI7a~Y6^rf^EBpE##DC@{YL?CnuV$RXFxdsLxks{2MV_Q*( zX^A<>@cH!efX1>)s8Qk9u#wqE(4V?LbWutYheZ1c25B^ygU`c1t{A8#6(dLd; zP#O5pCa#r{@F%{i?CQHIiU;8Y#n#b+4b3FJZb=PCg*otQ;#`pyl)V~?IoSv>g*B-^ z=S~BHxUqO~u7`Fg^i7>&CNBAIZV%xcQ%e|+Q2O#K>ndXUF|D8<+6z3M*0R_p9T&Y(~&ZGm%rmCN=6K-R%_qp8HSs%es@%E89!{5 z8O&Gg&nu_yt5vlp38Q8gMD;IXYEbW7d!YnQoaVb(;x~v68cJ(p^j0_uxnmahp~ewk z5Q#K6HFwpW?Nl}2i6aE6#O!FhhdN&w2sqdKJUFnPlaYXz?v#*My~F)GyH?QD@l5l@ zths%$8h?{r`zJ{M#Rz{YchxgzzQR0!{wn zs3v)s^l2Qr&caRUK7zTrSr zm%agwTZ{2N0Y{CtqEfZ+Q(M`}_=L(UsiXtGGyi^h8JCs|s81Pj+C-yVDtlU}2WI9AU(MH(LVZH)U?k=HxF=?RY|EYt}nI$oI`7 z=RIhMdh#W-v)RmFF8TYvXX)mJ;l(+pQj-wjE~JVmEtPB76rw-7f(~m=Q0yj}_bZTK z20CqJD?(iiwu!-@v4s9c8AvNSBCu6;wBSiK8XU~uSk>Av8i&eTBM$Xu2!dcBicRj>X^0Ye8`mDOqL>h3J?+b67$2dRX|JH zZr?W*bR=AryI?8+pnx-Qiev+J4fIGix_8f?t_AbLvuctuUc?sDgc6SgxB91^)1KkX zvT?EJ^v&I!!nVa0GGc?Y8MzDQ?Az2}5{v4SkE9s6V>7uIYZ21&C^X`4=@D@ zCrlTOBG11i0w64eDWsg0H$OzJGt_)^y5UVa(M4*hZRRdQb9oVf5(AVrqi~?@h~6z5 zs1bSB$6SAo*J`cT6B1exA}pDllLW;|)-T%!DFs z?e#x8F8-X84IO?7< z`Su^fzExM(Udmr@&=BcMH|~EGcK>rrlYrURn&5wOjOtp-+G-dduudFIAwq}%DMkzE zf=Xn7bP;iE1Ak}`KL|+>l#F0|K}aeR`v|=mqm#H$P2+-kqwbm|%gwB2<&39QC@_U2 zmd(PVRO8EGIb7${u4dK2sb-PyYeuU80J-j`&-0_-+ULio-BlmflCI{r8W2CFnjcDx zyk$Axm3*1^2pBxoBY2Cp5x6P$_ISMo{o#(hp9%zDjCj3AL*&MuA_5vy6tCHNsrH

h;V8+^R6Vrz!2^YAmsxnyrnGT^8>*h`LWt>Xc)8T&q`w z{3u8wkXUX)`Pu&znuR$l zx?Ax5WxNEHub>c`VG4d@F(o$1eu?sdTRa>=#x3F$^4H-;@9!X)KR%j-NsN)|#FmPj z1|pmyeuI`Mx+4l^gaj?r*+DE8W6~!$BgSI$jN?H;WiOpbs}?kfONjZ*8H|YeO`Kgx zN08c6gt-yAqH?&?aj8BpHWMJLf^gl|#pn85CQZqxiEvMd3SACX9Su-c<6McG zs^pdXBNcHsAeG#M4PBKfip`rgc)h@R4OTH;Y8Loz`GYAbGYJu2u~kE36?Kivpx+3XDsahSoO))^pOnw6kD566r6{I|rlssq}kssrR4r6&I)UHKD+ zFRg*oX6;9qyLUHp&}bEt0?)~|oCoYL%SdON0PfyIT}XL^A@;|lp>*nypm5-l5hbGX z?_d~Al%@>Lh9kh%FqPba9we27TCJ_#Rc-}}s|Dijrq$t8?h*ssz67}j11c4}$?7pT zUkjG)RR*fBtx&2B1qQx`V_Pez#O#9vTRzR19o z&`Qe9{s8g208DcNCjkWeQ>c(W#*d0!I(MmoZ=Ndmp+$PkekdBt-cCytH$D~^*NWQE z*pnU1F@9$E>)VGq7f1!1|y#6K_txL`YO zPSZ_W>8wbGNBubkNs>qS)=QBFO-xmVbCn|RP8PMxjPS!Xm4%OizwFh{&CD6@Pf^Ps zQ<5mQ!e0t+>b5j2VzKfJeXvbNYm28Xvs-)1bDvChSP(6E8nM%m{B0 z*8IZbq$LM_7yT*eM)PWb*qP*OhT@T?Ez{&k3)0oUoEoEmP5}3(?(-F&*a9 zmQ0j0Fb9sS5*(-t=WMWfuDqUvv{Rq}fPCn3;Q>^wv6_tT_LZjKpPGaz97k4

&8^9J{VmpcBd#D&36uUsYzT*DkZqblv~ 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 - - - - statLibrary - \ No newline at end of file diff --git a/StatInterface/build/intermediates/manifests/androidTest/debug/AndroidManifest.xml b/StatInterface/build/intermediates/manifests/androidTest/debug/AndroidManifest.xml deleted file mode 100644 index 97289eb..0000000 --- a/StatInterface/build/intermediates/manifests/androidTest/debug/AndroidManifest.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/StatInterface/build/intermediates/manifests/tmp/manifestMerger7085977054703475003.xml b/StatInterface/build/intermediates/manifests/tmp/manifestMerger7085977054703475003.xml deleted file mode 100644 index 0c748ad..0000000 --- a/StatInterface/build/intermediates/manifests/tmp/manifestMerger7085977054703475003.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - diff --git a/StatInterface/build/intermediates/res/androidTest/debug/values/values.xml b/StatInterface/build/intermediates/res/androidTest/debug/values/values.xml deleted file mode 100644 index 7730988..0000000 --- a/StatInterface/build/intermediates/res/androidTest/debug/values/values.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - statLibrary - \ No newline at end of file diff --git a/StatInterface/build/tmp/packageDebugJar/MANIFEST.MF b/StatInterface/build/tmp/packageDebugJar/MANIFEST.MF deleted file mode 100644 index 59499bc..0000000 --- a/StatInterface/build/tmp/packageDebugJar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/StatInterface/build/tmp/packageReleaseJar/MANIFEST.MF b/StatInterface/build/tmp/packageReleaseJar/MANIFEST.MF deleted file mode 100644 index 59499bc..0000000 --- a/StatInterface/build/tmp/packageReleaseJar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/StatInterface/src/main/AndroidManifest.xml b/StatInterface/src/main/AndroidManifest.xml index 2f46f92..3aceb9a 100644 --- a/StatInterface/src/main/AndroidManifest.xml +++ b/StatInterface/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.tamic.statinterface.stats"> @@ -11,15 +11,14 @@ - - + diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/NetConfig.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/constants/NetConfig.java similarity index 92% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/NetConfig.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/constants/NetConfig.java index e724a85..8167dd0 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/NetConfig.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/constants/NetConfig.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.constants; +package com.tamic.statinterface.stats.constants; /** * Created by Tc on 2016-03-25. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/constants/StaticsConfig.java similarity index 93% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/constants/StaticsConfig.java index 7913c75..328382b 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/constants/StaticsConfig.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/constants/StaticsConfig.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.constants; +package com.tamic.statinterface.stats.constants; /** * StaticsConfig * Created by Tamic on 2016-03-30. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/IUpLoadlistener.java similarity index 95% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/IUpLoadlistener.java index b2b4223..e3b3f52 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/IUpLoadlistener.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/IUpLoadlistener.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; /** * 上报状态接口 diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/StaticsListener.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/StaticsListener.java similarity index 77% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/StaticsListener.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/StaticsListener.java index c45f5f3..1b868ee 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/StaticsListener.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/StaticsListener.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import java.util.HashMap; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcCrashHandler.java similarity index 88% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcCrashHandler.java index 845bcf8..f1038bc 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcCrashHandler.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcCrashHandler.java @@ -1,11 +1,11 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Context; import android.util.Log; -import com.tamic.statInterface.statsdk.db.helper.StaticsAgent; -import com.tamic.statInterface.statsdk.model.ExceptionInfo; -import com.tamic.statInterface.statsdk.util.DeviceUtil; +import com.tamic.statinterface.stats.db.helper.StaticsAgent; +import com.tamic.statinterface.stats.model.ExceptionInfo; +import com.tamic.statinterface.stats.util.DeviceUtil; /** * Created by null on 2016/9/22. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcHeadrHandle.java similarity index 94% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcHeadrHandle.java index ebb25a6..fb1f91c 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcHeadrHandle.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcHeadrHandle.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.Manifest; import android.content.Context; @@ -11,12 +11,12 @@ import android.telephony.TelephonyManager; import android.text.TextUtils; -import com.tamic.statInterface.statsdk.model.header.AppInfo; -import com.tamic.statInterface.statsdk.model.header.DeviceInfo; -import com.tamic.statInterface.statsdk.model.header.HeaderInfo; -import com.tamic.statInterface.statsdk.model.header.NetworkInfo; -import com.tamic.statInterface.statsdk.util.DeviceUtil; -import com.tamic.statInterface.statsdk.util.NetworkUtil; +import com.tamic.statinterface.stats.model.header.AppInfo; +import com.tamic.statinterface.stats.model.header.DeviceInfo; +import com.tamic.statinterface.stats.model.header.HeaderInfo; +import com.tamic.statinterface.stats.model.header.NetworkInfo; +import com.tamic.statinterface.stats.util.DeviceUtil; +import com.tamic.statinterface.stats.util.NetworkUtil; import java.util.List; import java.util.Locale; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcIntentManager.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcIntentManager.java similarity index 99% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcIntentManager.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcIntentManager.java index c4b0272..6e16543 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcIntentManager.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcIntentManager.java @@ -1,5 +1,5 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Intent; import android.net.ConnectivityManager; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcNetEngine.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcNetEngine.java similarity index 93% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcNetEngine.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcNetEngine.java index 4fb72ac..926a2d4 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcNetEngine.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcNetEngine.java @@ -1,15 +1,15 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Context; import android.os.Looper; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; -import com.tamic.statInterface.statsdk.constants.NetConfig; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; -import com.tamic.statInterface.statsdk.http.TcHttpClient; -import com.tamic.statInterface.statsdk.util.JsonUtil; -import com.tamic.statInterface.statsdk.util.StatLog; +import com.tamic.statinterface.stats.constants.NetConfig; +import com.tamic.statinterface.stats.constants.StaticsConfig; +import com.tamic.statinterface.stats.http.TcHttpClient; +import com.tamic.statinterface.stats.util.JsonUtil; +import com.tamic.statinterface.stats.util.StatLog; import java.net.URLEncoder; import java.util.HashMap; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcObserverPresenter.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcObserverPresenter.java similarity index 95% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcObserverPresenter.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcObserverPresenter.java index f3aa6fa..954bb7a 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcObserverPresenter.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcObserverPresenter.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.app.ActivityManager; import android.content.Context; @@ -6,12 +6,12 @@ import android.util.Log; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; -import com.tamic.statInterface.statsdk.db.helper.DataConstruct; -import com.tamic.statInterface.statsdk.presenter.TcDeblockObserver; -import com.tamic.statInterface.statsdk.presenter.TcNetworkObserver; -import com.tamic.statInterface.statsdk.presenter.TcScreenObserver; -import com.tamic.statInterface.statsdk.util.StatLog; +import com.tamic.statinterface.stats.constants.StaticsConfig; +import com.tamic.statinterface.stats.db.helper.DataConstruct; +import com.tamic.statinterface.stats.presenter.TcDeblockObserver; +import com.tamic.statinterface.stats.presenter.TcNetworkObserver; +import com.tamic.statinterface.stats.presenter.TcScreenObserver; +import com.tamic.statinterface.stats.util.StatLog; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatInterface.java similarity index 88% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatInterface.java index b12afd2..b85b77e 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatInterface.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatInterface.java @@ -1,8 +1,8 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Context; -import com.tamic.statInterface.statsdk.constants.NetConfig; +import com.tamic.statinterface.stats.constants.NetConfig; import java.util.HashMap; @@ -27,7 +27,7 @@ public final class TcStatInterface { protected static final int UPLOAD_POLICY_WHILE_INITIALIZE = 6; /** - * 上报策略模式 + * 上报策略模式. */ public enum UploadPolicy { /**实时发送*/ @@ -44,17 +44,17 @@ public enum UploadPolicy { UPLOAD_POLICY_WHILE_INITIALIZE } - /**实时发送*/ + /**实时发送.*/ public static final int UPLOAD_INTERVAL_REALTIME = 0; - /**1分钟*/ + /**1分钟.*/ public static final int UPLOAD_TIME_ONE = 1; - /**5分钟*/ + /**5分钟.*/ public static final int UPLOAD_TIME_THREAD = 3; - /**10分钟*/ + /**10分钟.*/ public static final int UPLOAD_TIME_TEN = 10; - /**20分钟*/ + /**20分钟.*/ public static final int UPLOAD_TIME_TWENTY = 20; - /**30分钟发送*/ + /**30分钟发送.*/ public static final int UPLOAD_TIME_THIRTY = 30; /** * 上报策略 @@ -212,27 +212,6 @@ public static void initEvent(String eventName) { } - - /** - * 加入自定义envent - * @param k 业务名字 - * @param v 对应值 - */ - public static void onEventParameter(String k,String v) { - - TcStatSdk.getInstance(context).setEventParameter(k, v); - - } - - /** - * onEvent - */ - public static void onEvent(String eventName, String k,String v) { - initEvent(eventName); - onEventParameter(k, v); - - } - public static void onEvent(String eventName, HashMap parameters) { TcStatSdk.getInstance(context).onEvent(eventName, parameters); } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatSdk.java similarity index 98% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatSdk.java index a1a1131..94a67f9 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatSdk.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatSdk.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Context; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatiPollMgr.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatiPollMgr.java similarity index 95% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatiPollMgr.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatiPollMgr.java index 99d7096..3a1f586 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStatiPollMgr.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStatiPollMgr.java @@ -1,5 +1,5 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.os.Handler; import android.os.Looper; @@ -7,7 +7,7 @@ import android.text.format.DateUtils; import android.text.format.Time; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; +import com.tamic.statinterface.stats.constants.StaticsConfig; /** * diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStaticsManager.java similarity index 96% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStaticsManager.java index 1feef68..fa4a21c 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManager.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStaticsManager.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Context; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStaticsManagerImpl.java similarity index 74% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStaticsManagerImpl.java index 6137e64..680df79 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcStaticsManagerImpl.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcStaticsManagerImpl.java @@ -15,27 +15,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.core; + +package com.tamic.statinterface.stats.core; import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; import android.text.TextUtils; import com.alibaba.fastjson.JSON; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; -import com.tamic.statInterface.statsdk.db.helper.DataConstruct; -import com.tamic.statInterface.statsdk.db.helper.StaticsAgent; -import com.tamic.statInterface.statsdk.model.DataBlock; -import com.tamic.statInterface.statsdk.service.Platform; -import com.tamic.statInterface.statsdk.util.JsonUtil; -import com.tamic.statInterface.statsdk.util.NetworkUtil; -import com.tamic.statInterface.statsdk.util.StatLog; +import com.tamic.statinterface.stats.constants.StaticsConfig; +import com.tamic.statinterface.stats.db.helper.DataConstruct; +import com.tamic.statinterface.stats.db.helper.StaticsAgent; +import com.tamic.statinterface.stats.model.DataBlock; +import com.tamic.statinterface.stats.service.Platform; +import com.tamic.statinterface.stats.util.JsonUtil; +import com.tamic.statinterface.stats.util.NetworkUtil; +import com.tamic.statinterface.stats.util.StatLog; import java.io.InputStream; import java.util.HashMap; import cz.msebera.android.httpclient.util.EncodingUtils; -import static com.tamic.statInterface.statsdk.core.TcNetEngine.TAG; +import static com.tamic.statinterface.stats.core.TcNetEngine.TAG; /** @@ -44,19 +48,28 @@ * #{https://github.com/Tamicer/SkyMonitoring} */ public class TcStaticsManagerImpl implements TcStaticsManager, TcObserverPresenter.ScheduleListener { - /** context */ + + /** + * context + */ private Context mContext; - /** sInstance */ + /** + * sInstance + */ private static TcStaticsManager sInstance; private static TcObserverPresenter paObserverPresenter; + private UploadThread mUploadThread = null; + private StaticsListener eventInterface; private TcStatiPollMgr statiPollMgr; HashMap pageIdMaps = new HashMap(); - /** Log TAG */ + /** + * Log TAG + */ private static final String LOG_TAG = TcStatiPollMgr.class.getSimpleName(); public TcStaticsManagerImpl(Context mContext) { @@ -66,6 +79,11 @@ public TcStaticsManagerImpl(Context mContext) { @Override public boolean onInit(int appId, String channel, String fileName) { + if (mUploadThread == null) { + mUploadThread = new UploadThread(); + mUploadThread.start(); + } + // init ObserverPresenter paObserverPresenter = new TcObserverPresenter(this); @@ -86,7 +104,9 @@ public boolean onInit(int appId, String channel, String fileName) { @Override public void onSend() { - // report data to server + + StaticsAgent.getDataBlock(mUploadThread.mHandler); + /* // report data to server Platform.get().execute(new Runnable() { @Override public void run() { @@ -101,7 +121,7 @@ public void run() { TcUpLoadManager.getInstance(mContext).report(JsonUtil.toJSONString(dataBlock)); } }); - +*/ } @Override @@ -171,9 +191,7 @@ public void onRrecordAppEnd() { //recard APP exit DataConstruct.storeAppAction("2"); - onSend(); - onRelease(); } @@ -190,7 +208,7 @@ public void onPageParameter(String... strings) { @Override public void onInitEvent(String eventName) { - DataConstruct.initEvent(eventInterface, eventName); + DataConstruct.initEvent(eventName); } @Override @@ -200,7 +218,7 @@ public void onEventParameter(String... strings) { @Override public void onEvent(String eventName, HashMap parameters) { - DataConstruct.initEvent(this.eventInterface, eventName, parameters); + DataConstruct.initEvent(eventName, parameters); } /** @@ -231,22 +249,24 @@ public void startSchedule() { // if debug time is 5 min if (StaticsConfig.DEBUG && TcStatInterface.uploadPolicy == TcStatInterface.UploadPolicy.UPLOAD_POLICY_DEVELOPMENT) { - statiPollMgr.start(5* 1000); + statiPollMgr.start(5 * 1000); StatLog.d(LOG_TAG, "Schedule is start"); } else { if (NetworkUtil.isWifi(mContext)) { - statiPollMgr.start(TcStatInterface.getIntervalRealtime() * 60 *1000); + statiPollMgr.start(TcStatInterface.getIntervalRealtime() * 60 * 1000); } else { - statiPollMgr.start(TcStatInterface.UPLOAD_TIME_THIRTY * 60 *1000); + statiPollMgr.start(TcStatInterface.UPLOAD_TIME_THIRTY * 60 * 1000); } } } - /** checkValidId + /** + * checkValidId + * * @param name activitiyname - * @return pageId + * @return pageId */ - private String checkValidId(String name) { + private String checkValidId(String name) { if (TextUtils.isEmpty(name)) { return null; } @@ -258,7 +278,9 @@ private String checkValidId(String name) { } - /** getPageId + /** + * getPageId + * * @param clazz * @return */ @@ -310,18 +332,46 @@ public HashMap getStatIdMaps(String jsonName) { return map; } - public String getFromAsset(String fileName){ - String result=""; - try{ + public String getFromAsset(String fileName) { + String result = ""; + try { InputStream in = mContext.getResources().getAssets().open(fileName); int length = in.available(); - byte [] buffer = new byte[length]; + byte[] buffer = new byte[length]; in.read(buffer); result = EncodingUtils.getString(buffer, "UTF-8"); - } - catch(Exception e){ + } catch (Exception e) { e.printStackTrace(); } return result; } + + class UploadThread extends Thread { + + private Handler mHandler = null; + + @Override + public void run() { + Looper.prepare(); + + mHandler = new Handler(Looper.myLooper()) { + + @Override + public void handleMessage(Message msg) { + + if (msg.obj != null && msg.obj instanceof DataBlock) { + DataBlock dataBlock = (DataBlock) msg.obj; + if (dataBlock.getApp_action().isEmpty() && + dataBlock.getEvent().isEmpty() && + dataBlock.getPage().isEmpty()) { + return; + } + StatLog.d(TAG, "TcStatfacr >> report is Start"); + TcUpLoadManager.getInstance(mContext).report(JsonUtil.toJSONString(dataBlock)); + } + } + }; + Looper.loop(); + } + } } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcUpLoadManager.java similarity index 89% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcUpLoadManager.java index a7e5663..76f745a 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUpLoadManager.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcUpLoadManager.java @@ -15,19 +15,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.Context; import android.text.TextUtils; -import com.tamic.statInterface.statsdk.constants.NetConfig; -import com.tamic.statInterface.statsdk.db.helper.StaticsAgent; -import com.tamic.statInterface.statsdk.http.TcHttpClient; -import com.tamic.statInterface.statsdk.service.Platform; -import com.tamic.statInterface.statsdk.util.JsonUtil; -import com.tamic.statInterface.statsdk.util.NetworkUtil; -import com.tamic.statInterface.statsdk.util.StatLog; +import com.tamic.statinterface.stats.constants.NetConfig; +import com.tamic.statinterface.stats.db.helper.StaticsAgent; +import com.tamic.statinterface.stats.http.TcHttpClient; +import com.tamic.statinterface.stats.service.Platform; +import com.tamic.statinterface.stats.util.JsonUtil; +import com.tamic.statinterface.stats.util.NetworkUtil; +import com.tamic.statinterface.stats.util.StatLog; import java.util.concurrent.atomic.AtomicReference; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcUploadCoreReceiver.java similarity index 75% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcUploadCoreReceiver.java index ee880ad..785b306 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/core/TcUploadCoreReceiver.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/core/TcUploadCoreReceiver.java @@ -1,14 +1,9 @@ -package com.tamic.statInterface.statsdk.core; +package com.tamic.statinterface.stats.core; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.text.TextUtils; import android.util.Log; -import android.widget.Toast; - -import com.tamic.statInterface.statsdk.db.helper.StaticsAgent; -import com.tamic.statInterface.statsdk.util.JsonUtil; /** * diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/Customer.java similarity index 88% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/Customer.java index 7af4e5d..90f8a78 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/Customer.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/Customer.java @@ -1,7 +1,6 @@ -package com.tamic.statInterface.statsdk.db; +package com.tamic.statinterface.stats.db; -import java.util.List; -// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. +// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. /** * Entity mapped to table "CUSTOMER". diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/TcNote.java similarity index 71% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/TcNote.java index c060c32..9707a10 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/TcNote.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/TcNote.java @@ -1,21 +1,35 @@ -package com.tamic.statInterface.statsdk.db; +package com.tamic.statinterface.stats.db; // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit. + + /** * Entity mapped to table "PA_NOTE". */ public class TcNote { + private Long id; - /** Not-null value. */ + /** + * Not-null value. + */ private String firstCloumn; - /** Not-null value. */ + /** + * Not-null value. + */ private String secondCloumn; - /** Not-null value. */ + /** + * Not-null value. + */ private String thirdCloumn; private String forthCloumn; + private Integer status; + + public static final int DATA_STATUS_SAVED = 0; + public static final int DATA_STATUS_SENDING = 1; + public TcNote() { } @@ -23,14 +37,17 @@ public TcNote(Long id) { this.id = id; } - public TcNote(Long id, String firstCloumn, String secondCloumn, String thirdCloumn,String forthCloumn) { + + public TcNote(Long id, String firstCloumn, String secondCloumn, String thirdCloumn, String forthCloumn, Integer status) { this.id = id; this.firstCloumn = firstCloumn; this.secondCloumn = secondCloumn; this.thirdCloumn = thirdCloumn; - this.forthCloumn=forthCloumn; + this.forthCloumn = forthCloumn; + this.status = status; } + public Long getId() { return id; } @@ -70,4 +87,12 @@ public String getForthCloumn() { public void setForthCloumn(String forthCloumn) { this.forthCloumn = forthCloumn; } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/DataAccess.java similarity index 92% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/DataAccess.java index 533e68e..2ad1d9f 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataAccess.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/DataAccess.java @@ -4,11 +4,11 @@ * Created by: NuLL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ -package com.tamic.statInterface.statsdk.db.database; +package com.tamic.statinterface.stats.db.database; import android.content.Context; -import com.tamic.statInterface.statsdk.db.TcNote; +import com.tamic.statinterface.stats.db.TcNote; import java.util.ArrayList; @@ -44,9 +44,10 @@ public void createAllTables() { createCustomerTable(); } + private void createNoteTable() { boolean isCreatedSec = handler.createTableWithSQL("create table if not exists T_Note(_id integer primary key autoincrement,firstcloumn text,secondcloumn text," + - "thirdcloumn text,forthcloumn text)"); + "thirdcloumn text,forthcloumn text,STATUS text)"); if (!isCreatedSec) { System.out.println("create table T_Note failure!"); } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/DataBaseHandler.java similarity index 98% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/DataBaseHandler.java index be3fbdc..e6f7af6 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/DataBaseHandler.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/DataBaseHandler.java @@ -4,7 +4,7 @@ * Created by: NULL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ -package com.tamic.statInterface.statsdk.db.database; +package com.tamic.statinterface.stats.db.database; import java.util.concurrent.locks.ReentrantLock; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/ReadDataBaseAccess.java similarity index 59% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/ReadDataBaseAccess.java index 9b8f6ed..e073a49 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/ReadDataBaseAccess.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/ReadDataBaseAccess.java @@ -4,13 +4,13 @@ * Created by: NULL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ -package com.tamic.statInterface.statsdk.db.database; +package com.tamic.statinterface.stats.db.database; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; -import com.tamic.statInterface.statsdk.db.TcNote; +import com.tamic.statinterface.stats.db.TcNote; import java.util.ArrayList; @@ -41,6 +41,27 @@ public ArrayList loadAll() { note.setSecondCloumn(cursor.getString(2)); note.setThirdCloumn(cursor.getString(3)); note.setForthCloumn(cursor.getString(4)); + note.setStatus((int) cursor.getLong(5)); + notes.add(note); + } + cursor.close(); + handler.closeConnection(connection, Thread.currentThread().getStackTrace()[2].getMethodName()); + return notes; + } + + + //查询所有的note + public ArrayList loadAllByWhere(String filter) { + SQLiteDatabase connection = handler.getReadConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); + Cursor cursor = connection.rawQuery("select * from T_Note where " + filter, null); + ArrayList notes = new ArrayList<>(); + while (cursor.moveToNext()) { + TcNote note = new TcNote(); + note.setFirstCloumn(cursor.getString(1)); + note.setSecondCloumn(cursor.getString(2)); + note.setThirdCloumn(cursor.getString(3)); + note.setForthCloumn(cursor.getString(4)); + note.setStatus((int) cursor.getLong(5)); notes.add(note); } cursor.close(); diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/WriteDataBaseAccess.java similarity index 88% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/WriteDataBaseAccess.java index 7c03181..430a932 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/database/WriteDataBaseAccess.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/database/WriteDataBaseAccess.java @@ -4,14 +4,14 @@ * Created by: NULL on 2014-1-9 * Copyright (c) 2014年 SAIC. All rights reserved. */ -package com.tamic.statInterface.statsdk.db.database; +package com.tamic.statinterface.stats.db.database; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; -import com.tamic.statInterface.statsdk.db.TcNote; +import com.tamic.statinterface.stats.db.TcNote; import java.util.ArrayList; @@ -32,6 +32,15 @@ public static WriteDataBaseAccess shareInstance(Context context) { return writeAccess; } + /** + * execSQL + */ + public void execSQL(String sql){ + SQLiteDatabase connection = handler.getWriteConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); + connection.execSQL(sql); + connection.close(); + } + /** * 数据库插入相关接口 */ @@ -52,6 +61,7 @@ private boolean insertNote(TcNote note) { values.put("secondCloumn", note.getSecondCloumn()); values.put("thirdCloumn", note.getThirdCloumn()); values.put("forthCloumn", note.getForthCloumn()); + values.put("STATUS", note.getStatus()); SQLiteDatabase connection = handler.getWriteConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); long result = connection.insert("T_Note", null, values); if (!connection.inTransaction()) { @@ -78,7 +88,7 @@ public boolean insertDatas(ArrayList list) { private boolean insertTcNotes(ArrayList notes) { boolean result = false; SQLiteDatabase connection = handler.getWriteConnection(Thread.currentThread().getStackTrace()[2].getMethodName()); - String sql = "insert into T_Note (firstCloumn,secondCloumn,thirdCloumn,forthCloumn) values (?,?,?,?)"; + String sql = "insert into T_Note (firstCloumn,secondCloumn,thirdCloumn,forthCloumn,fiveCloumn) values (?,?,?,?,?)"; connection.beginTransaction(); try { SQLiteStatement stmt = connection.compileStatement(sql); @@ -88,6 +98,7 @@ private boolean insertTcNotes(ArrayList notes) { stmt.bindString(2, note.getSecondCloumn()); stmt.bindString(3, note.getThirdCloumn()); stmt.bindString(4, note.getForthCloumn()); + stmt.bindLong(4, note.getStatus()); stmt.execute(); stmt.clearBindings(); } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/DataConstruct.java similarity index 87% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/DataConstruct.java index 5a83dca..1b9c068 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/DataConstruct.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/DataConstruct.java @@ -1,15 +1,15 @@ -package com.tamic.statInterface.statsdk.db.helper; +package com.tamic.statinterface.stats.db.helper; import android.content.Context; import android.text.TextUtils; -import com.tamic.statInterface.statsdk.core.StaticsListener; -import com.tamic.statInterface.statsdk.model.AppAction; -import com.tamic.statInterface.statsdk.model.Event; -import com.tamic.statInterface.statsdk.model.KeyValueBean; -import com.tamic.statInterface.statsdk.model.Page; -import com.tamic.statInterface.statsdk.sp.SharedPreferencesHelper; -import com.tamic.statInterface.statsdk.util.DateUtil; +import com.tamic.statinterface.stats.core.StaticsListener; +import com.tamic.statinterface.stats.model.AppAction; +import com.tamic.statinterface.stats.model.Event; +import com.tamic.statinterface.stats.model.KeyValueBean; +import com.tamic.statinterface.stats.model.Page; +import com.tamic.statinterface.stats.sp.SharedPreferencesHelper; +import com.tamic.statinterface.stats.util.DateUtil; import java.util.ArrayList; import java.util.Iterator; @@ -39,22 +39,20 @@ private DataConstruct() { /** * initEvent * - * @param eventInterface * @param event_name */ - public static void initEvent(StaticsListener eventInterface, String event_name) { - initEvent(eventInterface, event_name, null); + public static void initEvent(String event_name) { + initEvent(event_name, null); } /** * initEvent 带参数的事件 - * @param eventInterface * @param eventName 事件ID * @param parameters 事件参数(k-v) */ - public static synchronized void initEvent(StaticsListener eventInterface, String eventName, Map parameters) { + public static synchronized void initEvent(String eventName, Map parameters) { - if (eventInterface == null || TextUtils.isEmpty(eventName)) { + if (TextUtils.isEmpty(eventName)) { throw new RuntimeException("you must set eventName!"); } diff --git a/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/NoteDaoHelper.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/NoteDaoHelper.java new file mode 100644 index 0000000..2a60051 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/NoteDaoHelper.java @@ -0,0 +1,56 @@ +package com.tamic.statinterface.stats.db.helper; + +import android.content.Context; + + +import com.tamic.statinterface.stats.db.TcNote; +import com.tamic.statinterface.stats.db.database.DataAccess; +import com.tamic.statinterface.stats.db.database.ReadDataBaseAccess; +import com.tamic.statinterface.stats.db.database.WriteDataBaseAccess; + +import java.util.List; + + +public class NoteDaoHelper { + + String TABLENAME = "T_Note"; + + private TcNote paNoteDao; + private Context context; + + public NoteDaoHelper(Context context) { + this.context = context; + DataAccess.shareInstance(context).createAllTables(); + /*if (paNoteDao == null) { + paNoteDao = getDaoSession(context).getPaNoteDao(); + }*/ + } + + public List getUnSendNotes() { + //return paNoteDao.queryRaw("where STATUS = 0"); + return ReadDataBaseAccess.shareInstance(context).loadAllByWhere("STATUS = 0"); + } + + public void updateStatus(int from, int to) { + String sql = "UPDATE '" + TABLENAME + "' SET STATUS=" + to + " WHERE STATUS=" + from; + WriteDataBaseAccess.shareInstance(context).execSQL(sql); + + } + + public void deleteByStatus(int status) { + String sql = "DELETE FROM '" + TABLENAME + "' WHERE STATUS=" + status; + WriteDataBaseAccess.shareInstance(context).execSQL(sql); + } + + public void insert(TcNote note) { + //paNoteDao.insert(note); + WriteDataBaseAccess.shareInstance(context).insertData(note); + } + + public void insertList(List notes) { + WriteDataBaseAccess.shareInstance(context).insertData(notes); + //paNoteDao.insertInTx(notes); + } + + +} diff --git a/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/StaticsAgent.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/StaticsAgent.java new file mode 100644 index 0000000..8a93140 --- /dev/null +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/db/helper/StaticsAgent.java @@ -0,0 +1,301 @@ +package com.tamic.statinterface.stats.db.helper; + +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.text.TextUtils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.tamic.statinterface.stats.db.TcNote; +import com.tamic.statinterface.stats.db.database.ReadDataBaseAccess; +import com.tamic.statinterface.stats.db.database.WriteDataBaseAccess; +import com.tamic.statinterface.stats.model.AppAction; +import com.tamic.statinterface.stats.model.DataBlock; +import com.tamic.statinterface.stats.model.Event; +import com.tamic.statinterface.stats.model.ExceptionInfo; +import com.tamic.statinterface.stats.model.Page; +import com.tamic.statinterface.stats.util.JsonUtil; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * Created by Tamic on 2016-03-17. + */ +public class StaticsAgent { + + private static Context mContext; + private static TcNote note; + private static NoteDaoHelper helper; + private static DaoThread daoThread; + + private static final int MSG_TYPE_LOAD = 1; + private static final int MSG_TYPE_INSERT = 2; + private static final int MSG_TYPE_ROLL_BACK = 3; + private static final int MSG_TYPE_DELETE = 4; + private static final int MSG_TYPE_INSERT_NOW = 5; + /* */ + + /** + * @param context + *//* + public static void init(Context context) { + + mContext = context; + + DataAccess.shareInstance(context).createAllTables(); + + }*/ + public static void init(Context context) { + mContext = context; + if (helper == null) { + helper = new NoteDaoHelper(context); + } + + if (daoThread == null) { + daoThread = new DaoThread(); + daoThread.start(); + } + } + + private static void storeAppAction(String appAction) { + if (!TextUtils.isEmpty(appAction)) { + storePaData(appAction, "", ""); + } + } + + private static void storePage(String pageString) { + if (!TextUtils.isEmpty(pageString)) { + storePaData("", pageString, ""); + } + } + + private static void storeEvent(String eventString) { + if (!TextUtils.isEmpty(eventString)) { + storePaData("", "", eventString); + } + } + + public static void getDataBlock(Handler dataHandler) { + Message msg = new Message(); + msg.what = MSG_TYPE_LOAD; + msg.obj = dataHandler; + daoThread.mHandler.sendMessage(msg); + } + + + + public static DataBlock getDataBlock() { + DataBlock dataBlock = new DataBlock(); + List list = ReadDataBaseAccess.shareInstance(mContext).loadAll(); + AppAction appAction = new AppAction(); + Page page = new Page(); + Event event = new Event(); + ExceptionInfo exceptionInfo = new ExceptionInfo(); + List actionList = new ArrayList<>(); + List pageList = new ArrayList<>(); + List eventList = new ArrayList<>(); + List exceptionInfos = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + if (!TextUtils.isEmpty(list.get(i).getFirstCloumn())) { + appAction = JsonUtil.parseObject(list.get(i).getFirstCloumn(), AppAction.class); + actionList.add(appAction); + } + if (!TextUtils.isEmpty(list.get(i).getSecondCloumn())) { + page = JsonUtil.parseObject(list.get(i).getSecondCloumn(), Page.class); + pageList.add(page); + } + if (!TextUtils.isEmpty(list.get(i).getThirdCloumn())) { + event = JsonUtil.parseObject(list.get(i).getThirdCloumn(), Event.class); + eventList.add(event); + } + if (!TextUtils.isEmpty(list.get(i).getForthCloumn())) { + exceptionInfo = JsonUtil.parseObject(list.get(i).getForthCloumn(), ExceptionInfo.class); + exceptionInfos.add(exceptionInfo); + } + } + dataBlock.setApp_action(actionList); + dataBlock.setPage(pageList); + dataBlock.setExceptionInfos(exceptionInfos); + dataBlock.setEvent(eventList); + return dataBlock; + } + + public static void storeData(String firstcloumn, String secondcloumn, String thirdcloumn) { + storeData(firstcloumn, secondcloumn, thirdcloumn, null); + } + + + public static void storeData(String firstcloumn, String secondcloumn, String thirdcloumn, String forthCloumn) { + note = new TcNote(null, firstcloumn, secondcloumn, thirdcloumn, forthCloumn, TcNote.DATA_STATUS_SAVED); + WriteDataBaseAccess.shareInstance(mContext).insertData(note); + } + + private static void storePaData(String appAction, String pageInfo, String eventInfo) { + Message msg = new Message(); + msg.what = appAction == null ? MSG_TYPE_INSERT : MSG_TYPE_INSERT_NOW; + msg.obj = new TcNote(null, appAction, pageInfo, eventInfo, null, TcNote.DATA_STATUS_SAVED); + daoThread.mHandler.sendMessage(msg); + } + + + /** + * storePage + * + * @param exceptionInfo + */ + public static void storeException(String exceptionInfo) { + if (TextUtils.isEmpty(exceptionInfo)) { + throw new NullPointerException("exceptionInfo is null"); + } + storeData("", "", "", exceptionInfo); + } + + + /** + * storeObject + * + * @param o + */ + public static void storeObject(Object o) { + if (o instanceof Event) { + storeEvent(JSONObject.toJSONString(o)); + } else if (o instanceof AppAction) { + storeAppAction(JSONObject.toJSONString(o)); + } else if (o instanceof Page) { + storePage(JSONObject.toJSONString(o)); + } else if (o instanceof ExceptionInfo) { + storeException(JSONObject.toJSONString(o)); + } + + } + + public static synchronized void deleteData() { + WriteDataBaseAccess.shareInstance(mContext).deleteAllNote(); + } + + private static class DaoThread extends Thread { + + private Handler mHandler = null; + private List notesBuffer = new ArrayList<>(); + private static final int BUFFER_MAX_SIZE = 10; + + @Override + public void run() { + Looper.prepare(); + + mHandler = new Handler(Looper.myLooper()) { + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_TYPE_DELETE: { + helper.deleteByStatus(TcNote.DATA_STATUS_SENDING); + } + break; + + case MSG_TYPE_ROLL_BACK: { + helper.updateStatus(TcNote.DATA_STATUS_SENDING, TcNote.DATA_STATUS_SAVED); + } + break; + case MSG_TYPE_INSERT: { + if (msg.obj != null && msg.obj instanceof TcNote) { + TcNote note = (TcNote) msg.obj; + notesBuffer.add(note); + if (notesBuffer.size() >= BUFFER_MAX_SIZE) { + helper.insertList(notesBuffer); + notesBuffer.clear(); + } + } + } + break; + + case MSG_TYPE_INSERT_NOW: { + if (msg.obj != null && msg.obj instanceof TcNote) { + TcNote note = (TcNote) msg.obj; + notesBuffer.add(note); + helper.insertList(notesBuffer); + notesBuffer.clear(); + } + } + break; + + case MSG_TYPE_LOAD: { + if (notesBuffer.size() > 0) { + helper.insertList(notesBuffer); + notesBuffer.clear(); + } + DataBlock dataBlock = new DataBlock(); + List list = helper.getUnSendNotes(); + if (list != null) { + helper.updateStatus(TcNote.DATA_STATUS_SAVED, TcNote.DATA_STATUS_SENDING); + } + + AppAction action; + Page page; + Event event; + ExceptionInfo exceptionInfo; + List actionList = new ArrayList<>(); + List pageList = new ArrayList<>(); + List eventList = new ArrayList<>(); + List exceptionInfos = new ArrayList<>(); + for (int i = 0; list != null && i < list.size(); i++) { + if (!TextUtils.isEmpty(list.get(i).getFirstCloumn())) { + action = JSON.parseObject(list.get(i).getFirstCloumn(), AppAction.class); + actionList.add(action); + } + if (!TextUtils.isEmpty(list.get(i).getSecondCloumn())) { + page = JSON.parseObject(list.get(i).getSecondCloumn(), Page.class); + pageList.add(page); + } + if (!TextUtils.isEmpty(list.get(i).getThirdCloumn())) { + event = JSON.parseObject(list.get(i).getThirdCloumn(), Event.class); + eventList.add(event); + } + if (!TextUtils.isEmpty(list.get(i).getForthCloumn())) { + exceptionInfo = JSON.parseObject(list.get(i).getForthCloumn(), ExceptionInfo.class); + exceptionInfos.add(exceptionInfo); + } + } + Collections.sort(pageList, new Comparator() { + + @Override + public int compare(Page lhs, Page rhs) { + return lhs.getPage_start_time().compareTo(rhs.getPage_start_time()); + } + }); + Collections.sort(eventList, new Comparator() { + + @Override + public int compare(Event lhs, Event rhs) { + return lhs.getAction_time().compareTo(rhs.getAction_time()); + } + }); + dataBlock.setApp_action(actionList); + dataBlock.setPage(pageList); + dataBlock.setEvent(eventList); + dataBlock.setExceptionInfos(exceptionInfos); + + if (msg.obj != null && msg.obj instanceof Handler) { + Handler handler = (Handler) msg.obj; + Message msgBack = new Message(); + msgBack.what = 0; + msgBack.obj = dataBlock; + handler.sendMessage(msgBack); + } + + } + break; + } + super.handleMessage(msg); + } + }; + Looper.loop(); + } + } +} + diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/http/TcHttpClient.java similarity index 98% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/http/TcHttpClient.java index 8bad125..2e8cfae 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/http/TcHttpClient.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/http/TcHttpClient.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.http; +package com.tamic.statinterface.stats.http; import android.content.Context; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/AppAction.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/AppAction.java similarity index 91% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/AppAction.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/AppAction.java index af3241a..0316b87 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/AppAction.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/AppAction.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; /** diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/AppActionList.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/AppActionList.java similarity index 86% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/AppActionList.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/AppActionList.java index e1bc724..a96e76c 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/AppActionList.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/AppActionList.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/DataBlock.java similarity index 97% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/DataBlock.java index 7b63fc2..6d69b32 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/DataBlock.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/DataBlock.java @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/Event.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/Event.java similarity index 96% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/Event.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/Event.java index 1f868ff..6a3e2e6 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/Event.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/Event.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/EventList.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/EventList.java similarity index 86% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/EventList.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/EventList.java index 8e8890a..410d043 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/EventList.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/EventList.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/ExceptionInfo.java similarity index 96% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/ExceptionInfo.java index 6f3dd83..384fc31 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ExceptionInfo.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/ExceptionInfo.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; /** * Created by null on 2016/9/22. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/KeyValueBean.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/KeyValueBean.java similarity index 94% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/KeyValueBean.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/KeyValueBean.java index 49a8075..641e8c3 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/KeyValueBean.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/KeyValueBean.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; /** *业务对应的key-value diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/Page.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/Page.java similarity index 96% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/Page.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/Page.java index b106d37..4852616 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/Page.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/Page.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/PageList.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/PageList.java similarity index 86% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/PageList.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/PageList.java index 722caf4..0fd7a28 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/PageList.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/PageList.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ParamterList.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/ParamterList.java similarity index 87% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ParamterList.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/ParamterList.java index 9b89b85..f38fe68 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/ParamterList.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/ParamterList.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model; +package com.tamic.statinterface.stats.model; import java.util.List; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/AppInfo.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/AppInfo.java similarity index 95% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/AppInfo.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/AppInfo.java index 1a05635..87f72bb 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/AppInfo.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/AppInfo.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model.header; +package com.tamic.statinterface.stats.model.header; /** * Created by Tamic on 2016-03-24. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/DeviceInfo.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/DeviceInfo.java similarity index 97% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/DeviceInfo.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/DeviceInfo.java index 0f11bec..ca7968f 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/DeviceInfo.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/DeviceInfo.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model.header; +package com.tamic.statinterface.stats.model.header; /** * Created by Tamic on 2016-03-24. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/HeaderInfo.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/HeaderInfo.java similarity index 94% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/HeaderInfo.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/HeaderInfo.java index a36977e..cc0ba2d 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/HeaderInfo.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/HeaderInfo.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model.header; +package com.tamic.statinterface.stats.model.header; /** * Created by Tamic on 2016-04-06. diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/NetworkInfo.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/NetworkInfo.java similarity index 95% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/NetworkInfo.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/NetworkInfo.java index d790961..bc2c397 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/model/header/NetworkInfo.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/model/header/NetworkInfo.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.model.header; +package com.tamic.statinterface.stats.model.header; /** * NetworkInfo diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcDeblockObserver.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcDeblockObserver.java similarity index 90% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcDeblockObserver.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcDeblockObserver.java index 276a0cd..11fa1dd 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcDeblockObserver.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcDeblockObserver.java @@ -1,14 +1,14 @@ -package com.tamic.statInterface.statsdk.presenter; +package com.tamic.statinterface.stats.presenter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; -import com.tamic.statInterface.statsdk.core.TcIntentManager; -import com.tamic.statInterface.statsdk.util.StatLog; +import com.tamic.statinterface.stats.constants.StaticsConfig; +import com.tamic.statinterface.stats.core.TcIntentManager; +import com.tamic.statinterface.stats.util.StatLog; /** * DeblockObserver diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcNetworkObserver.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcNetworkObserver.java similarity index 96% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcNetworkObserver.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcNetworkObserver.java index f90e864..3edb1ed 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcNetworkObserver.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcNetworkObserver.java @@ -1,5 +1,5 @@ -package com.tamic.statInterface.statsdk.presenter; +package com.tamic.statinterface.stats.presenter; import android.content.BroadcastReceiver; import android.content.Context; @@ -10,7 +10,7 @@ import android.text.TextUtils; import android.util.Log; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; +import com.tamic.statinterface.stats.constants.StaticsConfig; /** * NetworkObserver diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcScreenObserver.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcScreenObserver.java similarity index 93% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcScreenObserver.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcScreenObserver.java index 747ec0e..03ce49e 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/presenter/TcScreenObserver.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/presenter/TcScreenObserver.java @@ -11,7 +11,7 @@ * ------------------------------------------------------------------ * 2013-1-6 CoCoMo 1.0 1.0 Version */ -package com.tamic.statInterface.statsdk.presenter; +package com.tamic.statinterface.stats.presenter; import android.content.BroadcastReceiver; import android.content.Context; @@ -20,8 +20,8 @@ import android.os.PowerManager; import android.util.Log; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; -import com.tamic.statInterface.statsdk.core.TcIntentManager; +import com.tamic.statinterface.stats.constants.StaticsConfig; +import com.tamic.statinterface.stats.core.TcIntentManager; /** * ScreenObserver diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/Platform.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/service/Platform.java similarity index 94% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/Platform.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/service/Platform.java index c09acaa..bd92eb5 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/Platform.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/service/Platform.java @@ -13,13 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.tamic.statInterface.statsdk.service; +package com.tamic.statinterface.stats.service; import android.os.Build; import android.util.Log; -import com.tamic.statInterface.statsdk.core.TcNetEngine; - import java.util.concurrent.Executor; /** diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/PriorityThreadFactory.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/service/PriorityThreadFactory.java similarity index 94% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/PriorityThreadFactory.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/service/PriorityThreadFactory.java index fdfa843..936d2fc 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/PriorityThreadFactory.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/service/PriorityThreadFactory.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.service; +package com.tamic.statinterface.stats.service; import android.os.Process; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/TcHandleThreadPool.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/service/TcHandleThreadPool.java similarity index 89% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/TcHandleThreadPool.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/service/TcHandleThreadPool.java index 96ec4ac..2062d26 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/service/TcHandleThreadPool.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/service/TcHandleThreadPool.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.service; +package com.tamic.statinterface.stats.service; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; @@ -16,7 +16,7 @@ public class TcHandleThreadPool { private final static int MAX_POOL_SIZE = 6; private final static int KEEP_ALIVE_TIME = 4; private final Executor mExecutor; - private final static String THREAD_NAME ="paf-stat-thread-pool"; + private final static String THREAD_NAME ="tamic-stat-thread-pool"; public TcHandleThreadPool() { ThreadFactory factory = new PriorityThreadFactory(THREAD_NAME, android.os.Process.THREAD_PRIORITY_BACKGROUND); diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/sp/SharedPreferencesHelper.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/sp/SharedPreferencesHelper.java similarity index 98% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/sp/SharedPreferencesHelper.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/sp/SharedPreferencesHelper.java index 0ae0600..69e21d6 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/sp/SharedPreferencesHelper.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/sp/SharedPreferencesHelper.java @@ -1,10 +1,10 @@ -package com.tamic.statInterface.statsdk.sp; +package com.tamic.statinterface.stats.sp; import android.content.Context; import android.content.SharedPreferences; -import com.tamic.statInterface.statsdk.util.JsonUtil; +import com.tamic.statinterface.stats.util.JsonUtil; import org.json.JSONArray; import org.json.JSONException; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DateUtil.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/DateUtil.java similarity index 93% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DateUtil.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/util/DateUtil.java index 27ab3e4..7900e63 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DateUtil.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/DateUtil.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.util; +package com.tamic.statinterface.stats.util; import java.text.SimpleDateFormat; import java.util.Date; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/DeviceUtil.java similarity index 97% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/util/DeviceUtil.java index 685dbc5..22be258 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/DeviceUtil.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/DeviceUtil.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.util; +package com.tamic.statinterface.stats.util; import android.app.Activity; import android.content.Context; @@ -11,7 +11,7 @@ import android.util.DisplayMetrics; import android.view.WindowManager; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; +import com.tamic.statinterface.stats.constants.StaticsConfig; /** diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/JsonUtil.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/JsonUtil.java similarity index 97% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/JsonUtil.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/util/JsonUtil.java index 575e0f8..ef95cbd 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/JsonUtil.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/JsonUtil.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.util; +package com.tamic.statinterface.stats.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/NetworkUtil.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/NetworkUtil.java similarity index 99% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/NetworkUtil.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/util/NetworkUtil.java index ba4d74f..ece686d 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/NetworkUtil.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/NetworkUtil.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.util; +package com.tamic.statinterface.stats.util; import android.content.Context; import android.net.ConnectivityManager; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/PollUtil.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/PollUtil.java similarity index 94% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/PollUtil.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/util/PollUtil.java index b13f5a7..322fa50 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/PollUtil.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/PollUtil.java @@ -1,4 +1,4 @@ -package com.tamic.statInterface.statsdk.util; +package com.tamic.statinterface.stats.util; import android.app.AlarmManager; import android.app.PendingIntent; @@ -6,7 +6,7 @@ import android.content.Intent; import android.os.SystemClock; -import com.tamic.statInterface.statsdk.core.TcUploadCoreReceiver; +import com.tamic.statinterface.stats.core.TcUploadCoreReceiver; /** diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/StatLog.java b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/StatLog.java similarity index 98% rename from StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/StatLog.java rename to StatInterface/src/main/java/com/tamic/statInterface/stats/util/StatLog.java index 43020ac..5e97e8b 100644 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/util/StatLog.java +++ b/StatInterface/src/main/java/com/tamic/statInterface/stats/util/StatLog.java @@ -1,11 +1,11 @@ -package com.tamic.statInterface.statsdk.util; +package com.tamic.statinterface.stats.util; import android.os.Environment; import android.util.Log; -import com.tamic.statInterface.statsdk.constants.StaticsConfig; +import com.tamic.statinterface.stats.constants.StaticsConfig; import java.io.BufferedReader; import java.io.File; diff --git a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java b/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java deleted file mode 100644 index 54007b9..0000000 --- a/StatInterface/src/main/java/com/tamic/statInterface/statsdk/db/helper/StaticsAgent.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.tamic.statInterface.statsdk.db.helper; - -import android.content.Context; -import android.text.TextUtils; - -import com.alibaba.fastjson.JSONObject; -import com.tamic.statInterface.statsdk.db.TcNote; -import com.tamic.statInterface.statsdk.db.database.DataAccess; -import com.tamic.statInterface.statsdk.db.database.ReadDataBaseAccess; -import com.tamic.statInterface.statsdk.db.database.WriteDataBaseAccess; -import com.tamic.statInterface.statsdk.model.AppAction; -import com.tamic.statInterface.statsdk.model.DataBlock; -import com.tamic.statInterface.statsdk.model.Event; -import com.tamic.statInterface.statsdk.model.ExceptionInfo; -import com.tamic.statInterface.statsdk.model.Page; -import com.tamic.statInterface.statsdk.util.JsonUtil; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Tamic on 2016-03-17. - */ -public class StaticsAgent { - private static Context mContext; - private static TcNote note; - - /** - * @param context - */ - public static void init(Context context) { - - mContext = context; - - DataAccess.shareInstance(context).createAllTables(); - - } - - /** - * storeAppAction - * @param appAction - */ - public static void storeAppAction(String appAction) { - if (TextUtils.isEmpty(appAction)) - throw new NullPointerException("appAction is null"); - storeData(appAction, "", ""); - } - - /** - * storePage - * - * @param pageString - */ - public static void storePage(String pageString) { - if (TextUtils.isEmpty(pageString)) - throw new NullPointerException("pageString is null"); - storeData("", pageString, ""); - } - - /** - * storeEvent - * - * @param eventString - */ - public static void storeEvent(String eventString) { - if (TextUtils.isEmpty(eventString)) - throw new NullPointerException("eventString is null"); - storeData("", "", eventString); - } - - /** - * storePage - * - * @param exceptionInfo - */ - public static void storeException(String exceptionInfo) { - if (TextUtils.isEmpty(exceptionInfo)) - throw new NullPointerException("exceptionInfo is null"); - storeData("", "", "", exceptionInfo); - } - - public static DataBlock getDataBlock() { - DataBlock dataBlock = new DataBlock(); - List list = ReadDataBaseAccess.shareInstance(mContext).loadAll(); - AppAction appAction = new AppAction(); - Page page = new Page(); - Event event = new Event(); - ExceptionInfo exceptionInfo = new ExceptionInfo(); - List actionList = new ArrayList<>(); - List pageList = new ArrayList<>(); - List eventList = new ArrayList<>(); - List exceptionInfos = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - if (!TextUtils.isEmpty(list.get(i).getFirstCloumn())) { - appAction = JsonUtil.parseObject(list.get(i).getFirstCloumn(), AppAction.class); - actionList.add(appAction); - } - if (!TextUtils.isEmpty(list.get(i).getSecondCloumn())) { - page = JsonUtil.parseObject(list.get(i).getSecondCloumn(), Page.class); - pageList.add(page); - } - if (!TextUtils.isEmpty(list.get(i).getThirdCloumn())) { - event = JsonUtil.parseObject(list.get(i).getThirdCloumn(), Event.class); - eventList.add(event); - }if (!TextUtils.isEmpty(list.get(i).getForthCloumn())) { - exceptionInfo = JsonUtil.parseObject(list.get(i).getForthCloumn(), ExceptionInfo.class); - exceptionInfos.add(exceptionInfo); - } - } - dataBlock.setApp_action(actionList); - dataBlock.setPage(pageList); - dataBlock.setExceptionInfos(exceptionInfos); - dataBlock.setEvent(eventList); - return dataBlock; - } - - public static void storeData(String firstcloumn, String secondcloumn, String thirdcloumn) { - storeData(firstcloumn, secondcloumn, thirdcloumn, null); - } - - - public static void storeData(String firstcloumn, String secondcloumn, String thirdcloumn, String forthCloumn) { - note = new TcNote(null, firstcloumn, secondcloumn, thirdcloumn, forthCloumn); - WriteDataBaseAccess.shareInstance(mContext).insertData(note); - } - - - /** - * storeObject - * - * @param o - */ - public static void storeObject(Object o) { - if (o instanceof Event) { - storeEvent(JSONObject.toJSONString(o)); - } else if (o instanceof AppAction) { - storeAppAction(JSONObject.toJSONString(o)); - } else if (o instanceof Page) { - storePage(JSONObject.toJSONString(o)); - } else if (o instanceof ExceptionInfo) { - storeException(JSONObject.toJSONString(o)); - } - - } - - public static synchronized void deleteData() { - WriteDataBaseAccess.shareInstance(mContext).deleteAllNote(); - } - - -} - diff --git a/app/build.gradle b/app/build.gradle index a6a933d..934d948 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,15 +1,15 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.2" + compileSdkVersion 26 + buildToolsVersion "26.0.2" defaultConfig { applicationId "com.tamic.statsdkdemo" minSdkVersion 14 - targetSdkVersion 23 - versionCode 1 - versionName "1.0" + targetSdkVersion 26 + versionCode 2 + versionName "2.0" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f175f95..a0cc903 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,14 +3,13 @@ package="com.tamic.statsdkdemo"> @@ -18,7 +17,7 @@ - + diff --git a/app/src/main/java/com/tamic/statsdkdemo/BaseActivity.java b/app/src/main/java/com/tamic/statsdkdemo/BaseActivity.java index b0eee69..f68a3a7 100644 --- a/app/src/main/java/com/tamic/statsdkdemo/BaseActivity.java +++ b/app/src/main/java/com/tamic/statsdkdemo/BaseActivity.java @@ -2,7 +2,8 @@ import android.app.Activity; -import com.tamic.statInterface.statsdk.core.TcStatInterface; +import com.tamic.statinterface.stats.core.TcStatInterface; + /** * Created by Tamic on 2016-03-17. @@ -19,7 +20,6 @@ protected void onResume() { @Override protected void onPause() { super.onPause(); - TcStatInterface.recordPageEnd(); } @@ -33,8 +33,4 @@ protected void onDestroy() { } - - - - } diff --git a/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java b/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java index 40033fd..c6439d8 100644 --- a/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java +++ b/app/src/main/java/com/tamic/statsdkdemo/MainActivity.java @@ -4,7 +4,7 @@ import android.os.*; import android.view.View; -import com.tamic.statInterface.statsdk.core.TcStatInterface; +import com.tamic.statinterface.stats.core.TcStatInterface; import java.util.HashMap; diff --git a/app/src/main/java/com/tamic/statsdkdemo/SecondActivity.java b/app/src/main/java/com/tamic/statsdkdemo/SecondActivity.java index 8a554dc..e1ea831 100644 --- a/app/src/main/java/com/tamic/statsdkdemo/SecondActivity.java +++ b/app/src/main/java/com/tamic/statsdkdemo/SecondActivity.java @@ -3,19 +3,23 @@ import android.os.Bundle; import android.view.View; import android.widget.Button; -import com.tamic.statInterface.statsdk.core.TcStatInterface; + +import com.tamic.statinterface.stats.core.TcStatInterface; + +import java.util.HashMap; /** * Created by Tamic on 2016-03-16. */ public class SecondActivity extends BaseActivity implements View.OnClickListener { - Button button ; + + Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.lay_activity_second); - button =(Button)findViewById(R.id.second_button); + button = (Button) findViewById(R.id.second_button); button.setOnClickListener(this); @@ -29,6 +33,9 @@ protected void onResume() { @Override public void onClick(View v) { - TcStatInterface.onEvent("second Activity", "onclik", "testButton"); + HashMap hashMap = new HashMap(); + hashMap.put("onclick", v.toString()); + TcStatInterface.onEvent("second Activity", hashMap); + } } diff --git a/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java b/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java index 144b4db..15119cd 100644 --- a/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java +++ b/app/src/main/java/com/tamic/statsdkdemo/StatAppliation.java @@ -1,7 +1,7 @@ package com.tamic.statsdkdemo; import android.app.Application; -import com.tamic.statInterface.statsdk.core.TcStatInterface; +import com.tamic.statinterface.stats.core.TcStatInterface; /** * Created by LIUYONGKUI726 on 2016-04-13. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bb77582..715d464 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - TcSdk_Demo + TcSdk Hello world! Settings From 9283e12bdd4d3f80d31578ebcc8a3d59708ea433 Mon Sep 17 00:00:00 2001 From: liuyongkui Date: Thu, 15 Mar 2018 17:18:04 +0800 Subject: [PATCH 18/18] v2.4 --- StatInterface/build.gradle | 10 +++++----- build.gradle | 7 +++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/StatInterface/build.gradle b/StatInterface/build.gradle index 5b8285f..8202a7d 100644 --- a/StatInterface/build.gradle +++ b/StatInterface/build.gradle @@ -2,15 +2,15 @@ apply plugin: 'com.android.library' apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' -version = "2.2" +version = "2.4" android { - compileSdkVersion 23 - buildToolsVersion '23.0.2' + compileSdkVersion 26 + buildToolsVersion '26.0.2' defaultConfig { minSdkVersion 14 - targetSdkVersion 23 - versionCode 3 + targetSdkVersion 26 + versionCode 4 versionName version } buildTypes { diff --git a/build.gradle b/build.gradle index 9405f3f..95be146 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,13 @@ buildscript { repositories { + //maven { url "https://jitpack.io" } jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.2.3' - + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -14,6 +16,7 @@ buildscript { allprojects { repositories { + // maven { url "https://jitpack.io" } jcenter() } }