通讯录同步,已经可以用EqcIMessage做通讯录,但是安卓通讯录还没有清空,会重复添加。
authorsnickersun <snickersun@qq.com>
Tue, 28 Jan 2020 21:38:15 +0000 (05:38 +0800)
committersnickersun <snickersun@qq.com>
Tue, 28 Jan 2020 21:38:15 +0000 (05:38 +0800)
app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java
app/src/main/java/com/ic/protocol/bean/Contact.java
app/src/main/java/com/ic/protocol/bean/Runtime.java
app/src/main/java/com/ic/protocol/service/KeepAlive.java
app/src/main/java/com/ic/protocol/utils/DBHelper.java
app/src/main/java/com/ic/protocol/utils/NettyConnection.java
app/src/main/java/com/ic/protocol/utils/Util.java

index dd7d004..a289a17 100644 (file)
@@ -4,12 +4,14 @@ import android.content.Intent;
 import android.util.Log;\r
 \r
 import com.ic.protocol.Config;\r
+import com.ic.protocol.bean.Contact;\r
 import com.ic.protocol.bean.ICLocation;\r
 import com.ic.protocol.bean.Runtime;\r
 import com.ic.protocol.bean.StringMessage;\r
 import com.ic.protocol.bean.voicePacket;\r
 import com.ic.protocol.service.protocolMainServer;\r
 import com.ic.protocol.utils.Connection;\r
+import com.ic.protocol.utils.DBHelper;\r
 import com.ic.protocol.utils.Logger;\r
 import com.ic.protocol.utils.SharPreferenceUtil;\r
 import com.ic.protocol.utils.Util;\r
@@ -327,7 +329,11 @@ public class protocolAPIHelper {
                 .append(ds.getGPSData()).append(ds.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))\r
                 .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
                 .append(ds.getProtection()).append(ds.getWorkMode()).append(CMDSPLIT)\r
-                .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();\r
+                .append(ds.getLBSData()).append(CMDSPLIT)\r
+                .append(ds.getAlarmType()).append(CMDSPLIT)\r
+                .append(ds.getLanguage()).append(CMDSPLIT)\r
+                .append(0).append(CMDSPLIT)  //不回复地址\r
+                .append(ds.getWifiInfo()).append(CMDEND).toString();\r
 \r
     }\r
 \r
@@ -573,7 +579,7 @@ public class protocolAPIHelper {
                 .append(CMDEND).toString();\r
     }\r
 //设置通讯录,白名单(10个)\r
-    public void handleBP14(Connection connection,String cmd){\r
+    public void handleBP14(Connection connection,String cmd , Runtime runtime){\r
 //        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,\r
 /**\r
  * IWBP14,353456789012345,080835,\r
@@ -629,6 +635,20 @@ public class protocolAPIHelper {
             String index=cmdlist[2];\r
             Logger.i(sb.toString());\r
             connection.send(genStringMessage("AP14",AP14(index,phnums)));\r
+            ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+            for (int i=0; i< phnums.length;i++){\r
+               String[] tmp= phnums[i].split("\\|");\r
+               if (tmp.length==2){\r
+                      String name=Util.decodeUnicode2Utf8(tmp[0]);\r
+                      String phonem=tmp[1];\r
+                      Logger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);\r
+                      contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
+               }else{\r
+                   Logger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);\r
+\r
+               }\r
+            }\r
+            runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false);\r
 \r
         }else{\r
             Logger.i(" BP14 format error!");\r
index e4808a4..1decbbf 100644 (file)
@@ -39,26 +39,47 @@ public class Contact implements Parcelable {
   public String name;\r
   \r
   public String number;\r
-  \r
-  public Contact(int paramInt, String paramString1, String paramString2) {\r
-    this.category = paramInt;\r
-    this.name = paramString1;\r
-    this.number = paramString2;\r
+\r
+  /**\r
+   * Contact\r
+   * @param _category\r
+   * @param _name\r
+   * @param _number\r
+   */\r
+  public Contact(int _category, String _name, String _number) {\r
+    this.category = _category;\r
+    this.name = _name;\r
+    this.number = _number;\r
   }\r
-  \r
-  public Contact(int paramInt, String paramString1, String paramString2, String paramString3) {\r
-    this.category = paramInt;\r
-    this.name = paramString1;\r
-    this.number = paramString2;\r
-    this.extra = paramString3;\r
+\r
+  /**\r
+   * Contact\r
+   * @param _category\r
+   * @param _name\r
+   * @param _number\r
+   * @param _extra\r
+   */\r
+  public Contact(int _category, String _name, String _number, String _extra) {\r
+    this.category = _category;\r
+    this.name = _name;\r
+    this.number = _number;\r
+    this.extra = _extra;\r
   }\r
-  \r
-  public Contact(int paramInt, String paramString1, String paramString2, String paramString3, String paramString4) {\r
-    this.category = paramInt;\r
-    this.name = paramString1;\r
-    this.number = paramString2;\r
-    this.icon_index = paramString3;\r
-    this.extra = paramString4;\r
+\r
+  /**\r
+   * Contact\r
+   * @param _category\r
+   * @param _name\r
+   * @param _number\r
+   * @param _icon_index\r
+   * @param _extra\r
+   */\r
+  public Contact(int _category, String _name, String _number, String _icon_index, String _extra) {\r
+    this.category = _category;\r
+    this.name = _name;\r
+    this.number = _number;\r
+    this.icon_index = _icon_index;\r
+    this.extra = _extra;\r
   }\r
   \r
   protected Contact(Parcel paramParcel) {\r
index 8617a00..f3a9f4d 100644 (file)
@@ -93,6 +93,33 @@ public class Runtime {
   \r
   private String mccAndMnc;\r
   \r
+  private String language="zh-cn";\r
+  public String getLanguage(){\r
+    return language;\r
+  }\r
+  public void setLanguage(String _language){\r
+    language=_language;\r
+  }\r
+\r
+  private String alarmType="00";\r
+  public String getAlarmType(){\r
+    return alarmType;\r
+  }\r
+\r
+//  00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05/06:跌倒报警))\r
+  public void setAlarmType(boolean fall,boolean lowbattery,boolean sos,boolean antioff){\r
+//    if ( !fall && !lowbattery && !sos && antioff)\r
+      alarmType= "00";\r
+    if (sos){\r
+      alarmType= "01";\r
+    }else if(lowbattery){\r
+      alarmType= "02";\r
+    }else if(antioff){\r
+      alarmType= "03";\r
+    }else if(fall){\r
+      alarmType= "05";\r
+    }\r
+  }\r
 \r
   public String preCdmaInfo;\r
   \r
index c8cc979..ac6c2fa 100644 (file)
@@ -19,9 +19,14 @@ import com.ic.protocol.utils.NettyConnection;
 import com.ic.protocol.utils.NetworkObservable;\r
 import com.ic.protocol.utils.ServiceUtil;\r
 import com.ic.protocol.bean.Runtime;\r
+\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import rx.Observable;\r
 import rx.Subscription;\r
 import rx.functions.Action1;\r
 \r
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;\r
 import static com.eiot.watch_lib.LauncherCtrl.STATUS_BAR_STATE_SERVER_CONNECTED_OFF;\r
 import static com.eiot.watch_lib.LauncherCtrl.STATUS_BAR_STATE_SERVER_CONNECTED_ON;\r
 \r
@@ -191,13 +196,34 @@ public class KeepAlive extends AbstractConnectionService {
     this.idleTimeMillis = SystemClock.elapsedRealtime();\r
     Logger.i(TAG+paramStringMessage.cmd());\r
     if ("heart".equals(paramStringMessage.cmd()) || "FactoryReset".equals(paramStringMessage.cmd()) || "poweroff".equals(paramStringMessage.cmd()) || "Reboot".equals(paramStringMessage.cmd())) {\r
-      if ("poweroff".equals(paramStringMessage.cmd()))\r
-        paramRuntime.getContextProxy().shutdown();\r
-      if ("FactoryReset".equals(paramStringMessage.cmd()))\r
-        paramRuntime.getContextProxy().doMasterClear();\r
-      if ("Reboot".equals(paramStringMessage.cmd()))\r
-        paramRuntime.getContextProxy().reboot();\r
+      if ("poweroff".equals(paramStringMessage.cmd())) {\r
+\r
+\r
+          paramRuntime.setShutdown(true);\r
+          Observable.timer(60000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+              public void call(Long param1Long) {\r
+                  paramRuntime.getContextProxy().shutdown();\r
+              }\r
+          });\r
+\r
+      }\r
+      if ("FactoryReset".equals(paramStringMessage.cmd())) {\r
+          Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+              public void call(Long param1Long) {\r
+                  paramRuntime.getContextProxy().doMasterClear();\r
+              }\r
+          });\r
+\r
+      }\r
+      if ("Reboot".equals(paramStringMessage.cmd())) {\r
 \r
+\r
+          Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+              public void call(Long param1Long) {\r
+                  paramRuntime.getContextProxy().reboot();\r
+              }\r
+          });\r
+      }\r
       if ("heart".equals(paramStringMessage.cmd()))\r
         AlarmWakeUp.isNeedWakeUpAlarm(paramRuntime);\r
       return true;\r
@@ -217,7 +243,7 @@ public class KeepAlive extends AbstractConnectionService {
     public void onReceive(Context param1Context, Intent param1Intent) {\r
       boolean bool = param1Intent.getBooleanExtra("reboot", false);\r
       if (KeepAlive.this.mRuntime.getBatteryLow() && !KeepAlive.this.mRuntime.getBatterychanging() && !bool && !KeepAlive.this.mRuntime.isShutdown()){\r
-//                KeepAlive.this.connection.send(new StringMessage(protocolAPIHelper.AP00(KeepAlive.this.mRuntime)));\r
+          KeepAlive.this.connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.AP10(KeepAlive.this.mRuntime)));\r
       }\r
 \r
     }\r
index 1b04c55..aaee9cf 100644 (file)
@@ -11,6 +11,8 @@ import android.content.ContentProviderOperation.Builder;
 import android.database.Cursor;\r
 import android.net.Uri;\r
 import android.os.SystemClock;\r
+import android.provider.BaseColumns;\r
+import android.provider.ContactsContract;\r
 import android.provider.ContactsContract.Data;\r
 import android.provider.ContactsContract.RawContacts;\r
 import android.text.TextUtils;\r
@@ -34,6 +36,12 @@ import java.util.concurrent.TimeUnit;
 import rx.Observable;\r
 import rx.functions.Action1;\r
 \r
+import static com.ic.protocol.bean.Contact.CATEGORY_ADMIN;\r
+import static com.ic.protocol.bean.Contact.CATEGORY_CALL;\r
+import static com.ic.protocol.bean.Contact.CATEGORY_CARE;\r
+import static com.ic.protocol.bean.Contact.CATEGORY_PARTNER;\r
+import static com.ic.protocol.bean.Contact.CATEGORY_VIDEO;\r
+\r
 public class DBHelper {\r
   private static long lastUpdateTime;\r
   private Context context;\r
@@ -44,95 +52,44 @@ public class DBHelper {
     this.context = var2;\r
   }\r
 \r
-  private void addAllContact(ArrayList<Contact> var1, ContentResolver var2) {\r
-    Iterator var7 = var1.iterator();\r
-\r
-    while(var7.hasNext()) {\r
-      Contact var5 = (Contact)var7.next();\r
-      ContentValues var6 = new ContentValues();\r
-      long var3 = ContentUris.parseId(var2.insert(RawContacts.CONTENT_URI, var6));\r
-      var6.clear();\r
-      var6.put("raw_contact_id", var3);\r
-      var6.put("mimetype", "vnd.android.cursor.item/name");\r
-      var6.put("data2", var5.name);\r
-      var2.insert(Data.CONTENT_URI, var6);\r
-      var6.clear();\r
-      var6.put("raw_contact_id", var3);\r
-      var6.put("mimetype", "vnd.android.cursor.item/phone_v2");\r
-      var6.put("data1", var5.number);\r
-      var6.put("data2", 2);\r
-      var2.insert(Data.CONTENT_URI, var6);\r
-      var6.clear();\r
-    }\r
-\r
-  }\r
-\r
-  private void deleteAllContact(ArrayList<Contact> var1, String var2, ContentResolver var3) {\r
-    StringBuilder var6 = new StringBuilder();\r
-    var6.append("where=");\r
-    var6.append(var2);\r
-    Logger.i(var6.toString());\r
-    Cursor var7 = var3.query(ICContentProvider.CONTACT_URI, (String[])null, var2, (String[])null, "CATEGORY ASC");\r
-    ArrayList var12 = new ArrayList();\r
-    if (var7 != null) {\r
-      while(true) {\r
-        if (!var7.moveToNext()) {\r
-          StringBuilder var8 = new StringBuilder();\r
-          var8.append("newList=");\r
-          var8.append(var12.toString());\r
-          Logger.i(var8.toString());\r
-          var7.close();\r
-          break;\r
-        }\r
+  private void addAllContact(ArrayList<Contact> contactArray, ContentResolver resolver) {\r
+    Iterator contactIT = contactArray.iterator();\r
 \r
-        var12.add(new Contact(var7.getInt(1), var7.getString(2), var7.getString(3), var7.getString(4), var7.getString(5)));\r
-      }\r
-    }\r
+    while(contactIT.hasNext()) {\r
+      Contact contact = (Contact)contactIT.next();\r
+      ContentValues contentvalues = new ContentValues();\r
+      long raw_contactID = ContentUris.parseId(resolver.insert(RawContacts.CONTENT_URI, contentvalues));\r
 \r
-    for(int var4 = 0; var4 < var1.size(); ++var4) {\r
-      String var14 = ((Contact)var1.get(var4)).number;\r
+      contentvalues.clear();\r
+      contentvalues.put("raw_contact_id", raw_contactID);\r
+      contentvalues.put("mimetype", "vnd.android.cursor.item/name");\r
+      contentvalues.put("data2", contact.name);\r
+      resolver.insert(Data.CONTENT_URI, contentvalues);\r
+      contentvalues.clear();\r
 \r
-      for(int var5 = 0; var5 < var12.size(); ++var5) {\r
-        if (!var14.equals(((Contact)var12.get(var5)).number) && !var14.equals(((Contact)var12.get(var5)).extra)) {\r
-          if (!TextUtils.isEmpty(((Contact)var12.get(var5)).icon_index)) {\r
-            File var17 = new File(((Contact)var12.get(var5)).icon_index);\r
-            if (var17.exists()) {\r
-              var17.delete();\r
-            }\r
-          }\r
-        } else {\r
-          String var16 = ((Contact)var12.get(var5)).icon_index;\r
-          if (!TextUtils.isEmpty(var16) && var16.length() > 10 && var16.contains("/")) {\r
-            ((Contact)var1.get(var4)).icon_index = ((Contact)var12.get(var5)).icon_index;\r
-          }\r
-        }\r
-      }\r
+      contentvalues.put("raw_contact_id", raw_contactID);\r
+      contentvalues.put("mimetype", "vnd.android.cursor.item/phone_v2");\r
+      contentvalues.put("data1", contact.number);\r
+      contentvalues.put("data2", 2);\r
+      resolver.insert(Data.CONTENT_URI, contentvalues);\r
+      contentvalues.clear();\r
     }\r
 \r
-    Iterator var11 = var12.iterator();\r
-\r
-    while(var11.hasNext()) {\r
-      String var13 = this.getContactId(var3, ((Contact)var11.next()).number);\r
-      ArrayList var15 = new ArrayList();\r
-      Builder var18 = ContentProviderOperation.newDelete(RawContacts.CONTENT_URI);\r
-      StringBuilder var9 = new StringBuilder();\r
-      var9.append("contact_id=");\r
-      var9.append(var13);\r
-      var15.add(var18.withSelection(var9.toString(), (String[])null).build());\r
-      var18 = ContentProviderOperation.newDelete(Data.CONTENT_URI);\r
-      var9 = new StringBuilder();\r
-      var9.append("contact_id=");\r
-      var9.append(var13);\r
-      var15.add(var18.withSelection(var9.toString(), (String[])null).build());\r
-\r
-      try {\r
-        var3.applyBatch("com.android.contacts", var15);\r
-      } catch (Exception var10) {\r
-        Logger.i(var10.getMessage());\r
-      }\r
-    }\r
+  }\r
 \r
-    var3.delete(ICContentProvider.CONTACT_URI, var2, (String[])null);\r
+  private void deleteAllContact(ArrayList<Contact> contactArraylist, String where, ContentResolver resolver) {\r
+    StringBuilder sb = new StringBuilder();\r
+    sb.append("where=");\r
+    sb.append(where);\r
+    Logger.i(sb.toString());\r
+    Cursor cursor = resolver.query(ICContentProvider.CONTACT_URI, (String[])null, where, (String[])null, "CATEGORY ASC");\r
+\r
+    Iterator contactIT = contactArraylist.iterator();\r
+\r
+    while(contactIT.hasNext()) {\r
+      this.DeleteContactId(resolver, ((Contact)contactIT.next()).name);\r
+    }\r
+    resolver.delete(ICContentProvider.CONTACT_URI, where, (String[])null);\r
   }\r
 \r
   private Uri insertDownLoadInfo(String var1, int var2, int var3, String var4) {\r
@@ -144,62 +101,62 @@ public class DBHelper {
     return this.cr.insert(ICContentProvider.DOWNLOADINFO_URL, var5);\r
   }\r
 \r
-  private void saveContactsImpl(ArrayList<Contact> var1, boolean var2, boolean var3, boolean var4, boolean var5, boolean var6) {\r
-    StringBuilder var9 = new StringBuilder();\r
-    var9.append("saveContactsImpl contactList = ");\r
-    var9.append(var1.toString());\r
-    Logger.i(var9.toString());\r
-    var9 = new StringBuilder("CATEGORY IN (");\r
-    if (var2) {\r
-      var9.append(1);\r
-      var9.append(",");\r
+  private void saveContactsImpl(ArrayList<Contact> contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video) {\r
+    StringBuilder log = new StringBuilder();\r
+    log.append("saveContactsImpl contactList = ");\r
+    log.append(contactArray.toString());\r
+    Logger.i(log.toString());\r
+    StringBuilder where = new StringBuilder("CATEGORY IN (");\r
+    if (admin) {\r
+      where.append(CATEGORY_ADMIN);\r
+      where.append(",");\r
     }\r
 \r
-    if (var3) {\r
-      var9.append(2);\r
-      var9.append(",");\r
+    if (care) {\r
+      where.append(CATEGORY_CARE);\r
+      where.append(",");\r
     }\r
 \r
-    if (var4) {\r
-      var9.append(3);\r
-      var9.append(",");\r
+    if (call) {\r
+      where.append(CATEGORY_CALL);\r
+      where.append(",");\r
     }\r
 \r
-    if (var5) {\r
-      var9.append(4);\r
-      var9.append(",");\r
+    if (partner) {\r
+      where.append(CATEGORY_PARTNER);\r
+      where.append(",");\r
     }\r
 \r
-    if (var6) {\r
-      var9.append(5);\r
-      var9.append(",");\r
+    if (video) {\r
+      where.append(CATEGORY_VIDEO);\r
+      where.append(",");\r
     }\r
 \r
-    int var7 = var9.length();\r
-    if (var7 > 13) {\r
-      var9.setCharAt(var7 - 1, ')');\r
-      this.deleteAllContact(var1, var9.toString(), this.cr);\r
-      int var8 = var1.size();\r
-      if (var8 != 0) {\r
-        ContentValues[] var12 = new ContentValues[var8];\r
+    int len = where.length();\r
+    if (len > 13) {\r
+      where.setCharAt(len - 1, ')');\r
+      this.deleteAllContact(contactArray, where.toString(), this.cr);\r
+      int contactCount = contactArray.size();\r
+      if (contactCount != 0) {\r
+        ContentValues[] contentlist = new ContentValues[contactCount];\r
 \r
-        for(var7 = 0; var7 < var8; ++var7) {\r
-          Contact var10 = (Contact)var1.get(var7);\r
-          ContentValues var11 = new ContentValues();\r
-          var12[var7] = var11;\r
-          var11.put("CATEGORY", var10.category);\r
-          var11.put("NAME", var10.name);\r
-          var11.put("NUMBER", var10.number);\r
-          var11.put("ICON", var10.icon_index);\r
-          var11.put("EXTRA", var10.extra);\r
-          StringBuilder var13 = new StringBuilder();\r
-          var13.append("contact=");\r
-          var13.append(var10.toString());\r
-          Logger.i(var13.toString());\r
+        for(int i = 0; i < contactCount; ++i) {\r
+          Contact contact = (Contact)contactArray.get(i);\r
+          ContentValues contentValues = new ContentValues();\r
+          contentlist[i] = contentValues;\r
+          contentValues.put("CATEGORY", contact.category);\r
+          contentValues.put("NAME", contact.name);\r
+          contentValues.put("NUMBER", contact.number);\r
+          contentValues.put("ICON", contact.icon_index);\r
+          contentValues.put("EXTRA", contact.extra);\r
+          StringBuilder log1 = new StringBuilder();\r
+          log1.append("contact=");\r
+          log1.append(contact.toString());\r
+          Logger.i(log1.toString());\r
         }\r
 \r
-        this.cr.bulkInsert(ICContentProvider.CONTACT_URI, var12);\r
-        this.addAllContact(var1, this.cr);\r
+        this.cr.bulkInsert(ICContentProvider.CONTACT_URI, contentlist);\r
+        this.addAllContact(contactArray, this.cr);\r
       }\r
 \r
     }\r
@@ -242,10 +199,21 @@ public class DBHelper {
     this.cr.delete(var1, (String)null, (String[])null);\r
   }\r
 \r
-  public String getContactId(ContentResolver param1, String param2) {\r
-    // $FF: Couldn't be decompiled\r
-\r
-    return "";\r
+  public String DeleteContactId(ContentResolver contentResolver, String name) {\r
+    String ContactId=null;\r
+    Uri uri = ContactsContract.RawContacts.CONTENT_URI;\r
+    ContentResolver resolver = contentResolver;\r
+    String where = ContactsContract.PhoneLookup.DISPLAY_NAME;\r
+    Cursor cursor = resolver.query(uri, new String[]{Data._ID}, where + "=?", new String[]{name}, null);\r
+    if (cursor.moveToFirst()) {\r
+      int id = cursor.getInt(0);\r
+      ContactId=String.valueOf(id);\r
+      //根据id删除data中的相应数据\r
+      resolver.delete(uri, where + "=?", new String[]{name});\r
+      uri = ContactsContract.Data.CONTENT_URI;\r
+      resolver.delete(uri, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{id + ""});\r
+    }\r
+    return ContactId;\r
   }\r
 \r
   public boolean getWeather() {\r
@@ -770,18 +738,18 @@ public class DBHelper {
     this.context.sendBroadcast(new Intent("com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE"));\r
   }\r
 \r
-  public void saveContacts(final ArrayList<Contact> var1, final boolean var2, final boolean var3, final boolean var4, final boolean var5, final boolean var6) {\r
+  public void saveContacts(final ArrayList<Contact> contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video) {\r
     synchronized(this){}\r
 \r
     try {\r
-      long var7 = SystemClock.elapsedRealtime();\r
-      if (var7 - lastUpdateTime > 1000L) {\r
-        this.saveContactsImpl(var1, var2, var3, var4, var5, var6);\r
-        lastUpdateTime = var7;\r
+      long currenttime = SystemClock.elapsedRealtime();\r
+      if (currenttime - lastUpdateTime > 1000L) {\r
+        this.saveContactsImpl(contactArray, admin, care,call, partner, video);\r
+        lastUpdateTime = currenttime;\r
       } else {\r
         Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
           public void call(Long var1x) {\r
-            DBHelper.this.saveContacts(var1, var2, var3, var4, var5, var6);\r
+            DBHelper.this.saveContacts(contactArray, admin, care,call,  partner, video);\r
           }\r
         });\r
       }\r
index 37767a3..26b1d35 100644 (file)
@@ -102,7 +102,7 @@ public class NettyConnection implements Connection {
                                 break;\r
                             case BP14:\r
                                 //收到设置白名单号码\r
-                                API.handleBP14(NettyConnection.this,cmd);\r
+                                API.handleBP14(NettyConnection.this,cmd,runtime);\r
                                 Logger.i("收到服务器设置白名单号码命令BP14");\r
                                 break;\r
                             case BP15:\r
index bc65229..4e82099 100644 (file)
@@ -59,7 +59,90 @@ public class Util {
     }\r
     return serverip.toString();\r
   }\r
+  /**\r
+   *\r
+   *\r
+   * @param unicodestr\r
+   * @return\r
+   */\r
+  public static String decodeUnicode2Utf8(String unicodestr) {\r
+    char aChar;\r
+    int len = unicodestr.length();\r
+    if (len%4==0) {\r
+\r
+      StringBuffer sb = new StringBuffer();\r
+      for (int i = 0; i < len; i += 4) {\r
+        sb.append("\\u").append(unicodestr.substring(i, i + 4));\r
+      }\r
+\r
+      String theString = sb.toString();\r
+      len= theString.length();\r
+      StringBuffer outBuffer = new StringBuffer(len);\r
+      for (int x = 0; x < len; ) {\r
+        aChar = theString.charAt(x++);\r
+        if (aChar == '\\') {\r
+          aChar = theString.charAt(x++);\r
+          if (aChar == 'u') {\r
+            // Read the xxxx\r
+            int value = 0;\r
+            for (int i = 0; i < 4; i++) {\r
+              aChar = theString.charAt(x++);\r
+              switch (aChar) {\r
+                case '0':\r
+                case '1':\r
+                case '2':\r
+                case '3':\r
+                case '4':\r
+                case '5':\r
+                case '6':\r
+                case '7':\r
+                case '8':\r
+                case '9':\r
+                  value = (value << 4) + aChar - '0';\r
+                  break;\r
+                case 'a':\r
+                case 'b':\r
+                case 'c':\r
+                case 'd':\r
+                case 'e':\r
+                case 'f':\r
+                  value = (value << 4) + 10 + aChar - 'a';\r
+                  break;\r
+                case 'A':\r
+                case 'B':\r
+                case 'C':\r
+                case 'D':\r
+                case 'E':\r
+                case 'F':\r
+                  value = (value << 4) + 10 + aChar - 'A';\r
+                  break;\r
+                default:\r
+                  throw new IllegalArgumentException(\r
+                          "Malformed   \\uxxxx   encoding.");\r
+              }\r
 \r
+            }\r
+            outBuffer.append((char) value);\r
+          } else {\r
+            if (aChar == 't')\r
+              aChar = '\t';\r
+            else if (aChar == 'r')\r
+              aChar = '\r';\r
+            else if (aChar == 'n')\r
+              aChar = '\n';\r
+            else if (aChar == 'f')\r
+              aChar = '\f';\r
+            outBuffer.append(aChar);\r
+          }\r
+        } else\r
+          outBuffer.append(aChar);\r
+      }\r
+      return outBuffer.toString();\r
+    }else{\r
+      return null;\r
+    }\r
+\r
+  }\r
   public static String getSystemProperties(String prop){\r
 \r
     String str ="";\r