diff --git a/README.md b/README.md index cff84c9..cf90d47 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Based on Startalk server and client-side, users can build their own domain, Sign up an account, create new domains, add users, download client app, and configure navigation for domain, After the 5 steps above, you own strong IM abilities. -Download client app[Download](https://im.qunar.com/new/#/download) +Download client app[Download](https://i.startalk.im/home/#/download) - Android @@ -55,7 +55,7 @@ allprojects { ```gradle dependencies { -  compile project(':imsdk')//compile 'com.qunar.im:sdk-im:3.0.6' +  compile project(':imsdk')//compile 'com.qunar.im:sdk-im:3.0.7' } ``` @@ -199,4 +199,4 @@ Add style below in “values styles.xml” in the main project Feedback ===== -- qchat@qunar.com(Email) \ No newline at end of file +- qchat@qunar.com(Email) diff --git a/README_zh_CN.md b/README_zh_CN.md index fded014..7aaeede 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -63,7 +63,7 @@ allprojects { ```gradle dependencies { -  compile project(':imsdk')//compile 'com.qunar.im:sdk-im:3.0.6' +  compile project(':imsdk')//compile 'com.qunar.im:sdk-im:3.0.7' } ``` diff --git a/app/build.gradle b/app/build.gradle index 826f012..d6f476b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 -// buildToolsVersion '25.0.0' + compileSdkVersion project.compileSdkVersion as int defaultConfig { applicationId "sdk.im.qunar.com.qtalksdkdemo" - minSdkVersion 16 - targetSdkVersion 26 + minSdkVersion project.minSdkVersion as int + targetSdkVersion project.targetSdkVersion as int versionCode 206 versionName "8.36" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -110,16 +109,8 @@ repositories { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - - compile 'com.android.support:appcompat-v7:26.1.0' - compile ('com.android.support.constraint:constraint-layout:1.0.2'){ - exclude group: 'com.android.support', module: 'support-v4' - } - testCompile 'junit:junit:4.12' - - implementation project(':imsdk')//implementation 'com.startalk.im:sdk-im:3.0.6' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.0' + testImplementation 'junit:junit:4.12' + implementation project(':imsdk')//implementation 'com.startalk.im:sdk-im:3.0.7' } diff --git a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/ConversationListActivity.java b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/ConversationListActivity.java index c6c7273..341eb81 100755 --- a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/ConversationListActivity.java +++ b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/ConversationListActivity.java @@ -1,9 +1,10 @@ package sdk.im.qunar.com.qtalksdkdemo; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.widget.FrameLayout; +import androidx.appcompat.app.AppCompatActivity; + import com.qunar.im.ui.fragment.ConversationFragment; public class ConversationListActivity extends AppCompatActivity { diff --git a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MainActivity.java b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MainActivity.java index a5ae54c..c1d05a6 100755 --- a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MainActivity.java +++ b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MainActivity.java @@ -68,26 +68,20 @@ public void login(View view) { if (!QIMSdk.getInstance().isConnected()){ final ProgressDialog pd = ProgressDialog.show(this, "提示", "正在登录中。。。"); if(QIMSdk.getInstance().isCanAutoLogin()){ - QIMSdk.getInstance().autoLogin(new QIMSdk.LoginStatesListener() { - @Override - public void isScuess(boolean b, String s) { - logcat_text.append(s); - pd.dismiss(); - autoLoginButton.setText(s); - toast(s); - } + QIMSdk.getInstance().autoLogin((b, s) -> { + logcat_text.append(s); + pd.dismiss(); + autoLoginButton.setText(s); + toast(s); }); }else { final String uid = "";//用户名 final String password = "";//密码 - QIMSdk.getInstance().login(uid, password, new QIMSdk.LoginStatesListener() { - @Override - public void isScuess(boolean b, String s) { - logcat_text.append("Uid:" + uid + "\n" + "Password:" + password); - pd.dismiss(); - autoLoginButton.setText(s); - toast(s); - } + QIMSdk.getInstance().login(uid, password, (b, s) -> { + logcat_text.append("Uid:" + uid + "\n" + "Password:" + password); + pd.dismiss(); + autoLoginButton.setText(s); + toast(s); }); } @@ -101,7 +95,7 @@ public void isScuess(boolean b, String s) { * @param view */ public void goToChat(View view){ - QIMSdk.getInstance().goToChatConv(this,"hubo.hu@qunar.com",0); + QIMSdk.getInstance().goToChatConv(this,"jid",0); } /** @@ -109,7 +103,7 @@ public void goToChat(View view){ * @param view */ public void goToGroup(View view){ - QIMSdk.getInstance().goToGroupConv(this,"a9e35fe11afc4578a54bb133055042d6@conference.qunar.com",1); + QIMSdk.getInstance().goToGroupConv(this,"groupid",1); } public void startMainActivity(View view) { @@ -126,11 +120,6 @@ public void startConversationActivity(View view){ } private void toast(final String msg) { - runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); - } - }); + runOnUiThread(() -> Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show()); } } diff --git a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MyApplication.java b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MyApplication.java index 5f750ad..9a1a220 100755 --- a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MyApplication.java +++ b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/MyApplication.java @@ -2,9 +2,9 @@ import android.app.Application; import android.content.Context; -import android.support.multidex.MultiDex; -import com.qunar.im.common.CommonConfig; +import androidx.multidex.MultiDex; + import com.qunar.im.ui.sdk.QIMSdk; /** diff --git a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/TestActivity.java b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/TestActivity.java index 1a6bb40..8545654 100755 --- a/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/TestActivity.java +++ b/app/src/main/java/sdk/im/qunar/com/qtalksdkdemo/TestActivity.java @@ -3,16 +3,17 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; import android.webkit.WebView; import android.webkit.WebViewClient; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + /** * Created by lihaibin.li on 2018/3/26. */ -public class TestActivity extends AppCompatActivity{ +public class TestActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/build.gradle b/build.gradle index 1210e81..95c6f8f 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,12 @@ buildscript { repositories { + maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0' + classpath 'com.android.tools.build:gradle:3.5.2' classpath 'com.google.gms:google-services:4.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,10 +16,12 @@ buildscript { allprojects { repositories { - maven { url 'https://dl.google.com/dl/android/maven2' } maven { - url "https://raw.githubusercontent.com/froyomu/im/master" + url "https://jitpack.io" } + maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} + maven { url "https://maven.google.com" } + maven { url 'https://dl.google.com/dl/android/maven2' } maven { url "http://developer.huawei.com/repo/" } @@ -26,7 +29,7 @@ allprojects { url "http://jcenter.bintray.com/" } maven { - url "https://jitpack.io" + url "https://raw.githubusercontent.com/froyomu/im/master" } google() jcenter() diff --git a/gradle.properties b/gradle.properties index d4fae70..0bbd099 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,16 +9,16 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m +org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -android.useDeprecatedNdk=true -android.enableAapt2=false APP_VERSION=240 APP_VERSION_NAME=3.6.8 minSdkVersion=16 targetSdkVersion=26 -compileSdkVersion=27 \ No newline at end of file +compileSdkVersion=28 +android.useAndroidX=true +android.enableJetifier=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d28e4a3..42ba4d5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/imsdk/build.gradle b/imsdk/build.gradle index 2bb2a77..ac16245 100644 --- a/imsdk/build.gradle +++ b/imsdk/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.library' android { compileSdkVersion project.compileSdkVersion as int -// buildToolsVersion '26.0.2' defaultConfig { minSdkVersion project.minSdkVersion as int @@ -31,42 +30,44 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - api 'com.android.support:appcompat-v7:27.1.0' + api 'androidx.appcompat:appcompat:1.0.0' - //local - api project(':lib_common') api project(':lib_rn') api project(':lib_rtc') api project(':push_service') //maven -// api 'com.startalk.im:sdk-base:3.0.6' -// api 'com.startalk.im:sdk-common:3.0.6' -// api 'com.startalk.im:sdk-push:3.0.6' -// api 'com.startalk.im:sdk-rn:3.0.6' -// api 'com.startalk.im:sdk-rtc:3.0.6' +// api 'com.startalk.im:sdk-base:3.0.7' +// api 'com.startalk.im:sdk-common:3.0.7' +// api 'com.startalk.im:sdk-push:3.0.7' +// api 'com.startalk.im:sdk-rn:3.0.7' +// api 'com.startalk.im:sdk-rtc:3.0.7' - //thirdpart + //baidu map api 'com.startalk.im:map:4.4.1' api ('com.loopeer.android.thirdparty.pulltorefresh:Android-PullToRefresh:2.1.1') { exclude group: 'com.android.support', module: 'support-v4' } - api "com.nineoldandroids:library:2.4.0" api 'com.google.zxing:core:3.2.0' api 'io.pristine:libjingle:11139@aar' - api 'com.android.support:design:27.1.0' + api 'com.google.android.material:material:1.0.0' api 'de.greenrobot:eventbus:2.2.1' api 'net.zetetic:android-database-sqlcipher:3.5.4' api 'com.github.bumptech.glide:glide:3.8.0' + api 'org.jsoup:jsoup:1.9.2' + //日期选择器 api 'com.contrarywind:Android-PickerView:4.1.6' + api ('com.github.chrisbanes:PhotoView:2.1.4'){ exclude group: 'com.android.support' } api 'com.github.yalantis:ucrop:2.2.2' - api 'com.android.support.constraint:constraint-layout:1.1.3' + api 'androidx.constraintlayout:constraintlayout:1.1.3' + api 'com.danikula:videocache:2.7.0' api 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' api 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4' + + api "com.nineoldandroids:library:2.4.0" } -//apply from: 'release.gradle' diff --git a/imsdk/src/main/AndroidManifest.xml b/imsdk/src/main/AndroidManifest.xml index 3d43fca..29c6111 100644 --- a/imsdk/src/main/AndroidManifest.xml +++ b/imsdk/src/main/AndroidManifest.xml @@ -590,7 +590,7 @@ android:resource="@xml/provider_paths" /> diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/AccountSwitchActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/AccountSwitchActivity.java index 0a2be8c..6962253 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/AccountSwitchActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/AccountSwitchActivity.java @@ -33,7 +33,7 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.base.util.IMUserDefaults; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.LoginType; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.AccountAdapter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/AdActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/AdActivity.java index 78af793..568917a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/AdActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/AdActivity.java @@ -27,11 +27,9 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.ui.R; import com.qunar.im.ui.view.MyWebView; -import com.qunar.im.ui.view.bigimageview.view.MyGlideUrl; import com.qunar.im.ui.view.medias.video.VideoView; import java.io.File; -import java.util.logging.Logger; /** * Created by xinbo.wang on 2016-09-23. diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/AddAuthMessageActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/AddAuthMessageActivity.java index d341aad..38932b7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/AddAuthMessageActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/AddAuthMessageActivity.java @@ -10,6 +10,7 @@ import android.widget.TextView; import android.widget.Toast; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.impl.BuddyPresenter; import com.qunar.im.ui.presenter.views.IBuddyView; import com.qunar.im.base.util.EventBusEvent; @@ -79,7 +80,7 @@ public void init() { mBuddyPresenter = new BuddyPresenter(); mBuddyPresenter.setBuddyView(this); mBuddyPresenter.addFriend(); - et_reason.setText(getText(R.string.atom_ui_my_is) + com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserName()); + et_reason.setText(getText(R.string.atom_ui_my_is) + CurrentPreference.getInstance().getUserName()); } diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/AnswerRequestActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/AnswerRequestActivity.java index 25ef67f..6d70768 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/AnswerRequestActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/AnswerRequestActivity.java @@ -25,7 +25,7 @@ import com.qunar.im.base.util.graphics.BitmapHelper; import com.qunar.im.base.util.graphics.ImageUtils; import com.qunar.im.base.util.graphics.MyDiskCache; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.view.QtNewActionBar; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/AtListActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/AtListActivity.java index f91bd03..a33df35 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/AtListActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/AtListActivity.java @@ -17,7 +17,7 @@ import com.qunar.im.ui.presenter.views.IChatMemberAdapter; import com.qunar.im.base.util.ListUtil; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.MembersAdapter; import com.qunar.im.ui.view.MySearchView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/BackgroundTipActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/BackgroundTipActivity.java index 9635cdb..ed57f6e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/BackgroundTipActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/BackgroundTipActivity.java @@ -3,11 +3,9 @@ import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; -import android.view.View; import android.widget.TextView; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.ui.R; import com.qunar.im.ui.view.IconView; import com.qunar.im.ui.view.QtNewActionBar; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/ChatroomInvitationActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/ChatroomInvitationActivity.java index fdbffbb..9f0c4f3 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/ChatroomInvitationActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/ChatroomInvitationActivity.java @@ -31,7 +31,7 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.base.view.multilLevelTreeView.Node; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.InvitationAdapter; import com.qunar.im.ui.adapter.InviteToChatroomHorizonalListviewAdapter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/CollectionActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/CollectionActivity.java index 512b036..ade2b6a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/CollectionActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/CollectionActivity.java @@ -4,8 +4,8 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import com.qunar.im.base.module.MultiItemEntity; @@ -13,7 +13,7 @@ import com.qunar.im.ui.presenter.views.ICollectionPresenter; import com.qunar.im.ui.presenter.views.ICollectionView; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.CollectionAdapter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/CustomCaptureActvity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/CustomCaptureActvity.java index 2bdcc11..2617522 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/CustomCaptureActvity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/CustomCaptureActvity.java @@ -14,8 +14,8 @@ import android.hardware.Camera.Size; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/DownloadFileActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/DownloadFileActivity.java index 8e6b3e5..e9875c5 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/DownloadFileActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/DownloadFileActivity.java @@ -6,7 +6,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import android.text.TextUtils; import android.view.View; import android.widget.Button; @@ -14,17 +14,13 @@ import android.widget.Toast; import com.qunar.im.base.common.CommonDownloader; -import com.qunar.im.base.jsonbean.DownloadImageResult; import com.qunar.im.base.jsonbean.EncryptMsg; import com.qunar.im.base.module.IMMessage; -import com.qunar.im.base.protocol.ProgressResponseListener; import com.qunar.im.base.protocol.Protocol; import com.qunar.im.base.structs.TransitFileJSON; import com.qunar.im.base.transit.DownloadRequest; -import com.qunar.im.base.transit.IDownloadRequestComplete; import com.qunar.im.base.util.ChatTextHelper; import com.qunar.im.base.util.FileUtils; -import com.qunar.im.base.util.HttpUtils; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.Utils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/FontSizeActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/FontSizeActivity.java index fb3a3c2..7b5199e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/FontSizeActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/FontSizeActivity.java @@ -9,7 +9,7 @@ import com.qunar.im.ui.presenter.IProfilePresenter; import com.qunar.im.ui.presenter.impl.ProfilePresenter; import com.qunar.im.ui.presenter.views.IChangeFontSizeView; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.util.ResourceUtils; import com.qunar.im.ui.view.QtNewActionBar; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/FragmentActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/FragmentActivity.java index 2ae04b8..c9ae5cf 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/FragmentActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/FragmentActivity.java @@ -2,10 +2,11 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + import com.qunar.im.ui.R; import com.qunar.im.ui.view.QtNewActionBar; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/IMBaseActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/IMBaseActivity.java index 4ff07d5..53fb6cc 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/IMBaseActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/IMBaseActivity.java @@ -9,10 +9,10 @@ import android.os.Handler; import android.os.Message; import android.os.Vibrator; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.appcompat.app.AppCompatActivity; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -34,7 +34,7 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.broadcastreceivers.HomeWatcherReceiver; import com.qunar.im.ui.presenter.ISystemPresenter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/ImageBrowersingActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/ImageBrowersingActivity.java index b0d1d02..3c420d6 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/ImageBrowersingActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/ImageBrowersingActivity.java @@ -3,7 +3,6 @@ import android.content.Context; import android.os.Bundle; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; @@ -12,12 +11,9 @@ import com.qunar.im.base.module.IMMessage; import com.qunar.im.base.util.ChatTextHelper; import com.qunar.im.base.util.Constants; -import com.qunar.im.base.util.FileUtils; import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.MessageUtils; import com.qunar.im.ui.R; -import com.qunar.im.ui.fragment.GalleryFragment; -import com.qunar.im.ui.fragment.ImageBroswingFragment; import com.qunar.im.ui.fragment.WorkWorldBrowersingFragment; import com.qunar.im.ui.presenter.views.IBrowsingConversationImageView; import com.qunar.im.ui.util.StatusBarUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/LocalChatRecordActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/LocalChatRecordActivity.java index 306309b..7e6413a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/LocalChatRecordActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/LocalChatRecordActivity.java @@ -7,7 +7,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.module.IMMessage; import com.qunar.im.base.module.Nick; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/LoginActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/LoginActivity.java index e4d2097..9274695 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/LoginActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/LoginActivity.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.graphics.Paint; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; @@ -19,7 +18,6 @@ import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; -import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -27,6 +25,7 @@ import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.permission.PermissionCallback; import com.qunar.im.permission.PermissionDispatcher; @@ -42,7 +41,8 @@ import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.other.IQTalkLoginDelegate; import com.qunar.im.other.TestAccount; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.permission.PermissionCallback; +import com.qunar.im.permission.PermissionDispatcher; import com.qunar.im.protobuf.common.LoginType; import com.qunar.im.ui.R; import com.qunar.im.ui.util.ParseErrorEvent; @@ -127,8 +127,8 @@ protected void onCreate(Bundle savedInstanceState) { progressDialog.setCanceledOnTouchOutside(false); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); initViews(); - if (!TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt())) { - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(""); + if (!TextUtils.isEmpty(CurrentPreference.getInstance().getQvt())) { + CurrentPreference.getInstance().setQvt(""); } } @@ -253,7 +253,7 @@ void initViews() { verify_code_container.setVisibility(View.GONE); remember_me_cbx.setEnabled(false); } - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isRememberMe()) { + if (CurrentPreference.getInstance().isRememberMe()) { final String userName = CurrentPreference.getInstance().getUserid(); if (userName != null) { editText_username.setText(userName); @@ -467,7 +467,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent bundle) { bundle.getExtras().containsKey(Constants.BundleKey.WEB_LOGIN_RESULT)) { String jsonStr = bundle.getExtras().getString(Constants.BundleKey.WEB_LOGIN_RESULT); if (!TextUtils.isEmpty(jsonStr)) { - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(jsonStr); + CurrentPreference.getInstance().setQvt(jsonStr); DataUtils.getInstance(CommonConfig.globalContext).putPreferences(Constants.Preferences.qchat_qvt, jsonStr); loginPresenter.login(); } diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/MindWorkWorldActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/MindWorkWorldActivity.java index 8b80adb..869e914 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/MindWorkWorldActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/MindWorkWorldActivity.java @@ -7,7 +7,6 @@ import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.ui.R; import com.qunar.im.ui.fragment.WorkWorldFragment; -import com.qunar.im.ui.presenter.impl.WorkWorldManagerPresenter; import com.qunar.im.ui.view.QtNewActionBar; import com.qunar.im.ui.view.swipBackLayout.SwipeBackActivity; import com.qunar.im.utils.ConnectionUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesActivity.java index c976bf4..daf8367 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesActivity.java @@ -2,8 +2,8 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.orhanobut.logger.Logger; import com.qunar.im.base.module.MultiItemEntity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesDetailActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesDetailActivity.java index 9b5cd9d..f4c6611 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesDetailActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/MyFilesDetailActivity.java @@ -6,7 +6,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -35,7 +35,7 @@ import com.qunar.im.base.util.Utils; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.imagepicker.util.ProviderUtil; import com.qunar.im.ui.util.FileTypeUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigActivity.java index 519f85a..0840c99 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigActivity.java @@ -5,18 +5,16 @@ import android.graphics.Color; import android.net.Uri; import android.os.Bundle; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.util.Base64; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; -import android.widget.Toast; import com.google.gson.reflect.TypeToken; import com.orhanobut.logger.Logger; @@ -30,7 +28,6 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.protobuf.Event.QtalkEvent; import com.qunar.im.ui.R; import com.qunar.im.ui.entity.NavConfigInfo; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigAddActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigAddActivity.java index 09ea8bd..1795f57 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigAddActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigAddActivity.java @@ -3,7 +3,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Base64; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigQRActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigQRActivity.java index bdd53d3..e8d6551 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigQRActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/NavConfigQRActivity.java @@ -6,7 +6,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatActivity.java index fd059a1..53fa6dc 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatActivity.java @@ -91,6 +91,7 @@ import com.qunar.im.base.view.faceGridView.EmoticionMap; import com.qunar.im.base.view.faceGridView.EmoticonEntity; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.manager.IMPayManager; import com.qunar.im.core.services.QtalkNavicationService; @@ -103,7 +104,6 @@ import com.qunar.im.permission.PermissionDispatcher; import com.qunar.im.permission.PermissionUtils; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.thirdpush.core.QPushClient; @@ -1027,7 +1027,6 @@ public void registerContextMenu(View v) { //todo:进行menu操作 } }); - //这个监听目前没研究做什么 pbChatViewAdapter.setGravatarHandler(new ChatViewAdapter.GravatarHandler() { @Override public void requestGravatarEvent(String jid, final String imageSrc, final SimpleDraweeView view) { @@ -3327,7 +3326,7 @@ public void onResult(ArrayList photos, ArrayList paths, boolean i String time = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoMaxTime"); diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatSearchResultActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatSearchResultActivity.java index fbfc7cb..595bda0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatSearchResultActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/PbChatSearchResultActivity.java @@ -11,21 +11,12 @@ import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.qunar.im.base.module.IMMessage; -import com.qunar.im.base.structs.MessageType; -import com.qunar.im.base.util.Constants; -import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.ui.R; import com.qunar.im.ui.presenter.ICloudRecordPresenter; -import com.qunar.im.ui.presenter.IShowNickPresenter; -import com.qunar.im.ui.presenter.impl.DailyMindPresenter; import com.qunar.im.ui.presenter.impl.MultipleSessionPresenter; -import com.qunar.im.ui.presenter.impl.SendLocationPresenter; import com.qunar.im.ui.presenter.impl.SingleSessionPresenter; import com.qunar.im.utils.ConnectionUtil; -import java.util.Collections; import java.util.List; -import java.util.logging.Logger; public class PbChatSearchResultActivity extends PbChatActivity { diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoActivity.java index 4b7d5b7..53d8ebc 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoActivity.java @@ -7,8 +7,8 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.PopupMenu.OnMenuItemClickListener; +import androidx.core.content.ContextCompat; +import androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener; import android.text.Html; import android.text.TextUtils; import android.view.LayoutInflater; @@ -47,7 +47,9 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.permission.PermissionCallback; +import com.qunar.im.permission.PermissionDispatcher; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.view.QtNewActionBar; import com.qunar.im.ui.view.swipBackLayout.SwipeBackActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoMyActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoMyActivity.java index ec22b69..0e37227 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoMyActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/PersonalInfoMyActivity.java @@ -8,7 +8,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.v7.widget.PopupMenu; +import androidx.appcompat.widget.PopupMenu; import android.text.TextUtils; import android.view.Gravity; import android.view.LayoutInflater; @@ -44,7 +44,9 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.Utils; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.permission.PermissionCallback; +import com.qunar.im.permission.PermissionDispatcher; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.view.QtNewActionBar; import com.qunar.im.ui.view.swipBackLayout.SwipeBackActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/QChatLoginActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/QChatLoginActivity.java index e8ee781..b06fa0e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/QChatLoginActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/QChatLoginActivity.java @@ -19,6 +19,7 @@ import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.permission.PermissionCallback; import com.qunar.im.permission.PermissionDispatcher; import com.qunar.im.ui.presenter.ILoginPresenter; @@ -69,8 +70,8 @@ public void onCreate(Bundle saveInstanceState) { tb_padding = Utils.dipToPixels(QChatLoginActivity.this, 10); bindViews(); initViews(); - if (!TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt())) { - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(""); + if (!TextUtils.isEmpty(CurrentPreference.getInstance().getQvt())) { + CurrentPreference.getInstance().setQvt(""); } go2WebLogin(); @@ -227,9 +228,9 @@ public void onActivityResult(int requestCode, int resultCode, Intent bundle) { String jsonStr = bundle.getExtras().getString(Constants.BundleKey.WEB_LOGIN_RESULT); if (!TextUtils.isEmpty(jsonStr)) { DataUtils.getInstance(CommonConfig.globalContext).putPreferences(Constants.Preferences.qchat_qvt, jsonStr); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(jsonStr); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setRememberMe(true); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setAutoLogin(true); + CurrentPreference.getInstance().setQvt(jsonStr); + CurrentPreference.getInstance().setRememberMe(true); + CurrentPreference.getInstance().setAutoLogin(true); loginPresenter.login(); } } @@ -251,7 +252,7 @@ protected void go2WebLogin() { Intent intent = new Intent(QChatLoginActivity.this, QunarWebActvity.class); intent.putExtra(Constants.BundleKey.WEB_FROM, Constants.BundleValue.UC_LOGIN); intent.putExtra(WebMsgActivity.IS_HIDE_BAR, !CommonConfig.isDebug); - intent.setData(Uri.parse("https://user.qunar.com/mobile/login.jsp?ret=" + + intent.setData(Uri.parse("" + Constants.BundleKey.WEB_LOGIN_RESULT + "&loginType=mobile&onlyLogin=true")); startActivityForResult(intent, WEB_LOGIN); } @@ -318,8 +319,8 @@ public void run() { } // super.presenter.getMyCapability(); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setRememberMe(true); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setAutoLogin(true); + CurrentPreference.getInstance().setRememberMe(true); + CurrentPreference.getInstance().setAutoLogin(true); getHandler().post(new Runnable() { @Override diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/QTalkUserLoginActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/QTalkUserLoginActivity.java index 5acc00b..4a6c63a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/QTalkUserLoginActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/QTalkUserLoginActivity.java @@ -38,17 +38,16 @@ import com.qunar.im.base.util.NetworkUtils; import com.qunar.im.base.util.Utils; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.permission.PermissionCallback; import com.qunar.im.permission.PermissionDispatcher; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.LoginType; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.ui.R; import com.qunar.im.ui.presenter.ILoginPresenter; import com.qunar.im.ui.presenter.factory.LoginFactory; -import com.qunar.im.ui.presenter.impl.QTalkPublicLoginPresenter; import com.qunar.im.ui.presenter.views.ILoginView; import com.qunar.im.ui.sdk.QIMSdk; import com.qunar.im.ui.presenter.ILoginPresenter; @@ -410,7 +409,7 @@ void initViews() { qtuser_password_et.setText(""); qtuer_remember_me_cbx.setEnabled(false); - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isRememberMe()) { + if (CurrentPreference.getInstance().isRememberMe()) { final String userName = CurrentPreference.getInstance().getUserid(); if (userName != null) { qtuser_username_et.setText(userName); @@ -655,7 +654,7 @@ public void onActivityResult(int requestCode,int resultCode,Intent bundle) { bundle.getExtras().containsKey(Constants.BundleKey.WEB_LOGIN_RESULT)) { String jsonStr = bundle.getExtras().getString(Constants.BundleKey.WEB_LOGIN_RESULT); if(!TextUtils.isEmpty(jsonStr)) { - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(jsonStr); + CurrentPreference.getInstance().setQvt(jsonStr); loginPresenter.login(); } } @@ -833,7 +832,7 @@ protected void go2WebLogin() Intent intent = new Intent(QTalkUserLoginActivity.this, QunarWebActvity.class); intent.putExtra(Constants.BundleKey.WEB_FROM, Constants.BundleValue.UC_LOGIN); intent.putExtra(WebMsgActivity.IS_HIDE_BAR, true); - intent.setData(Uri.parse("https://user.qunar.com/mobile/login.jsp?ret=" + + intent.setData(Uri.parse("" + Constants.BundleKey.WEB_LOGIN_RESULT + "&loginType=mobile")); startActivityForResult(intent, WEB_LOGIN); } diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkOpenTravelCalendar.java b/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkOpenTravelCalendar.java index 805fe08..c4c24f6 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkOpenTravelCalendar.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkOpenTravelCalendar.java @@ -3,9 +3,9 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; import android.view.View; import android.widget.Toast; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkServiceExternalRNActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkServiceExternalRNActivity.java index e1f48c4..4d0e803 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkServiceExternalRNActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkServiceExternalRNActivity.java @@ -2,9 +2,9 @@ import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; import android.text.TextUtils; import com.facebook.react.ReactInstanceManager; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkUserHostActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkUserHostActivity.java index 8a363e7..2c978f2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkUserHostActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/QtalkUserHostActivity.java @@ -10,20 +10,12 @@ import android.widget.EditText; import android.widget.ListView; -import com.google.gson.reflect.TypeToken; -import com.orhanobut.logger.Logger; import com.qunar.im.base.jsonbean.DomainResult; import com.qunar.im.base.protocol.LoginAPI; import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.util.Constants; -import com.qunar.im.base.util.DataUtils; -import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.ListUtil; -import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.ui.R; -import com.qunar.im.ui.entity.NavConfigInfo; -import com.qunar.im.ui.sdk.QIMSdk; -import com.qunar.im.ui.util.NavConfigUtils; import com.qunar.im.ui.view.QtNewActionBar; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/QunarWebActvity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/QunarWebActvity.java index 50c09a8..3932fa7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/QunarWebActvity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/QunarWebActvity.java @@ -19,9 +19,9 @@ import android.os.Bundle; import android.os.Environment; import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.annotation.RequiresApi; -import android.support.v4.content.ContextCompat; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.View; import android.webkit.CookieManager; @@ -61,7 +61,7 @@ import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.other.QtalkSDK; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.broadcastreceivers.ShareReceiver; import com.qunar.im.ui.imagepicker.ImagePicker; @@ -753,7 +753,7 @@ public void onClick(View v) { } }); //qchat登录页显示反馈按钮 - if(!CommonConfig.isQtalk && mUrl.contains("user.qunar.com/mobile/login.jsp")){ + if(!CommonConfig.isQtalk){ setActionBarRightSpecial(R.string.atom_ui_new_feedback); setActionBarRightIconSpecialClick(v -> { Intent intent = new Intent(QunarWebActvity.this, BugreportActivity.class); @@ -962,6 +962,20 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onBackPressed() { + if(isVideoAudioCall) { + if(Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { + mWebView.evaluateJavascript("javascript:closePeerConn()", + new ValueCallback() { + @Override + public void onReceiveValue(String s) { + Logger.i("lex onReceiveValue " + s); + } + }); + } else { + mWebView.loadUrl("javascript:closePeerConn()"); + } + + } if (mWebView.getUrl() == null || mWebView.getUrl().contains("home.do") || Constants.BundleValue.HONGBAO.equals(from)) { this.finish(); diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/RobotChatActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/RobotChatActivity.java index a91d866..8e2a01b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/RobotChatActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/RobotChatActivity.java @@ -33,7 +33,7 @@ import com.qunar.im.base.util.EventBusEvent; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.ChatViewAdapter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/RobotInfoActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/RobotInfoActivity.java index 7be4ba1..e8d69be 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/RobotInfoActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/RobotInfoActivity.java @@ -10,6 +10,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.request.ImageRequest; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.util.FacebookImageUtil; import com.qunar.im.ui.presenter.IRobotInfoPresenter; import com.qunar.im.ui.presenter.impl.RobotInfoPresenter; @@ -188,7 +189,7 @@ private void startRobotChatActivity() { @Override public String getUserId() { - return com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid(); + return CurrentPreference.getInstance().getUserid(); } @Override diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/SearchChatPicVideoActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/SearchChatPicVideoActivity.java index 17147dc..e9d827b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/SearchChatPicVideoActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/SearchChatPicVideoActivity.java @@ -6,8 +6,8 @@ import android.net.Uri; import android.os.Bundle; import android.os.Environment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.widget.AbsListView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/SelfWorkWorldActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/SelfWorkWorldActivity.java index df0dcfb..217298a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/SelfWorkWorldActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/SelfWorkWorldActivity.java @@ -1,10 +1,11 @@ package com.qunar.im.ui.activity; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; import com.qunar.im.ui.R; import com.qunar.im.ui.fragment.WorkWorldAtShowFragment; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/ShareLocationActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/ShareLocationActivity.java index 404068a..6d38de0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/ShareLocationActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/ShareLocationActivity.java @@ -50,7 +50,7 @@ import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.base.util.Utils; import com.qunar.im.base.util.graphics.MyDiskCache; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.view.QtNewActionBar; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/SwipeActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/SwipeActivity.java index edb453a..8925ec6 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/SwipeActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/SwipeActivity.java @@ -10,7 +10,7 @@ import android.graphics.Color; import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.VelocityTracker; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/TabMainActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/TabMainActivity.java index d91831a..41f9b1f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/TabMainActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/TabMainActivity.java @@ -12,13 +12,14 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import android.text.TextUtils; import android.util.LruCache; import android.view.View; @@ -46,7 +47,7 @@ import com.qunar.im.base.util.ListUtil; import com.qunar.im.base.util.Utils; import com.qunar.im.common.CommonConfig; -import com.qunar.im.core.manager.IMLogicManager; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.services.FeedBackServcie; import com.qunar.im.core.services.QtalkNavicationService; @@ -58,12 +59,9 @@ import com.qunar.im.permission.PermissionDispatcher; import com.qunar.im.protobuf.Event.ConnectionErrorEvent; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.LoginType; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; -import com.qunar.im.thirdpush.QTPushConfiguration; -import com.qunar.im.protobuf.utils.JSONUtils; import com.qunar.im.thirdpush.core.QPushClient; import com.qunar.im.ui.R; import com.qunar.im.ui.broadcastreceivers.ConnectionStateReceiver; @@ -411,7 +409,7 @@ public synchronized void login() { if (!CommonConfig.isQtalk && TextUtils.isEmpty(DataUtils.getInstance(this).getPreferences(Constants.Preferences.qchat_qvt, ""))) { IMUserDefaults.getStandardUserDefaults().newEditor(this).removeObject(Constants.Preferences.usertoken).synchronize(); } - boolean autoLogin = com.qunar.im.protobuf.common.CurrentPreference.getInstance().isAutoLogin(); + boolean autoLogin = CurrentPreference.getInstance().isAutoLogin(); if (autoLogin) { Logger.i("判断是否可以自动登录:" + connectionUtil.isCanAutoLogin()); if (!connectionUtil.isCanAutoLogin()) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/VideoPlayActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/VideoPlayActivity.java index e31c290..4db03fa 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/VideoPlayActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/VideoPlayActivity.java @@ -8,8 +8,8 @@ import android.content.res.Configuration; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Toast; @@ -455,7 +455,7 @@ public static void start(Fragment fragment) { fragment.startActivity(intent); } - public static void start(android.support.v4.app.Fragment fragment) { + public static void start(androidx.fragment.app.Fragment fragment) { Intent intent = new Intent(fragment.getContext(), VideoPlayActivity.class); fragment.startActivity(intent); diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WebMsgActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WebMsgActivity.java index b0ebd91..b7f74dd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WebMsgActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WebMsgActivity.java @@ -16,7 +16,7 @@ import com.qunar.im.ui.presenter.views.IChatView; import com.qunar.im.base.util.EventBusEvent; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.ui.events.WeiDaoOrderEvent; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldActivity.java index f593346..04a507b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldActivity.java @@ -4,10 +4,11 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.design.widget.BottomSheetDialog; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import com.google.android.material.bottomsheet.BottomSheetDialog; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import android.text.TextUtils; import android.view.ContextMenu; import android.view.LayoutInflater; @@ -111,7 +112,7 @@ public void onClick(View v) { bottomSheetDialog.setContentView(view); // //给布局设置透明背景色 - bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) + bottomSheetDialog.getDelegate().findViewById(com.google.android.material.R.id.design_bottom_sheet) .setBackgroundColor(WorkWorldActivity.this.getResources().getColor(android.R.color.transparent)); diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldAtListActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldAtListActivity.java index fc9c2a1..547a784 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldAtListActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldAtListActivity.java @@ -2,13 +2,12 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.KeyEvent; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.EditText; -import android.widget.TextView; import android.widget.Toast; import com.qunar.im.ui.presenter.WorkWorldAtListPresenter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldDetailsActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldDetailsActivity.java index 7e95337..e6227ee 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldDetailsActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldDetailsActivity.java @@ -14,13 +14,14 @@ import android.os.Build; import android.os.Bundle; import android.os.Parcelable; -import android.support.annotation.RequiresApi; -import android.support.design.widget.BottomSheetDialog; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.LinearSmoothScroller; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.RequiresApi; +import com.google.android.material.bottomsheet.BottomSheetDialog; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.LinearSmoothScroller; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import android.text.Editable; import android.text.SpannableString; import android.text.SpannableStringBuilder; @@ -73,7 +74,7 @@ import com.qunar.im.base.view.faceGridView.EmoticonEntity; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.ReleaseCircleGridAdapter; import com.qunar.im.ui.adapter.WorkWorldDetailsAdapter; @@ -584,7 +585,7 @@ public void onClick(View v) { bottomSheetDialog.setContentView(view); // //给布局设置透明背景色 - bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) + bottomSheetDialog.getDelegate().findViewById(com.google.android.material.R.id.design_bottom_sheet) .setBackgroundColor(WorkWorldDetailsActivity.this.getResources().getColor(android.R.color.transparent)); @@ -1025,7 +1026,7 @@ public void onClick(View v) { bottomSheetDialog.setContentView(view); // //给布局设置透明背景色 - bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) + bottomSheetDialog.getDelegate().findViewById(com.google.android.material.R.id.design_bottom_sheet) .setBackgroundColor(WorkWorldDetailsActivity.this.getResources().getColor(android.R.color.transparent)); diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivity.java index eb1bc5f..55968c3 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivity.java @@ -1,29 +1,21 @@ package com.qunar.im.ui.activity; import android.os.Bundle; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.RelativeLayout; -import android.widget.TextView; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.qunar.im.base.module.MultiItemEntity; -import com.qunar.im.base.module.WorkWorldDetailsLabelData; -import com.qunar.im.base.module.WorkWorldItem; import com.qunar.im.base.module.WorkWorldNoticeItem; import com.qunar.im.ui.presenter.WorkWorldNoticePresenter; import com.qunar.im.ui.presenter.impl.WorkWorldNoticeManagerPresenter; import com.qunar.im.ui.presenter.views.WorkWorldNoticeView; import com.qunar.im.ui.R; import com.qunar.im.ui.adapter.RecycleViewDivider; -import com.qunar.im.ui.adapter.WorkWorldAdapter; import com.qunar.im.ui.adapter.WorkWorldDetailsAdapter; -import com.qunar.im.ui.adapter.WorkWorldNoticeAdapter; import com.qunar.im.ui.view.QtNewActionBar; import com.qunar.im.ui.view.swipBackLayout.SwipeBackActivity; -import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivityV2.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivityV2.java index eed66e0..bd90d7b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivityV2.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldNoticeActivityV2.java @@ -1,18 +1,11 @@ package com.qunar.im.ui.activity; import android.os.Bundle; -import android.text.TextUtils; -import com.qunar.im.base.module.Nick; -import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.ui.R; -import com.qunar.im.ui.fragment.WorkWorldFragment; import com.qunar.im.ui.fragment.WorkWorldNoticeFragment; import com.qunar.im.ui.view.QtNewActionBar; import com.qunar.im.ui.view.swipBackLayout.SwipeBackActivity; -import com.qunar.im.utils.ConnectionUtil; - -import static com.qunar.im.ui.fragment.WorkWorldFragment.WorkWordJID; public class WorkWorldNoticeActivityV2 extends SwipeBackActivity { protected QtNewActionBar qtNewActionBar;//头部导航 diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldReleaseCircleActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldReleaseCircleActivity.java index 2e2d37d..41b696b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldReleaseCircleActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldReleaseCircleActivity.java @@ -6,10 +6,10 @@ import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; -import android.support.annotation.RequiresApi; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; +import androidx.annotation.RequiresApi; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.ItemTouchHelper; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -34,7 +34,7 @@ import com.qunar.im.base.module.ReleaseCircleImageItemDate; import com.qunar.im.base.module.ReleaseCircleNoChangeItemDate; import com.qunar.im.base.module.WorkWorldItem; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.ReleaseCirclePresenter; import com.qunar.im.ui.presenter.impl.ReleaseCircleManagerPresenter; import com.qunar.im.ui.presenter.views.ReleaseCircleView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldSearchActivity.java b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldSearchActivity.java index 7da7914..4fd502f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldSearchActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/activity/WorkWorldSearchActivity.java @@ -3,14 +3,14 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; -import android.widget.Toast; import com.orhanobut.logger.Logger; import com.qunar.im.base.module.MultiItemEntity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/AccountAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/AccountAdapter.java index b61821e..524dc87 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/AccountAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/AccountAdapter.java @@ -11,7 +11,7 @@ import com.qunar.im.base.util.DataUtils; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import java.util.List; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItem.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItem.java index 77e55f3..c82c31e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItem.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItem.java @@ -2,7 +2,8 @@ import android.content.Context; import android.os.Bundle; -import android.support.v4.app.Fragment; + +import androidx.fragment.app.Fragment; public class FragmentPagerItem extends PagerItem { diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItemAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItemAdapter.java index c154062..a6c9e0c 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItemAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItemAdapter.java @@ -1,11 +1,12 @@ package com.qunar.im.ui.adapter; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.util.SparseArrayCompat; import android.view.ViewGroup; +import androidx.collection.SparseArrayCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + import java.lang.ref.WeakReference; public class FragmentPagerItemAdapter extends FragmentPagerAdapter { diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItems.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItems.java index e3e5475..53013e9 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItems.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/FragmentPagerItems.java @@ -2,8 +2,8 @@ import android.content.Context; import android.os.Bundle; -import android.support.annotation.StringRes; -import android.support.v4.app.Fragment; +import androidx.annotation.StringRes; +import androidx.fragment.app.Fragment; public class FragmentPagerItems extends PagerItems { diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewAdapter.java index b533ea6..641bf9c 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewAdapter.java @@ -1,11 +1,12 @@ package com.qunar.im.ui.adapter; import android.content.Context; -import android.support.v4.view.PagerAdapter; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; +import androidx.viewpager.widget.PagerAdapter; + import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.drawable.ProgressBarDrawable; import com.facebook.drawee.drawable.ScalingUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewNewAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewNewAdapter.java index cb68794..b24db90 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewNewAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/ImagePageViewNewAdapter.java @@ -7,13 +7,14 @@ import android.os.Parcelable; import android.support.rastermill.FrameSequence; import android.support.rastermill.FrameSequenceDrawable; -import android.support.v4.view.PagerAdapter; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import androidx.viewpager.widget.PagerAdapter; + import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.GlideDrawable; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/MuliSizeImageAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/MuliSizeImageAdapter.java index b4f10ea..5bca93c 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/MuliSizeImageAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/MuliSizeImageAdapter.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/MyFilesAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/MyFilesAdapter.java index ae4b514..b117f9f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/MyFilesAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/MyFilesAdapter.java @@ -17,7 +17,7 @@ import com.qunar.im.base.util.FileUtils; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.MyFilesActivity; import com.qunar.im.ui.activity.MyFilesDetailActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/PublicWorkWorldAdapterDraw.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/PublicWorkWorldAdapterDraw.java index cd2e7b2..1db1189 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/PublicWorkWorldAdapterDraw.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/PublicWorkWorldAdapterDraw.java @@ -9,11 +9,11 @@ import android.net.Uri; import android.os.Build; import android.os.Parcelable; -import android.support.annotation.RequiresApi; -import android.support.v4.app.FragmentActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.RequiresApi; +import androidx.fragment.app.FragmentActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.Html; import android.text.SpannableString; import android.text.SpannableStringBuilder; @@ -56,7 +56,7 @@ import com.qunar.im.base.view.faceGridView.EmoticonEntity; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.activity.WorkWorldDetailsActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/RVRecentConvsAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/RVRecentConvsAdapter.java index c74cdad..438e495 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/RVRecentConvsAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/RVRecentConvsAdapter.java @@ -13,6 +13,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.module.Nick; import com.qunar.im.base.module.RecentConversation; @@ -92,7 +93,7 @@ public RVRecentConvsAdapter(Context cxt) { @Override protected void convert(final BaseViewHolder holder, RecentConversation item) { - int fontSizeMode = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getFontSizeMode(); + int fontSizeMode = CurrentPreference.getInstance().getFontSizeMode(); float text1FontSize = context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_large); float textViewTimeFontSize = context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_smaller); float text2FontSize = context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_small); diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/RecentConvsAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/RecentConvsAdapter.java index 78b315d..37ac0da 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/RecentConvsAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/RecentConvsAdapter.java @@ -8,7 +8,6 @@ import android.text.TextUtils; import android.text.style.ForegroundColorSpan; import android.util.SparseArray; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -24,16 +23,12 @@ import com.qunar.im.base.module.RecentConversation; import com.qunar.im.base.common.ConversitionType; import com.qunar.im.base.util.ChatTextHelper; -import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.DateTimeUtils; import com.qunar.im.base.util.InternDatas; -import com.qunar.im.base.util.LogUtil; import com.qunar.im.ui.util.ProfileUtils; -import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.ui.R; -import com.qunar.im.ui.util.ResourceUtils; import com.qunar.im.ui.view.IconView; import com.qunar.im.ui.view.recentView.ChatRender; import com.qunar.im.ui.view.recentView.CommonHolderView; @@ -46,7 +41,6 @@ import com.qunar.im.ui.view.recentView.RobotRender; import com.qunar.im.utils.QtalkStringUtils; -import java.util.LinkedList; import java.util.List; /** @@ -152,7 +146,7 @@ public View getView(int position, View convertView, ViewGroup parent) { holder = (CommonHolderView) convertView.getTag(); } holder.mConverLineView.setVisibility(position == 0 ? View.GONE : View.VISIBLE); -// int fontSizeMode = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getFontSizeMode(); +// int fontSizeMode = CurrentPreference.getInstance().getFontSizeMode(); // float text1FontSize = context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_large); // float textViewTimeFontSize = context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_smaller); // float text2FontSize = context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_small); diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/RecycleViewDivider.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/RecycleViewDivider.java index 658a24b..a754dd3 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/RecycleViewDivider.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/RecycleViewDivider.java @@ -6,9 +6,9 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; public class RecycleViewDivider extends RecyclerView.ItemDecoration { diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/ReleaseCircleGridAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/ReleaseCircleGridAdapter.java index 8e8fccd..88fe80e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/ReleaseCircleGridAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/ReleaseCircleGridAdapter.java @@ -10,7 +10,6 @@ import com.qunar.im.base.module.ReleaseCircleNoChangeItemDate; import com.qunar.im.base.util.MessageUtils; import com.qunar.im.ui.util.ProfileUtils; -import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.ui.R; import com.qunar.im.ui.imagepicker.ImagePicker; import com.qunar.im.base.module.ImageItem; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/RobotConvAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/RobotConvAdapter.java index 6d9789e..9cd69c5 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/RobotConvAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/RobotConvAdapter.java @@ -14,6 +14,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.util.FacebookImageUtil; import com.qunar.im.base.module.RobotConversation; import com.qunar.im.base.util.ChatTextHelper; @@ -74,7 +75,7 @@ public View getView(int position, View convertView, ViewGroup parent) { } else { holder = (ViewHolder) convertView.getTag(); } - int fontSizeMode = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getFontSizeMode(); + int fontSizeMode = CurrentPreference.getInstance().getFontSizeMode(); float text1FontSize=context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_large); float textViewTimeFontSize=context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_smaller); float text2FontSize=context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_small); diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/TabMainFragmentViewPager.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/TabMainFragmentViewPager.java index c284d05..31dc643 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/TabMainFragmentViewPager.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/TabMainFragmentViewPager.java @@ -1,9 +1,10 @@ package com.qunar.im.ui.adapter; import android.content.Context; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.core.services.QtalkNavicationService; public class TabMainFragmentViewPager extends ViewPager { diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAdapter.java index 332d092..46538ef 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAdapter.java @@ -3,8 +3,8 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.os.Build; -import android.support.annotation.RequiresApi; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.RequiresApi; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import com.qunar.im.base.module.WorkWorldItem; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListAdapter.java index b080f4d..66cc3cf 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListAdapter.java @@ -3,25 +3,21 @@ import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; -import com.qunar.im.base.module.MultiItemEntity; import com.qunar.im.base.module.Nick; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.ui.R; import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.ui.view.IconView; -import com.qunar.im.ui.view.recyclerview.BaseMultiItemQuickAdapter; import com.qunar.im.ui.view.recyclerview.BaseQuickAdapter; import com.qunar.im.ui.view.recyclerview.BaseViewHolder; import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.utils.QtalkStringUtils; import java.util.ArrayList; import java.util.HashMap; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListIsSelectAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListIsSelectAdapter.java index 02b8231..694445c 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListIsSelectAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtListIsSelectAdapter.java @@ -1,7 +1,6 @@ package com.qunar.im.ui.adapter; import android.app.Activity; -import android.support.annotation.Nullable; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -16,8 +15,6 @@ import com.qunar.im.ui.view.recyclerview.BaseViewHolder; import com.qunar.im.utils.ConnectionUtil; -import java.util.List; - public class WorkWorldAtListIsSelectAdapter extends BaseQuickAdapter { private Activity mActivity; private static String defaultHeadUrl = QtalkNavicationService.getInstance().getSimpleapiurl() + "/file/v2/download/perm/3ca05f2d92f6c0034ac9aee14d341fc7.png"; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtShowAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtShowAdapter.java index 2910534..72c5080 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtShowAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldAtShowAdapter.java @@ -3,10 +3,9 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.os.Build; -import android.support.annotation.RequiresApi; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.RequiresApi; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; -import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldDetailsAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldDetailsAdapter.java index 44c8bc1..e9e52a7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldDetailsAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldDetailsAdapter.java @@ -10,8 +10,8 @@ import android.net.Uri; import android.os.Build; import android.os.Parcelable; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.Html; import android.text.SpannableString; import android.text.SpannableStringBuilder; @@ -57,7 +57,7 @@ import com.qunar.im.base.view.faceGridView.EmoticonEntity; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.activity.WorkWorldDetailsActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldNoticeAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldNoticeAdapter.java index 3aeca31..4efffa0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldNoticeAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/adapter/WorkWorldNoticeAdapter.java @@ -1,7 +1,5 @@ package com.qunar.im.ui.adapter; -import android.view.MenuInflater; - import com.qunar.im.base.module.MultiItemEntity; import com.qunar.im.ui.view.recyclerview.BaseMultiItemQuickAdapter; import com.qunar.im.ui.view.recyclerview.BaseViewHolder; diff --git a/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/HomeWatcherReceiver.java b/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/HomeWatcherReceiver.java index c3a9943..924144d 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/HomeWatcherReceiver.java +++ b/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/HomeWatcherReceiver.java @@ -9,8 +9,6 @@ import android.content.Intent; import com.qunar.im.base.util.LogUtil; -import com.qunar.im.protobuf.common.CurrentPreference; -import com.qunar.im.ui.services.PushServiceUtils; /** * home键监听 @@ -33,9 +31,9 @@ public void onReceive(Context context, Intent intent) { LogUtil.i(LOG_TAG, "reason: " + reason); if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) { - if(CurrentPreference.getInstance().isTurnOnPsuh()) { - PushServiceUtils.startAMDService(context); - } +// if(CurrentPreference.getInstance().isTurnOnPsuh()) { +// PushServiceUtils.startAMDService(context); +// } LogUtil.i(LOG_TAG, "homekey"); } else if (SYSTEM_DIALOG_REASON_RECENT_APPS.equals(reason)) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/PushReceiver.java b/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/PushReceiver.java index f1b1ea9..0d060cd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/PushReceiver.java +++ b/imsdk/src/main/java/com/qunar/im/ui/broadcastreceivers/PushReceiver.java @@ -19,8 +19,7 @@ import com.orhanobut.logger.Logger; import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.Nick; -import com.qunar.im.ui.presenter.ISystemPresenter; -import com.qunar.im.ui.presenter.impl.SystemPresenter; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.base.shortutbadger.ShortcutBadger; import com.qunar.im.base.util.ChatTextHelper; import com.qunar.im.base.util.JsonUtils; @@ -32,7 +31,6 @@ import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.ui.R; import com.qunar.im.ui.entity.OpsPushMessage; @@ -64,7 +62,7 @@ private void changeSound(Context context) { MediaUtils.loadNewMsgSound(QunarIMApp.getContext(), CommonConfig.DEFAULT_NEW_MSG); return; } - if (!CommonConfig.isQtalk && com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()) { + if (!CommonConfig.isQtalk && CurrentPreference.getInstance().isMerchants()) { int soundId = -1; try { soundId = context. @@ -96,7 +94,7 @@ public void onReceive(Context context, Intent intent) { notificationManager = null; } else { if (!CommonConfig.leave) return; - if (!com.qunar.im.protobuf.common.CurrentPreference.getInstance().isOfflinePush()) return; + if (!CurrentPreference.getInstance().isOfflinePush()) return; Bundle extras = intent.getExtras(); if (extras == null || !extras.containsKey("message")) return; String msg = extras.getString("message"); @@ -230,7 +228,7 @@ private void showNotification(String message, String title, String id, String ty int unknowHashcode = 0; // int unknowHashcode = 1916565926;//0; int hascode = unknowHashcode + id.hashCode(); - if(!com.qunar.im.protobuf.common.CurrentPreference.getInstance().isShowContentPush()){ + if(!CurrentPreference.getInstance().isShowContentPush()){ title = "QTALK"; message = "您有新消息,点击查看"; // hascode = str / 10 * 10 + title.hashCode(); @@ -313,7 +311,7 @@ private void showNotification(String message, String title, String id, String ty PendingIntent.FLAG_UPDATE_CURRENT); Notification.Builder builder = new Notification.Builder(CommonConfig.globalContext); - boolean soundOn = com.qunar.im.protobuf.common.CurrentPreference.getInstance().isTurnOnMsgSound(); + boolean soundOn = CurrentPreference.getInstance().isTurnOnMsgSound(); int defaults = Notification.DEFAULT_LIGHTS; if (soundOn) { // defaults |= Notification.DEFAULT_SOUND; @@ -321,13 +319,13 @@ private void showNotification(String message, String title, String id, String ty builder.setSound(Uri.parse("android.resource://" + CommonConfig.globalContext.getPackageName() + "/" + R.raw.atom_ui_new_msg)); } else { - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()) {//客服提示音 + if (CurrentPreference.getInstance().isMerchants()) {//客服提示音 builder.setSound(Uri.parse("android.resource://" + CommonConfig.globalContext.getPackageName() + "/" + R.raw.atom_ui_qcaht_consult_sound)); } } } - boolean vibrateOn = com.qunar.im.protobuf.common.CurrentPreference.getInstance().isTurnOnMsgShock(); + boolean vibrateOn = CurrentPreference.getInstance().isTurnOnMsgShock(); if (vibrateOn) { defaults |= Notification.DEFAULT_VIBRATE; } diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/BaseFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/BaseFragment.java index d4a0c84..d884530 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/BaseFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/BaseFragment.java @@ -3,7 +3,8 @@ import android.content.Intent; import android.os.Bundle; import android.os.Handler; -import android.support.v4.app.Fragment; + +import androidx.fragment.app.Fragment; import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/BuddiesFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/BuddiesFragment.java index eb4e05d..533269b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/BuddiesFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/BuddiesFragment.java @@ -12,6 +12,7 @@ import com.qunar.im.base.common.BackgroundExecutor; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.IFriendsManagePresenter; import com.qunar.im.ui.presenter.impl.BuddyPresenter; import com.qunar.im.ui.presenter.views.IFriendsManageView; @@ -172,12 +173,12 @@ private void initHeader() }else { headerView.changeRobotVisible(false); } - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()) { + if (CurrentPreference.getInstance().isMerchants()) { headerView.changeOrgVisible(true); }else if(CommonConfig.isQtalk){ headerView.changeOrgVisible(QtalkNavicationService.getInstance().isShowOrganizational()); } -// else if(!com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()&& +// else if(!CurrentPreference.getInstance().isMerchants()&& // !CommonConfig.showQchatGroup){ // headerView.setLayoutParams(new AbsListView. // LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,1)); diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/CommonSettingFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/CommonSettingFragment.java index 92f9673..ccf7427 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/CommonSettingFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/CommonSettingFragment.java @@ -14,7 +14,7 @@ import com.qunar.im.ui.presenter.impl.ProfilePresenter; import com.qunar.im.ui.presenter.views.IProfileView; import com.qunar.im.base.util.MediaUtils; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.services.PushServiceUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxFragment.java index 79fa3ea..527a377 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxFragment.java @@ -2,7 +2,7 @@ import android.content.Context; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxSubFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxSubFragment.java index 43b15b5..85017e0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxSubFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyCreatePasswordBoxSubFragment.java @@ -3,7 +3,7 @@ import android.content.Context; import android.graphics.Paint; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxFragment.java index fe81f63..13cf1b0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxFragment.java @@ -5,7 +5,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.text.method.PasswordTransformationMethod; import android.view.LayoutInflater; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxSubFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxSubFragment.java index d3bee23..6c28523 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxSubFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/DailyPasswordBoxSubFragment.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/GalleryFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/GalleryFragment.java index 2033cdc..28255f2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/GalleryFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/GalleryFragment.java @@ -5,7 +5,6 @@ import android.app.Dialog; import android.graphics.Bitmap; import android.os.Bundle; -import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.view.ContextMenu; import android.view.LayoutInflater; @@ -17,6 +16,8 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.viewpager.widget.ViewPager; + import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.Target; import com.facebook.imagepipeline.request.ImageRequest; @@ -39,7 +40,6 @@ import com.qunar.im.ui.util.QRRouter; import com.qunar.im.ui.util.ShareUtil; import com.qunar.im.ui.view.CommonDialog; -import com.qunar.im.ui.view.bigimageview.ImageBrowsUtil; import com.qunar.im.ui.view.bigimageview.tool.utility.image.DownloadPictureUtil; import com.qunar.im.ui.view.zxing.decode.DecodeBitmap; import com.qunar.im.utils.QRUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/ImageBroswingFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/ImageBroswingFragment.java index 31084ab..b1ce6d9 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/ImageBroswingFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/ImageBroswingFragment.java @@ -30,7 +30,6 @@ import com.qunar.im.ui.util.QRRouter; import com.qunar.im.ui.util.ShareUtil; import com.qunar.im.ui.view.CommonDialog; -import com.qunar.im.ui.view.bigimageview.ImageBrowsUtil; import com.qunar.im.ui.view.bigimageview.tool.utility.image.DownloadPictureUtil; import com.qunar.im.ui.view.zxing.decode.DecodeBitmap; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/MainSettingFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/MainSettingFragment.java index 1255886..4487a2d 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/MainSettingFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/MainSettingFragment.java @@ -10,7 +10,7 @@ import android.net.Uri; import android.os.Bundle; import android.provider.Settings; -import android.support.annotation.IdRes; +import androidx.annotation.IdRes; import android.text.InputType; import android.text.TextUtils; import android.view.LayoutInflater; @@ -24,6 +24,7 @@ import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.jsonbean.SeatStatusResult; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.ILoginPresenter; import com.qunar.im.ui.presenter.IServiceStatePresenter; import com.qunar.im.ui.presenter.impl.LoginPresenter; @@ -31,7 +32,6 @@ import com.qunar.im.ui.presenter.views.IServiceStateView; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.AboutActivity; import com.qunar.im.ui.activity.BugreportActivity; @@ -387,7 +387,7 @@ public interface CallBack { @Override public String getUerId() { - return com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid(); + return CurrentPreference.getInstance().getUserid(); } public String Code2ServiceState(String code) { @@ -446,7 +446,7 @@ private void setServiceStatusText(){ * 显示客服状态 */ public void showMerchant() { - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()) { + if (CurrentPreference.getInstance().isMerchants()) { serviceStatePresenter.getServiceState(); } else { setting_service_mode_container.setVisibility(View.GONE); diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/MineFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/MineFragment.java index 6c11341..b5effd8 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/MineFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/MineFragment.java @@ -6,8 +6,8 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.Nullable; +import androidx.annotation.IdRes; +import androidx.annotation.Nullable; import android.text.Html; import android.text.TextUtils; import android.view.LayoutInflater; @@ -20,6 +20,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.jsonbean.SeatStatusResult; import com.qunar.im.base.module.Nick; @@ -36,7 +37,6 @@ import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.AppiumTestActivity; import com.qunar.im.ui.activity.TabMainActivity; @@ -257,7 +257,7 @@ public SimpleDraweeView getImagetView() { @Override public String getJid() { - return QtalkStringUtils.userId2Jid(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()); + return QtalkStringUtils.userId2Jid(CurrentPreference.getInstance().getPreferenceUserId()); } @Override @@ -383,7 +383,7 @@ public void onClick(View view) { @Override public String getUerId() { - return com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid(); + return CurrentPreference.getInstance().getUserid(); } public String Code2ServiceState(String code) { @@ -449,7 +449,7 @@ private void setServiceStatusText() { * 显示客服状态 */ public void showMerchant() { - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()) { + if (CurrentPreference.getInstance().isMerchants()) { if (ll_service_state.getVisibility() != View.VISIBLE) { line4.setVisibility(View.VISIBLE); ll_service_state.setVisibility(View.VISIBLE); diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/OrganizationFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/OrganizationFragment.java index 9cbe692..db719bf 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/OrganizationFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/OrganizationFragment.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.fragment; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/PrivacySettingFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/PrivacySettingFragment.java index 5e6e28f..3f06b84 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/PrivacySettingFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/PrivacySettingFragment.java @@ -14,6 +14,7 @@ import android.widget.RadioGroup; import android.widget.Toast; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.IChangeBuddyPrivacySetting; import com.qunar.im.ui.presenter.impl.BuddyPrivacySettingPresenter; import com.qunar.im.ui.R; @@ -69,7 +70,7 @@ void initView(){ public void onStart() { super.onStart(); - presenter.getMode(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()); + presenter.getMode(CurrentPreference.getInstance().getPreferenceUserId()); } diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/QRcodeLoginConfirmFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/QRcodeLoginConfirmFragment.java index 6ab477e..7cd113f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/QRcodeLoginConfirmFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/QRcodeLoginConfirmFragment.java @@ -13,6 +13,7 @@ import android.widget.Toast; import com.orhanobut.logger.Logger; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.permission.PermissionDispatcher; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.jsonbean.QRCodeAuthResultJson; @@ -87,7 +88,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) private void authData(final int phase, final int type){ qrcodekey = b.getString("qrcodekey"); // UserVCard vCard = ProfileUtils.getLocalVCard(QtalkStringUtils.userId2Jid(CurrentPreference.getInstance().getUserId())); - Nick nick = ConnectionUtil.getInstance().getMyselfCard(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()); + Nick nick = ConnectionUtil.getInstance().getMyselfCard(CurrentPreference.getInstance().getPreferenceUserId()); AuthData ad = new AuthData(); ad.v = "1.0"; ad.t = type + ""; @@ -111,7 +112,7 @@ private void authData(final int phase, final int type){ // } ad.d = d; }else{ - String json = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt(); + String json = CurrentPreference.getInstance().getQvt(); QVTResponseResult qvtResponseResult = JsonUtils.getGson().fromJson(json, QVTResponseResult.class); if(type == 1){ d.q = qvtResponseResult.data.qcookie; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldAtShowFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldAtShowFragment.java index 6325f62..dd1a310 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldAtShowFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldAtShowFragment.java @@ -3,16 +3,16 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.design.widget.BottomSheetDialog; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.Nullable; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import android.widget.Toast; import com.orhanobut.logger.Logger; import com.qunar.im.base.module.MultiItemEntity; @@ -22,11 +22,8 @@ import com.qunar.im.ui.activity.WorkWorldDetailsActivity; import com.qunar.im.ui.adapter.RecycleViewDivider; import com.qunar.im.ui.adapter.WorkWorldAtShowAdapter; -import com.qunar.im.ui.adapter.WorkWorldDetailsAdapter; import com.qunar.im.ui.presenter.WorkWorldAtShowPresenter; -import com.qunar.im.ui.presenter.WorkWorldNoticePresenter; import com.qunar.im.ui.presenter.impl.WorkWorldAtShowManagerPresenter; -import com.qunar.im.ui.presenter.impl.WorkWorldNoticeManagerPresenter; import com.qunar.im.ui.presenter.views.WorkWorldAtShowView; import com.qunar.im.ui.view.recyclerview.BaseQuickAdapter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldBrowersingFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldBrowersingFragment.java index 8e55653..a0a64f0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldBrowersingFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldBrowersingFragment.java @@ -8,8 +8,9 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.v4.content.FileProvider; -import android.support.v4.view.ViewPager; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.ViewPager; + import android.text.TextUtils; import android.view.ContextMenu; import android.view.LayoutInflater; diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldFragment.java index e184811..c12b548 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldFragment.java @@ -7,13 +7,14 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.design.widget.BottomSheetDialog; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.LinearSmoothScroller; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.Nullable; +import com.google.android.material.bottomsheet.BottomSheetDialog; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.LinearSmoothScroller; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -23,11 +24,9 @@ import android.widget.Toast; import com.orhanobut.logger.Logger; -import com.qunar.im.base.module.ReleaseContentData; import com.qunar.im.base.module.WorkWorldDeleteResponse; import com.qunar.im.base.module.WorkWorldItem; -import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.WorkWorldNoticeActivityV2; import com.qunar.im.ui.activity.WorkWorldReleaseCircleActivity; @@ -159,7 +158,7 @@ public void onClick(View v) { bottomSheetDialog.setContentView(view); // //给布局设置透明背景色 - bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) + bottomSheetDialog.getDelegate().findViewById(com.google.android.material.R.id.design_bottom_sheet) .setBackgroundColor(getActivity().getResources().getColor(android.R.color.transparent)); diff --git a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldNoticeFragment.java b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldNoticeFragment.java index 6804641..3448d39 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldNoticeFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/fragment/WorkWorldNoticeFragment.java @@ -2,11 +2,11 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSource.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSource.java index 2fecbd9..9d994cb 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSource.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSource.java @@ -1,13 +1,13 @@ package com.qunar.im.ui.imagepicker; import android.database.Cursor; -import android.graphics.BitmapFactory; import android.os.Bundle; import android.provider.MediaStore; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.LoaderManager; -import android.support.v4.content.CursorLoader; -import android.support.v4.content.Loader; + +import androidx.fragment.app.FragmentActivity; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; import com.qunar.im.ui.R; import com.qunar.im.ui.imagepicker.bean.ImageFolder; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSourceForRecommend.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSourceForRecommend.java index 811dd00..de4e24b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSourceForRecommend.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImageDataSourceForRecommend.java @@ -3,10 +3,11 @@ import android.database.Cursor; import android.os.Bundle; import android.provider.MediaStore; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.LoaderManager; -import android.support.v4.content.Loader; -import android.support.v4.content.CursorLoader; + +import androidx.fragment.app.FragmentActivity; +import androidx.loader.app.LoaderManager; +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; import com.qunar.im.base.module.ImageItem; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePicker.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePicker.java index ec1030f..0fbd783 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePicker.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePicker.java @@ -12,7 +12,7 @@ import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import android.util.Log; import com.qunar.im.ui.imagepicker.bean.ImageFolder; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePickerProvider.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePickerProvider.java index e6e53ae..f009964 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePickerProvider.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ImagePickerProvider.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.imagepicker; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; /** * 自定义一个Provider,以免和引入的项目的provider冲突 diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImagePageAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImagePageAdapter.java index f81e861..2899b10 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImagePageAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImagePageAdapter.java @@ -1,11 +1,12 @@ package com.qunar.im.ui.imagepicker.dapter; import android.app.Activity; -import android.support.v4.view.PagerAdapter; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; +import androidx.viewpager.widget.PagerAdapter; + import com.qunar.im.ui.imagepicker.ImagePicker; import com.qunar.im.base.module.ImageItem; import com.qunar.im.ui.imagepicker.util.Utils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImageRecyclerAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImageRecyclerAdapter.java index bed3cc1..9379028 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImageRecyclerAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/dapter/ImageRecyclerAdapter.java @@ -3,9 +3,9 @@ import android.Manifest; import android.app.Activity; import android.graphics.drawable.Drawable; -import android.support.v4.app.ActivityCompat; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.ViewHolder; +import androidx.core.app.ActivityCompat; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.ViewHolder; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageBaseActivity.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageBaseActivity.java index 4f393b3..26186f0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageBaseActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageBaseActivity.java @@ -4,8 +4,8 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageGridActivity.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageGridActivity.java index 6703adf..69e0b20 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageGridActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImageGridActivity.java @@ -6,11 +6,11 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.util.Log; import android.view.Gravity; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewActivity.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewActivity.java index 8e1c9f4..db1fb36 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewActivity.java @@ -3,7 +3,6 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.v4.view.ViewPager; import android.text.format.Formatter; import android.view.View; import android.view.ViewGroup; @@ -14,6 +13,8 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.protobuf.Event.QtalkEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewDelActivity.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewDelActivity.java index 669937c..4804a46 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewDelActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/ui/ImagePreviewDelActivity.java @@ -4,11 +4,12 @@ import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.support.v4.view.ViewPager; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.ImageView; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.ui.R; import com.qunar.im.ui.imagepicker.ImagePicker; import com.qunar.im.ui.imagepicker.util.NavigationBarChangeListener; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/CropImageView.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/CropImageView.java index 733c3af..421be7b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/CropImageView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/CropImageView.java @@ -18,8 +18,8 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.support.v4.view.ViewCompat; -import android.support.v7.widget.AppCompatImageView; +import androidx.core.view.ViewCompat; +import androidx.appcompat.widget.AppCompatImageView; import android.util.AttributeSet; import android.util.TypedValue; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/GridSpacingItemDecoration.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/GridSpacingItemDecoration.java index e306933..5e2e141 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/GridSpacingItemDecoration.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/GridSpacingItemDecoration.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.imagepicker.view; import android.graphics.Rect; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; /** diff --git a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/ViewPagerFixed.java b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/ViewPagerFixed.java index 3e4d30e..fd424c4 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/ViewPagerFixed.java +++ b/imsdk/src/main/java/com/qunar/im/ui/imagepicker/view/ViewPagerFixed.java @@ -1,10 +1,11 @@ package com.qunar.im.ui.imagepicker.view; import android.content.Context; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; +import androidx.viewpager.widget.ViewPager; + /** * 修复图片在ViewPager控件中缩放报错的BUG */ diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/AdPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/AdPresenter.java index 6a9a4e3..80962ec 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/AdPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/AdPresenter.java @@ -17,7 +17,7 @@ import com.qunar.im.base.util.ListUtil; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.io.File; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BrowsingPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BrowsingPresenter.java index 2e9ff18..41616ce 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BrowsingPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BrowsingPresenter.java @@ -1,7 +1,6 @@ package com.qunar.im.ui.presenter.impl; import android.text.TextUtils; -import android.text.style.ParagraphStyle; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.common.QunarIMApp; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BuddyPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BuddyPresenter.java index 8249ad0..d160c1e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BuddyPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/BuddyPresenter.java @@ -6,6 +6,7 @@ import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.BuddyRequest; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.IAnswerBuddyPresenter; import com.qunar.im.ui.presenter.IBuddyPresenter; import com.qunar.im.ui.presenter.IFriendsManagePresenter; @@ -161,9 +162,9 @@ public void sendAddBuddyRequest() { // IMLogic.instance().requestFriends(QtalkStringUtils.userId2Jid(mBuddyView.getTargetId()) // , type, type == 1 ? mBuddyView.getRequestReason() : type == 2 ? mBuddyView.getAnswerForQuestion() : ""); if(type!=2){ - ConnectionUtil.getInstance().verifyFriend(mBuddyView.getTargetId(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()); + ConnectionUtil.getInstance().verifyFriend(mBuddyView.getTargetId(), CurrentPreference.getInstance().getPreferenceUserId()); }else{ - ConnectionUtil.getInstance().verifyFriend(mBuddyView.getTargetId(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId(),mBuddyView.getAnswerForQuestion()); + ConnectionUtil.getInstance().verifyFriend(mBuddyView.getTargetId(), CurrentPreference.getInstance().getPreferenceUserId(),mBuddyView.getAnswerForQuestion()); } if (type == 1) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatMemberPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatMemberPresenter.java index fc1cb93..3f35e16 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatMemberPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatMemberPresenter.java @@ -1,5 +1,6 @@ package com.qunar.im.ui.presenter.impl; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.module.GroupMember; import com.qunar.im.ui.presenter.IChatMemberPresenter; @@ -43,7 +44,7 @@ public void loadMembers() { for (; i < memberList.size(); i++) { GroupMember member = memberList.get(i); if (member.getMemberId().equals( - QtalkStringUtils.userId2Jid(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()))) { + QtalkStringUtils.userId2Jid(CurrentPreference.getInstance().getPreferenceUserId()))) { myPower = Integer.parseInt(member.getAffiliation()); } if (Integer.parseInt(member.getAffiliation()) > GroupMember.ADMIN) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatPresenter.java index d8f933b..3e075b0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatPresenter.java @@ -11,6 +11,7 @@ import com.qunar.im.base.module.VideoDataResponse; import com.qunar.im.base.util.IMUserDefaults; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.services.FileProgressRequestBody; import com.qunar.im.other.CacheDataType; import com.qunar.im.ui.util.easyphoto.easyphotos.models.album.entity.Photo; @@ -37,7 +38,6 @@ import com.qunar.im.base.jsonbean.VideoMessageResult; import com.qunar.im.base.module.IMMessage; import com.qunar.im.base.module.UserConfigData; -import com.qunar.im.base.module.VideoDataResponse; import com.qunar.im.base.protocol.ProgressRequestListener; import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.structs.MessageStatus; @@ -52,21 +52,16 @@ import com.qunar.im.base.util.DataCenter; import com.qunar.im.base.util.EventBusEvent; import com.qunar.im.base.util.FileUtils; -import com.qunar.im.base.util.IMUserDefaults; import com.qunar.im.base.util.InternDatas; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.MessageUtils; import com.qunar.im.base.util.graphics.ImageUtils; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.base.view.faceGridView.EmoticonEntity; -import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMDatabaseManager; import com.qunar.im.core.manager.IMNotificaitonCenter; -import com.qunar.im.core.services.FileProgressRequestBody; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.other.CacheDataType; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.ui.presenter.IAddEmojiconPresenter; @@ -75,12 +70,6 @@ import com.qunar.im.ui.presenter.ISnapPresenter; import com.qunar.im.ui.presenter.views.IChatView; import com.qunar.im.ui.util.EmotionUtils; -import com.qunar.im.ui.util.easyphoto.easyphotos.models.album.entity.Photo; -import com.qunar.im.ui.util.easyphoto.easyphotos.utils.PhotoUtil; -import com.qunar.im.ui.view.CommonDialog; -import com.qunar.im.ui.view.bigimageview.view.MyGlideUrl; -import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.QtalkStringUtils; import java.io.File; @@ -680,7 +669,7 @@ public void onError(String msg) { private void videoCheckAndSend(IMMessage message, String file) { boolean userAble = IMUserDefaults.getStandardUserDefaults().getBooleanValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoUseAble", false); @@ -735,7 +724,7 @@ private void newUploadAndSendVideo(final IMMessage message, final String file) { IMDatabaseManager.getInstance().InsertIMSessionList(message, false); boolean needTran = false; String time = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoTime"); diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatroomInfoPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatroomInfoPresenter.java index cabcd55..57a108e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatroomInfoPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ChatroomInfoPresenter.java @@ -9,7 +9,7 @@ import com.qunar.im.base.module.ChatRoomMember; import com.qunar.im.base.module.GroupMember; import com.qunar.im.base.module.Nick; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.IChatroomInfoPresenter; import com.qunar.im.base.common.ConversitionType; import com.qunar.im.ui.presenter.views.IChatRoomInfoView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/CloudRecordPresent.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/CloudRecordPresent.java index a861509..1d00e5a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/CloudRecordPresent.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/CloudRecordPresent.java @@ -11,7 +11,7 @@ import com.qunar.im.base.protocol.MessageAPI; import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.util.ListUtil; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/EditMyProfilePresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/EditMyProfilePresenter.java index 50bb93c..7ef52aa 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/EditMyProfilePresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/EditMyProfilePresenter.java @@ -4,9 +4,7 @@ import android.util.LruCache; import com.orhanobut.logger.Logger; -import com.qunar.im.base.jsonbean.GetMoodResult; import com.qunar.im.base.jsonbean.RemoteConfig; -import com.qunar.im.base.jsonbean.SetMoodResult; import com.qunar.im.base.jsonbean.SetVCardResult; import com.qunar.im.ui.presenter.IEditMyProfilePresenter; import com.qunar.im.ui.presenter.views.IMyProfileView; @@ -16,14 +14,12 @@ import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.EventBusEvent; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.base.util.ListUtil; import com.qunar.im.core.manager.IMDatabaseManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import java.util.ArrayList; import java.util.List; -import java.util.Map; import de.greenrobot.event.EventBus; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/FriendsManagePresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/FriendsManagePresenter.java index bed337d..d94def4 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/FriendsManagePresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/FriendsManagePresenter.java @@ -2,15 +2,11 @@ import android.text.TextUtils; -import com.qunar.im.base.jsonbean.IncrementUsersResult; import com.qunar.im.base.module.DepartmentItem; import com.qunar.im.ui.presenter.IFriendsManagePresenter; import com.qunar.im.ui.presenter.views.IFriendsManageView; -import com.qunar.im.base.protocol.Protocol; -import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.InternDatas; -import com.qunar.im.base.util.ListUtil; import com.qunar.im.base.util.LogUtil; import com.qunar.im.common.CommonConfig; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/InvitedFriendsPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/InvitedFriendsPresenter.java index 951aabc..a6777e7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/InvitedFriendsPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/InvitedFriendsPresenter.java @@ -6,6 +6,7 @@ import com.qunar.im.base.jsonbean.DepartmentResult; import com.qunar.im.base.module.DepartmentItem; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.IInvitedFriendsPresenter; import com.qunar.im.ui.presenter.views.IInvitedFriendsView; import com.qunar.im.base.util.Constants; @@ -105,11 +106,11 @@ public void loadTargetContacts() { myFriends.setpId(rootNode.getpId()); map.get(rootNode.getId()).add(myFriends); map.put(myFriends.getId(), new LinkedList()); - if (!CommonConfig.isQtalk && com.qunar.im.protobuf.common.CurrentPreference.getInstance().isMerchants()) { + if (!CommonConfig.isQtalk && CurrentPreference.getInstance().isMerchants()) { List departmentItems = null;//dataModel.getOrganizationOfFriends(); staticId = 0; - String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + Constants.Preferences.qchat_org, ""); if(!TextUtils.isEmpty(qchatorg)){ diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/LoginPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/LoginPresenter.java index 5b435ca..f1971c6 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/LoginPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/LoginPresenter.java @@ -4,6 +4,7 @@ import com.orhanobut.logger.Logger; import com.qunar.im.base.common.QunarIMApp; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.ILoginPresenter; import com.qunar.im.ui.presenter.views.ILoginView; import com.qunar.im.base.util.AccountSwitchUtils; @@ -15,7 +16,6 @@ import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import de.greenrobot.event.EventBus; @@ -103,7 +103,7 @@ public void didReceivedNotification(String key, Object... args) { // CurrentPreference.getInstance().getUserId()); // getVirtualUser(); // initUserInfo(); - AccountSwitchUtils.addAccount(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getToken(), getCurrentNavName(), getCurrentNavUrl()); + AccountSwitchUtils.addAccount(CurrentPreference.getInstance().getUserid(), CurrentPreference.getInstance().getToken(), getCurrentNavName(), getCurrentNavUrl()); loginView.setLoginResult(true, 0); loginView.getVirtualUserRole(true); } else if (args[0].equals(LoginStatus.Updating)) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/MainPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/MainPresenter.java index 9c17aa2..b0c0f73 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/MainPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/MainPresenter.java @@ -9,10 +9,9 @@ import com.qunar.im.ui.presenter.views.IMainView; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.enums.LoginStatus; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.Event.QtalkEvent; import com.qunar.im.protobuf.dispatch.DispatchHelper; -import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.MD5; /** @@ -159,7 +158,7 @@ public void didReceivedNotification(String key, Object... args) { int count = ConnectionUtil.getInstance().selectWorkWorldNotice(); boolean workWorldUnReadState = IMUserDefaults.getStandardUserDefaults().getBooleanValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ManageEmotionPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ManageEmotionPresenter.java index 677d1d1..e3d9dde 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ManageEmotionPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ManageEmotionPresenter.java @@ -117,8 +117,8 @@ public void run() { @Override public void onRequestComplete(String id, final UploadImageResult result) { String url = URLEncoder.encode(QtalkStringUtils.addFilePathDomain(result.httpUrl, true)); - String perUrl = Constants.Config.PERSISTENT_IMAGE + "?url=" + url; - HttpUrlConnectionHandler.executeGet(perUrl, new HttpRequestCallback() { +// String perUrl = Constants.Config.PERSISTENT_IMAGE + "?url=" + url; + HttpUrlConnectionHandler.executeGet(url, new HttpRequestCallback() { @Override public void onComplete(InputStream response) { try { diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PbConversationManagePresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PbConversationManagePresenter.java index 3904591..7d69b31 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PbConversationManagePresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PbConversationManagePresenter.java @@ -16,11 +16,11 @@ import com.qunar.im.base.structs.MessageStatus; import com.qunar.im.base.structs.PushSettinsStatus; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.enums.LoginStatus; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.other.CacheDataType; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.ui.presenter.IConversationsManagePresenter; @@ -272,11 +272,11 @@ private void prompt(final IMMessage message) { if (message.getMsgType() != ProtoMessageOuterClass.MessageType.MessageTypeGroupNotify_VALUE) { if (System.currentTimeMillis() - lastMsgTime > 500 && message.getDirection() == IMMessage.DIRECTION_RECV) { - if (!com.qunar.im.protobuf.common.CurrentPreference.getInstance().isBack()) { - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isTurnOnMsgSound()) { + if (!CurrentPreference.getInstance().isBack()) { + if (CurrentPreference.getInstance().isTurnOnMsgSound()) { ringtone(); } - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isTurnOnMsgShock() || + if (CurrentPreference.getInstance().isTurnOnMsgShock() || message.getMsgType() == ProtoMessageOuterClass.MessageType.MessageTypeShock_VALUE) { vibrator(); } @@ -380,15 +380,15 @@ public void didReceivedNotification(String key, Object... args) { if (isAtMe(imMessage.getBody())) { showAtMessage(); } - if (!TextUtils.isEmpty(imMessage.getRealfrom()) && !imMessage.getRealfrom().equals(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId())) { + if (!TextUtils.isEmpty(imMessage.getRealfrom()) && !imMessage.getRealfrom().equals(CurrentPreference.getInstance().getPreferenceUserId())) { prompt(imMessage); } break; //收到登陆状态提醒 case QtalkEvent.LOGIN_EVENT: if (args[0].equals(LoginStatus.Login)) { - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); showRecentConvs(); diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PersonalInfoPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PersonalInfoPresenter.java index 6548c86..bcac240 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PersonalInfoPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/PersonalInfoPresenter.java @@ -30,7 +30,7 @@ import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ProfilePresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ProfilePresenter.java index f539ae5..d754d2b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ProfilePresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ProfilePresenter.java @@ -7,7 +7,7 @@ import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.structs.PushSettinsStatus; import com.qunar.im.core.manager.IMDatabaseManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; /** * Created by xinbo.wang on 2015/4/2. diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatGetOrganizationPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatGetOrganizationPresenter.java index 027dcbd..b4cfe6b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatGetOrganizationPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatGetOrganizationPresenter.java @@ -4,6 +4,7 @@ import com.qunar.im.base.jsonbean.DepartmentResult; import com.qunar.im.base.module.DepartmentItem; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.IFriendsManagePresenter; import com.qunar.im.ui.presenter.views.IFriendsManageView; import com.qunar.im.base.protocol.Protocol; @@ -50,7 +51,7 @@ public void updateContacts() { return; isLoadingDept = true; List mDeptDataList; - String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + Constants.Preferences.qchat_org, ""); if(!TextUtils.isEmpty(qchatorg)){ @@ -99,7 +100,7 @@ private void updateView() { @Override public void forceUpdateContacts() { LogUtil.d("debug", "forceUpdateContacts entrance"); - if (TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getVerifyKey())) { + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { if(friendsManageView!=null) friendsManageView.resetListView(); return; @@ -111,7 +112,7 @@ private void updateFriends() { isLoadingDept = true; staticId = 0; //qchat组织架构缓存 - String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + Constants.Preferences.qchat_org, ""); if(!TextUtils.isEmpty(qchatorg)){ diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatLoginPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatLoginPresenter.java index c7c83e3..c8012b8 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatLoginPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QChatLoginPresenter.java @@ -8,6 +8,7 @@ import com.qunar.im.base.jsonbean.QChatLoginResult; import com.qunar.im.base.jsonbean.QVTResponseResult; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.ILoginPresenter; import com.qunar.im.ui.presenter.views.ILoginView; import com.qunar.im.base.protocol.LoginAPI; @@ -26,7 +27,6 @@ import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import de.greenrobot.event.EventBus; @@ -65,7 +65,7 @@ public void release() { @Override public void login() { - String qvt = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt(); + String qvt = CurrentPreference.getInstance().getQvt(); if (!TextUtils.isEmpty(qvt)) { loginByToken(plat); return; @@ -96,9 +96,9 @@ public void onCompleted(final QChatLoginResult qChatLoginResult) { qvtResponseResult.data.tcookie = qchatUesr.tcookie; qvtResponseResult.data.vcookie = qchatUesr.vcookie; qvtResponseResult.data.qcookie = qchatUesr.qcookie; - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(JsonUtils.getGson().toJson(qvtResponseResult)); + CurrentPreference.getInstance().setQvt(JsonUtils.getGson().toJson(qvtResponseResult)); DataUtils.getInstance(CommonConfig.globalContext).putPreferences(Constants.Preferences.qchat_qvt, JsonUtils.getGson().toJson(qvtResponseResult)); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setMerchants(qchatUesr.type.equals("merchant")); + CurrentPreference.getInstance().setMerchants(qchatUesr.type.equals("merchant")); loginByToken(plat); } else { int errcode = 100; @@ -118,7 +118,7 @@ public void onFailure(String errMsg) { } public void loginByToken(final String plat) { - LoginAPI.getQchatToken(PhoneInfoUtils.getUniqueID(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt(),plat, new ProtocolCallback.UnitCallback() { + LoginAPI.getQchatToken(PhoneInfoUtils.getUniqueID(), CurrentPreference.getInstance().getQvt(),plat, new ProtocolCallback.UnitCallback() { @Override public void onCompleted(GeneralJson generalJson) { if (generalJson.ret && generalJson.data != null) { @@ -179,7 +179,7 @@ public void logout() { @Override public void autoLogin() { LogUtil.d("qchat", "autoLogin"); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setQvt(DataUtils.getInstance(CommonConfig.globalContext).getPreferences(Constants.Preferences.qchat_qvt, "")); + CurrentPreference.getInstance().setQvt(DataUtils.getInstance(CommonConfig.globalContext).getPreferences(Constants.Preferences.qchat_qvt, "")); final String userName = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.lastuserid); final String password = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.usertoken); if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(password)) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QTalkPublicLoginPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QTalkPublicLoginPresenter.java index ca0b870..37adba1 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QTalkPublicLoginPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QTalkPublicLoginPresenter.java @@ -4,6 +4,7 @@ import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.Nick; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.ILoginPresenter; import com.qunar.im.ui.presenter.views.ILoginView; import com.qunar.im.base.util.AccountSwitchUtils; @@ -16,7 +17,6 @@ import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import de.greenrobot.event.EventBus; @@ -117,7 +117,7 @@ public void didReceivedNotification(String key, Object... args) { break; case QtalkEvent.LOGIN_EVENT: if (args[0].equals(LoginStatus.Login)) { - AccountSwitchUtils.addAccount(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getToken(), getCurrentNavName(), getCurrentNavUrl()); + AccountSwitchUtils.addAccount(CurrentPreference.getInstance().getUserid(), CurrentPreference.getInstance().getToken(), getCurrentNavName(), getCurrentNavUrl()); loginView.setLoginResult(true, 0); } else if (args[0].equals(LoginStatus.Updating)) { //// TODO: 2017/11/6 暂时没有逻辑 diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QchatPersonalInfoPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QchatPersonalInfoPresenter.java index d1c1d67..7d4ab2b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QchatPersonalInfoPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/QchatPersonalInfoPresenter.java @@ -4,6 +4,7 @@ import com.facebook.imagepipeline.request.ImageRequest; import com.qunar.im.base.callbacks.BasicCallback; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.util.FacebookImageUtil; import com.qunar.im.base.module.Nick; import com.qunar.im.base.module.UserVCard; @@ -17,7 +18,6 @@ import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.QtalkStringUtils; @@ -123,7 +123,7 @@ public void getVCard(boolean isForce) { if (vCard.gravantarVersion > -1&&!TextUtils.isEmpty(vCard.gravantarUrl)) { if(TextUtils.isEmpty(CurrentPreference.getInstance().getPreferenceUserId())) { CurrentPreference.getInstance().setPreferenceUserId(vCard.nickname); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setMerchants(vCard.type.equals("merchant")); + CurrentPreference.getInstance().setMerchants(vCard.type.equals("merchant")); } String url = QtalkStringUtils.getGravatar(vCard.gravantarUrl,true); FacebookImageUtil.loadWithCache(url,personalInfoView.getImagetView(), @@ -135,7 +135,7 @@ public void getVCard(boolean isForce) { @Override public void onSuccess(UserVCard userVCard) { CurrentPreference.getInstance().setPreferenceUserId(userVCard.nickname); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setMerchants(userVCard.type.equals("merchant")); + CurrentPreference.getInstance().setMerchants(userVCard.type.equals("merchant")); } @Override diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ReleaseCircleManagerPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ReleaseCircleManagerPresenter.java index 06e7165..eb898a9 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ReleaseCircleManagerPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ReleaseCircleManagerPresenter.java @@ -5,6 +5,7 @@ import com.qunar.im.base.util.IMUserDefaults; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.ui.util.easyphoto.easyphotos.models.album.entity.Photo; import com.orhanobut.logger.Logger; @@ -127,7 +128,7 @@ private void uploadAndRelease(final Photo file) { boolean needTran = false; String time = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoTime"); diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotListPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotListPresenter.java index 500286d..4294652 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotListPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotListPresenter.java @@ -18,7 +18,7 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.NetworkUtils; import com.qunar.im.core.manager.IMDatabaseManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.QtalkStringUtils; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotSessionPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotSessionPresenter.java index 5523529..2d7aafd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotSessionPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/RobotSessionPresenter.java @@ -56,7 +56,7 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMDatabaseManager; import com.qunar.im.core.manager.IMNotificaitonCenter; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.Event.QtalkEvent; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShareLocationPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShareLocationPresenter.java index cd60ea0..e3eacae 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShareLocationPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShareLocationPresenter.java @@ -9,7 +9,7 @@ import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.ListUtil; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.QtalkStringUtils; import java.util.Calendar; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShowSearchDetailsPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShowSearchDetailsPresenter.java index c56e7ca..947c675 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShowSearchDetailsPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/ShowSearchDetailsPresenter.java @@ -12,10 +12,9 @@ import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.ListUtil; -import com.qunar.im.protobuf.common.CurrentPreference; -import com.qunar.im.protobuf.utils.XmlUtils; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; -import com.qunar.im.protobuf.utils.XmlUtils; +import com.qunar.im.utils.XmlUtils; import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SingleSessionPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SingleSessionPresenter.java index 5c09d66..fa4d0b4 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SingleSessionPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SingleSessionPresenter.java @@ -5,6 +5,7 @@ import com.orhanobut.logger.Logger; import com.qunar.im.base.common.ConversitionType; import com.qunar.im.base.util.Constants; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.HttpUtil; @@ -34,11 +35,8 @@ import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.protobuf.Event.QtalkEvent; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; -import com.qunar.im.ui.R; import com.qunar.im.ui.presenter.ICloudRecordPresenter; import com.qunar.im.ui.presenter.IShakeMessagePresenter; -import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.QtalkStringUtils; import org.json.JSONArray; @@ -242,7 +240,7 @@ public void transferConversation() { transferConsult.u = chatView.getRealJid(); transferConsult.r = chatView.getInputMsg(); transferConsult.d = QtalkNavicationService.getInstance().getXmppdomain(); - transferConsult.f = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid(); + transferConsult.f = CurrentPreference.getInstance().getUserid(); transferConsult.rt = QtalkStringUtils.parseLocalpart(chatView.getTransferId()); transferConsult.toId = toServer.getToID(); transferConsult.retId = UUID.randomUUID().toString(); diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SystemPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SystemPresenter.java index d7454d9..347ea24 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SystemPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/SystemPresenter.java @@ -2,33 +2,18 @@ import android.content.Context; import android.os.Environment; -import android.text.TextUtils; -import com.orhanobut.logger.Logger; -import com.qunar.im.base.common.BackgroundExecutor; -import com.qunar.im.base.jsonbean.CapabilityResult; import com.qunar.im.base.module.IMMessage; -import com.qunar.im.ui.presenter.ISystemPresenter; -import com.qunar.im.base.protocol.Protocol; -import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.structs.MessageStatus; -import com.qunar.im.base.util.Constants; -import com.qunar.im.base.util.EventBusEvent; import com.qunar.im.base.util.InternDatas; -import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.PhoneInfoUtils; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; +import com.qunar.im.ui.presenter.ISystemPresenter; -import java.util.Map; import java.util.Timer; import java.util.TimerTask; -import de.greenrobot.event.EventBus; - -import static com.qunar.im.base.util.JsonUtils.getGson; - /** * Created by xinbo.wang on 2015/3/5. */ @@ -81,101 +66,18 @@ public void run() { public boolean checkUnique() { String uuid; boolean result = false; - if (com.qunar.im.protobuf.common.CurrentPreference.getInstance().isTurnOnPsuh()) { + if (CurrentPreference.getInstance().isTurnOnPsuh()) { uuid = PhoneInfoUtils.getUniqueID(); } else { result = true; uuid = ""; } -// Protocol.registPush(uuid, QTPushConfiguration.getPlatName()); -// Protocol.uploadSelfImei(uuid); return result; } @Override public void getMyCapability() { - BackgroundExecutor.execute(new Runnable() { - @Override - public void run() { - int cv = 0; - CapabilityResult result = CurrentPreference.getInstance().getCapabilityResult(); - if (result != null) { - saveExtConfig(result); - cv = result.version; - } - final CapabilityResult finalResult = result; - Protocol.getAbility(Constants.CLIENT_NAME, CurrentPreference.getInstance().getUserid(), cv, - new ProtocolCallback.UnitCallback() { - - @Override - public void onFailure(String errMsg) { - if (finalResult != null) { - Constants.HONGBAO_URL = (String) finalResult. - otherconfig.get("redpackageurl"); - Constants.MY_HONGBAO = (String) finalResult. - otherconfig.get("myredpackageurl"); - Constants.HONGBAO_BALANCE = (String) finalResult. - otherconfig.get("balanceurl"); - Constants.AA_PAY_URL = (String) finalResult. - otherconfig.get("aacollectionurl"); - Constants.THANKS_URL = (String) finalResult. - otherconfig.get("thanksurl"); - } - } - @Override - public void onCompleted(String s) { - if (!TextUtils.isEmpty(s)) { - try { - CapabilityResult ability = getGson(). - fromJson(s, CapabilityResult.class); - saveExtConfig(ability); - CurrentPreference.getInstance().setCapabilityResult(ability); - } catch (Exception e) { - LogUtil.e(TAG,"error",e); - } - } - } - }); - } - }); - } - - private void saveExtConfig(CapabilityResult capability) { - if (capability != null) { - Constants.HONGBAO_URL = (String) capability.otherconfig.get("redpackageurl"); - Constants.MY_HONGBAO = (String) capability.otherconfig.get("myredpackageurl"); - Constants.HONGBAO_BALANCE = (String) capability.otherconfig.get("balanceurl"); - Constants.AA_PAY_URL = (String) capability. - otherconfig.get("aacollectionurl"); - Constants.THANKS_URL = (String) capability. - otherconfig.get("thanksurl"); - Constants.COMPANY = capability.company; - if (capability.trdextendmsg != null) { - synchronized (this) { - InternDatas.funcButtonDescs.clear(); - InternDatas.funcButtonDescs.addAll(capability.trdextendmsg); - } - } - if (capability.ability != null) { - if (capability.ability.base != null) { - for (String str : capability.ability.base) { - if (str.equals("group")) { - CommonConfig.showQchatGroup = true; - } - } - } - CommonConfig.showHongbao = false; - if (capability.ability.group != null) { - for (String str : capability.ability.group) { - if (str.equals("redpackage")) { - CommonConfig.showHongbao = true; - } - } - } - } - EventBus.getDefault().post(new EventBusEvent.ShowGroupEvent(CommonConfig.showQchatGroup)); - } } @Override diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldAtShowManagerPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldAtShowManagerPresenter.java index b850b9b..b7dd76a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldAtShowManagerPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldAtShowManagerPresenter.java @@ -2,7 +2,6 @@ import com.qunar.im.base.module.WorkWorldAtShowItem; import com.qunar.im.base.module.WorkWorldAtShowResponse; -import com.qunar.im.base.module.WorkWorldMyReply; import com.qunar.im.base.module.WorkWorldNoticeItem; import com.qunar.im.base.protocol.ProtocolCallback; import com.qunar.im.base.util.Constants; diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldManagerPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldManagerPresenter.java index 306878e..53d6036 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldManagerPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldManagerPresenter.java @@ -6,6 +6,7 @@ import com.qunar.im.base.module.WorkWorldDeleteResponse; import com.qunar.im.base.module.WorkWorldItem; import com.qunar.im.base.module.WorkWorldResponse; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.presenter.WorkWorldPresenter; import com.qunar.im.ui.presenter.views.WorkWorldView; import com.qunar.im.base.protocol.ProtocolCallback; @@ -68,7 +69,7 @@ public void workworldloadingHistory() { mView.workworldshowNewData(list); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -184,7 +185,7 @@ public void workworldstartRefresh() { public void onCompleted(WorkWorldResponse workWorldResponse) { mView.workworldshowNewData(workWorldResponse.getData().getNewPost()); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -204,7 +205,7 @@ public void onFailure(String errMsg) { // public void onCompleted(WorkWorldResponse workWorldResponse) { // mView.workworldshowNewData(workWorldResponse.getData().getNewPost()); // IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) -// .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() +// .putObject(CurrentPreference.getInstance().getUserid() // + QtalkNavicationService.getInstance().getXmppdomain() // + CommonConfig.isDebug // + MD5.hex(navurl) diff --git a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldSearchManagerPresenter.java b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldSearchManagerPresenter.java index e51611b..dab8707 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldSearchManagerPresenter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/presenter/impl/WorkWorldSearchManagerPresenter.java @@ -1,9 +1,7 @@ package com.qunar.im.ui.presenter.impl; -import com.qunar.im.base.module.WorkWorldAtShowResponse; import com.qunar.im.base.module.WorkWorldSearchShowResponse; import com.qunar.im.base.protocol.ProtocolCallback; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.ui.presenter.WorkWorldAtShowPresenter; import com.qunar.im.ui.presenter.views.WorkWorldAtShowView; import com.qunar.im.utils.HttpUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QHongBaoSchemaImpl.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QHongBaoSchemaImpl.java index 3bb8f88..dbaf508 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QHongBaoSchemaImpl.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QHongBaoSchemaImpl.java @@ -5,9 +5,7 @@ import android.text.TextUtils; import com.qunar.im.base.util.Constants; -import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.util.ReflectUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenGroupChatInfoSchemaImpl.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenGroupChatInfoSchemaImpl.java index edcce6c..1896542 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenGroupChatInfoSchemaImpl.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenGroupChatInfoSchemaImpl.java @@ -3,7 +3,7 @@ import android.content.Intent; import com.qunar.im.base.util.Constants; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.util.ReflectUtil; import com.qunar.im.utils.ConnectionUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenPhoneNumber.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenPhoneNumber.java index 4e5298b..4ae901f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenPhoneNumber.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenPhoneNumber.java @@ -7,7 +7,7 @@ import com.qunar.im.base.jsonbean.GeneralJson; import com.qunar.im.base.protocol.OpsAPI; import com.qunar.im.base.protocol.ProtocolCallback; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenRnMySetting.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenRnMySetting.java index 6138c60..90ab6c0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenRnMySetting.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenRnMySetting.java @@ -2,14 +2,9 @@ import android.content.Intent; -import com.qunar.im.base.module.UserHaveMedalStatus; -import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.core.manager.IMDatabaseManager; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.util.ReflectUtil; -import java.util.List; import java.util.Map; public class QOpenRnMySetting implements QChatSchemaService{ diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenUserWorkWorld.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenUserWorkWorld.java index 77bb03f..89083fa 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenUserWorkWorld.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenUserWorkWorld.java @@ -2,12 +2,10 @@ import android.content.Intent; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.activity.MindWorkWorldActivity; -import com.qunar.im.ui.activity.PbChatActivity; import com.qunar.im.ui.activity.SelfWorkWorldActivity; -import com.qunar.im.ui.activity.WorkWorldActivity; import java.util.Map; diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenWebView.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenWebView.java index 9af6076..d7930c5 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenWebView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QOpenWebView.java @@ -3,7 +3,7 @@ import android.content.Intent; import android.net.Uri; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.activity.QunarWebActvity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/schema/QchatSchemeActivity.java b/imsdk/src/main/java/com/qunar/im/ui/schema/QchatSchemeActivity.java index 7d9e795..517fe3b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/schema/QchatSchemeActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/schema/QchatSchemeActivity.java @@ -1,13 +1,16 @@ package com.qunar.im.ui.schema; +import android.content.Context; import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; - import com.qunar.im.base.protocol.Protocol; import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CommonConfig; import com.qunar.im.ui.activity.IMBaseActivity; import java.util.HashMap; @@ -46,6 +49,11 @@ public void dispatchUri(Intent intent) { */ HashMap map = Protocol.splitParams(data); + //首页路由 + if(map.containsKey("isTransferHome") && "true".equals(map.get("isTransferHome"))) { + jumpHomeScheme(this); + } + deal(type, map, intent); } else { @@ -53,6 +61,23 @@ public void dispatchUri(Intent intent) { } } + private void jumpHomeScheme(Context context) { + //获取本应用程序信息 + ApplicationInfo applicationInfo = null; + try { + applicationInfo = context.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + String schema = ""; + if(applicationInfo != null){ + schema = applicationInfo.metaData.getString("MAIN_SCHEMA"); + } + Intent i = new Intent("android.intent.action.VIEW", + Uri.parse(CommonConfig.schema + "://"+ (TextUtils.isEmpty(schema)?"start_main_activity":schema))); + i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(i); + } /** diff --git a/imsdk/src/main/java/com/qunar/im/ui/sdk/QIMSdk.java b/imsdk/src/main/java/com/qunar/im/ui/sdk/QIMSdk.java index 2f29ed6..6a15610 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/sdk/QIMSdk.java +++ b/imsdk/src/main/java/com/qunar/im/ui/sdk/QIMSdk.java @@ -6,34 +6,30 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.support.v4.app.Fragment; import android.text.TextUtils; +import androidx.fragment.app.Fragment; + import com.bumptech.glide.Glide; import com.bumptech.glide.request.target.ViewTarget; import com.facebook.imagepipeline.core.ImagePipelineFactory; +import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.IMGroup; import com.qunar.im.base.module.Nick; -import com.qunar.im.log.LogDatabaseManager; -import com.qunar.im.ui.presenter.impl.QChatLoginPresenter; -import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.base.common.BackgroundExecutor; -import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.RecentConversation; import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.DataUtils; import com.qunar.im.base.util.InternDatas; import com.qunar.im.base.util.MemoryCache; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.enums.LoginStatus; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.manager.IMNotificaitonCenter; -import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.log.LogDatabaseManager; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.thirdpush.QTPushConfiguration; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.PbChatActivity; @@ -42,13 +38,11 @@ import com.qunar.im.ui.imagepicker.ImagePicker; import com.qunar.im.ui.imagepicker.loader.GlideImageLoader; import com.qunar.im.ui.imagepicker.view.CropImageView; -import com.qunar.im.utils.ConnectionUtil; -import com.qunar.rn_service.fragment.RNContactsFragment; +import com.qunar.im.ui.presenter.impl.QChatLoginPresenter; import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.utils.AppFrontBackHelper; import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.ui.util.ProfileUtils; -import com.qunar.im.utils.ConnectionUtil; +import com.qunar.rn_service.fragment.RNContactsFragment; import com.xiaomi.channel.commonutils.logger.LoggerInterface; import com.xiaomi.mipush.sdk.Logger; @@ -86,24 +80,18 @@ public void init(Application application) { try { PackageInfo pi = CommonConfig.globalContext.getPackageManager().getPackageInfo(CommonConfig.globalContext.getPackageName(), 0); + GlobalConfigManager.appVersion = pi.versionCode; QunarIMApp.getQunarIMApp().setVersion(pi.versionCode); QunarIMApp.getQunarIMApp().setVersionName(pi.versionName); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } - BackgroundExecutor.execute(new Runnable() { - @Override - public void run() { - QunarIMApp.getQunarIMApp().RegisterContext(CommonConfig.globalContext); - } - }); + QunarIMApp.getQunarIMApp().RegisterContext(CommonConfig.globalContext); CommonConfig.DEFAULT_GRAVATAR = R.drawable.atom_ui_default_gravatar; CommonConfig.SYS_ICON = R.drawable.atom_ui_rbt_system; CommonConfig.DEFAULT_NEW_MSG = R.raw.atom_ui_new_msg; CommonConfig.DEFAULT_GROUP = R.drawable.atom_ui_ic_my_chatroom; - QunarIMApp.getQunarIMApp().setIsDebug(CommonConfig.isDebug); - initDoMain(application); GlobalConfigManager.setGlobalContext(CommonConfig.globalContext); @@ -307,7 +295,16 @@ public void login(String uid,String password,LoginStatesListener loginStatesList } return; } - ConnectionUtil.getInstance().pbLogin(uid,password,true); + switch (QtalkNavicationService.getInstance().getLoginType()){ + case SMSLogin: + break; + case PasswordLogin: + ConnectionUtil.getInstance().pbLogin(uid,password,true); + case NewPasswordLogin: + ConnectionUtil.getInstance().pbLoginNew(uid,password); + break; + + } } /** diff --git a/imsdk/src/main/java/com/qunar/im/ui/services/PullPasswordBoxService.java b/imsdk/src/main/java/com/qunar/im/ui/services/PullPasswordBoxService.java index 3bf7898..a281a84 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/services/PullPasswordBoxService.java +++ b/imsdk/src/main/java/com/qunar/im/ui/services/PullPasswordBoxService.java @@ -3,7 +3,7 @@ import android.app.IntentService; import android.content.Context; import android.content.Intent; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.qunar.im.base.common.DailyMindConstants; import com.qunar.im.base.jsonbean.DailyMindMain; diff --git a/imsdk/src/main/java/com/qunar/im/ui/services/PullPatchService.java b/imsdk/src/main/java/com/qunar/im/ui/services/PullPatchService.java index 1b25878..06ff588 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/services/PullPatchService.java +++ b/imsdk/src/main/java/com/qunar/im/ui/services/PullPatchService.java @@ -3,7 +3,7 @@ import android.app.IntentService; import android.content.Context; import android.content.Intent; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; @@ -21,7 +21,7 @@ import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.io.File; import java.io.FileOutputStream; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/CrashHandler.java b/imsdk/src/main/java/com/qunar/im/ui/util/CrashHandler.java index da4a2dd..4198bc8 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/CrashHandler.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/CrashHandler.java @@ -11,7 +11,7 @@ import com.qunar.im.base.util.DataUtils; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/ImageSelectUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/ImageSelectUtil.java index 24a3bbe..0523c02 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/ImageSelectUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/ImageSelectUtil.java @@ -1,10 +1,12 @@ package com.qunar.im.ui.util; import android.app.Activity; -import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.view.View; +import androidx.fragment.app.FragmentActivity; + +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.util.easyphoto.easyphotos.EasyPhotos; import com.qunar.im.ui.util.easyphoto.easyphotos.callback.SelectCallback; import com.qunar.im.ui.util.easyphoto.easyphotos.callback.VideoPlayCallback; @@ -27,19 +29,19 @@ public class ImageSelectUtil { public static void initVideoSetting() { String time = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoTime"); String size = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoSize"); String maxTime = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoMaxTime"); diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/NavConfigUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/NavConfigUtils.java index 73bea30..d67a7b2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/NavConfigUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/NavConfigUtils.java @@ -8,7 +8,6 @@ import com.qunar.im.base.util.JsonUtils; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.ui.activity.NavConfigActivity; import com.qunar.im.ui.entity.NavConfigInfo; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/OrganizationTreeUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/OrganizationTreeUtils.java index b1b4f26..accb7fc 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/OrganizationTreeUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/OrganizationTreeUtils.java @@ -5,6 +5,7 @@ import com.qunar.im.base.common.BackgroundExecutor; import com.qunar.im.base.jsonbean.GetDepartmentResult; +import com.qunar.im.ui.presenter.views.IOrganizationView; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/ProfileUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/ProfileUtils.java index 9ea5c43..b61ad2f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/ProfileUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/ProfileUtils.java @@ -36,11 +36,10 @@ import com.qunar.im.base.util.ListUtil; import com.qunar.im.base.util.glide.GlideCircleTransform; import com.qunar.im.base.util.graphics.BitmapHelper; -import com.qunar.im.base.util.graphics.ImageUtils; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.view.bigimageview.view.MyGlideUrl; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.QtalkStringUtils; @@ -49,7 +48,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; import de.greenrobot.event.EventBus; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/QRRouter.java b/imsdk/src/main/java/com/qunar/im/ui/util/QRRouter.java index 28412af..bb90fb2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/QRRouter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/QRRouter.java @@ -13,7 +13,7 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.Utils; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.ChatroomInfoActivity; import com.qunar.im.ui.activity.QunarWebActvity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/ReflectUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/ReflectUtil.java index 2e09928..a96b286 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/ReflectUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/ReflectUtil.java @@ -2,7 +2,9 @@ import android.content.Context; import android.content.Intent; -import android.support.v4.app.Fragment; + +import androidx.fragment.app.Fragment; + /** * Created by froyomu on 2019-08-05 diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/ShareUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/ShareUtil.java index 7305c6f..b4f97a7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/ShareUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/ShareUtil.java @@ -7,7 +7,7 @@ import android.net.Uri; import android.os.Build; import android.provider.MediaStore; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import java.io.File; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/StatusBarUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/StatusBarUtil.java index cbaa8ee..2af1ca6 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/StatusBarUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/StatusBarUtil.java @@ -5,9 +5,10 @@ import android.content.Context; import android.graphics.Color; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.IntRange; -import android.support.v4.widget.DrawerLayout; +import androidx.annotation.ColorInt; +import androidx.annotation.IntRange; +import androidx.drawerlayout.widget.DrawerLayout; + import android.view.View; import android.view.ViewGroup; import android.view.Window; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/TransitionHelper.java b/imsdk/src/main/java/com/qunar/im/ui/util/TransitionHelper.java index ce62f91..3f27157 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/TransitionHelper.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/TransitionHelper.java @@ -19,9 +19,9 @@ import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.util.Pair; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.util.Pair; import android.view.View; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/UnzipUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/UnzipUtils.java index 914f133..7e62e11 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/UnzipUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/UnzipUtils.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.util; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.qunar.im.base.util.LogUtil; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/UpdateManager.java b/imsdk/src/main/java/com/qunar/im/ui/util/UpdateManager.java index df5ff3f..1f93d2d 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/UpdateManager.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/UpdateManager.java @@ -13,7 +13,7 @@ import android.os.Environment; import android.os.Handler; import android.os.Message; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.view.LayoutInflater; @@ -35,7 +35,7 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.imagepicker.util.ProviderUtil; @@ -58,7 +58,7 @@ public class UpdateManager { private String API_URL; - private static final String STARTALK_URL = "https://im.qunar.com/package/newapi"; + private static final String STARTALK_URL = ""; private static final int DOWN_NOSDCARD = 0; private static final int DOWN_UPDATE = 1; @@ -197,6 +197,9 @@ else if(mProDialog.isShowing() || (latestOrFailDialog!=null && latestOrFailDialo return; } String url = API_URL + this.curVersionCode;// + "&cpu=" + Build.CPU_ABI; + if(!url.startsWith("http")){ + return; + } if(isForce) url+="&f=1"; StringBuilder stringBuilder = new StringBuilder(url); Protocol.addBasicParamsOnHead(stringBuilder); diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/WaterMarkTextUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/WaterMarkTextUtil.java index a201dbf..71cdc23 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/WaterMarkTextUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/WaterMarkTextUtil.java @@ -7,7 +7,7 @@ import android.graphics.Paint; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextPaint; import android.text.TextUtils; import android.view.View; @@ -22,7 +22,7 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; public class WaterMarkTextUtil { @@ -185,7 +185,7 @@ public BitmapDrawable drawTextToBitmap(Context mContext, String gText) { canvas.rotate(-rotate); canvas.drawText(gText,0,0,mTextPaint); /**保存画布*/ - canvas.save(Canvas.ALL_SAVE_FLAG); + canvas.save(); canvas.restore(); //生成平铺的bitmapDrawable BitmapDrawable drawable = new BitmapDrawable(mContext.getResources(), bitmap); diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/CustomMedia/JZMediaSystemAssertFolder.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/CustomMedia/JZMediaSystemAssertFolder.java index 697a83a..0cf1e91 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/CustomMedia/JZMediaSystemAssertFolder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/CustomMedia/JZMediaSystemAssertFolder.java @@ -8,7 +8,7 @@ import android.os.Build; import android.os.Handler; import android.os.HandlerThread; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import android.view.Surface; import com.qunar.im.ui.util.easyVideo.JZMediaInterface; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZMediaSystem.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZMediaSystem.java index d347873..f953e9f 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZMediaSystem.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZMediaSystem.java @@ -7,7 +7,7 @@ import android.os.Build; import android.os.Handler; import android.os.HandlerThread; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import android.view.Surface; import java.lang.reflect.Method; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZUtils.java index 270405d..560b061 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/JZUtils.java @@ -5,12 +5,11 @@ import android.content.Context; import android.content.ContextWrapper; import android.content.SharedPreferences; -import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; -import android.support.v4.app.ActivityCompat; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.view.ContextThemeWrapper; +import androidx.core.app.ActivityCompat; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.view.ContextThemeWrapper; import android.util.Log; import android.view.View; import android.view.Window; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/Jzvd.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/Jzvd.java index 9526007..c26aa2e 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/Jzvd.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyVideo/Jzvd.java @@ -415,7 +415,7 @@ public void onStateAutoComplete() { public void onInfo(int what, int extra) { Log.d(TAG, "onInfo what - " + what + " extra - " + extra); - if(extra!=0){ + if(extra!=0&&extra<361){ setTextureViewRotation(extra); } if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureButton.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureButton.java index 93b6fea..699110a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureButton.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureButton.java @@ -9,7 +9,7 @@ import android.graphics.Paint; import android.graphics.RectF; import android.os.CountDownTimer; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.view.MotionEvent; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureLayout.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureLayout.java index 01a553d..8d1eb5a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/CaptureLayout.java @@ -6,7 +6,7 @@ import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.Configuration; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.Gravity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/FoucsView.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/FoucsView.java index 6102d9d..434de4b 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/FoucsView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/FoucsView.java @@ -3,8 +3,8 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/JCameraView.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/JCameraView.java index e0374a5..bfd2ba8 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/JCameraView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/JCameraView.java @@ -10,7 +10,7 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Build; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/TypeButton.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/TypeButton.java index c3cba6a..94e3c18 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/TypeButton.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/TypeButton.java @@ -6,7 +6,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.view.View; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/util/ScreenUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/util/ScreenUtils.java index 8c1f82f..4adb469 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/util/ScreenUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/cameralibrary/util/ScreenUtils.java @@ -1,17 +1,17 @@ package com.qunar.im.ui.util.easyphoto.cameralibrary.util; import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Point; +import android.os.Build; import android.util.DisplayMetrics; +import android.view.Display; import android.view.WindowManager; -/** - * ===================================== - * 作 者: 陈嘉桐 - * 版 本:1.1.4 - * 创建日期:2017/5/25 - * 描 述: - * ===================================== - */ +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + + public class ScreenUtils { public static int getScreenHeight(Context context) { DisplayMetrics metric = new DisplayMetrics(); @@ -26,4 +26,76 @@ public static int getScreenWidth(Context context) { wm.getDefaultDisplay().getMetrics(metric); return metric.widthPixels; } + + public static int getFullActivityHeight(Context context) { + if (!isAllScreenDevice(context)) { + return getScreenHeight(context); + } + return getScreenRealHeight(context); + } + + private static final int PORTRAIT = 0; + private static final int LANDSCAPE = 1; + @NonNull + private volatile static Point[] mRealSizes = new Point[2]; + + + public static int getScreenRealHeight(@Nullable Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { + return getScreenHeight(context); + } + + int orientation = context != null + ? context.getResources().getConfiguration().orientation + : context.getResources().getConfiguration().orientation; + orientation = orientation == Configuration.ORIENTATION_PORTRAIT ? PORTRAIT : LANDSCAPE; + + if (mRealSizes[orientation] == null) { + WindowManager windowManager = context != null + ? (WindowManager) context.getSystemService(Context.WINDOW_SERVICE) + : (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + if (windowManager == null) { + return getScreenHeight(context); + } + Display display = windowManager.getDefaultDisplay(); + Point point = new Point(); + display.getRealSize(point); + mRealSizes[orientation] = point; + } + return mRealSizes[orientation].y; + } + + private volatile static boolean mHasCheckAllScreen; + private volatile static boolean mIsAllScreenDevice; + + public static boolean isAllScreenDevice(Context context) { + if (mHasCheckAllScreen) { + return mIsAllScreenDevice; + } + mHasCheckAllScreen = true; + mIsAllScreenDevice = false; + // 低于 API 21的,都不会是全面屏。。。 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + return false; + } + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + if (windowManager != null) { + Display display = windowManager.getDefaultDisplay(); + Point point = new Point(); + display.getRealSize(point); + float width, height; + if (point.x < point.y) { + width = point.x; + height = point.y; + } else { + width = point.y; + height = point.x; + } + if (height / width >= 1.97f) { + mIsAllScreenDevice = true; + } + } + return mIsAllScreenDevice; + } } + diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/Builder/AlbumBuilder.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/Builder/AlbumBuilder.java index cab2c71..2714a72 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/Builder/AlbumBuilder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/Builder/AlbumBuilder.java @@ -1,10 +1,11 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.Builder; import android.app.Activity; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + import android.view.View; import com.qunar.im.ui.util.easyphoto.easyphotos.callback.SelectCallback; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/EasyPhotos.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/EasyPhotos.java index e33a625..734a943 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/EasyPhotos.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/EasyPhotos.java @@ -3,9 +3,10 @@ import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + import android.view.View; import com.qunar.im.ui.util.easyphoto.easyphotos.Builder.AlbumBuilder; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/ad/AdViewHolder.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/ad/AdViewHolder.java index 2d13f97..c8c1063 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/ad/AdViewHolder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/ad/AdViewHolder.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.models.ad; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.FrameLayout; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/DegreeSeekBar.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/DegreeSeekBar.java index d7cae32..295248d 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/DegreeSeekBar.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/DegreeSeekBar.java @@ -7,7 +7,7 @@ import android.graphics.Path; import android.graphics.Rect; import android.os.Build; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/PuzzleView.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/PuzzleView.java index ba4a0d7..089412c 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/PuzzleView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/puzzle/PuzzleView.java @@ -11,7 +11,7 @@ import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/StickerModel.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/StickerModel.java index c0984a8..b2237ce 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/StickerModel.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/StickerModel.java @@ -4,10 +4,11 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.support.v4.app.FragmentManager; import android.view.View; import android.view.ViewGroup; +import androidx.fragment.app.FragmentManager; + import com.qunar.im.ui.util.easyphoto.easyphotos.EasyPhotos; import com.qunar.im.ui.util.easyphoto.easyphotos.models.sticker.cache.StickerCache; import com.qunar.im.ui.util.easyphoto.easyphotos.models.sticker.entity.TextStickerData; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/cache/StickerCache.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/cache/StickerCache.java index b16552f..6af7dc2 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/cache/StickerCache.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/cache/StickerCache.java @@ -4,7 +4,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; -import android.support.annotation.IdRes; +import androidx.annotation.IdRes; import com.qunar.im.ui.util.easyphoto.easyphotos.EasyPhotos; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/BitmapSticker.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/BitmapSticker.java index dda6b92..bb4a9a9 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/BitmapSticker.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/BitmapSticker.java @@ -10,7 +10,7 @@ import android.graphics.Point; import android.graphics.RectF; import android.graphics.Region; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.GestureDetector; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/EditFragment.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/EditFragment.java index 3242edd..cc9a749 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/EditFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/EditFragment.java @@ -3,11 +3,12 @@ import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.Nullable; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.content.ContextCompat; +import androidx.annotation.IdRes; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentManager; + import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/TextSticker.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/TextSticker.java index cb6c2d1..e7e325d 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/TextSticker.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/models/sticker/view/TextSticker.java @@ -13,7 +13,7 @@ import android.graphics.RectF; import android.graphics.Region; import android.graphics.Typeface; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/setting/Setting.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/setting/Setting.java index f864ca4..68acfc7 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/setting/Setting.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/setting/Setting.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.setting; -import android.support.annotation.IntDef; +import androidx.annotation.IntDef; import android.view.View; import com.qunar.im.ui.util.easyphoto.easyphotos.callback.VideoPlayCallback; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyCameraActivity.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyCameraActivity.java index 72b0d99..f984050 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyCameraActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyCameraActivity.java @@ -8,7 +8,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.view.Window; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyPhotosActivity.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyPhotosActivity.java index 9f023d0..ebd1761 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyPhotosActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/EasyPhotosActivity.java @@ -15,16 +15,16 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.SimpleItemAnimator; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; import android.text.TextUtils; import android.util.Log; import android.view.View; @@ -131,7 +131,7 @@ public static void start(Fragment fragment, int requestCode) { fragment.startActivityForResult(intent, requestCode); } - public static void start(android.support.v4.app.Fragment fragment, int requestCode) { + public static void start(androidx.fragment.app.Fragment fragment, int requestCode) { Intent intent = new Intent(fragment.getContext(), EasyPhotosActivity.class); fragment.startActivityForResult(intent, requestCode); } diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewActivity.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewActivity.java index 49d17bd..f788de8 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewActivity.java @@ -5,14 +5,14 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.PagerSnapHelper; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.PagerSnapHelper; +import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.view.WindowManager; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewFragment.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewFragment.java index 6398600..ee16566 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PreviewFragment.java @@ -2,9 +2,10 @@ import android.content.Context; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleActivity.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleActivity.java index a45c293..01873a8 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleActivity.java @@ -8,15 +8,15 @@ import android.graphics.BitmapFactory; import android.os.Build; import android.os.Bundle; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.snackbar.Snackbar; +import androidx.core.content.ContextCompat; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; @@ -106,7 +106,7 @@ public static void startWithPhotos(Fragment fragment, ArrayList photos, S fragment.startActivityForResult(intent, requestCode); } - public static void startWithPhotos(android.support.v4.app.Fragment fragmentV, ArrayList photos, String puzzleSaveDirPath, String puzzleSaveNamePrefix, int requestCode, boolean replaceCustom, @NonNull ImageEngine imageEngine) { + public static void startWithPhotos(androidx.fragment.app.Fragment fragmentV, ArrayList photos, String puzzleSaveDirPath, String puzzleSaveNamePrefix, int requestCode, boolean replaceCustom, @NonNull ImageEngine imageEngine) { if (null != toClass) { toClass.clear(); toClass = null; @@ -167,7 +167,7 @@ public static void startWithPaths(Fragment fragment, ArrayList paths, St fragment.startActivityForResult(intent, requestCode); } - public static void startWithPaths(android.support.v4.app.Fragment fragmentV, ArrayList paths, String puzzleSaveDirPath, String puzzleSaveNamePrefix, int requestCode, boolean replaceCustom, @NonNull ImageEngine imageEngine) { + public static void startWithPaths(androidx.fragment.app.Fragment fragmentV, ArrayList paths, String puzzleSaveDirPath, String puzzleSaveNamePrefix, int requestCode, boolean replaceCustom, @NonNull ImageEngine imageEngine) { if (null != toClass) { toClass.clear(); toClass = null; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleSelectorActivity.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleSelectorActivity.java index e980687..b9dd90f 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleSelectorActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/PuzzleSelectorActivity.java @@ -10,13 +10,13 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; -import android.support.annotation.IdRes; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.SimpleItemAnimator; +import androidx.annotation.IdRes; +import androidx.core.content.ContextCompat; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateInterpolator; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/AlbumItemsAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/AlbumItemsAdapter.java index b822cbf..d4777ec 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/AlbumItemsAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/AlbumItemsAdapter.java @@ -1,8 +1,8 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; import android.content.Context; -import android.support.constraint.ConstraintLayout; -import android.support.v7.widget.RecyclerView; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PhotosAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PhotosAdapter.java index a8a32fc..690ca28 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PhotosAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PhotosAdapter.java @@ -1,9 +1,9 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosAdapter.java index ba7983f..e6f6e26 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosAdapter.java @@ -4,9 +4,9 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; -import android.support.annotation.NonNull; -import android.support.v4.content.FileProvider; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosFragmentAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosFragmentAdapter.java index 0db6759..5037480 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosFragmentAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PreviewPhotosFragmentAdapter.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleAdapter.java index e97c74b..a880e4a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleAdapter.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorAdapter.java index 2fdbb9a..8faa5ad 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorAdapter.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorPreviewAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorPreviewAdapter.java index 9b0f1da..4d4a3e2 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorPreviewAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/PuzzleSelectorPreviewAdapter.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/TextStickerAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/TextStickerAdapter.java index b9840d9..6123ea6 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/TextStickerAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/adapter/TextStickerAdapter.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.adapter; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedImageView.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedImageView.java index e21b422..8b179cb 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedImageView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedImageView.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.widget; import android.content.Context; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; /** @@ -9,7 +9,7 @@ * Created by huan on 2017/8/15. */ -public class PressedImageView extends android.support.v7.widget.AppCompatImageView { +public class PressedImageView extends androidx.appcompat.widget.AppCompatImageView { private float scaleSize;//按压颜色 public PressedImageView(Context context) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedTextView.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedTextView.java index 34779ad..6ec22f2 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedTextView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PressedTextView.java @@ -3,7 +3,7 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; /** @@ -11,7 +11,7 @@ * Created by huan on 2017/9/15. */ -public class PressedTextView extends android.support.v7.widget.AppCompatTextView { +public class PressedTextView extends androidx.appcompat.widget.AppCompatTextView { private float pressedScale; private AnimatorSet set; private int pressedFlag; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PreviewRecyclerView.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PreviewRecyclerView.java index 821d52d..c9c3b67 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PreviewRecyclerView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/ui/widget/PreviewRecyclerView.java @@ -1,9 +1,9 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.ui.widget; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; import android.util.AttributeSet; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/bitmap/BitmapUtils.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/bitmap/BitmapUtils.java index 769b5b5..e346ca1 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/bitmap/BitmapUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/bitmap/BitmapUtils.java @@ -5,7 +5,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/permission/PermissionUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/permission/PermissionUtil.java index c64c98e..048d0b0 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/permission/PermissionUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/permission/PermissionUtil.java @@ -2,9 +2,9 @@ import android.app.Activity; import android.content.pm.PackageManager; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.PermissionChecker; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.PermissionChecker; import com.qunar.im.ui.util.easyphoto.easyphotos.constant.Code; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/provider/EasyPhotosFileProvider.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/provider/EasyPhotosFileProvider.java index 8611dbd..991b296 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/provider/EasyPhotosFileProvider.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/provider/EasyPhotosFileProvider.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.utils.provider; -import android.support.v4.content.FileProvider; +import androidx.core.content.FileProvider; public class EasyPhotosFileProvider extends FileProvider { } diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/EasyResult.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/EasyResult.java index 8c0bd79..2937e59 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/EasyResult.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/EasyResult.java @@ -1,8 +1,9 @@ package com.qunar.im.ui.util.easyphoto.easyphotos.utils.result; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; /** * EasyResult diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/HolderFragment.java b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/HolderFragment.java index 4355ee2..515cbee 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/HolderFragment.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/easyphoto/easyphotos/utils/result/HolderFragment.java @@ -3,9 +3,10 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + import android.util.Log; import com.qunar.im.ui.util.easyphoto.easyphotos.EasyPhotos; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/emoticon/EmotionDownloader.java b/imsdk/src/main/java/com/qunar/im/ui/util/emoticon/EmotionDownloader.java index 0abf61f..165a930 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/emoticon/EmotionDownloader.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/emoticon/EmotionDownloader.java @@ -7,7 +7,6 @@ import com.qunar.im.base.protocol.Protocol; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; -import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoBuilder.java b/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoBuilder.java index a9020d1..086f029 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoBuilder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoBuilder.java @@ -1,8 +1,9 @@ package com.qunar.im.ui.util.videoPlayUtil; import android.app.Activity; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import com.qunar.im.ui.activity.VideoPlayActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoPlayUtil.java b/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoPlayUtil.java index 4f21e7a..b6eec50 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoPlayUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/util/videoPlayUtil/VideoPlayUtil.java @@ -2,10 +2,11 @@ import android.app.Dialog; import android.os.Environment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; import android.view.View; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + import com.qunar.im.ui.util.easyphoto.easyphotos.EasyPhotos; import com.orhanobut.logger.Logger; import com.qunar.im.base.module.DownLoadFileResponse; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/BadgeHelper.java b/imsdk/src/main/java/com/qunar/im/ui/view/BadgeHelper.java index c3473b1..5c7c522 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/BadgeHelper.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/BadgeHelper.java @@ -6,8 +6,8 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; -import android.support.annotation.IntDef; -import android.support.design.widget.TabLayout; +import androidx.annotation.IntDef; +import com.google.android.material.tabs.TabLayout; import android.util.TypedValue; import android.view.Gravity; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/Control.java b/imsdk/src/main/java/com/qunar/im/ui/view/Control.java index 06540d6..d53f1db 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/Control.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/Control.java @@ -1,12 +1,10 @@ package com.qunar.im.ui.view; import android.app.Activity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.Log; + +import androidx.recyclerview.widget.RecyclerView; + import android.util.TypedValue; -import android.view.ViewGroup; -import android.widget.TextView; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/LoadingImgView.java b/imsdk/src/main/java/com/qunar/im/ui/view/LoadingImgView.java index 3658a2a..9d38d48 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/LoadingImgView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/LoadingImgView.java @@ -5,7 +5,7 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; -import android.support.v7.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatImageView; import android.util.AttributeSet; import android.util.TypedValue; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/MyDialog.java b/imsdk/src/main/java/com/qunar/im/ui/view/MyDialog.java index ce21cd4..4529ad0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/MyDialog.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/MyDialog.java @@ -3,7 +3,7 @@ import android.content.Context; import android.os.Bundle; -import android.support.v7.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; import android.widget.TextView; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/NoticeView.java b/imsdk/src/main/java/com/qunar/im/ui/view/NoticeView.java index 74e34d1..f59c1f0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/NoticeView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/NoticeView.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.graphics.Color; import android.net.Uri; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.Spannable; import android.text.SpannableString; import android.text.TextPaint; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/QtActionBar.java b/imsdk/src/main/java/com/qunar/im/ui/view/QtActionBar.java index 79d7c87..70ed108 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/QtActionBar.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/QtActionBar.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view; import android.content.Context; -import android.support.v7.widget.Toolbar; +import androidx.appcompat.widget.Toolbar; import android.util.AttributeSet; import android.widget.FrameLayout; import android.widget.ImageView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/QtNewActionBar.java b/imsdk/src/main/java/com/qunar/im/ui/view/QtNewActionBar.java index 9a23734..e133118 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/QtNewActionBar.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/QtNewActionBar.java @@ -1,8 +1,8 @@ package com.qunar.im.ui.view; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.widget.Toolbar; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; import android.util.AttributeSet; import android.widget.EditText; import android.widget.LinearLayout; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/QtSearchActionBar.java b/imsdk/src/main/java/com/qunar/im/ui/view/QtSearchActionBar.java index 5e5cc47..4d766bd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/QtSearchActionBar.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/QtSearchActionBar.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view; import android.content.Context; -import android.support.v7.widget.Toolbar; +import androidx.appcompat.widget.Toolbar; import android.util.AttributeSet; import android.widget.FrameLayout; import android.widget.TextView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/WaterMarkBg.java b/imsdk/src/main/java/com/qunar/im/ui/view/WaterMarkBg.java index 0cfd156..2a8a125 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/WaterMarkBg.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/WaterMarkBg.java @@ -7,9 +7,9 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; -import android.support.annotation.IntRange; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.util.List; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldHeadView.java b/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldHeadView.java index 5da82b7..fb06934 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldHeadView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldHeadView.java @@ -1,8 +1,8 @@ package com.qunar.im.ui.view; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.Nullable; + import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldSpannableTextView.java b/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldSpannableTextView.java index 8390027..941bf09 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldSpannableTextView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/WorkWorldSpannableTextView.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view; import android.content.Context; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.TextView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ActiveMsgView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ActiveMsgView.java index e148b1d..ad612f8 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ActiveMsgView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ActiveMsgView.java @@ -15,7 +15,7 @@ import com.qunar.im.base.jsonbean.ActivityMessageEntity; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/AnimatedGifDrawable.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/AnimatedGifDrawable.java index 50daeb4..f477c78 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/AnimatedGifDrawable.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/AnimatedGifDrawable.java @@ -6,6 +6,7 @@ import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; +import android.support.rastermill.Cacheable; import com.qunar.im.base.util.MemoryCache; @@ -19,7 +20,7 @@ * */ -public class AnimatedGifDrawable extends AnimationDrawable implements MemoryCache.Cacheable{ +public class AnimatedGifDrawable extends AnimationDrawable implements Cacheable { private int mCurrentIndex = 0; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ButtonMessageView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ButtonMessageView.java index f3756e7..65eb0a0 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ButtonMessageView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ButtonMessageView.java @@ -1,8 +1,8 @@ package com.qunar.im.ui.view.baseView; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ExtendMsgView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ExtendMsgView.java index bb1b3cc..a5b04cb 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ExtendMsgView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ExtendMsgView.java @@ -5,7 +5,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; -import android.support.annotation.RequiresApi; +import androidx.annotation.RequiresApi; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; @@ -17,7 +17,6 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; -import com.qunar.im.ui.util.FacebookImageUtil; import com.qunar.im.base.jsonbean.ExtendMessageEntity; import com.qunar.im.base.util.DESUtils; import com.qunar.im.base.util.DataUtils; @@ -25,7 +24,7 @@ import com.qunar.im.base.util.Utils; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.util.ProfileUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/HongbaoPromptView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/HongbaoPromptView.java index 553d772..03ef3fd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/HongbaoPromptView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/HongbaoPromptView.java @@ -22,7 +22,7 @@ import com.qunar.im.base.util.BinaryUtil; import com.qunar.im.base.util.Constants; import com.qunar.im.core.manager.IMLogicManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.utils.QtalkStringUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/IMChatBaseView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/IMChatBaseView.java index d2b2ebd..d5ef9a2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/IMChatBaseView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/IMChatBaseView.java @@ -28,6 +28,7 @@ import com.qunar.im.base.util.DataCenter; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.Utils; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; @@ -185,7 +186,7 @@ public void setNickStatus(boolean showNick) { } public void initFontSize() { - switch (com.qunar.im.protobuf.common.CurrentPreference.getInstance().getFontSizeMode()) { + switch (CurrentPreference.getInstance().getFontSizeMode()) { case 1: mLeftNickName.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources(). diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RTCView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RTCView.java index cbb7f54..c25b498 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RTCView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RTCView.java @@ -21,7 +21,7 @@ import com.qunar.im.common.CommonConfig; import com.qunar.im.permission.PermissionCallback; import com.qunar.im.permission.PermissionDispatcher; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.rtc.webrtc.WebRTCStatus; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RichActionView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RichActionView.java index 4d6783a..78f7ecd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RichActionView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RichActionView.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.Html; import android.text.TextUtils; import android.util.AttributeSet; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RobotNewQuestionListView.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RobotNewQuestionListView.java index 919099d..53d48bc 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RobotNewQuestionListView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/RobotNewQuestionListView.java @@ -10,7 +10,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Parcelable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.support.rastermill.FrameSequence; import android.support.rastermill.FrameSequenceDrawable; import android.text.SpannableString; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ViewPool.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ViewPool.java index 9de6fa3..69d3630 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ViewPool.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/ViewPool.java @@ -2,7 +2,6 @@ import android.content.Context; import android.graphics.drawable.Drawable; -import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.util.TypedValue; import android.view.View; @@ -16,6 +15,7 @@ import com.facebook.drawee.view.SimpleDraweeView; import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.util.ResourceUtils; import com.qunar.im.ui.view.medias.play.PlayVoiceView; @@ -88,7 +88,7 @@ public static T getView(Class type,Context context) { ((PlayVoiceView)v).onCreate(); } else if (v instanceof TextView) { - int fontSizeMode = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getFontSizeMode(); + int fontSizeMode = CurrentPreference.getInstance().getFontSizeMode(); float fontSize=context.getResources().getDimensionPixelSize(R.dimen.atom_ui_text_size_medium); switch (fontSizeMode) { diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/AAShoukMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/AAShoukMessageProcessor.java index 1617230..d71fc9a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/AAShoukMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/AAShoukMessageProcessor.java @@ -2,7 +2,7 @@ import android.content.Intent; import android.net.Uri; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -14,7 +14,7 @@ import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.view.baseView.AAShoukView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ActivityMsgProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ActivityMsgProcessor.java index 4b12719..82bf4e7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ActivityMsgProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ActivityMsgProcessor.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.baseView.processor; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.ViewGroup; import android.widget.TextView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ExtendMsgProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ExtendMsgProcessor.java index d889bb8..cc78141 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ExtendMsgProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ExtendMsgProcessor.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.baseView.processor; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.ViewGroup; import android.widget.TextView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/FileMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/FileMessageProcessor.java index fd46756..532b38f 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/FileMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/FileMessageProcessor.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/HongbaoMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/HongbaoMessageProcessor.java index d12a651..26f1c08 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/HongbaoMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/HongbaoMessageProcessor.java @@ -2,9 +2,8 @@ import android.content.Intent; import android.net.Uri; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; -import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -14,10 +13,8 @@ import com.qunar.im.base.util.BinaryUtil; import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.core.utils.GlobalConfigManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.view.baseView.HongbaoView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MeetingRemindProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MeetingRemindProcessor.java index 97625b1..e36324a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MeetingRemindProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MeetingRemindProcessor.java @@ -10,7 +10,7 @@ import com.qunar.im.base.jsonbean.RemindDataBean; import com.qunar.im.base.module.IMMessage; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.view.baseView.IMessageItem; import com.qunar.im.ui.view.baseView.ClickRemindView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MessageProcessor.java index 966a7a9..a375bee 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/MessageProcessor.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.baseView.processor; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ProgressBar; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/NoteMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/NoteMessageProcessor.java index b644dc5..5d54926 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/NoteMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/NoteMessageProcessor.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.baseView.processor; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtSuggesstionProccessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtSuggesstionProccessor.java index 454df21..f824573 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtSuggesstionProccessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtSuggesstionProccessor.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.baseView.processor; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtToUserProccessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtToUserProccessor.java index 7bd074f..3fb3bf7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtToUserProccessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RbtToUserProccessor.java @@ -18,8 +18,6 @@ import com.qunar.im.ui.view.baseView.NoLineClickSpan; import com.qunar.im.utils.HttpUtil; -import java.util.HashMap; - /** * Created by xinbo.wang on 2016-12-06. */ diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RevokeMeesageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RevokeMeesageProcessor.java index e55b64f..43a9e56 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RevokeMeesageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RevokeMeesageProcessor.java @@ -5,7 +5,7 @@ import android.widget.TextView; import com.qunar.im.base.module.IMMessage; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.ui.adapter.ChatViewAdapter; import com.qunar.im.ui.view.baseView.IMessageItem; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotNewQuestionListMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotNewQuestionListMessageProcessor.java index 58dcf45..668eaa7 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotNewQuestionListMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotNewQuestionListMessageProcessor.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.baseView.processor; import android.content.Context; -import android.support.design.widget.BottomSheetDialog; +import com.google.android.material.bottomsheet.BottomSheetDialog; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -176,7 +176,7 @@ public void onClick(View v) { // bottomSheetDialog.setCanceledOnTouchOutside(false); //给布局设置透明背景色 - bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) + bottomSheetDialog.getDelegate().findViewById(com.google.android.material.R.id.design_bottom_sheet) .setBackgroundColor(item.getContext().getResources().getColor(android.R.color.transparent)); diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotQuestionListMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotQuestionListMessageProcessor.java index d7b36e7..120b8c3 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotQuestionListMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/RobotQuestionListMessageProcessor.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.baseView.processor; import android.content.Context; -import android.support.design.widget.BottomSheetDialog; +import com.google.android.material.bottomsheet.BottomSheetDialog; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -168,7 +168,7 @@ public void onClick(View v) { // bottomSheetDialog.setCanceledOnTouchOutside(false); //给布局设置透明背景色 - bottomSheetDialog.getDelegate().findViewById(android.support.design.R.id.design_bottom_sheet) + bottomSheetDialog.getDelegate().findViewById(com.google.android.material.R.id.design_bottom_sheet) .setBackgroundColor(context.getResources().getColor(android.R.color.transparent)); } diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ShareLocationProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ShareLocationProcessor.java index 729dae0..fad0046 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ShareLocationProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/ShareLocationProcessor.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TextMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TextMessageProcessor.java index e5c1416..863ea10 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TextMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TextMessageProcessor.java @@ -59,7 +59,6 @@ import com.qunar.im.base.util.glide.GlideRoundTransform; import com.qunar.im.base.util.graphics.ImageUtils; import com.qunar.im.base.view.faceGridView.EmoticonEntity; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.ui.R; import com.qunar.im.ui.activity.QunarWebActvity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TransferMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TransferMessageProcessor.java index b0c6b94..85c540a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TransferMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/TransferMessageProcessor.java @@ -11,7 +11,7 @@ import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; import com.qunar.im.common.CommonConfig; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.ui.view.baseView.IMessageItem; import com.qunar.im.ui.view.baseView.TransferMsgView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/VideoMessageProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/VideoMessageProcessor.java index 6e2df70..0739af2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/VideoMessageProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/VideoMessageProcessor.java @@ -2,13 +2,14 @@ import android.content.Context; import android.net.Uri; -import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; +import androidx.fragment.app.FragmentActivity; + import com.bumptech.glide.Glide; import com.facebook.drawee.interfaces.DraweeController; import com.qunar.im.base.common.QunarIMApp; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/WorkWorldRemindProcessor.java b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/WorkWorldRemindProcessor.java index 356ee72..1a2eff5 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/WorkWorldRemindProcessor.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/baseView/processor/WorkWorldRemindProcessor.java @@ -2,7 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -12,8 +11,6 @@ import com.qunar.im.base.module.IMMessage; import com.qunar.im.base.module.WorkWorldItem; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.protobuf.common.CurrentPreference; -import com.qunar.im.ui.activity.QunarWebActvity; import com.qunar.im.ui.activity.WorkWorldDetailsActivity; import com.qunar.im.ui.view.baseView.ClickRemindView; import com.qunar.im.ui.view.baseView.IMessageItem; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImageBrowsUtil.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImageBrowsUtil.java index 0166594..dd90d0b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImageBrowsUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImageBrowsUtil.java @@ -1,20 +1,12 @@ package com.qunar.im.ui.view.bigimageview; import android.app.Dialog; -import android.content.ContentValues; import android.content.Context; -import android.content.Intent; -import android.database.Cursor; -import android.net.Uri; -import android.os.Build; -import android.provider.MediaStore; import android.text.TextUtils; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.target.Target; import com.google.zxing.Result; import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.module.IMMessage; @@ -22,7 +14,6 @@ import com.qunar.im.base.util.ChatTextHelper; import com.qunar.im.base.util.MessageUtils; import com.qunar.im.ui.R; -import com.qunar.im.ui.presenter.views.IBrowsingConversationImageView; import com.qunar.im.ui.util.QRRouter; import com.qunar.im.ui.util.ShareUtil; import com.qunar.im.ui.util.easyphoto.easyphotos.EasyPhotos; @@ -39,10 +30,8 @@ import java.io.File; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImagePreview.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImagePreview.java index 00341cc..dd469be 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImagePreview.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/ImagePreview.java @@ -3,15 +3,14 @@ import android.app.Activity; import android.content.Context; import android.os.Build; -import android.support.annotation.DrawableRes; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; +import androidx.annotation.DrawableRes; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Log; import com.qunar.im.ui.R; import com.qunar.im.ui.view.bigimageview.bean.ImageInfo; -import com.qunar.im.ui.view.bigimageview.tool.utility.common.NetworkUtil; import com.qunar.im.ui.view.bigimageview.view.ImagePreviewActivity; import com.qunar.im.ui.view.bigimageview.view.listener.OnBigImageClickListener; import com.qunar.im.ui.view.bigimageview.view.listener.OnBigImageLongClickListener; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/HackyViewPager.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/HackyViewPager.java index b084b2c..aa8591d 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/HackyViewPager.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/HackyViewPager.java @@ -1,10 +1,11 @@ package com.qunar.im.ui.view.bigimageview.view; import android.content.Context; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; +import androidx.viewpager.widget.ViewPager; + /** * Hacky fix for Issue #4 and * http://code.google.com/p/android/issues/detail?id=18990 diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewActivity.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewActivity.java index 117c61a..2998e04 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewActivity.java @@ -10,11 +10,12 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.support.annotation.NonNull; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.ViewPager; + import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -40,7 +41,7 @@ import java.util.List; -import static android.support.v4.content.PermissionChecker.PERMISSION_GRANTED; +import static androidx.core.content.PermissionChecker.PERMISSION_GRANTED; public class ImagePreviewActivity extends AppCompatActivity implements Handler.Callback, View.OnClickListener { diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewAdapter.java index d2ab005..6dabd33 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/ImagePreviewAdapter.java @@ -3,8 +3,9 @@ import android.app.Activity; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.v4.view.PagerAdapter; +import androidx.annotation.NonNull; +import androidx.viewpager.widget.PagerAdapter; + import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/FingerDragHelper.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/FingerDragHelper.java index 5245d2d..f05779a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/FingerDragHelper.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/FingerDragHelper.java @@ -4,7 +4,7 @@ import android.animation.ValueAnimator; import android.app.Activity; import android.content.Context; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/ImageSource.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/ImageSource.java index 2ced20f..398753d 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/ImageSource.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/ImageSource.java @@ -3,7 +3,7 @@ import android.graphics.Bitmap; import android.graphics.Rect; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.File; import java.io.UnsupportedEncodingException; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/SubsamplingScaleImageViewDragClose.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/SubsamplingScaleImageViewDragClose.java index 6b5977e..3dff227 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/SubsamplingScaleImageViewDragClose.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/helper/SubsamplingScaleImageViewDragClose.java @@ -20,9 +20,9 @@ import android.os.Handler; import android.os.Message; import android.provider.MediaStore; -import android.support.annotation.AnyThread; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.AnyThread; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/photoview/PhotoView.java b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/photoview/PhotoView.java index 698a96a..a0872c5 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/photoview/PhotoView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bigimageview/view/photoview/PhotoView.java @@ -20,8 +20,8 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.support.annotation.NonNull; -import android.support.v7.widget.AppCompatImageView; +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatImageView; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleLayout/BubbleLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleLayout/BubbleLayout.java index f1fcc37..1024512 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleLayout/BubbleLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleLayout/BubbleLayout.java @@ -5,7 +5,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.RectF; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleImageView.java b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleImageView.java index 1d7a7d6..5b86c39 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleImageView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleImageView.java @@ -7,7 +7,7 @@ import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.support.v7.widget.AppCompatImageView; +import androidx.appcompat.widget.AppCompatImageView; import android.util.AttributeSet; import android.util.TypedValue; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleLinearLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleLinearLayout.java index 27077d9..5572e38 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleLinearLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleLinearLayout.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.RectF; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.widget.LinearLayout; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleTextView.java b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleTextView.java index 6380ef4..43a42d4 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleTextView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/bubbleView/BubbleTextView.java @@ -4,7 +4,7 @@ import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.RectF; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.widget.AppCompatTextView; import android.util.AttributeSet; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/camera/view/FoucsView.java b/imsdk/src/main/java/com/qunar/im/ui/view/camera/view/FoucsView.java index d6e4387..0bafc9e 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/camera/view/FoucsView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/camera/view/FoucsView.java @@ -3,7 +3,7 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/ChatOperationsAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/ChatOperationsAdapter.java index 3a79791..a3180de 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/ChatOperationsAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/ChatOperationsAdapter.java @@ -1,7 +1,6 @@ package com.qunar.im.ui.view.chatExtFunc; import android.content.Context; -import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,6 +8,8 @@ import android.widget.GridView; import android.widget.LinearLayout; +import androidx.viewpager.widget.PagerAdapter; + import com.qunar.im.ui.R; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/OperationView.java b/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/OperationView.java index be368c2..add99a1 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/OperationView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/chatExtFunc/OperationView.java @@ -1,13 +1,14 @@ package com.qunar.im.ui.view.chatExtFunc; import android.content.Context; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.ui.R; import com.qunar.im.base.util.Utils; import com.qunar.im.ui.view.faceGridView.DotFile; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/dialog/BottomDialog.java b/imsdk/src/main/java/com/qunar/im/ui/view/dialog/BottomDialog.java index b454350..2e02744 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/dialog/BottomDialog.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/dialog/BottomDialog.java @@ -28,16 +28,15 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; -import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Build; -import android.support.annotation.RequiresApi; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v7.view.SupportMenuInflater; -import android.support.v7.view.menu.MenuBuilder; -import android.text.TextUtils; +import androidx.annotation.RequiresApi; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.appcompat.view.SupportMenuInflater; +import androidx.appcompat.view.menu.MenuBuilder; + import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/dialog/OpenRedEnvelopDialog.java b/imsdk/src/main/java/com/qunar/im/ui/view/dialog/OpenRedEnvelopDialog.java index 7a54b85..3320ece 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/dialog/OpenRedEnvelopDialog.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/dialog/OpenRedEnvelopDialog.java @@ -3,7 +3,6 @@ import android.app.Activity; import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -21,13 +20,11 @@ import com.qunar.im.core.manager.IMPayManager; import com.qunar.im.protobuf.Event.QtalkEvent; import com.qunar.im.ui.R; -import com.qunar.im.ui.activity.PersonalInfoActivity; import com.qunar.im.ui.util.ProfileUtils; import com.qunar.im.utils.ConnectionUtil; import org.json.JSONObject; -import java.io.IOException; import java.io.InputStream; /** diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/emojiconEditView/EmojiconEditText.java b/imsdk/src/main/java/com/qunar/im/ui/view/emojiconEditView/EmojiconEditText.java index d4255c5..b89c9ff 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/emojiconEditView/EmojiconEditText.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/emojiconEditView/EmojiconEditText.java @@ -18,7 +18,7 @@ import android.content.Context; import android.content.res.TypedArray; -import android.support.v7.widget.AppCompatEditText; +import androidx.appcompat.widget.AppCompatEditText; import android.util.AttributeSet; import com.qunar.im.base.util.Utils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/emojiconTextView/EmojiconTextView.java b/imsdk/src/main/java/com/qunar/im/ui/view/emojiconTextView/EmojiconTextView.java index b54cfca..47193b8 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/emojiconTextView/EmojiconTextView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/emojiconTextView/EmojiconTextView.java @@ -18,7 +18,7 @@ import android.content.Context; import android.content.res.TypedArray; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.widget.AppCompatTextView; import android.text.Layout; import android.text.Selection; import android.text.Spannable; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/FaceGridView.java b/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/FaceGridView.java index 7bcded3..3c0d9f9 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/FaceGridView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/FaceGridView.java @@ -2,7 +2,6 @@ import android.content.Context; import android.graphics.Color; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.SparseArray; import android.view.Gravity; @@ -13,6 +12,8 @@ import android.widget.ImageView; import android.widget.LinearLayout; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.base.view.faceGridView.EmoticionMap; import com.qunar.im.base.view.faceGridView.EmoticonEntity; import com.qunar.im.core.utils.GlobalConfigManager; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/ViewPaperAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/ViewPaperAdapter.java index e86159f..d7f80ba 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/ViewPaperAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/faceGridView/ViewPaperAdapter.java @@ -1,10 +1,11 @@ package com.qunar.im.ui.view.faceGridView; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; import android.view.View; import android.widget.GridView; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import java.util.List; /** diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/facebookimageview/zoomable/ZoomableDraweeView.java b/imsdk/src/main/java/com/qunar/im/ui/view/facebookimageview/zoomable/ZoomableDraweeView.java index 8aa9481..46a1135 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/facebookimageview/zoomable/ZoomableDraweeView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/facebookimageview/zoomable/ZoomableDraweeView.java @@ -18,7 +18,7 @@ import android.graphics.Matrix; import android.graphics.RectF; import android.graphics.drawable.Animatable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/kpswitch/util/KeyboardUtil.java b/imsdk/src/main/java/com/qunar/im/ui/view/kpswitch/util/KeyboardUtil.java index 780e2f7..7309f2a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/kpswitch/util/KeyboardUtil.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/kpswitch/util/KeyboardUtil.java @@ -31,6 +31,7 @@ import android.view.inputmethod.InputMethodManager; import com.qunar.im.ui.R; +import com.qunar.im.ui.util.easyphoto.cameralibrary.util.ScreenUtils; import com.qunar.im.ui.view.kpswitch.IPanelHeightTarget; @@ -392,9 +393,9 @@ private void calculateKeyboardShowing(final int displayHeight) { } } else { - - final int phoneDisplayHeight = contentView.getResources() - .getDisplayMetrics().heightPixels; + //适配华为全面屏手机获取屏幕高度不对 +// final int phoneDisplayHeight = contentView.getResources().getDisplayMetrics().heightPixels; + final int phoneDisplayHeight = ScreenUtils.getFullActivityHeight(contentView.getContext()); if (!isTranslucentStatus && phoneDisplayHeight == actionBarOverlayLayoutHeight) { // no space to settle down the status bar, switch to fullscreen, diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/medias/play/PlayVoiceView.java b/imsdk/src/main/java/com/qunar/im/ui/view/medias/play/PlayVoiceView.java index 8a6a5ae..235c4d1 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/medias/play/PlayVoiceView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/medias/play/PlayVoiceView.java @@ -5,7 +5,7 @@ import android.media.MediaPlayer; import android.os.Handler; import android.os.Looper; -import android.support.v7.widget.AppCompatTextView; +import androidx.appcompat.widget.AppCompatTextView; import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseBuilder.java b/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseBuilder.java index 54bd94f..f0063b6 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseBuilder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseBuilder.java @@ -2,8 +2,8 @@ import android.content.Context; import android.graphics.Typeface; -import android.support.annotation.ColorRes; -import android.support.annotation.NonNull; +import androidx.annotation.ColorRes; +import androidx.annotation.NonNull; /** * Created by peng on 16-10-18. The Father Builder to the Progress diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseProgress.java b/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseProgress.java index ed0939e..9b3a257 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseProgress.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/progress/BaseProgress.java @@ -4,8 +4,8 @@ import android.graphics.*; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; -import android.support.annotation.ColorRes; -import android.support.annotation.NonNull; +import androidx.annotation.ColorRes; +import androidx.annotation.NonNull; import android.widget.ImageView; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.view.SimpleDraweeView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/progress/CircleProgress.java b/imsdk/src/main/java/com/qunar/im/ui/view/progress/CircleProgress.java index 428ffa7..2d6b9f2 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/progress/CircleProgress.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/progress/CircleProgress.java @@ -2,8 +2,8 @@ import android.content.Context; import android.graphics.*; -import android.support.annotation.ColorInt; -import android.support.annotation.ColorRes; +import androidx.annotation.ColorInt; +import androidx.annotation.ColorRes; /** * Created by peng on 16-10-18. The CircleProgress class extends BaseProgress diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyAdapter.java index 70b7c5f..a8b41b4 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyAdapter.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.quickreply; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import com.qunar.im.ui.R; import com.qunar.im.ui.view.recyclerview.BaseQuickAdapter; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyListView.java b/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyListView.java index 90baf41..9f79508 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyListView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyListView.java @@ -2,9 +2,10 @@ import android.content.Context; import android.graphics.Color; -import android.support.v4.view.ViewPager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager.widget.ViewPager; + import android.util.AttributeSet; import android.util.SparseArray; import android.view.Gravity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyViewpagerAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyViewpagerAdapter.java index f65e8dd..902a358 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyViewpagerAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/quickreply/QuickReplyViewpagerAdapter.java @@ -1,8 +1,9 @@ package com.qunar.im.ui.view.quickreply; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import android.view.View; import java.util.List; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recentView/GroupRender.java b/imsdk/src/main/java/com/qunar/im/ui/view/recentView/GroupRender.java index bb11f7c..a70c71b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recentView/GroupRender.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recentView/GroupRender.java @@ -10,10 +10,8 @@ import com.qunar.im.base.jsonbean.AtInfo; import com.qunar.im.base.util.ListUtil; import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.base.module.Nick; import com.qunar.im.base.module.RecentConversation; import com.qunar.im.base.structs.MessageStatus; -import com.qunar.im.core.manager.IMLogicManager; import java.util.List; import java.util.Map; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseItemDraggableAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseItemDraggableAdapter.java index 07cf641..166be21 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseItemDraggableAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseItemDraggableAdapter.java @@ -1,10 +1,10 @@ package com.qunar.im.ui.view.recyclerview; import android.graphics.Canvas; -import android.support.annotation.NonNull; -import android.support.v4.view.MotionEventCompat; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; +import androidx.annotation.NonNull; +import androidx.core.view.MotionEventCompat; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.ItemTouchHelper; import android.view.MotionEvent; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseMultiItemQuickAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseMultiItemQuickAdapter.java index c406d39..d4acb3e 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseMultiItemQuickAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseMultiItemQuickAdapter.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.recyclerview; -import android.support.annotation.IntRange; -import android.support.annotation.LayoutRes; +import androidx.annotation.IntRange; +import androidx.annotation.LayoutRes; import android.util.SparseIntArray; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseQuickAdapter.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseQuickAdapter.java index 854911a..5c9c4d7 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseQuickAdapter.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseQuickAdapter.java @@ -17,17 +17,17 @@ import android.animation.Animator; import android.content.Context; -import android.support.annotation.IdRes; -import android.support.annotation.IntDef; -import android.support.annotation.IntRange; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.LayoutParams; -import android.support.v7.widget.StaggeredGridLayoutManager; +import androidx.annotation.IdRes; +import androidx.annotation.IntDef; +import androidx.annotation.IntRange; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.LayoutParams; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseViewHolder.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseViewHolder.java index fb826ba..17e3cb6 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseViewHolder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/BaseViewHolder.java @@ -20,11 +20,11 @@ import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.DrawableRes; -import android.support.annotation.IdRes; -import android.support.annotation.StringRes; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.IdRes; +import androidx.annotation.StringRes; +import androidx.recyclerview.widget.RecyclerView; import android.text.util.Linkify; import android.util.SparseArray; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/callback/ItemDragAndSwipeCallback.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/callback/ItemDragAndSwipeCallback.java index 96adb52..e44b0a8 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/callback/ItemDragAndSwipeCallback.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/callback/ItemDragAndSwipeCallback.java @@ -1,8 +1,8 @@ package com.qunar.im.ui.view.recyclerview.callback; import android.graphics.Canvas; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.ItemTouchHelper; import android.view.View; import com.qunar.im.ui.R; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemDragListener.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemDragListener.java index ab26791..44c4bca 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemDragListener.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemDragListener.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.recyclerview.listener; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; /** * Created by luoxw on 2016/6/20. diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemSwipeListener.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemSwipeListener.java index f47ef8d..2ea0f0b 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemSwipeListener.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/OnItemSwipeListener.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.recyclerview.listener; import android.graphics.Canvas; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; /** * Created by luoxw on 2016/6/23. diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/SimpleClickListener.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/SimpleClickListener.java index fc009a4..1696039 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/SimpleClickListener.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/listener/SimpleClickListener.java @@ -1,8 +1,8 @@ package com.qunar.im.ui.view.recyclerview.listener; import android.os.Build; -import android.support.v4.view.GestureDetectorCompat; -import android.support.v7.widget.RecyclerView; +import androidx.core.view.GestureDetectorCompat; +import androidx.recyclerview.widget.RecyclerView; import android.view.GestureDetector; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/loadmore/LoadMoreView.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/loadmore/LoadMoreView.java index 7124a0b..9dcebf0 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/loadmore/LoadMoreView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/loadmore/LoadMoreView.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.recyclerview.loadmore; -import android.support.annotation.IdRes; -import android.support.annotation.LayoutRes; +import androidx.annotation.IdRes; +import androidx.annotation.LayoutRes; import com.qunar.im.ui.view.recyclerview.BaseViewHolder; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/util/MultiTypeDelegate.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/util/MultiTypeDelegate.java index 2d66ed2..1e4ed75 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/util/MultiTypeDelegate.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/util/MultiTypeDelegate.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.recyclerview.util; -import android.support.annotation.LayoutRes; +import androidx.annotation.LayoutRes; import android.util.SparseIntArray; import java.util.List; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/view/EmptyRecycleView.java b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/view/EmptyRecycleView.java index 0db4839..b4ff8cd 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/view/EmptyRecycleView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/recyclerview/view/EmptyRecycleView.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.recyclerview.view; import android.content.Context; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; import android.util.AttributeSet; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageSource.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageSource.java index aabb3e5..1b4e550 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageSource.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageSource.java @@ -3,7 +3,7 @@ import android.graphics.Bitmap; import android.graphics.Rect; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.File; import java.io.UnsupportedEncodingException; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageViewState.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageViewState.java index 3f482f8..f6721a0 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageViewState.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/ImageViewState.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.subscaleview; import android.graphics.PointF; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.Serializable; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/SubsamplingScaleImageView.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/SubsamplingScaleImageView.java index b7cf1fb..98ebee0 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/SubsamplingScaleImageView.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/SubsamplingScaleImageView.java @@ -15,14 +15,14 @@ import android.graphics.Rect; import android.graphics.RectF; import android.media.ExifInterface; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; -import android.support.annotation.AnyThread; -import android.support.annotation.NonNull; +import androidx.annotation.AnyThread; +import androidx.annotation.NonNull; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/CompatDecoderFactory.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/CompatDecoderFactory.java index 749b3f5..d5b3e33 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/CompatDecoderFactory.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/CompatDecoderFactory.java @@ -1,7 +1,7 @@ package com.qunar.im.ui.view.subscaleview.decoder; import android.graphics.Bitmap; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/DecoderFactory.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/DecoderFactory.java index c15cc86..849e68a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/DecoderFactory.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/DecoderFactory.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.subscaleview.decoder; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.lang.reflect.InvocationTargetException; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageDecoder.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageDecoder.java index eee537b..4b26479 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageDecoder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageDecoder.java @@ -3,7 +3,7 @@ import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; /** * Interface for image decoding classes, allowing the default {@link android.graphics.BitmapFactory} diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageRegionDecoder.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageRegionDecoder.java index 2a23447..c62ef00 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageRegionDecoder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/ImageRegionDecoder.java @@ -5,7 +5,7 @@ import android.graphics.Point; import android.graphics.Rect; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; /** * Interface for image decoding classes, allowing the default {@link android.graphics.BitmapRegionDecoder} diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageDecoder.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageDecoder.java index fa05bb0..589c814 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageDecoder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageDecoder.java @@ -7,9 +7,9 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; -import android.support.annotation.Keep; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.qunar.im.ui.view.subscaleview.SubsamplingScaleImageView; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageRegionDecoder.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageRegionDecoder.java index 1143e19..b5ecda5 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageRegionDecoder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaImageRegionDecoder.java @@ -8,9 +8,9 @@ import android.graphics.*; import android.net.Uri; import android.os.Build; -import android.support.annotation.Keep; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaPooledImageRegionDecoder.java b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaPooledImageRegionDecoder.java index efc433f..c0d688b 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaPooledImageRegionDecoder.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/subscaleview/decoder/SkiaPooledImageRegionDecoder.java @@ -14,9 +14,9 @@ import android.graphics.Rect; import android.net.Uri; import android.os.Build; -import android.support.annotation.Keep; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.Log; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/SwipeBackLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/SwipeBackLayout.java index 4eebf70..3b5b62e 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/SwipeBackLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/SwipeBackLayout.java @@ -6,7 +6,7 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.support.v4.view.ViewCompat; +import androidx.core.view.ViewCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/ViewDragHelper.java b/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/ViewDragHelper.java index 593c749..477eec1 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/ViewDragHelper.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/swipBackLayout/ViewDragHelper.java @@ -17,10 +17,10 @@ package com.qunar.im.ui.view.swipBackLayout; import android.content.Context; -import android.support.v4.view.MotionEventCompat; -import android.support.v4.view.VelocityTrackerCompat; -import android.support.v4.view.ViewCompat; -import android.support.v4.widget.ScrollerCompat; +import androidx.core.view.MotionEventCompat; +import androidx.core.view.VelocityTrackerCompat; +import androidx.core.view.ViewCompat; +import androidx.core.widget.ScrollerCompat; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/CommonTabLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/CommonTabLayout.java index 0689d3a..38cac96 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/CommonTabLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/CommonTabLayout.java @@ -12,8 +12,6 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.os.Parcelable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; import android.util.AttributeSet; import android.util.SparseArray; import android.util.TypedValue; @@ -27,6 +25,9 @@ import android.widget.TextView; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + import com.qunar.im.ui.R; import com.qunar.im.ui.view.IconView; import com.qunar.im.ui.view.tableLayout.listener.CustomTabEntity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SegmentTabLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SegmentTabLayout.java index 6a3a144..9a12a98 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SegmentTabLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SegmentTabLayout.java @@ -11,8 +11,6 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.os.Parcelable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; import android.util.AttributeSet; import android.util.SparseArray; import android.util.TypedValue; @@ -24,6 +22,9 @@ import android.widget.TextView; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; + import com.qunar.im.ui.R; import com.qunar.im.ui.view.tableLayout.listener.OnTabSelectListener; import com.qunar.im.ui.view.tableLayout.utils.FragmentChangeManager; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SlidingTabLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SlidingTabLayout.java index 0b53108..0a5c7ef 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SlidingTabLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/SlidingTabLayout.java @@ -10,12 +10,6 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.os.Parcelable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.SparseArray; import android.util.TypedValue; @@ -27,6 +21,13 @@ import android.widget.TextView; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.ui.R; import com.qunar.im.ui.view.tableLayout.listener.OnTabSelectListener; import com.qunar.im.ui.view.tableLayout.utils.UnreadMsgUtils; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/listener/CustomTabEntity.java b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/listener/CustomTabEntity.java index 2f9e0ab..80b2b9a 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/listener/CustomTabEntity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/listener/CustomTabEntity.java @@ -1,6 +1,6 @@ package com.qunar.im.ui.view.tableLayout.listener; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; public interface CustomTabEntity { String getTabTitle(); diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/utils/FragmentChangeManager.java b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/utils/FragmentChangeManager.java index c7779db..90a6a52 100755 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/utils/FragmentChangeManager.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tableLayout/utils/FragmentChangeManager.java @@ -1,8 +1,9 @@ package com.qunar.im.ui.view.tableLayout.utils; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import java.util.ArrayList; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tabview/MainTabProvider.java b/imsdk/src/main/java/com/qunar/im/ui/view/tabview/MainTabProvider.java index 76097fe..d878824 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tabview/MainTabProvider.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tabview/MainTabProvider.java @@ -1,10 +1,11 @@ package com.qunar.im.ui.view.tabview; -import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import androidx.viewpager.widget.PagerAdapter; + /** * Created by saber on 16-1-5. */ diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tabview/SmartTabLayout.java b/imsdk/src/main/java/com/qunar/im/ui/view/tabview/SmartTabLayout.java index 6412d2f..34c137b 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tabview/SmartTabLayout.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tabview/SmartTabLayout.java @@ -21,9 +21,6 @@ import android.content.res.TypedArray; import android.graphics.Typeface; import android.os.Build; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; @@ -35,6 +32,10 @@ import android.widget.LinearLayout; import android.widget.TextView; +import androidx.core.view.ViewCompat; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.qunar.im.ui.R; /** @@ -44,8 +45,8 @@ *

* To use the component, simply add it to your view hierarchy. Then in your * {@link android.app.Activity} or {@link android.app.Fragment}, {@link - * android.support.v4.app.Fragment} call - * {@link #setViewPager(android.support.v4.view.ViewPager)} providing it the ViewPager this layout + * Fragment} call + * {@link #setViewPager(ViewPager)} providing it the ViewPager this layout * is being used for. *

* The colors can be customized in two ways. The first and simplest is to provide an array of @@ -231,7 +232,7 @@ public void setCustomTabColorizer(TabColorizer tabColorizer) { /** * Set the color used for styling the tab text. This will need to be called prior to calling - * {@link #setViewPager(android.support.v4.view.ViewPager)} otherwise it will not get set + * {@link #setViewPager(ViewPager)} otherwise it will not get set * * @param color to use for tab text */ @@ -241,7 +242,7 @@ public void setDefaultTabTextColor(int color) { /** * Sets the colors used for styling the tab text. This will need to be called prior to calling - * {@link #setViewPager(android.support.v4.view.ViewPager)} otherwise it will not get set + * {@link #setViewPager(ViewPager)} otherwise it will not get set * * @param colors ColorStateList to use for tab text */ diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/tabview/Utils.java b/imsdk/src/main/java/com/qunar/im/ui/view/tabview/Utils.java index 84a87c6..94b592a 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/tabview/Utils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/tabview/Utils.java @@ -16,8 +16,8 @@ */ package com.qunar.im.ui.view.tabview; -import android.support.v4.view.MarginLayoutParamsCompat; -import android.support.v4.view.ViewCompat; +import androidx.core.view.MarginLayoutParamsCompat; +import androidx.core.view.ViewCompat; import android.view.View; import android.view.ViewGroup; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/zxing/activity/CaptureActivity.java b/imsdk/src/main/java/com/qunar/im/ui/view/zxing/activity/CaptureActivity.java index 91c0f81..733eece 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/zxing/activity/CaptureActivity.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/zxing/activity/CaptureActivity.java @@ -38,7 +38,6 @@ import com.qunar.im.ui.activity.IMBaseActivity; import com.qunar.im.ui.activity.NavConfigActivity; import com.qunar.im.ui.activity.PictureSelectorActivity; -import com.qunar.im.ui.activity.QTalkUserLoginActivity; import com.qunar.im.ui.imagepicker.ImagePicker; import com.qunar.im.base.module.ImageItem; import com.qunar.im.ui.imagepicker.ui.ImageGridActivity; diff --git a/imsdk/src/main/java/com/qunar/im/ui/view/zxing/encoding/EncodingUtils.java b/imsdk/src/main/java/com/qunar/im/ui/view/zxing/encoding/EncodingUtils.java index 46dd411..ae5f9fb 100644 --- a/imsdk/src/main/java/com/qunar/im/ui/view/zxing/encoding/EncodingUtils.java +++ b/imsdk/src/main/java/com/qunar/im/ui/view/zxing/encoding/EncodingUtils.java @@ -95,7 +95,7 @@ private static Bitmap addLogo(Bitmap src, Bitmap logo) { canvas.drawBitmap(src, 0, 0, null); canvas.scale(scaleFactor, scaleFactor, srcWidth / 2, srcHeight / 2); canvas.drawBitmap(logo, (srcWidth - logoWidth) / 2, (srcHeight - logoHeight) / 2, null); - canvas.save(Canvas.ALL_SAVE_FLAG); + canvas.save(); canvas.restore(); } catch (Exception e) { bitmap = null; diff --git a/imsdk/src/main/res/layout/activity_easy_photos.xml b/imsdk/src/main/res/layout/activity_easy_photos.xml index cf52b30..53e47a2 100755 --- a/imsdk/src/main/res/layout/activity_easy_photos.xml +++ b/imsdk/src/main/res/layout/activity_easy_photos.xml @@ -1,5 +1,5 @@ - - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/activity_puzzle_easy_photos.xml b/imsdk/src/main/res/layout/activity_puzzle_easy_photos.xml index 8e80f17..c38537d 100755 --- a/imsdk/src/main/res/layout/activity_puzzle_easy_photos.xml +++ b/imsdk/src/main/res/layout/activity_puzzle_easy_photos.xml @@ -88,7 +88,7 @@ - - - - - - - + diff --git a/imsdk/src/main/res/layout/activity_ui_myfiles_layout.xml b/imsdk/src/main/res/layout/activity_ui_myfiles_layout.xml index 23bdf18..9b4dc6d 100644 --- a/imsdk/src/main/res/layout/activity_ui_myfiles_layout.xml +++ b/imsdk/src/main/res/layout/activity_ui_myfiles_layout.xml @@ -8,7 +8,7 @@ android:id="@+id/my_action_bar" layout="@layout/atom_ui_layout_new_action_bar" /> - diff --git a/imsdk/src/main/res/layout/atom_ui_activity_chat_opration_panel.xml b/imsdk/src/main/res/layout/atom_ui_activity_chat_opration_panel.xml index 6d588cd..6c42317 100644 --- a/imsdk/src/main/res/layout/atom_ui_activity_chat_opration_panel.xml +++ b/imsdk/src/main/res/layout/atom_ui_activity_chat_opration_panel.xml @@ -7,7 +7,7 @@ android:layout_below="@id/edit_region" tools:showIn="@layout/atom_ui_activity_chat"> - diff --git a/imsdk/src/main/res/layout/atom_ui_activity_collection.xml b/imsdk/src/main/res/layout/atom_ui_activity_collection.xml index 275be4a..bcc43f1 100644 --- a/imsdk/src/main/res/layout/atom_ui_activity_collection.xml +++ b/imsdk/src/main/res/layout/atom_ui_activity_collection.xml @@ -13,7 +13,7 @@ layout="@layout/atom_ui_layout_new_action_bar" /> - diff --git a/imsdk/src/main/res/layout/atom_ui_activity_image_grid.xml b/imsdk/src/main/res/layout/atom_ui_activity_image_grid.xml index 21dd163..0eca9cc 100644 --- a/imsdk/src/main/res/layout/atom_ui_activity_image_grid.xml +++ b/imsdk/src/main/res/layout/atom_ui_activity_image_grid.xml @@ -14,7 +14,7 @@ android:layout_height="match_parent" android:background="#111111"> - - - - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/atom_ui_activity_recyclerview_layout.xml b/imsdk/src/main/res/layout/atom_ui_activity_recyclerview_layout.xml index 9f1435c..7a226f8 100644 --- a/imsdk/src/main/res/layout/atom_ui_activity_recyclerview_layout.xml +++ b/imsdk/src/main/res/layout/atom_ui_activity_recyclerview_layout.xml @@ -23,14 +23,14 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + - - - - - - - + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/atom_ui_self_work_world_activity.xml b/imsdk/src/main/res/layout/atom_ui_self_work_world_activity.xml index f013bfe..c1023dc 100644 --- a/imsdk/src/main/res/layout/atom_ui_self_work_world_activity.xml +++ b/imsdk/src/main/res/layout/atom_ui_self_work_world_activity.xml @@ -32,7 +32,7 @@ android:layout_height="0.5px"> - diff --git a/imsdk/src/main/res/layout/atom_ui_work_world_activity.xml b/imsdk/src/main/res/layout/atom_ui_work_world_activity.xml index a12bf29..2c3321a 100644 --- a/imsdk/src/main/res/layout/atom_ui_work_world_activity.xml +++ b/imsdk/src/main/res/layout/atom_ui_work_world_activity.xml @@ -14,20 +14,20 @@ android:layout_height="0.5dp" android:background="@color/translate"> - - - + - - - - + - + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/atom_ui_work_world_details_comment_item.xml b/imsdk/src/main/res/layout/atom_ui_work_world_details_comment_item.xml index deec393..e524d56 100644 --- a/imsdk/src/main/res/layout/atom_ui_work_world_details_comment_item.xml +++ b/imsdk/src/main/res/layout/atom_ui_work_world_details_comment_item.xml @@ -109,13 +109,13 @@ fresco:emojiconTextOverideTouch="true"/> - - + - - - + - - - + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/fragment_preview_easy_photos.xml b/imsdk/src/main/res/layout/fragment_preview_easy_photos.xml index 0ee8a7d..4683ede 100755 --- a/imsdk/src/main/res/layout/fragment_preview_easy_photos.xml +++ b/imsdk/src/main/res/layout/fragment_preview_easy_photos.xml @@ -3,7 +3,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - - - - - + - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/item_camera_easy_photos.xml b/imsdk/src/main/res/layout/item_camera_easy_photos.xml index 5f2802d..5678a13 100755 --- a/imsdk/src/main/res/layout/item_camera_easy_photos.xml +++ b/imsdk/src/main/res/layout/item_camera_easy_photos.xml @@ -1,5 +1,5 @@ - @@ -24,4 +24,4 @@ app:srcCompat="@drawable/ic_camera_easy_photos" /> - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/item_dialog_album_items_easy_photos.xml b/imsdk/src/main/res/layout/item_dialog_album_items_easy_photos.xml index 800dd2f..ef80903 100755 --- a/imsdk/src/main/res/layout/item_dialog_album_items_easy_photos.xml +++ b/imsdk/src/main/res/layout/item_dialog_album_items_easy_photos.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/item_puzzle_selector_easy_photos.xml b/imsdk/src/main/res/layout/item_puzzle_selector_easy_photos.xml index 117fdd8..3123350 100755 --- a/imsdk/src/main/res/layout/item_puzzle_selector_easy_photos.xml +++ b/imsdk/src/main/res/layout/item_puzzle_selector_easy_photos.xml @@ -1,5 +1,5 @@ - @@ -41,4 +41,4 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" /> - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/item_puzzle_selector_preview_easy_photos.xml b/imsdk/src/main/res/layout/item_puzzle_selector_preview_easy_photos.xml index 9a9a0bd..ad46c94 100755 --- a/imsdk/src/main/res/layout/item_puzzle_selector_preview_easy_photos.xml +++ b/imsdk/src/main/res/layout/item_puzzle_selector_preview_easy_photos.xml @@ -1,5 +1,5 @@ - @@ -49,4 +49,4 @@ android:layout_marginBottom="14dp" app:layout_constraintLeft_toLeftOf="parent"/> - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/layout/item_rv_photos_easy_photos.xml b/imsdk/src/main/res/layout/item_rv_photos_easy_photos.xml index 559b4a6..fd63fcb 100755 --- a/imsdk/src/main/res/layout/item_rv_photos_easy_photos.xml +++ b/imsdk/src/main/res/layout/item_rv_photos_easy_photos.xml @@ -1,5 +1,5 @@ - @@ -61,4 +61,4 @@ android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" /> - \ No newline at end of file + \ No newline at end of file diff --git a/imsdk/src/main/res/values/atom_ui_attrs.xml b/imsdk/src/main/res/values/atom_ui_attrs.xml index c2af297..4367f1a 100644 --- a/imsdk/src/main/res/values/atom_ui_attrs.xml +++ b/imsdk/src/main/res/values/atom_ui_attrs.xml @@ -437,4 +437,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib_common/build.gradle b/lib_common/build.gradle index e94508b..4dcd815 100644 --- a/lib_common/build.gradle +++ b/lib_common/build.gradle @@ -1,9 +1,6 @@ apply plugin: 'com.android.library' -apply plugin: 'maven' - android { compileSdkVersion project.compileSdkVersion as int -// buildToolsVersion '26.0.02' defaultConfig { minSdkVersion project.minSdkVersion as int @@ -37,11 +34,10 @@ repositories { } dependencies { - implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs') - api 'com.startalk.im:sdk-base:3.0.6' - api 'com.startalk.im:pay:15.6.5' - api 'com.android.support:appcompat-v7:27.1.0' - api 'com.android.support:support-v4:27.1.0' + implementation fileTree(include: ['*.jar'], dir: 'libs') + api 'com.startalk.im:sdk-base:3.0.7' + api 'com.startalk.im:pay:15.6.5' + api 'androidx.appcompat:appcompat:1.0.0' + api 'androidx.legacy:legacy-support-v4:1.0.0' } -//apply from: 'release.gradle' diff --git a/lib_common/src/main/java/com/qunar/im/auth/AccountDb.java b/lib_common/src/main/java/com/qunar/im/auth/AccountDb.java new file mode 100755 index 0000000..274a32c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/AccountDb.java @@ -0,0 +1,448 @@ +/* + * Copyright 2010 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import android.content.ContentValues; +import android.content.Context; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.database.DatabaseUtils; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; +import android.os.Process; +import android.util.Log; + +import com.qunar.im.auth.Base32String.DecodingException; +import com.qunar.im.auth.PasscodeGenerator.Signer; + +import java.io.IOException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Locale; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +/** + * A database of email addresses and secret values + * + * @author sweis@google.com (Steve Weis) + */ +public class AccountDb { + public static final Integer DEFAULT_HOTP_COUNTER = 0; + + public static final String GOOGLE_CORP_ACCOUNT_NAME = "Google Internal 2Factor"; + + private static final String ID_COLUMN = "_id"; + private static final String EMAIL_COLUMN = "email"; + private static final String SECRET_COLUMN = "secret"; + private static final String COUNTER_COLUMN = "counter"; + private static final String TYPE_COLUMN = "type"; + // @VisibleForTesting + static final String PROVIDER_COLUMN = "provider"; + // @VisibleForTesting + static final String TABLE_NAME = "accounts"; + // @VisibleForTesting + static final String PATH = "databases"; + + private static final String TABLE_INFO_COLUMN_NAME_COLUMN = "name"; + + private static final int PROVIDER_UNKNOWN = 0; + private static final int PROVIDER_GOOGLE = 1; + + // @VisibleForTesting + SQLiteDatabase mDatabase; + + private static final String LOCAL_TAG = "AccountDb"; + + /** + * Types of secret keys. + */ + public enum OtpType { // must be the same as in res/values/strings.xml:type + TOTP (0), // time based + HOTP (1); // counter based + + public final Integer value; // value as stored in SQLite database + OtpType(Integer value) { + this.value = value; + } + + public static OtpType getEnum(Integer i) { + for (OtpType type : OtpType.values()) { + if (type.value.equals(i)) { + return type; + } + } + + return null; + } + + } + + public AccountDb(Context context) { + mDatabase = openDatabase(context); + + // Create the table if it doesn't exist + mDatabase.execSQL(String.format( + "CREATE TABLE IF NOT EXISTS %s" + + " (%s INTEGER PRIMARY KEY, %s TEXT NOT NULL, %s TEXT NOT NULL, " + + " %s INTEGER DEFAULT %s, %s INTEGER, %s INTEGER DEFAULT %s)", + TABLE_NAME, ID_COLUMN, EMAIL_COLUMN, SECRET_COLUMN, COUNTER_COLUMN, + DEFAULT_HOTP_COUNTER, TYPE_COLUMN, + PROVIDER_COLUMN, PROVIDER_UNKNOWN)); + + Collection tableColumnNames = listTableColumnNamesLowerCase(); + if (!tableColumnNames.contains(PROVIDER_COLUMN.toLowerCase(Locale.US))) { + // Migrate from old schema where the PROVIDER_COLUMN wasn't there + mDatabase.execSQL(String.format( + "ALTER TABLE %s ADD COLUMN %s INTEGER DEFAULT %s", + TABLE_NAME, PROVIDER_COLUMN, PROVIDER_UNKNOWN)); + } + } + + /* + * Tries three times to open database before throwing AccountDbOpenException. + */ + private SQLiteDatabase openDatabase(Context context) { + for (int count = 0; true; count++) { + try { + return context.openOrCreateDatabase(PATH, Context.MODE_PRIVATE, null); + } catch (SQLiteException e) { + if (count < 2) { + continue; + } else { + throw new AccountDbOpenException("Failed to open AccountDb database in three tries.\n" + + getAccountDbOpenFailedErrorString(context), e); + } + } + } + } + + private String getAccountDbOpenFailedErrorString(Context context) { + String dataPackageDir = context.getApplicationInfo().dataDir; + String databaseDirPathname = context.getDatabasePath(PATH).getParent(); + String databasePathname = context.getDatabasePath(PATH).getAbsolutePath(); + String[] dirsToStat = new String[] {dataPackageDir, databaseDirPathname, databasePathname}; + StringBuilder error = new StringBuilder(); + int myUid = Process.myUid(); + for (String directory : dirsToStat) { + try { + FileUtilities.StatStruct stat = FileUtilities.getStat(directory); + String ownerUidName = null; + try { + if (stat.uid == 0) { + ownerUidName = "root"; + } else { + PackageManager packageManager = context.getPackageManager(); + ownerUidName = (packageManager != null) ? packageManager.getNameForUid(stat.uid) : null; + } + } catch (Exception e) { + ownerUidName = e.toString(); + } + error.append(directory + " directory stat (my UID: " + myUid); + if (ownerUidName == null) { + error.append("): "); + } else { + error.append(", dir owner UID name: " + ownerUidName + "): "); + } + error.append(stat.toString() + "\n"); + } catch (IOException e) { + error.append(directory + " directory stat threw an exception: " + e + "\n"); + } + } + return error.toString(); + } + + /** + * Closes this database and releases any system resources held. + */ + public void close() { + mDatabase.close(); + } + + /** + * Lists the names of all the columns in the specified table. + */ + // @VisibleForTesting + static Collection listTableColumnNamesLowerCase( + SQLiteDatabase database, String tableName) { + Cursor cursor = + database.rawQuery(String.format("PRAGMA table_info(%s)", tableName), new String[0]); + Collection result = new ArrayList(); + try { + if (cursor != null) { + int nameColumnIndex = cursor.getColumnIndexOrThrow(TABLE_INFO_COLUMN_NAME_COLUMN); + while (cursor.moveToNext()) { + result.add(cursor.getString(nameColumnIndex).toLowerCase(Locale.US)); + } + } + return result; + } finally { + tryCloseCursor(cursor); + } + } + + /** + * Lists the names of all the columns in the accounts table. + */ + private Collection listTableColumnNamesLowerCase() { + return listTableColumnNamesLowerCase(mDatabase, TABLE_NAME); + } + + /* + * deleteAllData() will remove all rows. Useful for testing. + */ + public boolean deleteAllData() { + mDatabase.delete(AccountDb.TABLE_NAME, null, null); + return true; + } + + public boolean nameExists(String email) { + Cursor cursor = getAccount(email); + try { + return !cursorIsEmpty(cursor); + } finally { + tryCloseCursor(cursor); + } + } + + public String getSecret(String email) { + Cursor cursor = getAccount(email); + try { + if (!cursorIsEmpty(cursor)) { + cursor.moveToFirst(); + return cursor.getString(cursor.getColumnIndex(SECRET_COLUMN)); + } + } finally { + tryCloseCursor(cursor); + } + return null; + } + + static Signer getSigningOracle(String secret) { + try { + byte[] keyBytes = decodeKey(secret); + final Mac mac = Mac.getInstance("HMACSHA1"); + mac.init(new SecretKeySpec(keyBytes, "")); + + // Create a signer object out of the standard Java MAC implementation. + return new Signer() { + @Override + public byte[] sign(byte[] data) { + return mac.doFinal(data); + } + }; + } catch (DecodingException error) { + Log.e(LOCAL_TAG, error.getMessage()); + } catch (NoSuchAlgorithmException error) { + Log.e(LOCAL_TAG, error.getMessage()); + } catch (InvalidKeyException error) { + Log.e(LOCAL_TAG, error.getMessage()); + } + + return null; + } + + private static byte[] decodeKey(String secret) throws DecodingException { + return Base32String.decode(secret); + } + + public Integer getCounter(String email) { + Cursor cursor = getAccount(email); + try { + if (!cursorIsEmpty(cursor)) { + cursor.moveToFirst(); + return cursor.getInt(cursor.getColumnIndex(COUNTER_COLUMN)); + } + } finally { + tryCloseCursor(cursor); + } + return null; + } + + void incrementCounter(String email) { + ContentValues values = new ContentValues(); + values.put(EMAIL_COLUMN, email); + Integer counter = getCounter(email); + values.put(COUNTER_COLUMN, counter + 1); + mDatabase.update(TABLE_NAME, values, whereClause(email), null); + } + + public OtpType getType(String email) { + Cursor cursor = getAccount(email); + try { + if (!cursorIsEmpty(cursor)) { + cursor.moveToFirst(); + Integer value = cursor.getInt(cursor.getColumnIndex(TYPE_COLUMN)); + return OtpType.getEnum(value); + } + } finally { + tryCloseCursor(cursor); + } + return null; + } + + void setType(String email, OtpType type) { + ContentValues values = new ContentValues(); + values.put(EMAIL_COLUMN, email); + values.put(TYPE_COLUMN, type.value); + mDatabase.update(TABLE_NAME, values, whereClause(email), null); + } + + public boolean isGoogleAccount(String email) { + Cursor cursor = getAccount(email); + try { + if (!cursorIsEmpty(cursor)) { + cursor.moveToFirst(); + if (cursor.getInt(cursor.getColumnIndex(PROVIDER_COLUMN)) == PROVIDER_GOOGLE) { + // The account is marked as source: Google + return true; + } + // The account is from an unknown source. Could be a Google account added by scanning + // a QR code or by manually entering a key + String emailLowerCase = email.toLowerCase(Locale.US); + return(emailLowerCase.endsWith("@gmail.com")) + || (emailLowerCase.endsWith("@google.com")) + || (email.equals(GOOGLE_CORP_ACCOUNT_NAME)); + } + } finally { + tryCloseCursor(cursor); + } + return false; + } + + /** + * Finds the Google corp account in this database. + * + * @return the name of the account if it is present or {@code null} if the account does not exist. + */ + public String findGoogleCorpAccount() { + return nameExists(GOOGLE_CORP_ACCOUNT_NAME) ? GOOGLE_CORP_ACCOUNT_NAME : null; + } + + private static String whereClause(String email) { + return EMAIL_COLUMN + " = " + DatabaseUtils.sqlEscapeString(email); + } + + public void delete(String email) { + mDatabase.delete(TABLE_NAME, whereClause(email), null); + } + + /** + * Save key to database, creating a new user entry if necessary. + * @param email the user email address. When editing, the new user email. + * @param secret the secret key. + * @param oldEmail If editing, the original user email, otherwise null. + * @param type hotp vs totp + * @param counter only important for the hotp type + */ + public void update(String email, String secret, String oldEmail, + OtpType type, Integer counter) { + update(email, secret, oldEmail, type, counter, null); + } + + /** + * Save key to database, creating a new user entry if necessary. + * @param email the user email address. When editing, the new user email. + * @param secret the secret key. + * @param oldEmail If editing, the original user email, otherwise null. + * @param type hotp vs totp + * @param counter only important for the hotp type + * @param googleAccount whether the key is for a Google account or {@code null} to preserve + * the previous value (or use a default if adding a key). + */ + public void update(String email, String secret, String oldEmail, + OtpType type, Integer counter, Boolean googleAccount) { + ContentValues values = new ContentValues(); + values.put(EMAIL_COLUMN, email); + values.put(SECRET_COLUMN, secret); + values.put(TYPE_COLUMN, type.ordinal()); + values.put(COUNTER_COLUMN, counter); + if (googleAccount != null) { + values.put( + PROVIDER_COLUMN, + (googleAccount.booleanValue()) ? PROVIDER_GOOGLE : PROVIDER_UNKNOWN); + } + int updated = mDatabase.update(TABLE_NAME, values, + whereClause(oldEmail), null); + if (updated == 0) { + mDatabase.insert(TABLE_NAME, null, values); + } + } + + private Cursor getNames() { + return mDatabase.query(TABLE_NAME, null, null, null, null, null, null, null); + } + + private Cursor getAccount(String email) { + return mDatabase.query(TABLE_NAME, null, EMAIL_COLUMN + "= ?", + new String[] {email}, null, null, null); + } + + /** + * Returns true if the cursor is null, or contains no rows. + */ + private static boolean cursorIsEmpty(Cursor c) { + return c == null || c.getCount() == 0; + } + + /** + * Closes the cursor if it is not null and not closed. + */ + private static void tryCloseCursor(Cursor c) { + if (c != null && !c.isClosed()) { + c.close(); + } + } + + /** + * Get list of all account names. + * @param result Collection of strings-- account names are appended, without + * clearing this collection on entry. + * @return Number of accounts added to the output parameter. + */ + public int getNames(Collection result) { + Cursor cursor = getNames(); + + try { + if (cursorIsEmpty(cursor)) + return 0; + + int nameCount = cursor.getCount(); + int index = cursor.getColumnIndex(AccountDb.EMAIL_COLUMN); + + for (int i = 0; i < nameCount; ++i) { + cursor.moveToPosition(i); + String username = cursor.getString(index); + result.add(username); + } + + return nameCount; + } finally { + tryCloseCursor(cursor); + } + } + + private static class AccountDbOpenException extends RuntimeException { + public AccountDbOpenException(String message, Exception e) { + super(message, e); + } + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/Base32String.java b/lib_common/src/main/java/com/qunar/im/auth/Base32String.java new file mode 100755 index 0000000..9549ffe --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/Base32String.java @@ -0,0 +1,161 @@ +/* + * Copyright 2009 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import java.util.HashMap; +import java.util.Locale; + +/** + * Encodes arbitrary byte arrays as case-insensitive base-32 strings. + *

+ * The implementation is slightly different than in RFC 4648. During encoding, + * padding is not added, and during decoding the last incomplete chunk is not + * taken into account. The result is that multiple strings decode to the same + * byte array, for example, string of sixteen 7s ("7...7") and seventeen 7s both + * decode to the same byte array. + * TODO(sarvar): Revisit this encoding and whether this ambiguity needs fixing. + * + * @author sweis@google.com (Steve Weis) + * @author Neal Gafter + */ +public class Base32String { + // singleton + + private static final Base32String INSTANCE = + new Base32String("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"); // RFC 4648/3548 + + static Base32String getInstance() { + return INSTANCE; + } + + // 32 alpha-numeric characters. + private String ALPHABET; + private char[] DIGITS; + private int MASK; + private int SHIFT; + private HashMap CHAR_MAP; + + static final String SEPARATOR = "-"; + + protected Base32String(String alphabet) { + this.ALPHABET = alphabet; + DIGITS = ALPHABET.toCharArray(); + MASK = DIGITS.length - 1; + SHIFT = Integer.numberOfTrailingZeros(DIGITS.length); + CHAR_MAP = new HashMap(); + for (int i = 0; i < DIGITS.length; i++) { + CHAR_MAP.put(DIGITS[i], i); + } + } + + public static byte[] decode(String encoded) throws DecodingException { + return getInstance().decodeInternal(encoded); + } + + protected byte[] decodeInternal(String encoded) throws DecodingException { + // Remove whitespace and separators + encoded = encoded.trim().replaceAll(SEPARATOR, "").replaceAll(" ", ""); + + // Remove padding. Note: the padding is used as hint to determine how many + // bits to decode from the last incomplete chunk (which is commented out + // below, so this may have been wrong to start with). + encoded = encoded.replaceFirst("[=]*$", ""); + + // Canonicalize to all upper case + encoded = encoded.toUpperCase(Locale.US); + if (encoded.length() == 0) { + return new byte[0]; + } + int encodedLength = encoded.length(); + int outLength = encodedLength * SHIFT / 8; + byte[] result = new byte[outLength]; + int buffer = 0; + int next = 0; + int bitsLeft = 0; + for (char c : encoded.toCharArray()) { + if (!CHAR_MAP.containsKey(c)) { + throw new DecodingException("Illegal character: " + c); + } + buffer <<= SHIFT; + buffer |= CHAR_MAP.get(c) & MASK; + bitsLeft += SHIFT; + if (bitsLeft >= 8) { + result[next++] = (byte) (buffer >> (bitsLeft - 8)); + bitsLeft -= 8; + } + } + // We'll ignore leftover bits for now. + // + // if (next != outLength || bitsLeft >= SHIFT) { + // throw new DecodingException("Bits left: " + bitsLeft); + // } + return result; + } + + public static String encode(byte[] data) { + return getInstance().encodeInternal(data); + } + + protected String encodeInternal(byte[] data) { + if (data.length == 0) { + return ""; + } + + // SHIFT is the number of bits per output character, so the length of the + // output is the length of the input multiplied by 8/SHIFT, rounded up. + if (data.length >= (1 << 28)) { + // The computation below will fail, so don't do it. + throw new IllegalArgumentException(); + } + + int outputLength = (data.length * 8 + SHIFT - 1) / SHIFT; + StringBuilder result = new StringBuilder(outputLength); + + int buffer = data[0]; + int next = 1; + int bitsLeft = 8; + while (bitsLeft > 0 || next < data.length) { + if (bitsLeft < SHIFT) { + if (next < data.length) { + buffer <<= 8; + buffer |= (data[next++] & 0xff); + bitsLeft += 8; + } else { + int pad = SHIFT - bitsLeft; + buffer <<= pad; + bitsLeft += pad; + } + } + int index = MASK & (buffer >> (bitsLeft - SHIFT)); + bitsLeft -= SHIFT; + result.append(DIGITS[index]); + } + return result.toString(); + } + + @Override + // enforce that this class is a singleton + public Object clone() throws CloneNotSupportedException { + throw new CloneNotSupportedException(); + } + + public static class DecodingException extends Exception { + public DecodingException(String message) { + super(message); + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/FileUtilities.java b/lib_common/src/main/java/com/qunar/im/auth/FileUtilities.java new file mode 100755 index 0000000..00e1653 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/FileUtilities.java @@ -0,0 +1,126 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import java.io.IOException; + +/** + * A class for handling file system related methods, such as setting permissions. + * + * @author sarvar@google.com (Sarvar Patel) + */ +public class FileUtilities { + + /** Hidden constructor to prevent instantiation. */ + private FileUtilities() { } + + /** + * Restricts the file permissions of the provided path so that only the owner (UID) + * can access it. + */ + public static void restrictAccessToOwnerOnly(String path) throws IOException { + // IMPLEMENTATION NOTE: The code below simply invokes the hidden API + // android.os.FileUtils.setPermissions(path, 0700, -1, -1) via Reflection. + + int errorCode; + try { + errorCode = (Integer) Class.forName("android.os.FileUtils") + .getMethod("setPermissions", String.class, int.class, int.class, int.class) + .invoke(null, path, 0700, -1, -1); + } catch (Exception e) { + // Can't chain exception because IOException doesn't have the right constructor on Froyo + // and below + throw new IOException("Failed to set permissions: " + e); + } + if (errorCode != 0) { + throw new IOException("FileUtils.setPermissions failed with error code " + errorCode); + } + } + + /* + * Uses reflection to call android.os.FileUtils.getFileStatus(path) which returns FileStatus. + */ + public static StatStruct getStat(String path) throws IOException { + boolean success; + + try { + Object obj = Class.forName("android.os.FileUtils$FileStatus").newInstance(); + success = (Boolean) Class.forName("android.os.FileUtils") + .getMethod("getFileStatus", String.class, + Class.forName("android.os.FileUtils$FileStatus")) + .invoke(null, path, obj); + if (success) { + StatStruct stat = new StatStruct(); + stat.dev = getFileStatusInt(obj, "dev"); + stat.ino = getFileStatusInt(obj, "ino"); + stat.mode = getFileStatusInt(obj, "mode"); + stat.nlink = getFileStatusInt(obj, "nlink"); + stat.uid = getFileStatusInt(obj, "uid"); + stat.gid = getFileStatusInt(obj, "gid"); + stat.rdev = getFileStatusInt(obj, "rdev"); + stat.size = getFileStatusLong(obj, "size"); + stat.blksize = getFileStatusInt(obj, "blksize"); + stat.blocks = getFileStatusLong(obj, "blocks"); + stat.atime = getFileStatusLong(obj, "atime"); + stat.mtime = getFileStatusLong(obj, "mtime"); + stat.ctime = getFileStatusLong(obj, "ctime"); + return stat; + } else { + throw new IOException("FileUtils.getFileStatus returned with failure."); + } + } catch (Exception e) { + // Can't chain exception because IOException doesn't have the right constructor on Froyo + // and below + throw new IOException("Failed to get FileStatus: " + e); + } + } + + private static int getFileStatusInt(Object obj, String field) throws IllegalArgumentException, + IllegalAccessException, NoSuchFieldException, ClassNotFoundException { + return Class.forName("android.os.FileUtils$FileStatus").getField(field).getInt(obj); + } + + private static long getFileStatusLong(Object obj, String field) throws IllegalArgumentException, + IllegalAccessException, NoSuchFieldException, ClassNotFoundException { + return Class.forName("android.os.FileUtils$FileStatus").getField(field).getLong(obj); + } + + public static class StatStruct { + public int dev; + public int ino; + public int mode; + public int nlink; + public int uid; + public int gid; + public int rdev; + public long size; + public int blksize; + public long blocks; + public long atime; + public long mtime; + public long ctime; + + @Override + public String toString() { + return new String(String.format("StatStruct{ dev: %d, ino: %d, mode: %o (octal), nlink: %d, " + + "uid: %d, gid: %d, rdev: %d, size: %d, blksize: %d, blocks: %d, atime: %d, mtime: %d, " + + "ctime: %d }\n", + dev, ino, mode, nlink, uid, gid, rdev, size, blksize, blocks, atime, mtime, ctime)); + } + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/GoogleAuthenticatorConfig.java b/lib_common/src/main/java/com/qunar/im/auth/GoogleAuthenticatorConfig.java new file mode 100644 index 0000000..e315ad1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/GoogleAuthenticatorConfig.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2014-2017 Enrico M. Crisostomo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the author nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.qunar.im.auth; + + +import java.util.concurrent.TimeUnit; + +public class GoogleAuthenticatorConfig +{ + private long timeStepSizeInMillis = TimeUnit.SECONDS.toMillis(30); + private int windowSize = 3; + private int codeDigits = 6; + private int keyModulus = (int) Math.pow(10, codeDigits); + private KeyRepresentation keyRepresentation = KeyRepresentation.BASE32; + private HmacHashFunction hmacHashFunction = HmacHashFunction.HmacSHA1; + + /** + * Returns the key module. + * + * @return the key module. + */ + public int getKeyModulus() + { + return keyModulus; + } + + /** + * Returns the key representation. + * + * @return the key representation. + */ + public KeyRepresentation getKeyRepresentation() + { + return keyRepresentation; + } + + /** + * Returns the number of digits in the generated code. + * + * @return the number of digits in the generated code. + */ + @SuppressWarnings("UnusedDeclaration") + public int getCodeDigits() + { + return codeDigits; + } + + /** + * Returns the time step size, in milliseconds, as specified by RFC 6238. + * The default value is 30.000. + * + * @return the time step size in milliseconds. + */ + public long getTimeStepSizeInMillis() + { + return timeStepSizeInMillis; + } + + /** + * Returns an integer value representing the number of windows of size + * timeStepSizeInMillis that are checked during the validation process, + * to account for differences between the server and the client clocks. + * The bigger the window, the more tolerant the library code is about + * clock skews. + *

+ * We are using Google's default behaviour of using a window size equal + * to 3. The limit on the maximum window size, present in older + * versions of this library, has been removed. + * + * @return the window size. + * @see #timeStepSizeInMillis + */ + public int getWindowSize() + { + return windowSize; + } + + /** + * Returns the cryptographic hash function used to calculate the HMAC (Hash-based + * Message Authentication Code). This implementation uses the SHA1 hash + * function by default. + *

+ * + * @return the HMAC hash function. + */ + public HmacHashFunction getHmacHashFunction() + { + return hmacHashFunction; + } + + public static class GoogleAuthenticatorConfigBuilder + { + private GoogleAuthenticatorConfig config = new GoogleAuthenticatorConfig(); + + public GoogleAuthenticatorConfig build() + { + return config; + } + + public GoogleAuthenticatorConfigBuilder setCodeDigits(int codeDigits) + { + if (codeDigits <= 0) + { + throw new IllegalArgumentException("Code digits must be positive."); + } + + if (codeDigits < 6) + { + throw new IllegalArgumentException("The minimum number of digits is 6."); + } + + if (codeDigits > 8) + { + throw new IllegalArgumentException("The maximum number of digits is 8."); + } + + config.codeDigits = codeDigits; + config.keyModulus = (int) Math.pow(10, codeDigits); + return this; + } + + public GoogleAuthenticatorConfigBuilder setTimeStepSizeInMillis(long timeStepSizeInMillis) + { + if (timeStepSizeInMillis <= 0) + { + throw new IllegalArgumentException("Time step size must be positive."); + } + + config.timeStepSizeInMillis = timeStepSizeInMillis; + return this; + } + + public GoogleAuthenticatorConfigBuilder setWindowSize(int windowSize) + { + if (windowSize <= 0) + { + throw new IllegalArgumentException("Window number must be positive."); + } + + config.windowSize = windowSize; + return this; + } + + public GoogleAuthenticatorConfigBuilder setKeyRepresentation(KeyRepresentation keyRepresentation) + { + if (keyRepresentation == null) + { + throw new IllegalArgumentException("Key representation cannot be null."); + } + + config.keyRepresentation = keyRepresentation; + return this; + } + + public GoogleAuthenticatorConfigBuilder setHmacHashFunction(HmacHashFunction hmacHashFunction) + { + if (hmacHashFunction == null) + { + throw new IllegalArgumentException("HMAC Hash Function cannot be null."); + } + + config.hmacHashFunction = hmacHashFunction; + return this; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/HmacHashFunction.java b/lib_common/src/main/java/com/qunar/im/auth/HmacHashFunction.java new file mode 100644 index 0000000..2c27d4c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/HmacHashFunction.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014-2017 Enrico M. Crisostomo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the author nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.qunar.im.auth; + +public enum HmacHashFunction { + HmacSHA1, + HmacSHA256, + HmacSHA512 +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/KeyRepresentation.java b/lib_common/src/main/java/com/qunar/im/auth/KeyRepresentation.java new file mode 100644 index 0000000..040f099 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/KeyRepresentation.java @@ -0,0 +1,6 @@ +package com.qunar.im.auth; + +public enum KeyRepresentation { + BASE32, + BASE64 +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/OptionalFeatures.java b/lib_common/src/main/java/com/qunar/im/auth/OptionalFeatures.java new file mode 100755 index 0000000..b71bacd --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/OptionalFeatures.java @@ -0,0 +1,94 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import android.content.Context; +import android.content.SharedPreferences; +import android.net.Uri; + +/** + * Interface for providing functionality not available in Market builds without having to modify + * the codebase shared between the Market and non-Market builds. + * + * @author klyubin@google.com (Alex Klyubin) + */ +public interface OptionalFeatures { +// +// /** +// * Invoked when the {@link AuthenticatorActivity} {@code onCreate} is almost done. +// */ +// void onAuthenticatorActivityCreated(AuthenticatorActivity activity); +// +// /** +// * Invoked when the {@link AuthenticatorActivity} saves an account/seed. +// */ +// void onAuthenticatorActivityAccountSaved(Context context, String account); +// +// /** +// * Creates the {@link OtpSource} instance used for OTP generation by the app. +// */ +// OtpSource createOtpSource(AccountDb accountDb, TotpClock totpClock); +// +// /** +// * Invoked when a HOTP OTP could not be generated by {@link AuthenticatorActivity} +// * for the provided account. +// */ +// void onAuthenticatorActivityGetNextOtpFailed( +// AuthenticatorActivity activity, String accountName, OtpSourceException exception); +// +// /** +// * Invoked by {@link AuthenticatorActivity#onCreateDialog(int)} for dialog IDs not directly +// * handled by the {@link AuthenticatorActivity} class. +// * +// * @return dialog or {@code null} for the default behavior. +// */ +// Dialog onAuthenticatorActivityCreateDialog(AuthenticatorActivity activity, int id); +// +// /** +// * Invoked when {@link AuthenticatorActivity} was asked to initiate the Add Account flow. +// */ +// void onAuthenticatorActivityAddAccount(AuthenticatorActivity activity); + + /** + * Invoked when a URI has been scanned. + * + * @return {@code true} if the URI has been consumed by these optional features, {@code false} + * otherwise. + */ + boolean interpretScanResult(Context context, Uri scanResult); + + /** + * Invoked when data have been successfully imported from the old Authenticator app. + */ + void onDataImportedFromOldApp(Context context); + + /** + * Gets the {@link SharedPreferences} into which to import preferences from the old Authenticator + * app. + * + * @return preferences or {@code null} to skip the importing of preferences. + */ + SharedPreferences getSharedPreferencesForDataImportFromOldApp(Context context); + + /** + * Appends the Learn more link to data import dialog text. + * + * @return text with the link. + */ + String appendDataImportLearnMoreLink(Context context, String text); + +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/OtpProvider.java b/lib_common/src/main/java/com/qunar/im/auth/OtpProvider.java new file mode 100755 index 0000000..fa539fe --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/OtpProvider.java @@ -0,0 +1,188 @@ +/* + * Copyright 2010 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Collection; +import java.util.concurrent.TimeUnit; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +/** + * Class containing implementation of HOTP/TOTP. + * Generates OTP codes for one or more accounts. + * + * @author Steve Weis (sweis@google.com) + * @author Cem Paya (cemp@google.com) + */ +public class OtpProvider implements OtpSource { + + private static final int PIN_LENGTH = 6; // HOTP or TOTP + private static final int REFLECTIVE_PIN_LENGTH = 9; // ROTP + + @Override + public int enumerateAccounts(Collection result) { +// return mAccountDb.getNames(result); + return 0; + } + + @Override + public String getNextCode(String accountName) throws OtpSourceException { + return getCurrentCode(accountName, null); + } + + // This variant is used when an additional challenge, such as URL or + // transaction details, are included in the OTP request. + // The additional string is appended to standard HOTP/TOTP state before + // applying the MAC function. + @Override + public String respondToChallenge(String accountName, String challenge) throws OtpSourceException { + if (challenge == null) { + return getCurrentCode(accountName, null); + } + try { + byte[] challengeBytes = challenge.getBytes("UTF-8"); + return getCurrentCode(accountName, challengeBytes); + } catch (UnsupportedEncodingException e) { + return ""; + } + } + + @Override + public TotpCounter getTotpCounter() { + return mTotpCounter; + } + + @Override + public TotpClock getTotpClock() { +// return mTotpClock; + return null; + } + + private String getCurrentCode(String username, byte[] challenge) throws OtpSourceException { +// // Account name is required. +// if (username == null) { +// throw new OtpSourceException("No account name"); +// } +// +// OtpType type = mAccountDb.getType(username); +// String secret = getSecret(username); +// +// long otp_state = 0; +// +// if (type == OtpType.TOTP) { +// // For time-based OTP, the state is derived from clock. +// otp_state = +// mTotpCounter.getValueAtTime(Utilities.millisToSeconds(mTotpClock.currentTimeMillis())); +// } else if (type == OtpType.HOTP){ +// // For counter-based OTP, the state is obtained by incrementing stored counter. +// mAccountDb.incrementCounter(username); +// Integer counter = mAccountDb.getCounter(username); +// otp_state = counter.longValue(); +// } +// +// return computePin(secret, otp_state, challenge); + return ""; + } + + public OtpProvider() { + mTotpCounter = new TotpCounter(DEFAULT_INTERVAL); + } + + public OtpProvider(int interval, AccountDb accountDb, TotpClock totpClock) { +// mAccountDb = accountDb; + mTotpCounter = new TotpCounter(interval); +// mTotpClock = totpClock; + } + + /** + * Computes the one-time PIN given the secret key. + * + * @param secret the secret key + * @param otp_state current token state (counter or time-interval) + * @param challenge optional challenge bytes to include when computing passcode. + * @return the PIN + */ + public String computePin(String secret, long otp_state, byte[] challenge) + throws OtpSourceException,Exception { + if (secret == null || secret.length() == 0) { + throw new OtpSourceException("Null or empty secret"); + } + + try { + long state = otp_state / mTotpCounter.getTimeStep(); +// Signer signer = AccountDb.getSigningOracle(secret); + PasscodeGenerator.Signer signer = getSigner(secret); + PasscodeGenerator pcg = new PasscodeGenerator(signer, + (challenge == null) ? PIN_LENGTH : REFLECTIVE_PIN_LENGTH); + + return (challenge == null) ? + pcg.generateResponseCode(state) : + pcg.generateResponseCode(state, challenge); + } catch (GeneralSecurityException e) { + throw new OtpSourceException("Crypto failure", e); + } catch (Exception e) { + throw e; + } + } + + private GoogleAuthenticatorConfig config; + + private PasscodeGenerator.Signer getSigner(String key) throws NoSuchAlgorithmException, InvalidKeyException { + GoogleAuthenticatorConfig.GoogleAuthenticatorConfigBuilder cb + = new GoogleAuthenticatorConfig.GoogleAuthenticatorConfigBuilder(); + cb.setCodeDigits(PIN_LENGTH).setTimeStepSizeInMillis(TimeUnit.SECONDS.toMillis(mTotpCounter.getTimeStep())); + config = cb.build(); + SecretKeySpec signKey = new SecretKeySpec(key.getBytes(), config.getHmacHashFunction().toString()); + final Mac mac = Mac.getInstance(config.getHmacHashFunction().toString()); + mac.init(signKey); + return new PasscodeGenerator.Signer() { + @Override + public byte[] sign(byte[] data) throws GeneralSecurityException { + return mac.doFinal(data); + } + }; + } + + /** + * Reads the secret key that was saved on the phone. + * @param user Account name identifying the user. + * @return the secret key as base32 encoded string. + */ +// String getSecret(String user) { +// return mAccountDb.getSecret(user); +// } + + /** + * Default passcode timeout period (in seconds) + */ + public static final int DEFAULT_INTERVAL = 30; + +// private final AccountDb mAccountDb; + + /** + * Counter for time-based OTPs (TOTP). + */ + private final TotpCounter mTotpCounter; + + /** Clock input for time-based OTPs (TOTP). */ +// private final TotpClock mTotpClock; +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/OtpSource.java b/lib_common/src/main/java/com/qunar/im/auth/OtpSource.java new file mode 100755 index 0000000..22ffa6f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/OtpSource.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import java.util.Collection; + +/** + * Abstraction for collection of OTP tokens. + * + * @author cemp@google.com (Cem Paya) + */ +public interface OtpSource { + + /** + * Enumerate list of accounts that this OTP token supports. + * + * @param result Collection to append usernames. This object is NOT cleared on + * entry; if there are existing items, they will not be removed. + * @return Number of accounts added to the collection. + */ + int enumerateAccounts(Collection result); + + /** + * Return the next OTP code for specified username. + * Invoking this function may change internal state of the OTP generator, + * for example advancing the counter. + * + * @param accountName Username, email address or other unique identifier for the account. + * @return OTP as string code. + */ + String getNextCode(String accountName) throws OtpSourceException; + + /** + * Generate response to a given challenge based on next OTP code. + * Subclasses are not required to implement this method. + * + * @param accountName Username, email address or other unique identifier for the account. + * @param challenge Server specified challenge as UTF8 string. + * @return Response to the challenge. + * @throws UnsupportedOperationException if the token does not support + * challenge-response extension for this account. + */ + String respondToChallenge(String accountName, String challenge) throws OtpSourceException; + + /** + * Gets the counter for generating or verifying TOTP codes. + */ + TotpCounter getTotpCounter(); + + /** + * Gets the clock for generating or verifying TOTP codes. + */ + TotpClock getTotpClock(); +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/OtpSourceException.java b/lib_common/src/main/java/com/qunar/im/auth/OtpSourceException.java new file mode 100755 index 0000000..e8989ca --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/OtpSourceException.java @@ -0,0 +1,32 @@ +/* + * Copyright 2012 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +/** + * Indicates that {@link OtpSource} failed to performed the requested operation. + * + * @author klyubin@google.com (Alex Klyubin) + */ +public class OtpSourceException extends Exception { + public OtpSourceException(String message) { + super(message); + } + + public OtpSourceException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/PasscodeGenerator.java b/lib_common/src/main/java/com/qunar/im/auth/PasscodeGenerator.java new file mode 100755 index 0000000..4401aad --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/PasscodeGenerator.java @@ -0,0 +1,244 @@ +/* + * Copyright 2009 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import java.io.ByteArrayInputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.security.GeneralSecurityException; + +import javax.crypto.Mac; + +/** + * An implementation of the HOTP generator specified by RFC 4226. Generates + * short passcodes that may be used in challenge-response protocols or as + * timeout passcodes that are only valid for a short period. + * + * The default passcode is a 6-digit decimal code. The maximum passcode length is 9 digits. + * + * @author sweis@google.com (Steve Weis) + * + */ +public class PasscodeGenerator { + private static final int MAX_PASSCODE_LENGTH = 9; + + /** Default time interval */ + public static final int INTERVAL = OtpProvider.DEFAULT_INTERVAL; + + /** Default decimal passcode length */ + private static final int PASS_CODE_LENGTH = 6; + + /** The number of previous and future intervals to check */ + private static final int ADJACENT_INTERVALS = 1; + + /** Powers of 10 used to shorten the pin to the desired number of digits */ + private static final int[] DIGITS_POWER + // 0 1 2 3 4 5 6 7 8 9 + = {1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000}; + + private final Signer signer; + private final int codeLength; + + /** + * Using an interface to allow us to inject different signature + * implementations. + */ + interface Signer { + /** + * @param data Preimage to sign, represented as sequence of arbitrary bytes + * @return Signature as sequence of bytes. + * @throws GeneralSecurityException + */ + byte[] sign(byte[] data) throws GeneralSecurityException; + } + + /** + * @param mac A {@link Mac} used to generate passcodes + */ + public PasscodeGenerator(Mac mac) { + this(mac, PASS_CODE_LENGTH); + } + + public PasscodeGenerator(Signer signer) { + this(signer, PASS_CODE_LENGTH); + } + + /** + * @param mac A {@link Mac} used to generate passcodes + * @param passCodeLength The length of the decimal passcode + */ + public PasscodeGenerator(final Mac mac, int passCodeLength) { + this(new Signer() { + @Override + public byte[] sign(byte[] data){ + return mac.doFinal(data); + } + }, passCodeLength); + } + + public PasscodeGenerator(Signer signer, int passCodeLength) { + if ((passCodeLength < 0) || (passCodeLength > MAX_PASSCODE_LENGTH)) { + throw new IllegalArgumentException( + "PassCodeLength must be between 1 and " + MAX_PASSCODE_LENGTH + + " digits."); + } + this.signer = signer; + this.codeLength = passCodeLength; + } + + private String padOutput(int value) { + String result = Integer.toString(value); + for (int i = result.length(); i < codeLength; i++) { + result = "0" + result; + } + return result; + } + + /** + * @param state 8-byte integer value representing internal OTP state. + * @return A decimal response code + * @throws GeneralSecurityException If a JCE exception occur + */ + public String generateResponseCode(long state) + throws GeneralSecurityException { + byte[] value = ByteBuffer.allocate(8).putLong(state).array(); +// byte[] data = new byte[8]; +// long value = state; +// +// // Converting the instant of time from the long representation to a +// // big-endian array of bytes (RFC4226, 5.2. Description). +// for (int i = 8; i-- > 0; value >>>= 8) +// { +// data[i] = (byte) value; +// } + return generateResponseCode(value); + } + + + /** + * @param state 8-byte integer value representing internal OTP state. + * @param challenge Optional challenge as array of bytes. + * @return A decimal response code + * @throws GeneralSecurityException If a JCE exception occur + */ + public String generateResponseCode(long state, byte[] challenge) + throws GeneralSecurityException { + if (challenge == null) { + return generateResponseCode(state); + } else { + // Allocate space for combination and store. + byte value[] = ByteBuffer.allocate(8 + challenge.length) + .putLong(state) // Write out OTP state + .put(challenge, 0, challenge.length) // Concatenate with challenge. + .array(); + return generateResponseCode(value); + } + } + + /** + * @param challenge An arbitrary byte array used as a challenge + * @return A decimal response code + * @throws GeneralSecurityException If a JCE exception occur + */ + public String generateResponseCode(byte[] challenge) + throws GeneralSecurityException { + byte[] hash = signer.sign(challenge); + + // Dynamically truncate the hash + // OffsetBits are the low order bits of the last byte of the hash + int offset = hash[hash.length - 1] & 0xF; + // Grab a positive integer value starting at the given offset. + int truncatedHash = hashToInt(hash, offset) & 0x7FFFFFFF; + int pinValue = truncatedHash % DIGITS_POWER[codeLength]; + return padOutput(pinValue); + } + + /** + * Grabs a positive integer value from the input array starting at + * the given offset. + * @param bytes the array of bytes + * @param start the index into the array to start grabbing bytes + * @return the integer constructed from the four bytes in the array + */ + private int hashToInt(byte[] bytes, int start) { + DataInput input = new DataInputStream( + new ByteArrayInputStream(bytes, start, bytes.length - start)); + int val; + try { + val = input.readInt(); + } catch (IOException e) { + throw new IllegalStateException(e); + } + return val; + } + + /** + * @param challenge A challenge to check a response against + * @param response A response to verify + * @return True if the response is valid + */ + public boolean verifyResponseCode(long challenge, String response) + throws GeneralSecurityException { + String expectedResponse = generateResponseCode(challenge, null); + return expectedResponse.equals(response); + } + + /** + * Verify a timeout code. The timeout code will be valid for a time + * determined by the interval period and the number of adjacent intervals + * checked. + * + * @param timeoutCode The timeout code + * @return True if the timeout code is valid + */ + public boolean verifyTimeoutCode(long currentInterval, String timeoutCode) + throws GeneralSecurityException { + return verifyTimeoutCode(timeoutCode, currentInterval, + ADJACENT_INTERVALS, ADJACENT_INTERVALS); + } + + /** + * Verify a timeout code. The timeout code will be valid for a time + * determined by the interval period and the number of adjacent intervals + * checked. + * + * @param timeoutCode The timeout code + * @param pastIntervals The number of past intervals to check + * @param futureIntervals The number of future intervals to check + * @return True if the timeout code is valid + */ + public boolean verifyTimeoutCode(String timeoutCode, + long currentInterval, + int pastIntervals, + int futureIntervals) throws GeneralSecurityException { + // Ensure that look-ahead and look-back counts are not negative. + pastIntervals = Math.max(pastIntervals, 0); + futureIntervals = Math.max(futureIntervals, 0); + + // Try upto "pastIntervals" before current time, and upto "futureIntervals" after. + for (int i = -pastIntervals; i <= futureIntervals; ++i) { + String candidate = generateResponseCode(currentInterval - i, null); + if (candidate.equals(timeoutCode)) { + return true; + } + } + + return false; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/TotpClock.java b/lib_common/src/main/java/com/qunar/im/auth/TotpClock.java new file mode 100755 index 0000000..07572a7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/TotpClock.java @@ -0,0 +1,95 @@ +/* + * Copyright 2012 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +/** + * Clock input for the time-based OTPs (TOTP). The input is based on the current system time + * and is adjusted by a persistently stored correction value (offset in minutes). + * + * @author klyubin@google.com (Alex Klyubin) + */ +public class TotpClock implements SharedPreferences.OnSharedPreferenceChangeListener { + + // @VisibleForTesting + static final String PREFERENCE_KEY_OFFSET_MINUTES = "timeCorrectionMinutes"; + + private final SharedPreferences mPreferences; + + private final Object mLock = new Object(); + + /** + * Cached value of time correction (in minutes) or {@code null} if not cached. The value is cached + * because it's read very frequently (once every 100ms) and is modified very infrequently. + * + * @GuardedBy {@link #mLock} + */ + private Integer mCachedCorrectionMinutes; + + public TotpClock(Context context) { + mPreferences = PreferenceManager.getDefaultSharedPreferences(context); + mPreferences.registerOnSharedPreferenceChangeListener(this); + } + + /** + * Gets the number of milliseconds since epoch. + */ + public long currentTimeMillis() { + return System.currentTimeMillis() + getTimeCorrectionMinutes() * Utilities.MINUTE_IN_MILLIS; + } + + /** + * Gets the currently used time correction value. + * + * @return number of minutes by which this device is behind the correct time. + */ + public int getTimeCorrectionMinutes() { + synchronized (mLock) { + if (mCachedCorrectionMinutes == null) { + try { + mCachedCorrectionMinutes = mPreferences.getInt(PREFERENCE_KEY_OFFSET_MINUTES, 0); + } catch(ClassCastException e) { + mCachedCorrectionMinutes = Integer.valueOf(mPreferences.getString(PREFERENCE_KEY_OFFSET_MINUTES, "0")); + } + } + return mCachedCorrectionMinutes; + } + } + + /** + * Sets the currently used time correction value. + * + * @param minutes number of minutes by which this device is behind the correct time. + */ + public void setTimeCorrectionMinutes(int minutes) { + synchronized (mLock) { + mPreferences.edit().putInt(PREFERENCE_KEY_OFFSET_MINUTES, minutes).commit(); + // Invalidate the cache to force reading actual settings from time to time + mCachedCorrectionMinutes = null; + } + } + + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (key.equals(PREFERENCE_KEY_OFFSET_MINUTES)) { + // Invalidate the cache + mCachedCorrectionMinutes = null; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/TotpCounter.java b/lib_common/src/main/java/com/qunar/im/auth/TotpCounter.java new file mode 100755 index 0000000..d7bd9d3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/TotpCounter.java @@ -0,0 +1,148 @@ +/* + * Copyright 2011 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +/** + * Counter whose value is a deterministic function of time as described in RFC 6238 + * "TOTP: Time-Based One-Time Password Algorithm". + * + *

The 64-bit counter assumes the value {@code 0} at a predefined point in time and periodically + * increments its value by one periodically. + * + *

The value {@code V} of the counter at time instant {@code T} is: + *

+ * V = (T - T0) / TimeStep
+ * 
+ * where {@code T0} is the earliest time instant at which the counter assumes the value {@code 0}, + * and {@code TimeStep} is the duration of time for which the values of the counter remain constant. + * + *

Note: All time instants are in seconds since UNIX epoch, and all time durations are + * in seconds. + * + *

Note: All time instants must be non-negative. + * + *

Thread-safety: Instances of this class are immutable and are thus thread-safe. + * + * @author klyubin@google.com (Alex Klyubin) + */ +public class TotpCounter { + + /** Interval of time (seconds) between successive changes of this counter's value. */ + private final long mTimeStep; + + /** + * Earliest time instant (seconds since UNIX epoch) at which this counter assumes the value of + * {@code 0}. + */ + private final long mStartTime; + + /** + * Constructs a new {@code TotpCounter} that starts with the value {@code 0} at time instant + * {@code 0} (seconds since UNIX epoch) and increments its value with the specified frequency. + * + * @param timeStep interval of time (seconds) between successive changes of this counter's value. + */ + public TotpCounter(long timeStep) { + this(timeStep, 0); + } + + /** + * Constructs a new {@code TotpCounter} that starts with the value {@code 0} at the specified + * time and increments its value with the specified frequency. + * + * @param timeStep interval of time (seconds) between successive changes of this counter's value. + * @param startTime the earliest time instant (seconds since UNIX epoch) at which this counter + * assumes the value {@code 0}. + */ + public TotpCounter(long timeStep, long startTime) { + if (timeStep < 1) { + throw new IllegalArgumentException("Time step must be positive: " + timeStep); + } + assertValidTime(startTime); + + mTimeStep = timeStep; + mStartTime = startTime; + } + + /** + * Gets the frequency with which the value of this counter changes. + * + * @return interval of time (seconds) between successive changes of this counter's value. + */ + public long getTimeStep() { + return mTimeStep; + } + + /** + * Gets the earliest time instant at which this counter assumes the value {@code 0}. + * + * @return time (seconds since UNIX epoch). + */ + public long getStartTime() { + return mStartTime; + } + + /** + * Gets the value of this counter at the specified time. + * + * @param time time instant (seconds since UNIX epoch) for which to obtain the value. + * + * @return value of the counter at the {@code time}. + */ + public long getValueAtTime(long time) { + assertValidTime(time); + + // According to the RFC: + // T = (Current Unix time - T0) / X, where the default floor function is used. + // T - counter value, + // T0 - start time. + // X - time step. + + // It's important to use a floor function instead of simple integer division. For example, + // assuming a time step of 3: + // Time since start time: -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 + // Correct value: -2 -2 -2 -1 -1 -1 0 0 0 1 1 1 2 + // Simple division / 3: -2 -1 -1 -1 0 0 0 0 0 1 1 1 2 + // + // To avoid using Math.floor which requires imprecise floating-point arithmetic, we + // we compute the value using integer division, but using a different equation for + // negative and non-negative time since start time. + long timeSinceStartTime = time - mStartTime; + if (timeSinceStartTime >= 0) { + return timeSinceStartTime / mTimeStep; + } else { + return (timeSinceStartTime - (mTimeStep - 1)) / mTimeStep; + } + } + + /** + * Gets the time when the counter assumes the specified value. + * + * @param value value. + * + * @return earliest time instant (seconds since UNIX epoch) when the counter assumes the value. + */ + public long getValueStartTime(long value) { + return mStartTime + (value * mTimeStep); + } + + private static void assertValidTime(long time) { + if (time < 0) { + throw new IllegalArgumentException("Negative time: " + time); + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/auth/Utilities.java b/lib_common/src/main/java/com/qunar/im/auth/Utilities.java new file mode 100755 index 0000000..a43d59f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/auth/Utilities.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010 Google Inc. All Rights Reserved. + * + * 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.qunar.im.auth; + +import android.webkit.WebView; + +/** + * A class for handling a variety of utility things. This was mostly made + * because I needed to centralize dialog related constants. I foresee this class + * being used for other code sharing across Activities in the future, however. + * + * @author alexei@czeskis.com (Alexei Czeskis) + * + */ +public class Utilities { + // Links + public static final String ZXING_MARKET = + "market://search?q=pname:com.google.zxing.client.android"; + public static final String ZXING_DIRECT = + "https://zxing.googlecode.com/files/BarcodeScanner3.1.apk"; + + // Dialog IDs + public static final int DOWNLOAD_DIALOG = 0; + public static final int MULTIPLE_ACCOUNTS_DIALOG = 1; + static final int INVALID_QR_CODE = 3; + static final int INVALID_SECRET_IN_QR_CODE = 7; + + public static final long SECOND_IN_MILLIS = 1000; + public static final long MINUTE_IN_MILLIS = 60 * SECOND_IN_MILLIS; + + // Constructor -- Does nothing yet + private Utilities() { } + + public static final long millisToSeconds(long timeMillis) { + return timeMillis / 1000; + } + + public static final long secondsToMillis(long timeSeconds) { + return timeSeconds * 1000; + } + + /** + * Sets the provided HTML as the contents of the provided {@link WebView}. + */ + public static void setWebViewHtml(WebView view, String html) { + view.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/callbacks/BasicCallback.java b/lib_common/src/main/java/com/qunar/im/base/callbacks/BasicCallback.java new file mode 100644 index 0000000..e45eeaf --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/callbacks/BasicCallback.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.callbacks; + +/** + * Created by xingchao.song on 10/13/2015. + */ +public interface BasicCallback { + void onSuccess(T t); + void onError(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/BackgroundExecutor.java b/lib_common/src/main/java/com/qunar/im/base/common/BackgroundExecutor.java new file mode 100644 index 0000000..db3fb28 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/BackgroundExecutor.java @@ -0,0 +1,484 @@ +/** + * Copyright (C) 2010-2014 eBusiness Information, Excilys Group + * + * 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.qunar.im.base.common; + +import android.os.Looper; + + +import com.qunar.im.base.util.LogUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +public class BackgroundExecutor { + + private static final String TAG = "CommonBackgroundExecutor"; + private static final int maxWorkCount = 2 * Runtime.getRuntime().availableProcessors()+8; + public static Executor DEFAULT_EXECUTOR = new ScheduledThreadPoolExecutor(maxWorkCount + ,new ThreadFactory() { + private final AtomicInteger mCount = new AtomicInteger(1); + + public Thread newThread(Runnable r) { + return new Thread(r, "Qtakl Upload task" + mCount.getAndIncrement()); + } + },new ThreadPoolExecutor.DiscardOldestPolicy()); + + private static Executor executor = DEFAULT_EXECUTOR; + + static { + ((ScheduledThreadPoolExecutor)DEFAULT_EXECUTOR).setKeepAliveTime(15, TimeUnit.SECONDS); + ((ScheduledThreadPoolExecutor)DEFAULT_EXECUTOR).allowCoreThreadTimeOut(true); + } + + public static Executor getExecutor(){ + return executor; + } + + /** + * The default invocation handler for wrong thread execution. + * It just throws {@link IllegalStateException} with explanation what is going wrong. + * + * @see #setWrongThreadListener(BackgroundExecutor.WrongThreadListener) + */ + public static final WrongThreadListener DEFAULT_WRONG_THREAD_LISTENER = new WrongThreadListener() { + @Override + public void onUiExpected() { + //throw new IllegalStateException("Method invocation is expected from the UI thread"); + } + + @Override + public void onBgExpected(String... expectedSerials) { + if (expectedSerials.length == 0) { + //throw new IllegalStateException("Method invocation is expected from a background thread, but it was called from the UI thread"); + } + //throw new IllegalStateException("Method invocation is expected from one of serials " + Arrays.toString(expectedSerials) + ", but it was called from the UI thread"); + } + + @Override + public void onWrongBgSerial(String currentSerial, String... expectedSerials) { + //if (currentSerial == null) { + // currentSerial = "anonymous"; + //} + //throw new IllegalStateException("Method invocation is expected from one of serials " + Arrays.toString(expectedSerials) + ", but it was called from " + currentSerial + " serial"); + } + }; + + private static WrongThreadListener wrongThreadListener = DEFAULT_WRONG_THREAD_LISTENER; + + private static final List tasks = new ArrayList(); + private static final ThreadLocal currentSerial = new ThreadLocal(); + + /** + * Execute a runnable after the given delay. + * + * @param runnable + * the task to execute + * @param delay + * the time from now to delay execution, in milliseconds + * @throws IllegalArgumentException + * if delay is strictly positive and the current + * executor does not support scheduling (if + * {@link #setExecutor(Executor)} has been called with such an + * executor) + * @return Future associated to the running task + */ + private static Future directExecute(Runnable runnable, int delay) { + Future future = null; + if (delay > 0) { + /* no serial, but a delay: schedule the task */ + if (!(executor instanceof ScheduledExecutorService)) { + throw new IllegalArgumentException("The executor set does not support scheduling"); + } + ScheduledExecutorService scheduledExecutorService = (ScheduledExecutorService) executor; + future = scheduledExecutorService.schedule(runnable, delay, TimeUnit.MILLISECONDS); + } else { + if (executor instanceof ExecutorService) { + ExecutorService executorService = (ExecutorService) executor; + future = executorService.submit(runnable); + } else { + /* non-cancellable task */ + executor.execute(runnable); + } + } + return future; + } + + /** + * Execute a task after (at least) its delay and after all + * tasks added with the same non-null serial (if any) have + * completed execution. + * + * @param task + * the task to execute + * @throws IllegalArgumentException + * if task.delay is strictly positive and the + * current executor does not support scheduling (if + * {@link #setExecutor(Executor)} has been called with such an + * executor) + */ + public static synchronized void execute(Task task) { + Future future = null; + if (task.serial == null || !hasSerialRunning(task.serial)) { + task.executionAsked = true; + future = directExecute(task, task.remainingDelay); + } + if (task.id != null || task.serial != null) { + /* keep task */ + task.future = future; + tasks.add(task); + } + } + + /** + * Execute a task. + * + * @param runnable + * the task to execute + * @param id + * identifier used for task cancellation + * @param delay + * the time from now to delay execution, in milliseconds + * @param serial + * the serial queue (null or "" for no + * serial execution) + * @throws IllegalArgumentException + * if delay is strictly positive and the current + * executor does not support scheduling (if + * {@link #setExecutor(Executor)} has been called with such an + * executor) + */ + public static void execute(final Runnable runnable, String id, int delay, String serial) { + execute(new Task(id, delay, serial) { + @Override + public void execute() { + runnable.run(); + } + }); + } + + /** + * Execute a task after the given delay. + * + * @param runnable + * the task to execute + * @param delay + * the time from now to delay execution, in milliseconds + * @throws IllegalArgumentException + * if delay is strictly positive and the current + * executor does not support scheduling (if + * {@link #setExecutor(Executor)} has been called with such an + * executor) + */ + public static void execute(Runnable runnable, int delay) { + directExecute(runnable, delay); + } + + /** + * Execute a task. + * + * @param runnable + * the task to execute + */ + public static void execute(Runnable runnable) { + directExecute(runnable, 0); + } + + /** + * Execute a task after all tasks added with the same non-null + * serial (if any) have completed execution. + * + * Equivalent to {@link #execute(Runnable, String, int, String) + * execute(runnable, id, 0, serial)}. + * + * @param runnable + * the task to execute + * @param id + * identifier used for task cancellation + * @param serial + * the serial queue to use (null or "" + * for no serial execution) + */ + public static void execute(Runnable runnable, String id, String serial) { + execute(runnable, id, 0, serial); + } + + /** + * Change the executor. + * + * Note that if the given executor is not a {@link ScheduledExecutorService} + * then executing a task after a delay will not be supported anymore. If it + * is not even a {@link ExecutorService} then tasks will not be cancellable + * anymore. + * + * @param executor + * the new executor + */ + public static void setExecutor(Executor executor) { + BackgroundExecutor.executor = executor; + } + + /** + * Changes the default {@link WrongThreadListener}. + * To restore the default one use {@link #DEFAULT_WRONG_THREAD_LISTENER}. + * + * @param listener the new {@link WrongThreadListener} + */ + public static void setWrongThreadListener(WrongThreadListener listener) { + wrongThreadListener = listener; + } + + /** + * Cancel all tasks having the specified id. + * + * @param id + * the cancellation identifier + * @param mayInterruptIfRunning + * true if the thread executing this task should be + * interrupted; otherwise, in-progress tasks are allowed to + * complete + */ + public static synchronized void cancelAll(String id, boolean mayInterruptIfRunning) { + for (int i = tasks.size() - 1; i >= 0; i--) { + Task task = tasks.get(i); + if (id.equals(task.id)) { + if (task.future != null) { + task.future.cancel(mayInterruptIfRunning); + if (!task.managed.getAndSet(true)) { + /* + * the task has been submitted to the executor, but its + * execution has not started yet, so that its run() + * method will never call postExecute() + */ + task.postExecute(); + } + } else if (task.executionAsked) { + LogUtil.w(TAG, "A task with id " + task.id + " cannot be cancelled (the executor set does not support it)"); + } else { + /* this task has not been submitted to the executor */ + tasks.remove(i); + } + } + } + } + + /** + * Checks if the current thread is UI thread and notifies + * {@link BackgroundExecutor.WrongThreadListener#onUiExpected()} if it doesn't. + */ + public static void checkUiThread() { + if (Looper.getMainLooper().getThread() != Thread.currentThread()) { + wrongThreadListener.onUiExpected(); + } + } + + /** + * Checks if the current thread is a background thread and, optionally, restricts it + * with passed serials. If no serials passed and current thread is the UI thread, then + * {@link WrongThreadListener#onBgExpected(String...)} will be called. + * If the current thread is not UI and serials list is empty, then this method just returns. + * Otherwise, if the method was called not during {@link Task} execution or the task has no + * serial, then the {@link WrongThreadListener#onWrongBgSerial(String, String...)} will be called + * with null for the first parameter. If task has a serial but passed serials don't contain that, + * then {@link WrongThreadListener#onWrongBgSerial(String, String...)} will be called with + * the task's serial for the first parameter. + * + * @param serials (optional) list of allowed serials + */ + public static void checkBgThread(String... serials) { + if (serials.length == 0) { + if (Looper.getMainLooper().getThread() == Thread.currentThread()) { + wrongThreadListener.onBgExpected(serials); + } + return; + } + String current = currentSerial.get(); + if (current == null) { + wrongThreadListener.onWrongBgSerial(null, serials); + return; + } + for (String serial : serials) { + if (serial.equals(current)) { + return; + } + } + wrongThreadListener.onWrongBgSerial(current, serials); + } + + /** + * Indicates whether a task with the specified serial has been + * submitted to the executor. + * + * @param serial the serial queue + * @return true if such a task has been submitted, + * false otherwise + */ + private static boolean hasSerialRunning(String serial) { + for (Task task : tasks) { + if (task.executionAsked && serial.equals(task.serial)) { + return true; + } + } + return false; + } + + /** + * Retrieve and remove the first task having the specified + * serial (if any). + * + * @param serial + * the serial queue + * @return task if found, null otherwise + */ + private static Task take(String serial) { + int len = tasks.size(); + for (int i = 0; i < len; i++) { + if (serial.equals(tasks.get(i).serial)) { + return tasks.remove(i); + } + } + return null; + } + + public static abstract class Task implements Runnable { + + private String id; + private int remainingDelay; + private long targetTimeMillis; /* since epoch */ + private String serial; + private boolean executionAsked; + private Future future; + + /* + * A task can be cancelled after it has been submitted to the executor + * but before its run() method is called. In that case, run() will never + * be called, hence neither will postExecute(): the tasks with the same + * serial identifier (if any) will never be submitted. + * + * Therefore, cancelAll() *must* call postExecute() if run() is not + * started. + * + * This flag guarantees that either cancelAll() or run() manages this + * task post execution, but not both. + */ + private AtomicBoolean managed = new AtomicBoolean(); + + public Task(String id, int delay, String serial) { + if (!"".equals(id)) { + this.id = id; + } + if (delay > 0) { + remainingDelay = delay; + targetTimeMillis = System.currentTimeMillis() + delay; + } + if (!"".equals(serial)) { + this.serial = serial; + } + } + + @Override + public void run() { + if (managed.getAndSet(true)) { + /* cancelled and postExecute() already called */ + return; + } + + try { + currentSerial.set(serial); + execute(); + } finally { + /* handle next tasks */ + postExecute(); + } + } + + public abstract void execute(); + + private void postExecute() { + if (id == null && serial == null) { + /* nothing to do */ + return; + } + currentSerial.set(null); + synchronized (BackgroundExecutor.class) { + /* execution complete */ + tasks.remove(this); + + if (serial != null) { + Task next = take(serial); + if (next != null) { + if (next.remainingDelay != 0) { + /* the delay may not have elapsed yet */ + next.remainingDelay = Math.max(0, (int) (targetTimeMillis - System.currentTimeMillis())); + } + /* a task having the same serial was queued, execute it */ + BackgroundExecutor.execute(next); + } + } + } + } + + } + + /** + * A callback interface to be notified when a method invocation is expected from another thread. + * + * @see #setWrongThreadListener(WrongThreadListener) + * @see #checkUiThread() + * @see #checkBgThread(String...) + */ + public static interface WrongThreadListener { + + /** + * Will be called, if the method is supposed to be called from the UI-thread, but was called from a background + * thread. + * @see #setWrongThreadListener(WrongThreadListener) + * @see #DEFAULT_WRONG_THREAD_LISTENER + */ + void onUiExpected(); + + /** + * Will be called, if the method is supposed to be called from a background thread, but was called from the + * UI-thread. + * + * @param expectedSerials a list of allowed serials. If any background thread is allowed the list will be empty. + * @see #setWrongThreadListener(WrongThreadListener) + * @see #DEFAULT_WRONG_THREAD_LISTENER + */ + void onBgExpected(String... expectedSerials); + + /** + * Will be called, if the method is supposed to be called from a background thread with one of + * {@code expectedSerials}, but was called from a {@code currentSerial}. {@code currentSerial} will be null, + * if it is called from a background thread without a serial. + * + * @param currentSerial the serial of caller thread or null if there is no serial + * @param expectedSerials a list of allowed serials + * @see #setWrongThreadListener(WrongThreadListener) + * @see #DEFAULT_WRONG_THREAD_LISTENER + */ + void onWrongBgSerial(String currentSerial, String... expectedSerials); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/ConversitionType.java b/lib_common/src/main/java/com/qunar/im/base/common/ConversitionType.java new file mode 100644 index 0000000..9b19961 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/ConversitionType.java @@ -0,0 +1,51 @@ +package com.qunar.im.base.common; + +import com.qunar.im.protobuf.common.ProtoMessageOuterClass; + +/** + * Created by xinbo.wang on 2016-11-30. + */ +public class ConversitionType { + //消息类型 + public final static int MSG_TYPE_CHAT = 0; //单人聊天 + public final static int MSG_TYPE_GROUP = 1; //群组聊天 + public final static int MSG_TYPE_HEADLINE = 2; //系统消息 + public final static int MSG_TYPE_CONSULT = 4;//consult消息 用户侧 + public final static int MSG_TYPE_CONSULT_SERVER = 5; //qchat note消息 客服侧 + public static final int MSG_TYPE_SHARE_LOCATION = 6;//shareLocation消息 + public static final int MSG_TYPE_COLLECTION=8; //代收消息 + public final static int MSG_TYPING = 16; + public final static int MSG_GROUP_READ_MARK = 32; + public final static int MSG_CHAT_READ_MARK = 64; + public final static int MSG_TYPE_SUBSCRIPT = 128; //普通机器人 + public final static int MSG_TYPE_MSTAT = 256; //消息状态 + public final static int MSG_ALL_READ = 512; + public static final int MSG_TYPE_IMPORTANT_SUBSCRIPT = 1024;// 单独显示的机器人 + public final static int MSG_TYPE_FRIENDS_REQUEST = 2048; //好友请求 + public final static int MSG_TYPE_ROBOT_WEB = 3072; + public final static int MSG_TYPE_TRANSFER = 4096; //会话转移 + public final static int MSG_TYPE_REVOKE = 8192; + public final static int MSG_TYPE_WEBRTC = MSG_TYPE_CONSULT<<1; + public final static int MSG_TYPE_ENCRYPT = MSG_TYPE_CONSULT<<2; + + + public static int getConversitionType(int signalType, String chatid) { + if (signalType == ProtoMessageOuterClass.SignalType.SignalTypeChat_VALUE) { + return ConversitionType.MSG_TYPE_CHAT; + } else if (signalType == ProtoMessageOuterClass.SignalType.SignalTypeGroupChat_VALUE) { + return ConversitionType.MSG_TYPE_GROUP; + } else if (signalType == ProtoMessageOuterClass.SignalType.SignalTypeSubscription_VALUE) {//公众号消息 + return ConversitionType.MSG_TYPE_SUBSCRIPT; + } else if (signalType == ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE) { + if ((ConversitionType.MSG_TYPE_CONSULT_SERVER + "").equals(chatid)) { + return ConversitionType.MSG_TYPE_CONSULT_SERVER; + } else { + return ConversitionType.MSG_TYPE_CONSULT; + } + } else if ((signalType == ProtoMessageOuterClass.SignalType.SignalTypeHeadline_VALUE)) {//qtalk headline系统消息 + return ConversitionType.MSG_TYPE_HEADLINE; + } else { + return ConversitionType.MSG_TYPE_CHAT; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/DailyMindConstants.java b/lib_common/src/main/java/com/qunar/im/base/common/DailyMindConstants.java new file mode 100644 index 0000000..e208e06 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/DailyMindConstants.java @@ -0,0 +1,70 @@ +package com.qunar.im.base.common; + +import com.qunar.im.core.services.QtalkNavicationService; + +/** + * daily mind constants + * Created by lihaibin.li on 2017/8/22. + */ + +public class DailyMindConstants { + //线网 + public static String DAILY_MIND_BASE_URL = QtalkNavicationService.getInstance().getJavaUrl() + "/qtapi/qcloud/"; + + //主记录相关 + public static final String SAVE_TO_MAIN = "saveToMain.qunar";//主记录保存 + + public static final String UPDATE_MAIN = "updateMain.qunar";//修改主记录 + + public static final String DELETE_MAIN = "deleteMain.qunar";//删除主记录 + + public static final String COLLECTION_MAIN = "collectionMain.qunar";//收藏主记录 + + public static final String CANCEL_COLLECTION_MAIN = "cancelCollectionMain.qunar";//取消收藏主记录 + + public static final String MOVE_TO_BASKET_MAIN = "moveToBasketMain.qunar";//主记录移动到废纸篓 + + public static final String MOVE_OUT_BASKET_MAIN = "moveOutBasketMain.qunar";//主记录移出废纸篓 + + public static final String GET_CLOUD_MAIN = "getCloudMain.qunar";//获取主记录 + + public static final String GET_CLOUD_MAIN_HISTORY = "getCloudMainHistory.qunar";//获取主记录操作历史 + + public static final String SYNC_CLOUD_MAIN_LIST = "syncCloudMainList.qunar";//批量插入更新主记录 + + //子记录相关 + public static final String SAVE_TO_SUB = "saveToSub.qunar";//子记录保存 + + public static final String UPDATE_SUB = "updateSub.qunar";//子记录更新 + + public static final String DELETE_SUB = "deleteSub.qunar";//自己录删除 + + public static final String COLLECTION_SUB = "collectionSub.qunar";//收藏子记录 + + public static final String CANCEL_COLLECTION_SUB = "cancelCollectionSub.qunar";//取消收藏子记录 + + public static final String MOVE_TO_BASKET_SUB = "moveToBasketSub.qunar";//子记录移动到废纸篓 + + public static final String MOVE_OUT_BASKET_SUB = "moveOutBasketSub.qunar";//子记录移出废纸篓 + + public static final String GET_CLOUD_SUB = "getCloudSub.qunar";//获取子记录 + + public static final String GET_CLOUD_SUB_HISTORY = "getCloudSubHistory.qunar";//子记录操作历史 + + public static final String SYNC_CLOUD_SUB_LIST = "syncCloudSubList.qunar";//批量更新插入子记录 + + public static final int DELETE = -1; + public static final int NORMAL = 1; + public static final int COLLECTION = 2; + public static final int BASKET = 3; + public static final int CREATE = 4; + public static final int UPDATE = 4; + + + public static final int PASSOWRD = 1; + public static final int TODOLIST = 2; + public static final int EVERNOTE = 3; + + public static final int CHATPASSWORD = 100; + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/ExceptionEvent.java b/lib_common/src/main/java/com/qunar/im/base/common/ExceptionEvent.java new file mode 100644 index 0000000..f030ddf --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/ExceptionEvent.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.common; + +/** + * Created by xinbo.wang on 2017-01-09. + */ +public class ExceptionEvent { + public Throwable throwable; + public ExceptionEvent(Throwable throwable) + { + this.throwable = throwable; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/ICommentView.java b/lib_common/src/main/java/com/qunar/im/base/common/ICommentView.java new file mode 100644 index 0000000..b6fbb6e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/ICommentView.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.common; + +/** + * Created by saber on 15-8-28. + */ +public interface ICommentView { + void setCommentUrl(String url, String uid); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/QChatRSA.java b/lib_common/src/main/java/com/qunar/im/base/common/QChatRSA.java new file mode 100644 index 0000000..3f49d25 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/QChatRSA.java @@ -0,0 +1,191 @@ +package com.qunar.im.base.common; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Base64; + +import com.orhanobut.logger.Logger; +import com.qunar.im.base.util.BinaryUtil; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; + +/** + * Created by saber on 15-9-2. + */ +public class QChatRSA { + public static String pub_key = ""; + private static String encryptMe(byte[] cipherData) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { + X509EncodedKeySpec x509 = new X509EncodedKeySpec(Base64.decode(pub_key,Base64.DEFAULT)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + Key publicKey = keyFactory.generatePublic(x509); + Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] output = cipher.doFinal(cipherData); + return Base64.encodeToString(output, Base64.DEFAULT); + } + + private static String encryptPassword(String password) throws NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidKeySpecException, NoSuchPaddingException { + String base64Key = BinaryUtil.MD5(password).toLowerCase(); + return encryptMe(base64Key.getBytes()); + } + + public static String QunarRSAEncrypt(String pwd) throws BadPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, UnsupportedEncodingException { + String code = encryptPassword(pwd); + // code = URLEncoder.encode(code, "utf-8"); + return code; + } + + public static String QTalkEncodePassword(String password) throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, InvalidKeySpecException { + return encodePassword(password); + } + + private static String encodePassword(String raaPwd) throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, InvalidKeySpecException { + return encryptMe(raaPwd.getBytes()) ; + } + + /** + * 读取pubkey + * @param fileName + * @return + */ + public static String readPubkey(Context context, String fileName){ + try { + InputStream is = context.getAssets().open(fileName + ".pem"); + int size = is.available(); + + // Read the entire asset into a local byte buffer. + byte[] buffer = new byte[size]; + is.read(buffer); + is.close(); + + String key = new String(buffer, "GB2312"); + if(TextUtils.isEmpty(key)){ + return QChatRSA.pub_key; + } + return key; + } catch (IOException e) { + Logger.i("读取pubkey异常:" + e.getMessage()); + return QChatRSA.pub_key; + //throw new RuntimeException(e); + } + } +/** + * 读取pubkey + * @param fileName + * @return + */ +// public static String readPubkey(Context context, String fileName){ +// try { +// InputStream is = context.getAssets().open(fileName + ".pem"); +// String key = pub_key; +// try { +// RSAPublicKey rsaPublicKey = (RSAPublicKey) loadPublicKey(is); +// key = rsaPublicKey.getModulus().toString(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +//// String key = new String(buffer, "GB2312"); +// if(TextUtils.isEmpty(key)){ +// return QChatRSA.pub_key; +// } +// return key; +// } catch (IOException e) { +// return QChatRSA.pub_key; +// //throw new RuntimeException(e); +// } +// } + + /** + * 从文件中输入流中加载公钥 + * + * @param in + * 公钥输入流 + * @throws Exception + * 加载公钥时产生的异常 + */ + private static PublicKey loadPublicKey(InputStream in) throws Exception + { + try + { + return loadPublicKey(readKey(in)); + } catch (IOException e) + { + throw new Exception("公钥数据流读取错误"); + } catch (NullPointerException e) + { + throw new Exception("公钥输入流为空"); + } + } + + /** + * 读取密钥信息 + * + * @param in + * @return + * @throws IOException + */ + private static String readKey(InputStream in) throws IOException + { + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + String readLine = null; + StringBuilder sb = new StringBuilder(); + while ((readLine = br.readLine()) != null) + { + if (readLine.charAt(0) == '-') + { + continue; + } else + { + sb.append(readLine); + sb.append('\r'); + } + } + + return sb.toString(); + } + + /** + * 从字符串中加载公钥 + * + * @param publicKeyStr + * 公钥数据字符串 + * @throws Exception + * 加载公钥时产生的异常 + */ + private static PublicKey loadPublicKey(String publicKeyStr) throws Exception + { + try + { + byte[] buffer = Base64.decode(publicKeyStr, Base64.DEFAULT); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer); + return (RSAPublicKey) keyFactory.generatePublic(keySpec); + } catch (NoSuchAlgorithmException e) + { + throw new Exception("无此算法"); + } catch (InvalidKeySpecException e) + { + throw new Exception("公钥非法"); + } catch (NullPointerException e) + { + throw new Exception("公钥数据为空"); + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/common/QunarIMApp.java b/lib_common/src/main/java/com/qunar/im/base/common/QunarIMApp.java new file mode 100644 index 0000000..46abd4f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/common/QunarIMApp.java @@ -0,0 +1,140 @@ +package com.qunar.im.base.common; + +import android.app.ActivityManager; +import android.content.Context; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Handler; + +import com.facebook.cache.disk.DiskCacheConfig; +import com.facebook.common.internal.Supplier; +import com.facebook.common.util.ByteConstants; +import com.facebook.drawee.backends.pipeline.Fresco; +import com.facebook.imagepipeline.cache.MemoryCacheParams; +import com.facebook.imagepipeline.core.ImagePipelineConfig; +import com.facebook.imagepipeline.decoder.ProgressiveJpegConfig; +import com.facebook.imagepipeline.image.QualityInfo; +import com.qunar.im.base.util.graphics.MyDiskCache; + +import java.io.File; +import java.lang.ref.WeakReference; + + +/** + * Created by xinbo.wang 2015/07/27 + */ +public class QunarIMApp { + public static Handler mainHandler = com.qunar.im.common.CommonConfig.mainhandler; + private static WeakReference instance; + private int version; + private String versionName; + private QunarIMApp(){} + + private static QunarIMApp qunarIMApp = new QunarIMApp(); + + public void RegisterContext(final Context context) + { + if(instance == null||instance.get()==null) + { + instance = new WeakReference(context); + } + + ProgressiveJpegConfig config = new ProgressiveJpegConfig() { + @Override + public int getNextScanNumberToDecode(int i) { + return 0; + } + + @Override + public QualityInfo getQualityInfo(int i) { + return null; + } + }; + + + ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig.newBuilder(context) + .setProgressiveJpegConfig(config) + .setDownsampleEnabled(true) + .setBitmapsConfig(Bitmap.Config.RGB_565) + .setBitmapMemoryCacheParamsSupplier(new MyBitmapMemoryCacheParamsSupplier((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE))) + .setMainDiskCacheConfig(DiskCacheConfig.newBuilder(context) + .setBaseDirectoryPath(new File(MyDiskCache.getDirectory().getAbsolutePath() + "/files/"))//FileUtils.getExternalFilesDir(context) + .setBaseDirectoryName("fresco")//qtalk_cache + .setVersion(100) + .setMaxCacheSize(10 * 1024 * ByteConstants.MB) + .setMaxCacheSizeOnLowDiskSpace(100 * ByteConstants.MB) + .setMaxCacheSizeOnVeryLowDiskSpace(20 * ByteConstants.MB) + .build()) + .setSmallImageDiskCacheConfig(DiskCacheConfig.newBuilder(context) + .setBaseDirectoryPath(new File(MyDiskCache.getDirectory().getAbsolutePath() + "/files/"))//FileUtils.getExternalFilesDir(context) + .setBaseDirectoryName("fresco_small_icon") + .setVersion(100) + .setMaxCacheSize(40 * 1024 * ByteConstants.MB) + .setMaxCacheSizeOnLowDiskSpace(100 * ByteConstants.MB) + .setMaxCacheSizeOnVeryLowDiskSpace(20 * ByteConstants.MB) + .build()) + .build(); + Fresco.initialize(context, imagePipelineConfig); + } + + public void setVersion(int version) + { + this.version = version; + } + + public int getVersion(){return this.version;} + + public void setVersionName(String str) + { + this.versionName = str; + } + + public String getVersionName(){return this.versionName;} + + public static Context getContext() { + return instance.get(); + } + + public static QunarIMApp getQunarIMApp() + { + return qunarIMApp; + } + + public class MyBitmapMemoryCacheParamsSupplier implements Supplier { + private static final int MAX_CACHE_ENTRIES = 56; + private static final int MAX_CACHE_ASHM_ENTRIES = 128; + private static final int MAX_CACHE_EVICTION_SIZE = 5; + private static final int MAX_CACHE_EVICTION_ENTRIES = 5; + private final ActivityManager mActivityManager; + + public MyBitmapMemoryCacheParamsSupplier(ActivityManager activityManager) { + mActivityManager = activityManager; + } + + @Override + public MemoryCacheParams get() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return new MemoryCacheParams(getMaxCacheSize(), MAX_CACHE_ENTRIES, MAX_CACHE_EVICTION_SIZE, MAX_CACHE_EVICTION_ENTRIES, 1); + } else { + return new MemoryCacheParams( + getMaxCacheSize(), + MAX_CACHE_ASHM_ENTRIES, + Integer.MAX_VALUE, + Integer.MAX_VALUE, + Integer.MAX_VALUE); + } + } + + private int getMaxCacheSize() { + final int maxMemory = + Math.min(mActivityManager.getMemoryClass() * ByteConstants.MB, Integer.MAX_VALUE); + if (maxMemory < 32 * ByteConstants.MB) { + return 4 * ByteConstants.MB; + } else if (maxMemory < 64 * ByteConstants.MB) { + return 6 * ByteConstants.MB; + } else { + return maxMemory / 5; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/config/IMConfiguration.java b/lib_common/src/main/java/com/qunar/im/base/config/IMConfiguration.java new file mode 100644 index 0000000..7bde34c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/config/IMConfiguration.java @@ -0,0 +1,19 @@ +package com.qunar.im.base.config; + +/** + * Created by saber on 15-7-27. + */ +public interface IMConfiguration { + boolean isDebug(); + String getHost(); + String getDomain(); + String getResource(); + int getPort(); + int TIMEOUT(); + void setHttpsKey(String key); + String getHttpUrl(); + int getHttpPort(); + String getSmsSendUrl(); + String getSmsVerifyUrl(); + String getOpsUrl(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jobs/OnJob.java b/lib_common/src/main/java/com/qunar/im/base/jobs/OnJob.java new file mode 100644 index 0000000..ea551cf --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jobs/OnJob.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jobs; + +import com.qunar.im.base.util.LogUtil; + +/** + * Created by saber on 15-12-7. + */ +public abstract class OnJob implements Runnable { + public void onCancel(){ + LogUtil.d("TASK","Canceled"); + } + + public void onAdded() + { + LogUtil.d("TASK","Added"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jobs/Priority.java b/lib_common/src/main/java/com/qunar/im/base/jobs/Priority.java new file mode 100644 index 0000000..f6e2752 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jobs/Priority.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.jobs; + +/** + * Created by saber on 15-12-7. + */ +public class Priority { + public final static int COMMON = 100; + public final static int HIGH = 1000; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AAShoukContent.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AAShoukContent.java new file mode 100644 index 0000000..ef2d484 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AAShoukContent.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 12/30/2015. + */ +public class AAShoukContent { + public String url ; + public String type; + public String typestr; + public String total_money;//总金额 + public String person_num;//总人数 + public String avg_money;//平均每人待付金额 + public String aa_type;//aa收款分类:single|total。single是指定人情况下的aa收款,avg_money没用;total是总人数平均收款方式。 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AccountPassword.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AccountPassword.java new file mode 100644 index 0000000..99a8616 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AccountPassword.java @@ -0,0 +1,24 @@ +package com.qunar.im.base.jsonbean; + +import com.qunar.im.core.services.QtalkNavicationService; + +/** + * Created by lihaibin.li on 2017/9/7. + */ + +public class AccountPassword { + public String userid;//用户名 + public String password;//密码 + public String navname;//导航名称 + public String navurl = QtalkNavicationService.getInstance().getNavicationUrl();//导航 + + @Override + public String toString() { + return "AccountPassword{" + + "userid='" + userid + '\'' + + ", password='" + password + '\'' + + ", navname='" + navname + '\'' + + ", navurl='" + navurl + '\'' + + '}'; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AccountSwitch.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AccountSwitch.java new file mode 100644 index 0000000..f07cf23 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AccountSwitch.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.jsonbean; + +import java.util.ArrayList; +import java.util.List; + +/** + * 账户切换 + * Created by lihaibin.li on 2017/9/7. + */ + +public class AccountSwitch { + public List list = new ArrayList<>(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ActionRichText.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ActionRichText.java new file mode 100644 index 0000000..4bac4d1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ActionRichText.java @@ -0,0 +1,19 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by zhaokai on 15-9-15. + */ +public class ActionRichText { + public String introduce; + public List subtitles; + public String linkurl; + public String imageurl; + + public static class SubTitle { + public String linkurl; + public String iconurl; + public String introduce; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ActivityMessageEntity.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ActivityMessageEntity.java new file mode 100644 index 0000000..796aefb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ActivityMessageEntity.java @@ -0,0 +1,24 @@ +package com.qunar.im.base.jsonbean; + +/** + * 活动ext json + */ +public class ActivityMessageEntity extends BaseResult { + + + public String url;//活动链接 + public String type;//消息分类(字段值:旅途活动) + public String title;//活动标题 + public String img;//气泡活动图片 + public String intro;//活动介绍 + public String activity_city;//活动城市(例如:北京) + public String address;//活动具体地址(例如:海淀区维亚大厦) + public String ip_city;//IP定位当前城市(发布活动人的ip城市) + public String start_date;//活动开始时间(例如:2018-06-30) + public String end_date;//活动结束时间(例如:2018-07-01) + public String category;//活动分类(例如:自驾、骑行、登山等) + public String activity_type;//线上活动|线下活动 + public boolean auth; + public boolean showbar; + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AdvertiserBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AdvertiserBean.java new file mode 100644 index 0000000..e5dc537 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AdvertiserBean.java @@ -0,0 +1,26 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xingchao.song on 4/25/2016. + */ +public class AdvertiserBean extends BaseJsonResult { + public int adsec; + public int interval; + public boolean carousel; + public int carouseldelay; + public boolean shown; + public boolean allowskip; + public long version; + public String skiptips; + public List adlist; + + public static class AdContent { + public int adtype; + public String linkurl;//图片点击后的跳转地址 + public String imgurl; + public String url; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AlipayAuthResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AlipayAuthResult.java new file mode 100644 index 0000000..0357daf --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AlipayAuthResult.java @@ -0,0 +1,117 @@ +package com.qunar.im.base.jsonbean; + +import android.text.TextUtils; + +import java.util.Map; + +/** + * Created by froyomu on 2019-08-27 + *

+ * Describe: + */ +public class AlipayAuthResult { + private String resultStatus; + private String result; + private String memo; + private String resultCode; + private String authCode; + private String alipayOpenId; + + public AlipayAuthResult(Map rawResult, boolean removeBrackets) { + if (rawResult == null) { + return; + } + + for (String key : rawResult.keySet()) { + if (TextUtils.equals(key, "resultStatus")) { + resultStatus = rawResult.get(key); + } else if (TextUtils.equals(key, "result")) { + result = rawResult.get(key); + } else if (TextUtils.equals(key, "memo")) { + memo = rawResult.get(key); + } + } + + String[] resultValue = result.split("&"); + for (String value : resultValue) { + if (value.startsWith("alipay_open_id")) { + alipayOpenId = removeBrackets(getValue("alipay_open_id=", value), removeBrackets); + continue; + } + if (value.startsWith("auth_code")) { + authCode = removeBrackets(getValue("auth_code=", value), removeBrackets); + continue; + } + if (value.startsWith("result_code")) { + resultCode = removeBrackets(getValue("result_code=", value), removeBrackets); + continue; + } + } + + } + + private String removeBrackets(String str, boolean remove) { + if (remove) { + if (!TextUtils.isEmpty(str)) { + if (str.startsWith("\"")) { + str = str.replaceFirst("\"", ""); + } + if (str.endsWith("\"")) { + str = str.substring(0, str.length() - 1); + } + } + } + return str; + } + + @Override + public String toString() { + return "resultStatus={" + resultStatus + "};memo={" + memo + "};result={" + result + "}"; + } + + private String getValue(String header, String data) { + return data.substring(header.length(), data.length()); + } + + /** + * @return the resultStatus + */ + public String getResultStatus() { + return resultStatus; + } + + /** + * @return the memo + */ + public String getMemo() { + return memo; + } + + /** + * @return the result + */ + public String getResult() { + return result; + } + + /** + * @return the resultCode + */ + public String getResultCode() { + return resultCode; + } + + /** + * @return the authCode + */ + public String getAuthCode() { + return authCode; + } + + /** + * @return the alipayOpenId + */ + public String getAlipayOpenId() { + return alipayOpenId; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AlipayResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AlipayResult.java new file mode 100644 index 0000000..e9ac073 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AlipayResult.java @@ -0,0 +1,59 @@ +package com.qunar.im.base.jsonbean; + +import android.text.TextUtils; + +import java.util.Map; + +/** + * Created by froyomu on 2019-08-27 + *

+ * Describe: + */ +public class AlipayResult { + private String resultStatus; + private String result; + private String memo; + + public AlipayResult(Map rawResult) { + if (rawResult == null) { + return; + } + + for (String key : rawResult.keySet()) { + if (TextUtils.equals(key, "resultStatus")) { + resultStatus = rawResult.get(key); + } else if (TextUtils.equals(key, "result")) { + result = rawResult.get(key); + } else if (TextUtils.equals(key, "memo")) { + memo = rawResult.get(key); + } + } + } + + @Override + public String toString() { + return "resultStatus={" + resultStatus + "};memo={" + memo + + "};result={" + result + "}"; + } + + /** + * @return the resultStatus + */ + public String getResultStatus() { + return resultStatus; + } + + /** + * @return the memo + */ + public String getMemo() { + return memo; + } + + /** + * @return the result + */ + public String getResult() { + return result; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AtInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AtInfo.java new file mode 100644 index 0000000..2956a6a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AtInfo.java @@ -0,0 +1,35 @@ +package com.qunar.im.base.jsonbean; + +import android.text.TextUtils; + +/** + * Created by froyomu on 2019/5/9 + *

+ * Describe: + */ +public class AtInfo implements Comparable{ + public String msgId; + public String xmppid; + public String from; +// public String atcontent; + public boolean isAtAll; + + @Override + public int compareTo(AtInfo another) { + return this.getMsgId().compareTo(another.getMsgId()); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if(this.getMsgId() == null) return false; + String msgId = ((AtInfo)o).getMsgId(); + if(TextUtils.isEmpty(msgId)) return false; + return this.getMsgId().equals(msgId); + } + + public String getMsgId() { + return msgId; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/AutoDestroyMessageExtention.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AutoDestroyMessageExtention.java new file mode 100644 index 0000000..7d4051d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/AutoDestroyMessageExtention.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-8-20. + */ +public class AutoDestroyMessageExtention extends BaseResult { + public int msgType; + public String descStr; + public String message; + // the value is true or false + public String hasRead; + public int duration; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/BaseJsonResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BaseJsonResult.java new file mode 100644 index 0000000..9fe1dff --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BaseJsonResult.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-9-14. + */ +public class BaseJsonResult extends BaseResult { + public Object errcode; + public String errmsg; + public boolean ret; + public int ver; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/BaseResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BaseResult.java new file mode 100644 index 0000000..1088634 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BaseResult.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +import java.io.Serializable; + +/** + * Created by wujunwen on 14-5-8. + */ +public class BaseResult implements Serializable { + public interface BaseData { + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/BatchGroupHistoryMessageRequest.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BatchGroupHistoryMessageRequest.java new file mode 100644 index 0000000..83ef607 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BatchGroupHistoryMessageRequest.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-9-23. + */ +public class BatchGroupHistoryMessageRequest extends BaseResult { + public String M; + public String T; + public String D; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/BatchGroupHistoryMessageResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BatchGroupHistoryMessageResult.java new file mode 100644 index 0000000..e1f2570 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BatchGroupHistoryMessageResult.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 15-9-23. + */ +public class BatchGroupHistoryMessageResult extends BaseJsonResult { + public List data; + public static class BatchGroupHistoryMsgData + { + public long Time; + public String ID; + public String Domain; + public List Msg; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/BuddyItem.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BuddyItem.java new file mode 100644 index 0000000..2f28dc8 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/BuddyItem.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +import com.qunar.im.base.module.BaseModel; + +import java.io.Serializable; + + +public class BuddyItem extends BaseModel implements Serializable { + public String F; //id + public String V; //version + public String H; +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ButtonMessageJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ButtonMessageJson.java new file mode 100644 index 0000000..a8044b4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ButtonMessageJson.java @@ -0,0 +1,44 @@ +package com.qunar.im.base.jsonbean; + +import java.util.Map; + +public class ButtonMessageJson { + + private String content; + private String middleContent; + private String url; + private Map requestPost; + + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getMiddleContent() { + return middleContent; + } + + public void setMiddleContent(String middleContent) { + this.middleContent = middleContent; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Map getRequestPost() { + return requestPost; + } + + public void setRequestPost(Map requestPost) { + this.requestPost = requestPost; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/CalendarVersion.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CalendarVersion.java new file mode 100644 index 0000000..2694497 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CalendarVersion.java @@ -0,0 +1,19 @@ +package com.qunar.im.base.jsonbean; + +public class CalendarVersion { + + + /** + * updateTime : 1535705748120 + */ + + private String updateTime; + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/CapabilityResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CapabilityResult.java new file mode 100644 index 0000000..39f9612 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CapabilityResult.java @@ -0,0 +1,24 @@ +package com.qunar.im.base.jsonbean; + +import com.qunar.im.base.structs.FuncButtonDesc; + +import java.util.List; +import java.util.Map; + +/** + * Created by saber on 15-12-31. + */ +public class CapabilityResult extends BaseJsonResult{ + public int version; + public boolean exists; + public String company; + public Ability ability; + public Map otherconfig; + public List trdextendmsg; + + public static class Ability + { + public List base; + public List group; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/CheckFileResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CheckFileResult.java new file mode 100644 index 0000000..19f632e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CheckFileResult.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 16-2-15. + */ +public class CheckFileResult { + public boolean ret; + public Object msg; + public String data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionCardData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionCardData.java new file mode 100644 index 0000000..0dd9a42 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionCardData.java @@ -0,0 +1,103 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2017/11/28. + */ + +public class CollectionCardData { + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : [{"username":"hubo.hu","domain":"qunar.com","usernick":"胡泊hu","url":"file/v2/download/avatar/c3232e4f8b18dcc109f6a8df2c4198cf.jpg?name=c3232e4f8b18dcc109f6a8df2c4198cf.jpg&file=c3232e4f8b18dcc109f6a8df2c4198cf.jpg&fileName=c3232e4f8b18dcc109f6a8df2c4198cf.jpg","version":2}] + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String username; + private String domain; + private String usernick; + private String url; + private int version; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getUsernick() { + return usernick; + } + + public void setUsernick(String usernick) { + this.usernick = usernick; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionMucCardData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionMucCardData.java new file mode 100644 index 0000000..59ff5a5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionMucCardData.java @@ -0,0 +1,115 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2017/11/28. + */ + +public class CollectionMucCardData { + + + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * muc_name : 1860101e80444e8082022fbc71ff58dd@conference.ejabhost1 + * show_name : 111111111222111 + * muc_desc : + * muc_title : 222222222222222222222 + * muc_pic : file/v2/download/perm/bc0fca9b398a0e4a1f981a21e7425c7a.png + * version : 2 + */ + + private String muc_name; + private String show_name; + private String muc_desc; + private String muc_title; + private String muc_pic; + private int version; + + public String getMuc_name() { + return muc_name; + } + + public void setMuc_name(String muc_name) { + this.muc_name = muc_name; + } + + public String getShow_name() { + return show_name; + } + + public void setShow_name(String show_name) { + this.show_name = show_name; + } + + public String getMuc_desc() { + return muc_desc; + } + + public void setMuc_desc(String muc_desc) { + this.muc_desc = muc_desc; + } + + public String getMuc_title() { + return muc_title; + } + + public void setMuc_title(String muc_title) { + this.muc_title = muc_title; + } + + public String getMuc_pic() { + return muc_pic; + } + + public void setMuc_pic(String muc_pic) { + this.muc_pic = muc_pic; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionUserBindData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionUserBindData.java new file mode 100644 index 0000000..33dffe4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/CollectionUserBindData.java @@ -0,0 +1,104 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2017/11/30. + */ + +public class CollectionUserBindData { + + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : [{"bindname":"lihaibin.li","user_name":"李海彬li","action":1,"bindhost":"qunar.com","url":null},{"bindname":"hubo.hu","user_name":"胡泊hu","action":1,"bindhost":"qunar.com","url":"file/v2/download/avatar/7529949ae407925f7c4123a1b47c7487.jpg?name=7529949ae407925f7c4123a1b47c7487.jpg&file=7529949ae407925f7c4123a1b47c7487.jpg&fileName=7529949ae407925f7c4123a1b47c7487.jpg"},{"bindname":"lffan.liu","user_name":"刘帆lf","action":1,"bindhost":"qunar.com","url":"/file/v2/download/avatar/856ceefaf6e145f3ed9fd3a5634d1dc6.gif?name=856ceefaf6e145f3ed9fd3a5634d1dc6.gif&file=file/856ceefaf6e145f3ed9fd3a5634d1dc6.gif&fileName=file/856ceefaf6e145f3ed9fd3a5634d1dc6.gif"},{"bindname":"hubin.hu","user_name":"胡滨hubin","action":1,"bindhost":"qunar.com","url":null}] + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String bindname; + private String user_name; + private int action; + private String bindhost; + private String url; + + public String getBindname() { + return bindname; + } + + public void setBindname(String bindname) { + this.bindname = bindname; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public int getAction() { + return action; + } + + public void setAction(int action) { + this.action = action; + } + + public String getBindhost() { + return bindhost; + } + + public void setBindhost(String bindhost) { + this.bindhost = bindhost; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindMain.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindMain.java new file mode 100644 index 0000000..6ec6555 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindMain.java @@ -0,0 +1,20 @@ +package com.qunar.im.base.jsonbean; + +import com.qunar.im.base.module.BaseModel; + +import java.io.Serializable; + +/** + * Created by lihaibin.li on 2017/8/22. + */ + +public class DailyMindMain extends BaseModel implements Serializable{ + public int qid; + public String version; + public int type; + public String title; + public String desc; + public String content; + public int state;//State 枚举值 Delete(-1),Normal(1), Collection(2), Basket(3), Create(4),Update(4) + public int isComplete;//todolist 是否已完成 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindMainlList.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindMainlList.java new file mode 100644 index 0000000..dd7bf2b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindMainlList.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by lihaibin.li on 2017/8/23. + */ + +public class DailyMindMainlList extends BaseJsonResult { + public List data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindSub.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindSub.java new file mode 100644 index 0000000..4584796 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindSub.java @@ -0,0 +1,23 @@ +package com.qunar.im.base.jsonbean; + +import com.qunar.im.base.module.BaseModel; + +import java.io.Serializable; + +/** + * Created by lihaibin.li on 2017/8/22. + */ + +public class DailyMindSub extends BaseModel implements Serializable { + public int qsid; + public int qid; + public String version; + public int type; + public String title; + public String desc; + public String content; + public String P; + public String U; + public String time; + public int state;//State 枚举值 Delete(-1),Normal(1), Collection(2), Basket(3), Create(4),Update(4) +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindSubList.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindSubList.java new file mode 100644 index 0000000..0d35546 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DailyMindSubList.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by lihaibin.li on 2017/8/24. + */ + +public class DailyMindSubList extends BaseJsonResult { + public List data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DepartmentResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DepartmentResult.java new file mode 100644 index 0000000..bc7413e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DepartmentResult.java @@ -0,0 +1,21 @@ +package com.qunar.im.base.jsonbean; + + +import java.util.List; + +/** + * Created by zhaokai on 15-7-30. + */ +public class DepartmentResult extends BaseResult { + public String id; + public String D;//部门 + public List SD;//sub + public List UL;//person + + public static class PersonResult { + public String N; //full name + public String U; //id + public String S; //status 登录状态 + public String W;//webname + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DomainResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DomainResult.java new file mode 100644 index 0000000..19da0f3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DomainResult.java @@ -0,0 +1,19 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by froyomu on 2019/2/1 + *

+ * Describe: + */ +public class DomainResult extends BaseJsonResult{ + public List data; + + public class Result{ + public String nav; + public String domain; + public int domainId; + public String name; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/DownloadImageResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DownloadImageResult.java new file mode 100644 index 0000000..c42316a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/DownloadImageResult.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2015/3/13. + */ +public class DownloadImageResult extends BaseResult { + private boolean downloadComplete; + + public boolean isDownloadComplete() { + return downloadComplete; + } + + public void setDownloadComplete(boolean downloadComplete) { + this.downloadComplete = downloadComplete; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/EmotionEntry.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/EmotionEntry.java new file mode 100644 index 0000000..62e67ad --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/EmotionEntry.java @@ -0,0 +1,27 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by zhaokai on 15-8-4. + */ +public class EmotionEntry { + public String pkgid; + public String name; + public String file; + public String desc; + public String thumb; + public String md5; + public long file_size; + + public boolean progressing; + public boolean exist; + +// @Override +// public String toString() { +// return new StringBuilder() +// .append("name").append(name) +// .append("\nfile:").append(file) +// .append("\ndesc:").append(desc) +// .append("\nthumb:").append(thumb); +// //.append("\nmd5:").append(md5).toString(); +// } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/EncryptBeginMsg.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/EncryptBeginMsg.java new file mode 100644 index 0000000..41e16d2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/EncryptBeginMsg.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by lihaibin.li on 2017/8/28. + */ + +public class EncryptBeginMsg { + public int type; + public String pwd; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/EncryptMsg.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/EncryptMsg.java new file mode 100644 index 0000000..215823c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/EncryptMsg.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by lihaibin.li on 2017/9/5. + */ + +public class EncryptMsg { + public int MsgType; + public String Content; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ExtendEmoImgInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ExtendEmoImgInfo.java new file mode 100644 index 0000000..b8534f6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ExtendEmoImgInfo.java @@ -0,0 +1,63 @@ +package com.qunar.im.base.jsonbean; + +/** + * emoji image extend info json + * Created by lihaibin.li on 2018/2/5. + */ + +public class ExtendEmoImgInfo { + + /** + * url : + * width : 100 + * height : 100 + * pkgid : qunar_camel + * shortcut : 4600afd7a10bab5f3a0cd0b29171058b + */ + + private String url; + private int width; + private int height; + private String pkgid; + private String shortcut; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public String getPkgid() { + return pkgid; + } + + public void setPkgid(String pkgid) { + this.pkgid = pkgid; + } + + public String getShortcut() { + return shortcut; + } + + public void setShortcut(String shortcut) { + this.shortcut = shortcut; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ExtendMessageEntity.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ExtendMessageEntity.java new file mode 100644 index 0000000..759e21e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ExtendMessageEntity.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2016/6/30. + */ +public class ExtendMessageEntity extends BaseResult { + public String desc; + public String title; + public String linkurl; + public String img; + public String reacturl; + public boolean showbar=true; + public boolean auth; + public boolean showas667=false; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/FixPullRequest.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/FixPullRequest.java new file mode 100644 index 0000000..46db6e5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/FixPullRequest.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by lihaibin.li on 2017/8/17. + */ + +public class FixPullRequest { + public String versionName; + public String timeStamp; + public String smallVersion = "1.0"; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/FixPullResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/FixPullResult.java new file mode 100644 index 0000000..373ffed --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/FixPullResult.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by lihaibin.li on 2017/8/17. + */ + +public class FixPullResult { + public String isHasPatch;//“0” //是否有新补丁(0没有1有) + public String downloadUrl; + public String timeStamp;//“289489348” //当前最新补丁时间戳 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GeneralJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GeneralJson.java new file mode 100644 index 0000000..847f0c3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GeneralJson.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +import java.util.Map; + +/** + * Created by xinbo.wang on 2016/5/26. + */ +public class GeneralJson extends BaseJsonResult { + public Map data; + public String msg; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GeneralStringJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GeneralStringJson.java new file mode 100644 index 0000000..ddaa808 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GeneralStringJson.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2016/5/30. + */ +public class GeneralStringJson extends BaseJsonResult { + public String data; + public String local; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetDepInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetDepInfo.java new file mode 100644 index 0000000..23701cb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetDepInfo.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2015/4/2. + */ +public class GetDepInfo extends BaseResult { + public String U; + public String D; + public String N; + public int S; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetDepartmentResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetDepartmentResult.java new file mode 100644 index 0000000..1049258 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetDepartmentResult.java @@ -0,0 +1,108 @@ +package com.qunar.im.base.jsonbean; + +import com.orhanobut.logger.Logger; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +/** + * create by haibin + * 解析组织架构 + */ +public class GetDepartmentResult extends BaseResult { + public String D; + public List UL; + public List SD; + + public GetDepartmentResult(String d) { + D = d; + UL = new ArrayList<>(); + SD = new ArrayList<>(); + } + + public GetDepartmentResult() { + UL = new ArrayList<>(); + SD = new ArrayList<>(); + } + + public boolean addUser(UserItem userInfo) { + return UL.add(userInfo); + } + + public List getChild() { + return SD; + } + + public String getDep() { + return D; + } + + public Integer containChild(String str) { + int index = 0; + boolean flag = false; + for (GetDepartmentResult dep : SD) { + if (dep.getDep().equals(str)) { + flag = true; + break; + } + index++; + } + if (flag) { + return index; + } else { + return -1; + } + } + public static List Structured(List usersInfo) { + + Logger.i("数据进行组织结构化开始."); + if (usersInfo == null || usersInfo.isEmpty()) { + return new GetDepartmentResult().getChild(); + } + GetDepartmentResult company = new GetDepartmentResult(); + for (UserItem user : usersInfo) { + + GetDepartmentResult orgaStructure = company; + List OrganTemp; + List Organ = new ArrayList<>(); + try { + OrganTemp = Arrays.asList(user.D.split("/")); + if (OrganTemp == null || OrganTemp.isEmpty()) { + continue; + } + } catch (Exception e) { + Logger.e("{}员工的部门:{}不合法", user.U, user.N); + continue; + } + Organ.addAll(OrganTemp); + Iterator iter = Organ.iterator(); + while (iter.hasNext()) { + String dep = iter.next(); + if (dep.equals(null) || dep.equals("")) { + continue; + } + int indexChild = orgaStructure.containChild(dep); + if (indexChild == -1) { + orgaStructure.getChild().add(new GetDepartmentResult(dep)); + indexChild = orgaStructure.getChild().size() - 1; + } + orgaStructure = orgaStructure.getChild().get(indexChild); + } + orgaStructure.addUser(user); + } + Logger.i("数据进行组织结构化完成!"); + return company.getChild(); + } + + static public class UserItem implements BaseData + { + public String U; + public String D; + public String N; + public int S; + public String Fp; + public String Sp; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetGroupOfflineMessageRequest.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetGroupOfflineMessageRequest.java new file mode 100644 index 0000000..fb9acbe --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetGroupOfflineMessageRequest.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jsonbean; + +import com.qunar.im.base.util.Constants; + +/** + * Created by xingchao.song on 9/14/2015. + */ +public class GetGroupOfflineMessageRequest { + public String muc_name; + public String timestamp; + public String limitnum; + public String direction; + public String domain = Constants.Config.PUB_NET_XMPP_Domain; + public String type="0"; + public String u; + public String k; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMoodResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMoodResult.java new file mode 100644 index 0000000..c30b1a9 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMoodResult.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by zhaokai on 16-2-2. + */ +public class GetMoodResult extends BaseJsonResult { + public List data; + + public static final class Data{ + public String U; + public String V; + public String M; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMucVCardData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMucVCardData.java new file mode 100644 index 0000000..0535e7d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMucVCardData.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/6/4. + */ +public class GetMucVCardData extends BaseResult { + public String domain; + public List mucs; + static public class MucInfo{ + public String muc_name; + public String version; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMucVCardResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMucVCardResult.java new file mode 100644 index 0000000..e3ec11d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetMucVCardResult.java @@ -0,0 +1,26 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/6/4. + */ +public class GetMucVCardResult extends BaseResult { + + public List data; + + static public class ExtMucVCard + { + public String domain; + public List mucs; + } + static public class MucVCard implements BaseData + { + public String MN; + public String SN; + public String MD; + public String MT; + public String MP; + public String VS; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSMSCodeResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSMSCodeResult.java new file mode 100644 index 0000000..cc06475 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSMSCodeResult.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2015/4/2. + */ +public class GetSMSCodeResult extends BaseResult { + public int status_id; + public String status = ""; + public String msg = ""; + public Object data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSingleConvRecord.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSingleConvRecord.java new file mode 100644 index 0000000..cfcad67 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSingleConvRecord.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 16-2-2. + */ +public class GetSingleConvRecord extends BaseResult { + public String from; + public String to; + public String from_host; + public String to_host; + public long timestamp; + public int limitnum; + public String direction; + public String u; + public String k; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSingleDurationRecord.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSingleDurationRecord.java new file mode 100644 index 0000000..be33842 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetSingleDurationRecord.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 16-2-2. + */ +public class GetSingleDurationRecord extends BaseResult { + public String User; + public String Host; + public long Time; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUpdateInfoResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUpdateInfoResult.java new file mode 100644 index 0000000..d57ccc4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUpdateInfoResult.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-7-14. + */ +public class GetUpdateInfoResult extends BaseResult { + public UpdateResponse data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUserAbridgeResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUserAbridgeResult.java new file mode 100644 index 0000000..dbe91ca --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUserAbridgeResult.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2015/4/3. + */ +public class GetUserAbridgeResult extends BaseResult { + public String U; + public String FPY; + public String FSX; + public String SPY; + public String SSX; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUserStatus.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUserStatus.java new file mode 100644 index 0000000..8bf8580 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetUserStatus.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 16-1-27. + */ +public class GetUserStatus extends BaseResult { +// public String domain; + public List users; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetVCardData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetVCardData.java new file mode 100644 index 0000000..fc2fb33 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetVCardData.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/5/26. + */ +public class GetVCardData extends BaseResult { + public List users; + public String domain; + public static class UserVCardInfo + { + public String user; + public String version; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetVCardResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetVCardResult.java new file mode 100644 index 0000000..7b04b2d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GetVCardResult.java @@ -0,0 +1,35 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; +import java.util.Map; + +/** + * Created by xinbo.wang on 2015/5/26. + */ +public class GetVCardResult extends BaseJsonResult { + + public List data; + + static public class VCardGroup implements BaseData + { + public String domain; + public List users; + } + + static public class VCardInfoN + { + public String V=""; + public String commenturl=""; + public String type=""; + public String loginName=""; + public String mobile=""; + public String username=""; + public String email=""; + public String imageurl=""; + public Object gender=""; + public String nickname=""; + public String webname=""; + public String mood = ""; + public List> extentInfo; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupChatOfflineMsg.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupChatOfflineMsg.java new file mode 100644 index 0000000..a9189ac --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupChatOfflineMsg.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +import java.util.ArrayList; + +/** + * Created by xingchao.song on 9/14/2015. + */ +public class GroupChatOfflineMsg { + public long Time; + public ArrayList Msg; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupChatOfflineResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupChatOfflineResult.java new file mode 100644 index 0000000..2b4f0dc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupChatOfflineResult.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 9/14/2015. + */ +public class GroupChatOfflineResult extends BaseJsonResult { + + public GroupChatOfflineMsg data; + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupPushDataBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupPushDataBean.java new file mode 100644 index 0000000..aabd7b2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/GroupPushDataBean.java @@ -0,0 +1,87 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +public class GroupPushDataBean { + + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : [{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"edddb8ea62884d55b5df26bc5090296b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"084b680d3a1543a7b54b5bbd412ade2f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2769f94fae404aada0c494883c683042"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"318467d626b34258bb7861cd0efecd41"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"1549865f4765446a8e538379de15aca6"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"34feae8c276241eca66ab37021df736e"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"46abe81f13514a46b05bd6c7ae88d021"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"7c0ff35f4b2a40868eb511c598e1eea4"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"4fb1d0f4c2224405b359f44559271aeb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"faa3a6d63f204a979f78d41d3f60ee30"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"d81975ab17a14af780821a76c6f6957b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"6ad3b85eec7449dab6f7427e10eb77fa"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"27cef1bf26ba49b6a5b822ac1e25dd76"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9d87dd8b720d4e14a409f291899bb74f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f4c59bc5cce34bc5b24371d8279b2ba3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"6be88c417fb14a38b4414d617089f955"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"bae3fca02c77424fbb8a88e6fe360ab0"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"74efec3aa0b14d4ca3050a40f1432939"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"1c2d037c780c4c24b331dc7bbed7350b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"abafd20311384ff8ac67cbb9df3efb97"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c4cef279cd7749d5804b7c882d38b33f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9315359459eb42c1a4bdfb3f623f96aa"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a54436e068034a76bdb7a3501f27cf5c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"67508e9ed505455798031fe63c3507b4"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"5e5149a67dc249958a4a1beea9700b1c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"987fb8a4485c41b1b5ec177da3fe245d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"d48481c8316142359a3c2a97e342dbc5"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f803f54c9e804414868746eff5f984ea"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9dc8abb3a83a4614bc4e9896bdb4d56b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"dba632082f6b4c7f89159c47537df561"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"36c7d624db804c78ae3382b384dde18d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"d0efb48ac1fe4895b11247c6e0939236"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a6f23776d3674182b500e42dc65c66d0"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"66236c3da0d244db8201a5ce3e0396b9"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"13a51a8292d44b8aa46633dccd6653bc"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"208d6e74844b41459277208a26706344"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"52386dd125494289be5c34fd9a9b9ae9"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"441da1be32d94751bb2c44b6b93e332c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e62940e93d4443aba8c9293d85f91c69"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8a84131f63cc48c185f245f9cdc8737c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e9d636e22fa640ebb32253e4d594822a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8ebbe0bf9b8547c0a11a9bede7948e2b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"d7427c406b6f4187bc4b53c25d13dd4a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f6c13d0024184fe8869ddb668c496725"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3f1559226a3741ee8cbb213a251887d1"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"6e68a8a4b4a547fbae62d81ff12c438c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"ee1aee7d51104725b6c17d0c5b1d0dcb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a27583797eca46838b277c6a8c2e729d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"85cc4ea744ef4f638fb586102927c9b5"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"90d25644239f4ecdb7062c9964a0d0f1"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e048faf3c4674eda8a33466f42c2c525"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"431bb1d42d694cabaa16a088438afc14"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"cca03ebf7efc40b6ab9aff7bcc5dd2c2"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"eac6d8780d13434d8c0cd10c663abfcb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"65691f0bdf8641e8aeb5dffb428a009f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"0a5148aaddbf40a3b32377506778e1f1"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a22f2c4984624bc8afd68ab176ec4d6c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"143ee18f64e84187aff1ed87fdf7fcc3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3ed22f754b9b44df8202f76c46d31796"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a905a36e847846139554d8db297c8921"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"29262a8ae6754c4c83aee97fe97e003c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f4a55c57ae8a407ab1a50649ae8c7ece"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"dujia-mobile"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a63f82f0e80d4b0f98dc272421d31c50"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"7eb617eafb1c480b931d9451f046c441"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"902a0f91fb844802b831677ee6d7b40d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"84c80a1395f941dfa2426d9346803ba3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"592b262ccdb443ef941eb3217f0133ea"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"618b7c48bece447e9bf203e144a12652"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"qunartalk官方讨论群"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"b4fb34b730344cb7bb7c8d67715107c7"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f19d580e243f4f50b34a1ea85dec9704"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"98b1521e52144a88b1b05e984305a2da"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"b5f338a86c05413c95a39362c35f527a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"238355a6c6ad4593b8d95afb690ac283"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8ee3fae53f834632be414de2fff7ecda"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"63b20529b65f49bfbb049c5829b9da1f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"498650e90e654fde809b3a848450bf94"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"69c114366a804dfd82c6c63af2614998"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"214b62a83ada4180ae82bd22dc186895"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"0f6ed0741827481db19b736b65c27093"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"662efb0402794f3eaa08618941b39063"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"0d9700176a32465e90e60b36f06e925f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e607ae396cae4ade8fd23b9f6b79c162"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"632ccc984acb4f76b321630b317a9ee6"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"7701a66c58cb4bc3a3daabc45aa2372a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"4e404c93aedf45d093d0d98942f9e8af"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3393834079514210891e953f2eda75cb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"5e5fd387247240f4b04495b88c5b5f87"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"358828e0b4774503bf124c72bacb699a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"fcf0b349acef4e04b2fb3212e3583ac0"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3cb870caf3a94922af3c4e58ff3ef153"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"daf6750473524b3094ef1ffb4bb943c1"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"b51cad9a88f64caa978064e1dacfc747"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"809c515d208d4e059708dd9f87915dc2"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"78821f227e1c42c88edd24f501a6c02d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"4205452c68d248be97ecfdf1aead46ad"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"bcc42be3e638496199929270b4df5ec4"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e29e6b88db524c71945b928fdbfeceb8"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"68dd367582c040a28d1739ad187ba764"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"257fbce2b47041109a791c48259deb0e"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c685ac387a714919b3558844d6cd7233"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"23732e76d6424a98ba8fb0d2b1bf2309"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"426b9050b2a04f11a6c0dbb6a11f214c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9824252bb0c4446e9858f925aede05a6"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e01d79a8c5b44f1eb5a1737eb1b7a848"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"20c73f98d4dc43c0afa28b49e2164474"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9e4ad4bfa20148c092e6f55f6b49f309"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"21a8070558644a119a24dc81765c37fb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e73d8a04e71b49499d836ec2692750ea"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"ac0e9629a4f74b17968cb5e5e0f436bc"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"daf606dc87b34dcc82d193a30cd612aa"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"080507164895475380505e8c1ef0fc13"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"657a21a4576c4a80828b2399a8c0806d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"cf4d1539824048b6b974ff10d741f8e2"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c37bd197cfdd470bb150ef331e0bd5ab"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"ad635a93326f448ab604697c5e26ebc5"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c1951b79e4e4418491bf5ecc9579e9f8"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"bf3395172a80491e9995af92aa898746"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2323521b8ec143429e43b543b8f434b0"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e41bdf7dd69e400993caeda0ae69a810"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"578a344f9e584bee997344d725dccbe7"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"1f32f1a8d19d40dba2a2d6494ab5d6b5"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"203e8a80fe794b408aae98aa7872ccd3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"920794dfe0b54e3a98a9899bad35002c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"107185b77a924abeb158fc06febf0eeb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"d6a41dd1d76b4d069818a25f22c3687b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2cb9b77022a5405eb526394615ba4e5c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2c223af85aef4b8596d91c53a257a0e7"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2652a16b88454158a36160e5345851c7"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"aab336487aef4d6390addb97d473a945"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c6afd6eea2ff4df1a3672a7cee4950d3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"994c03aa5d424b6b81267d60fd336235"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"168380742f8e43bdab2a0aa8bce3e90e"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9350941e21db46f9ab140f598c68d82d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2c97d5be06174b24b9bee00f05876e35"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"4044aba3bb9149bfb1ad2e7c8d3528d6"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"85aa3040486c4f42a3377fa4f46c89f5"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"6e5bdd4a62d04d7eb75964cf3753facc"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2449cc764d4b4e92ae5c178ab902bd14"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c228eed4da1f422584a6b459d0c73f6b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"406b150e55bb48f3bf3aa3f7844db91e"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"01a6e799845e4179951b4eadcd15aebc"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"51c17149646540bd9bffb62cf90844e1"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8819ae96ffad4585b35c41e083ce512a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2381b6856ab04ab6a6ff5b25e070d160"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8e4d1f42a85b46718bda734e79bbf562"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"7f50ad85b122486b96a4d7f5352ec066"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"6470d034ce004ddfac6d237f1e3dccf8"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"35ee37404a264e2fa96527aa022daa92"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"2fa684f370454f10833cf8bfbeea56f3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8334f21b56c1432e80bc65f7345cde58"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"1ea8c399f0a54a85baf1127a40d12642"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"8cf221d6fea742988f232bd7c226ec0b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"89ae0461c7844abe9eab345047ccc9f8"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"a42e2cd409284ec6ae2b111da6dffe56"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"b196b50127fb4bada2d029a18277e46e"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"93f719f8777e489da4d9de33bd2b2fb5"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"ed5c6ca952544ae7b1117fe8f1c0a863"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3f4fb18ecd5b4901bd27b469ec6d4f8c"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9967e560c8464558b167c3bef5fd4cde"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"dc2f5d66f3be4b7eb417bce516277dba"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"79ba92e874a344d28f004b05cbf3c3b1"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"b29b5525412941b5a5cb3fe506469144"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"d5959394925e4890a649cb85c775f4e9"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"84044cc9095c4c6ca96e407dd55ff28a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"24fdd411e708422e9cc0545c302b76cd"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f7bd88a576a647f2a82df3a9c791f192"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"ffa2ed6b4b8e4c5f981aac8dd0c41796"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"b425715bad3a470aac3d16113082cc50"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"92a1fe4b8f3b41b4805378c2eadb29f8"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3961f43ddee44222a434cbdf7de92f5b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f273a142f23047369c19aab73bc80b6c"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"去哪儿度假bu"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"qtalk客户端开发群"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"d7ffaa2650ba42f9983dd8a63d21f682"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9c359c38adcb4e1792df1bd545d6ba36"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"8f483574851d4269abafadae11db77bb"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"5888daa4bc354efb8e44c7321fee740f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"android搬砖攻城队"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"bafdf8dcc8054145a813be8c2d5f63f3"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"703d98fca48d4ea89e44df7d93aea699"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"e60d1e69adfa4164a0c5fa54d59fb68f"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"515a6c1132c44ad2a854a1df4b23ce24"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"7ade4fd537cc4122aafd2cfbc38f31e6"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"f8f847af687647e39cd701afeca35053"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"6f2a17a5e4e34f33bfca0a34f14381f7"},{"subscribe_flag":"0","domain":"conference.ejabhost1","muc_name":"7dad2d03f22244d4959f008b2317be0a"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"958573b2ae0d49e0aa15cbbfb7d84500"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"36686768ce5a4a449fd89aa3d2988033"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"9abf8a4acefe45b9a16dd39e95e9a232"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"3a343ac8ea5c45b9a0dc5477302d641d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"731a011950b44282ba9e033b8502764b"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"c0f0015e3edd4662bf2120d7ea393093"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"4dfe5ecbec6b41fa913d5d8b60f13253"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"eeb32cf71e554f0ca606c3ca43ba922d"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"bccd5ee89bfb4b7bad223a7dfcd82bf0"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"58b668ee8a3c48618b86166920116036"},{"subscribe_flag":"1","domain":"conference.ejabhost1","muc_name":"903c59d7b5944d9d9a1f76d98b097642"},{"subscribe_flag":"1","domain":"conference.ejabhost2","muc_name":"0d436780d3ec47cea4bc392539da3298"},{"subscribe_flag":"1","domain":"conference.ejabhost2","muc_name":"40c82822316d45f3b10c538d0f51de13"},{"subscribe_flag":"1","domain":"conference.ejabhost2","muc_name":"e5c75aef224e486bb410115c4af40e4e"}] + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * subscribe_flag : 1 + * domain : conference.ejabhost1 + * muc_name : edddb8ea62884d55b5df26bc5090296b + */ + + private String subscribe_flag; + private String domain; + private String muc_name; + + public String getSubscribe_flag() { + return subscribe_flag; + } + + public void setSubscribe_flag(String subscribe_flag) { + this.subscribe_flag = subscribe_flag; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getMuc_name() { + return muc_name; + } + + public void setMuc_name(String muc_name) { + this.muc_name = muc_name; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/HongbaoBroadcast.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/HongbaoBroadcast.java new file mode 100644 index 0000000..02ed402 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/HongbaoBroadcast.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 16-1-6. + */ +public class HongbaoBroadcast { + public String Url; + public String From_User; + public String Open_User; + public String Type; + public String Typestr; + public int Balance; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/HongbaoContent.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/HongbaoContent.java new file mode 100644 index 0000000..31cc003 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/HongbaoContent.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 12/30/2015. + */ +public class HongbaoContent { + public String url ; + public String type; + public String typestr; + public String rid;//红包id + public String content;// + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/HotlinesResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/HotlinesResult.java new file mode 100644 index 0000000..2713755 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/HotlinesResult.java @@ -0,0 +1,23 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by Lex lex on 2018/7/30. + */ +public class HotlinesResult extends BaseJsonResult{ + + + public DataBean data; + + public static class DataBean { + /** + * allhotlines : {"qtalktesthotline@ejabhost1":"shop_5495@ejabhost2","shop_5489@ejabhost2":"shop_5489@ejabhost2"} + * myhotlines : ["test0","test1"] + */ + + public List allhotlines; + public List myhotlines; + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/IPAddressResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/IPAddressResult.java new file mode 100644 index 0000000..fc77c35 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/IPAddressResult.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 1/12/2016. + */ +public class IPAddressResult { + public String ip; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ImgVideoBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ImgVideoBean.java new file mode 100644 index 0000000..bf971ea --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ImgVideoBean.java @@ -0,0 +1,70 @@ +package com.qunar.im.base.jsonbean; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ImgVideoBean implements Parcelable{ + public static final int IMG = 0; + public static final int VIDEO = 1; + public String url; + public String thumbUrl; + public String fileName; + public String fileSize; + public String Width; + public String Height; + public String Duration; + public int type;//0:img 1:video + + + public ImgVideoBean(){ + + } + @Override + public boolean equals(Object o) { + if (o instanceof ImgVideoBean) { + ImgVideoBean item = (ImgVideoBean) o; + return this.url.equalsIgnoreCase(item.url); + } + + return super.equals(o); + } + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.url); + dest.writeString(this.thumbUrl); + dest.writeString(this.fileName); + dest.writeString(this.fileSize); + dest.writeInt(this.type); + dest.writeString(this.Width); + dest.writeString(this.Height); + dest.writeString(this.Duration); + } + + protected ImgVideoBean(Parcel in) { + this.url = in.readString(); + this.thumbUrl = in.readString(); + this.fileName = in.readString(); + this.fileSize = in.readString(); + this.type = in.readInt(); + this.Width = in.readString(); + this.Height = in.readString(); + this.Duration = in.readString(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public ImgVideoBean createFromParcel(Parcel source) { + return new ImgVideoBean(source); + } + + @Override + public ImgVideoBean[] newArray(int size) { + return new ImgVideoBean[size]; + } + }; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/IncrementUsersResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/IncrementUsersResult.java new file mode 100644 index 0000000..cecfd13 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/IncrementUsersResult.java @@ -0,0 +1,27 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 15-12-24. + */ +public class IncrementUsersResult extends BaseJsonResult { + public Data data; + public static class Data{ + public List update; + public List delete; + public int version; + } + public static class IncrementUser + { + public String U;//userid + public String N;//name + public String D;//部门 + public String pinyin;//快速查询 + public String sex; + public String uType;// + public String email;// + public String hire_type; + public boolean visibleFlag = true; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/InviteInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/InviteInfo.java new file mode 100644 index 0000000..61ed618 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/InviteInfo.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 16-1-7. + */ +public class InviteInfo extends BaseJsonResult { + public List data; + public static class FriendsInvite + { + public String I; + public String B; + public String T; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONChatHistorys.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONChatHistorys.java new file mode 100644 index 0000000..077aca2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONChatHistorys.java @@ -0,0 +1,316 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2017/12/5. + */ + +public class JSONChatHistorys { + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String from_host; + private String to_host; + private String from; + private TimeBean time; + private double t; + private String to; + private MessageBean message; + private BodyBean body; + private int read_flag; + + + public double getT() { + return t; + } + + public void setT(double t) { + this.t = t; + } + + public String getFrom_host() { + return from_host; + } + + public void setFrom_host(String from_host) { + this.from_host = from_host; + } + + public String getTo_host() { + return to_host; + } + + public void setTo_host(String to_host) { + this.to_host = to_host; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public TimeBean getTime() { + return time; + } + + public void setTime(TimeBean time) { + this.time = time; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public MessageBean getMessage() { + return message; + } + + public void setMessage(MessageBean message) { + this.message = message; + } + + public BodyBean getBody() { + return body; + } + + public void setBody(BodyBean body) { + this.body = body; + } + + public int getRead_flag() { + return read_flag; + } + + public void setRead_flag(int read_flag) { + this.read_flag = read_flag; + } + + public static class TimeBean { + /** + * stamp : 20171204T03:20:09 + */ + + private String stamp; + + public String getStamp() { + return stamp; + } + + public void setStamp(String stamp) { + this.stamp = stamp; + } + } + + public static class MessageBean { + + private String origintype; + private String originto; + private String msec_times; + private String originfrom; + private String from; + private String to; + private String realfrom; + private String realto; + private String type; + private String realjid; + private String client_type; + private String qchatid; + + public String getQchatid() { + return qchatid; + } + + public void setQchatid(String qchatid) { + this.qchatid = qchatid; + } + + public String getRealto() { + return realto; + } + + public void setRealto(String realto) { + this.realto = realto; + } + + public String getClient_type() { + return client_type; + } + + public void setClient_type(String client_type) { + this.client_type = client_type; + } + + public String getOrigintype() { + return origintype; + } + + public void setOrigintype(String origintype) { + this.origintype = origintype; + } + + public String getOriginto() { + return originto; + } + + public void setOriginto(String originto) { + this.originto = originto; + } + + public String getMsec_times() { + return msec_times; + } + + public void setMsec_times(String msec_times) { + this.msec_times = msec_times; + } + + public String getOriginfrom() { + return originfrom; + } + + public void setOriginfrom(String originfrom) { + this.originfrom = originfrom; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getRealfrom() { + return realfrom; + } + + public void setRealfrom(String realfrom) { + this.realfrom = realfrom; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getRealjid() { + return realjid; + } + + public void setRealjid(String realjid) { + this.realjid = realjid; + } + } + + public static class BodyBean { + /** + * maType : 1 + * msgType : 1 + * id : e1fb97e4dbc84799900a244cd921bd58_9EA7304C62E14F7183833468D41A6D0F + * content : 1 + */ + + private String maType; + private String msgType; + private String id; + private String content; + private String extendInfo; + + public String getExtendInfo() { + return extendInfo; + } + + public void setExtendInfo(String extendInfo) { + this.extendInfo = extendInfo; + } + + public String getMaType() { + return maType; + } + + public void setMaType(String maType) { + this.maType = maType; + } + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONMucHistorys.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONMucHistorys.java new file mode 100644 index 0000000..086e36b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONMucHistorys.java @@ -0,0 +1,264 @@ +package com.qunar.im.base.jsonbean; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +/** + * Created by hubin on 2017/12/5. + */ + + +public class JSONMucHistorys { + + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String nick; + private TimeBean time; + private double t; + private MessageBean message; + private BodyBean body; + + public String getNick() { + return nick; + } + + public void setNick(String nick) { + this.nick = nick; + } + + public double getT() { + return t; + } + + public void setT(double t) { + this.t = t; + } + + public TimeBean getTime() { + return time; + } + + public void setTime(TimeBean time) { + this.time = time; + } + + public MessageBean getMessage() { + return message; + } + + public void setMessage(MessageBean message) { + this.message = message; + } + + public BodyBean getBody() { + return body; + } + + public void setBody(BodyBean body) { + this.body = body; + } + + public static class TimeBean { + /** + * stamp : 20171204T12:45:19 + */ + + private String stamp; + + public String getStamp() { + return stamp; + } + + public void setStamp(String stamp) { + this.stamp = stamp; + } + } + + public static class MessageBean { + @SerializedName("xml:lang") + private String _$XmlLang132; // FIXME check this code + private String client_ver; + private String msec_times; + private String from; + private String to; + private String realfrom; + private String client_type; + private String type; + private String sendjid; + + public String get_$XmlLang132() { + return _$XmlLang132; + } + + public void set_$XmlLang132(String _$XmlLang132) { + this._$XmlLang132 = _$XmlLang132; + } + + public String getClient_ver() { + return client_ver; + } + + public void setClient_ver(String client_ver) { + this.client_ver = client_ver; + } + + public String getMsec_times() { + return msec_times; + } + + public void setMsec_times(String msec_times) { + this.msec_times = msec_times; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getRealfrom() { + return realfrom; + } + + public void setRealfrom(String realfrom) { + this.realfrom = realfrom; + } + + public String getClient_type() { + return client_type; + } + + public void setClient_type(String client_type) { + this.client_type = client_type; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public void setSendjid(String sendjid) { + this.sendjid = sendjid; + } + + public String getSendjid() { + return sendjid; + } + } + + public static class BodyBean { + /** + * msgType : 1 + * id : C123E0880EB24C9EB0B7A0CCF7DF94E2 + * content : [obj type="image" value="/file/v2/download/temp/a9b5e6cd8ad68938e9dd341df8345826.jpg?name=a9b5e6cd8ad68938e9dd341df8345826.jpg&file=file/a9b5e6cd8ad68938e9dd341df8345826.jpg&FileName=file/a9b5e6cd8ad68938e9dd341df8345826.jpg" width=200.000000 height=196.000000 ] + */ + + private String msgType; + private String id; + private String content; + private String extendInfo; + private String maType; + private String backupinfo; + + public String getBackupinfo() { + return backupinfo; + } + + public void setBackupinfo(String backupinfo) { + this.backupinfo = backupinfo; + } + + public String getExtendInfo() { + return extendInfo; + } + + public void setExtendInfo(String extendInfo) { + this.extendInfo = extendInfo; + } + + public String getMaType() { + return maType; + } + + public void setMaType(String maType) { + this.maType = maType; + } + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONReadMark.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONReadMark.java new file mode 100644 index 0000000..b0a3331 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/JSONReadMark.java @@ -0,0 +1,79 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2017/12/6. + */ + +public class JSONReadMark { + + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String muc_name; + private String domain; + private String date; + + public String getMuc_name() { + return muc_name; + } + + public void setMuc_name(String muc_name) { + this.muc_name = muc_name; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/LeadInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/LeadInfo.java new file mode 100644 index 0000000..22b4ab9 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/LeadInfo.java @@ -0,0 +1,83 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by hubin on 2018/3/30. + */ + +public class LeadInfo { + + + /** + * msg : 查询成功 + * data : + * errcode : 0 + */ + + private String msg; + private DataBean data; + private int errcode; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public static class DataBean { + + private String leader; + private String email; + private String qtalk_id; + private String sn; + + public String getLeader() { + return leader; + } + + public void setLeader(String leader) { + this.leader = leader; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getQtalk_id() { + return qtalk_id; + } + + public void setQtalk_id(String qtalk_id) { + this.qtalk_id = qtalk_id; + } + + public String getSn() { + return sn; + } + + public void setSn(String sn) { + this.sn = sn; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/Log.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/Log.java new file mode 100644 index 0000000..4f41baf --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/Log.java @@ -0,0 +1,45 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +public class Log { + public List infos; + public User user; + public Device device; + + public static class User{ + public String uid; + public String domain; + public String nav; + } + + public static class Device{ + + /** + * os : Android + * osBrand : BKL HUAWEI + * osModel : BKL-AL20 + * osVersion : 26 + * versionCode : 218 + * versionName : 3.1.0 + * plat : qtalk + * ip : 127.0.0.1 + * lat : 39.983605 + * lgt : 116.312536 + * net : WIFI + */ + + public String os; + public String osBrand; + public String osModel; + public int osVersion; + public String versionCode; + public String versionName; + public String plat; + public String ip; + public String lat; + public String lgt; + public String net; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/LogInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/LogInfo.java new file mode 100644 index 0000000..3166720 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/LogInfo.java @@ -0,0 +1,218 @@ +package com.qunar.im.base.jsonbean; + +import android.os.Looper; + +import java.util.ArrayList; +import java.util.List; + +/** + * 代码级日志 + */ +public class LogInfo { + private long threadId;//线程id + private String threadName;//线程名称 + private boolean isMainThread;//是否祝线程 + private long reportTime;//日志上报时间 + + private String describtion;//日志描述 + private String eventId; + private String currentPage;//当前页面 + private String type;//日志类型 + private String subType;//子类型 + + private long costTime;//耗时 + private String method; + private String url; + private String methodParams;//参数json串 + private String response; + private List sql = new ArrayList<>(); + + public static class SQL{ + public String content;//sql串 + public long time;//sql耗时 + public String args; + } + + public LogInfo(){ + this("","",""); + } + + public LogInfo(String type){ + this(type,""); + } + + public LogInfo(String type, String subType){ + this(type,subType,""); + } + + public LogInfo(String type, String subType, String describtion){ + this(type,subType,"",describtion,""); + } + + public LogInfo(String type, String subType, String eventId,String describtion,String currentPage){ + this.type = type; + this.subType = subType; + this.eventId = eventId; + this.describtion = describtion; + this.currentPage = currentPage; + this.threadId = Thread.currentThread().getId(); + this.threadName = Thread.currentThread().getName(); + this.isMainThread = Looper.getMainLooper().getThread() == Thread.currentThread(); + this.reportTime = System.currentTimeMillis(); + } + + public LogInfo type(String type){ + this.type = type; + return this; + } + + public LogInfo subType(String subType){ + this.subType = subType; + return this; + } + + public LogInfo eventId(String eventId){ + this.eventId = eventId; + return this; + } + + public LogInfo describtion(String describtion){ + this.describtion = describtion; + return this; + } + + public LogInfo currentPage(String currentPage){ + this.currentPage = currentPage; + return this; + } + + public LogInfo costTime(long costTime){ + this.costTime = costTime; + return this; + } + + public LogInfo method(String method){ + this.method = method; + return this; + } + + public long getThreadId() { + return threadId; + } + + public void setThreadId(long threadId) { + this.threadId = threadId; + } + + public String getThreadName() { + return threadName; + } + + public void setThreadName(String threadName) { + this.threadName = threadName; + } + + public boolean isMainThread() { + return isMainThread; + } + + public void setMainThread(boolean mainThread) { + isMainThread = mainThread; + } + + public long getReportTime() { + return reportTime; + } + + public void setReportTime(long reportTime) { + this.reportTime = reportTime; + } + + public String getDescribtion() { + return describtion; + } + + public void setDescribtion(String describtion) { + this.describtion = describtion; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getSubType() { + return subType; + } + + public void setSubType(String subType) { + this.subType = subType; + } + + public long getCostTime() { + return costTime; + } + + public void setCostTime(long costTime) { + this.costTime = costTime; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMethodParams() { + return methodParams; + } + + public void setMethodParams(String methodParams) { + this.methodParams = methodParams; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } + + public List getSql() { + return sql; + } + + public void setSql(List sql) { + this.sql = sql; + } + + public void setCurrentPage(String currentPage) { + this.currentPage = currentPage; + } + + public String getCurrentPage() { + return currentPage; + } + + public void setEventId(String eventId) { + this.eventId = eventId; + } + + public String getEventId() { + return eventId; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/MedalRemindDataBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MedalRemindDataBean.java new file mode 100644 index 0000000..1cbf7c7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MedalRemindDataBean.java @@ -0,0 +1,54 @@ +package com.qunar.im.base.jsonbean; + +public class MedalRemindDataBean { + + /** + * userId : hubin.hu@ejabhost1 + * strMap : {"allStr":"哇哦,勋章名,结语","highlightStr":"勋章名"} + */ + + private String userId; + private StrMapBean strMap; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public StrMapBean getStrMap() { + return strMap; + } + + public void setStrMap(StrMapBean strMap) { + this.strMap = strMap; + } + + public static class StrMapBean { + /** + * allStr : 哇哦,勋章名,结语 + * highlightStr : 勋章名 + */ + + private String allStr; + private String highlightStr; + + public String getAllStr() { + return allStr; + } + + public void setAllStr(String allStr) { + this.allStr = allStr; + } + + public String getHighlightStr() { + return highlightStr; + } + + public void setHighlightStr(String highlightStr) { + this.highlightStr = highlightStr; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/MessageStateSendJsonBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MessageStateSendJsonBean.java new file mode 100644 index 0000000..81138b1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MessageStateSendJsonBean.java @@ -0,0 +1,28 @@ +package com.qunar.im.base.jsonbean; + +import org.json.JSONArray; + +/** + * Created by hubin on 2018/3/8. + */ + +public class MessageStateSendJsonBean { + String userid; + JSONArray jsonArray; + + public String getUserid() { + return userid; + } + + public void setUserid(String userid) { + this.userid = userid; + } + + public JSONArray getJsonArray() { + return jsonArray; + } + + public void setJsonArray(JSONArray jsonArray) { + this.jsonArray = jsonArray; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/MucHistorys.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MucHistorys.java new file mode 100644 index 0000000..aef9add --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MucHistorys.java @@ -0,0 +1,209 @@ +package com.qunar.im.base.jsonbean; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +/** + * Created by hubin on 2017/9/29. + */ + +public class MucHistorys { + + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private TimeBean time; + private MessageBean message; + private BodyBean body; + + public TimeBean getTime() { + return time; + } + + public void setTime(TimeBean time) { + this.time = time; + } + + public MessageBean getMessage() { + return message; + } + + public void setMessage(MessageBean message) { + this.message = message; + } + + public BodyBean getBody() { + return body; + } + + public void setBody(BodyBean body) { + this.body = body; + } + + public static class TimeBean { + /** + * stamp : 20171204T12:45:19 + */ + + private String stamp; + + public String getStamp() { + return stamp; + } + + public void setStamp(String stamp) { + this.stamp = stamp; + } + } + + public static class MessageBean { + @SerializedName("xml:lang") + private String _$XmlLang84; // FIXME check this code + private String client_ver; + private String msec_times; + private String from; + private String to; + private String realfrom; + private String client_type; + private String type; + + public String get_$XmlLang84() { + return _$XmlLang84; + } + + public void set_$XmlLang84(String _$XmlLang84) { + this._$XmlLang84 = _$XmlLang84; + } + + public String getClient_ver() { + return client_ver; + } + + public void setClient_ver(String client_ver) { + this.client_ver = client_ver; + } + + public String getMsec_times() { + return msec_times; + } + + public void setMsec_times(String msec_times) { + this.msec_times = msec_times; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getRealfrom() { + return realfrom; + } + + public void setRealfrom(String realfrom) { + this.realfrom = realfrom; + } + + public String getClient_type() { + return client_type; + } + + public void setClient_type(String client_type) { + this.client_type = client_type; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + } + + public static class BodyBean { + /** + * msgType : 1 + * id : C123E0880EB24C9EB0B7A0CCF7DF94E2 + * content : [obj type="image" value="/file/v2/download/temp/a9b5e6cd8ad68938e9dd341df8345826.jpg?name=a9b5e6cd8ad68938e9dd341df8345826.jpg&file=file/a9b5e6cd8ad68938e9dd341df8345826.jpg&FileName=file/a9b5e6cd8ad68938e9dd341df8345826.jpg" width=200.000000 height=196.000000 ] + */ + + private String msgType; + private String id; + private String content; + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/MucReadMark.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MucReadMark.java new file mode 100644 index 0000000..193c822 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MucReadMark.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by hubin on 2017/12/5. + */ + +public class MucReadMark { + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/MultiOfflineMsgResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MultiOfflineMsgResult.java new file mode 100644 index 0000000..6545843 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/MultiOfflineMsgResult.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2015/4/29. + */ +public class MultiOfflineMsgResult extends BaseResult { + public String M; + public String N; + public String B; + public long T; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NavConfigResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NavConfigResult.java new file mode 100644 index 0000000..933eb88 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NavConfigResult.java @@ -0,0 +1,233 @@ +package com.qunar.im.base.jsonbean; + +import java.io.Serializable; + +/** + * Created by xinbo.wang on 2015/4/2. + */ +public class NavConfigResult extends BaseResult { + public String version; + public Versions versions = new Versions(); + public AdContent ad = new AdContent(); + public Baseaddess baseaddess = new Baseaddess(); + public Login Login = new Login(); + public ImConfig imConfig = new ImConfig(); + public Ability ability = new Ability(); + public OPS ops = new OPS(); + public QcAdmin qcadmin = new QcAdmin(); + public RNAndroidAbility RNAndroidAbility = new RNAndroidAbility(); + public Video video = new Video(); + public String hosts; + + public class AdContent implements Serializable { + public String adurl; + public String adsec; + public boolean shown; + + @Override + public String toString() { + return "AdContent{" + + "adurl='" + adurl + '\'' + + ", adsec='" + adsec + '\'' + + ", shown=" + shown + + '}'; + } + } + + public class Baseaddess implements Serializable { + public String xmpp; + public int xmppmport; + public int protobufPort; + public String domain; + public String javaurl; + public String pubkey; + public String apiurl; + public String videourl; + public String fileurl; + public String checkurl; + public String sms_token; + public String sms_verify; + public String hotcheckurl; + public String checkconfig; + public String simpleapiurl; + public String httpurl; + public String wikiurl; + public String leaderurl; + public String mobileurl; + public String shareurl; + public String domainhost; + public String resetPwdUrl; + public String appWeb; + public String payurl; + + @Override + public String toString() { + return "Baseaddess{" + + "xmpp='" + xmpp + '\'' + + ", xmppmport=" + xmppmport + + ", protobufPort=" + protobufPort + + ", domain='" + domain + '\'' + + ", javaurl='" + javaurl + '\'' + + ", pubkey='" + pubkey + '\'' + + ", apiurl='" + apiurl + '\'' + + ", fileurl='" + fileurl + '\'' + + ", checkurl='" + checkurl + '\'' + + ", sms_token='" + sms_token + '\'' + + ", sms_verify='" + sms_verify + '\'' + + ", hotcheckurl='" + hotcheckurl + '\'' + + ", checkconfig='" + checkconfig + '\'' + + ", simpleapiurl='" + simpleapiurl + '\'' + + ", wikiurl='" + wikiurl + '\'' + + ", leaderurl='" + leaderurl + '\'' + + ", mobileurl='" + mobileurl + '\'' + + ", shareurl='" + shareurl + '\'' + + ", domainhost='" + domainhost + '\'' + + ", appWeb='" + appWeb + '\'' + + ", payurl='" + payurl + '\'' + + '}'; + } + } + + public class Ability implements Serializable { + public String qCloudHost; + public String qcGrabOrder; + public String qcZhongbao; + //不知道什么 + public String resetpwd; + //搜索地址 + public String searchurl; + //一个配置的config + public String mconfig; + public boolean showmsgstat; + public String new_searchurl; + + @Override + public String toString() { + return "Ability{" + + ", qCloudHost='" + qCloudHost + '\'' + + ", qcGrabOrder='" + qcGrabOrder + '\'' + + ", qcZhongbao='" + qcZhongbao + '\'' + + ", resetpwd='" + resetpwd + '\'' + + ", searchurl='" + searchurl + '\'' + + ", mconfig='" + mconfig + '\'' + + ", new_searchurl='" + new_searchurl + '\'' + + '}'; + } + } + + public class OPS implements Serializable { + public String host; + public String checkversion; + public String conf; + } + + public class Login implements Serializable { + public String loginType; + + @Override + public String toString() { + return "Login{" + + "loginType='" + loginType + '\'' + + '}'; + } + } + + public class ImConfig implements Serializable { + public String VideoHost; + public String OpsAPI; + public int RsaEncodeType; + public boolean showOrganizational; + public boolean showOA; + public String uploadLog; + public String mail; + public String foundConfigUrl; + public boolean isToC; + + @Override + public String toString() { + return "ImConfig{" + + "VideoHost='" + VideoHost + '\'' + + ", OpsAPI='" + OpsAPI + '\'' + + "showOrganizational='" + showOrganizational + '\'' + + ", showOA='" + showOA + '\'' + + ", uploadLog='" + uploadLog + '\'' + + ", RsaEncodeType=" + RsaEncodeType + + ", email=" + mail + + ", foundConfigUrl=" + foundConfigUrl + + ", isToC=" + isToC + + '}'; + } + } + + public class Versions implements Serializable { + public int checkconfig; + + @Override + public String toString() { + return "Versions{" + + "checkconfig=" + checkconfig + + '}'; + } + } + + public class QcAdmin implements Serializable { + public String host; + + @Override + public String toString() { + return "QcAdmin{" + + "host=" + host + + '}'; + } + } + + + public class RNAndroidAbility implements Serializable { + + + public boolean RNMineView = true; + public boolean RNSettingView = true; + public boolean RNUserCardView = true; + public boolean RNPublicNumberListView = false; + public boolean RNContactView = true; + public boolean RNAboutView = false; + public boolean RNGroupCardView = false; + public boolean RNGroupListView = false; + + + @Override + public String toString() { + return "RNAbility{" + + "RNMineView=" + RNMineView + + ", RNSettingView=" + RNSettingView + + ", RNUserCardView=" + RNUserCardView + + ", RNPublicNumberListView=" + RNPublicNumberListView + + ", RNContactView=" + RNContactView + + ", RNAboutView=" + RNAboutView + + ", RNGroupCardView=" + RNGroupCardView + + ", RNGroupListView=" + RNGroupListView + + '}'; + } + } + + public class Video implements Serializable { + public String new_host; + } + + @Override + public String toString() { + return "NavConfigResult{" + + "version='" + version + '\'' + + ", versions=" + versions + + ", ad=" + ad + + ", baseaddess=" + baseaddess + + ", Login=" + Login + + ", imConfig=" + imConfig + + ", ability=" + ability + + ", ops=" + ops + + ", qcadmin=" + qcadmin + + ", RNAndroidAbility=" + RNAndroidAbility + + ", hosts='" + hosts + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NewReadStateByJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NewReadStateByJson.java new file mode 100644 index 0000000..569baf4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NewReadStateByJson.java @@ -0,0 +1,101 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2018/3/8. + */ + +public class NewReadStateByJson { + + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : [{"readflag":3,"msgid":"0d13f27f-0588-4147-adcd-283a170b6414","id":2434163,"updatetime":1.520488506298526E9},{"readflag":3,"msgid":"b89ce99b-66eb-4e83-ab38-9be4d04c8236","id":2434164,"updatetime":1.520488506298207E9},{"readflag":3,"msgid":"8ca17243-c32e-4e70-b4c6-99c3fa5207d1","id":2434165,"updatetime":1.52048850629804E9},{"readflag":3,"msgid":"8c2d7bba-a383-4e69-8133-1024a80b599b","id":2434166,"updatetime":1.520488506298526E9},{"readflag":3,"msgid":"02920f40-c756-4a87-b5af-5dd6c82bdf5d","id":2434167,"updatetime":1.520488506298417E9},{"readflag":3,"msgid":"32aac9be-fca3-4886-a0e3-46bba274b2fa","id":2434168,"updatetime":1.520488506298417E9},{"readflag":3,"msgid":"c190a46c-e760-483a-9e98-dd5f4027020b","id":2434169,"updatetime":1.520488506298674E9}] + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * readflag : 3 + * msgid : 0d13f27f-0588-4147-adcd-283a170b6414 + * id : 2434163 + * updatetime : 1.520488506298526E9 + */ + + private int readflag; + private String msgid; + private int id; + private double updatetime; + + public int getReadflag() { + return readflag; + } + + public void setReadflag(int readflag) { + this.readflag = readflag; + } + + public String getMsgid() { + return msgid; + } + + public void setMsgid(String msgid) { + this.msgid = msgid; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public double getUpdatetime() { + return updatetime; + } + + public void setUpdatetime(double updatetime) { + this.updatetime = updatetime; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NewRemoteConfig.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NewRemoteConfig.java new file mode 100644 index 0000000..be82d39 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NewRemoteConfig.java @@ -0,0 +1,138 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +public class NewRemoteConfig { + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : {"version":3,"clientConfigInfos":[{"key":"kStickJidDic","infos":[{"subkey":"xuejie.bi@ejabhost1-xuejie.bi@ejabhost1","configinfo":"0","isdel":0}]}]} + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * version : 3 + * clientConfigInfos : [{"key":"kStickJidDic","infos":[{"subkey":"xuejie.bi@ejabhost1-xuejie.bi@ejabhost1","configinfo":"0","isdel":0}]}] + */ + + private int version; + private List clientConfigInfos; + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public List getClientConfigInfos() { + return clientConfigInfos; + } + + public void setClientConfigInfos(List clientConfigInfos) { + this.clientConfigInfos = clientConfigInfos; + } + + public static class ClientConfigInfosBean { + /** + * key : kStickJidDic + * infos : [{"subkey":"xuejie.bi@ejabhost1-xuejie.bi@ejabhost1","configinfo":"0","isdel":0}] + */ + + private String key; + private List infos; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public List getInfos() { + return infos; + } + + public void setInfos(List infos) { + this.infos = infos; + } + + public static class InfosBean { + /** + * subkey : xuejie.bi@ejabhost1-xuejie.bi@ejabhost1 + * configinfo : 0 + * isdel : 0 + */ + + private String subkey; + private String configinfo; + private int isdel; + + public String getSubkey() { + return subkey; + } + + public void setSubkey(String subkey) { + this.subkey = subkey; + } + + public String getConfiginfo() { + return configinfo; + } + + public void setConfiginfo(String configinfo) { + this.configinfo = configinfo; + } + + public int getIsdel() { + return isdel; + } + + public void setIsdel(int isdel) { + this.isdel = isdel; + } + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoteMsgJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoteMsgJson.java new file mode 100644 index 0000000..b1f740e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoteMsgJson.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.jsonbean; + +import java.util.Map; + +/** + * Created by saber on 16-1-27. + */ +public class NoteMsgJson extends BaseResult { + public String bu; + public String type; + public String ip; + public String url; + public Map data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoticeBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoticeBean.java new file mode 100644 index 0000000..11a4676 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoticeBean.java @@ -0,0 +1,192 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2018/2/8. + */ + +public class NoticeBean { + + + /** + * from : shop323 + * to : hubin.hu + * isCouslt : true + * realFrom : xxxx + * realTo : xxxxx + * couslt : 4 + * noticeStr : [{"str":"你好","type":"link","url":"www.baidu.com","strColor":"#ffffff"},{"str":",本段是文本","type":"text","strColor":"#ffffff"},{"str":"这一段是跳转","type":"newChat","from":"shop323","to":"hubin.hu","realFrom":"wz.wang","realTo":"hubin.hu","couslt":"4","strColor":"#ffffff","isCouslt":true}] + */ + + private String from; + private String to; + private boolean isCouslt; + private String realFrom; + private String realTo; + private String couslt; + private List noticeStr; + + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public boolean isIsCouslt() { + return isCouslt; + } + + public void setIsCouslt(boolean isCouslt) { + this.isCouslt = isCouslt; + } + + public String getRealFrom() { + return realFrom; + } + + public void setRealFrom(String realFrom) { + this.realFrom = realFrom; + } + + public String getRealTo() { + return realTo; + } + + public void setRealTo(String realTo) { + this.realTo = realTo; + } + + public String getCouslt() { + return couslt; + } + + public void setCouslt(String couslt) { + this.couslt = couslt; + } + + public List getNoticeStr() { + return noticeStr; + } + + public void setNoticeStr(List noticeStr) { + this.noticeStr = noticeStr; + } + + public static class NoticeStrBean { + /** + * str : 你好 + * type : link + * url : www.baidu.com + * strColor : #ffffff + * from : shop323 + * to : hubin.hu + * realFrom : wz.wang + * realTo : hubin.hu + * couslt : 4 + * isCouslt : true + */ + + private String str; + private String type; + private String url; + private String strColor; + private String from; + private String to; + private String realFrom; + private String realTo; + private String couslt; + private boolean isCouslt; + + public String getStr() { + return str; + } + + public void setStr(String str) { + this.str = str; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getStrColor() { + return strColor; + } + + public void setStrColor(String strColor) { + this.strColor = strColor; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getRealFrom() { + return realFrom; + } + + public void setRealFrom(String realFrom) { + this.realFrom = realFrom; + } + + public String getRealTo() { + return realTo; + } + + public void setRealTo(String realTo) { + this.realTo = realTo; + } + + public String getCouslt() { + return couslt; + } + + public void setCouslt(String couslt) { + this.couslt = couslt; + } + + public boolean isIsCouslt() { + return isCouslt; + } + + public void setIsCouslt(boolean isCouslt) { + this.isCouslt = isCouslt; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoticeRequestBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoticeRequestBean.java new file mode 100644 index 0000000..a4ab4b1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NoticeRequestBean.java @@ -0,0 +1,128 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by hubin on 2018/3/1. + */ + +public class NoticeRequestBean { + + + /** + * ret : true + * data : {"url":"www.baidu.com","desc":"这一段是跳转","type":"newChat","from":"shop323","to":"hubin.hu","realFrom":"wz.wang","realTo":"hubin.hu","isCouslt":true} + */ + + private boolean ret; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * url : www.baidu.com + * desc : 这一段是跳转 + * type : newChat + * from : shop323 + * to : hubin.hu + * realFrom : wz.wang + * realTo : hubin.hu + * isCouslt : true + */ + + private String url; + private String desc; + private String type; + private String from; + private String to; + private String realFrom; + private String realTo; + private boolean isCouslt; + private String couslt; + + public String getCouslt() { + return couslt; + } + + public void setCouslt(String couslt) { + this.couslt = couslt; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getRealFrom() { + return realFrom; + } + + public void setRealFrom(String realFrom) { + this.realFrom = realFrom; + } + + public String getRealTo() { + return realTo; + } + + public void setRealTo(String realTo) { + this.realTo = realTo; + } + + public boolean isIsCouslt() { + return isCouslt; + } + + public void setIsCouslt(boolean isCouslt) { + this.isCouslt = isCouslt; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/NotificationConfig.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NotificationConfig.java new file mode 100644 index 0000000..d8b2f49 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/NotificationConfig.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by lihaibin.li on 2017/12/11. + */ + +public class NotificationConfig { + public boolean LockScreenSetting;//锁屏显示 + public boolean BadgeSetting;//桌面图标角标 + public boolean ShowPreviewsSetting;// + public boolean SoundSetting;//声音 + public boolean NotificationCenterSetting;//通知开关 + public boolean CarPlaySetting;//车载系统 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/OfflineSingleMsgResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/OfflineSingleMsgResult.java new file mode 100644 index 0000000..e609b91 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/OfflineSingleMsgResult.java @@ -0,0 +1,18 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/4/2. + */ +public class OfflineSingleMsgResult extends BaseJsonResult { + public List data; + public static class OfflineMsgResult { + public String F; + public String FH; + public String T; + public String TH; + public String B; + public int R; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/OpsUnreadResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/OpsUnreadResult.java new file mode 100644 index 0000000..fc12edb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/OpsUnreadResult.java @@ -0,0 +1,58 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 3/15/2016. + * 从ops获取是否有未读消息 + */ +public class OpsUnreadResult { + + /** + * msg : + * data : {"hasUnread":true} + * errcode : 0 + */ + + private String msg; + private DataBean data; + private int errcode; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public static class DataBean { + /** + * hasUnread : true + */ + + private boolean hasUnread; + + public boolean isHasUnread() { + return hasUnread; + } + + public void setHasUnread(boolean hasUnread) { + this.hasUnread = hasUnread; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/OrderCardInfoResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/OrderCardInfoResult.java new file mode 100644 index 0000000..aa8272b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/OrderCardInfoResult.java @@ -0,0 +1,40 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2016/7/13. + */ +public class OrderCardInfoResult extends BaseResult { + /*** + * 头图url(可没有) + */ + public String titleimg; + /*** + * 产品名称 + */ + public String titletxt; + /*** + * 产品图(可以没有) + */ + public String productimg; + /*** + * 点击卡片希望跳转到的页面地址 + */ + public String detailurl; + /*** + * 文本内容 + */ + public List descs; + /*** + * windows客户端专用 + */ + public String descdetail; + + public static class DescItem implements BaseData + { + public String k=""; //小标题 + public String v="";// 内容 + public String c=""; //字体颜色 + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/Profile4mUCenter.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/Profile4mUCenter.java new file mode 100644 index 0000000..43888aa --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/Profile4mUCenter.java @@ -0,0 +1,22 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 15-9-2. + */ +public class Profile4mUCenter extends BaseJsonResult { + public List data; + + static public class UCenterProfile + { + public String email = ""; + public String gender = ""; + public String imageurl = ""; + public String loginName = ""; + public String mobile = ""; + public String nickname = ""; + public String username = ""; + public String webname = ""; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/PubKeyBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/PubKeyBean.java new file mode 100644 index 0000000..7a57073 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/PubKeyBean.java @@ -0,0 +1,104 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by hubin on 2018/2/9. + */ + +public class PubKeyBean { + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : {"rsa_pub_key_shortkey":"","rsa_pub_key_fullkey":"","pub_key_fullkey":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy2VXDAlCZlj7gPHvC/vwvbpTN\n/GyW0tmNCqh0UPitdTTGZk3UcLqu9lWMGPViL/5lhboiSogsDxJLHdwo91DDBjTX\n1HbuyuOhvsvayV7Yc8t+ajFW/8RwlvhGSzVplthoU+md9kGeZ8t73VWWZUEB0iyW\nx7Y/RjUwTdnOlNXDzQIDAQAB\n-----END PUBLIC KEY-----","pub_key_shortkey":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy2VXDAlCZlj7gPHvC/vwvbpTN/GyW0tmNCqh0UPitdTTGZk3UcLqu9lWMGPViL/5lhboiSogsDxJLHdwo91DDBjTX1HbuyuOhvsvayV7Yc8t+ajFW/8RwlvhGSzVplthoU+md9kGeZ8t73VWWZUEB0iyWx7Y/RjUwTdnOlNXDzQIDAQAB"} + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * rsa_pub_key_shortkey : + * rsa_pub_key_fullkey : + * pub_key_fullkey : -----BEGIN PUBLIC KEY----- + MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy2VXDAlCZlj7gPHvC/vwvbpTN + /GyW0tmNCqh0UPitdTTGZk3UcLqu9lWMGPViL/5lhboiSogsDxJLHdwo91DDBjTX + 1HbuyuOhvsvayV7Yc8t+ajFW/8RwlvhGSzVplthoU+md9kGeZ8t73VWWZUEB0iyW + x7Y/RjUwTdnOlNXDzQIDAQAB + -----END PUBLIC KEY----- + * pub_key_shortkey : MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy2VXDAlCZlj7gPHvC/vwvbpTN/GyW0tmNCqh0UPitdTTGZk3UcLqu9lWMGPViL/5lhboiSogsDxJLHdwo91DDBjTX1HbuyuOhvsvayV7Yc8t+ajFW/8RwlvhGSzVplthoU+md9kGeZ8t73VWWZUEB0iyWx7Y/RjUwTdnOlNXDzQIDAQAB + */ + + private String rsa_pub_key_shortkey; + private String rsa_pub_key_fullkey; + private String pub_key_fullkey; + private String pub_key_shortkey; + + public String getRsa_pub_key_shortkey() { + return rsa_pub_key_shortkey; + } + + public void setRsa_pub_key_shortkey(String rsa_pub_key_shortkey) { + this.rsa_pub_key_shortkey = rsa_pub_key_shortkey; + } + + public String getRsa_pub_key_fullkey() { + return rsa_pub_key_fullkey; + } + + public void setRsa_pub_key_fullkey(String rsa_pub_key_fullkey) { + this.rsa_pub_key_fullkey = rsa_pub_key_fullkey; + } + + public String getPub_key_fullkey() { + return pub_key_fullkey; + } + + public void setPub_key_fullkey(String pub_key_fullkey) { + this.pub_key_fullkey = pub_key_fullkey; + } + + public String getPub_key_shortkey() { + return pub_key_shortkey; + } + + public void setPub_key_shortkey(String pub_key_shortkey) { + this.pub_key_shortkey = pub_key_shortkey; + } + } +} + diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/PublicVerifyResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/PublicVerifyResult.java new file mode 100644 index 0000000..19fa426 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/PublicVerifyResult.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2015/4/2. + */ +public class PublicVerifyResult extends BaseResult { + public int status_id; + public String status; + public String msg; + public TokenStruct data; + + static public class TokenStruct implements BaseData + { + public String token; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/PushSettingResponseBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/PushSettingResponseBean.java new file mode 100644 index 0000000..d430126 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/PushSettingResponseBean.java @@ -0,0 +1,65 @@ +package com.qunar.im.base.jsonbean; + +public class PushSettingResponseBean { + + + /** + * ret : true + * errcode : 0 + * errmsg : null + * data : {"push_flag":30} + */ + + private boolean ret; + private int errcode; + private Object errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public Object getErrmsg() { + return errmsg; + } + + public void setErrmsg(Object errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * push_flag : 30 + */ + + private int push_flag; + + public int getPush_flag() { + return push_flag; + } + + public void setPush_flag(int push_flag) { + this.push_flag = push_flag; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/QChatLoginResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QChatLoginResult.java new file mode 100644 index 0000000..6ac2fbc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QChatLoginResult.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.jsonbean; + +import java.util.ArrayList; + +/** + * Created by saber on 15-10-12. + */ +public class QChatLoginResult extends BaseJsonResult { + public ArrayList data; + + public static class QchatUserInfo extends QVTResponseResult.QVT { + public String username; + public String type; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/QRCodeAuthResultJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QRCodeAuthResultJson.java new file mode 100644 index 0000000..3ace51a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QRCodeAuthResultJson.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +/** + * 二维码登录验证返回结果 + * Created by saber on 16-1-27. + */ +public class QRCodeAuthResultJson extends BaseJsonResult { + public int data; + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/QVTResponseResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QVTResponseResult.java new file mode 100644 index 0000000..75820ce --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QVTResponseResult.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-9-2. + */ +public class QVTResponseResult extends BaseJsonResult { + public QVT data; + + static public class QVT{ + public String qcookie; + public String tcookie; + public String vcookie; + } + public QVTResponseResult(){ + data = new QVT(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/QchatCousltIdBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QchatCousltIdBean.java new file mode 100644 index 0000000..7e486b3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QchatCousltIdBean.java @@ -0,0 +1,351 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by hubin on 2018/3/5. + */ + +public class QchatCousltIdBean { + + + /** + * ret : true + * msg : null + * data : {"switchOn":true,"supplier":{"id":323,"name":"去哪儿旗舰店","bType":1,"welcomes":null,"shopId":"shop_323","logoUrl":null,"busiSupplierId":"3803042451","busiName":null},"seat":{"id":2,"qunarName":"dujia_robot","webName":"度假小拿","nickName":null,"faceLink":null,"createTime":null,"priority":null,"supplierId":323,"businessId":1,"supplierName":null,"isrobot":true,"serviceStatus":4,"pid":null,"customerName":null,"onlineState":"ONLINE"},"onlineState":"online","lastStartTime":null} + * errcode : null + */ + + private boolean ret; + private Object msg; + private DataBean data; + private Object errcode; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public Object getMsg() { + return msg; + } + + public void setMsg(Object msg) { + this.msg = msg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public Object getErrcode() { + return errcode; + } + + public void setErrcode(Object errcode) { + this.errcode = errcode; + } + + public static class DataBean { + /** + * switchOn : true + * supplier : {"id":323,"name":"去哪儿旗舰店","bType":1,"welcomes":null,"shopId":"shop_323","logoUrl":null,"busiSupplierId":"3803042451","busiName":null} + * seat : {"id":2,"qunarName":"dujia_robot","webName":"度假小拿","nickName":null,"faceLink":null,"createTime":null,"priority":null,"supplierId":323,"businessId":1,"supplierName":null,"isrobot":true,"serviceStatus":4,"pid":null,"customerName":null,"onlineState":"ONLINE"} + * onlineState : online + * lastStartTime : null + */ + + private boolean switchOn; + private SupplierBean supplier; + private SeatBean seat; + private String onlineState; + private Object lastStartTime; + + public boolean isSwitchOn() { + return switchOn; + } + + public void setSwitchOn(boolean switchOn) { + this.switchOn = switchOn; + } + + public SupplierBean getSupplier() { + return supplier; + } + + public void setSupplier(SupplierBean supplier) { + this.supplier = supplier; + } + + public SeatBean getSeat() { + return seat; + } + + public void setSeat(SeatBean seat) { + this.seat = seat; + } + + public String getOnlineState() { + return onlineState; + } + + public void setOnlineState(String onlineState) { + this.onlineState = onlineState; + } + + public Object getLastStartTime() { + return lastStartTime; + } + + public void setLastStartTime(Object lastStartTime) { + this.lastStartTime = lastStartTime; + } + + public static class SupplierBean { + /** + * id : 323 + * name : 去哪儿旗舰店 + * bType : 1 + * welcomes : null + * shopId : shop_323 + * logoUrl : null + * busiSupplierId : 3803042451 + * busiName : null + */ + + private int id; + private String name; + private int bType; + private Object welcomes; + private String shopId; + private Object logoUrl; + private String busiSupplierId; + private Object busiName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getBType() { + return bType; + } + + public void setBType(int bType) { + this.bType = bType; + } + + public Object getWelcomes() { + return welcomes; + } + + public void setWelcomes(Object welcomes) { + this.welcomes = welcomes; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public Object getLogoUrl() { + return logoUrl; + } + + public void setLogoUrl(Object logoUrl) { + this.logoUrl = logoUrl; + } + + public String getBusiSupplierId() { + return busiSupplierId; + } + + public void setBusiSupplierId(String busiSupplierId) { + this.busiSupplierId = busiSupplierId; + } + + public Object getBusiName() { + return busiName; + } + + public void setBusiName(Object busiName) { + this.busiName = busiName; + } + } + + public static class SeatBean { + /** + * id : 2 + * qunarName : dujia_robot + * webName : 度假小拿 + * nickName : null + * faceLink : null + * createTime : null + * priority : null + * supplierId : 323 + * businessId : 1 + * supplierName : null + * isrobot : true + * serviceStatus : 4 + * pid : null + * customerName : null + * onlineState : ONLINE + */ + + private int id; + private String qunarName; + private String webName; + private Object nickName; + private Object faceLink; + private Object createTime; + private Object priority; + private int supplierId; + private int businessId; + private Object supplierName; + private boolean isrobot; + private int serviceStatus; + private Object pid; + private Object customerName; + private String onlineState; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getQunarName() { + return qunarName; + } + + public void setQunarName(String qunarName) { + this.qunarName = qunarName; + } + + public String getWebName() { + return webName; + } + + public void setWebName(String webName) { + this.webName = webName; + } + + public Object getNickName() { + return nickName; + } + + public void setNickName(Object nickName) { + this.nickName = nickName; + } + + public Object getFaceLink() { + return faceLink; + } + + public void setFaceLink(Object faceLink) { + this.faceLink = faceLink; + } + + public Object getCreateTime() { + return createTime; + } + + public void setCreateTime(Object createTime) { + this.createTime = createTime; + } + + public Object getPriority() { + return priority; + } + + public void setPriority(Object priority) { + this.priority = priority; + } + + public int getSupplierId() { + return supplierId; + } + + public void setSupplierId(int supplierId) { + this.supplierId = supplierId; + } + + public int getBusinessId() { + return businessId; + } + + public void setBusinessId(int businessId) { + this.businessId = businessId; + } + + public Object getSupplierName() { + return supplierName; + } + + public void setSupplierName(Object supplierName) { + this.supplierName = supplierName; + } + + public boolean isIsrobot() { + return isrobot; + } + + public void setIsrobot(boolean isrobot) { + this.isrobot = isrobot; + } + + public int getServiceStatus() { + return serviceStatus; + } + + public void setServiceStatus(int serviceStatus) { + this.serviceStatus = serviceStatus; + } + + public Object getPid() { + return pid; + } + + public void setPid(Object pid) { + this.pid = pid; + } + + public Object getCustomerName() { + return customerName; + } + + public void setCustomerName(Object customerName) { + this.customerName = customerName; + } + + public String getOnlineState() { + return onlineState; + } + + public void setOnlineState(String onlineState) { + this.onlineState = onlineState; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/QuickReplyResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QuickReplyResult.java new file mode 100644 index 0000000..f3b83cc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QuickReplyResult.java @@ -0,0 +1,99 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by Lex lex on 2018/7/30. + */ +public class QuickReplyResult extends BaseJsonResult{ + + + /** + * data : {"groupInfo":{"version":1,"groups":[{"id":91,"username":null,"host":null,"groupname":"欢迎1","groupseq":1,"version":1,"isdel":0},{"id":92,"username":null,"host":null,"groupname":"欢迎2","groupseq":2,"version":1,"isdel":0}]},"contentInfo":{"version":1,"contents":[{"id":703,"content":"正在帮您查询1","groupid":91,"contentseq":1,"version":1,"isdel":0},{"id":713,"content":"正在帮您查询1","groupid":92,"contentseq":1,"version":1,"isdel":0}]}} + */ + + public DataBean data; + + public static class DataBean { + /** + * groupInfo : {"version":1,"groups":[{"id":91,"username":null,"host":null,"groupname":"欢迎1","groupseq":1,"version":1,"isdel":0},{"id":92,"username":null,"host":null,"groupname":"欢迎2","groupseq":2,"version":1,"isdel":0}]} + * contentInfo : {"version":1,"contents":[{"id":703,"content":"正在帮您查询1","groupid":91,"contentseq":1,"version":1,"isdel":0},{"id":713,"content":"正在帮您查询1","groupid":92,"contentseq":1,"version":1,"isdel":0}]} + */ + + public GroupInfoBean groupInfo; + public ContentInfoBean contentInfo; + + public static class GroupInfoBean { + /** + * version : 1 + * groups : [{"id":91,"username":null,"host":null,"groupname":"欢迎1","groupseq":1,"version":1,"isdel":0},{"id":92,"username":null,"host":null,"groupname":"欢迎2","groupseq":2,"version":1,"isdel":0}] + */ + + public int version; + public List groups; + + public static class GroupsBean { + /** + * id : 91 + * username : null + * host : null + * groupname : 欢迎1 + * groupseq : 1 + * version : 1 + * isdel : 0 + */ + + public int id; + public String groupname; + public int groupseq; + public int version; + public int isdel; + + } + } + + public static class ContentInfoBean { + /** + * version : 1 + * contents : [{"id":703,"content":"正在帮您查询1","groupid":91,"contentseq":1,"version":1,"isdel":0},{"id":713,"content":"正在帮您查询1","groupid":92,"contentseq":1,"version":1,"isdel":0}] + */ + + public int version; + public List contents; + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public List getContents() { + return contents; + } + + public void setContents(List contents) { + this.contents = contents; + } + + public static class ContentsBean { + /** + * id : 703 + * content : 正在帮您查询1 + * groupid : 91 + * contentseq : 1 + * version : 1 + * isdel : 0 + */ + + public int id; + public String content; + public int groupid; + public int contentseq; + public int version; + public int isdel; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/QunarLocation.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QunarLocation.java new file mode 100644 index 0000000..21d65a5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/QunarLocation.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 8/5/2015. + */ +public class QunarLocation { + public double latitude; + public double longitude; + public String addressDesc; + public String fileUrl; + public String name; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RNSearchData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RNSearchData.java new file mode 100644 index 0000000..90d6ee8 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RNSearchData.java @@ -0,0 +1,209 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by hubin on 2017/11/7. + */ +public class RNSearchData { + + + private int hasMore; + private int isLoaclData; + private int todoType; + private int groupPriority; + private String groupLabel; + private String groupId; + private String defaultportrait; + private List info; + + public int getHasMore() { + return hasMore; + } + + public void setHasMore(int hasMore) { + this.hasMore = hasMore; + } + + public int getIsLoaclData() { + return isLoaclData; + } + + public void setIsLoaclData(int isLoaclData) { + this.isLoaclData = isLoaclData; + } + + public int getTodoType() { + return todoType; + } + + public void setTodoType(int todoType) { + this.todoType = todoType; + } + + public int getGroupPriority() { + return groupPriority; + } + + public void setGroupPriority(int groupPriority) { + this.groupPriority = groupPriority; + } + + public String getGroupLabel() { + return groupLabel; + } + + public void setGroupLabel(String groupLabel) { + this.groupLabel = groupLabel; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getDefaultportrait() { + return defaultportrait; + } + + public void setDefaultportrait(String defaultportrait) { + this.defaultportrait = defaultportrait; + } + + public List getInfo() { + return info; + } + + public void setInfo(List info) { + this.info = info; + } + + public static class InfoBean { + /** + * label : lee李露lucas,nigotuu7479 + * content : + * icon : + * uri : 0d436780d3ec47cea4bc392539da3298@conference.ejabhost2 + * UserId : lee.guo + * Name : 郭立lee + * HeaderSrc : lee.guo@ejabhost1.jpg + * XmppId : lee.guo@ejabhost1 + * ExtendedFlag : true + * GroupId : ops群@conference.ejabhost1 + * LastUpdateTime : 10 + * Introduce : 欢迎加入... + */ + + private String label; + private String content; + private String icon; + private String uri; + private String UserId; + private String Name; + private String HeaderSrc; + private String XmppId; + private boolean ExtendedFlag; + private String GroupId; + private int LastUpdateTime; + private String Introduce; + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + public String getUserId() { + return UserId; + } + + public void setUserId(String UserId) { + this.UserId = UserId; + } + + public String getName() { + return Name; + } + + public void setName(String Name) { + this.Name = Name; + } + + public String getHeaderSrc() { + return HeaderSrc; + } + + public void setHeaderSrc(String HeaderSrc) { + this.HeaderSrc = HeaderSrc; + } + + public String getXmppId() { + return XmppId; + } + + public void setXmppId(String XmppId) { + this.XmppId = XmppId; + } + + public boolean isExtendedFlag() { + return ExtendedFlag; + } + + public void setExtendedFlag(boolean ExtendedFlag) { + this.ExtendedFlag = ExtendedFlag; + } + + public String getGroupId() { + return GroupId; + } + + public void setGroupId(String GroupId) { + this.GroupId = GroupId; + } + + public int getLastUpdateTime() { + return LastUpdateTime; + } + + public void setLastUpdateTime(int LastUpdateTime) { + this.LastUpdateTime = LastUpdateTime; + } + + public String getIntroduce() { + return Introduce; + } + + public void setIntroduce(String Introduce) { + this.Introduce = Introduce; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtMsgBackupInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtMsgBackupInfo.java new file mode 100644 index 0000000..b64a3e5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtMsgBackupInfo.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by hubo.hu on 2017/10/31. + */ + +public class RbtMsgBackupInfo { + public int type; + public Data data; + + public static class Data { + public String bu = ""; + public String bsid = ""; + public String pid = ""; + public int rbtMsg; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtNewSuggestionList.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtNewSuggestionList.java new file mode 100644 index 0000000..f596c19 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtNewSuggestionList.java @@ -0,0 +1,257 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +public class RbtNewSuggestionList { + + + /** + * question : qtalk是什么 + * content : qatlk是一款IM的聊天软件 + * listTips : + * listArea : {"type":"list","style":{"defSize":3},"items":[{"text":"qtalk是什么","event":{"type":"interface","url":"","msgText":"qtalk是什么"}},{"text":"如何报销","event":{"type":"interface","url":"","msgText":"如何报销"}},{"text":"这是测试","event":{"type":"interface","url":"","msgText":"这是测试"}}]} + * bottom_tips : aaa + * bottom : [{"id":1,"text":"有用","url":"http://127.0.0.1:8025/qtalk_robot/yn_feedback?id=161&is_worked=1&rexian_id=qtalkrexian&m_from=qtalkrexian@ejabhost1&realfrom=hotline_robot@ejabhost1&m_to=hubin.hu@ejabhost1&realto=hubin.hu@ejabhost1"},{"id":0,"text":"没用","url":"http://127.0.0.1:8025/qtalk_robot/yn_feedback?id=161&is_worked=0&rexian_id=qtalkrexian&m_from=qtalkrexian@ejabhost1&realfrom=hotline_robot@ejabhost1&m_to=hubin.hu@ejabhost1&realto=hubin.hu@ejabhost1"}] + * word_limit : {"words":100,"lines":6} + */ + + private String question; + private String content; + private String listTips; + private ListAreaBean listArea; + private String bottom_tips; + private WordLimitBean word_limit; + private List bottom; + + public String getQuestion() { + return question; + } + + public void setQuestion(String question) { + this.question = question; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getListTips() { + return listTips; + } + + public void setListTips(String listTips) { + this.listTips = listTips; + } + + public ListAreaBean getListArea() { + return listArea; + } + + public void setListArea(ListAreaBean listArea) { + this.listArea = listArea; + } + + public String getBottom_tips() { + return bottom_tips; + } + + public void setBottom_tips(String bottom_tips) { + this.bottom_tips = bottom_tips; + } + + public WordLimitBean getWord_limit() { + return word_limit; + } + + public void setWord_limit(WordLimitBean word_limit) { + this.word_limit = word_limit; + } + + public List getBottom() { + return bottom; + } + + public void setBottom(List bottom) { + this.bottom = bottom; + } + + public static class ListAreaBean { + /** + * type : list + * style : {"defSize":3} + * items : [{"text":"qtalk是什么","event":{"type":"interface","url":"","msgText":"qtalk是什么"}},{"text":"如何报销","event":{"type":"interface","url":"","msgText":"如何报销"}},{"text":"这是测试","event":{"type":"interface","url":"","msgText":"这是测试"}}] + */ + + private String type; + private StyleBean style; + private List items; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public StyleBean getStyle() { + return style; + } + + public void setStyle(StyleBean style) { + this.style = style; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } + + public static class StyleBean { + /** + * defSize : 3 + */ + + private int defSize; + + public int getDefSize() { + return defSize; + } + + public void setDefSize(int defSize) { + this.defSize = defSize; + } + } + + public static class ItemsBean { + /** + * text : qtalk是什么 + * event : {"type":"interface","url":"","msgText":"qtalk是什么"} + */ + + private String text; + private EventBean event; + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public EventBean getEvent() { + return event; + } + + public void setEvent(EventBean event) { + this.event = event; + } + + public static class EventBean { + /** + * type : interface + * url : + * msgText : qtalk是什么 + */ + + private String type; + private String url; + private String msgText; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMsgText() { + return msgText; + } + + public void setMsgText(String msgText) { + this.msgText = msgText; + } + } + } + } + + public static class WordLimitBean { + /** + * words : 100 + * lines : 6 + */ + + private int words; + private int lines; + + public int getWords() { + return words; + } + + public void setWords(int words) { + this.words = words; + } + + public int getLines() { + return lines; + } + + public void setLines(int lines) { + this.lines = lines; + } + } + + public static class BottomBean { + /** + * id : 1 + * text : 有用 + * url : http://127.0.0.1:8025/qtalk_robot/yn_feedback?id=161&is_worked=1&rexian_id=qtalkrexian&m_from=qtalkrexian@ejabhost1&realfrom=hotline_robot@ejabhost1&m_to=hubin.hu@ejabhost1&realto=hubin.hu@ejabhost1 + */ + + private int id; + private String text; + private String url; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtSuggestionListJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtSuggestionListJson.java new file mode 100644 index 0000000..fdec414 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RbtSuggestionListJson.java @@ -0,0 +1,36 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; +import java.util.Map; + +/** + * Created by xinbo.wang on 2017-04-07. + */ +public class RbtSuggestionListJson { + public String content; + public String listTips; + public ListArea listArea; + public List hints; + + public static class ListArea { + public String type; + public ListAreaStyle style; + public List items; + } + + public static class ListAreaStyle { + public int defSize ; + } + + public static class Item{ + public String text; + public ItemEvent event; + } + + public static class ItemEvent{ + public String url; + public String type; + public String msgText; + public Map params; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ReadMsgResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ReadMsgResult.java new file mode 100644 index 0000000..dfd7b65 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ReadMsgResult.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-9-10. + */ +public class ReadMsgResult implements BaseResult.BaseData { + public String id; + public long t; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RemindDataBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RemindDataBean.java new file mode 100644 index 0000000..f6b5614 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RemindDataBean.java @@ -0,0 +1,45 @@ +package com.qunar.im.base.jsonbean; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class RemindDataBean { + private String title; + private String url; + private Map params;//json串 + private List> keyValues = new ArrayList<>(); + + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Map getParams() { + return params; + } + + public void setParams(Map params) { + this.params = params; + } + + public List> getKeyValues() { + return keyValues; + } + + public void setKeyValues(List> keyValues) { + this.keyValues = keyValues; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RemoteConfig.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RemoteConfig.java new file mode 100644 index 0000000..11d5654 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RemoteConfig.java @@ -0,0 +1,21 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 16-4-19. + */ +public class RemoteConfig extends BaseJsonResult { + public List data; + public static class ConfigItem + { + public String key; + public String value; + public String version; + } + + public static class EmotionItem + { + public String httpUrl; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RequestRobotInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RequestRobotInfo.java new file mode 100644 index 0000000..4ab8b6c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RequestRobotInfo.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-9-11. + */ +public class RequestRobotInfo extends BaseResult { + public String robot_name; + public int version; + + public RequestRobotInfo(String robot_name, int version) { + this.robot_name = robot_name; + this.version = version; + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RichText.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RichText.java new file mode 100644 index 0000000..ea0157b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RichText.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by zhaokai on 15-9-15. + */ +public class RichText { + public String introduce; + public String linkurl; + public String title; + public String imageurl; + public String date; + public String content; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobOrderMsgJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobOrderMsgJson.java new file mode 100644 index 0000000..795d1e2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobOrderMsgJson.java @@ -0,0 +1,110 @@ +package com.qunar.im.base.jsonbean; + +/** + * 抢单json + * Created by lihaibin.li on 2017/10/25. + */ + +public class RobOrderMsgJson { + + private String title; + private DetailBean detail; + private String dealId; + private String dealUrl; + private String status; + private String msgId; + private String btnDisplay;//按钮上展示的文字 + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public DetailBean getDetail() { + return detail; + } + + public void setDetail(DetailBean detail) { + this.detail = detail; + } + + public String getDealId() { + return dealId; + } + + public void setDealId(String dealId) { + this.dealId = dealId; + } + + public String getDealUrl() { + return dealUrl; + } + + public void setDealUrl(String dealUrl) { + this.dealUrl = dealUrl; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMsgId() { + return msgId; + } + + public void setMsgId(String msgId) { + this.msgId = msgId; + } + + public String getBtnDisplay() { + return btnDisplay; + } + + public void setBtnDisplay(String btnDisplay) { + this.btnDisplay = btnDisplay; + } + + public static class DetailBean { + /** + * budgetinfo : 人均预算:3422元-3444元 + * OrderTime : 下单时间:2017-09-2114: 20: 31 + * Remarks : 补充说明:希望直飞不需要中转 + */ + + private String budgetInfo; + private String orderTime; + private String remarks; + + public String getBudgetInfo() { + return budgetInfo; + } + + public void setBudgetInfo(String budgetInfo) { + this.budgetInfo = budgetInfo; + } + + public String getOrderTime() { + return orderTime; + } + + public void setOrderTime(String orderTime) { + this.orderTime = orderTime; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + } +} + diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobotInfoResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobotInfoResult.java new file mode 100644 index 0000000..a89d1c6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobotInfoResult.java @@ -0,0 +1,47 @@ +package com.qunar.im.base.jsonbean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by saber on 15-9-14. + */ +public class RobotInfoResult extends BaseJsonResult { + public List data; + + public static class RobotBody implements Serializable { + public String robotEnName = ""; + public String robotCnName = ""; + public String headerurl = ""; + public String robotDesc = ""; + public String fromsource = ""; + public String tel = ""; + public boolean receiveswitch; + public boolean replayable = true; + public boolean rawhtml; + public List actionlist; + } + + public static class Action implements Serializable { + public String mainaction; + public ActionContent actioncontent; + public List subactions; + + public static class ActionContent implements Serializable { + public Object value; + public String action; + } + + public static class SubAction implements Serializable { + public String subaction; + public ActionContent actioncontent; + } + } + + public static class RobotItemResult implements Serializable { + + public String rbt_name; + public RobotBody rbt_body; + public int rbt_ver; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobotInfoResult2.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobotInfoResult2.java new file mode 100644 index 0000000..d96214f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/RobotInfoResult2.java @@ -0,0 +1,18 @@ +package com.qunar.im.base.jsonbean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by saber on 16-3-1. + */ +public class RobotInfoResult2 extends BaseJsonResult { + public List data; + + public static class RobotItemResult2 implements Serializable { + + public String rbt_name; + public Object rbt_body; + public int rbt_ver; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SearchUserResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SearchUserResult.java new file mode 100644 index 0000000..a38d4c5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SearchUserResult.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by saber on 16-2-3. + */ +public class SearchUserResult extends BaseJsonResult { + public List data; + static public class SearchUserInfo + { + public String domain; + public String nickname; + public String username; + public boolean isFriends = false; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SeatList.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SeatList.java new file mode 100644 index 0000000..15f88d7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SeatList.java @@ -0,0 +1,212 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * 客服坐席 + */ +public class SeatList extends BaseJsonResult { + + private List data; + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class Seat{ + + /** + * id : 12220 + * qunarName : {"node":"qeyzvbi2011","domain":"ejabhost2","resource":null} + * webName : 小泊 + * nickName : null + * faceLink : null + * supplierID : 323 + * priority : 4 + * createTime : 1530696573822 + * updateTime : 1532312956949 + * oldSupplierID : null + * oldID : null + * serviceStatus : 4 + * status : 1 + * maxServiceCount : 3 + * groupId : null + */ + + private int id; + private QunarNameBean qunarName; + private String webName; + private Object nickName; + private Object faceLink; + private int supplierID; + private int priority; + private long createTime; + private long updateTime; + private Object oldSupplierID; + private Object oldID; + private int serviceStatus; + private int status; + private int maxServiceCount; + private Object groupId; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public QunarNameBean getQunarName() { + return qunarName; + } + + public void setQunarName(QunarNameBean qunarName) { + this.qunarName = qunarName; + } + + public String getWebName() { + return webName; + } + + public void setWebName(String webName) { + this.webName = webName; + } + + public Object getNickName() { + return nickName; + } + + public void setNickName(Object nickName) { + this.nickName = nickName; + } + + public Object getFaceLink() { + return faceLink; + } + + public void setFaceLink(Object faceLink) { + this.faceLink = faceLink; + } + + public int getSupplierID() { + return supplierID; + } + + public void setSupplierID(int supplierID) { + this.supplierID = supplierID; + } + + public int getPriority() { + return priority; + } + + public void setPriority(int priority) { + this.priority = priority; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(long updateTime) { + this.updateTime = updateTime; + } + + public Object getOldSupplierID() { + return oldSupplierID; + } + + public void setOldSupplierID(Object oldSupplierID) { + this.oldSupplierID = oldSupplierID; + } + + public Object getOldID() { + return oldID; + } + + public void setOldID(Object oldID) { + this.oldID = oldID; + } + + public int getServiceStatus() { + return serviceStatus; + } + + public void setServiceStatus(int serviceStatus) { + this.serviceStatus = serviceStatus; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getMaxServiceCount() { + return maxServiceCount; + } + + public void setMaxServiceCount(int maxServiceCount) { + this.maxServiceCount = maxServiceCount; + } + + public Object getGroupId() { + return groupId; + } + + public void setGroupId(Object groupId) { + this.groupId = groupId; + } + + public static class QunarNameBean { + /** + * node : qeyzvbi2011 + * domain : ejabhost2 + * resource : null + */ + + private String node; + private String domain; + private Object resource; + + public String getNode() { + return node; + } + + public void setNode(String node) { + this.node = node; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public Object getResource() { + return resource; + } + + public void setResource(Object resource) { + this.resource = resource; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SeatStatusResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SeatStatusResult.java new file mode 100644 index 0000000..5fbb567 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SeatStatusResult.java @@ -0,0 +1,18 @@ +package com.qunar.im.base.jsonbean; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by lihaibin.li on 2017/12/12. + */ + +public class SeatStatusResult extends BaseJsonResult{ + public List data = new ArrayList<>(); + + public static class SeatStatus{ + public String st; + public String sname; + public String sid; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SendMailJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SendMailJson.java new file mode 100644 index 0000000..ba959da --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SendMailJson.java @@ -0,0 +1,31 @@ +package com.qunar.im.base.jsonbean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by Lex lex on 2018/3/21. + */ + +public class SendMailJson implements Serializable { + public String from; + public String from_name; + public List tos; + public List ccs; + public String body; + public String subject; + public String alt_body; + public String is_html; + public String plat; + + public static class ARR { + public String to; + public String name; + } + + + public static class CC { + public String cc; + public String name; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetMoodResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetMoodResult.java new file mode 100644 index 0000000..a9a79ad --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetMoodResult.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by zhaokai on 16-2-2. + */ +public class SetMoodResult extends BaseJsonResult { + + public Data data; + + public static final class Data{ + String user; + String version; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetMucVCardResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetMucVCardResult.java new file mode 100644 index 0000000..e64834b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetMucVCardResult.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; +import java.util.Map; + +/** + * Created by saber on 15-7-14. + */ +public class SetMucVCardResult extends BaseResult { + public List> data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetVCardResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetVCardResult.java new file mode 100644 index 0000000..f8cd98d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetVCardResult.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/5/26. + */ +public class SetVCardResult extends BaseJsonResult { + public List data; + + public static class SetVCardItem + { + public String user; + public String version; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetWorkWorldRemindResponse.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetWorkWorldRemindResponse.java new file mode 100644 index 0000000..5ec900e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SetWorkWorldRemindResponse.java @@ -0,0 +1,125 @@ +package com.qunar.im.base.jsonbean; + +public class SetWorkWorldRemindResponse { + + + /** + * data : {"flag":-2551346.174412787,"host":"incididunt anim qui tempor","id":-2.5693732546345234E7,"notifyKey":"eiusmod","notifyUser":"anim laborum","updateTime":-5.989472605901836E7,"version":8.756102668064383E7} + * errcode : -1.836574071307005E7 + * errmsg : ut quis in + * ret : false + */ + + private DataBean data; + private double errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public double getErrcode() { + return errcode; + } + + public void setErrcode(double errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + /** + * flag : -2551346.174412787 + * host : incididunt anim qui tempor + * id : -2.5693732546345234E7 + * notifyKey : eiusmod + * notifyUser : anim laborum + * updateTime : -5.989472605901836E7 + * version : 8.756102668064383E7 + */ + + private int flag; + private String host; + private double id; + private String notifyKey; + private String notifyUser; + private double updateTime; + private double version; + + public int getFlag() { + return flag; + } + + public void setFlag(int flag) { + this.flag = flag; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public double getId() { + return id; + } + + public void setId(double id) { + this.id = id; + } + + public String getNotifyKey() { + return notifyKey; + } + + public void setNotifyKey(String notifyKey) { + this.notifyKey = notifyKey; + } + + public String getNotifyUser() { + return notifyUser; + } + + public void setNotifyUser(String notifyUser) { + this.notifyUser = notifyUser; + } + + public double getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(double updateTime) { + this.updateTime = updateTime; + } + + public double getVersion() { + return version; + } + + public void setVersion(double version) { + this.version = version; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocation.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocation.java new file mode 100644 index 0000000..05f860c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocation.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-8-18. + */ +public class ShareLocation extends BaseResult { + public String adress; + public String latitude; + public String longitude; + public String fileUrl; + public String name; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocationData.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocationData.java new file mode 100644 index 0000000..5af1290 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocationData.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.jsonbean; + + +/** + * Created by zhaokai on 16-2-17. + */ + +public class ShareLocationData extends BaseResult { + + public String direction; + + public String longitude; + + public String latitude; + +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocationExtendInfo.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocationExtendInfo.java new file mode 100644 index 0000000..c2f9eeb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareLocationExtendInfo.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by zhaokai on 16-2-17. + */ +public class ShareLocationExtendInfo extends BaseResult { + public String shareId; + public String fromId; +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareMessageEntity.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareMessageEntity.java new file mode 100644 index 0000000..bb408bb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ShareMessageEntity.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2016/9/2. + */ +public class ShareMessageEntity { + public int d; + public String b; + public int t; + public long s; + public String n; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/StringJsonResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/StringJsonResult.java new file mode 100644 index 0000000..d298919 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/StringJsonResult.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by zhaokai on 15-9-15. + */ +public class StringJsonResult extends BaseJsonResult { + public List data; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SyncConversation.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SyncConversation.java new file mode 100644 index 0000000..e90c74e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SyncConversation.java @@ -0,0 +1,21 @@ +package com.qunar.im.base.jsonbean; + +/** + * 会话同步 + */ +public class SyncConversation { +// id 带@的id +// timestamp 毫秒时间戳 +// realjid consult消息中的realjid,如果不是consult消息,这个地方填空 +// type +// groupchat/chat/consult 与消息类型保持一致 +// +// qchatid 4/5 + public String id; + public long timestamp; + public String realjid; + public String type; + public String qchatid; +} + + diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/SystemResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SystemResult.java new file mode 100644 index 0000000..c7fe58c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/SystemResult.java @@ -0,0 +1,18 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by zhaokai on 15-11-11. + */ +public class SystemResult extends BaseResult{ + public String title; + public List content; + public String operation_url; + public String prompt; + public String order_id; + public static class Content{ + public String sub_title; + public String sub_content; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ThirdRequestMsgJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ThirdRequestMsgJson.java new file mode 100644 index 0000000..e3065b3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ThirdRequestMsgJson.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 16-1-27. + */ +public class ThirdRequestMsgJson extends BaseResult { + //tv_date, tv_location,tv_time_stamp,tv_message_content,tv_action + public String headurl; + public String detail; + public String dealid; + public String dealurl; + public String source; + public String timeout; + public int status; // 0 未抢答,1 已抢答 2成功 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/ThirdResponseMsgJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ThirdResponseMsgJson.java new file mode 100644 index 0000000..833bb85 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/ThirdResponseMsgJson.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 16-1-27. + */ +public class ThirdResponseMsgJson extends BaseResult { + public String result; + public String errorinfo; + public String dealid; + public String sessionid; + public String nickname; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferConsult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferConsult.java new file mode 100644 index 0000000..4e691db --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferConsult.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 10/21/2015. + */ +public class TransferConsult { + public String d; + public String f; + public String r; + public String u; + public String toId; + public String retId; + public String rt; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferConversation.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferConversation.java new file mode 100644 index 0000000..f320e04 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferConversation.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xingchao.song on 10/21/2015. + */ +public class TransferConversation { + public String TransId; + public String TransReson; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferNote.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferNote.java new file mode 100644 index 0000000..2805486 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferNote.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by haoran.zuo on 2017/8/17. + */ + +public class TransferNote { + public String d; + public String f; + public String r; + public String u; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferWebChat.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferWebChat.java new file mode 100644 index 0000000..26f4503 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/TransferWebChat.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by haoran.zuo on 2017/8/14. + */ +//"TransReson": "test 转移", "realtoId": "laserhenry", "toId":"虚拟id","realtoIdNickName":"xxx","realfromIdNickName":"00000","retId":"66ea917c0dc74fa5b63e2321cc8cfa4d" +public class TransferWebChat { + public String TransReson; + public String realtoId; + public String toId; + public String realtoIdNickName; + public String realfromIdNickName; + public String retId; + public String realtoDomain; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/UpdateResponse.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/UpdateResponse.java new file mode 100644 index 0000000..3399b0c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/UpdateResponse.java @@ -0,0 +1,41 @@ +package com.qunar.im.base.jsonbean; + +public final class UpdateResponse extends BaseResult{ + + /** + * 服务器端最新版本号,如果和客户端版本号相同则无升级需求 + */ + public Integer version; + + /** + * 平台 + */ + public String platform; + + /** + * 更新消息 + */ + public String message; + + /** + * 是否强制升级 + */ + public Boolean forceUpdate; + + /** + * 下载链接地址 + */ + public String linkUrl; + + public long fileSize; + + /** + * MD5 + */ + public String md5; + + /** + * 是否有更新 + */ + public boolean isUpdated; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/UploadImageResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/UploadImageResult.java new file mode 100644 index 0000000..550154b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/UploadImageResult.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.jsonbean; + + +/** + * Created by shaopeng.wu on 2014/5/23. + */ +public class UploadImageResult extends BaseResult { + + public String httpUrl; + public String fileName; + + public int width; + public int height; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/UserStatusResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/UserStatusResult.java new file mode 100644 index 0000000..071ae28 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/UserStatusResult.java @@ -0,0 +1,22 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/4/23. + */ +public class UserStatusResult extends BaseJsonResult { + public List data; + + public static class UsersStatus implements BaseData + { + public String domain; + public List ul; + } + + public static class UserListItem + { + public String u; + public String o; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/VCardResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/VCardResult.java new file mode 100644 index 0000000..d4911fc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/VCardResult.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.jsonbean; + +import java.util.List; + +/** + * Created by xinbo.wang on 2015/5/15. + */ +public class VCardResult extends BaseResult { + + public List data; + + public class VCardItem implements BaseData + { + public String U; + public int V; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/VersionBean.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/VersionBean.java new file mode 100644 index 0000000..05a27b2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/VersionBean.java @@ -0,0 +1,54 @@ +package com.qunar.im.base.jsonbean; + +public class VersionBean { + + /** + * version : 9 + */ + + private int version; + private String resource; + private boolean force; + private boolean forcequickreply; + private boolean forceOldSearch; + + public boolean isForceOldSearch() { + return forceOldSearch; + } + + public void setForceOldSearch(boolean forceOldSearch) { + this.forceOldSearch = forceOldSearch; + } + + public boolean isForce() { + return force; + } + + public void setForce(boolean force) { + this.force = force; + } + + public String getResource() { + return resource; + } + + public void setResource(String resource) { + this.resource = resource; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public boolean isForcequickreply() { + return forcequickreply; + } + + public void setForcequickreply(boolean forcequickreply) { + this.forcequickreply = forcequickreply; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/VideoMessageResult.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/VideoMessageResult.java new file mode 100644 index 0000000..5b65c08 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/VideoMessageResult.java @@ -0,0 +1,30 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by saber on 15-8-12. + */ +public class VideoMessageResult { + public String ThumbUrl; + public String ThumbName; + public String FileName; + public String Width; + public String Height; + public String FileSize; + public String Duration; + public String FileUrl; + public String fileMd5; + public String LocalVideoOutPath; + public boolean newVideo; + + public static VideoMessageResult createInstance(ImgVideoBean bean){ + VideoMessageResult videoMessageResult = new VideoMessageResult(); + videoMessageResult.FileUrl = bean.url; + videoMessageResult.ThumbUrl = bean.thumbUrl; + videoMessageResult.FileName = bean.fileName; + videoMessageResult.Duration = bean.Duration; + videoMessageResult.FileSize = bean.fileSize; + videoMessageResult.Width = bean.Width; + videoMessageResult.Height = bean.Height; + return videoMessageResult; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/WebRtcJson.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/WebRtcJson.java new file mode 100644 index 0000000..b57de7c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/WebRtcJson.java @@ -0,0 +1,18 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by xinbo.wang on 2016-12-29. + */ +public class WebRtcJson extends BaseResult { + public String type; + public WebRtcPayload payload; + + public static class WebRtcPayload extends BaseResult + { + public String sdp; + public String type; + public String candidate; + public String id; + public int label; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/WebrtcMessageExtention.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/WebrtcMessageExtention.java new file mode 100644 index 0000000..80ede27 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/WebrtcMessageExtention.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.jsonbean; + +/** + * Created by Lex lex on 2019-09-25. + */ +public class WebrtcMessageExtention extends BaseResult { + + public String type; + public long time;//单位秒 + public String des; + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/jsonbean/WorkWorldEntrance.java b/lib_common/src/main/java/com/qunar/im/base/jsonbean/WorkWorldEntrance.java new file mode 100644 index 0000000..9008430 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/jsonbean/WorkWorldEntrance.java @@ -0,0 +1,69 @@ +package com.qunar.im.base.jsonbean; + +public class WorkWorldEntrance { + /** + * data : {"authSign":false} + * errcode : 6.75510084911507E7 + * errmsg : magna veniam culpa nisi Duis + * ret : true + */ + + private DataBean data; + private double errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public double getErrcode() { + return errcode; + } + + public void setErrcode(double errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + /** + * authSign : false + */ + + private boolean authSign; + + public boolean isAuthSign() { + return authSign; + } + + public void setAuthSign(boolean authSign) { + this.authSign = authSign; + } + } +// public Object errcode; +// public String errmsg; +// public boolean ret; +// public int ver; + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/AbstractExpandableItem.java b/lib_common/src/main/java/com/qunar/im/base/module/AbstractExpandableItem.java new file mode 100755 index 0000000..8cc6a11 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/AbstractExpandableItem.java @@ -0,0 +1,80 @@ +package com.qunar.im.base.module; + +import java.util.ArrayList; +import java.util.List; + +/** + *

A helper to implement expandable item.

+ *

if you don't want to extent a class, you can also implement the interface IExpandable

+ * Created by luoxw on 2016/8/9. + */ +public abstract class AbstractExpandableItem implements IExpandable { + protected boolean mExpandable = false; + protected List mSubItems; + + @Override + public boolean isExpanded() { + return mExpandable; + } + + @Override + public void setExpanded(boolean expanded) { + mExpandable = expanded; + } + + @Override + public List getSubItems() { + return mSubItems; + } + + public boolean hasSubItem() { + return mSubItems != null && mSubItems.size() > 0; + } + + public void setSubItems(List list) { + mSubItems = list; + } + + public T getSubItem(int position) { + if (hasSubItem() && position < mSubItems.size()) { + return mSubItems.get(position); + } else { + return null; + } + } + + public int getSubItemPosition(T subItem) { + return mSubItems != null ? mSubItems.indexOf(subItem) : -1; + } + + public void addSubItem(T subItem) { + if (mSubItems == null) { + mSubItems = new ArrayList<>(); + } + mSubItems.add(subItem); + } + + public void addSubItem(int position, T subItem) { + if (mSubItems != null && position >= 0 && position < mSubItems.size()) { + mSubItems.add(position, subItem); + } else { + addSubItem(subItem); + } + } + + public boolean contains(T subItem) { + return mSubItems != null && mSubItems.contains(subItem); + } + + public boolean removeSubItem(T subItem) { + return mSubItems != null && mSubItems.remove(subItem); + } + + public boolean removeSubItem(int position) { + if (mSubItems != null && position >= 0 && position < mSubItems.size()) { + mSubItems.remove(position); + return true; + } + return false; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/AnonymousData.java b/lib_common/src/main/java/com/qunar/im/base/module/AnonymousData.java new file mode 100644 index 0000000..9071820 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/AnonymousData.java @@ -0,0 +1,84 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +public class AnonymousData implements Serializable { + + + private boolean ret; + private int errcode; + private String errmsg; + private Data data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public class Data implements Serializable { + + private int id; + private String anonymous; + private String anonymousPhoto; + private int replaceable;//0不可更换 1 可更换 + + public int getReplaceable() { + return replaceable; + } + + public void setReplaceable(int replaceable) { + this.replaceable = replaceable; + } + + public void setId(int id) { + this.id = id; + } + public int getId() { + return id; + } + + public void setAnonymous(String anonymous) { + this.anonymous = anonymous; + } + public String getAnonymous() { + return anonymous; + } + + public void setAnonymousPhoto(String anonymousPhoto) { + this.anonymousPhoto = anonymousPhoto; + } + public String getAnonymousPhoto() { + return anonymousPhoto; + } + + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/AreaLocal.java b/lib_common/src/main/java/com/qunar/im/base/module/AreaLocal.java new file mode 100644 index 0000000..447406f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/AreaLocal.java @@ -0,0 +1,137 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class AreaLocal { + + /** + * ret : true + * errcode : 0 + * errmsg : + * data : {"list":[{"areaID":13,"enable":1,"areaName":"东升B2-4-A区","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"东升"},{"areaID":14,"enable":1,"areaName":"东升B2-4-B区","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"东升"},{"areaID":15,"enable":1,"areaName":"东升B2-4-C区","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"东升"},{"areaID":16,"enable":1,"areaName":"东升B2-4-D区","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"东升"},{"areaID":41,"enable":1,"areaName":"东升D1-1层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":""},{"areaID":42,"enable":1,"areaName":"东升D1-2层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":""},{"areaID":43,"enable":1,"areaName":"东升D1-3层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":""},{"areaID":44,"enable":1,"areaName":"东升D1-4层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":""},{"areaID":21,"enable":1,"areaName":"八爪鱼电话会议设备","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"设备"},{"areaID":22,"enable":1,"areaName":"投影仪预约","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"设备"},{"areaID":10,"enable":1,"areaName":"电子大厦17层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"电子大厦"},{"areaID":11,"enable":1,"areaName":"电子大厦19层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"电子大厦"},{"areaID":9,"enable":1,"areaName":"电子大厦3层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"电子大厦"},{"areaID":4,"enable":1,"areaName":"维亚大厦16层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"维亚大厦"},{"areaID":5,"enable":1,"areaName":"维亚大厦17层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"维亚大厦"},{"areaID":1,"enable":1,"areaName":"维亚大厦3层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"维亚大厦"},{"areaID":2,"enable":1,"areaName":"维亚大厦5层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"维亚大厦"},{"areaID":3,"enable":1,"areaName":"维亚大厦8层","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":"维亚大厦"},{"areaID":32,"enable":1,"areaName":"维亚大厦915会议区","morningStarts":"08:00:00","eveningEnds":"20:00:00","description":""}]} + */ + + private boolean ret; + private int errcode; + private String errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + private List list; + private String version; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * areaID : 13 + * enable : 1 + * areaName : 东升B2-4-A区 + * morningStarts : 08:00:00 + * eveningEnds : 20:00:00 + * description : 东升 + */ + + private int areaID; + private int enable; + private String areaName; + private String morningStarts; + private String eveningEnds; + private String description; + + public int getAreaID() { + return areaID; + } + + public void setAreaID(int areaID) { + this.areaID = areaID; + } + + public int getEnable() { + return enable; + } + + public void setEnable(int enable) { + this.enable = enable; + } + + public String getAreaName() { + return areaName; + } + + public void setAreaName(String areaName) { + this.areaName = areaName; + } + + public String getMorningStarts() { + return morningStarts; + } + + public void setMorningStarts(String morningStarts) { + this.morningStarts = morningStarts; + } + + public String getEveningEnds() { + return eveningEnds; + } + + public void setEveningEnds(String eveningEnds) { + this.eveningEnds = eveningEnds; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/AtData.java b/lib_common/src/main/java/com/qunar/im/base/module/AtData.java new file mode 100644 index 0000000..6137265 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/AtData.java @@ -0,0 +1,60 @@ +package com.qunar.im.base.module; + +import java.util.List; + +/** + * Created by hubin on 2017/10/23. + */ + +public class AtData { + + /** + * type : 10001 + * data : [{"jid":"hubo.hu@ejabhost1","text":"胡泊hu"}] + */ + + private int type; + private List data; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * jid : hubo.hu@ejabhost1 + * text : 胡泊hu + */ + + private String jid; + private String text; + + public String getJid() { + return jid; + } + + public void setJid(String jid) { + this.jid = jid; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/AvailableRoomRequest.java b/lib_common/src/main/java/com/qunar/im/base/module/AvailableRoomRequest.java new file mode 100644 index 0000000..c0db330 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/AvailableRoomRequest.java @@ -0,0 +1,49 @@ +package com.qunar.im.base.module; + +public class AvailableRoomRequest { + + + /** + * date : 2018-08-13 + * areaId : 6 + * startTime : 12:00 + * endTime : 13:00 + */ + + private String date; + private int areaId; + private String startTime; + private String endTime; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public int getAreaId() { + return areaId; + } + + public void setAreaId(int areaId) { + this.areaId = areaId; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/AvailableRoomResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/AvailableRoomResponse.java new file mode 100644 index 0000000..3ef2908 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/AvailableRoomResponse.java @@ -0,0 +1,106 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class AvailableRoomResponse { + + /** + * ret : true + * errcode : 0 + * errmsg : + * data : [{"description":"白板、会服物资","roomName":"印度洋","capacity":8,"roomId":13,"canUse":0},{"description":"白板、会服物资","roomName":"太平洋","capacity":8,"roomId":12,"canUse":0},{"description":"白板、会服物资","roomName":"北冰洋","capacity":6,"roomId":11,"canUse":0}] + */ + + private boolean ret; + private int errcode; + private String errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * description : 白板、会服物资 + * roomName : 印度洋 + * capacity : 8 + * roomId : 13 + * canUse : 0 + */ + + private String description; + private String roomName; + private int capacity; + private int roomId; + private int canUse; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getRoomName() { + return roomName; + } + + public void setRoomName(String roomName) { + this.roomName = roomName; + } + + public int getCapacity() { + return capacity; + } + + public void setCapacity(int capacity) { + this.capacity = capacity; + } + + public int getRoomId() { + return roomId; + } + + public void setRoomId(int roomId) { + this.roomId = roomId; + } + + public int getCanUse() { + return canUse; + } + + public void setCanUse(int canUse) { + this.canUse = canUse; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/BaseIMMessage.java b/lib_common/src/main/java/com/qunar/im/base/module/BaseIMMessage.java new file mode 100644 index 0000000..eccfec4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/BaseIMMessage.java @@ -0,0 +1,60 @@ +package com.qunar.im.base.module; + +/** + * Created by xinbo.wang on 2015/5/8. + */ +public class BaseIMMessage extends BaseModel { + public static final int PREPARE = 0; + public static final int READ = 1; + public static final int READING = 2; + public static final int LEFT = 1; + public static final int MIDDLE = 2; + public static final int RIGHT = 4; + public int position; + public String backupInfo; + public String channelId; + public String channelid; + public String realto; + public String qchatid; + public String realfrom; + public String userInfo; + private int readStatus; + + public int getReadStatus() { + return readStatus; + } + + public void setReadStatus(int readStatus) { + this.readStatus = readStatus; + } + + public class Chan{ + private String cn; + private String d; + private String usrType; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getD() { + return d; + } + + public void setD(String d) { + this.d = d; + } + + public String getUsrType() { + return usrType; + } + + public void setUsrType(String usrType) { + this.usrType = usrType; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/BaseModel.java b/lib_common/src/main/java/com/qunar/im/base/module/BaseModel.java new file mode 100644 index 0000000..218d733 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/BaseModel.java @@ -0,0 +1,7 @@ +package com.qunar.im.base.module; + +/** + * Created by xinbo.wang on 2015/5/29. + */ +public class BaseModel { +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/Buddy.java b/lib_common/src/main/java/com/qunar/im/base/module/Buddy.java new file mode 100644 index 0000000..e3f7a03 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/Buddy.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.module; +import java.io.Serializable; + +/** + * Created by zhaokai on 15-12-7. + */ +public class Buddy extends BaseModel implements Serializable { + public String id; + public int version; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/BuddyRequest.java b/lib_common/src/main/java/com/qunar/im/base/module/BuddyRequest.java new file mode 100644 index 0000000..1c6262c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/BuddyRequest.java @@ -0,0 +1,105 @@ +package com.qunar.im.base.module; + +/** + * Created by zhaokai on 15-12-8. + */ +public class BuddyRequest extends BaseModel { + + /** + * 相关联的userId + */ + private String id; + /** + * 当direction 是SEND的时候拒绝原因 + * 当direction 是RECEIVE的时候是验证消息 + */ + private String reason; + /** + * 最后一次更新时间 + */ + private long time; + /** + * 现在处于的状态 + * + * @see BuddyRequest.Status + */ + private int status; + /** + * 发出/收到 + * + * @see com.qunar.im.base.module.BuddyRequest.Direction + */ + private int direction; + public String getId() { + return id; + } + + public void setId(String userId) + { + this.id = userId; + } + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + /** + * @see BuddyRequest.Status + */ + public int getStatus() { + return status; + } + + /** + * @see BuddyRequest.Status + */ + public void setStatus(int status) { + this.status = status; + } + + /** + * @see com.qunar.im.base.module.BuddyRequest.Direction + */ + public int getDirection() { + return direction; + } + + /** + * @see com.qunar.im.base.module.BuddyRequest.Direction + */ + public void setDirection(int direction) { + this.direction = direction; + } + + public static final class Status { + /** + * 正在处理中 + */ + public static final int PENDING = 0; + /** + * 接受好友关系 + */ + public static final int ACCEPT = 1; + /** + * 拒绝好友关系 + */ + public static final int DENY = 2; + } + + + public static final class Direction { + public static final int SEND = 0; + public static final int RECEIVE = 1; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CalendarTrip.java b/lib_common/src/main/java/com/qunar/im/base/module/CalendarTrip.java new file mode 100644 index 0000000..8924e36 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CalendarTrip.java @@ -0,0 +1,317 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class CalendarTrip { + + + /** + * ret : true + * errcode : 0 + * errmsg : + * data : {"trips":[{"tripIntr":"我想开个会","tripRemark":"可以写点自己对此会的备注","scheduleTime":"2018-08-03 10:00:00+08","operateType":null,"updateTime":null,"appointment":"预约会面","tripId":"49bc0bec2c5f40c5b963d0a66f99d7f7","tripRoom":"酸梅汤","tripLocaleNumber":"2","tripLocale":"维亚大厦","tripType":"0","tripInviter":"hubin.hu@ejabhost1","memberList":[{"memberId":"liufan.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"helen.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"hubin.hu@ejabhost1","memberState":"0","memberStateDescribe":""}],"tripRoomNumber":"1","tripDate":"2018-08-03","tripName":"RN大神邀请会","beginTime":"2018-08-03 14:00:00+08","endTime":"2018-08-03 15:00:00+08"},{"tripIntr":"我想开个会","tripRemark":"可以写点自己对此会的备注","scheduleTime":"2018-08-03 10:00:00+08","operateType":null,"updateTime":null,"appointment":"预约会面","tripId":"5fa779e6ecb744e3a2573094a2ae3572","tripRoom":"酸梅汤","tripLocaleNumber":"2","tripLocale":"维亚大厦","tripType":"0","tripInviter":"hubin.hu@ejabhost1","memberList":[{"memberId":"liufan.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"helen.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"hubin.hu@ejabhost1","memberState":"0","memberStateDescribe":""}],"tripRoomNumber":"1","tripDate":"2018-08-03","tripName":"RN大神邀请会","beginTime":"2018-08-03 14:00:00+08","endTime":"2018-08-03 15:00:00+08"}],"updateTime":null} + */ + + private boolean ret; + private int errcode; + private String errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * trips : [{"tripIntr":"我想开个会","tripRemark":"可以写点自己对此会的备注","scheduleTime":"2018-08-03 10:00:00+08","operateType":null,"updateTime":null,"appointment":"预约会面","tripId":"49bc0bec2c5f40c5b963d0a66f99d7f7","tripRoom":"酸梅汤","tripLocaleNumber":"2","tripLocale":"维亚大厦","tripType":"0","tripInviter":"hubin.hu@ejabhost1","memberList":[{"memberId":"liufan.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"helen.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"hubin.hu@ejabhost1","memberState":"0","memberStateDescribe":""}],"tripRoomNumber":"1","tripDate":"2018-08-03","tripName":"RN大神邀请会","beginTime":"2018-08-03 14:00:00+08","endTime":"2018-08-03 15:00:00+08"},{"tripIntr":"我想开个会","tripRemark":"可以写点自己对此会的备注","scheduleTime":"2018-08-03 10:00:00+08","operateType":null,"updateTime":null,"appointment":"预约会面","tripId":"5fa779e6ecb744e3a2573094a2ae3572","tripRoom":"酸梅汤","tripLocaleNumber":"2","tripLocale":"维亚大厦","tripType":"0","tripInviter":"hubin.hu@ejabhost1","memberList":[{"memberId":"liufan.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"helen.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"hubin.hu@ejabhost1","memberState":"0","memberStateDescribe":""}],"tripRoomNumber":"1","tripDate":"2018-08-03","tripName":"RN大神邀请会","beginTime":"2018-08-03 14:00:00+08","endTime":"2018-08-03 15:00:00+08"}] + * updateTime : null + */ + + private String updateTime; + private List trips; + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public List getTrips() { + return trips; + } + + public void setTrips(List trips) { + this.trips = trips; + } + + public static class TripsBean { + /** + * tripIntr : 我想开个会 + * tripRemark : 可以写点自己对此会的备注 + * scheduleTime : 2018-08-03 10:00:00+08 + * operateType : null + * updateTime : null + * appointment : 预约会面 + * tripId : 49bc0bec2c5f40c5b963d0a66f99d7f7 + * tripRoom : 酸梅汤 + * tripLocaleNumber : 2 + * tripLocale : 维亚大厦 + * tripType : 0 + * tripInviter : hubin.hu@ejabhost1 + * memberList : [{"memberId":"liufan.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"helen.liu@ejabhost1","memberState":"0","memberStateDescribe":""},{"memberId":"hubin.hu@ejabhost1","memberState":"0","memberStateDescribe":""}] + * tripRoomNumber : 1 + * tripDate : 2018-08-03 + * tripName : RN大神邀请会 + * beginTime : 2018-08-03 14:00:00+08 + * endTime : 2018-08-03 15:00:00+08 + */ + + private String checkId;//为检查用户是否冲突所用字段, 与创建会议字段无关 + private String tripIntr; + private String tripRemark; + private String scheduleTime; + private String operateType; + private String updateTime; + private String appointment; + private String tripId; + private String tripRoom; + private String tripLocaleNumber; + private String tripLocale; + private String tripType; + private String tripInviter; + private String tripRoomNumber; + private String tripDate; + private String tripName; + private String beginTime; + private String endTime; + private List memberList; + private boolean canceled; + + public boolean getCanceled() { + return canceled; + } + + public void setCanceled(boolean canceled) { + this.canceled = canceled; + } + + public String getCheckId() { + return checkId; + } + + public void setCheckId(String checkId) { + this.checkId = checkId; + } + + public String getTripIntr() { + return tripIntr; + } + + public void setTripIntr(String tripIntr) { + this.tripIntr = tripIntr; + } + + public String getTripRemark() { + return tripRemark; + } + + public void setTripRemark(String tripRemark) { + this.tripRemark = tripRemark; + } + + public String getScheduleTime() { + return scheduleTime; + } + + public void setScheduleTime(String scheduleTime) { + this.scheduleTime = scheduleTime; + } + + public String getOperateType() { + return operateType; + } + + public void setOperateType(String operateType) { + this.operateType = operateType; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getAppointment() { + return appointment; + } + + public void setAppointment(String appointment) { + this.appointment = appointment; + } + + public String getTripId() { + return tripId; + } + + public void setTripId(String tripId) { + this.tripId = tripId; + } + + public String getTripRoom() { + return tripRoom; + } + + public void setTripRoom(String tripRoom) { + this.tripRoom = tripRoom; + } + + public String getTripLocaleNumber() { + return tripLocaleNumber; + } + + public void setTripLocaleNumber(String tripLocaleNumber) { + this.tripLocaleNumber = tripLocaleNumber; + } + + public String getTripLocale() { + return tripLocale; + } + + public void setTripLocale(String tripLocale) { + this.tripLocale = tripLocale; + } + + public String getTripType() { + return tripType; + } + + public void setTripType(String tripType) { + this.tripType = tripType; + } + + public String getTripInviter() { + return tripInviter; + } + + public void setTripInviter(String tripInviter) { + this.tripInviter = tripInviter; + } + + public String getTripRoomNumber() { + return tripRoomNumber; + } + + public void setTripRoomNumber(String tripRoomNumber) { + this.tripRoomNumber = tripRoomNumber; + } + + public String getTripDate() { + return tripDate; + } + + public void setTripDate(String tripDate) { + this.tripDate = tripDate; + } + + public String getTripName() { + return tripName; + } + + public void setTripName(String tripName) { + this.tripName = tripName; + } + + public String getBeginTime() { + return beginTime; + } + + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public List getMemberList() { + return memberList; + } + + public void setMemberList(List memberList) { + this.memberList = memberList; + } + + public static class MemberListBean { + /** + * memberId : liufan.liu@ejabhost1 + * memberState : 0 + * memberStateDescribe : + */ + + private String memberId; + private String memberState; + private String memberStateDescribe; + + public String getMemberId() { + return memberId; + } + + public void setMemberId(String memberId) { + this.memberId = memberId; + } + + public String getMemberState() { + return memberState; + } + + public void setMemberState(String memberState) { + this.memberState = memberState; + } + + public String getMemberStateDescribe() { + return memberStateDescribe; + } + + public void setMemberStateDescribe(String memberStateDescribe) { + this.memberStateDescribe = memberStateDescribe; + } + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CalendarTripFailure.java b/lib_common/src/main/java/com/qunar/im/base/module/CalendarTripFailure.java new file mode 100644 index 0000000..7d5a96a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CalendarTripFailure.java @@ -0,0 +1,5 @@ +package com.qunar.im.base.module; + +public class CalendarTripFailure { + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ChatRoom.java b/lib_common/src/main/java/com/qunar/im/base/module/ChatRoom.java new file mode 100644 index 0000000..a09bfa3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ChatRoom.java @@ -0,0 +1,156 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by zhao.liu on 2014/11/26. + */ + +public class ChatRoom extends BaseModel implements Serializable,Comparable { + public final static int JOINED = 1; + public final static int UNJOINED = 0; + + public final static int YES = 1; + public final static int NO = 0; + + public ChatRoom(){} + private String name; + private String id; + private String subject; + private int isJoined = JOINED; + private String password; + private String description; + private String picUrl; + + private int version; + private int isSubjectModifiable; + private int isMembersOnly; + private int isModerated; + private int isNonanonymous; + private int isPasswordProtected; + private int isPersistent; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getJid() { + return id; + } + + public void setJid(String jid) { + this.id = jid; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public int getIsJoined() { + return isJoined; + } + + public void setIsJoined(int isJoined) { + this.isJoined = isJoined; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public int getIsSubjectModifiable() { + return isSubjectModifiable; + } + + public void setIsSubjectModifiable(int isSubjectModifiable) { + this.isSubjectModifiable = isSubjectModifiable; + } + + public int getIsMembersOnly() { + return isMembersOnly; + } + + public void setIsMembersOnly(int isMembersOnly) { + this.isMembersOnly = isMembersOnly; + } + + public int getIsModerated() { + return isModerated; + } + + public void setIsModerated(int isModerated) { + this.isModerated = isModerated; + } + + public int getIsNonanonymous() { + return isNonanonymous; + } + + public void setIsNonanonymous(int isNonanonymous) { + this.isNonanonymous = isNonanonymous; + } + + public int getIsPasswordProtected() { + return isPasswordProtected; + } + + public void setIsPasswordProtected(int isPasswordProtected) { + this.isPasswordProtected = isPasswordProtected; + } + + public int getIsPersistent() { + return isPersistent; + } + + public void setIsPersistent(int isPersistent) { + this.isPersistent = isPersistent; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getPicUrl() { + return picUrl; + } + + public void setPicUrl(String picUrl) { + this.picUrl = picUrl; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + @Override + public int compareTo(ChatRoom another) { + return this.getJid().compareTo(another.getJid()); + } + + @Override + public boolean equals(Object object) + { + return object!=null&&getJid()!=null&& + object instanceof ChatRoom&&getJid().equals(((ChatRoom)object).getJid()); + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ChatRoomMember.java b/lib_common/src/main/java/com/qunar/im/base/module/ChatRoomMember.java new file mode 100644 index 0000000..0747476 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ChatRoomMember.java @@ -0,0 +1,81 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by xinbo.wang on 2015/3/25. + */ +public class ChatRoomMember extends BaseModel implements Serializable,Comparable { + public static final int OWNER = 0; + public static final int ADMIN = 1; + public static final int MEMBER= 2; + public static final int NONE = 4; + + private String roomId; + private String nickName; + private String jid; + private boolean isRevokeVoice; + private int powerLevel = NONE; + private String fuzzy; + + + public String getRoomId() { + return roomId; + } + + public void setRoomId(String roomId) { + this.roomId = roomId; + } + + public String getFuzzy() { + return fuzzy; + } + + public void setFuzzy(String fuzzy) { + this.fuzzy = fuzzy; + } + + public int getPowerLevel() { + return powerLevel; + } + + public void setPowerLevel(int powerLevel) { + this.powerLevel = powerLevel; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public String getJid() { + return jid; + } + + public void setJid(String jid) { + this.jid = jid; + } + + @Override + public int compareTo(ChatRoomMember another) { + if(this.powerLevel == another.powerLevel) return 0; + if(this.powerLevel < another.powerLevel) return -1; + else return 1; + } + + @Override + public boolean equals(Object another) + { + return another instanceof ChatRoomMember && (roomId+jid).equals(((ChatRoomMember) another).roomId + + ((ChatRoomMember) another).jid); + } + + @Override + public int hashCode() + { + return (roomId+jid).hashCode(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ChatingExtention.java b/lib_common/src/main/java/com/qunar/im/base/module/ChatingExtention.java new file mode 100644 index 0000000..0c6255d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ChatingExtention.java @@ -0,0 +1,51 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by saber on 15-8-17. + */ +public class ChatingExtention extends BaseModel implements Serializable { + public final static int DND = 1; + public final static int AVAILABLE = 0; + + public static final int SHOW_NICK = 0; + public static final int NOT_SHOW_NICK = 1; + private String id; + private String convBackground; + + public int getShowNick() { + return showNick; + } + + public void setShowNick(int showNick) { + this.showNick = showNick; + } + + public int showNick; + private int dnd; // do not disturb + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getConvBackground() { + return convBackground; + } + + public void setConvBackground(String convBackground) { + this.convBackground = convBackground; + } + + public int isDnd() { + return dnd; + } + + public void setDnd(int dnd) { + this.dnd = dnd; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CityLocal.java b/lib_common/src/main/java/com/qunar/im/base/module/CityLocal.java new file mode 100644 index 0000000..e75031b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CityLocal.java @@ -0,0 +1,77 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class CityLocal { + + + /** + * ret : true + * errcode : 0 + * errmsg : + * data : [{"cityName":"上海","id":6},{"cityName":"北京","id":1},{"cityName":"成都","id":4},{"cityName":"武汉","id":5}] + */ + + private boolean ret; + private int errcode; + private String errmsg; + private List data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * cityName : 上海 + * id : 6 + */ + + private String cityName; + private int id; + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CollectionAdapterConstant.java b/lib_common/src/main/java/com/qunar/im/base/module/CollectionAdapterConstant.java new file mode 100644 index 0000000..9f87c7b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CollectionAdapterConstant.java @@ -0,0 +1,7 @@ +package com.qunar.im.base.module; + +public class CollectionAdapterConstant { + + public static final int TYPE_LEVEL_0 = 0; + public static final int TYPE_LEVEL_1 = 1; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CollectionConvItemDate.java b/lib_common/src/main/java/com/qunar/im/base/module/CollectionConvItemDate.java new file mode 100644 index 0000000..7ae39b2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CollectionConvItemDate.java @@ -0,0 +1,155 @@ +package com.qunar.im.base.module; + + +import static com.qunar.im.base.module.CollectionAdapterConstant.TYPE_LEVEL_1; + +/** + * Created by hubin on 2017/11/21. + */ + +public class CollectionConvItemDate implements MultiItemEntity { + + private String msgId; + private String originFrom; + private String originTo; + private String originType; + private String xmppId; + private String from; + private String to; + private String content; + private String type; + private String state; + private String direction; + private String readedTag; + private String lastUpdateTime; + private String realJid; + private int unCount; + + public int getUnCount() { + return unCount; + } + + public void setUnCount(int unCount) { + this.unCount = unCount; + } + + public String getMsgId() { + return msgId; + } + + public void setMsgId(String msgId) { + this.msgId = msgId; + } + + public String getOriginFrom() { + return originFrom; + } + + public void setOriginFrom(String originFrom) { + this.originFrom = originFrom; + } + + public String getOriginTo() { + return originTo; + } + + public void setOriginTo(String originTo) { + this.originTo = originTo; + } + + public String getOriginType() { + return originType; + } + + public void setOriginType(String originType) { + this.originType = originType; + } + + public String getXmppId() { + return xmppId; + } + + public void setXmppId(String xmppId) { + this.xmppId = xmppId; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getDirection() { + return direction; + } + + public void setDirection(String direction) { + this.direction = direction; + } + + public String getReadedTag() { + return readedTag; + } + + public void setReadedTag(String readedTag) { + this.readedTag = readedTag; + } + + public String getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } + + public String getRealJid() { + return realJid; + } + + public void setRealJid(String realJid) { + this.realJid = realJid; + } + + @Override + public int getItemType() { + return TYPE_LEVEL_1; + } + + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CollectionConversation.java b/lib_common/src/main/java/com/qunar/im/base/module/CollectionConversation.java new file mode 100644 index 0000000..2f761f4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CollectionConversation.java @@ -0,0 +1,143 @@ +package com.qunar.im.base.module; + +/** + * Created by hubin on 2017/11/24. + */ + +public class CollectionConversation { + private String msgId; + private String originFrom; + private String originTo; + private String originType; + private String xmppId; + private String from; + private String to; + private String content; + private String type; + private String state; + private String direction; + private String readedTag; + private String lastUpdateTime; + private String realJid; + private int unCount; + + public int getUnCount() { + return unCount; + } + + public void setUnCount(int unCount) { + this.unCount = unCount; + } + + public String getMsgId() { + return msgId; + } + + public void setMsgId(String msgId) { + this.msgId = msgId; + } + + public String getOriginFrom() { + return originFrom; + } + + public void setOriginFrom(String originFrom) { + this.originFrom = originFrom; + } + + public String getOriginTo() { + return originTo; + } + + public void setOriginTo(String originTo) { + this.originTo = originTo; + } + + public String getOriginType() { + return originType; + } + + public void setOriginType(String originType) { + this.originType = originType; + } + + public String getXmppId() { + return xmppId; + } + + public void setXmppId(String xmppId) { + this.xmppId = xmppId; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getDirection() { + return direction; + } + + public void setDirection(String direction) { + this.direction = direction; + } + + public String getReadedTag() { + return readedTag; + } + + public void setReadedTag(String readedTag) { + this.readedTag = readedTag; + } + + public String getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } + + public String getRealJid() { + return realJid; + } + + public void setRealJid(String realJid) { + this.realJid = realJid; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/CollectionUserDate.java b/lib_common/src/main/java/com/qunar/im/base/module/CollectionUserDate.java new file mode 100644 index 0000000..a0cb61a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/CollectionUserDate.java @@ -0,0 +1,56 @@ +package com.qunar.im.base.module; + + +/** + * Created by hubin on 2017/11/21. + */ + +public class CollectionUserDate extends AbstractExpandableItem implements MultiItemEntity { + + private String userId; + private int bind; + private int unRead; + private int position; + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + public int getUnRead() { + return unRead; + } + + public void setUnRead(int unRead) { + this.unRead = unRead; + } + + @Override + public int getItemType() { + return CollectionAdapterConstant.TYPE_LEVEL_0; + } + + @Override + public int getLevel() { + return 0; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getBind() { + return bind; + } + + public void setBind(int bind) { + this.bind = bind; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/DepartmentItem.java b/lib_common/src/main/java/com/qunar/im/base/module/DepartmentItem.java new file mode 100644 index 0000000..cd128dc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/DepartmentItem.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.module; + + +import java.io.Serializable; + +/** + * Created by jiang.cheng on 2015/2/2. + */ +public class DepartmentItem extends BaseModel implements Serializable { + public int id; + public String userId = ""; + public String fullName =""; + public int parentId; + public String deptName=""; + public int status; + public String fuzzyCol=""; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/Dictionary.java b/lib_common/src/main/java/com/qunar/im/base/module/Dictionary.java new file mode 100644 index 0000000..9dfd2e5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/Dictionary.java @@ -0,0 +1,32 @@ +package com.qunar.im.base.module; + +/** + * Created by saber on 16-4-19. + */ +public class Dictionary extends BaseModel implements Comparable { + public static final int CATEGORY_CONFIG = 1; + public static final int CATEGORY_CONV = 2; + public static final int CATEGORY_CUSTOM = 3; + public static final int CATEGORY_BACKUP=4; + public static final int CATEGORY_CONVERSATION_PARAM = 5; + public static final int CATEGORY_COLLECT_EMO = 6; + + public int category; + public String key; + public String value; + public int version; + + @Override + public int compareTo(Dictionary another) { + if(this.key==null)return 0; + return this.key.compareTo(another.key); + } + + @Override + public boolean equals(Object obj) + { + if(!Dictionary.class.isInstance(obj))return false; + Dictionary another = (Dictionary) obj; + return this.key!=null&&this.category==another.category&&this.key.equals(another.key); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/DownLoadFileResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/DownLoadFileResponse.java new file mode 100644 index 0000000..2fadfd8 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/DownLoadFileResponse.java @@ -0,0 +1,32 @@ +package com.qunar.im.base.module; + +public class DownLoadFileResponse { + + private String filePath; + private String fileName; + private String fileMd5; + + public String getFileMd5() { + return fileMd5; + } + + public void setFileMd5(String fileMd5) { + this.fileMd5 = fileMd5; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/FavouriteMessage.java b/lib_common/src/main/java/com/qunar/im/base/module/FavouriteMessage.java new file mode 100644 index 0000000..70c83f7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/FavouriteMessage.java @@ -0,0 +1,95 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by xingchao.song on 9/1/2015. + */ +public class FavouriteMessage extends BaseModel implements Serializable,Comparable { + private String id; + private String textContent; + private String fromUserId; + private String fromUserName ; //消息来源 + private String fromType ; //收藏来源 1 代表从聊天消息里获取 + private String type; //消息类型 + private String item;//item 搜索用 + private String tag;//标签 + private String time; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTextContent() { + return textContent; + } + + public void setTextContent(String textContent) { + this.textContent = textContent; + } + + public String getFromUserId() { + return fromUserId; + } + + public void setFromUserId(String fromUserId) { + this.fromUserId = fromUserId; + } + + public String getFromUserName() { + return fromUserName; + } + + public void setFromUserName(String fromUserName) { + this.fromUserName = fromUserName; + } + + public String getFromType() { + return fromType; + } + + public void setFromType(String fromType) { + this.fromType = fromType; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getItem() { + return item; + } + + public void setItem(String item) { + this.item = item; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + @Override + public int compareTo(FavouriteMessage another) { + return 0; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/FoundConfiguration.java b/lib_common/src/main/java/com/qunar/im/base/module/FoundConfiguration.java new file mode 100644 index 0000000..3817a33 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/FoundConfiguration.java @@ -0,0 +1,227 @@ +package com.qunar.im.base.module; + +import java.util.ArrayList; +import java.util.List; + +public class FoundConfiguration { + + + + private int errorCode; + private String errorMsg; + private boolean ret; + private List data = new ArrayList<>(); + + public int getErrorCode() { + return errorCode; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String groupName; + private int groupId; + private String groupIcon; + private List members = new ArrayList<>(); + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public int getGroupId() { + return groupId; + } + + public void setGroupId(int groupId) { + this.groupId = groupId; + } + + public String getGroupIcon() { + return groupIcon; + } + + public void setGroupIcon(String groupIcon) { + this.groupIcon = groupIcon; + } + + public List getMembers() { + return members; + } + + public void setMembers(List members) { + this.members = members; + } + + public static class MembersBean { + /** + * memberName : 考勤查询 + * memberAction : https://qunar.it/webapp/index.html#/user/myAttendance + * memberId : 0 + * memberIcon : https://ops-superoacp.qunarzz.com/ops_superoa_ops_superoa/prod/lee.guo/2018/12/24/14:52:25/%E8%80%83%E5%8B%A4.png + */ + + + + private String memberName; + private String memberAction; + private int memberId; + private String memberIcon; + /** + * appType : 2 + * entrance : index.android + * bundle : test + * version : 1 + * properties : {"key1":"value1"} + * bundleUrls : /startalk/management/file/download?key=9bb9d57758d886515f3dfbf317ad8934 + * module : + * showNativeNav : true + * navTitle : 演示demo + */ + + private int appType; + private String entrance; + private String bundle; + private int version; + private String properties; + private String bundleUrls; + private String module; + private boolean showNativeNav; + private String navTitle; + + public String getMemberName() { + return memberName; + } + + public void setMemberName(String memberName) { + this.memberName = memberName; + } + + public String getMemberAction() { + return memberAction; + } + + public void setMemberAction(String memberAction) { + this.memberAction = memberAction; + } + + public int getMemberId() { + return memberId; + } + + public void setMemberId(int memberId) { + this.memberId = memberId; + } + + public String getMemberIcon() { + return memberIcon; + } + + public void setMemberIcon(String memberIcon) { + this.memberIcon = memberIcon; + } + + public int getAppType() { + return appType; + } + + public void setAppType(int appType) { + this.appType = appType; + } + + public String getEntrance() { + return entrance; + } + + public void setEntrance(String entrance) { + this.entrance = entrance; + } + + public String getBundle() { + return bundle; + } + + public void setBundle(String bundle) { + this.bundle = bundle; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public String getProperties() { + return properties; + } + + public void setProperties(String properties) { + this.properties = properties; + } + + public String getBundleUrls() { + return bundleUrls; + } + + public void setBundleUrls(String bundleUrls) { + this.bundleUrls = bundleUrls; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } + + public boolean isShowNativeNav() { + return showNativeNav; + } + + public void setShowNativeNav(boolean showNativeNav) { + this.showNativeNav = showNativeNav; + } + + public String getNavTitle() { + return navTitle; + } + + public void setNavTitle(String navTitle) { + this.navTitle = navTitle; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/GroupMember.java b/lib_common/src/main/java/com/qunar/im/base/module/GroupMember.java new file mode 100644 index 0000000..0d7d298 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/GroupMember.java @@ -0,0 +1,141 @@ +package com.qunar.im.base.module; + +import android.text.TextUtils; + +/** + * Created by hubin on 2017/8/24. + */ + +public class GroupMember { + //管理权限 + public static final int OWNER = 0; + public static final int ADMIN = 1; + public static final int MEMBER = 2; + public static final int NONE = 4; + + + private String MemberId;//成员id 带@ + private String GroupId;//群id 带@ + private String MemberJid;//成员真是id 带@ + private String Name;//成员姓名 + private String Affiliation;//成员权限 + private String LastUpdateTime;//最后更新时间 + private String ExtendedFlag;//强化字段 + private String fuzzy;//搜索字段 + private String headerSrc;//成员头像 + private Nick nick;//名片 + + public String getHeaderSrc() { + return headerSrc; + } + + public void setHeaderSrc(String headerSrc) { + this.headerSrc = headerSrc; + } + + public String getMemberId() { + return MemberId; + } + + public void setMemberId(String memberId) { + MemberId = memberId; + } + + public String getGroupId() { + return GroupId; + } + + public void setGroupId(String groupId) { + GroupId = groupId; + } + + public String getMemberJid() { + return MemberJid; + } + + public void setMemberJid(String memberJid) { + MemberJid = memberJid; + } + + public String getName() { + return Name; + } + + public void setName(String name) { + Name = name; + } + + public String getAffiliation() { + return Affiliation; + } + + public void setAffiliation(String affiliation) { + Affiliation = affiliation; + } + + public String getLastUpdateTime() { + return LastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + LastUpdateTime = lastUpdateTime; + } + + public String getExtendedFlag() { + return ExtendedFlag; + } + + public void setExtendedFlag(String extendedFlag) { + ExtendedFlag = extendedFlag; + } + + public String getFuzzy() { + return fuzzy; + } + + public void setFuzzy(String fuzzy) { + this.fuzzy = fuzzy; + } + + /** + * 获取用户权限级别 + * + * @return + */ + public int getPowerLevel() { + if (TextUtils.isEmpty(Affiliation)) { + return NONE; + } + if (Affiliation.equals("m_user")) { + return MEMBER; + } else if (Affiliation.equals("admin")) { + return ADMIN; + } else if (Affiliation.equals("owner")) { + return OWNER; + } else if (Affiliation.equals("-1invalid")) { + return -1; + }else if(Affiliation.equals("-2invalid")){ + return -2; + }else { + return NONE; + } + } + + public void setPowerLevel(int powerLevel) { + if (powerLevel == 0) { + Affiliation = "owner"; + } else if (powerLevel == 1) { + Affiliation = "admin"; + } else if (powerLevel == 2) { + Affiliation = "m_user"; + } else if (powerLevel == -1) { + Affiliation = "-1invalid"; + } else if (powerLevel == -2) { + Affiliation = "-2invalid"; + } else { + Affiliation = ""; + } + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/IExpandable.java b/lib_common/src/main/java/com/qunar/im/base/module/IExpandable.java new file mode 100755 index 0000000..5ff41df --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/IExpandable.java @@ -0,0 +1,19 @@ +package com.qunar.im.base.module; + +import java.util.List; + +/** + * implement the interface if the item is expandable + * Created by luoxw on 2016/8/8. + */ +public interface IExpandable { + boolean isExpanded(); + void setExpanded(boolean expanded); + List getSubItems(); + + /** + * Get the level of this item. The level start from 0. + * If you don't care about the level, just return a negative. + */ + int getLevel(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/IMGroup.java b/lib_common/src/main/java/com/qunar/im/base/module/IMGroup.java new file mode 100644 index 0000000..ed93233 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/IMGroup.java @@ -0,0 +1,78 @@ +package com.qunar.im.base.module; + +/** + * Created by hubin on 2017/9/11. + */ + +public class IMGroup { + //群id + private String GroupId; + //群名称 + private String Name; + //群公告 + private String Introduce; + //群头像 + private String HeaderSrc; + //群说明 + private String Topic; + //更新次数 + private String LastUpdateTime; + //强化消息字段 + private String ExtendedFlag; + + public String getGroupId() { + return GroupId; + } + + public void setGroupId(String groupId) { + GroupId = groupId; + } + + public String getName() { + return Name; + } + + public void setName(String name) { + Name = name; + } + + public String getIntroduce() { + return Introduce; + } + + public void setIntroduce(String introduce) { + Introduce = introduce; + } + + public String getHeaderSrc() { + return HeaderSrc; + } + + public void setHeaderSrc(String headerSrc) { + HeaderSrc = headerSrc; + } + + public String getTopic() { + return Topic; + } + + public void setTopic(String topic) { + Topic = topic; + } + + public String getLastUpdateTime() { + return LastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + LastUpdateTime = lastUpdateTime; + } + + public String getExtendedFlag() { + return ExtendedFlag; + } + + public void setExtendedFlag(String extendedFlag) { + ExtendedFlag = extendedFlag; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/IMMessage.java b/lib_common/src/main/java/com/qunar/im/base/module/IMMessage.java new file mode 100644 index 0000000..ecf358e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/IMMessage.java @@ -0,0 +1,412 @@ +package com.qunar.im.base.module; + +import android.text.TextUtils; + +import com.qunar.im.protobuf.common.ProtoMessageOuterClass; +import com.qunar.im.utils.QtalkStringUtils; + +import org.json.JSONArray; + +import java.io.Serializable; +import java.util.Date; + +public class IMMessage extends BaseIMMessage implements Serializable,Comparable { + public final static int DIRECTION_RECV = 0; + public final static int DIRECTION_SEND = 1; + public final static int DIRECTION_MIDDLE = 2; //可点右上角信息.....的说明类型消息 + + public final static int MSG_UNREAD = 0; + public final static int MSG_READ = 1; + + //名片 + private Nick nick; + private boolean carbon;//是否抄送 + private boolean auto_reply;//是否自动回复消息 + private String id;//消息id + private int type;//代表群或者单聊或者cus消息或者代收消息 + private int collectionType; //代表代收消息时,消息所属类型 单聊, 群, 或者cus等 + private String fromID;//来自于谁 + private String toID;//发送给谁 + private String oFromId;//代收发送人 + private String oToId;//代收接收人 + private String conversationID;//列表id + private String body;//消息正文 + private long time;//时间 + private int isRead;//是否已读 + private int readState;//发送状态 已读 未读 + private int messageState;//消息状态 发送成功 发送失败 发送中 + private int direction;//方向 + private String messageId;//消息Id + private String msgType;//消息类型 + private String maType;//客户端类型 + private String ext;//强化消息字段 + private String backUp;//目前只有@消息用 + private String messageRaw;//消息本体 + private String userId;//基本不会用到的字段,主要用于插入sessionList使用 + private int signalType; //pb消息外层判断字段 + private boolean isCollection; //是否是代收类型消息 + private JSONArray newReadList; //新版阅读指针数据 + + + //上传图片或视频是否 完成 +// private boolean isDone = true; + //上传进度 + private int progress; + //用于发送consult消息时记录一些信息 + private ConsultInfo consultInfo; + + + + public JSONArray getNewReadList() { + return newReadList; + } + + public void setNewReadList(JSONArray newReadList) { + this.newReadList = newReadList; + } + + public String getBackUp() { + return backUp; + } + + public void setBackUp(String backUp) { + this.backUp = backUp; + } + + public boolean isCollection() { + return isCollection; + } + + public void setCollection(boolean collection) { + isCollection = collection; + } + + public int getCollectionType() { + return collectionType; + } + + public void setCollectionType(int collectionType) { + this.collectionType = collectionType; + } + + public String getoFromId() { + return oFromId; + } + + public void setoFromId(String oFromId) { + this.oFromId = oFromId; + } + + public String getoToId() { + return oToId; + } + + public void setoToId(String oToId) { + this.oToId = oToId; + } + + public ConsultInfo getConsultInfo() { + return consultInfo; + } + + public void setConsultInfo(ConsultInfo consultInfo) { + this.consultInfo = consultInfo; + } + + public int getSignalType() { + return signalType; + } + + public void setSignalType(int signalType) { + this.signalType = signalType; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getMessageRaw() { + return messageRaw; + } + + public void setMessageRaw(String messageRaw) { + this.messageRaw = messageRaw; + } + + public Nick getNick() { + return nick; + } + + public void setNick(Nick nick) { + this.nick = nick; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + //群聊时,显示名字 + private String nickName; + + public String getChannelid() { + return channelid; + } + + public void setChannelid(String channelid) { + this.channelid = channelid; + } + + public String getQchatid() { + return qchatid; + } + + public void setQchatid(String qchatid) { + this.qchatid = qchatid; + } + + public String getRealto() { + return realto; + } + + public void setRealto(String realto) { + this.realto = realto; + } + + public String getRealfrom() { + return realfrom; + } + + public void setRealfrom(String realfrom) { + this.realfrom = realfrom; + } + + public int getMsgType() { + if(TextUtils.isEmpty(msgType)) return ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE; + return Integer.parseInt(msgType); + } + + public void setMsgType(int msgType) { + this.msgType = String.valueOf(msgType); + } + + public String getMaType() { + return maType; + } + + public void setMaType(String maType) { + this.maType = maType; + } + + public String getExt() { + return ext; + } + + public void setExt(String ext) { + this.ext = ext; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFromID() { + return this.fromID; + } + + public void setFromID(String fromID) { + this.fromID = fromID; + } + + public String getToID() { + return this.toID; + } + + public void setToID(String toID) { + this.toID = toID; + } + + public String getBody() { + return this.body; + } + + public void setBody(String body) { + this.body = body; + } + + public Date getTime() { + return new Date(time); + } + + public void setTime(Date time) { + this.time = time.getTime(); + } + + public int getType() { + return this.type; + } + + public void setType(int type) { + this.type = type; + } + + public int getIsRead() { + return isRead; + } + + public void setIsRead(int isRead) { + this.isRead = isRead; + } + + public int getReadState() { + return readState; + } + + public int getMessageState() { + return messageState; + } + + public void setMessageState(int messageState) { + this.messageState = messageState; + } + + public void setReadState(int readState) { + this.readState = readState; + } + + public int getDirection() { + return this.direction; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + + public String getConversationID() { + return conversationID; + } + + public void setConversationID(String conversationID) { + this.conversationID = QtalkStringUtils.parseBareJid(conversationID); + } + + public boolean isCarbon() { + return carbon; + } + + public void setCarbon(boolean carbon) { + this.carbon = carbon; + } + + public boolean isAuto_reply() { + return auto_reply; + } + + public void setAuto_reply(boolean auto_reply) { + this.auto_reply = auto_reply; + } +// public boolean isDone() { +// return isDone; +// } +// +// public void setDone(boolean done) { +// isDone = done; +// } + + public int getProgress() { + return progress; + } + + public void setProgress(int progress) { + this.progress = progress; + } + + + /** + * id for messageId + * @return + */ + public void setMessageID(String messageID) { + this.messageId = messageID; + } + + public String getMessageId() { + return messageId; + } + + @Override + public int compareTo(IMMessage another) { + return this.getId().compareTo(another.getId()); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if(this.getId() == null) return false; + if(this.getMessageId() == null) return false; + String msgId = ((IMMessage)o).getMessageId(); + if(TextUtils.isEmpty(msgId)) return false; + if(TextUtils.isEmpty(messageId)) return false; + //(((IMMessage)o).getSignalType() == ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE || ((IMMessage)o).getSignalType() == ProtoMessageOuterClass.SignalType.SignalTypeRevoke_VALUE) && + if(msgId.contains("consult-")) { + msgId = msgId.replace("consult-", ""); + } + //(signalType == ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE || signalType == ProtoMessageOuterClass.SignalType.SignalTypeRevoke_VALUE) && + if(messageId.contains("consult-")) { + messageId = messageId.replace("consult-", ""); + } + return this.getMessageId().equals(msgId); + } + + + + public static class ConsultInfo implements Serializable { + + /** + * cn : consult + * d : send + * userType : usr + */ + + private String cn; + private String d; + private String userType; + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getD() { + return d; + } + + public void setD(String d) { + this.d = d; + } + + public String getUserType() { + return userType; + } + + public void setUserType(String userType) { + this.userType = userType; + } + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/module/IMMessageWrapper.java b/lib_common/src/main/java/com/qunar/im/base/module/IMMessageWrapper.java new file mode 100644 index 0000000..6306477 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/IMMessageWrapper.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.module; + +/** + * Created by qitmac000378 on 15/12/28. + */ +public class IMMessageWrapper { + public IMMessage message; + public int unreadcount; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/IMSessionList.java b/lib_common/src/main/java/com/qunar/im/base/module/IMSessionList.java new file mode 100644 index 0000000..ce20e37 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/IMSessionList.java @@ -0,0 +1,71 @@ +package com.qunar.im.base.module; + +/** + * Created by hubo.hu on 2017/8/24. + */ + +public class IMSessionList { + private String XmppId; + private String RealJid; + private String UserId; + private String LastMessageId; + private String LastUpdateTime; + private String ChatType; + private String ExtendedFlag; + + public String getXmppId() { + return XmppId; + } + + public void setXmppId(String xmppId) { + XmppId = xmppId; + } + + public String getRealJid() { + return RealJid; + } + + public void setRealJid(String realJid) { + RealJid = realJid; + } + + public String getUserId() { + return UserId; + } + + public void setUserId(String userId) { + UserId = userId; + } + + public String getLastMessageId() { + return LastMessageId; + } + + public void setLastMessageId(String lastMessageId) { + LastMessageId = lastMessageId; + } + + public String getLastUpdateTime() { + return LastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + LastUpdateTime = lastUpdateTime; + } + + public String getChatType() { + return ChatType; + } + + public void setChatType(String chatType) { + ChatType = chatType; + } + + public String getExtendedFlag() { + return ExtendedFlag; + } + + public void setExtendedFlag(String extendedFlag) { + ExtendedFlag = extendedFlag; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ImageItem.java b/lib_common/src/main/java/com/qunar/im/base/module/ImageItem.java new file mode 100644 index 0000000..fe9aef5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ImageItem.java @@ -0,0 +1,101 @@ +package com.qunar.im.base.module; + +import android.os.Parcel; +import android.os.Parcelable; +import android.text.TextUtils; + +import java.io.Serializable; + +/** + * 图片信息 + */ +public class ImageItem extends ReleaseCircleImageItemDate implements Serializable, Parcelable { + private static final long serialVersionUID = 1L; + + public String name; //图片的名字 + public String path; //图片的路径 + public long size; //图片的大小 + public int width; //图片的宽度 + public int height; //图片的高度 + public String mimeType; //图片的类型 + public long addTime; //图片的创建时间 + + + //为方便上传添加两个属性 + public String data; + public String local; + public boolean ret; + /** 图片的路径和创建时间相同就认为是同一张图片 */ + @Override + public boolean equals(Object o) { + if (o instanceof ImageItem) { + ImageItem item = (ImageItem) o; + return this.path.equalsIgnoreCase(item.path) && this.addTime == item.addTime; + } + + return super.equals(o); + } + + public ImageItem() { + } + + + public String getPath() { + return TextUtils.isEmpty(path)?data:path; + } + + public void setPath(String path) { + this.path = path; + this.data =path; + } + + public String getData() { + return TextUtils.isEmpty(path)?data:path; + } + + public void setData(String data) { + this.data = data; + this.path = data; + } + + + + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.name); + dest.writeString(this.path); + dest.writeLong(this.size); + dest.writeInt(this.width); + dest.writeInt(this.height); + dest.writeString(this.mimeType); + dest.writeLong(this.addTime); + } + + protected ImageItem(Parcel in) { + this.name = in.readString(); + this.path = in.readString(); + this.size = in.readLong(); + this.width = in.readInt(); + this.height = in.readInt(); + this.mimeType = in.readString(); + this.addTime = in.readLong(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public ImageItem createFromParcel(Parcel source) { + return new ImageItem(source); + } + + @Override + public ImageItem[] newArray(int size) { + return new ImageItem[size]; + } + }; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ImageItemWorkWorldItem.java b/lib_common/src/main/java/com/qunar/im/base/module/ImageItemWorkWorldItem.java new file mode 100644 index 0000000..9d313c7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ImageItemWorkWorldItem.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +import static com.qunar.im.base.module.ReleaseCircleType.TYPE_WORK_WORLD_ITEM; + +public class ImageItemWorkWorldItem extends ImageItem implements Serializable { + + @Override + public int getItemType() { + return TYPE_WORK_WORLD_ITEM; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MedalListResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/MedalListResponse.java new file mode 100644 index 0000000..f59da79 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MedalListResponse.java @@ -0,0 +1,155 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class MedalListResponse { + + + private boolean ret; + private int errcode; + private String errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + + private int version; + private List medalList; + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public List getMedalList() { + return medalList; + } + + public void setMedalList(List medalList) { + this.medalList = medalList; + } + + public static class MedalListBean { + + private int id; + private String medalName; + private String obtainCondition; + private IconBean icon; + private int status; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getMedalName() { + return medalName; + } + + public void setMedalName(String medalName) { + this.medalName = medalName; + } + + public String getObtainCondition() { + return obtainCondition; + } + + public void setObtainCondition(String obtainCondition) { + this.obtainCondition = obtainCondition; + } + + public IconBean getIcon() { + return icon; + } + + public void setIcon(IconBean icon) { + this.icon = icon; + } + + public static class IconBean { + + private String small; + private String bigLight; + private String bigGray; + private String bigLock; + + public String getBigLock() { + return bigLock; + } + + public void setBigLock(String bigLock) { + this.bigLock = bigLock; + } + + public String getSmall() { + return small; + } + + public void setSmall(String small) { + this.small = small; + } + + public String getBigLight() { + return bigLight; + } + + public void setBigLight(String bigLight) { + this.bigLight = bigLight; + } + + public String getBigGray() { + return bigGray; + } + + public void setBigGray(String bigGray) { + this.bigGray = bigGray; + } + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MedalSingleUserStatusResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/MedalSingleUserStatusResponse.java new file mode 100644 index 0000000..798a035 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MedalSingleUserStatusResponse.java @@ -0,0 +1,124 @@ +package com.qunar.im.base.module; + +public class MedalSingleUserStatusResponse { + + /** + * ret : true + * errcode : 0 + * errmsg : + * data : {"userId":"hubin.hu","medalId":42,"medalStatus":1,"mappingVersion":189,"host":"ejabhost1","createTime":1568104278640,"updateTime":1570783560095} + */ + + private boolean ret; + private int errcode; + private String errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * userId : hubin.hu + * medalId : 42 + * medalStatus : 1 + * mappingVersion : 189 + * host : ejabhost1 + * createTime : 1568104278640 + * updateTime : 1570783560095 + */ + + private String userId; + private int medalId; + private int medalStatus; + private int mappingVersion; + private String host; + private long createTime; + private long updateTime; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getMedalId() { + return medalId; + } + + public void setMedalId(int medalId) { + this.medalId = medalId; + } + + public int getMedalStatus() { + return medalStatus; + } + + public void setMedalStatus(int medalStatus) { + this.medalStatus = medalStatus; + } + + public int getMappingVersion() { + return mappingVersion; + } + + public void setMappingVersion(int mappingVersion) { + this.mappingVersion = mappingVersion; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(long updateTime) { + this.updateTime = updateTime; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MedalUserStatusResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/MedalUserStatusResponse.java new file mode 100644 index 0000000..1db4bed --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MedalUserStatusResponse.java @@ -0,0 +1,183 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class MedalUserStatusResponse { + + + private boolean ret; + private int errcode; + private String errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + + + private int version; + private List userMedals; + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public List getUserMedals() { + return userMedals; + } + + public void setUserMedals(List userMedals) { + this.userMedals = userMedals; + } + + public static class UserMedalsBean { + + private int medalId; + private String medalName; + private String obtainCondition; + private IconBean icon; + private String userId; + private String host; + private int medalStatus; + private int mappingVersion; + private long updateTime; + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getMedalId() { + return medalId; + } + + public void setMedalId(int medalId) { + this.medalId = medalId; + } + + public String getMedalName() { + return medalName; + } + + public void setMedalName(String medalName) { + this.medalName = medalName; + } + + public String getObtainCondition() { + return obtainCondition; + } + + public void setObtainCondition(String obtainCondition) { + this.obtainCondition = obtainCondition; + } + + public IconBean getIcon() { + return icon; + } + + public void setIcon(IconBean icon) { + this.icon = icon; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public int getMedalStatus() { + return medalStatus; + } + + public void setMedalStatus(int medalStatus) { + this.medalStatus = medalStatus; + } + + public int getMappingVersion() { + return mappingVersion; + } + + public void setMappingVersion(int mappingVersion) { + this.mappingVersion = mappingVersion; + } + + public long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(long updateTime) { + this.updateTime = updateTime; + } + + public static class IconBean { + + private String small; + private String bigLight; + private String bigGray; + + public String getSmall() { + return small; + } + + public void setSmall(String small) { + this.small = small; + } + + public String getBigLight() { + return bigLight; + } + + public void setBigLight(String bigLight) { + this.bigLight = bigLight; + } + + public String getBigGray() { + return bigGray; + } + + public void setBigGray(String bigGray) { + this.bigGray = bigGray; + } + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MedalsInfo.java b/lib_common/src/main/java/com/qunar/im/base/module/MedalsInfo.java new file mode 100644 index 0000000..dc505d7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MedalsInfo.java @@ -0,0 +1,88 @@ +package com.qunar.im.base.module; + +public class MedalsInfo { + + private String xmppId; + private String type; + private String url; + private String urlDesc; + private String lastUpdateTime; + + + private String userId; + private String host; + private String desc; + private String upt; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getUpt() { + return upt; + } + + public void setUpt(String upt) { + this.upt = upt; + } + + public String getXmppId() { + return xmppId; + } + + public void setXmppId(String xmppId) { + this.xmppId = xmppId; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUrlDesc() { + return urlDesc; + } + + public void setUrlDesc(String urlDesc) { + this.urlDesc = urlDesc; + } + + public String getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MedalsInfoResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/MedalsInfoResponse.java new file mode 100644 index 0000000..56db624 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MedalsInfoResponse.java @@ -0,0 +1,39 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class MedalsInfoResponse { + + private boolean ret; + private int errcode; + private String errmsg; + private List data; + public void setRet(boolean ret) { + this.ret = ret; + } + public boolean getRet() { + return ret; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + public int getErrcode() { + return errcode; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + public String getErrmsg() { + return errmsg; + } + + public void setData(List data) { + this.data = data; + } + public List getData() { + return data; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MeetingAddress.java b/lib_common/src/main/java/com/qunar/im/base/module/MeetingAddress.java new file mode 100644 index 0000000..1782521 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MeetingAddress.java @@ -0,0 +1,94 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class MeetingAddress { + private long version;//地址版本号 + + private List
addresses;//地址列表 + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + public List
getAddresses() { + return addresses; + } + + public void setAddresses(List
addresses) { + this.addresses = addresses; + } + + public static class Address{ + private String AddressName;//地址名称 + private long AddressNumber;//地址编号 + List meetingRooms;//地址所拥有会议室 + + public String getAddressName() { + return AddressName; + } + + public void setAddressName(String addressName) { + AddressName = addressName; + } + + public long getAddressNumber() { + return AddressNumber; + } + + public void setAddressNumber(long addressNumber) { + AddressNumber = addressNumber; + } + + public List getMeetingRooms() { + return meetingRooms; + } + + public void setMeetingRooms(List meetingRooms) { + this.meetingRooms = meetingRooms; + } + } + + public static class MeetingRoom{ + private String RoomName;//会议室名称 + private long RoomNumber;//会议室编号 + private long AddressNumber;//会议室所属地址编号 + private String RoomDetails;//描述会议室所带能力大小等 + + public String getRoomDetails() { + return RoomDetails; + } + + public void setRoomDetails(String roomDetails) { + RoomDetails = roomDetails; + } + + public String getRoomName() { + return RoomName; + } + + public void setRoomName(String roomName) { + RoomName = roomName; + } + + public long getRoomNumber() { + return RoomNumber; + } + + public void setRoomNumber(long roomNumber) { + RoomNumber = roomNumber; + } + + public long getAddressNumber() { + return AddressNumber; + } + + public void setAddressNumber(long addressNumber) { + AddressNumber = addressNumber; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MetaData.java b/lib_common/src/main/java/com/qunar/im/base/module/MetaData.java new file mode 100644 index 0000000..11e8e72 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MetaData.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by wangxinbo on 2017/1/24. + */ +public class MetaData extends BaseModel implements Serializable { + public int id; + public String userId; + public String sn; + public int actvited; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MucListResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/MucListResponse.java new file mode 100644 index 0000000..990afd2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MucListResponse.java @@ -0,0 +1,58 @@ +package com.qunar.im.base.module; + +import com.qunar.im.base.jsonbean.BaseJsonResult; + +import java.util.List; + +/** + * Created by hubin on 2017/9/20. + */ + +public class MucListResponse extends BaseJsonResult{ + + private List data; + + public void setData(List data) { + this.data = data; + } + public List getData() { + return data; + } + + + public class Data { + + private String M; + private String D; + private String T; + private String F; + public void setM(String M) { + this.M = M; + } + public String getM() { + return M; + } + + public void setD(String D) { + this.D = D; + } + public String getD() { + return D; + } + + public void setT(String T) { + this.T = T; + } + public String getT() { + return T; + } + + public void setF(String F) { + this.F = F; + } + public String getF() { + return F; + } + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/MultiItemEntity.java b/lib_common/src/main/java/com/qunar/im/base/module/MultiItemEntity.java new file mode 100755 index 0000000..d63e2d6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/MultiItemEntity.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.module; + +/** + * https://github.com/CymChad/BaseRecyclerViewAdapterHelper + */ +public interface MultiItemEntity { + int getItemType(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/NavigationNotice.java b/lib_common/src/main/java/com/qunar/im/base/module/NavigationNotice.java new file mode 100644 index 0000000..f281fe1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/NavigationNotice.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.module; + +/** + * Created by hubin on 2018/1/5. + */ + +public class NavigationNotice { + private String navversion; + + public String getNavversion() { + return navversion; + } + + public void setNavversion(String navversion) { + this.navversion = navversion; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/Nick.java b/lib_common/src/main/java/com/qunar/im/base/module/Nick.java new file mode 100644 index 0000000..0f2c154 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/Nick.java @@ -0,0 +1,217 @@ +package com.qunar.im.base.module; + +import android.text.TextUtils; + +import com.qunar.im.utils.QtalkStringUtils; + +import java.io.Serializable; + +/** + * Created by hubin on 2017/8/23. + */ + +public class Nick implements Serializable { + + private static final long serialVersionUID = 1002L; + //名片编号,方便获取不属于数据库数据 + private int id; + //好友列表展示的时候用了 不知道干啥的 + private boolean root; + + //单人名片 + private String UserId=""; + private String XmppId=""; + private String DescInfo=""; + private String UserInfo=""; + private String SearchIndex=""; + private String IncrementVersion=""; + private String mark=""; + private String mood = ""; + + //群名片 + private String GroupId=""; + private String Introduce=""; + private String Topic=""; + private String ExtendedFlag=""; + //共用 + private String Name=""; + private String LastUpdateTime=""; + private String HeaderSrc=""; + //其他字段 + private int collectionBind;//绑定用户是否还在bind中 + private int collectionUnReadCount;//代收绑定用户未读消息数,这里只做存储,方便数据传递,没有其他实质作用 + + private boolean isInGroup;//是否在指定的群里 + + + public String getMark() { + return mark; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public int getCollectionUnReadCount() { + return collectionUnReadCount; + } + + public void setCollectionUnReadCount(int collectionUnReadCount) { + this.collectionUnReadCount = collectionUnReadCount; + } + + public int getCollectionBind() { + return collectionBind; + } + + public void setCollectionBind(int collectionBind) { + this.collectionBind = collectionBind; + } + + public boolean isRoot() { + return root; + } + + public void setRoot(boolean root) { + this.root = root; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getIncrementVersion() { + return IncrementVersion; + } + + public void setIncrementVersion(String incrementVersion) { + IncrementVersion = incrementVersion; + } + + public String getSearchIndex() { + return SearchIndex; + } + + public void setSearchIndex(String searchIndex) { + SearchIndex = searchIndex; + } + + public String getDescInfo() { + return DescInfo; + } + + public void setDescInfo(String descInfo) { + DescInfo = descInfo; + } + + public String getUserId() { + return UserId; + } + + public void setUserId(String userId) { + UserId = userId; + } + + public String getXmppId() { + return XmppId; + } + + public void setXmppId(String xmppId) { + XmppId = xmppId; + } + + public String getName() { + return Name; + } + + public String getShowName(){ + if(!TextUtils.isEmpty(mark)){ + return mark; + } + if(!TextUtils.isEmpty(Name)){ + return Name; + } + + return QtalkStringUtils.parseBareJid(XmppId); + } + + public void setName(String name) { + Name = name; + } + + public String getUserInfo() { + return UserInfo; + } + + public void setUserInfo(String userInfo) { + UserInfo = userInfo; + } + + public String getGroupId() { + return GroupId; + } + + public void setGroupId(String groupId) { + GroupId = groupId; + } + + public String getIntroduce() { + return Introduce; + } + + public void setIntroduce(String introduce) { + Introduce = introduce; + } + + public String getTopic() { + return Topic; + } + + public void setTopic(String topic) { + Topic = topic; + } + + public String getExtendedFlag() { + return ExtendedFlag; + } + + public void setExtendedFlag(String extendedFlag) { + ExtendedFlag = extendedFlag; + } + + public String getLastUpdateTime() { + return LastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + LastUpdateTime = lastUpdateTime; + } + + public String getHeaderSrc() { + return HeaderSrc; + } + + public void setHeaderSrc(String headerSrc) { + HeaderSrc = headerSrc; + } + + public void setMood(String mood) { + this.mood = mood; + } + + public String getMood() { + return mood; + } + + public boolean isInGroup() { + return isInGroup; + } + + public void setInGroup(boolean inGroup) { + isInGroup = inGroup; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/PublicNumber.java b/lib_common/src/main/java/com/qunar/im/base/module/PublicNumber.java new file mode 100644 index 0000000..98f1611 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/PublicNumber.java @@ -0,0 +1,89 @@ +package com.qunar.im.base.module; + +/** + * Created by lihaibin.li on 2017/9/27. + */ + +public class PublicNumber { + public String XmppId; + public String PublicNumberId; + public String PublicNumberType; + public String Name; + public String DescInfo; + public String HeaderSrc; + public String SearchIndex; + public String LastUpdateTime; + public String PublicNumberInfo; + + public String getXmppId() { + return XmppId; + } + + public void setXmppId(String xmppId) { + XmppId = xmppId; + } + + public String getPublicNumberId() { + return PublicNumberId; + } + + public void setPublicNumberId(String publicNumberId) { + PublicNumberId = publicNumberId; + } + + public String getPublicNumberType() { + return PublicNumberType; + } + + public void setPublicNumberType(String publicNumberType) { + PublicNumberType = publicNumberType; + } + + public String getName() { + return Name; + } + + public void setName(String name) { + Name = name; + } + + public String getDescInfo() { + return DescInfo; + } + + public void setDescInfo(String descInfo) { + DescInfo = descInfo; + } + + public String getHeaderSrc() { + return HeaderSrc; + } + + public void setHeaderSrc(String headerSrc) { + HeaderSrc = headerSrc; + } + + public String getSearchIndex() { + return SearchIndex; + } + + public void setSearchIndex(String searchIndex) { + SearchIndex = searchIndex; + } + + public String getLastUpdateTime() { + return LastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + LastUpdateTime = lastUpdateTime; + } + + public String getPublicNumberInfo() { + return PublicNumberInfo; + } + + public void setPublicNumberInfo(String publicNumberInfo) { + PublicNumberInfo = publicNumberInfo; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/PublishPlatform.java b/lib_common/src/main/java/com/qunar/im/base/module/PublishPlatform.java new file mode 100644 index 0000000..089d950 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/PublishPlatform.java @@ -0,0 +1,155 @@ +package com.qunar.im.base.module; + +import com.qunar.im.base.util.Constants; +import com.qunar.im.utils.QtalkStringUtils; + +import java.io.Serializable; + +/** + * Created by saber on 15-9-10. + * 已订阅公众号 + */ +public class PublishPlatform extends BaseModel implements Serializable, Comparable { + + //是否接受公众号推送 + public final static int RECEIVE_SWITCH_FLAG = 0x01; + //是否单独显示在会话列表 + public static final int IMPORTANT_PLATFORM_MSG = 0x02; + public static final int WEB_MSG = 0x08; + //是否通知,只可接受消息,并默认关注 + public static final int NOTICE_MSG = 0x04; + + + + //系统公众号 + public static final String RBT_SYSTEM = "rbt-system@"+ Constants.Config.PUB_NET_XMPP_Domain; + //通知公众号 + public static final String RBT_NOTICE = "rbt-notice@"+ Constants.Config.PUB_NET_XMPP_Domain; + + /** + * robotEnName + */ + private String id; + /** + * not used + */ + private int publishPlatformType; + /** + * robotCnNane + */ + private String name; + /** + * robotDesc + */ + private String description; + /** + * headerurl + */ + private String gravatarUrl; + private String publishPlatformInfo; + private int extentionFlag; + private long latestUpdateTime; + private String tag; + private int version; + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public String getId() { + return QtalkStringUtils.userId2Jid(id); + } + + public void setId(String id) { + this.id = QtalkStringUtils.userId2Jid(id); + } + + public int getPublishPlatformType() { + return publishPlatformType; + } + + public void setPublishPlatformType(int publishPlatformType) { + this.publishPlatformType = publishPlatformType; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getGravatarUrl() { + return gravatarUrl; + } + + public void setGravatarUrl(String gravatarUrl) { + this.gravatarUrl = gravatarUrl; + } + + public String getPublishPlatformInfo() { + return publishPlatformInfo; + } + + public void setPublishPlatformInfo(String publishPlatformInfo) { + this.publishPlatformInfo = publishPlatformInfo; + } + + /** + * 32bit, 1, 接受消息的开关 + */ + public int getExtentionFlag() { + return extentionFlag; + } + + public void setExtentionFlag(int extentionFlag) { + this.extentionFlag = extentionFlag; + } + + public long getLatestUpdateTime() { + return latestUpdateTime; + } + + public void setLatestUpdateTime(long latestUpdateTime) { + this.latestUpdateTime = latestUpdateTime; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + @Override + public int compareTo(PublishPlatform another) { + + if(this.getId().equals(another.getId())) + { + return 0; + } + else { + return 1; + } + } + + @Override + public boolean equals(Object another) + { + return this.getId().equals(((PublishPlatform)another).getId()); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/PublishPlatformNews.java b/lib_common/src/main/java/com/qunar/im/base/module/PublishPlatformNews.java new file mode 100644 index 0000000..afa7365 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/PublishPlatformNews.java @@ -0,0 +1,27 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by saber on 15-9-10. + * 公众号消息 + */ +public class PublishPlatformNews extends BaseModel implements Serializable,Comparable { + public String id; + public String platformXmppId; + public String content; + public int msgType; + public int state; + public int direction; + public int readTag; + public long latestUpdateTime; + public String extentionFlag; + + public int readState; + public int messageState; + + @Override + public int compareTo(PublishPlatformNews another) { + return 0; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/QchatNodeInfo.java b/lib_common/src/main/java/com/qunar/im/base/module/QchatNodeInfo.java new file mode 100644 index 0000000..40d0139 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/QchatNodeInfo.java @@ -0,0 +1,15 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by zhaokai on 15-12-7. + */ +public class QchatNodeInfo extends BaseModel implements Serializable { + public String bu; + public String type; + public String url; + public String webname; + public String nickname; + public String ipAddress; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/QuickReplyData.java b/lib_common/src/main/java/com/qunar/im/base/module/QuickReplyData.java new file mode 100644 index 0000000..c5ad976 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/QuickReplyData.java @@ -0,0 +1,23 @@ +package com.qunar.im.base.module; + +import java.util.List; + +/** + * Created by Lex lex on 2018/7/30. + */ +public class QuickReplyData { + + public long gid; + public String groupname; + public long groupseq; + public List contents; +// public List contents; + + public static class QuickReplyContent { + public long cid; + public long gid; + public String content; + public long contentseq; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/RecentConversation.java b/lib_common/src/main/java/com/qunar/im/base/module/RecentConversation.java new file mode 100644 index 0000000..9315721 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/RecentConversation.java @@ -0,0 +1,226 @@ +package com.qunar.im.base.module; + +import android.text.TextUtils; + +import com.qunar.im.protobuf.common.ProtoMessageOuterClass; +import com.qunar.im.utils.QtalkStringUtils; + +import java.io.Serializable; + +/** + * Created by xinbo.wang on 2015/2/9. + */ +public class RecentConversation extends BaseModel implements Serializable,Comparable { + + private static final long serialVersionUID = 1001L; + + public static final String FRIENDS_REQUEST_ID= "request_friends"; + public static final String ID_DEFAULT_PLATFORM = "platform"; //会话列表中用于存储普通的公众号消息默认Id + //名片类 + private Nick nick; + private String id; //会话列表id + private String fullname; + private String lastMsg;//最后一条消息文本 + private String lastFrom;//最后一个说话人id + private String lastState;//最后一条消息状态 + private long lastMsgTime;//会话列表最后一条消息时间 + //热线的真实用户 + private String realUser;//真实id + //判断为接受或者发送方 + private String isChan = "send"; + private int unread_msg_cont; //当前会话未读消息 + private int conversationType; //会话列表类型 0是单人,1是多人 + private String hasAtMsg; + private int atMsgIndex; + private String msgType; + private int top; //置顶会话 + private int remind;//提醒会话 + + private boolean isOnlyText= false; + + private boolean toDB; + private boolean toNetWork; + + private String nickName; + private String headerSrc; + + + public boolean isOnlyText() { + return isOnlyText; + } + + public void setOnlyText(boolean onlyText) { + isOnlyText = onlyText; + } + + public boolean isToDB() { + return toDB; + } + + public void setToDB(boolean toDB) { + this.toDB = toDB; + } + + public boolean isToNetWork() { + return toNetWork; + } + + public void setToNetWork(boolean toNetWork) { + this.toNetWork = toNetWork; + } + + public String getLastState() { + return lastState; + } + + public void setLastState(String lastState) { + this.lastState = lastState; + } + + public String getLastFrom() { + return lastFrom; + } + + public void setLastFrom(String lastFrom) { + this.lastFrom = lastFrom; + } + + public int getRemind() { + return remind; + } + + public void setRemind(int remind) { + this.remind = remind; + } + + public Nick getNick() { + return nick; + } + + public void setNick(Nick nick) { + this.nick = nick; + } + + public String isChan() { + return isChan; + } + + public void setIsChan(String isChan) { + this.isChan = isChan; + } + + public String getRealUser() { + return realUser; + } + + public void setRealUser(String realUser) { + this.realUser = realUser; + } + + public int getMsgType() { + if(TextUtils.isEmpty(msgType)) return ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE; + return Integer.parseInt(msgType); + } + + public void setMsgType(int msgType) { + this.msgType = String.valueOf(msgType); + } + + public void setFullname(String fullname) { + this.fullname = fullname; + } + + public void setLastMsg(String lastMsg) { + this.lastMsg = lastMsg; + } + + public long getLastMsgTime() { + return lastMsgTime; + } + + public void setLastMsgTime(long lastMsgTime) { + this.lastMsgTime = lastMsgTime; + } + + /** + * 置顶消息 + * @return + */ + public int getTop() { + return top; + } + + public void setTop(int top) { + this.top = top; + } + + /** + * Id equivalent JID + * @return + */ + public String getId() { + return QtalkStringUtils.parseBareJid(id); + } + + public void setId(String id) { + this.id = QtalkStringUtils.parseBareJid(id); + } + + public String getFullname() { + return fullname; + } + + + public String getLastMsg() { + return lastMsg; + } + + public int getUnread_msg_cont() { + return unread_msg_cont; + } + + public void setUnread_msg_cont(int unread_msg_cont) { + if(unread_msg_cont<0) unread_msg_cont = 0; + this.unread_msg_cont = unread_msg_cont; + } + + public String getHasAtMsg() { + return hasAtMsg; + } + + public void setHasAtMsg(String hasAtMsg) { + this.hasAtMsg = hasAtMsg; + } + + public int getAtMsgIndex() { + return atMsgIndex; + } + + public void setAtMsgIndex(int atMsgIndex) { + this.atMsgIndex = atMsgIndex; + } + + public int getConversationType() { + return conversationType; + } + + public void setConversationType(int conversationType) { + this.conversationType = conversationType; + } + + @Override + public int compareTo(RecentConversation another) { + if(this.id.equals(another.getId())){ + return 0; + } + else { + return 1; + } + } + + @Override + public boolean equals(Object rc) + { + return this.id.equals(((RecentConversation)rc).getId()); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleImageItemDate.java b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleImageItemDate.java new file mode 100644 index 0000000..ecb43cd --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleImageItemDate.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +import static com.qunar.im.base.module.ReleaseCircleType.TYPE_CLICKABLE; + +public class ReleaseCircleImageItemDate implements MultiItemEntity,Serializable { + + + @Override + public int getItemType() { + return TYPE_CLICKABLE; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleNoChangeItemDate.java b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleNoChangeItemDate.java new file mode 100644 index 0000000..981a76d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleNoChangeItemDate.java @@ -0,0 +1,23 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +import static com.qunar.im.base.module.ReleaseCircleType.TYPE_UNCLICKABLE; + +public class ReleaseCircleNoChangeItemDate implements MultiItemEntity,Serializable { + + private String imgUrl; + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + @Override + public int getItemType() { + return TYPE_UNCLICKABLE; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleType.java b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleType.java new file mode 100644 index 0000000..36b1d91 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseCircleType.java @@ -0,0 +1,7 @@ +package com.qunar.im.base.module; + +public class ReleaseCircleType { + public static final int TYPE_CLICKABLE = 0; //发布时可点击 + public static final int TYPE_UNCLICKABLE = 1; //发布时加号 + public static final int TYPE_WORK_WORLD_ITEM=2;//发布完成时使用 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ReleaseContentData.java b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseContentData.java new file mode 100644 index 0000000..874a336 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseContentData.java @@ -0,0 +1,66 @@ +package com.qunar.im.base.module; + +import com.qunar.im.base.jsonbean.ExtendMessageEntity; +import com.qunar.im.base.jsonbean.VideoMessageResult; + +import java.util.ArrayList; +import java.util.List; + +public class ReleaseContentData { + private int type;//消息类型 //1 图片类型 2 连接类型 //3 视频类型 + private String exContent;//消息内容 + private String content=""; + private List imgList=new ArrayList<>(); + private ExtendMessageEntity linkContent;//用于显示连接卡片类型 + private VideoMessageResult videoContent;//用于展示视频类型 + + + public VideoMessageResult getVideoContent() { + return videoContent; + } + + public void setVideoContent(VideoMessageResult videoContent) { + this.videoContent = videoContent; + } + + public ExtendMessageEntity getLinkContent() { + return linkContent; + } + + public void setLinkContent(ExtendMessageEntity linkContent) { + this.linkContent = linkContent; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getExContent() { + return exContent; + } + + public void setExContent(String exContent) { + this.exContent = exContent; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public List getImgList() { + return imgList; + } + + public void setImgList(List imgList) { + this.imgList = imgList; + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/ReleaseDataRequest.java b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseDataRequest.java new file mode 100644 index 0000000..88f284f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/ReleaseDataRequest.java @@ -0,0 +1,94 @@ +package com.qunar.im.base.module; + +public class ReleaseDataRequest { + + private String uuid ;//帖子id + private String content;//数据内容 + private int isAnonymous;//是否匿名 + private String AnonymousName;//匿名名称 + private String AnonymousPhoto;//匿名头像 + private String owner;//发布人id + private String owner_host;//发布人域名 + private String atList;//atlist + private int postType; + + public String getAtList() { + return atList; + } + + public void setAtList(String atList) { + this.atList = atList; + } + + public int getIsAnonymous() { + return isAnonymous; + } + + public void setIsAnonymous(int isAnonymous) { + this.isAnonymous = isAnonymous; + } + + public int getPostType() { + return postType; + } + + public void setPostType(int postType) { + this.postType = postType; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int isAnonymous() { + return isAnonymous; + } + + public void setAnonymous(int anonymous) { + isAnonymous = anonymous; + } + + public String getAnonymousName() { + return AnonymousName; + } + + public void setAnonymousName(String anonymousName) { + AnonymousName = anonymousName; + } + + public String getAnonymousPhoto() { + return AnonymousPhoto; + } + + public void setAnonymousPhoto(String anonymousPhoto) { + AnonymousPhoto = anonymousPhoto; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getOwner_host() { + return owner_host; + } + + public void setOwner_host(String owner_host) { + this.owner_host = owner_host; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/RevokeInfo.java b/lib_common/src/main/java/com/qunar/im/base/module/RevokeInfo.java new file mode 100644 index 0000000..d7a4020 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/RevokeInfo.java @@ -0,0 +1,69 @@ +package com.qunar.im.base.module; + +/** + * Created by hubin on 2017/8/25. + */ + +public class RevokeInfo { +// {\"fromId\":\"hubo.hu@ejabhost1\",\"message\":\"revoke a message\",\"messageId\":\"a275749053ca463bbccb87546ef5e918\"}" + //发送人 + private String fromId; + //消息详情 + private String message; + //撤销消息id + private String messageId; + //消息类型 + private String messageType; + //发送人 + private String from; + //收 + private String to; + + public String getMessageType() { + return messageType; + } + + public void setMessageType(String messageType) { + this.messageType = messageType; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getFromId() { + return fromId; + } + + public void setFromId(String fromId) { + this.fromId = fromId; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getMessageId() { + return messageId; + } + + public void setMessageId(String messageId) { + this.messageId = messageId; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/RobotConversation.java b/lib_common/src/main/java/com/qunar/im/base/module/RobotConversation.java new file mode 100644 index 0000000..d8c8b32 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/RobotConversation.java @@ -0,0 +1,16 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by xinbo.wang on 2016/7/22. + */ +public class RobotConversation extends BaseModel implements Serializable { + public String id; + public String cnName; + public String gravatar; + public String lastMsg=""; + public long lastMsgTime; + public int unread_msg_cont; + public int msgType=1; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/SearchKeyData.java b/lib_common/src/main/java/com/qunar/im/base/module/SearchKeyData.java new file mode 100644 index 0000000..77fad4d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/SearchKeyData.java @@ -0,0 +1,31 @@ +package com.qunar.im.base.module; + +public class SearchKeyData { + private String searchKey; + private String searchType; + private String searchTime; + + public String getSearchKey() { + return searchKey; + } + + public void setSearchKey(String searchKey) { + this.searchKey = searchKey; + } + + public String getSearchType() { + return searchType; + } + + public void setSearchType(String searchType) { + this.searchType = searchType; + } + + public String getSearchTime() { + return searchTime; + } + + public void setSearchTime(String searchTime) { + this.searchTime = searchTime; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/SectionEntity.java b/lib_common/src/main/java/com/qunar/im/base/module/SectionEntity.java new file mode 100755 index 0000000..3355b9e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/SectionEntity.java @@ -0,0 +1,24 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * https://github.com/CymChad/BaseRecyclerViewAdapterHelper + */ +public abstract class SectionEntity implements Serializable { + public boolean isHeader; + public T t; + public String header; + + public SectionEntity(boolean isHeader, String header) { + this.isHeader = isHeader; + this.header = header; + this.t = null; + } + + public SectionEntity(T t) { + this.isHeader = false; + this.header = null; + this.t = t; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/SetLikeData.java b/lib_common/src/main/java/com/qunar/im/base/module/SetLikeData.java new file mode 100644 index 0000000..0ba9534 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/SetLikeData.java @@ -0,0 +1,124 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class SetLikeData { + private String commentId; + private int likeType; + private int opType; + private int isLike; + private String postId; + private String userId; + private String userHost; + private String likeId; + private int likeNum; + private String postOwnerHost; + private String postOwner; + private String superParentUUID; + private List attachCommentList; + + + public List getAttachCommentList() { + return attachCommentList; + } + + public void setAttachCommentList(List attachCommentList) { + this.attachCommentList = attachCommentList; + } + + public String getSuperParentUUID() { + return superParentUUID; + } + + public void setSuperParentUUID(String superParentUUID) { + this.superParentUUID = superParentUUID; + } + + public String getPostOwnerHost() { + return postOwnerHost; + } + + public void setPostOwnerHost(String postOwnerHost) { + this.postOwnerHost = postOwnerHost; + } + + public String getPostOwner() { + return postOwner; + } + + public void setPostOwner(String postOwner) { + this.postOwner = postOwner; + } + + public int getIsLike() { + return isLike; + } + + public void setIsLike(int isLike) { + this.isLike = isLike; + } + + public int getLikeNum() { + return likeNum; + } + + public void setLikeNum(int likeNum) { + this.likeNum = likeNum; + } + + public String getUserHost() { + return userHost; + } + + public void setUserHost(String userHost) { + this.userHost = userHost; + } + + public String getCommentId() { + return commentId; + } + + public void setCommentId(String commentId) { + this.commentId = commentId; + } + + public int getLikeType() { + return likeType; + } + + public void setLikeType(int likeType) { + this.likeType = likeType; + } + + public int getOpType() { + return opType; + } + + public void setOpType(int opType) { + this.opType = opType; + } + + public String getPostId() { + return postId; + } + + public void setPostId(String postId) { + this.postId = postId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getLikeId() { + return likeId; + } + + public void setLikeId(String likeId) { + this.likeId = likeId; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/SetLikeDataResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/SetLikeDataResponse.java new file mode 100644 index 0000000..72a4dbc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/SetLikeDataResponse.java @@ -0,0 +1,41 @@ +package com.qunar.im.base.module; + +public class SetLikeDataResponse { + + private boolean ret; + private String errmsg; + private int errcode; + private SetLikeData data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public SetLikeData getData() { + return data; + } + + public void setData(SetLikeData data) { + this.data = data; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/TripMemberCheckResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/TripMemberCheckResponse.java new file mode 100644 index 0000000..18024d6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/TripMemberCheckResponse.java @@ -0,0 +1,65 @@ +package com.qunar.im.base.module; + +public class TripMemberCheckResponse { + + + /** + * ret : true + * errcode : 0 + * errmsg : + * data : {"isConform":true} + */ + + private boolean ret; + private int errcode; + private String errmsg; + private DataBean data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * isConform : true + */ + + private boolean isConform; + + public boolean isIsConform() { + return isConform; + } + + public void setIsConform(boolean isConform) { + this.isConform = isConform; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/TripRequest.java b/lib_common/src/main/java/com/qunar/im/base/module/TripRequest.java new file mode 100644 index 0000000..bd58012 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/TripRequest.java @@ -0,0 +1,31 @@ +package com.qunar.im.base.module; + +public class TripRequest { + private String userName; + private String q_ckey; + private long updateTime; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getQ_ckey() { + return q_ckey; + } + + public void setQ_ckey(String q_ckey) { + this.q_ckey = q_ckey; + } + + public long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(long updateTime) { + this.updateTime = updateTime; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/TupleModel.java b/lib_common/src/main/java/com/qunar/im/base/module/TupleModel.java new file mode 100644 index 0000000..54a1762 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/TupleModel.java @@ -0,0 +1,22 @@ +package com.qunar.im.base.module; + +/** + * Created by saber on 15-9-23. + */ +public class TupleModel implements Comparable { + public String key; + public String value; + + @Override + public boolean equals(Object object) { + return key != null && object != null && object instanceof TupleModel && key.equals(((TupleModel) object).key); + } + + @Override + public int compareTo(TupleModel another) { + if(key!=null&&key.equals(another.key)) + return 0; + else + return 1; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/UserConfigData.java b/lib_common/src/main/java/com/qunar/im/base/module/UserConfigData.java new file mode 100644 index 0000000..1bb585a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/UserConfigData.java @@ -0,0 +1,184 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class UserConfigData { + + private String username; + private String host; + private String key; + private String subkey; + private String value; + private String operate_plat; + private String resource; + private int version; + private int type;//操作用 + private int isdel; + private TopInfo topInfo; + + public TopInfo getTopInfo() { + return topInfo; + } + + public void setTopInfo(TopInfo topInfo) { + this.topInfo = topInfo; + } + + private List batchProcess; + + public List getBatchProcess() { + return batchProcess; + } + + public void setBatchProcess(List batchProcess) { + this.batchProcess = batchProcess; + } + + public String getOperate_plat() { + return operate_plat; + } + + public void setOperate_plat(String operate_plat) { + this.operate_plat = operate_plat; + } + + public String getSubkey() { + return subkey; + } + + public void setSubkey(String subkey) { + this.subkey = subkey; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public int getIsdel() { + return isdel; + } + + public void setIsdel(int isdel) { + this.isdel = isdel; + } + + public String getResource() { + return resource; + } + + public void setResource(String resource) { + this.resource = resource; + } + + public static class Info{ + private String key; + private String subkey; + private String value; + + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getSubkey() { + return subkey; + } + + public void setSubkey(String subkey) { + this.subkey = subkey; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + + public static class TopInfo{ + private String topType; + private String chatType; + + @Override + public String toString() { + return "TopInfo{" + + "topType='" + topType + '\'' + + ", chatType='" + chatType + '\'' + + '}'; + } + + public String toJson(){ + return "{" + + "\"topType\":" + topType + + ", \"chatType\":" + chatType + + "}"; + } + + public String getTopType() { + return topType; + } + + public void setTopType(String topType) { + this.topType = topType; + } + + public String getChatType() { + return chatType; + } + + public void setChatType(String chatType) { + this.chatType = chatType; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/UserHaveMedalStatus.java b/lib_common/src/main/java/com/qunar/im/base/module/UserHaveMedalStatus.java new file mode 100644 index 0000000..56b5e7b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/UserHaveMedalStatus.java @@ -0,0 +1,114 @@ +package com.qunar.im.base.module; + +public class UserHaveMedalStatus { + + private int medalId; + private String medalName; + private String obtainCondition; + private String smallIcon; + private String bigLightIcon; + private String bigGrayIcon; + private String bigLockIcon; + private int status;//勋章状态 + private String medalUserId; + private String medalHost; + private int medalUserStatus;//勋章佩戴状态 + private int userCount;//拥有用户数量 + + + public int getUserCount() { + return userCount; + } + + public void setUserCount(int userCount) { + this.userCount = userCount; + } + + public String getMedalHost() { + return medalHost; + } + + public void setMedalHost(String medalHost) { + this.medalHost = medalHost; + } + + public String getBigLockIcon() { + return bigLockIcon; + } + + public void setBigLockIcon(String bigLockIcon) { + this.bigLockIcon = bigLockIcon; + } + + public int getMedalId() { + return medalId; + } + + public void setMedalId(int medalId) { + this.medalId = medalId; + } + + public String getMedalName() { + return medalName; + } + + public void setMedalName(String medalName) { + this.medalName = medalName; + } + + public String getObtainCondition() { + return obtainCondition; + } + + public void setObtainCondition(String obtainCondition) { + this.obtainCondition = obtainCondition; + } + + public String getSmallIcon() { + return smallIcon; + } + + public void setSmallIcon(String smallIcon) { + this.smallIcon = smallIcon; + } + + public String getBigLightIcon() { + return bigLightIcon; + } + + public void setBigLightIcon(String bigLightIcon) { + this.bigLightIcon = bigLightIcon; + } + + public String getBigGrayIcon() { + return bigGrayIcon; + } + + public void setBigGrayIcon(String bigGrayIcon) { + this.bigGrayIcon = bigGrayIcon; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getMedalUserId() { + return medalUserId; + } + + public void setMedalUserId(String medalUserId) { + this.medalUserId = medalUserId; + } + + public int getMedalUserStatus() { + return medalUserStatus; + } + + public void setMedalUserStatus(int medalUserStatus) { + this.medalUserStatus = medalUserStatus; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/UserVCard.java b/lib_common/src/main/java/com/qunar/im/base/module/UserVCard.java new file mode 100644 index 0000000..4404b3f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/UserVCard.java @@ -0,0 +1,21 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +/** + * Created by xinbo.wang on 2015/5/15. + */ +public class UserVCard extends BaseModel implements Serializable { + public static final String WECHAT_TYPE = "wechat"; + public String id; + public String desc=""; + public String commentUrl=""; + public String telphone=""; + public String gravantarUrl=""; + public int gravantarVersion; + public String email=""; + public String gender=""; + public String type="";//merchant代表客服 + public String nickname=""; + public String extension=""; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/VideoDataResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/VideoDataResponse.java new file mode 100644 index 0000000..2540322 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/VideoDataResponse.java @@ -0,0 +1,384 @@ +package com.qunar.im.base.module; + +public class VideoDataResponse { + + + private DataBean data; + private int errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + + private long createTime; + private String firstThumb; + private String firstThumbUrl; + private String onlineUrl; + private OriginFileInfoBean originFileInfo; + private String originFileMd5; + private String originFilename; + private String originUrl; + private boolean ready; + private String resourceId; + private TransFileInfoBean transFileInfo; + private String transFileMd5; + private String transFilename; + private String transUrl; + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } + + public String getFirstThumb() { + return firstThumb; + } + + public void setFirstThumb(String firstThumb) { + this.firstThumb = firstThumb; + } + + public String getFirstThumbUrl() { + return firstThumbUrl; + } + + public void setFirstThumbUrl(String firstThumbUrl) { + this.firstThumbUrl = firstThumbUrl; + } + + public String getOnlineUrl() { + return onlineUrl; + } + + public void setOnlineUrl(String onlineUrl) { + this.onlineUrl = onlineUrl; + } + + public OriginFileInfoBean getOriginFileInfo() { + return originFileInfo; + } + + public void setOriginFileInfo(OriginFileInfoBean originFileInfo) { + this.originFileInfo = originFileInfo; + } + + public String getOriginFileMd5() { + return originFileMd5; + } + + public void setOriginFileMd5(String originFileMd5) { + this.originFileMd5 = originFileMd5; + } + + public String getOriginFilename() { + return originFilename; + } + + public void setOriginFilename(String originFilename) { + this.originFilename = originFilename; + } + + public String getOriginUrl() { + return originUrl; + } + + public void setOriginUrl(String originUrl) { + this.originUrl = originUrl; + } + + public boolean isReady() { + return ready; + } + + public void setReady(boolean ready) { + this.ready = ready; + } + + public String getResourceId() { + return resourceId; + } + + public void setResourceId(String resourceId) { + this.resourceId = resourceId; + } + + public TransFileInfoBean getTransFileInfo() { + return transFileInfo; + } + + public void setTransFileInfo(TransFileInfoBean transFileInfo) { + this.transFileInfo = transFileInfo; + } + + public String getTransFileMd5() { + return transFileMd5; + } + + public void setTransFileMd5(String transFileMd5) { + this.transFileMd5 = transFileMd5; + } + + public String getTransFilename() { + return transFilename; + } + + public void setTransFilename(String transFilename) { + this.transFilename = transFilename; + } + + public String getTransUrl() { + return transUrl; + } + + public void setTransUrl(String transUrl) { + this.transUrl = transUrl; + } + + public static class OriginFileInfoBean { + /** + * bitRate : 1629 + * duration : 5160 + * height : 720 + * videoFirstThumb : + * videoMd5 : 27303a11dc2b3e3a31122a5d2c10b5b6 + * videoName : 20190730150137372_z46kL1_SampleVideo_1280x720_1mbb.flv + * videoSize : 1051185 + * videoSuffix : flv + * videoType : flv1 + * width : 1280 + */ + + private String bitRate; + private int duration; + private String height; + private String videoFirstThumb; + private String videoMd5; + private String videoName; + private int videoSize; + private String videoSuffix; + private String videoType; + private String width; + + public String getBitRate() { + return bitRate; + } + + public void setBitRate(String bitRate) { + this.bitRate = bitRate; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public String getVideoFirstThumb() { + return videoFirstThumb; + } + + public void setVideoFirstThumb(String videoFirstThumb) { + this.videoFirstThumb = videoFirstThumb; + } + + public String getVideoMd5() { + return videoMd5; + } + + public void setVideoMd5(String videoMd5) { + this.videoMd5 = videoMd5; + } + + public String getVideoName() { + return videoName; + } + + public void setVideoName(String videoName) { + this.videoName = videoName; + } + + public int getVideoSize() { + return videoSize; + } + + public void setVideoSize(int videoSize) { + this.videoSize = videoSize; + } + + public String getVideoSuffix() { + return videoSuffix; + } + + public void setVideoSuffix(String videoSuffix) { + this.videoSuffix = videoSuffix; + } + + public String getVideoType() { + return videoType; + } + + public void setVideoType(String videoType) { + this.videoType = videoType; + } + + public String getWidth() { + return width; + } + + public void setWidth(String width) { + this.width = width; + } + } + + public static class TransFileInfoBean { + /** + * bitRate : 867 + * duration : 5160 + * height : 720 + * videoFirstThumb : + * videoMd5 : 6fdbb90f1c0038231ff451b4c2984147 + * videoName : 20190730150137372_z46kL1_SampleVideo_1280x720_1mbb_trans_o.mp4 + * videoSize : 559745 + * videoSuffix : mp4 + * videoType : h264 (High) (avc1 / 0x31637661) + * width : 1280 + */ + + private String bitRate; + private int duration; + private String height; + private String videoFirstThumb; + private String videoMd5; + private String videoName; + private int videoSize; + private String videoSuffix; + private String videoType; + private String width; + + public String getBitRate() { + return bitRate; + } + + public void setBitRate(String bitRate) { + this.bitRate = bitRate; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public String getVideoFirstThumb() { + return videoFirstThumb; + } + + public void setVideoFirstThumb(String videoFirstThumb) { + this.videoFirstThumb = videoFirstThumb; + } + + public String getVideoMd5() { + return videoMd5; + } + + public void setVideoMd5(String videoMd5) { + this.videoMd5 = videoMd5; + } + + public String getVideoName() { + return videoName; + } + + public void setVideoName(String videoName) { + this.videoName = videoName; + } + + public int getVideoSize() { + return videoSize; + } + + public void setVideoSize(int videoSize) { + this.videoSize = videoSize; + } + + public String getVideoSuffix() { + return videoSuffix; + } + + public void setVideoSuffix(String videoSuffix) { + this.videoSuffix = videoSuffix; + } + + public String getVideoType() { + return videoType; + } + + public void setVideoType(String videoType) { + this.videoType = videoType; + } + + public String getWidth() { + return width; + } + + public void setWidth(String width) { + this.width = width; + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/VideoSetting.java b/lib_common/src/main/java/com/qunar/im/base/module/VideoSetting.java new file mode 100644 index 0000000..84b9214 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/VideoSetting.java @@ -0,0 +1,102 @@ +package com.qunar.im.base.module; + +public class VideoSetting { + + + /** + * data : {"videoFileSize":-4.706979010416546E7,"videoTimeLen":-4.7959055819485694E7} + * errcode : -1.249823269986771E7 + * errmsg : in elit deserunt + * ret : false + */ + + private DataBean data; + private int errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + /** + * videoFileSize : -4.706979010416546E7 + * videoTimeLen : -4.7959055819485694E7 + */ + + private long videoFileSize; + private long videoTimeLen; + private boolean highDefinition; + private boolean useAble; + private long videoMaxTimeLen; + + public long getVideoMaxTimeLen() { + return videoMaxTimeLen; + } + + public void setVideoMaxTimeLen(long videoMaxTimeLen) { + this.videoMaxTimeLen = videoMaxTimeLen; + } + + public boolean isUseAble() { + return useAble; + } + + public void setUseAble(boolean useAble) { + this.useAble = useAble; + } + + public boolean isHighDefinition() { + return highDefinition; + } + + public void setHighDefinition(boolean highDefinition) { + this.highDefinition = highDefinition; + } + + public long getVideoFileSize() { + return videoFileSize; + } + + public void setVideoFileSize(long videoFileSize) { + this.videoFileSize = videoFileSize; + } + + public long getVideoTimeLen() { + return videoTimeLen; + } + + public void setVideoTimeLen(long videoTimeLen) { + this.videoTimeLen = videoTimeLen; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldAtShowItem.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldAtShowItem.java new file mode 100644 index 0000000..20ff65c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldAtShowItem.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.module; + +public class WorkWorldAtShowItem extends WorkWorldNoticeItem{ + + @Override + public int getItemType() { + return Integer.parseInt(getEventType()); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldAtShowResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldAtShowResponse.java new file mode 100644 index 0000000..44d420e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldAtShowResponse.java @@ -0,0 +1,74 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class WorkWorldAtShowResponse { + + + /** + * data : {"deleteAtList":[],"newAtList":[{"createTime":1557309466022,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"487072F23B85421981664B5789158E8C","toAnonymousPhoto":"","content":"非奸即盗觉得@胡滨hubin","userToHost":null,"createTime":1557309465999,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557317879866,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"DEF55DA66C8B47D4A1DE3E6B08D66347","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557317879772,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557317995356,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"BDE8A4DF20414141A5B446A9622C39E2","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557317995337,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557234995500,"data":{"owner":"binz.zhang","anyonousName":"","readState":0,"anyonousPhoto":"","postUUID":"0-9dc5cd048e824e40b721f24f2e32482a","createTime":1557234995500,"eventType":3,"ownerHost":"ejabhost1","isAnyonous":0,"uuid":"606286DFF1A74D28B89D13E841A7F5F5","content":"方法休息休息@胡滨hubin"}},{"createTime":1557234160788,"data":{"owner":"binz.zhang","anyonousName":"","readState":0,"anyonousPhoto":"","postUUID":"0-de6633eae37e42ca85fc6c0f6bce11d0","createTime":1557234160788,"eventType":3,"ownerHost":"ejabhost1","isAnyonous":0,"uuid":"2CA6CD6986194D1AA16129784AE7687F","content":"脱光光广告费发的@胡滨hubin"}},{"createTime":1557235012306,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-de6633eae37e42ca85fc6c0f6bce11d0","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"A22CBDD7ACCB4C96AED7D93355C74A01","toAnonymousPhoto":"","content":"吃v吃吃吃@胡滨hubin","userToHost":null,"createTime":1557235012288,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557236581573,"data":{"anyonousName":"","readState":0,"anyonousPhoto":"","postUUID":"0-4b2f7e0a2daf487790b33a986671e81b","fromUser":null,"createTime":1557236581573,"fromHost":"ejabhost1","eventType":3,"isAnyonous":0,"uuid":"681313FE2FB348EFB651732EE2B52D96","content":"vvv敢不敢@胡滨hubin"}},{"createTime":1557236621119,"data":{"anyonousName":"","readState":0,"anyonousPhoto":"","postUUID":"0-8dbbfccdc7f348d6bfc3ab59f3ae5391","fromUser":null,"createTime":1557236621119,"fromHost":"ejabhost1","eventType":3,"isAnyonous":0,"uuid":"4077F5A1B5824ABF8E1A1BF3D98F75B3","content":"黄河鬼棺@胡滨hubin"}},{"createTime":1557237024346,"data":{"anyonousName":"","userFrom":"binz.zhang","readState":0,"anyonousPhoto":"","postUUID":"0-3a80d820f9b84f41bfd8c98ff4993852","createTime":1557237024346,"userFromHost":"ejabhost1","eventType":3,"isAnyonous":0,"uuid":"F25D62B6539242D58D6BF2FAB12E76D3","content":"不vGV吃吃吃@胡滨hubin"}},{"createTime":1557237324380,"data":{"anyonousName":"","userFrom":"binz.zhang","readState":0,"anyonousPhoto":"","postUUID":"0-3b02981e75e1428b92c6984c46ac6e10","createTime":1557237324380,"userFromHost":"ejabhost1","eventType":3,"isAnyonous":0,"uuid":"200ADC9CCF114A36BF43F7B357D68895","content":"还行吧对不对男@胡滨hubin"}},{"createTime":1557237174868,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-3a80d820f9b84f41bfd8c98ff4993852","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"65B6BBF9B2B64E5BB58053E6B7DA3A03","toAnonymousPhoto":"","content":"更丰富非常@胡滨hubin","userToHost":null,"createTime":1557237174830,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557238097752,"data":{"userFrom":null,"readState":0,"postUUID":"0-d2280ed3e8064675ae3894c55d358a60","fromIsAnonymous":0,"toAnonymousName":null,"toIsAnonymous":0,"eventType":3,"userTo":null,"uuid":"D184146339284C53979C85683E092251","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557238097752,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557238109221,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-d2280ed3e8064675ae3894c55d358a60","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"F429F052F466428DB67639000096EED5","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557238109187,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557238177398,"data":{"userFrom":null,"readState":0,"postUUID":"0-a633fe14b7f344619c435a1b78d41af2","fromIsAnonymous":0,"toAnonymousName":null,"toIsAnonymous":0,"eventType":3,"userTo":null,"uuid":"A4977B8EC7FB4B1CB89A75E1A34B67CD","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557238177398,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557238221163,"data":{"userFrom":null,"readState":0,"postUUID":"0-7e9ac0513b6e4d7eb8cbaf05fb58bf95","fromIsAnonymous":0,"toAnonymousName":null,"toIsAnonymous":0,"eventType":3,"userTo":null,"uuid":"71E098D6088B4697875DBD013F5E70E9","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557238221163,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557239056252,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"A74BF8163B784D0992B0A9B4F09D0803","toAnonymousPhoto":"","content":"放假@胡滨hubin","userToHost":null,"createTime":1557239056223,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557239069227,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"EC9EA99E719F485C8D00783DF8E1E115","toAnonymousPhoto":"","content":"公积金菲菲姐姐@胡滨hubin","userToHost":null,"createTime":1557239069202,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557239009685,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-3bd4234687bb4fdfaa762240e793ccb0","fromIsAnonymous":0,"toAnonymousName":null,"toIsAnonymous":0,"eventType":3,"userTo":null,"uuid":"35836F0E89B64170AC7DD1FB1CF15F09","toAnonymousPhoto":"","content":"@胡滨hubin vvv刚刚","userToHost":null,"createTime":1557239009685,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557239032038,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":null,"toIsAnonymous":0,"eventType":3,"userTo":null,"uuid":"6685038F4A36401A99710E63DBCFCC90","toAnonymousPhoto":"","content":"@胡滨hubin 继续继续觉得","userToHost":null,"createTime":1557239032038,"userFromHost":"ejabhost1","fromAnonymousName":""}},{"createTime":1557309374248,"data":{"userFrom":"binz.zhang","readState":0,"postUUID":"0-e65824bfca924c66ba328bf134769cee","fromIsAnonymous":0,"toAnonymousName":"","toIsAnonymous":0,"eventType":4,"userTo":null,"uuid":"1F20B67178CA4208BD831853C751A83B","toAnonymousPhoto":"","content":"@胡滨hubin","userToHost":null,"createTime":1557309374229,"userFromHost":"ejabhost1","fromAnonymousName":""}}]} + * errcode : 0 + * errmsg : + * ret : true + */ + + private DataBean data; + private int errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + private List deleteAtList; + private List newAtList; + + public List getDeleteAtList() { + return deleteAtList; + } + + public void setDeleteAtList(List deleteAtList) { + this.deleteAtList = deleteAtList; + } + + public List getNewAtList() { + return newAtList; + } + + public void setNewAtList(List newAtList) { + this.newAtList = newAtList; + } + + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldChildCommentBean.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldChildCommentBean.java new file mode 100644 index 0000000..a3c0fbd --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldChildCommentBean.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.module; + +public class WorkWorldChildCommentBean extends WorkWorldNewCommentBean { + + @Override + public int getItemType() { + return 5; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDeleteResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDeleteResponse.java new file mode 100644 index 0000000..6c7195d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDeleteResponse.java @@ -0,0 +1,222 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class WorkWorldDeleteResponse { + /** + * Copyright 2019 bejson.com + */ + + + /** + * Auto-generated: 2019-01-09 11:16:54 + * + * @author bejson.com (i@bejson.com) + * @website http://www.bejson.com/java2pojo/ + */ + + + private Data data; + private int errcode; + private String errmsg; + private boolean ret; + + public void setData(Data data) { + this.data = data; + } + + public Data getData() { + return data; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public int getErrcode() { + return errcode; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public String getErrmsg() { + return errmsg; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public boolean getRet() { + return ret; + } + + + public class Data { + + private int isDelete; + private int commentStatus; + private List attachCommentList; + + public List getAttachCommentList() { + return attachCommentList; + } + + public void setAttachCommentList(List attachCommentList) { + this.attachCommentList = attachCommentList; + } + + public int getIsDelete() { + return isDelete; + } + + public void setIsDelete(int isDelete) { + this.isDelete = isDelete; + } + + public int getCommentStatus() { + return commentStatus; + } + + public void setCommentStatus(int commentStatus) { + this.commentStatus = commentStatus; + } + + private int id; + + private CommentDeleteInfo deleteCommentData; +// private CommentDeleteInfo childComment; + + private int postCommentNum; + private int postLikeNum; + + public CommentDeleteInfo getDeleteCommentData() { + return deleteCommentData; + } + + public void setDeleteCommentData(CommentDeleteInfo deleteCommentData) { + this.deleteCommentData = deleteCommentData; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + + public int getPostCommentNum() { + return postCommentNum; + } + + public void setPostCommentNum(int postCommentNum) { + this.postCommentNum = postCommentNum; + } + + public int getPostLikeNum() { + return postLikeNum; + } + + public void setPostLikeNum(int postLikeNum) { + this.postLikeNum = postLikeNum; + } + +// public String getCommentUUID() { +// return commentUUID; +// } +// +// public void setCommentUUID(String commentUUID) { +// this.commentUUID = commentUUID; +// } +// +// public void setIsDelete(int isDelete) { +// this.isDelete = isDelete; +// } +// +// public int getIsDelete() { +// return isDelete; +// } +// +// public void setId(int id) { +// this.id = id; +// } +// +// public int getId() { +// return id; +// } + + + } + + + public class CommentDeleteInfo{ + private String commentUUID; + private int deleteType; + private String postUUID; + private String superParentCommentUUID; + private int superParentStatus; + private int isDelete; +// private int commentStatus; + + + public int getDeleteType() { + return deleteType; + } + + public void setDeleteType(int deleteType) { + this.deleteType = deleteType; + } + + public String getPostUUID() { + return postUUID; + } + + public void setPostUUID(String postUUID) { + this.postUUID = postUUID; + } + + public String getSuperParentCommentUUID() { + return superParentCommentUUID; + } + + public void setSuperParentCommentUUID(String superParentCommentUUID) { + this.superParentCommentUUID = superParentCommentUUID; + } + + public int getSuperParentStatus() { + return superParentStatus; + } + + public void setSuperParentStatus(int superParentStatus) { + this.superParentStatus = superParentStatus; + } + + public String getCommentUUID() { + return commentUUID; + } + + public void setCommentUUID(String commentUUID) { + this.commentUUID = commentUUID; + } + + public int getIsDelete() { + return isDelete; + } + + public void setIsDelete(int isDelete) { + this.isDelete = isDelete; + } + +// public int getCommentStatus() { +// return commentStatus; +// } +// +// public void setCommentStatus(int commentStatus) { +// this.commentStatus = commentStatus; +// } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsCommenData.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsCommenData.java new file mode 100644 index 0000000..37b9716 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsCommenData.java @@ -0,0 +1,168 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; +import java.util.List; + +public class WorkWorldDetailsCommenData implements MultiItemEntity{ + + + /** + * data : {"deleteComments":[{"id":3.6033941311864406E7,"isDelete":-5.025863007142992E7,"uuid":"eiusmod ex"},{"id":4668110.913675427,"isDelete":-5.385126468435759E7,"uuid":"consequat sed"},{"id":-9.766324515943916E7,"isDelete":-1.8191352936777115E7,"uuid":"et rep"},{"id":-3.8994287108716644E7,"isDelete":-2.9203935351248235E7,"uuid":"Duis Lorem cillum culpa nostrud"}],"newComment":[{"anonymousName":"Excepteur qui deserunt","anonymousPhoto":"adipisicing","commentUUID":"do in irure eiusmod","content":"sed sunt fugiat","createTime":8.269868233724448E7,"fromHost":"laboris amet","fromUser":"sunt","id":5.5106199377797574E7,"isAnonymous":-6.002114353700061E7,"isDelete":2.0608622232486784E7,"isLike":9.480324758136329E7,"likeNum":-9.569283989306125E7,"parentCommentUUID":"id dolore culpa ea","postUUID":"do adipisicing labore voluptate","reviewStatus":-9.108365232187854E7,"toHost":"nostrud Duis eu consequat elit","toUser":"ex exercitation","updateTime":-3.375192692442859E7},{"anonymousName":"pariatur est quis","anonymousPhoto":"amet proident occaecat sed","commentUUID":"culpa sit non","content":"consectetur consequat esse deserunt","createTime":-5.014410198148607E7,"fromHost":"eu ea sunt minim aliqua","fromUser":"Excepteur mollit quis incididunt qui","id":4277638.217013329,"isAnonymous":-7.166272955039333E7,"isDelete":-1.9037268230086908E7,"isLike":-6.2670810202829316E7,"likeNum":-2.3485653962281823E7,"parentCommentUUID":"sit","postUUID":"dolor","reviewStatus":1636712.345532924,"toHost":"tempor aliqua","toUser":"ut sit ullamco","updateTime":-6.207830242742385E7},{"anonymousName":"dolor consequat","anonymousPhoto":"ullamco cupidatat","commentUUID":"et qui","content":"in cillum est","createTime":-9.27229672293822E7,"fromHost":"sit officia anim","fromUser":"tempor voluptate d","id":-9.893990032504632E7,"isAnonymous":6.0902244994333625E7,"isDelete":8.826085528554559E7,"isLike":2.1911243080731735E7,"likeNum":3718514.5491362065,"parentCommentUUID":"in id","postUUID":"veniam ut tempor eiusmod","reviewStatus":-6.4379554008966975E7,"toHost":"consectetur ex dolor tempor","toUser":"nisi est exercitation","updateTime":-1.3217958678290024E7},{"anonymousName":"laboris enim dolor officia","anonymousPhoto":"nisi dolor sunt","commentUUID":"culpa Ut labori","content":"ea e","createTime":-4.362360140504462E7,"fromHost":"non occaecat dolor","fromUser":"adipisicing consectetur sunt aliquip","id":-6.111658485990157E7,"isAnonymous":-685218.0025397539,"isDelete":6245656.283641487,"isLike":2.5905933911559448E7,"likeNum":4.2436587661426425E7,"parentCommentUUID":"adipisicing eu Ut dolore","postUUID":"occaecat adipisicing sint co","reviewStatus":1.1382645928428262E7,"toHost":"veniam Excepteur","toUser":"proident Excepteur aute Duis Lorem","updateTime":3.414881860202326E7},{"anonymousName":"nulla cupidatat in","anonymousPhoto":"sint","commentUUID":"fugiat","content":"id","createTime":6.4599552259430915E7,"fromHost":"","fromUser":"ess","id":2.9420297731194586E7,"isAnonymous":2.0085099531801417E7,"isDelete":5.3549766918773085E7,"isLike":-5.969312330317349E7,"likeNum":9.181758713220432E7,"parentCommentUUID":"commodo non quis aliquip","postUUID":"laborum eu","reviewStatus":-3.944499129626475E7,"toHost":"est aliqua","toUser":"in","updateTime":7.355894704371163E7}]} + * errcode : -6.346568970119884E7 + * errmsg : minim + * ret : true + */ + + private DataBean data; + private double errcode; + private String errmsg; + private boolean ret; + + @Override + public int getItemType() { + return 0; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public double getErrcode() { + return errcode; + } + + public void setErrcode(double errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean implements MultiItemEntity{ + private List deleteComments; + private List newComment; + private List attachCommentList; + private int postCommentNum; + private int postLikeNum; + private int isPostLike; + private int returnType; + + public List getAttachCommentList() { + return attachCommentList; + } + + public void setAttachCommentList(List attachCommentList) { + this.attachCommentList = attachCommentList; + } + + public int getReturnType() { + return returnType; + } + + public void setReturnType(int returnType) { + this.returnType = returnType; + } + + public int getIsPostLike() { + return isPostLike; + } + + public void setIsPostLike(int isPostLike) { + this.isPostLike = isPostLike; + } + + public int getPostCommentNum() { + return postCommentNum; + } + + public void setPostCommentNum(int postCommentNum) { + this.postCommentNum = postCommentNum; + } + + public int getPostLikeNum() { + return postLikeNum; + } + + public void setPostLikeNum(int postLikeNum) { + this.postLikeNum = postLikeNum; + } + + public List getDeleteComments() { + return deleteComments; + } + + public void setDeleteComments(List deleteComments) { + this.deleteComments = deleteComments; + } + + public List getNewComment() { + return newComment; + } + + public void setNewComment(List newComment) { + this.newComment = newComment; + } + + @Override + public int getItemType() { + return 0; + } + + public static class DeleteCommentsBean implements Serializable { + /** + * id : 3.6033941311864406E7 + * isDelete : -5.025863007142992E7 + * uuid : eiusmod ex + */ + + private double id; + private double isDelete; + private String uuid; + + public double getId() { + return id; + } + + public void setId(double id) { + this.id = id; + } + + public double getIsDelete() { + return isDelete; + } + + public void setIsDelete(double isDelete) { + this.isDelete = isDelete; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } + + + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsCommentHotData.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsCommentHotData.java new file mode 100644 index 0000000..82dac23 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsCommentHotData.java @@ -0,0 +1,47 @@ +package com.qunar.im.base.module; + +public class WorkWorldDetailsCommentHotData implements MultiItemEntity{ + + private WorkWorldDetailsCommenData.DataBean data; + private double errcode; + private String errmsg; + private boolean ret; + + + public WorkWorldDetailsCommenData.DataBean getData() { + return data; + } + + public void setData(WorkWorldDetailsCommenData.DataBean data) { + this.data = data; + } + + public double getErrcode() { + return errcode; + } + + public void setErrcode(double errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + @Override + public int getItemType() { + return 0; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsLabelData.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsLabelData.java new file mode 100644 index 0000000..38820c8 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldDetailsLabelData.java @@ -0,0 +1,43 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +public class WorkWorldDetailsLabelData implements MultiItemEntity,Serializable { + + public static int all = 1; + public static int hot = 0; + + private String name; + private int count; + private int type; + + public int getType() { + return type; + } + + + public void setType(int type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + @Override + public int getItemType() { + return 3; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldItem.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldItem.java new file mode 100644 index 0000000..04b7843 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldItem.java @@ -0,0 +1,189 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; +import java.util.List; + +public class WorkWorldItem implements Serializable { + + public String id = ""; + public String uuid = ""; + public String owner = ""; + public String ownerHost = ""; + public String isAnonymous = ""; + public String anonymousName = ""; + public String anonymousPhoto = ""; + public String createTime = ""; + public String updateTime = ""; + public String content = "{}"; + public String likeNum = ""; + public String commentsNum = ""; + public String reviewStatus = ""; + public String atList = ""; + public String isDelete =""; + public String isLike=""; + public String postType=""; + public List< WorkWorldOutCommentBean> attachCommentList =null; + public String attachCommentListString=""; +// public String readState=""; + + + public String getAttachCommentListString() { + return attachCommentListString; + } + + public void setAttachCommentListString(String attachCommentListString) { + this.attachCommentListString = attachCommentListString; + } + + public String getPostType() { + return postType; + } + + public void setPostType(String postType) { + this.postType = postType; + } + + public List< WorkWorldOutCommentBean> getAttachCommentList() { + return attachCommentList; + } + + public void setAttachCommentList(List< WorkWorldOutCommentBean> attachCommentList) { + this.attachCommentList = attachCommentList; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getOwnerHost() { + return ownerHost; + } + + public void setOwnerHost(String ownerHost) { + this.ownerHost = ownerHost; + } + + public String getIsAnonymous() { + return isAnonymous; + } + + public void setIsAnonymous(String isAnonymous) { + this.isAnonymous = isAnonymous; + } + + public String getAnonymousName() { + return anonymousName; + } + + public void setAnonymousName(String anonymousName) { + this.anonymousName = anonymousName; + } + + public String getAnonymousPhoto() { + return anonymousPhoto; + } + + public void setAnonymousPhoto(String anonymousPhoto) { + this.anonymousPhoto = anonymousPhoto; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getLikeNum() { + return likeNum; + } + + public void setLikeNum(String likeNum) { + this.likeNum = likeNum; + } + + public String getCommentsNum() { + return commentsNum; + } + + public void setCommentsNum(String commentsNum) { + this.commentsNum = commentsNum; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getAtList() { + return atList; + } + + public void setAtList(String atList) { + this.atList = atList; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + public String getIsLike() { + return isLike; + } + + public void setIsLike(String isLike) { + this.isLike = isLike; + } + +// public String getReadState() { +// return readState; +// } +// +// public void setReadState(String readState) { +// this.readState = readState; +// } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldMyReply.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldMyReply.java new file mode 100644 index 0000000..1db2e28 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldMyReply.java @@ -0,0 +1,67 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class WorkWorldMyReply { + + + private DataBean data; + private int errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + private List deleteComments; + private List newComment; + + public List getDeleteComments() { + return deleteComments; + } + + public void setDeleteComments(List deleteComments) { + this.deleteComments = deleteComments; + } + + public List getNewComment() { + return newComment; + } + + public void setNewComment(List newComment) { + this.newComment = newComment; + } + + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNewCommentBean.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNewCommentBean.java new file mode 100644 index 0000000..918d5d0 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNewCommentBean.java @@ -0,0 +1,311 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; +import java.util.List; + +public class WorkWorldNewCommentBean implements MultiItemEntity,Serializable { + /** + * anonymousName : Excepteur qui deserunt + * anonymousPhoto : adipisicing + * commentUUID : do in irure eiusmod + * content : sed sunt fugiat + * createTime : 8.269868233724448E7 + * fromHost : laboris amet + * fromUser : sunt + * id : 5.5106199377797574E7 + * isAnonymous : -6.002114353700061E7 + * isDelete : 2.0608622232486784E7 + * isLike : 9.480324758136329E7 + * likeNum : -9.569283989306125E7 + * parentCommentUUID : id dolore culpa ea + * postUUID : do adipisicing labore voluptate + * reviewStatus : -9.108365232187854E7 + * toHost : nostrud Duis eu consequat elit + * toUser : ex exercitation + * updateTime : -3.375192692442859E7 + */ + + private int type = 1;//COMMENT + + private String anonymousName; + private String anonymousPhoto; + private String commentUUID; + private String content; + private String createTime; + private String fromHost; + private String fromUser; + private String id; + private String isAnonymous; + private String isDelete; + private String isLike; + private String likeNum; + private String parentCommentUUID; + private String postUUID; + private String reviewStatus; + private String toHost; + private String toUser; + private String updateTime; + private String toisAnonymous; + private String toAnonymousName; + private String toAnonymousPhoto; + private String postOwner; + private String postOwnerHost; + private String superParentUUID; + private String commentStatus; + private List hotCommentUUID; + private String atList; + + public String getAtList() { + return atList; + } + + public void setAtList(String atList) { + this.atList = atList; + } + + public List getHotCommentUUID() { + return hotCommentUUID; + } + + public void setHotCommentUUID(List hotCommentUUID) { + this.hotCommentUUID = hotCommentUUID; + } + + public String getCommentStatus() { + return commentStatus; + } + + public void setCommentStatus(String commentStatus) { + this.commentStatus = commentStatus; + } + + private List newChild; + private String newChildString; + + private List deleteChild; + + + public List getDeleteChild() { + return deleteChild; + } + + public void setDeleteChild(List deleteChild) { + this.deleteChild = deleteChild; + } + + public List getNewChild() { + return newChild; + } + + public void setNewChild(List newChild) { + this.newChild = newChild; + } + + public String getNewChildString() { + return newChildString; + } + + public void setNewChildString(String newChildString) { + this.newChildString = newChildString; + } + + public String getSuperParentUUID() { + return superParentUUID; + } + + public void setSuperParentUUID(String superParentUUID) { + this.superParentUUID = superParentUUID; + } + + public String getPostOwner() { + return postOwner; + } + + public void setPostOwner(String postOwner) { + this.postOwner = postOwner; + } + + public String getPostOwnerHost() { + return postOwnerHost; + } + + public void setPostOwnerHost(String postOwnerHost) { + this.postOwnerHost = postOwnerHost; + } + + public String getToisAnonymous() { + return toisAnonymous; + } + + public void setToisAnonymous(String toisAnonymous) { + this.toisAnonymous = toisAnonymous; + } + + public String getToAnonymousName() { + return toAnonymousName; + } + + public void setToAnonymousName(String toAnonymousName) { + this.toAnonymousName = toAnonymousName; + } + + public String getToAnonymousPhoto() { + return toAnonymousPhoto; + } + + public void setToAnonymousPhoto(String toAnonymousPhoto) { + this.toAnonymousPhoto = toAnonymousPhoto; + } + + public String getAnonymousName() { + return anonymousName; + } + + public void setAnonymousName(String anonymousName) { + this.anonymousName = anonymousName; + } + + public String getAnonymousPhoto() { + return anonymousPhoto; + } + + public void setAnonymousPhoto(String anonymousPhoto) { + this.anonymousPhoto = anonymousPhoto; + } + + public String getCommentUUID() { + return commentUUID; + } + + public void setCommentUUID(String commentUUID) { + this.commentUUID = commentUUID; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getFromHost() { + return fromHost; + } + + public void setFromHost(String fromHost) { + this.fromHost = fromHost; + } + + public String getFromUser() { + return fromUser; + } + + public void setFromUser(String fromUser) { + this.fromUser = fromUser; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getIsAnonymous() { + return isAnonymous; + } + + public void setIsAnonymous(String isAnonymous) { + this.isAnonymous = isAnonymous; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + public String getIsLike() { + return isLike; + } + + public void setIsLike(String isLike) { + this.isLike = isLike; + } + + public String getLikeNum() { + return likeNum; + } + + public void setLikeNum(String likeNum) { + this.likeNum = likeNum; + } + + public String getParentCommentUUID() { + return parentCommentUUID; + } + + public void setParentCommentUUID(String parentCommentUUID) { + this.parentCommentUUID = parentCommentUUID; + } + + public String getPostUUID() { + return postUUID; + } + + public void setPostUUID(String postUUID) { + this.postUUID = postUUID; + } + + public String getReviewStatus() { + return reviewStatus; + } + + public void setReviewStatus(String reviewStatus) { + this.reviewStatus = reviewStatus; + } + + public String getToHost() { + return toHost; + } + + public void setToHost(String toHost) { + this.toHost = toHost; + } + + public String getToUser() { + return toUser; + } + + public void setToUser(String toUser) { + this.toUser = toUser; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + @Override + public int getItemType() { + return type; + } + + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeHistoryResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeHistoryResponse.java new file mode 100644 index 0000000..981f1f5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeHistoryResponse.java @@ -0,0 +1,77 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class WorkWorldNoticeHistoryResponse { + + + /** + * data : {"msgList":["sit laborum Ut adipisicing"],"total":-2.4242787958718285E7} + * errcode : -81650.7542372495 + * errmsg : vel + * ret : false + */ + + private DataBean data; + private double errcode; + private String errmsg; + private boolean ret; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public double getErrcode() { + return errcode; + } + + public void setErrcode(double errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public static class DataBean { + /** + * msgList : ["sit laborum Ut adipisicing"] + * total : -2.4242787958718285E7 + */ + + private double total; + private List msgList; + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public List getMsgList() { + return msgList; + } + + public void setMsgList(List msgList) { + this.msgList = msgList; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeItem.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeItem.java new file mode 100644 index 0000000..f30fca6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeItem.java @@ -0,0 +1,229 @@ +package com.qunar.im.base.module; + +import android.text.TextUtils; + +public class WorkWorldNoticeItem implements MultiItemEntity{ + private String eventType=""; + private String userFrom=""; + private String userFromHost=""; + private String userTo=""; + private String userToHost=""; + private String fromIsAnonymous=""; + private String fromAnonymousName=""; + private String fromAnonymousPhoto=""; + private String toIsAnonymous=""; + private String toAnonymousName=""; + private String toAnonymousPhoto=""; + private String content=""; + private String postUUID=""; + private String uuid=""; + private String createTime=""; + private String readState=""; + + private String owner=""; + private String anyonousName=""; + private String anyonousPhoto=""; + private String ownerHost=""; + private String isAnyonous=""; + + + private String fromHost=""; + private String fromUser=""; + private String toHost=""; + private String toUser=""; + + + private String commentUUID; + + + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getAnyonousName() { + return anyonousName; + } + + public void setAnyonousName(String anyonousName) { + this.anyonousName = anyonousName; + } + + public String getAnyonousPhoto() { + return anyonousPhoto; + } + + public void setAnyonousPhoto(String anyonousPhoto) { + this.anyonousPhoto = anyonousPhoto; + } + + public String getOwnerHost() { + return ownerHost; + } + + public void setOwnerHost(String ownerHost) { + this.ownerHost = ownerHost; + } + + public String getIsAnyonous() { + return isAnyonous; + } + + public void setIsAnyonous(String isAnyonous) { + this.isAnyonous = isAnyonous; + } + + public String getReadState() { + return readState; + } + + public void setReadState(String readState) { + this.readState = readState; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getUserFrom() { + if(TextUtils.isEmpty(userFrom)){ + return fromUser; + }else { + return userFrom; + } + } + + public void setUserFrom(String userFrom) { + this.userFrom = userFrom; + } + + public String getUserFromHost() { + if(TextUtils.isEmpty(userFromHost)){ + return fromHost; + }else { + return userFromHost; + } + } + + public void setUserFromHost(String userFromHost) { + this.userFromHost = userFromHost; + } + + public String getUserTo() { + if(TextUtils.isEmpty(userTo)){ + return toUser; + }else { + return userTo; + } + } + + public void setUserTo(String userTo) { + + this.userTo = userTo; + } + + public String getUserToHost() { + if(TextUtils.isEmpty(userToHost)){ + return toHost; + }else { + return userToHost; + } + } + + public void setUserToHost(String userToHost) { + this.userToHost = userToHost; + } + + public String getFromIsAnonymous() { + return fromIsAnonymous; + } + + public void setFromIsAnonymous(String fromIsAnyonous) { + this.fromIsAnonymous = fromIsAnyonous; + } + + public String getFromAnonymousName() { + return fromAnonymousName; + } + + public void setFromAnonymousName(String fromAnyonousName) { + this.fromAnonymousName = fromAnyonousName; + } + + public String getFromAnonymousPhoto() { + return fromAnonymousPhoto; + } + + public void setFromAnonymousPhoto(String fromAnyonousPhoto) { + this.fromAnonymousPhoto = fromAnyonousPhoto; + } + + public String getToIsAnonymous() { + return toIsAnonymous; + } + + public void setToIsAnonymous(String toIsAnyonous) { + this.toIsAnonymous = toIsAnyonous; + } + + public String getToAnonymousName() { + return toAnonymousName; + } + + public void setToAnonymousName(String toAnyonousName) { + this.toAnonymousName = toAnyonousName; + } + + public String getToAnonymousPhoto() { + return toAnonymousPhoto; + } + + public void setToAnonymousPhoto(String toAnyonousPhoto) { + this.toAnonymousPhoto = toAnyonousPhoto; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getPostUUID() { + return postUUID; + } + + public void setPostUUID(String postUUID) { + this.postUUID = postUUID; + } + + @Override + public int getItemType() { + return 2; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeTimeData.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeTimeData.java new file mode 100644 index 0000000..645b3cc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldNoticeTimeData.java @@ -0,0 +1,23 @@ +package com.qunar.im.base.module; + +public class WorkWorldNoticeTimeData { + + private String createTime="0"; + private String uuid=""; + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldOutCommentBean.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldOutCommentBean.java new file mode 100644 index 0000000..60cfd27 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldOutCommentBean.java @@ -0,0 +1,9 @@ +package com.qunar.im.base.module; + +public class WorkWorldOutCommentBean extends WorkWorldNewCommentBean { + + @Override + public int getItemType() { + return 4; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldOutOpenDetails.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldOutOpenDetails.java new file mode 100644 index 0000000..e4d77cb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldOutOpenDetails.java @@ -0,0 +1,30 @@ +package com.qunar.im.base.module; + +import java.io.Serializable; + +public class WorkWorldOutOpenDetails implements MultiItemEntity,Serializable { + + private int count; + private String text; + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + @Override + public int getItemType() { + return 6; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldResponse.java new file mode 100644 index 0000000..f11f91a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldResponse.java @@ -0,0 +1,63 @@ +package com.qunar.im.base.module; + +import java.util.ArrayList; + +public class WorkWorldResponse { + private boolean ret; + private int errcode; + private String errmsg; + private Data data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + public class Data { + private ArrayList deletePost = new ArrayList<>(); + private ArrayList newPost = new ArrayList<>(); + + public ArrayList getDeletePost() { + return deletePost; + } + + public void setDeletePost(ArrayList deletePost) { + this.deletePost = deletePost; + } + + public ArrayList getNewPost() { + return newPost; + } + + public void setNewPost(ArrayList newPost) { + this.newPost = newPost; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldSearchShowResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldSearchShowResponse.java new file mode 100644 index 0000000..8afaf94 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldSearchShowResponse.java @@ -0,0 +1,52 @@ +package com.qunar.im.base.module; + +import java.util.List; + +public class WorkWorldSearchShowResponse { + + + /** + * data : [{"commentUUID":"anim dolore consequat","content":"ut incididunt irure","createTime":3.099762472128433E7,"eventType":1.1442698770179763E7,"fromAnonymousName":"sed dolor","fromAnonymousPhoto":"dolor ex in minim","fromIsAnonymous":"quis deserunt laboris proident dolor","postUUID":"in esse nulla reprehenderit","toAnonymousName":"sint quis magna qui","toAnonymousPhoto":"culpa esse","toIsAnonymous":"minim","userFrom":"aliqua volup","userFromHost":"sit eiusmod voluptate","userTo":"exercitation qui dolor sed","userToHost":"Ut sit mollit"},{"commentUUID":"non in Ut magna","content":"anim pariatur do deserunt","createTime":6.866229945473602E7,"eventType":3.0427675619761497E7,"fromAnonymousName":"deserunt sit aute","fromAnonymousPhoto":"do consequat id","fromIsAnonymous":"velit reprehenderit in ut sunt","postUUID":"aliquip ea sed cupidatat Duis","toAnonymousName":"laboris Duis commodo","toAnonymousPhoto":"voluptate","toIsAnonymous":"dolor consectetur","userFrom":"exercitation est","userFromHost":"aliqua","userTo":"Excepteur culpa","userToHost":"deserunt tempor consectetur"},{"commentUUID":"eu ad","content":"nulla exercita","createTime":5.847311014517978E7,"eventType":-2.008385416340053E7,"fromAnonymousName":"nisi ipsum culpa","fromAnonymousPhoto":"esse","fromIsAnonymous":"ut","postUUID":"occaecat aliqua esse amet","toAnonymousName":"ullamco labore sunt nisi","toAnonymousPhoto":"ipsum","toIsAnonymous":"reprehenderit ullamco velit sed","userFrom":"voluptate aute labore","userFromHost":"adipisicing","userTo":"veniam tempor dolor","userToHost":"ulla"}] + * errcode : 8.508089982814023E7 + * errmsg : ut elit in + * ret : true + */ + + private double errcode; + private String errmsg; + private boolean ret; + private List data; + + public double getErrcode() { + return errcode; + } + + public void setErrcode(double errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldSingleResponse.java b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldSingleResponse.java new file mode 100644 index 0000000..b9c3d8c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/module/WorkWorldSingleResponse.java @@ -0,0 +1,40 @@ +package com.qunar.im.base.module; + +public class WorkWorldSingleResponse { + private boolean ret; + private int errcode; + private String errmsg; + private WorkWorldItem data; + + public boolean isRet() { + return ret; + } + + public void setRet(boolean ret) { + this.ret = ret; + } + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public WorkWorldItem getData() { + return data; + } + + public void setData(WorkWorldItem data) { + this.data = data; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ConfigAPI.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ConfigAPI.java index b9d0bff..d50f3c8 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/ConfigAPI.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ConfigAPI.java @@ -5,6 +5,7 @@ import com.qunar.im.base.jsonbean.RemoteConfig; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.services.QtalkNavicationService; import java.io.InputStream; @@ -19,7 +20,7 @@ public static void getRemoteConfig(List jsonDatas,final { try { StringBuilder queryString = new StringBuilder("conf/get_person?"); - if (TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getVerifyKey())) { + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { callback.doFailure(); return; } @@ -56,7 +57,7 @@ public static void setRemoteConfig(List jsonDatas,final { try { StringBuilder queryString = new StringBuilder("conf/set_person?"); - if (TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getVerifyKey())) { + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { if(callback!=null)callback.doFailure(); return; } diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/DailyMindApi.java b/lib_common/src/main/java/com/qunar/im/base/protocol/DailyMindApi.java index a663d27..3024dd3 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/DailyMindApi.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/DailyMindApi.java @@ -1,7 +1,6 @@ package com.qunar.im.base.protocol; import android.text.TextUtils; -import android.util.Log; import com.qunar.im.base.common.DailyMindConstants; import com.qunar.im.base.jsonbean.BaseJsonResult; @@ -11,7 +10,7 @@ import com.qunar.im.base.jsonbean.DailyMindSubList; import com.qunar.im.base.jsonbean.GeneralJson; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.io.IOException; import java.io.InputStream; @@ -91,7 +90,7 @@ public void onComplete(InputStream response) { String qid = requestParams.get("qid"); unitCallback.onCompleted(qid); } - } catch (Exception e) { + } catch (IOException e) { e.printStackTrace(); } } @@ -127,7 +126,7 @@ public void onComplete(InputStream response) { unitCallback.onCompleted(dailyMindSub); } } - } catch (Exception e) { + } catch (IOException e) { e.printStackTrace(); } } diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/HttpContinueDownloadCallback.java b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpContinueDownloadCallback.java new file mode 100644 index 0000000..f28acff --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpContinueDownloadCallback.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.protocol; + +import java.io.InputStream; + +/** + * Created by xinbo.wang on 2016/7/13. + */ +public interface HttpContinueDownloadCallback { + void onComplete(InputStream response,boolean supports); + void onFailure(Exception e); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/HttpNamedDownload.java b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpNamedDownload.java new file mode 100644 index 0000000..cf89e77 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpNamedDownload.java @@ -0,0 +1,13 @@ +package com.qunar.im.base.protocol; + + +import okhttp3.Call; +import okhttp3.OkHttpClient; + +/** + * Created by xinbo.wang on 2016/7/13. + */ +public class HttpNamedDownload { + public Call call; + public OkHttpClient client; +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/HttpRequestCallback.java b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpRequestCallback.java new file mode 100644 index 0000000..1b1a2af --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpRequestCallback.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.protocol; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Created by saber on 15-8-13. + */ +public interface HttpRequestCallback { + void onComplete(InputStream response) throws IOException; + void onFailure(Exception e); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/HttpUrlConnectionHandler.java b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpUrlConnectionHandler.java new file mode 100644 index 0000000..d21039d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/HttpUrlConnectionHandler.java @@ -0,0 +1,445 @@ +package com.qunar.im.base.protocol; + + +import android.text.TextUtils; + +import com.qunar.im.base.util.LogUtil; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.FormBody; +import okhttp3.Headers; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +/** + * Created by saber on 15-8-13. + */ +public class HttpUrlConnectionHandler { + public static final MediaType MEDIA_TYPE_MARKDOWN + = MediaType.parse("text/x-markdown; charset=utf-8"); + public static final MediaType JSON + = MediaType.parse("application/json; charset=utf-8"); + + public static final MediaType MULTIPART_DATA + = MediaType.parse("multipart/form-data; charset=utf-8"); + + private static final String COOKIE = "Cookie"; + + private static final String Q_CKEY = "q_ckey="; + + private static final OkHttpClient client = new OkHttpClient(); + + private static final Map runningCall = new HashMap<>(); + public static final OkHttpClient DEFAULT_CLIENT = client; + + + public static boolean checkRunning(String url, final ProgressResponseListener listener) + { + if(runningCall.containsKey(url)) + { + HttpNamedDownload download = runningCall.get(url); + if(download.client!=null&&listener!=null) + { + download.client.networkInterceptors().clear(); + download.client.networkInterceptors().add(new Interceptor() { + @Override + public Response intercept(Chain chain) throws IOException { + //拦截 + Response originalResponse = chain.proceed(chain.request()); + //包装响应体并返回 + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), listener)) + .build(); + } + }); + } + return true; + } + return false; + } + + public static void excuteDownload(final String url, final ProgressResponseListener progressResponseListener, final HttpContinueDownloadCallback callback) { + LogUtil.d("HttpUrlConnectionHandler1", "url:" + url); + Request request = new Request.Builder() + .url(url) + .build(); + OkHttpClient cloneClient = client; + final HttpNamedDownload httpNamedDownload = new HttpNamedDownload(); + if (progressResponseListener != null) { + cloneClient = addProgressResponseListener(client, progressResponseListener); + httpNamedDownload.client = cloneClient; + } + Call call = cloneClient.newCall(request); + httpNamedDownload.call = call; + runningCall.put(url, httpNamedDownload); + call.enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + runningCall.remove(url); + callback.onFailure(e); + } + + @Override + public void onResponse(Call call,Response response) throws IOException { + try { + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream(), false); + response.body().close(); + } finally { + runningCall.remove(url); + } + } + }); + } + + public static void cancelDownload(String url) + { + HttpNamedDownload call = runningCall.get(url); + if(call!=null&&call.call!=null) + { + runningCall.remove(url); + if(call.call.isCanceled()) + call.call.cancel(); + } + } + + public static void excuteContinueDownload(final String url,ProgressResponseListener progressResponseListener,String firstByte,final HttpContinueDownloadCallback callback) { + LogUtil.d("HttpUrlConnectionHandler2", "url:" + url); + Request request = new Request.Builder().url(url) + .addHeader("Range", "bytes=" + firstByte + "-") + .build(); + OkHttpClient cloneClient = client; + final HttpNamedDownload httpNamedDownload = new HttpNamedDownload(); + if (progressResponseListener != null) { + cloneClient = addProgressResponseListener(client, progressResponseListener); + httpNamedDownload.client = cloneClient; + } + Call call = cloneClient.newCall(request); + httpNamedDownload.call = call; + runningCall.put(url, httpNamedDownload); + call.enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + runningCall.remove(url); + callback.onFailure(e); + } + + @Override + public void onResponse(Call request,Response response) throws IOException { + runningCall.remove(url); + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + if (response.code() == 206 && !TextUtils.isEmpty(response.header("Content-Range"))) { + callback.onComplete(response.body().byteStream(), true); + } else { + callback.onComplete(response.body().byteStream(), false); + } + response.body().close(); + } + }); + } + + public static OkHttpClient addProgressResponseListener(OkHttpClient client,final ProgressResponseListener progressListener){ + + return client.newBuilder().addNetworkInterceptor(new Interceptor() { + @Override + public Response intercept(Chain chain) throws IOException { + //拦截 + Response originalResponse = chain.proceed(chain.request()); + //包装响应体并返回 + return originalResponse.newBuilder() + .body(new ProgressResponseBody(originalResponse.body(), progressListener)) + .build(); + } + }).build(); + } + + public static void executeGetSync(final String url,final HttpRequestCallback callback) + { + LogUtil.d("HttpUrlConnectionHandler3","url:"+url); + Map header = new HashMap<>(); + Headers headers = Headers.of(header); + header.put(COOKIE, Q_CKEY + get_qckey()); + Request request = new Request.Builder().url(url).headers(headers).build(); + try { + Response response = client.newCall(request).execute(); + if(response.isSuccessful()) { + callback.onComplete(response.body().byteStream()); + return; + } + callback.onFailure(new Exception("status is not 200")); + } catch (IOException e) { + e.printStackTrace(); + callback.onFailure(e); + } + } + public static InputStream excuteGetSync(final String url){ + LogUtil.d("HttpUrlConnectionHandler3","url:"+url); + Map header = new HashMap<>(); + Headers headers = Headers.of(header); + header.put(COOKIE, Q_CKEY + get_qckey()); + Request request = new Request.Builder().url(url).headers(headers).build(); + try { + Response response = client.newCall(request).execute(); + if(response.isSuccessful()) { + + return response.body().byteStream(); + } + + } catch (IOException e) { + e.printStackTrace(); + return null; + } + return null; + } + + public static void executeGet(final String url,final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler4","url:"+url); + executeGet(url,null,callback); + } + + public static void executeGet(final String url,Map header,final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler5","url:"+url); + if(header != null && header.containsKey(COOKIE)){ + String cookie = header.get(COOKIE); + if(TextUtils.isEmpty(cookie)){ + header.put(COOKIE,Q_CKEY + get_qckey()); + }else { + if(!cookie.contains(Q_CKEY)){//有Cookie 没有q_ckey + header.put(COOKIE,cookie + ";" + Q_CKEY + get_qckey()); + } + } + }else if(header == null){ + header = new HashMap<>(); + header.put(COOKIE,Q_CKEY + get_qckey()); + }else if(!header.containsKey(COOKIE)){ + header.put(COOKIE,Q_CKEY + get_qckey()); + } + Headers headers = Headers.of(header); + Request request = new Request.Builder() + .url(url) + .headers(headers) + .build(); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + callback.onFailure(e); + } + + @Override + public void onResponse(Call request,Response response) throws IOException { + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream()); + response.body().close(); + } + }); + } + + public static void executePostForm(final String url, final Map params, final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler6","url:"+url); + FormBody.Builder builder = new FormBody.Builder(); + for (String key : params.keySet()) { + builder.add(key, params.get(key)); + LogUtil.d("HttpUrlConnectionHandler7",key+ ":" + params.get(key)); + } + RequestBody body = builder.build(); + Map header = new HashMap<>(); + header.put(COOKIE, Q_CKEY + get_qckey()); + Headers headers = Headers.of(header); + Request request = new Request.Builder().url(url) + .post(body) + .headers(headers) + .build(); + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + callback.onFailure(e); + } + + @Override + public void onResponse(Call request,Response response) throws IOException { + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream()); + response.body().close(); + } + }); + } + + public static void executePostJson(final String url,Map header,final String json, final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler8","url:"+url); + RequestBody body = RequestBody.create(JSON, json); + if(header != null && header.containsKey(COOKIE)){ + String cookie = header.get(COOKIE); + if(TextUtils.isEmpty(cookie)){ + header.put(COOKIE,Q_CKEY + get_qckey()); + }else { + if(!cookie.contains(Q_CKEY)){//有Cookie 没有q_ckey + header.put(COOKIE,cookie + ";" + Q_CKEY + get_qckey()); + } + } + }else if(header == null){ + header = new HashMap<>(); + header.put(COOKIE,Q_CKEY + get_qckey()); + }else if(!header.containsKey(COOKIE)){ + header.put(COOKIE,Q_CKEY + get_qckey()); + } + Headers headers = Headers.of(header); + Request request = new Request.Builder().url(url) + .post(body) + .headers(headers) + .build(); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + callback.onFailure(e); + } + + @Override + public void onResponse(Call request,Response response) throws IOException { + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream()); + response.body().close(); + } + }); + } + + public static void executePostJson(String url, String json, HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler9","url:"+url); + executePostJson(url,null,json,callback); + } + + public static void executePostString(final String url,final String raw,final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler10","url:"+url); + RequestBody body = RequestBody.create(MEDIA_TYPE_MARKDOWN, raw); + Map header = new HashMap<>(); + Headers headers = Headers.of(header); + header.put(COOKIE, Q_CKEY + get_qckey()); + Request request = new Request.Builder().url(url).post(body).headers(headers).build(); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + callback.onFailure(e); + } + + @Override + public void onResponse(Call request,Response response) throws IOException { + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream()); + response.body().close(); + } + }); + } + + public static void executeUpload(final String url,final File file,final String key, + final String fileName,ProgressRequestListener listener,Map params + ,final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler11","url:"+url); + if(url == null) callback.onFailure(new NullPointerException()); + LogUtil.d("HttpUrlConnectionHandler12","url:"+url); + MultipartBody.Builder builder = new MultipartBody.Builder(); + builder.setType(MultipartBody.FORM); + builder.addFormDataPart(key, fileName, RequestBody.create(MULTIPART_DATA, file)); + + if(params!=null&¶ms.size()>0) + { + for(String pKey:params.keySet()) + { + builder.addFormDataPart(pKey,params.get(pKey)); + } + } + RequestBody body = builder.build(); + if(listener!=null) + { + body = new ProgressRequestBody(body,listener); + } + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call request, IOException e) { + callback.onFailure(e); + } + + @Override + public void onResponse(Call request,Response response) throws IOException { + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream()); + response.body().close(); + } + }); + } + + public static void executePostJsonSync(final String url, final String json,final HttpRequestCallback callback) { + LogUtil.d("HttpUrlConnectionHandler13","url:"+url); + RequestBody body = RequestBody.create(JSON, json); + Map header = new HashMap<>(); + Headers headers = Headers.of(header); + header.put(COOKIE, Q_CKEY + get_qckey()); + Request request = new Request.Builder().url(url) + .post(body) + .headers(headers) + .build(); + try{ + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) { + callback.onFailure(new Exception("faild, code is :" + response.code())); + return; + } + callback.onComplete(response.body().byteStream()); + response.body().close(); + }catch (IOException e){ + callback.onFailure(e); + } + } + + private static String get_qckey(){ + try { + Class clazz = Class.forName("com.qunar.im.base.protocol.Protocol"); + Method method = clazz.getMethod("getCKEY"); + Object result = method.invoke(clazz.newInstance()); + if(result != null){ + return result.toString(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/MessageAPI.java b/lib_common/src/main/java/com/qunar/im/base/protocol/MessageAPI.java index bd69d1c..ca4b353 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/MessageAPI.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/MessageAPI.java @@ -9,7 +9,7 @@ import com.qunar.im.base.util.LogUtil; import com.qunar.im.common.CommonConfig; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.QtalkStringUtils; import java.io.InputStream; diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/NativeApi.java b/lib_common/src/main/java/com/qunar/im/base/protocol/NativeApi.java index 59add0f..89576fb 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/NativeApi.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/NativeApi.java @@ -35,10 +35,9 @@ public class NativeApi { public static final String OUT_GROUP_LABEL = "外域群组"; public static final String LOCAL_USER_LABEL = "本地用户"; public static final String LOCAL_GROUP_LABEL = "本地群组"; - public static final String ROBOT_DEFAULT_PORTRAIT = "https://qim.qunar.com/file/v2/download/perm/612752b6f60c3379077f71493d4e02ae.png"; - public static final String OUT_GROUP_DEFAULT_PORTRAIT = "https://qim.qunar.com/file/v2/download/perm/2227ff2e304cb44a1980e9c1a3d78164.png"; - public static final String LOCAL_USER_DEFAULT_PORTRAIT = "https://qim.qunar.com/file/v2/download/perm/3ca05f2d92f6c0034ac9aee14d341fc7.png"; - public static final String LOCAL_GROUP_DEFAULT_PORTRAIT = "https://qim.qunar.com/file/v2/download/perm/2227ff2e304cb44a1980e9c1a3d78164.png"; + public static final String OUT_GROUP_DEFAULT_PORTRAIT = ""; + public static final String LOCAL_USER_DEFAULT_PORTRAIT = ""; + public static final String LOCAL_GROUP_DEFAULT_PORTRAIT = ""; public static final int ROBOT_SINGLE_CHAT_EVENT = 8; public static final int OUT_GROUP_CHAT_EVENT = 1; public static final int LOCAL_GROUP_EVENT = 1; diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/PayApi.java b/lib_common/src/main/java/com/qunar/im/base/protocol/PayApi.java index 8f40b3c..55b1399 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/PayApi.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/PayApi.java @@ -2,7 +2,7 @@ import com.qunar.im.base.util.JsonUtils; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.util.HashMap; import java.util.Map; diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressRequestBody.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressRequestBody.java new file mode 100644 index 0000000..3723810 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressRequestBody.java @@ -0,0 +1,104 @@ +package com.qunar.im.base.protocol; + +/** + * Created by saber on 15-12-24. + */ + + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +/** + * 包装的请求体,处理进度 + */ +public class ProgressRequestBody extends RequestBody { + //实际的待包装请求体 + private final RequestBody requestBody; + //进度回调接口 + private final ProgressRequestListener progressListener; + //包装完成的BufferedSink + private BufferedSink bufferedSink; + + /** + * 构造函数,赋值 + * @param requestBody 待包装的请求体 + * @param progressListener 回调接口 + */ + public ProgressRequestBody(RequestBody requestBody, ProgressRequestListener progressListener) { + this.requestBody = requestBody; + this.progressListener = progressListener; + } + + /** + * 重写调用实际的响应体的contentType + * @return MediaType + */ + @Override + public MediaType contentType() { + return requestBody.contentType(); + } + + /** + * 重写调用实际的响应体的contentLength + * @return contentLength + * @throws IOException 异常 + */ + @Override + public long contentLength() throws IOException { + return requestBody.contentLength(); + } + + /** + * 重写进行写入 + * @param sink BufferedSink + * @throws IOException 异常 + */ + @Override + public void writeTo(BufferedSink sink) throws IOException { + if (bufferedSink == null) { + //包装 + bufferedSink = Okio.buffer(sink(sink)); + } + //写入 + requestBody.writeTo(bufferedSink); + //必须调用flush,否则最后一部分数据可能不会被写入 + bufferedSink.flush(); + + } + + /** + * 写入,回调进度接口 + * @param sink Sink + * @return Sink + */ + private Sink sink(Sink sink) { + return new ForwardingSink(sink) { + //当前写入字节数 + long bytesWritten = 0L; + //总字节长度,避免多次调用contentLength()方法 + long contentLength = 0L; + + @Override + public void write(Buffer source, long byteCount) throws IOException { + super.write(source, byteCount); + if (contentLength == 0) { + //获得contentLength的值,后续不再调用 + contentLength = contentLength(); + } + //增加当前写入的字节数 + bytesWritten += byteCount; + //回调 + if(contentLength > 0 && contentLength >= bytesWritten){ + progressListener.onRequestProgress(bytesWritten, contentLength, bytesWritten == contentLength); + } + } + }; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressRequestListener.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressRequestListener.java new file mode 100644 index 0000000..7bfa106 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressRequestListener.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.protocol; + +/** + * Created by saber on 15-12-24. + */ +public interface ProgressRequestListener { + void onRequestProgress(long bytesWritten, long contentLength, boolean done); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressResponseBody.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressResponseBody.java new file mode 100644 index 0000000..296a5c6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressResponseBody.java @@ -0,0 +1,85 @@ +package com.qunar.im.base.protocol; + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; +import okio.ForwardingSource; +import okio.Okio; +import okio.Source; + +/** + * Created by saber on 15-12-24. + */ +public class ProgressResponseBody extends ResponseBody { + //实际的待包装响应体 + private final ResponseBody responseBody; + //进度回调接口 + private final ProgressResponseListener progressListener; + //包装完成的BufferedSource + private BufferedSource bufferedSource; + + /** + * 构造函数,赋值 + * @param responseBody 待包装的响应体 + * @param progressListener 回调接口 + */ + public ProgressResponseBody(ResponseBody responseBody, ProgressResponseListener progressListener) { + this.responseBody = responseBody; + this.progressListener = progressListener; + } + + + /** + * 重写调用实际的响应体的contentType + * @return MediaType + */ + @Override public MediaType contentType() { + return responseBody.contentType(); + } + + /** + * 重写调用实际的响应体的contentLength + * @return contentLength + * @throws IOException 异常 + */ + @Override public long contentLength() { + return responseBody.contentLength(); + } + + /** + * 重写进行包装source + * @return BufferedSource + * @throws IOException 异常 + */ + @Override public BufferedSource source() { + if (bufferedSource == null) { + //包装 + bufferedSource = Okio.buffer(source(responseBody.source())); + } + return bufferedSource; + } + + /** + * 读取,回调进度接口 + * @param source Source + * @return Source + */ + private Source source(Source source) { + + return new ForwardingSource(source) { + //当前读取字节数 + long totalBytesRead = 0L; + @Override public long read(Buffer sink, long byteCount) throws IOException { + long bytesRead = super.read(sink, byteCount); + //增加当前读取的字节数,如果读取完成了bytesRead会返回-1 + totalBytesRead += bytesRead != -1 ? bytesRead : 0; + //回调,如果contentLength()不知道长度,会返回-1 + progressListener.onResponseProgress(totalBytesRead, responseBody.contentLength(), bytesRead == -1); + return bytesRead; + } + }; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressResponseListener.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressResponseListener.java new file mode 100644 index 0000000..55696c2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ProgressResponseListener.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.protocol; + +/** + * Created by saber on 15-12-24. + */ +public interface ProgressResponseListener { + void onResponseProgress(long bytesRead, long contentLength, boolean done); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/Protocol.java b/lib_common/src/main/java/com/qunar/im/base/protocol/Protocol.java new file mode 100644 index 0000000..fc71ca6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/Protocol.java @@ -0,0 +1,719 @@ +package com.qunar.im.base.protocol; + +import android.net.Uri; +import android.text.TextUtils; +import android.util.Base64; + +import com.google.gson.reflect.TypeToken; +import com.orhanobut.logger.Logger; +import com.qunar.im.base.common.QunarIMApp; +import com.qunar.im.base.jsonbean.DepartmentResult; +import com.qunar.im.base.jsonbean.GetDepInfo; +import com.qunar.im.base.jsonbean.GetUserAbridgeResult; +import com.qunar.im.base.jsonbean.GetUserStatus; +import com.qunar.im.base.jsonbean.IPAddressResult; +import com.qunar.im.base.jsonbean.InviteInfo; +import com.qunar.im.base.jsonbean.Profile4mUCenter; +import com.qunar.im.base.jsonbean.QVTResponseResult; +import com.qunar.im.base.jsonbean.SearchUserResult; +import com.qunar.im.base.jsonbean.UserStatusResult; +import com.qunar.im.base.jsonbean.VCardResult; +import com.qunar.im.base.util.BinaryUtil; +import com.qunar.im.base.util.ListUtil; +import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CurrentPreference; +import com.qunar.im.core.services.QtalkNavicationService; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.qunar.im.base.util.JsonUtils.getGson; + + +/** + * Created by wujunwen on 14-5-9. + * modify: 有其它module反射调用getCKEY方法 keep class + */ +public class Protocol { + private static final String TAG = "Protocol"; + + private static String user_key = "u"; + private static String verify_key = "k"; + private static String domain_key = "d"; + private static final String PLATFORMKEY = "p"; + private static final String PLATFORMVALUE = "qtadr"; + private static final String VERSIONKEY = "v"; + + public static String getCKEY() { + long t = System.currentTimeMillis() / 1000; + String sk = getRemoteLoginKey(); + String seed = sk + t; + String key = BinaryUtil.MD5(seed); + if (!TextUtils.isEmpty(key)) key = key.toUpperCase(); + String queryStr = "t=" + t + "&u=" + CurrentPreference.getInstance().getUserid() + + "&k=" + key + "&d=" + QtalkNavicationService.getInstance().getXmppdomain() + +"&sk="+sk; + Logger.i("李海彬专用加密前:"+queryStr); + String ckey = Base64.encodeToString(queryStr.getBytes(), Base64.NO_WRAP); + + return ckey; + } + + public static String getRemoteLoginKey(){ + try { + Class class1 = Class.forName("com.qunar.im.core.manager.IMLogicManager"); + Method method = class1.getMethod("getInstance"); + + Object instance = method.invoke(new Object()); + Method method1 = class1.getMethod("getRemoteLoginKey"); + Object result = method1.invoke(instance); + if(result != null){ + return result.toString(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + public static String makeQVTHeader(){ + String qvtStr = CurrentPreference.getInstance().getQvt(); + if (TextUtils.isEmpty(qvtStr)) { + return null; + } + QVTResponseResult qvtResponseResult = getGson().fromJson(qvtStr, QVTResponseResult.class); + if (qvtResponseResult == null || qvtResponseResult.data == null) { + return null; + } + String tCookie = qvtResponseResult.data.tcookie;//"24180933"; + String qCookie = qvtResponseResult.data.qcookie;//"U.xinwemk3120"; + String vCookie = qvtResponseResult.data.vcookie; + String nameAndValues = "_q=" + qCookie + ";_v=" + vCookie + + ";_t=" + tCookie; + + String ckey = Protocol.getCKEY(); + if (!TextUtils.isEmpty(ckey)){ + nameAndValues += ";q_ckey=" + ckey; + } + return nameAndValues; + } + + public static String getUrl(String host, String params) { + return String.format("%s/%s", host, params); + } + + public static String makeGetUri(String host, int port, String params, boolean isHttps) { + if (host.startsWith("https://") || host.startsWith("http://")) { + return String.format("%s/%s", host, params); + } + + String method = isHttps ? "https" : "http"; + return String.format("%s://%s:%s/%s", method, host, port, params); + } + + public static String parseStream(InputStream stream) throws IOException { + try { + BufferedReader br = new BufferedReader(new InputStreamReader(stream, "utf-8")); + StringBuilder sb = new StringBuilder(); + String line = null; + while ((line = br.readLine()) != null) { + sb.append(line); + } + + br.close(); + return sb.toString(); + } catch (IOException e) { + LogUtil.e(TAG, "error", e); + } finally { + if (stream != null) { + stream.close(); + } + } + + return ""; + } + + + public static void crossDomainSearchUser(String keyworkd, final ProtocolCallback.UnitCallback callback) { + try { + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + return; + } + StringBuilder params = new StringBuilder("domain/search_person?"); + addBasicParamsOnHead(params); + String postJson = "{\"keyword\":\"" + keyworkd + "\"}"; + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + HttpUrlConnectionHandler.executePostJson(url, postJson, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + SearchUserResult result = null; + try { + String resultString = parseStream(response); + result = getGson().fromJson(resultString, SearchUserResult.class); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + public static void getUserStatus(String jid, final ProtocolCallback.UnitCallback callback) { + try { + StringBuilder queryString = new StringBuilder("domain/get_user_status.qunar?"); + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + Protocol.addBasicParamsOnHead(queryString); + GetUserStatus status = new GetUserStatus(); + status.users = new ArrayList<>(); + status.users.add(jid); + String jsonParams = getGson().toJson(status); + String url = Protocol.makeGetUri(QtalkNavicationService.getInstance().getHttpUrl(), QtalkNavicationService.getInstance().getHttpPort(), queryString.toString(), true); + HttpUrlConnectionHandler.executePostJson(url, jsonParams, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + UserStatusResult result = null; + try { + + String resultString = Protocol.parseStream(response); + result = getGson().fromJson(resultString, UserStatusResult.class); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + public static void addBasicParamsOnHead(StringBuilder url) { + addBasicParamsOnHead(url,null); + + } + + public static void addBasicParamsOnHead(StringBuilder url,String domain) { + if (url.indexOf("?") == -1) { + url.append("?"); + } + char last = url.charAt(url.length() - 1); + if (last != '&' && last != '?') { + url.append('&'); + } + if (url.indexOf("u=") == -1) { + url.append(user_key); + url.append("="); + url.append(CurrentPreference.getInstance().getUserid()); + url.append("&"); + } + if (url.indexOf("k=") == -1) { + url.append(verify_key); + url.append("="); + url.append(CurrentPreference.getInstance().getVerifyKey()); + url.append("&"); + } + if (url.indexOf("d=") == -1) { + url.append(domain_key); + url.append("="); + if(TextUtils.isEmpty(domain)){ + url.append(QtalkNavicationService.getInstance().getXmppdomain()); + }else { + url.append(domain); + } + url.append("&"); + } + if (url.indexOf("p=") == -1) { + url.append(PLATFORMKEY); + url.append("="); + url.append(PLATFORMVALUE); + url.append("&"); + } + if (url.indexOf("v=") == -1) { + url.append(VERSIONKEY); + url.append("="); + url.append(QunarIMApp.getQunarIMApp().getVersion()); + } + char last1 = url.charAt(url.length() - 1); + if (last1 == '&') { + url.deleteCharAt(url.length() - 1); + } + + } + + public static void addParams2Url(StringBuilder url, JSONObject params) { + if (!TextUtils.isEmpty(url) && params != null) { + Map urlMap = splitParams(Uri.parse(url.toString())); + Map paramsMap = new HashMap<>(); + JSONArray paramsArray = params.optJSONArray("param"); + if (paramsArray != null && paramsArray.length() > 0) { + for (int i = 0; i < paramsArray.length(); i++) { + JSONObject jsonObject = paramsArray.optJSONObject(i); + Map m = getGson().fromJson(jsonObject.toString(), Map.class); + for (Map.Entry entry : m.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue().toString(); + paramsMap.put(key, value); + } + } + } + if (paramsMap != null && paramsMap.size() > 0 && urlMap != null && urlMap.size() > 0) {//如果url中已包含需要放的参数则覆盖掉 + for (Map.Entry entry : paramsMap.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue().toString(); + urlMap.put(key, value); + } + url = url.delete(url.indexOf("?"), url.length()); + spiltJointUrl(url, urlMap); + } else { + spiltJointUrl(url, paramsMap); + } + } + } + + public static void spiltJointUrl(StringBuilder url, Map params) { + if (params == null || params.size() == 0) return; + if (url.indexOf("?") == -1) { + url.append("?"); + } + char last = url.charAt(url.length() - 1); + if (last != '&' && last != '?') { + url.append('&'); + } + for (Map.Entry entry : params.entrySet()) { + url.append(entry.getKey()); + url.append("="); + url.append(entry.getValue()); + url.append("&"); + } + char lastChar = url.charAt(url.length() - 1); + if (lastChar == '&') {//删除最后一个& + url.deleteCharAt(url.length() - 1); + } + } + + public static HashMap splitParams(Uri uri) { + if (uri == null) { + return new HashMap(); + } + Set keys = getQueryParameterNames(uri); + HashMap map = new HashMap(keys.size()); + for (String key : keys) { + map.put(key, uri.getQueryParameter(key)); + } + return map; + } + + public static Map splitParams(String params){ + if (TextUtils.isEmpty(params)) { + return new HashMap(); + } + Map keyValues = new HashMap<>(); + String[] s = params.split("&"); + int length = (s == null ? 0 : s.length); + for(int i = 0;i getQueryParameterNames(Uri uri) { + if (uri.isOpaque()) { + throw new UnsupportedOperationException("This isn't a hierarchical URI."); + } + + String query = uri.getEncodedQuery(); + if (query == null) { + return Collections.emptySet(); + } + + Set names = new LinkedHashSet(); + int start = 0; + do { + int next = query.indexOf('&', start); + int end = next == -1 ? query.length() : next; + + int separator = query.indexOf('=', start); + if (separator > end || separator == -1) { + separator = end; + } + + String name = query.substring(start, separator); + names.add(Uri.decode(name)); + + // Move start to end of name. + start = end + 1; + } while (start < query.length()); + + return Collections.unmodifiableSet(names); + } + + + /** + * 获取qchat组织架构 + * + * @param callback + */ + public static void getQchatDeptInfo(final ProtocolCallback.UnitCallback callback) { + try { + StringBuilder params = new StringBuilder("get_dep_info?"); + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + addBasicParamsOnHead(params); + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + Map postParams = new HashMap(); + postParams.put("strid", CurrentPreference.getInstance().getUserid()); + Logger.i("qchat组织架构地址:" + url + ",请求参数:" + postParams); + + HttpUrlConnectionHandler.executePostForm(url, postParams, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + DepartmentResult result = null; + try { + String resultString = parseStream(response); + if (TextUtils.isEmpty(resultString)) { + callback.onFailure(""); + return; + } + result = getGson().fromJson(resultString, DepartmentResult.class); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + result = null; + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + /**集成push后新版注册push接口 start*/ + /**集成push后新版注册push接口 end*/ + public static void getAbility(String clientName, String userid, int checkVersion, + final ProtocolCallback.UnitCallback callback) { + HttpUrlConnectionHandler.executeGet(QtalkNavicationService.getInstance().getCheckconfig() + + "?v=" + clientName + "&ver=" + QunarIMApp.getQunarIMApp().getVersion() + "&p=" + + "android&u=" + userid + "&cv=" + checkVersion, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + String resultString = null; + try { + resultString = parseStream(response); + } catch (IOException e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(resultString); + } + + @Override + public void onFailure(Exception e) { + callback.onFailure(""); + } + }); + } + + public static void getInviteInfo(String userId, long time, final ProtocolCallback.UnitCallback callback) { + try { + StringBuilder params = new StringBuilder("base/get_invite_info.qunar?"); + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + addBasicParamsOnHead(params); + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + + String postBody = "{\"user\":\"" + userId + "\",\"" + "d" + "\":\"" + QtalkNavicationService.getInstance().getXmppdomain() + "\",\"time\":" + time + "}"; + HttpUrlConnectionHandler.executePostJson(url, postBody, new HttpRequestCallback() { + InviteInfo result = null; + + @Override + public void onComplete(InputStream response) { + LogUtil.d("debug", "complete"); + try { + String resultString = parseStream(response); + if (!TextUtils.isEmpty(resultString)) { + result = getGson().fromJson(resultString, InviteInfo.class); + } + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + public static void getOwnIpAddress(final ProtocolCallback.UnitCallback callback) { + StringBuilder params = new StringBuilder("/php/ucproxy/index.php/rest/tellmeip"); + try { + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + HttpUrlConnectionHandler.executeGet(url, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + IPAddressResult result = null; + try { + String resultString = parseStream(response); + result = getGson().fromJson(resultString, IPAddressResult.class); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + @Deprecated + public static void getDepartmentInfo(final ProtocolCallback.UnitCallback> callback) { + StringBuilder params = new StringBuilder("getusers?"); + + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + addBasicParamsOnHead(params); + try { + + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + LogUtil.d("debug", "getDeptInfo"); + HttpUrlConnectionHandler.executeGet(url, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + List result = null; + try { + String resultString = parseStream(response); + result = getGson().fromJson(resultString, new TypeToken>() { + }.getType()); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + @Deprecated + public static void getAbridgeName(final ProtocolCallback.UnitCallback> callback) { + StringBuilder params = new StringBuilder("getusersuoxie?"); + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + addBasicParamsOnHead(params); + + try { + + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + HttpUrlConnectionHandler.executeGet(url, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + List result = null; + try { + String resultString = parseStream(response); + result = getGson().fromJson(resultString, new TypeToken>() { + }.getType()); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + @Deprecated + public static void getVCard(String users, final ProtocolCallback.UnitCallback callback) { + try { + StringBuilder queryString = new StringBuilder("getvcardversion?"); + queryString.append("&users="); + queryString.append(users); + queryString.append("&"); + + + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + + addBasicParamsOnHead(queryString); + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), queryString.toString(), true); + HttpUrlConnectionHandler.executeGet(url, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + VCardResult result = null; + try { + + String resultString = parseStream(response); + result = getGson().fromJson(resultString, VCardResult.class); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(result); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + + public static void getDepartment(final ProtocolCallback.UnitCallback callback) { + try { + StringBuilder params = new StringBuilder("getdeps?"); + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + addBasicParamsOnHead(params); + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + final long getTime = System.currentTimeMillis(); + HttpUrlConnectionHandler.executeGet(url, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + + String resultString = null; + LogUtil.d("debug", "complete"); + try { + resultString = parseStream(response); + Logger.i("获取组织架构结果:"+resultString); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + callback.onCompleted(resultString); + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } + + /** + * 获取用户中心个人信息(缓存数据1小时) + * + * @param uid + * @param callback + */ + @Deprecated + public static void getProfileFromUCenter(final String uid, final ProtocolCallback.UnitCallback callback) { + try { + StringBuilder params = new StringBuilder("get_user_vcard_info?"); + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { + callback.doFailure(); + return; + } + addBasicParamsOnHead(params); + String url = makeGetUri(QtalkNavicationService.getInstance().getHttpHost(), QtalkNavicationService.getInstance().getHttpPort(), params.toString(), true); + Map postParams = new HashMap(); + postParams.put(user_key, CurrentPreference.getInstance().getUserid()); + postParams.put(verify_key, CurrentPreference.getInstance().getVerifyKey()); + postParams.put("strid", uid); + HttpUrlConnectionHandler.executePostForm(url, postParams, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + Profile4mUCenter result = null; + LogUtil.d("debug", "complete"); + try { + String resultString = parseStream(response); + result = getGson().fromJson(resultString, Profile4mUCenter.class); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + if (result != null && !ListUtil.isEmpty(result.data)) { + callback.onCompleted(result); + } else { + callback.doFailure(); + } + + } + + @Override + public void onFailure(Exception e) { + callback.doFailure(); + } + }); + } catch (Exception e) { + LogUtil.e(TAG, "error", e); + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ProtocolCallback.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ProtocolCallback.java new file mode 100644 index 0000000..7580903 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ProtocolCallback.java @@ -0,0 +1,26 @@ +package com.qunar.im.base.protocol; + +public class ProtocolCallback { + public static abstract class IProtocolCallback { + volatile boolean isCancel = false; + + public void doFailure() { + onFailure(""); + } + + + public void cancel() { + isCancel = true; + } + + public abstract void onFailure(String errMsg); + } + + + + + public static abstract class UnitCallback extends IProtocolCallback { + public UnitCallback(){super();} + public abstract void onCompleted(final T t); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/RobotAPI.java b/lib_common/src/main/java/com/qunar/im/base/protocol/RobotAPI.java index 6f68ba5..91808dd 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/RobotAPI.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/RobotAPI.java @@ -11,7 +11,7 @@ import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import org.json.JSONObject; diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/ThirdProviderAPI.java b/lib_common/src/main/java/com/qunar/im/base/protocol/ThirdProviderAPI.java index b60718f..5189c66 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/ThirdProviderAPI.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/ThirdProviderAPI.java @@ -4,11 +4,11 @@ import com.orhanobut.logger.Logger; import com.qunar.im.base.jsonbean.BaseJsonResult; -import com.qunar.im.base.jsonbean.GeneralJson; import com.qunar.im.base.jsonbean.QVTResponseResult; import com.qunar.im.base.jsonbean.SeatStatusResult; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.services.QtalkNavicationService; import java.io.IOException; @@ -24,7 +24,7 @@ public class ThirdProviderAPI { private static final String TAG = ThirdProviderAPI.class.getSimpleName(); public static void setServiceStatus(String userId,String statusCode,String sid,final ProtocolCallback.UnitCallback callback) { - String qvtStr = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt(); + String qvtStr = CurrentPreference.getInstance().getQvt(); if (!TextUtils.isEmpty(qvtStr)) { QVTResponseResult qvtResponseResult = JsonUtils.getGson().fromJson(qvtStr, QVTResponseResult.class); Map cookie = new HashMap<>(); @@ -44,7 +44,7 @@ public void onComplete(InputStream response) { result = JsonUtils.getGson().fromJson(resultString , BaseJsonResult.class); r = result != null && result.ret; - } catch (Exception e) { + } catch (IOException e) { Logger.i("setServiceStatus->>",e.getLocalizedMessage()); } @@ -65,7 +65,7 @@ public void onFailure(Exception e) { } public static void getServiceStatus(String userId,final ProtocolCallback.UnitCallback> callback) { - String qvtStr = com.qunar.im.protobuf.common.CurrentPreference.getInstance().getQvt(); + String qvtStr = CurrentPreference.getInstance().getQvt(); if (!TextUtils.isEmpty(qvtStr)) { QVTResponseResult qvtResponseResult = JsonUtils.getGson().fromJson(qvtStr, QVTResponseResult.class); Map cookie = new HashMap<>(); @@ -81,7 +81,7 @@ public void onComplete(InputStream response) { Logger.i("getServiceStatus" + resultString); SeatStatusResult statusResult = JsonUtils.getGson().fromJson(resultString,SeatStatusResult.class); seatStatuses = statusResult.data; - } catch (Exception e) { + } catch (IOException e) { LogUtil.e(TAG,"error",e); } callback.onCompleted(seatStatuses); diff --git a/lib_common/src/main/java/com/qunar/im/base/protocol/VCardAPI.java b/lib_common/src/main/java/com/qunar/im/base/protocol/VCardAPI.java index f08993b..5ec7e49 100644 --- a/lib_common/src/main/java/com/qunar/im/base/protocol/VCardAPI.java +++ b/lib_common/src/main/java/com/qunar/im/base/protocol/VCardAPI.java @@ -17,7 +17,7 @@ import com.qunar.im.base.util.ListUtil; import com.qunar.im.base.util.LogUtil; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.io.InputStream; import java.util.ArrayList; diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/Badger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/Badger.java new file mode 100644 index 0000000..1d76741 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/Badger.java @@ -0,0 +1,25 @@ +package com.qunar.im.base.shortutbadger; + +import android.content.ComponentName; +import android.content.Context; + +import java.util.List; + +public interface Badger { + + /** + * Called when user attempts to update notification count + * @param context Caller context + * @param componentName Component containing package and class name of calling application's + * launcher activity + * @param badgeCount Desired notification count + * @throws ShortcutBadgeException + */ + void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException; + + /** + * Called to let {@link ShortcutBadger} knows which launchers are supported by this badger. It should return a + * @return List containing supported launchers package names + */ + List getSupportLaunchers(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/ShortcutBadgeException.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/ShortcutBadgeException.java new file mode 100644 index 0000000..fc1a796 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/ShortcutBadgeException.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.shortutbadger; + +public class ShortcutBadgeException extends Exception { + public ShortcutBadgeException(String message) { + super(message); + } + + public ShortcutBadgeException(String message, Exception e) { + super(message, e); + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/ShortcutBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/ShortcutBadger.java new file mode 100644 index 0000000..df3b8c1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/ShortcutBadger.java @@ -0,0 +1,241 @@ +package com.qunar.im.base.shortutbadger; + +import android.app.Notification; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Build; +import android.util.Log; + +import com.qunar.im.base.shortutbadger.impl.AdwHomeBadger; +import com.qunar.im.base.shortutbadger.impl.ApexHomeBadger; +import com.qunar.im.base.shortutbadger.impl.AsusHomeBadger; +import com.qunar.im.base.shortutbadger.impl.DefaultBadger; +import com.qunar.im.base.shortutbadger.impl.EverythingMeHomeBadger; +import com.qunar.im.base.shortutbadger.impl.HuaweiHomeBadger; +import com.qunar.im.base.shortutbadger.impl.NewHtcHomeBadger; +import com.qunar.im.base.shortutbadger.impl.NovaHomeBadger; +import com.qunar.im.base.shortutbadger.impl.OPPOHomeBader; +import com.qunar.im.base.shortutbadger.impl.SamsungHomeBadger; +import com.qunar.im.base.shortutbadger.impl.SonyHomeBadger; +import com.qunar.im.base.shortutbadger.impl.VivoHomeBadger; +import com.qunar.im.base.shortutbadger.impl.ZTEHomeBadger; +import com.qunar.im.base.shortutbadger.impl.ZukHomeBadger; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.LinkedList; +import java.util.List; + + +/** + * @author Leo Lin + */ +public final class ShortcutBadger { + + private static final String LOG_TAG = "ShortcutBadger"; + private static final int SUPPORTED_CHECK_ATTEMPTS = 3; + + private static final List> BADGERS = new LinkedList>(); + + private volatile static Boolean sIsBadgeCounterSupported; + private final static Object sCounterSupportedLock = new Object(); + + static { + BADGERS.add(AdwHomeBadger.class); + BADGERS.add(ApexHomeBadger.class); + BADGERS.add(DefaultBadger.class); + BADGERS.add(NewHtcHomeBadger.class); + BADGERS.add(NovaHomeBadger.class); + BADGERS.add(SonyHomeBadger.class); + BADGERS.add(AsusHomeBadger.class); + BADGERS.add(HuaweiHomeBadger.class); + BADGERS.add(OPPOHomeBader.class); + BADGERS.add(SamsungHomeBadger.class); + BADGERS.add(ZukHomeBadger.class); + BADGERS.add(VivoHomeBadger.class); + BADGERS.add(ZTEHomeBadger.class); + BADGERS.add(EverythingMeHomeBadger.class); + } + + private static Badger sShortcutBadger; + private static ComponentName sComponentName; + + /** + * Tries to update the notification count + * + * @param context Caller context + * @param badgeCount Desired badge count + * @return true in case of success, false otherwise + */ + public static boolean applyCount(Context context, int badgeCount) { + try { + applyCountOrThrow(context, badgeCount); + return true; + } catch (ShortcutBadgeException e) { + if (Log.isLoggable(LOG_TAG, Log.DEBUG)) { + Log.d(LOG_TAG, "Unable to execute badge", e); + } + return false; + } + } + + /** + * Tries to update the notification count, throw a {@link ShortcutBadgeException} if it fails + * + * @param context Caller context + * @param badgeCount Desired badge count + */ + public static void applyCountOrThrow(Context context, int badgeCount) throws ShortcutBadgeException { + if (sShortcutBadger == null) { + boolean launcherReady = initBadger(context); + + if (!launcherReady) + throw new ShortcutBadgeException("No default launcher available"); + } + + try { + sShortcutBadger.executeBadge(context, sComponentName, badgeCount); + } catch (Exception e) { + throw new ShortcutBadgeException("Unable to execute badge", e); + } + } + + /** + * Tries to remove the notification count + * + * @param context Caller context + * @return true in case of success, false otherwise + */ + public static boolean removeCount(Context context) { + return applyCount(context, 0); + } + + /** + * Tries to remove the notification count, throw a {@link ShortcutBadgeException} if it fails + * + * @param context Caller context + */ + public static void removeCountOrThrow(Context context) throws ShortcutBadgeException { + applyCountOrThrow(context, 0); + } + + /** + * Whether this platform launcher supports shortcut badges. Doing this check causes the side + * effect of resetting the counter if it's supported, so this method should be followed by + * a call that actually sets the counter to the desired value, if the counter is supported. + */ + public static boolean isBadgeCounterSupported(Context context) { + // Checking outside synchronized block to avoid synchronization in the common case (flag + // already set), and improve perf. + if (sIsBadgeCounterSupported == null) { + synchronized (sCounterSupportedLock) { + // Checking again inside synch block to avoid setting the flag twice. + if (sIsBadgeCounterSupported == null) { + String lastErrorMessage = null; + for (int i = 0; i < SUPPORTED_CHECK_ATTEMPTS; i++) { + try { + Log.i(LOG_TAG, "Checking if platform supports badge counters, attempt " + + String.format("%d/%d.", i + 1, SUPPORTED_CHECK_ATTEMPTS)); + if (initBadger(context)) { + sShortcutBadger.executeBadge(context, sComponentName, 0); + sIsBadgeCounterSupported = true; + Log.i(LOG_TAG, "Badge counter is supported in this platform."); + break; + } else { + lastErrorMessage = "Failed to initialize the badge counter."; + } + } catch (Exception e) { + // Keep retrying as long as we can. No need to dump the stack trace here + // because this error will be the norm, not exception, for unsupported + // platforms. So we just save the last error message to display later. + lastErrorMessage = e.getMessage(); + } + } + + if (sIsBadgeCounterSupported == null) { + Log.w(LOG_TAG, "Badge counter seems not supported for this platform: " + + lastErrorMessage); + sIsBadgeCounterSupported = false; + } + } + } + } + return sIsBadgeCounterSupported; + } + + /** + * @param context Caller context + * @param notification + * @param badgeCount + */ + public static void applyNotification(Context context, Notification notification, int badgeCount) { + if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) { + try { + Field field = notification.getClass().getDeclaredField("extraNotification"); + Object extraNotification = field.get(notification); + Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); + method.invoke(extraNotification, badgeCount); + } catch (Exception e) { + if (Log.isLoggable(LOG_TAG, Log.DEBUG)) { + Log.d(LOG_TAG, "Unable to execute badge", e); + } + } + } + } + + // Initialize Badger if a launcher is availalble (eg. set as default on the device) + // Returns true if a launcher is available, in this case, the Badger will be set and sShortcutBadger will be non null. + private static boolean initBadger(Context context) { + Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); + if (launchIntent == null) { + Log.e(LOG_TAG, "Unable to find launch intent for package " + context.getPackageName()); + return false; + } + + sComponentName = launchIntent.getComponent(); + + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); + + if (resolveInfo == null || resolveInfo.activityInfo.name.toLowerCase().contains("resolver")) + return false; + + String currentHomePackage = resolveInfo.activityInfo.packageName; + + for (Class badger : BADGERS) { + Badger shortcutBadger = null; + try { + shortcutBadger = badger.newInstance(); + } catch (Exception ignored) { + } + if (shortcutBadger != null && shortcutBadger.getSupportLaunchers().contains(currentHomePackage)) { + sShortcutBadger = shortcutBadger; + break; + } + } + + if (sShortcutBadger == null) { + if (Build.MANUFACTURER.equalsIgnoreCase("ZUK")) + sShortcutBadger = new ZukHomeBadger(); + else if (Build.MANUFACTURER.equalsIgnoreCase("OPPO")) + sShortcutBadger = new OPPOHomeBader(); + else if (Build.MANUFACTURER.equalsIgnoreCase("VIVO")) + sShortcutBadger = new VivoHomeBadger(); + else if (Build.MANUFACTURER.equalsIgnoreCase("ZTE")) + sShortcutBadger = new ZTEHomeBadger(); + else + sShortcutBadger = new DefaultBadger(); + } + + return true; + } + + // Avoid anybody to instantiate this class + private ShortcutBadger() { + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/AdwHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/AdwHomeBadger.java new file mode 100644 index 0000000..9a27e5d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/AdwHomeBadger.java @@ -0,0 +1,46 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Gernot Pansy + */ +public class AdwHomeBadger implements Badger { + + public static final String INTENT_UPDATE_COUNTER = "org.adw.launcher.counter.SEND"; + public static final String PACKAGENAME = "PNAME"; + public static final String CLASSNAME = "CNAME"; + public static final String COUNT = "COUNT"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + + Intent intent = new Intent(INTENT_UPDATE_COUNTER); + intent.putExtra(PACKAGENAME, componentName.getPackageName()); + intent.putExtra(CLASSNAME, componentName.getClassName()); + intent.putExtra(COUNT, badgeCount); + if (BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList( + "org.adw.launcher", + "org.adwfreak.launcher" + ); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ApexHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ApexHomeBadger.java new file mode 100644 index 0000000..66589e4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ApexHomeBadger.java @@ -0,0 +1,43 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Gernot Pansy + */ +public class ApexHomeBadger implements Badger { + + private static final String INTENT_UPDATE_COUNTER = "com.anddoes.launcher.COUNTER_CHANGED"; + private static final String PACKAGENAME = "package"; + private static final String COUNT = "count"; + private static final String CLASS = "class"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + + Intent intent = new Intent(INTENT_UPDATE_COUNTER); + intent.putExtra(PACKAGENAME, componentName.getPackageName()); + intent.putExtra(COUNT, badgeCount); + intent.putExtra(CLASS, componentName.getClassName()); + if (BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("com.anddoes.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/AsusHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/AsusHomeBadger.java new file mode 100644 index 0000000..946fc11 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/AsusHomeBadger.java @@ -0,0 +1,43 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author leolin + */ +public class AsusHomeBadger implements Badger { + + private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE"; + private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count"; + private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name"; + private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + Intent intent = new Intent(INTENT_ACTION); + intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); + intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); + intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); + intent.putExtra("badge_vip_count", 0); + if (BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("com.asus.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/DefaultBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/DefaultBadger.java new file mode 100644 index 0000000..c0f9fd5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/DefaultBadger.java @@ -0,0 +1,46 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.util.Collections; +import java.util.List; + + +/** + * @author leolin + */ +public class DefaultBadger implements Badger { + private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE"; + private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count"; + private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name"; + private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + Intent intent = new Intent(INTENT_ACTION); + intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); + intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); + intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); + if (BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + + @Override + public List getSupportLaunchers() { + return Collections.singletonList("fr.neamar.kiss"); + } + + boolean isSupported(Context context) { + Intent intent = new Intent(INTENT_ACTION); + return BroadcastHelper.canResolveBroadcast(context, intent); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/EverythingMeHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/EverythingMeHomeBadger.java new file mode 100644 index 0000000..ef62a0a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/EverythingMeHomeBadger.java @@ -0,0 +1,40 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.ContentValues; +import android.content.Context; +import android.net.Uri; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.Arrays; +import java.util.List; + + + +/** + * @author Radko Roman + * @since 13.04.17. + */ +public class EverythingMeHomeBadger implements Badger { + + private static final String CONTENT_URI = "content://me.everything.badger/apps"; + private static final String COLUMN_PACKAGE_NAME = "package_name"; + private static final String COLUMN_ACTIVITY_NAME = "activity_name"; + private static final String COLUMN_COUNT = "count"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + ContentValues contentValues = new ContentValues(); + contentValues.put(COLUMN_PACKAGE_NAME, componentName.getPackageName()); + contentValues.put(COLUMN_ACTIVITY_NAME, componentName.getClassName()); + contentValues.put(COLUMN_COUNT, badgeCount); + context.getContentResolver().insert(Uri.parse(CONTENT_URI), contentValues); + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("me.everything.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/HuaweiHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/HuaweiHomeBadger.java new file mode 100644 index 0000000..78847ed --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/HuaweiHomeBadger.java @@ -0,0 +1,35 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Jason Ling + */ +public class HuaweiHomeBadger implements Badger { + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + Bundle localBundle = new Bundle(); + localBundle.putString("package", context.getPackageName()); + localBundle.putString("class", componentName.getClassName()); + localBundle.putInt("badgenumber", badgeCount); + context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, localBundle); + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList( + "com.huawei.android.launcher" + ); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/LGHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/LGHomeBadger.java new file mode 100644 index 0000000..5fea261 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/LGHomeBadger.java @@ -0,0 +1,47 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Leo Lin + * Deprecated, LG devices will use DefaultBadger + */ +@Deprecated +public class LGHomeBadger implements Badger { + + private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE"; + private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count"; + private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name"; + private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + Intent intent = new Intent(INTENT_ACTION); + intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); + intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); + intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList( + "com.lge.launcher", + "com.lge.launcher2" + ); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/NewHtcHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/NewHtcHomeBadger.java new file mode 100644 index 0000000..ff84616 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/NewHtcHomeBadger.java @@ -0,0 +1,50 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Leo Lin + */ +public class NewHtcHomeBadger implements Badger { + + public static final String INTENT_UPDATE_SHORTCUT = "com.htc.launcher.action.UPDATE_SHORTCUT"; + public static final String INTENT_SET_NOTIFICATION = "com.htc.launcher.action.SET_NOTIFICATION"; + public static final String PACKAGENAME = "packagename"; + public static final String COUNT = "count"; + public static final String EXTRA_COMPONENT = "com.htc.launcher.extra.COMPONENT"; + public static final String EXTRA_COUNT = "com.htc.launcher.extra.COUNT"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + + Intent intent1 = new Intent(INTENT_SET_NOTIFICATION); + intent1.putExtra(EXTRA_COMPONENT, componentName.flattenToShortString()); + intent1.putExtra(EXTRA_COUNT, badgeCount); + + Intent intent = new Intent(INTENT_UPDATE_SHORTCUT); + intent.putExtra(PACKAGENAME, componentName.getPackageName()); + intent.putExtra(COUNT, badgeCount); + + if(BroadcastHelper.canResolveBroadcast(context, intent1) || BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent1); + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("com.htc.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/NovaHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/NovaHomeBadger.java new file mode 100644 index 0000000..17d7baa --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/NovaHomeBadger.java @@ -0,0 +1,40 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.ContentValues; +import android.content.Context; +import android.net.Uri; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.Arrays; +import java.util.List; + + +/** + * Shortcut Badger support for Nova Launcher. + * TeslaUnread must be installed. + * User: Gernot Pansy + * Date: 2014/11/03 + * Time: 7:15 + */ +public class NovaHomeBadger implements Badger { + + private static final String CONTENT_URI = "content://com.teslacoilsw.notifier/unread_count"; + private static final String COUNT = "count"; + private static final String TAG = "tag"; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + ContentValues contentValues = new ContentValues(); + contentValues.put(TAG, componentName.getPackageName() + "/" + componentName.getClassName()); + contentValues.put(COUNT, badgeCount); + context.getContentResolver().insert(Uri.parse(CONTENT_URI), contentValues); + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("com.teslacoilsw.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/OPPOHomeBader.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/OPPOHomeBader.java new file mode 100644 index 0000000..6615a7c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/OPPOHomeBader.java @@ -0,0 +1,173 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.annotation.TargetApi; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; +import com.qunar.im.base.shortutbadger.util.CloseHelper; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; + + +/** + * Created by NingSo on 2016/10/14.上午10:09 + * + * @author: NingSo + * Email: ningso.ping@gmail.com + *

+ * OPPO R9 not supported + * Version number 6 applies only to chat-type apps + */ + +public class OPPOHomeBader implements Badger { + + private static final String PROVIDER_CONTENT_URI = "content://com.android.badge/badge"; + private static final String INTENT_ACTION = "com.oppo.unsettledevent"; + private static final String INTENT_EXTRA_PACKAGENAME = "pakeageName"; + private static final String INTENT_EXTRA_BADGE_COUNT = "number"; + private static final String INTENT_EXTRA_BADGE_UPGRADENUMBER = "upgradeNumber"; + private static final String INTENT_EXTRA_BADGEUPGRADE_COUNT = "app_badge_count"; + private static int ROMVERSION = -1; + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + if (badgeCount == 0) { + badgeCount = -1; + } + Intent intent = new Intent(INTENT_ACTION); + intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); + intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); + intent.putExtra(INTENT_EXTRA_BADGE_UPGRADENUMBER, badgeCount); + if (BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + int version = getSupportVersion(); + if (version == 6) { + try { + Bundle extras = new Bundle(); + extras.putInt(INTENT_EXTRA_BADGEUPGRADE_COUNT, badgeCount); + context.getContentResolver().call(Uri.parse(PROVIDER_CONTENT_URI), "setAppBadgeCount", null, extras); + } catch (Throwable th) { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } + } + } + } + + @Override + public List getSupportLaunchers() { + return Collections.singletonList("com.oppo.launcher"); + } + + private int getSupportVersion() { + int i = ROMVERSION; + if (i >= 0) { + return ROMVERSION; + } + try { + i = ((Integer) executeClassLoad(getClass("com.color.os.ColorBuild"), "getColorOSVERSION", null, null)).intValue(); + } catch (Exception e) { + i = 0; + } + if (i == 0) { + try { + String str = getSystemProperty("ro.build.version.opporom"); + if (str.startsWith("V1.4")) { + return 3; + } + if (str.startsWith("V2.0")) { + return 4; + } + if (str.startsWith("V2.1")) { + return 5; + } + } catch (Exception ignored) { + + } + } + ROMVERSION = i; + return ROMVERSION; + } + + + private Object executeClassLoad(Class cls, String str, Class[] clsArr, Object[] objArr) { + Object obj = null; + if (!(cls == null || checkObjExists(str))) { + Method method = getMethod(cls, str, clsArr); + if (method != null) { + method.setAccessible(true); + try { + obj = method.invoke(null, objArr); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + } + return obj; + } + + private Method getMethod(Class cls, String str, Class[] clsArr) { + Method method = null; + if (cls == null || checkObjExists(str)) { + return method; + } + try { + cls.getMethods(); + cls.getDeclaredMethods(); + return cls.getDeclaredMethod(str, clsArr); + } catch (Exception e) { + try { + return cls.getMethod(str, clsArr); + } catch (Exception e2) { + return cls.getSuperclass() != null ? getMethod(cls.getSuperclass(), str, clsArr) : method; + } + } + } + + private Class getClass(String str) { + Class cls = null; + try { + cls = Class.forName(str); + } catch (ClassNotFoundException ignored) { + } + return cls; + } + + + private boolean checkObjExists(Object obj) { + return obj == null || obj.toString().equals("") || obj.toString().trim().equals("null"); + } + + + private String getSystemProperty(String propName) { + String line; + BufferedReader input = null; + try { + Process p = Runtime.getRuntime().exec("getprop " + propName); + input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024); + line = input.readLine(); + input.close(); + } catch (IOException ex) { + return null; + } finally { + CloseHelper.closeQuietly(input); + } + return line; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/SamsungHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/SamsungHomeBadger.java new file mode 100644 index 0000000..8856e75 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/SamsungHomeBadger.java @@ -0,0 +1,86 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.CloseHelper; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Leo Lin + */ +public class SamsungHomeBadger implements Badger { + private static final String CONTENT_URI = "content://com.sec.badge/apps?notify=true"; + private static final String[] CONTENT_PROJECTION = new String[]{"_id", "class"}; + + private DefaultBadger defaultBadger; + + public SamsungHomeBadger() { + if (Build.VERSION.SDK_INT >= 21) { + defaultBadger = new DefaultBadger(); + } + } + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + if (defaultBadger != null && defaultBadger.isSupported(context)) { + defaultBadger.executeBadge(context, componentName, badgeCount); + } else { + Uri mUri = Uri.parse(CONTENT_URI); + ContentResolver contentResolver = context.getContentResolver(); + Cursor cursor = null; + try { + cursor = contentResolver.query(mUri, CONTENT_PROJECTION, "package=?", new String[]{componentName.getPackageName()}, null); + if (cursor != null) { + String entryActivityName = componentName.getClassName(); + boolean entryActivityExist = false; + while (cursor.moveToNext()) { + int id = cursor.getInt(0); + ContentValues contentValues = getContentValues(componentName, badgeCount, false); + contentResolver.update(mUri, contentValues, "_id=?", new String[]{String.valueOf(id)}); + if (entryActivityName.equals(cursor.getString(cursor.getColumnIndex("class")))) { + entryActivityExist = true; + } + } + + if (!entryActivityExist) { + ContentValues contentValues = getContentValues(componentName, badgeCount, true); + contentResolver.insert(mUri, contentValues); + } + } + } finally { + CloseHelper.close(cursor); + } + } + } + + private ContentValues getContentValues(ComponentName componentName, int badgeCount, boolean isInsert) { + ContentValues contentValues = new ContentValues(); + if (isInsert) { + contentValues.put("package", componentName.getPackageName()); + contentValues.put("class", componentName.getClassName()); + } + + contentValues.put("badgecount", badgeCount); + + return contentValues; + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList( + "com.sec.android.app.launcher", + "com.sec.android.app.twlauncher" + ); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/SonyHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/SonyHomeBadger.java new file mode 100644 index 0000000..71ff48e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/SonyHomeBadger.java @@ -0,0 +1,153 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.AsyncQueryHandler; +import android.content.ComponentName; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ProviderInfo; +import android.net.Uri; +import android.os.Looper; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author Leo Lin + */ +public class SonyHomeBadger implements Badger { + + private static final String INTENT_ACTION = "com.sonyericsson.home.action.UPDATE_BADGE"; + private static final String INTENT_EXTRA_PACKAGE_NAME = "com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME"; + private static final String INTENT_EXTRA_ACTIVITY_NAME = "com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME"; + private static final String INTENT_EXTRA_MESSAGE = "com.sonyericsson.home.intent.extra.badge.MESSAGE"; + private static final String INTENT_EXTRA_SHOW_MESSAGE = "com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE"; + + private static final String PROVIDER_CONTENT_URI = "content://com.sonymobile.home.resourceprovider/badge"; + private static final String PROVIDER_COLUMNS_BADGE_COUNT = "badge_count"; + private static final String PROVIDER_COLUMNS_PACKAGE_NAME = "package_name"; + private static final String PROVIDER_COLUMNS_ACTIVITY_NAME = "activity_name"; + private static final String SONY_HOME_PROVIDER_NAME = "com.sonymobile.home.resourceprovider"; + private final Uri BADGE_CONTENT_URI = Uri.parse(PROVIDER_CONTENT_URI); + + private AsyncQueryHandler mQueryHandler; + + @Override + public void executeBadge(Context context, ComponentName componentName, + int badgeCount) throws ShortcutBadgeException { + if (sonyBadgeContentProviderExists(context)) { + executeBadgeByContentProvider(context, componentName, badgeCount); + } else { + executeBadgeByBroadcast(context, componentName, badgeCount); + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("com.sonyericsson.home", "com.sonymobile.home"); + } + + private static void executeBadgeByBroadcast(Context context, ComponentName componentName, + int badgeCount) { + Intent intent = new Intent(INTENT_ACTION); + intent.putExtra(INTENT_EXTRA_PACKAGE_NAME, componentName.getPackageName()); + intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); + intent.putExtra(INTENT_EXTRA_MESSAGE, String.valueOf(badgeCount)); + intent.putExtra(INTENT_EXTRA_SHOW_MESSAGE, badgeCount > 0); + context.sendBroadcast(intent); + } + + /** + * Send request to Sony badge content provider to set badge in Sony home launcher. + * + * @param context the context to use + * @param componentName the componentName to use + * @param badgeCount the badge count + */ + private void executeBadgeByContentProvider(Context context, ComponentName componentName, + int badgeCount) { + if (badgeCount < 0) { + return; + } + + final ContentValues contentValues = createContentValues(badgeCount, componentName); + if (Looper.myLooper() == Looper.getMainLooper()) { + // We're in the main thread. Let's ensure the badge update happens in a background + // thread by using an AsyncQueryHandler and an async update. + if (mQueryHandler == null) { + mQueryHandler = new AsyncQueryHandler( + context.getApplicationContext().getContentResolver()) { + }; + } + insertBadgeAsync(contentValues); + } else { + // Already in a background thread. Let's update the badge synchronously. Otherwise, + // if we use the AsyncQueryHandler, this thread may already be dead by the time the + // async execution finishes, which will lead to an IllegalStateException. + insertBadgeSync(context, contentValues); + } + } + + /** + * Asynchronously inserts the badge counter. + * + * @param contentValues Content values containing the badge count, package and activity names + */ + private void insertBadgeAsync(final ContentValues contentValues) { + mQueryHandler.startInsert(0, null, BADGE_CONTENT_URI, contentValues); + } + + /** + * Synchronously inserts the badge counter. + * + * @param context Caller context + * @param contentValues Content values containing the badge count, package and activity names + */ + private void insertBadgeSync(final Context context, final ContentValues contentValues) { + context.getApplicationContext().getContentResolver() + .insert(BADGE_CONTENT_URI, contentValues); + } + + /** + * Creates a ContentValues object to be used in the badge counter update. The package and + * activity names must correspond to an activity that holds an intent filter with action + * "android.intent.action.MAIN" and category android.intent.category.LAUNCHER" in the manifest. + * Also, it is not allowed to publish badges on behalf of another client, so the package and + * activity names must belong to the process from which the insert is made. + * To be able to insert badges, the app must have the PROVIDER_INSERT_BADGE + * permission in the manifest file. In case these conditions are not + * fulfilled, or any content values are missing, there will be an unhandled + * exception on the background thread. + * + * @param badgeCount the badge count + * @param componentName the component name from which package and class name will be extracted + * + */ + private ContentValues createContentValues(final int badgeCount, + final ComponentName componentName) { + final ContentValues contentValues = new ContentValues(); + contentValues.put(PROVIDER_COLUMNS_BADGE_COUNT, badgeCount); + contentValues.put(PROVIDER_COLUMNS_PACKAGE_NAME, componentName.getPackageName()); + contentValues.put(PROVIDER_COLUMNS_ACTIVITY_NAME, componentName.getClassName()); + return contentValues; + } + + /** + * Check if the latest Sony badge content provider exists . + * + * @param context the context to use + * @return true if Sony badge content provider exists, otherwise false. + */ + private static boolean sonyBadgeContentProviderExists(Context context) { + boolean exists = false; + ProviderInfo info = context.getPackageManager().resolveContentProvider(SONY_HOME_PROVIDER_NAME, 0); + if (info != null) { + exists = true; + } + return exists; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/VivoHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/VivoHomeBadger.java new file mode 100644 index 0000000..673d583 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/VivoHomeBadger.java @@ -0,0 +1,32 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.Arrays; +import java.util.List; + + +/** + * @author leolin + */ +public class VivoHomeBadger implements Badger { + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + Intent intent = new Intent("launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM"); + intent.putExtra("packageName", context.getPackageName()); + intent.putExtra("className", componentName.getClassName()); + intent.putExtra("notificationNum", badgeCount); + context.sendBroadcast(intent); + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList("com.vivo.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/XiaomiHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/XiaomiHomeBadger.java new file mode 100644 index 0000000..39dc29e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/XiaomiHomeBadger.java @@ -0,0 +1,101 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.annotation.TargetApi; +import android.app.Notification; +import android.app.NotificationManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Build; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; +import com.qunar.im.base.shortutbadger.util.BroadcastHelper; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + + + +/** + * @author leolin + */ +@Deprecated +public class XiaomiHomeBadger implements Badger { + + public static final String INTENT_ACTION = "android.intent.action.APPLICATION_MESSAGE_UPDATE"; + public static final String EXTRA_UPDATE_APP_COMPONENT_NAME = "android.intent.extra.update_application_component_name"; + public static final String EXTRA_UPDATE_APP_MSG_TEXT = "android.intent.extra.update_application_message_text"; + private ResolveInfo resolveInfo; + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + try { + Class miuiNotificationClass = Class.forName("android.app.MiuiNotification"); + Object miuiNotification = miuiNotificationClass.newInstance(); + Field field = miuiNotification.getClass().getDeclaredField("messageCount"); + field.setAccessible(true); + try { + field.set(miuiNotification, String.valueOf(badgeCount == 0 ? "" : badgeCount)); + } catch (Exception e) { + field.set(miuiNotification, badgeCount); + } + } catch (Exception e) { + Intent localIntent = new Intent( + INTENT_ACTION); + localIntent.putExtra(EXTRA_UPDATE_APP_COMPONENT_NAME, componentName.getPackageName() + "/" + componentName.getClassName()); + localIntent.putExtra(EXTRA_UPDATE_APP_MSG_TEXT, String.valueOf(badgeCount == 0 ? "" : badgeCount)); + if (BroadcastHelper.canResolveBroadcast(context, localIntent)) { + context.sendBroadcast(localIntent); + } + } + if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) { + tryNewMiuiBadge(context, badgeCount); + } + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void tryNewMiuiBadge(Context context, int badgeCount) throws ShortcutBadgeException { + if (resolveInfo == null) { + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); + } + + if (resolveInfo != null) { + NotificationManager mNotificationManager = (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + Notification.Builder builder = new Notification.Builder(context) + .setContentTitle("") + .setContentText("") + .setSmallIcon(resolveInfo.getIconResource()); + Notification notification = builder.build(); + try { + Field field = notification.getClass().getDeclaredField("extraNotification"); + Object extraNotification = field.get(notification); + Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); + method.invoke(extraNotification, badgeCount); + mNotificationManager.notify(0, notification); + } catch (Exception e) { + throw new ShortcutBadgeException("not able to set badge", e); + } + } + } + + @Override + public List getSupportLaunchers() { + return Arrays.asList( + "com.miui.miuilite", + "com.miui.home", + "com.miui.miuihome", + "com.miui.miuihome2", + "com.miui.mihome", + "com.miui.mihome2", + "com.i.miui.launcher" + ); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ZTEHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ZTEHomeBadger.java new file mode 100644 index 0000000..15e9319 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ZTEHomeBadger.java @@ -0,0 +1,37 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.content.ComponentName; +import android.content.Context; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.ArrayList; +import java.util.List; + + +public class ZTEHomeBadger implements Badger { + + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) + throws ShortcutBadgeException { + Bundle extra = new Bundle(); + extra.putInt("app_badge_count", badgeCount); + extra.putString("app_badge_component_name", componentName.flattenToString()); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + context.getContentResolver().call( + Uri.parse("content://com.android.launcher3.cornermark.unreadbadge"), + "setAppUnreadCount", null, extra); + } + } + + @Override + public List getSupportLaunchers() { + return new ArrayList(0); + } +} + diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ZukHomeBadger.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ZukHomeBadger.java new file mode 100644 index 0000000..f0edabb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/impl/ZukHomeBadger.java @@ -0,0 +1,37 @@ +package com.qunar.im.base.shortutbadger.impl; + +import android.annotation.TargetApi; +import android.content.ComponentName; +import android.content.Context; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import com.qunar.im.base.shortutbadger.Badger; +import com.qunar.im.base.shortutbadger.ShortcutBadgeException; + +import java.util.Collections; +import java.util.List; + +/** + * Created by wuxuejian on 2016/10/9. + * 需在设置 -- 通知和状态栏 -- 应用角标管理 中开启应用 + */ + +public class ZukHomeBadger implements Badger { + + private final Uri CONTENT_URI = Uri.parse("content://com.android.badge/badge"); + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + @Override + public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { + Bundle extra = new Bundle(); + extra.putInt("app_badge_count", badgeCount); + context.getContentResolver().call(CONTENT_URI, "setAppBadgeCount", null, extra); + } + + @Override + public List getSupportLaunchers() { + return Collections.singletonList("com.zui.launcher"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/util/BroadcastHelper.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/util/BroadcastHelper.java new file mode 100644 index 0000000..8b88090 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/util/BroadcastHelper.java @@ -0,0 +1,19 @@ +package com.qunar.im.base.shortutbadger.util; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; + +import java.util.List; + +/** + * Created by mahijazi on 17/05/16. + */ +public class BroadcastHelper { + public static boolean canResolveBroadcast(Context context, Intent intent) { + PackageManager packageManager = context.getPackageManager(); + List receivers = packageManager.queryBroadcastReceivers(intent, 0); + return receivers != null && receivers.size() > 0; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/shortutbadger/util/CloseHelper.java b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/util/CloseHelper.java new file mode 100644 index 0000000..ca22f0f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/shortutbadger/util/CloseHelper.java @@ -0,0 +1,29 @@ +package com.qunar.im.base.shortutbadger.util; + +import android.database.Cursor; + +import java.io.Closeable; +import java.io.IOException; + +/** + * @author leolin + */ +public class CloseHelper { + + public static void close(Cursor cursor) { + if (cursor != null && !cursor.isClosed()) { + cursor.close(); + } + } + + + public static void closeQuietly(Closeable closeable) { + try { + if (closeable != null) { + closeable.close(); + } + } catch (IOException var2) { + + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/EncryptMessageType.java b/lib_common/src/main/java/com/qunar/im/base/structs/EncryptMessageType.java new file mode 100644 index 0000000..584975b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/EncryptMessageType.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.structs; + +/** + * Created by lihaibin.li on 2017/8/28. + */ + +public class EncryptMessageType { + public static final int BEGIN = 1; + public static final int AGREE = 2; + public static final int REFUSE = 3; + public static final int CANCEL = 4; + public static final int CLOSE = 5; + public static final int WAIT = 6; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/FuncButtonDesc.java b/lib_common/src/main/java/com/qunar/im/base/structs/FuncButtonDesc.java new file mode 100644 index 0000000..ee02b22 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/FuncButtonDesc.java @@ -0,0 +1,17 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2016/5/26. + */ +public class FuncButtonDesc { +// public int client; + public int support; + public int type; + public String trdextendId; + public String title; + public String i18NTitle; + public String icon; + public int linkType; + public String linkurl; + public int scope; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/ImageFloder.java b/lib_common/src/main/java/com/qunar/im/base/structs/ImageFloder.java new file mode 100644 index 0000000..359aeea --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/ImageFloder.java @@ -0,0 +1,65 @@ +package com.qunar.im.base.structs; + +import com.qunar.im.base.jsonbean.BaseResult; + +/** + * Created by xinbo.wang on 2015/22/5. + */ +public class ImageFloder extends BaseResult +{ + /** + * 图片的文件夹路径 + */ + private String dir; + + /** + * 第一张图片的路径 + */ + private String firstImagePath; + + /** + * 文件夹的名称 + */ + private String name; + + /** + * 图片的数量 + */ + private int count; + + public String getDir() + { + return dir; + } + + public void setDir(String dir) + { + this.dir = dir; + int lastIndexOf = this.dir.lastIndexOf("/"); + this.name = this.dir.substring(lastIndexOf); + } + + public String getFirstImagePath() + { + return firstImagePath; + } + + public void setFirstImagePath(String firstImagePath) + { + this.firstImagePath = firstImagePath; + } + + public String getName() + { + return name; + } + public int getCount() + { + return count; + } + + public void setCount(int count) + { + this.count = count; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/LoginState.java b/lib_common/src/main/java/com/qunar/im/base/structs/LoginState.java new file mode 100644 index 0000000..406c298 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/LoginState.java @@ -0,0 +1,8 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2015/2/4. + */ +public enum LoginState { + SUCCESS,FAILED,PASSWORD_WRONG,USERNAME_NOT_EXIST,UNKOWN +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/MachineType.java b/lib_common/src/main/java/com/qunar/im/base/structs/MachineType.java new file mode 100644 index 0000000..64f49f5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/MachineType.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2015/5/7. + */ +public class MachineType { + public static final String MachineTypeMac = "1"; + public static final String MachineTypeiOS = "2"; + public static final String MachineTypePC = "3"; + public static final String MachineTypeAndroid = "4"; + public static final String MachineTypeLinux = "5"; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/MessageStatus.java b/lib_common/src/main/java/com/qunar/im/base/structs/MessageStatus.java new file mode 100644 index 0000000..fccafe7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/MessageStatus.java @@ -0,0 +1,47 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2015/5/8. + */ +public class MessageStatus { +// public final static int STATUS_FAILED = 0; +// public final static int STATUS_SUCCESS = 1; +// public final static int STATUS_PROCESSION = 2; +// public final static int STATUS_DELIVERY = 8; + + public final static int STATUS_SINGLE_DELIVERED = 3;//已送达 + public final static int STATUS_SINGLE_READED = 4;//已读 + public final static int STATUS_SINGLE_OPERATION = 7;//已操作 + public final static int STATUS_GROUP_READED = 2; + public final static int STATUS_ALL_READED = 0; + + + public final static int LOCAL_STATUS_FAILED = 0X00;//发送失败 + public final static int LOCAL_STATUS_PROCESSION = 0X01;//发送中 + public final static int LOCAL_STATUS_SUCCESS = 0X02;//发送成功 + public final static int LOCAL_STATUS_SUCCESS_PROCESSION = 0X03;//设置发送成功及发送中开关 + + + + public final static int REMOTE_STATUS_CHAT_SUCCESS = 0X00;//发送到服务器 + public final static int REMOTE_STATUS_CHAT_DELIVERED = 0X01;//对方已接收 + public final static int REMOTE_STATUS_CHAT_READED = REMOTE_STATUS_CHAT_DELIVERED << 1;//0X02;//对方已读 + public final static int REMOTE_STATUS_CHAT_OPERATION = 0x04;//0x04 已操作状态 + + public final static int REMOTE_STATUS_GROUP_READED = 0x03;//群消息已读 + + + public final static int MEDAL_HAVE = 0x01;//拥有 + public final static int MEDAL_WEAL = 0x02;//佩戴 + + + public static boolean isExistStatus(int status, int tag) { + return (status & tag) != 0; + } + + public static boolean isProcession(int status) { + return (status & LOCAL_STATUS_SUCCESS_PROCESSION) == LOCAL_STATUS_PROCESSION; + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/MessageType.java b/lib_common/src/main/java/com/qunar/im/base/structs/MessageType.java new file mode 100644 index 0000000..dbd10fa --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/MessageType.java @@ -0,0 +1,72 @@ +package com.qunar.im.base.structs; + + +/** + * Created by xinbo.wang on 2015/5/5. + */ +public class MessageType { + public final static int ORDER_INFO_MSG = 888; + public final static int EXTEND_MSG = 666; + public final static int REVOKE_MESSAGE = -1; + public final static int TEXT_MESSAGE = 1; + public final static int IMAGE_MESSAGE = 3; + public final static int VOICE_MESSAGE = 2; + public final static int FILE_MESSAGE = 5; + public static final int MSG_ACTION = 6; + public static final int MSG_RICH_TEXT = 7; + public static final int MSG_ACTION_RICH_TEXT = 8; + public final static int COMMENT_MESSAGE = 9; + public static final int SHAKE_MESSAGE = 10; + public static final int MSG_NOTE = 11; + public static final int MSG_GROUP_AT = 12; + public static final int INVITE_MESSAGE = 15; + public final static int LOCATION_MESSAGE = 16; + public final static int VIDEO_MESSAGE = 32; + public final static int READ_TO_DESTROY_MESSAGE = 128; + public static final int MSG_ACTIVITY_MESSAGE = 511; + public static final int MSG_AA_MESSAGE = 513; + public static final int MSG_HONGBAO_MESSAGE = 512; + public static final int MSG_AA_PROMPT = 1025; + public static final int TRANSFER_BACK_SERVER = 1004; + public static final int TRANSFER_BACK_CUSTOM = 1003; + public static final int TRANSFER_TO_SERVER = 1002; + public static final int TRANSFER_TO_CUSTOMER = 1001; + public static final int MSG_HONGBAO_PROMPT = 1024; + public static final int MSG_WEILVXING_ORDER = 3001; + public static final int MSG_PRODUCT_CARD = 4096; + public static final int SHARE_LOCATION = 8192; + public static final int MSG_TYPE_RBT_SYSTEM = 268435456; + public static final int MSG_TYPE_RBT_NOTICE = 134217728; + public static final int MSG_TYPE_RUNSHING_ORDER = 2001; + public static final int MSG_TYPE_RUNSHING_ORDER_RESPONSE=2002; + + public static final int MSG_TYPE_ROB_ORDER = 2003;//qchat抢单 + public static final int MSG_TYPE_ROB_ORDER_RESPONSE = 2004;//qchat抢单状态 + public static final int MSG_TYPE_ZHONG_BAO = 2005;//qchat 众包消息 + public static final int MSG_TYPE_CALL_CENTER_TYPE = 16384; +// public static final int MSG_TYPE_CALL_CENTER_CMD = 16384<<1; +// public static final int MSG_TYPE_WEBRTC = MSG_TYPE_CALL_CENTER_CMD<<1; +// public static final int MSG_TYPE_WEBRTC_AUDIO = MSG_TYPE_WEBRTC<<1; + + public final static int PREDICTION_MSG = 668; + public final static int EXTEND_OPS_MSG = 667; + + public static final int MSG_VIDEO_CONFERENCE=5001; + public static final int MSG_RTC_VIDEO_PING = 5100; + public static final int MSG_RTC_VIDEO_RESP = 5101; + public static final int MSG_RTC_AUDIO_PING = 5102; + public static final int MSG_RTC_AUDIO_RESP = 5103; + + public final static int RQUEST_COOKIE_MESSAGE = 10; + public static final int MSG_HISTORY_SPLITER = -321; + public static final int AUTO_REPLY_MESSAGE = 13; + //没有更多消息了type + public static final int MSG_TYPE_NO_MORE_MESSAGE = -99; + + + + //此处是朋友圈消息类型使用 + public static final int image = 1;//图片类型 + public static final int link = 2;//连接类型 + public static final int video = 3;//视频类型 +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/NetHistoryEntity.java b/lib_common/src/main/java/com/qunar/im/base/structs/NetHistoryEntity.java new file mode 100644 index 0000000..3968fc7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/NetHistoryEntity.java @@ -0,0 +1,71 @@ +package com.qunar.im.base.structs; + +/** + * Created by haoran.zuo on 2017/7/27. + */ +public class NetHistoryEntity { + + private String direction; + private String from; + private String from_host; + private int limitnum; + private String timestamp; + private String to; + private String to_host; + + public String getDirection() { + return direction; + } + + public void setDirection(String direction) { + this.direction = direction; + } + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getFrom_host() { + return from_host; + } + + public void setFrom_host(String from_host) { + this.from_host = from_host; + } + + public int getLimitnum() { + return limitnum; + } + + public void setLimitnum(int limitnum) { + this.limitnum = limitnum; + } + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getTo_host() { + return to_host; + } + + public void setTo_host(String to_host) { + this.to_host = to_host; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/NewMessageStatus.java b/lib_common/src/main/java/com/qunar/im/base/structs/NewMessageStatus.java new file mode 100644 index 0000000..f3794a3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/NewMessageStatus.java @@ -0,0 +1,18 @@ +package com.qunar.im.base.structs; + +/** + * Created by hubin on 2018/3/7. + */ + +public class NewMessageStatus { + public final static int STATUS_FAILED = 0; + public final static int STATUS_SUCCESS =1; + public final static int STATUS_PROCESSION = 2; + public final static int STATUS_DELIVERY = 8; + + public final static int STATUS_SINGLE_DELIVERED = 3; + public final static int STATUS_SINGLE_DELIVERED_CONSULT = 4; + + public final static int STATUS_SINGLE_READED = 6; + public final static int STATUS_SINGLE_READED_CONSULT = 7; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/PushSettinsStatus.java b/lib_common/src/main/java/com/qunar/im/base/structs/PushSettinsStatus.java new file mode 100644 index 0000000..feab123 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/PushSettinsStatus.java @@ -0,0 +1,25 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2015/5/8. + */ +public class PushSettinsStatus { + + public static final int SHOW_CONTENT = 0x01;//是否显示推送详情 + public static final int PUSH_ONLINE = SHOW_CONTENT << 1;//pc端在线时是否收推送 + public static final int SOUND_INAPP = PUSH_ONLINE << 1;//app在前端是否有声音 + public static final int VIBRATE_INAPP = SOUND_INAPP << 1;//app在前端是否有震动 + public static final int PUSH_SWITCH = VIBRATE_INAPP << 1;//push总开关 + + /** + * 获取tag状态是否存在 + * + * @param status 数据库值 + * @param tag 要获取的状态值 + * @return + */ + public static boolean isExistStatus(int status, int tag) { + return (status & tag) != 0; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/SetMucVCardData.java b/lib_common/src/main/java/com/qunar/im/base/structs/SetMucVCardData.java new file mode 100644 index 0000000..bd28137 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/SetMucVCardData.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2015/6/9. + */ +public class SetMucVCardData { + public String muc_name; //群id + public String nick; //群名称 + public String desc; + public String title; + public String pic; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/SetProfileData.java b/lib_common/src/main/java/com/qunar/im/base/structs/SetProfileData.java new file mode 100644 index 0000000..98672da --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/SetProfileData.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.structs; + +import com.qunar.im.base.jsonbean.BaseResult; + +/** + * Created by froyomu on 2019/1/31 + *

+ * Describe: + */ +public class SetProfileData extends BaseResult { + public String user; + public String mood; + public String domain; +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/SetVCardData.java b/lib_common/src/main/java/com/qunar/im/base/structs/SetVCardData.java new file mode 100644 index 0000000..9d8badb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/SetVCardData.java @@ -0,0 +1,11 @@ +package com.qunar.im.base.structs; +import com.qunar.im.base.jsonbean.BaseResult; + +/** + * Created by xinbo.wang on 2015/5/26. + */ +public class SetVCardData extends BaseResult { + public String user; + public String url; + public String domain; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/ShareLocationType.java b/lib_common/src/main/java/com/qunar/im/base/structs/ShareLocationType.java new file mode 100644 index 0000000..56ffac5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/ShareLocationType.java @@ -0,0 +1,10 @@ +package com.qunar.im.base.structs; + +/** + * Created by zhaokai on 16-2-22. + */ +public final class ShareLocationType { + public static final String JOIN_LOCATION = "1"; + public static final String SEND_LOCATION_DATA = "2"; + public static final String QUIT_LOCATION = "3"; +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/TransitFileJSON.java b/lib_common/src/main/java/com/qunar/im/base/structs/TransitFileJSON.java new file mode 100644 index 0000000..3ac068c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/TransitFileJSON.java @@ -0,0 +1,29 @@ +package com.qunar.im.base.structs; + +import com.qunar.im.base.jsonbean.BaseResult; + +/** + * Created by xinbo.wang on 2015/4/29. + */ +public class TransitFileJSON extends BaseResult { + public String HttpUrl; + public String FileName; + public String FileSize; + public String FILEID; + public String FILEMD5; + public String LocalFile; + public boolean noMD5; + + public TransitFileJSON(){ + + } + + public TransitFileJSON(String httpUrl,String fileName,String fileSize,String fid,String md5) + { + this.HttpUrl = httpUrl; + this.FileName = fileName; + this.FileSize = fileSize; + this.FILEID = fid; + this.FILEMD5 = md5; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/TransitSoundJSON.java b/lib_common/src/main/java/com/qunar/im/base/structs/TransitSoundJSON.java new file mode 100644 index 0000000..eea0b3d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/TransitSoundJSON.java @@ -0,0 +1,25 @@ +package com.qunar.im.base.structs; + +import com.qunar.im.base.jsonbean.BaseResult; + +/** + * Created by xinbo.wang on 2015/5/5. + */ +public class TransitSoundJSON extends BaseResult { + public static final int PLAYED = 1; + public String HttpUrl; + public String FileName; + public String FilePath; + public int Seconds; + public int s; + + public TransitSoundJSON(){} + + public TransitSoundJSON(String httpUrl,String fileName,int seconds, String filepath) + { + this.HttpUrl = httpUrl; + this.FileName = fileName; + this.Seconds = seconds; + this.FilePath = filepath; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/UserStatus.java b/lib_common/src/main/java/com/qunar/im/base/structs/UserStatus.java new file mode 100644 index 0000000..c8e22ed --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/UserStatus.java @@ -0,0 +1,54 @@ +package com.qunar.im.base.structs; + +/** + * Created by xinbo.wang on 2015/4/23. + */ +public enum UserStatus { + offline(0),away(1),online(6); + + private final String STR_OFFLINE = " (离线) "; + private final String STR_ONLINE = " (在线) "; + private final String STR_LEAVING = " (离开) "; + + private int value = 0; + + UserStatus(int value) + { + this.value = value; + } + + public static UserStatus valueOf(int value) + { + switch (value) + { + case 0: + return offline; + case 6: + return online; + case 1: + return away; + default: + return offline; + } + } + + public int value() + { + return value; + } + + public String strByVal() + { + switch (value) + { + case 0: + return STR_OFFLINE; + case 6: + return STR_ONLINE; + case 1: + return STR_LEAVING; + default: + return STR_OFFLINE; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/structs/WorkWorldItemState.java b/lib_common/src/main/java/com/qunar/im/base/structs/WorkWorldItemState.java new file mode 100644 index 0000000..700755f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/structs/WorkWorldItemState.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.structs; + +public class WorkWorldItemState { + + public final static int normal = 0x01; + public final static int top = normal<<1; + public final static int hot = normal<<2; + + public final static int commentShow = 0x01; + public final static int commentHidden = commentShow<<1; + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/AESCrypt.java b/lib_common/src/main/java/com/qunar/im/base/util/AESCrypt.java new file mode 100644 index 0000000..9a5d230 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/AESCrypt.java @@ -0,0 +1,203 @@ +package com.qunar.im.base.util; + +/** + * Created by lilulucas.li on 2017/7/25. + */ + +import android.util.Base64; +import android.util.Log; + +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * Encrypt and decrypt messages using AES 256 bit encryption that are compatible with AESCrypt-ObjC and AESCrypt Ruby. + *

+ * Created by scottab on 04/10/2014. + */ +public final class AESCrypt { + + private static final String TAG = "AESCrypt"; + + //AESCrypt-ObjC uses CBC and PKCS7Padding + private static final String AES_MODE = "AES/CBC/PKCS7Padding"; + private static final String CHARSET = "UTF-8"; + + //AESCrypt-ObjC uses SHA-256 (and so a 256-bit key) + private static final String HASH_ALGORITHM = "SHA-256"; + + //AESCrypt-ObjC uses blank IV (not the best security, but the aim here is compatibility) + private static final byte[] ivBytes = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + //togglable log option (please turn off in live!) + public static boolean DEBUG_LOG_ENABLED = false; + + + /** + * Generates SHA256 hash of the password which is used as key + * + * @param password used to generated key + * @return SHA256 of the password + */ + private static SecretKeySpec generateKey(final String password) throws NoSuchAlgorithmException, UnsupportedEncodingException { + final MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); + byte[] bytes = password.getBytes("UTF-8"); + digest.update(bytes, 0, bytes.length); + byte[] key = digest.digest(); + + log("SHA-256 key ", key); + + SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); + return secretKeySpec; + } + + + /** + * Encrypt and encode message using 256-bit AES with key generated from password. + * + * + * @param password used to generated key + * @param message the thing you want to encrypt assumed String UTF-8 + * @return Base64 encoded CipherText + * @throws GeneralSecurityException if problems occur during encryption + */ + public static String encrypt(final String password, String message) + throws GeneralSecurityException { + + try { + final SecretKeySpec key = generateKey(password); + + log("message", message); + + byte[] cipherText = encrypt(key, ivBytes, message.getBytes(CHARSET)); + + //NO_WRAP is important as was getting \n at the end + String encoded = Base64.encodeToString(cipherText, Base64.NO_WRAP); + log("Base64.NO_WRAP", encoded); + return encoded; + } catch (UnsupportedEncodingException e) { + if (DEBUG_LOG_ENABLED) + Log.e(TAG, "UnsupportedEncodingException ", e); + throw new GeneralSecurityException(e); + } + } + + + /** + * More flexible AES encrypt that doesn't encode + * @param key AES key typically 128, 192 or 256 bit + * @param iv Initiation Vector + * @param message in bytes (assumed it's already been decoded) + * @return Encrypted cipher text (not encoded) + * @throws GeneralSecurityException if something goes wrong during encryption + */ + public static byte[] encrypt(final SecretKeySpec key, final byte[] iv, final byte[] message) + throws GeneralSecurityException { + final Cipher cipher = Cipher.getInstance(AES_MODE); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] cipherText = cipher.doFinal(message); + + log("cipherText", cipherText); + + return cipherText; + } + + + /** + * Decrypt and decode ciphertext using 256-bit AES with key generated from password + * + * @param password used to generated key + * @param base64EncodedCipherText the encrpyted message encoded with base64 + * @return message in Plain text (String UTF-8) + * @throws GeneralSecurityException if there's an issue decrypting + */ + public static String decrypt(final String password, String base64EncodedCipherText) + throws GeneralSecurityException { + + try { + final SecretKeySpec key = generateKey(password); + + log("base64EncodedCipherText", base64EncodedCipherText); + byte[] decodedCipherText = Base64.decode(base64EncodedCipherText, Base64.NO_WRAP); + log("decodedCipherText", decodedCipherText); + + byte[] decryptedBytes = decrypt(key, ivBytes, decodedCipherText); + + log("decryptedBytes", decryptedBytes); + String message = new String(decryptedBytes, CHARSET); + log("message", message); + + + return message; + } catch (UnsupportedEncodingException e) { + if (DEBUG_LOG_ENABLED) + Log.e(TAG, "UnsupportedEncodingException ", e); + + throw new GeneralSecurityException(e); + } + } + + + /** + * More flexible AES decrypt that doesn't encode + * + * @param key AES key typically 128, 192 or 256 bit + * @param iv Initiation Vector + * @param decodedCipherText in bytes (assumed it's already been decoded) + * @return Decrypted message cipher text (not encoded) + * @throws GeneralSecurityException if something goes wrong during encryption + */ + public static byte[] decrypt(final SecretKeySpec key, final byte[] iv, final byte[] decodedCipherText) + throws GeneralSecurityException { + final Cipher cipher = Cipher.getInstance(AES_MODE); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.DECRYPT_MODE, key, ivSpec); + byte[] decryptedBytes = cipher.doFinal(decodedCipherText); + + log("decryptedBytes", decryptedBytes); + + return decryptedBytes; + } + + + + + private static void log(String what, byte[] bytes) { + if (DEBUG_LOG_ENABLED) + Log.d(TAG, what + "[" + bytes.length + "] [" + bytesToHex(bytes) + "]"); + } + + private static void log(String what, String value) { + if (DEBUG_LOG_ENABLED) + Log.d(TAG, what + "[" + value.length() + "] [" + value + "]"); + } + + + /** + * Converts byte array to hexidecimal useful for logging and fault finding + * @param bytes + * @return + */ + private static String bytesToHex(byte[] bytes) { + final char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', + '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + char[] hexChars = new char[bytes.length * 2]; + int v; + for (int j = 0; j < bytes.length; j++) { + v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + + private AESCrypt() { + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/AESTools.java b/lib_common/src/main/java/com/qunar/im/base/util/AESTools.java new file mode 100644 index 0000000..d553da8 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/AESTools.java @@ -0,0 +1,59 @@ +package com.qunar.im.base.util; + +import android.util.Base64; + +import java.io.StreamCorruptedException; +import java.nio.charset.Charset; + +/** + * Created by may on 2017/10/23. + */ + +public class AESTools { + + private static AESTools INSTANCE = new AESTools(); + + public AESTools getInstance() { + return INSTANCE; + } + + public static String encodeToBase64(String password,String message) { + byte[] input = INSTANCE.encode(message, password); + return Base64.encodeToString(input, Base64.DEFAULT); + } + + public static String decodeFromBase64(String password,String base64String) { + byte[] input = Base64.decode(base64String, Base64.DEFAULT); + String result; + try { + byte[] output = INSTANCE.decode(input, password); + for (byte b : output) { + if ( + b == 0x08 || + b == 0x0b || + b == 0x0c || + b == 0x0e || + b == 0x1f + ) { + throw new StreamCorruptedException("decrypt failed"); + } + } + result = new String(output, Charset.forName("UTF-8")); + if (result.getBytes("UTF-8").length != output.length) + throw new StreamCorruptedException("decrypt failed"); + } catch (Exception e) { + result = null; + } + return result; + + } + + public native byte[] encode(String message, String password); + + public native byte[] decode(byte[] input, String password); + + // Used to load the 'native-lib' library on application startup. + static { + System.loadLibrary("aes256"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/AccountSwitchUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/AccountSwitchUtils.java new file mode 100644 index 0000000..2fff425 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/AccountSwitchUtils.java @@ -0,0 +1,53 @@ +package com.qunar.im.base.util; + +import android.text.TextUtils; + +import com.qunar.im.base.jsonbean.AccountPassword; +import com.qunar.im.base.jsonbean.AccountSwitch; + +import java.util.ArrayList; +import java.util.List; + +/** + * 切换账户utils + * Created by lihaibin.li on 2017/9/7. + */ + +public class AccountSwitchUtils { + private static final String ACCOUNTS = "accounts"; + public static final String defalt_nav_name = "default"; + + public static AccountSwitch accountSwitch = new AccountSwitch(); + + public static void addAccount(String userid, String password, String navname, String navurl) { + if(TextUtils.isEmpty(navname)) navname = defalt_nav_name; + List accountPasswords = getAccounts(); + for (AccountPassword ap : accountPasswords) { + if ((ap.userid + ap.navname).equals(userid + navname)) { + ap.password = password; + accountSwitch.list = accountPasswords; + DataUtils.getInstance(com.qunar.im.common.CommonConfig.globalContext).putPreferences(ACCOUNTS, JsonUtils.getGson().toJson(accountSwitch)); + return; + } + + } + AccountPassword accountPassword = new AccountPassword(); + accountPassword.userid = userid; + accountPassword.password = password; + accountPassword.navname = navname; + accountPassword.navurl = navurl; + accountPasswords.add(accountPassword); + accountSwitch.list = accountPasswords; + DataUtils.getInstance(com.qunar.im.common.CommonConfig.globalContext).putPreferences(ACCOUNTS, JsonUtils.getGson().toJson(accountSwitch)); + } + + public static List getAccounts() { + String accounts = DataUtils.getInstance(com.qunar.im.common.CommonConfig.globalContext).getPreferences(ACCOUNTS, ""); + if (!TextUtils.isEmpty(accounts)) { + accountSwitch = JsonUtils.getGson().fromJson(accounts, AccountSwitch.class); + if (accountSwitch != null) + return accountSwitch.list; + } + return new ArrayList<>(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/BinaryUtil.java b/lib_common/src/main/java/com/qunar/im/base/util/BinaryUtil.java new file mode 100644 index 0000000..9e84dc3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/BinaryUtil.java @@ -0,0 +1,53 @@ +package com.qunar.im.base.util; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class BinaryUtil { + + final protected static char[] hexArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + int v; + for (int j = 0; j < bytes.length; j++) { + v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + + public static byte[] h2b(String hexString) { + if (hexString == null || hexString.equals("")) { + return null; + } + hexString = hexString.replace(" ", ""); + int length = hexString.length() / 2; + byte[] d2 = new byte[length]; + int currentPos = 0; + int i = 0; + do { + String a = hexString.substring(i, i + 2); + d2[currentPos++] = (byte) (Integer.parseInt(a, 16) & 0xFF); + i += 2; + } while (currentPos < length); + return d2; + } + + public static String MD5(String strSrc) { + byte[] bt = strSrc.getBytes(); + MessageDigest md = null; + String strDes = "empty"; + try { + md = MessageDigest.getInstance("MD5"); + + md.update(bt); + strDes = bytesToHex(md.digest()); // to HexString + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + return strDes; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/BuildProperties.java b/lib_common/src/main/java/com/qunar/im/base/util/BuildProperties.java new file mode 100644 index 0000000..e13bff4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/BuildProperties.java @@ -0,0 +1,71 @@ +package com.qunar.im.base.util; + +/** + * Created by hubo.hu on 2017/10/13. + */ + +import android.os.Environment; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +public class BuildProperties { + + private final Properties properties; + + private BuildProperties() throws IOException { + properties = new Properties(); + properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"))); + } + + public boolean containsKey(final Object key) { + return properties.containsKey(key); + } + + public boolean containsValue(final Object value) { + return properties.containsValue(value); + } + + public Set> entrySet() { + return properties.entrySet(); + } + + public String getProperty(final String name) { + return properties.getProperty(name); + } + + public String getProperty(final String name, final String defaultValue) { + return properties.getProperty(name, defaultValue); + } + + public boolean isEmpty() { + return properties.isEmpty(); + } + + public Enumeration keys() { + return properties.keys(); + } + + public Set keySet() { + return properties.keySet(); + } + + public int size() { + return properties.size(); + } + + public Collection values() { + return properties.values(); + } + + public static BuildProperties newInstance() throws IOException { + return new BuildProperties(); + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/BusinessUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/BusinessUtils.java new file mode 100644 index 0000000..c693468 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/BusinessUtils.java @@ -0,0 +1,47 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by Fernflower decompiler) +// + +package com.qunar.im.base.util; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class BusinessUtils { + public static boolean checkPhoneNumber(String number) { + Pattern p = Pattern.compile("\\d{7}\\d."); + Matcher m = p.matcher(number); + return m.matches(); + } + + + public static boolean checkEmail(String email) { + if(!checkChiness(email)) { + Pattern p = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"); + Matcher m = p.matcher(email); + return m.matches(); + } else { + return false; + } + } + + + public static boolean checkChiness(String str) { + return str.matches("^[一-龥]+$"); + } + + public static double sub(double v1, double v2) { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.subtract(b2).doubleValue(); + } + + + public static String formatDoublePrice(double value) { + DecimalFormat df = new DecimalFormat("##########.##"); + return df.format(value); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/CodeUtil.java b/lib_common/src/main/java/com/qunar/im/base/util/CodeUtil.java new file mode 100644 index 0000000..1e73580 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/CodeUtil.java @@ -0,0 +1,140 @@ +package com.qunar.im.base.util; + +import android.util.Base64; + +import java.io.UnsupportedEncodingException; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.DESKeySpec; + +public class CodeUtil { + + public static final String PASSWORD_ENC_SECRET = "mythmayor"; + + public static String decodeString(String str) { + if (str == null) { + return "转换失败"; + } + byte[] s = pack(str); //十六进制转byte数组 + String gbk; + try { + gbk = new String(s, "gbk"); //byte数组转中文字符串 + } catch (UnsupportedEncodingException ignored) { + gbk = "转换失败"; + } + return gbk; + } + + + public static byte[] pack(String str) { + int nibbleshift = 4; + int position = 0; + int len = str.length() / 2 + str.length() % 2; + byte[] output = new byte[len]; + for (char v : str.toCharArray()) { + byte n = (byte) v; + if (n >= '0' && n <= '9') { + n -= '0'; + } else if (n >= 'A' && n <= 'F') { + n -= ('A' - 10); + } else if (n >= 'a' && n <= 'f') { + n -= ('a' - 10); + } else { + continue; + } + output[position] |= (n << nibbleshift); + if (nibbleshift == 0) { + position++; + } + nibbleshift = (nibbleshift + 4) & 7; + } + return output; + } + + + /** + * 2 * 中文字符串转十六进制 + * 3 + */ + public static String decodeShiLiu(String str) { + if (str == null) { + return "转换失败"; + } + String gbk; + try { + byte[] sss = str.getBytes("GBK"); //中文字符串转byte数组 + gbk = unpack(sss); // byte数组转十六进制 + } catch (Exception E) { + gbk = "转换失败"; + } + return gbk; + } + + + /** + * 2 * byte数组转十六进制,模拟php中unpack + * 3 + */ + public static String unpack(byte[] bytes) { + StringBuilder stringBuilder = new StringBuilder(""); + if (bytes == null || bytes.length <= 0) { + return null; + } + for (int i = 0; i < bytes.length; i++) { + int v = bytes[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + } + return stringBuilder.toString(); + } + + + + /** + * 加密 + **/ + public static String encryptPassword(String clearText) { + try { + DESKeySpec keySpec = new DESKeySpec( + PASSWORD_ENC_SECRET.getBytes("UTF-8")); + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); + SecretKey key = keyFactory.generateSecret(keySpec); + + Cipher cipher = Cipher.getInstance("DES"); + cipher.init(Cipher.ENCRYPT_MODE, key); + String encrypedPwd = Base64.encodeToString(cipher.doFinal(clearText + .getBytes("UTF-8")), Base64.DEFAULT); + return encrypedPwd; + } catch (Exception e) { + } + return clearText; + } + + + + + /** + * 解密 + **/ + public static String decryptPassword(String encryptedPwd) { + try { + DESKeySpec keySpec = new DESKeySpec(PASSWORD_ENC_SECRET.getBytes("UTF-8")); + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); + SecretKey key = keyFactory.generateSecret(keySpec); + + byte[] encryptedWithoutB64 = Base64.decode(encryptedPwd, Base64.DEFAULT); + Cipher cipher = Cipher.getInstance("DES"); + cipher.init(Cipher.DECRYPT_MODE, key); + byte[] plainTextPwdBytes = cipher.doFinal(encryptedWithoutB64); + return new String(plainTextPwdBytes); + } catch (Exception e) { + } + return encryptedPwd; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/ConfigFileUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/ConfigFileUtils.java new file mode 100644 index 0000000..50dbc61 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/ConfigFileUtils.java @@ -0,0 +1,78 @@ +package com.qunar.im.base.util; + +import android.content.Context; +import android.text.TextUtils; + +import com.qunar.im.base.common.QunarIMApp; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.util.Locale; + +/** + * Created by xingchao.song on 4/7/2016. + */ +public class ConfigFileUtils { + private static final String TAG = ConfigFileUtils.class.getSimpleName(); + private static final String CONFIG_FILE_NAME = "config.txt"; + + public static boolean isZh() { + Locale locale = QunarIMApp.getContext().getResources().getConfiguration().locale; + String language = locale.getLanguage(); + return language!=null&&language.endsWith("zh"); + } + + public static void copyConfig(Context context) { + File f = new File(context.getFilesDir(), CONFIG_FILE_NAME); + if (f.exists()) { + return; + } + try { + InputStream is = context.getAssets().open(CONFIG_FILE_NAME); + int size = is.available(); + byte[] buffer = new byte[size]; + is.read(buffer); + is.close(); + FileOutputStream fos = new FileOutputStream(f); + fos.write(buffer); + fos.close(); + } catch (IOException e) { + LogUtil.e(TAG,"error",e); + } + } + + public static String loadNavConfig(Context context,String fileName) { + String line = ""; + File configFile = new File(context.getFilesDir(), fileName); + if (!configFile.exists()) { + return line; + } + try { + BufferedReader reader = new BufferedReader(new FileReader(configFile)); + line = reader.readLine(); + if(!TextUtils.isEmpty(line)){ + return line; + } + } catch (IOException e) { + LogUtil.e(TAG,"error",e); + } + return line; + } + + public static void saveNavConfig(String jsonContent, Context context,String fileName) { + File configFile = new File(context.getFilesDir(), fileName); + FileOutputStream fos = null; + try { + fos = new FileOutputStream(configFile); + fos.write(jsonContent.getBytes()); + fos.close(); + } catch (IOException e) { + LogUtil.e(TAG,"error",e); + } + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/DataCenter.java b/lib_common/src/main/java/com/qunar/im/base/util/DataCenter.java new file mode 100644 index 0000000..6f788bc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/DataCenter.java @@ -0,0 +1,27 @@ +package com.qunar.im.base.util; + + +import java.util.HashMap; +import java.util.Map; + +/** + * 数据中心 运行时数据 + * Created by lihaibin.li on 2017/8/29. + */ + +public class DataCenter { + + //当前加密会话用户 + public static Map encryptUsers = new HashMap<>(); + + //当前解密会话用户 + public static Map decryptUsers = new HashMap<>(); + + //当前发送的本地图片对 messageid-path + public static Map localImageMessagePath = new HashMap<>(); + + public static void clear(){ + encryptUsers.clear(); + decryptUsers.clear(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/DateTimeUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/DateTimeUtils.java new file mode 100644 index 0000000..a2abe84 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/DateTimeUtils.java @@ -0,0 +1,341 @@ +package com.qunar.im.base.util; + +import android.text.TextUtils; +import android.text.format.DateFormat; + +import com.qunar.im.base.R; +import com.qunar.im.base.common.QunarIMApp; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Formatter; +import java.util.Locale; + +/** + * Created by junwen.wu on 2014/5/5. + */ +public class DateTimeUtils { + + static { + curZh = ConfigFileUtils.isZh(); + if(ConfigFileUtils.isZh()) + { + week= new String[]{"周日","周一","周二","周三","周四","周五","周六"}; + } + else { + week = new String[]{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; + } + } + + private static String[] week; + private static boolean curZh; + + public static String getTime(long date, boolean detailAsPossible, boolean defailtAddTime) { + StringBuilder displayTime = new StringBuilder(); + if (date > 0) { + Calendar currentDt = Calendar.getInstance(); + currentDt.set(currentDt.get(Calendar.YEAR), currentDt.get(Calendar.MONTH), currentDt.get(Calendar.DATE), 0, 0, 0); + int caYear = currentDt.get(Calendar.YEAR); + int caDay = currentDt.get(Calendar.DAY_OF_MONTH); + int caWeekOfYear = currentDt.get(Calendar.WEEK_OF_YEAR); + + Calendar target = Calendar.getInstance(); + target.setTimeInMillis(date); + int year = target.get(Calendar.YEAR); + int month = target.get(Calendar.MONTH); + int day = target.get(Calendar.DAY_OF_MONTH); + int hour = target.get(Calendar.HOUR_OF_DAY); + int minute = target.get(Calendar.MINUTE); + int weekOfYear = target.get(Calendar.WEEK_OF_YEAR); + boolean addTime = defailtAddTime; + if(year1)//本周,昨天以前 + { + displayTime.append(week[target.get(Calendar.DAY_OF_WEEK)-1]); + } + else if (year==caYear&&weekOfYear==caWeekOfYear&&caDay - day ==1) { // 昨天 + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_yesterday)); + } else if (year==caYear&&weekOfYear==caWeekOfYear&&caDay - day ==0) { //今天 + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_today)); + }else { //未来 + java.text.DateFormat dateFormat; + if(detailAsPossible) + { + dateFormat =DateFormat.getLongDateFormat(QunarIMApp.getContext()); + } + else { + dateFormat = DateFormat.getMediumDateFormat(QunarIMApp.getContext()); + } + String dateStr = dateFormat.format(target.getTime()); + displayTime.append(dateStr); + addTime=false; + } + if(addTime) { + displayTime.append(" "); + int hour12 = target.get(Calendar.HOUR); + if (curZh) { + if (hour < 6) { + displayTime.append("凌晨"); + } else if (hour < 12) { + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_am)); + } else if (hour == 12) { + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_noon)); + hour12 = hour; + } else if (hour < 18) { + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_pm)); + } else { + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_evening)); + } + displayTime.append(hour12); + displayTime.append(":"); + if(minute<10) + { + displayTime.append("0"); + } + displayTime.append(minute); + } else { + displayTime.append(hour12); + displayTime.append(":"); + if(minute<10) + { + displayTime.append("0"); + } + displayTime.append(minute); + if (hour < 12) { + displayTime.append(" AM"); + } else { + displayTime.append(" PM"); + } + } + } + } + return displayTime.toString(); + } + + public static String getTimeForSeesionAndChat(long date, boolean detailAsPossible) { + StringBuilder displayTime = new StringBuilder(); + if (date > 0) { + Calendar currentDt = Calendar.getInstance(); + currentDt.set(currentDt.get(Calendar.YEAR), currentDt.get(Calendar.MONTH), currentDt.get(Calendar.DATE), 0, 0, 0); + int caYear = currentDt.get(Calendar.YEAR); + int caDay = currentDt.get(Calendar.DAY_OF_MONTH); + int caWeekOfYear = currentDt.get(Calendar.WEEK_OF_YEAR); + + Calendar target = Calendar.getInstance(); + target.setTimeInMillis(date); + int year = target.get(Calendar.YEAR); + int month = target.get(Calendar.MONTH); + int day = target.get(Calendar.DAY_OF_MONTH); + int hour = target.get(Calendar.HOUR_OF_DAY); + int minute = target.get(Calendar.MINUTE); + int weekOfYear = target.get(Calendar.WEEK_OF_YEAR); + boolean addTime = true; + if(year1)//本周,昨天以前 + { + addTime = detailAsPossible; + displayTime.append(week[target.get(Calendar.DAY_OF_WEEK)-1]); + } + else if (year==caYear&&weekOfYear==caWeekOfYear&&caDay - day ==1) { // 昨天 + addTime = detailAsPossible; + displayTime.append(QunarIMApp.getContext().getString(R.string.atom_ui_day_yesterday)); + } else if (year==caYear&&weekOfYear==caWeekOfYear&&caDay - day ==0) { //今天 + addTime = true; +// displayTime.append("今天"); + }else { //未来 + java.text.DateFormat dateFormat; + if(detailAsPossible) + { + dateFormat =DateFormat.getLongDateFormat(QunarIMApp.getContext()); + } + else { + dateFormat = DateFormat.getMediumDateFormat(QunarIMApp.getContext()); + } + String dateStr = dateFormat.format(target.getTime()); + displayTime.append(dateStr); + addTime=false; + } + if(addTime) { + boolean b = year == caYear && weekOfYear == caWeekOfYear && (caDay - day == 0); + if(!b){//不是今天 + displayTime.append(" "); + } + int hour24 = target.get(Calendar.HOUR_OF_DAY); + if (curZh) { +// if (hour < 6) { +// displayTime.append("凌晨"); +// } else if (hour < 12) { +// displayTime.append("上午"); +// } else if (hour == 12) { +// displayTime.append("中午"); +// hour12 = hour; +// } else if (hour < 18) { +// displayTime.append("下午"); +// } else { +// displayTime.append("晚上"); +// } + displayTime.append(hour24); + displayTime.append(":"); + if(minute<10) + { + displayTime.append("0"); + } + displayTime.append(minute); + } else { + displayTime.append(hour24); + displayTime.append(":"); + if(minute<10) + { + displayTime.append("0"); + } + displayTime.append(minute); +// if (hour < 12) { +// displayTime.append(" AM"); +// } else { +// displayTime.append(" PM"); +// } + } + } + } + return displayTime.toString(); + } + + public static String getTimeForSearch(long date){ + if(isToday(date)){ + return QunarIMApp.getContext().getString(R.string.atom_ui_day_today); + }else if(isThisWeek(date)){ + return QunarIMApp.getContext().getString(R.string.atom_ui_day_thisweek); + }else if(isThisMonth(date)){ + return QunarIMApp.getContext().getString(R.string.atom_ui_day_thismonth); + }else { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(date); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + return year + "-" + month; + } + } + + public static boolean isThisWeek(long time) { + Calendar calendar = Calendar.getInstance(); + int currentWeek = calendar.get(Calendar.WEEK_OF_YEAR); + calendar.setTime(new Date(time)); + int paramWeek = calendar.get(Calendar.WEEK_OF_YEAR); + if (paramWeek == currentWeek) { + return true; + } + return false; + } + + //判断选择的日期是否是本月 + public static boolean isThisMonth(long time) { + return isThisTime(time, "yyyy-MM"); + } + + public static boolean isThisTime(long time, String pattern) { + Date date = new Date(time); + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + String param = sdf.format(date);//参数时间 + String now = sdf.format(new Date());//当前时间 + if (param.equals(now)) { + return true; + } + return false; + } + //判断选择的日期是否是今天 + public static boolean isToday(long time) { + return isThisTime(time, "yyyy-MM-dd"); + } + + public static String stringForTime(long timeM) { + final long totalSeconds = timeM; + + int seconds = (int) (totalSeconds % 60); + int minutes = (int) ((totalSeconds / 60) % 60); + int hours = (int) (totalSeconds / 3600); + StringBuilder stringBuilder = new StringBuilder(); + Formatter mFormatter = new Formatter(stringBuilder, Locale.getDefault()); + + stringBuilder.setLength(0); + if (hours > 0) { + return mFormatter.format("%d:%02d:%02d", hours, minutes, seconds).toString(); + } else { + return mFormatter.format("%02d:%02d", minutes, seconds).toString(); + } + } + + public static long TimeForString(String time) { + if(!TextUtils.isEmpty(time) && time.contains(":")) { + int hours = 0, minutes = 0, seconds = 0; + String[] times = time.split(":"); + if(times.length == 3) { + hours = Integer.valueOf(times[0]); + minutes = Integer.valueOf(times[1]); + seconds = Integer.valueOf(times[2]); + } else if(times.length == 2){ + hours = 0; + minutes = Integer.valueOf(times[0]); + seconds = Integer.valueOf(times[1]); + } + return (long)(hours * 3600 + minutes * 60 + seconds); + } + return 0; + } + +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/util/DegreeUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/DegreeUtils.java new file mode 100644 index 0000000..721f320 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/DegreeUtils.java @@ -0,0 +1,14 @@ +package com.qunar.im.base.util; + +/** + * Created by zhaokai on 16-2-22. + */ +public final class DegreeUtils { + public static double radToDegree(double rad){ + return 180.0 / Math.PI * rad; + } + + public static double degreeToRad(double degree){ + return Math.PI / 180.0 * degree; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/util/EventBusEvent.java b/lib_common/src/main/java/com/qunar/im/base/util/EventBusEvent.java new file mode 100644 index 0000000..cd85f22 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/EventBusEvent.java @@ -0,0 +1,249 @@ +package com.qunar.im.base.util; + +import com.qunar.im.base.jsonbean.DailyMindMain; +import com.qunar.im.base.jsonbean.DailyMindSub; +import com.qunar.im.base.module.IMMessage; + +import java.io.File; +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * Created by xingchao.song on 9/16/2015. + */ +public class EventBusEvent { + public static class HasNewMessageEvent { + public IMMessage mMessage; + public HasNewMessageEvent(IMMessage message){ + this.mMessage = message; + } + } + + public static class HasNewOpsMsgEvent{ + + } + + public static class ReadThirdMsgEvent{ + + } + + public static class CancelFollowRobot{ + public String robotId; + public CancelFollowRobot(String robotId) + { + this.robotId = robotId; + } + } + + public static class RefreshMessageStatusEvent{ + public String jid; + public RefreshMessageStatusEvent(String id) + { + jid = id; + } + } + + public static class GravtarGot{ + public GravtarGot(String url,String jid){ + murl = url; + this.jid = jid; + } + public String jid; + public String murl; + } + + public static class LoginComplete + { + public boolean loginStatus; + public LoginComplete(boolean loginStatus) + { + this.loginStatus = loginStatus; + } + } + + public static class ReloginEvent + { + public boolean conflict; + public ReloginEvent(boolean conflict){this.conflict = conflict;} + } + + public static class GravantarChanged + { + } + + public static class ReceivedHistory + { + public long latestHistoryTime; + public String id; + public ReceivedHistory(long l,String id){ + this.latestHistoryTime = l; + this.id = id; + } + } + + public static class FriendsChange{ + public boolean result; + public FriendsChange(boolean result){ + this.result = result; + } + } + + public static class ShowGroupEvent + { + public boolean isShow; + public ShowGroupEvent(boolean isShow) + { + this.isShow = isShow; + } + } + + public static class HandleOrderOperation + { + public IMMessage message; + public HandleOrderOperation(IMMessage m) + { + message = m; + } + } + + public static class GravanterSelected{ + public File selectedFile; + public GravanterSelected(File file) + { + this.selectedFile = file; + } + } + + public static class SendTransMsg{ + public Serializable msg; + public String transId; + public SendTransMsg(Serializable serializable,String str) + { + msg = serializable; + transId = str; + } + } + + public static class SendShareMsg{ + public String msg; + public String shareId; + public SendShareMsg(String extMsg,String str) + { + msg = extMsg; + shareId = str; + } + } + + public static class RefreshChatroom + { + public String roomId; + public String roomName; + public RefreshChatroom(String id,String name) + { + roomId = id; + roomName = name; + } + } + + public static class TypingEvent{ + public String jid; + public TypingEvent(String id) + { + this.jid = id; + } + } + + public static class KinckoffChatroom + { + public String roomId; + public KinckoffChatroom(String id) + { + roomId = id; + } + } + + public static class restartChat {} + + public static class CleanHistory{ + public String jid; + public CleanHistory(String id) + { + jid = id; + } + } + + public static class DownEmojComplete + { + public String pkgId; + public String name; + public DownEmojComplete(String id,String n) + { + pkgId = id; + name = n; + } + } + + public static class ChangeMood{ + public String mood; + public ChangeMood(String mood){ + this.mood = mood; + } + } + + public static class NewPictureEdit{ + public NewPictureEdit(String picturePath){ + mPicturePath = picturePath; + } + public String mPicturePath; + } + public static class ShareLocationMessage{ + public ShareLocationMessage(IMMessage message){ + this.message = message; + } + + public IMMessage getMessage() { + return message; + } + private IMMessage message; + } + public static class ThirdNotify{ + + } + + public static class VerifyFriend{ + public Map mode; + public VerifyFriend(Map map){ + this.mode = map; + } + } + + public static class UpdateVoiceMessage{ + public IMMessage message; + public UpdateVoiceMessage(IMMessage msg) + { + this.message = msg; + } + } + public static class UpdateFileMessage{ + public IMMessage message; + public UpdateFileMessage(IMMessage message){this.message = message;} + } + + public static class WebRtcMessage{ + public IMMessage message; + public WebRtcMessage(IMMessage message){this.message = message;} + } + public static class PasswordBox{ + public DailyMindSub dailyMindSub; + public DailyMindMain dailyMindMain; + public List dailyMindMains; + public List dailyMindSubs; + public PasswordBox(DailyMindSub dailyMindSub){this.dailyMindSub = dailyMindSub;} + public PasswordBox(DailyMindMain dailyMindMain){this.dailyMindMain = dailyMindMain;} + public PasswordBox(List dailyMindMains, List dailyMindSubs){ + this.dailyMindMains = dailyMindMains; + this.dailyMindSubs = dailyMindSubs; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/FileUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/FileUtils.java new file mode 100644 index 0000000..35d4311 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/FileUtils.java @@ -0,0 +1,807 @@ +package com.qunar.im.base.util; + +import android.annotation.TargetApi; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.os.StatFs; +import android.provider.DocumentsContract; +import android.provider.MediaStore; + +import com.qunar.im.common.CommonConfig; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.security.MessageDigest; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Created by xinbo.wang on 2015/3/26. + */ +public class FileUtils { + public static final String savePath = Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_DOWNLOADS + "/"; + + public static void saveFileToExtensionStorage(File sourceFile) { + + String root = Environment.getExternalStorageDirectory().toString(); + File myDir = new File(root + "/qtalk"); + myDir.mkdirs(); + + File file = new File(myDir, sourceFile.getName()); + if (file.exists()) file.delete(); + try { + FileOutputStream out = new FileOutputStream(file); + FileInputStream in = new FileInputStream(sourceFile); + int length = (int) sourceFile.length(); + byte[] bytes = new byte[length]; + in.read(bytes); + out.write(bytes); + out.flush(); + out.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static Bitmap ResizeBitmap(Bitmap bitmap, int scale) + { + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + + Matrix matrix = new Matrix(); + matrix.postScale(1 / scale, 1 / scale); + + Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, + matrix, true); + bitmap.recycle(); + return resizedBitmap; + } + + + public static byte[] toByteArray(File file, int len) { + FileInputStream fileInputStream = null; + byte[] bFiles = new byte[len]; + if(!file.exists()) return bFiles; + try { + fileInputStream = new FileInputStream(file); + fileInputStream.read(bFiles, 0, len); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return bFiles; + } + + public static File getFilesDir(Context context) { + // Check if media is mounted or storage is built-in, if so, try and use external cache dir + // otherwise use internal cache dir + try { + final File cachePath = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ? + getExternalFilesDir(context) : context.getFilesDir(); + return cachePath; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static File getExternalFilesDir(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { + File f= context.getExternalFilesDir(null); + if(f!=null) + return f; + } + + // Before Froyo we need to construct the external cache dir ourselves + final String dir = "/Android/data/" + context.getPackageName() + "/files/glide"; + File extFile = Environment.getExternalStorageDirectory(); + return new File(extFile.getPath() + dir); + } + + /** + * 获取访问SD卡中图片路径 + */ + public static String getPath(Uri uri, Context cxt) { + if (uri != null) { + Cursor cursor = cxt.getContentResolver().query(uri, null, null, null, null); + cursor.moveToFirst(); + String document_id = cursor.getString(0); + document_id = document_id.substring(document_id.lastIndexOf(":") + 1); + cursor.close(); + + cursor = cxt.getContentResolver().query( + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null); + cursor.moveToFirst(); + String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); + cursor.close(); + return path; + } + return null; + } + + public static String getRealPath(Uri fileUrl) { + File file = new File(fileUrl.getPath()); + return file.getPath(); + } + + public static void removeDir(File dir) { + if (dir.isFile()) { + dir.delete(); + return; + } + File[] childFiles = dir.listFiles(); + if (childFiles != null && childFiles.length > 0) { + for (File file : childFiles) { + if (file.isFile()) { + file.delete(); + } else { + removeDir(file); + } + } + } + dir.delete(); + } + + public static String getFormatFileSize(String file) { + File f = new File(file); + String fileSizeString = "0MB"; + if (f.exists()) { + FileInputStream fis = null; + try { + fis = new FileInputStream(f); + long fileS = fis.available(); + fileSizeString = getFormatSizeStr(fileS); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + finally { + if(fis!=null) try { + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return fileSizeString; + } + + public static String getFormatSizeStr(long size) + { + DecimalFormat df = new DecimalFormat("#.00"); + String fileSizeString; + if (size < 1024) { + fileSizeString = df.format((double) size) + "B"; + } else if (size < 1048576) { + fileSizeString = df.format((double) size / 1024) + "K"; + } else if (size < 1073741824) { + fileSizeString = df.format((double) size / 1048576) + "M"; + } else { + fileSizeString = df.format((double) size / 1073741824) + "G"; + } + return fileSizeString; + } + + public enum FileSizeUnit + { + B,K,M,G + } + + public static int getFileSize(String file,FileSizeUnit unit) + { + File f = new File(file); + int result = 0; + if (f.exists()) { + FileInputStream fis = null; + try { + fis = new FileInputStream(f); + long fileS = fis.available(); + + if(unit == FileSizeUnit.B) + { + result = (int) Math.ceil(fileS); + }else if(unit == FileSizeUnit.K){ + result = (int) Math.ceil((double) fileS / 1024); + } + else if(unit == FileSizeUnit.G) + { + result = (int) Math.ceil((double) fileS / 1073741824); + } + else + { + result = (int) Math.ceil((double) fileS / 1048576); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + finally { + if(fis!=null) try { + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + if(result ==0) result = 1; + return result; + } + + /** + * Get the md5 value of the io.File specified file + * + * @param file The filepath of the file + * @return The md5 value + */ + public static String fileToMD5(File file) { + InputStream inputStream = null; + try { + inputStream = new FileInputStream(file); // Create an FileInputStream instance according to the filepath + byte[] buffer = new byte[1024]; // The buffer to read the file + MessageDigest digest = MessageDigest.getInstance("MD5"); // Get a MD5 instance + int numRead = 0; // Record how many bytes have been read + while (numRead != -1) { + numRead = inputStream.read(buffer); + if (numRead > 0) + digest.update(buffer, 0, numRead); // Update the digest + } + byte[] md5Bytes = digest.digest(); // Complete the hash computing + return convertHashToString(md5Bytes); // Call the function to convert to hex digits + } catch (Exception e) { + return ""; + } finally { + if (inputStream != null) { + try { + inputStream.close(); // Close the InputStream + } catch (Exception e) { + } + } + } + } + + /** + * Convert the hash bytes to hex digits string + * + * @param hashBytes + * @return The converted hex digits string + */ + private static String convertHashToString(byte[] hashBytes) { + String returnVal = ""; + for (int i = 0; i < hashBytes.length; i++) { + returnVal += Integer.toString((hashBytes[i] & 0xff) + 0x100, 16).substring(1); + } + return returnVal.toLowerCase(); + } + + public static void writeToFile(String str, String fileName, Context ctx, boolean delIfExists) { + File dir = ctx.getFilesDir(); + File file = new File(dir, fileName); + if (file.exists() && delIfExists) { + file.delete(); + } + PrintWriter printWriter = null; + try { + printWriter = new PrintWriter(new BufferedOutputStream(new FileOutputStream(file))); + printWriter.println(str); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + if (printWriter != null) { + printWriter.close(); + } + } + } + + public static void writeToFile(String str,File file, boolean delIfExists) { + if (file.exists() && delIfExists) { + file.delete(); + } + PrintWriter printWriter = null; + try { + printWriter = new PrintWriter(new BufferedOutputStream(new FileOutputStream(file))); + printWriter.println(str); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + if (printWriter != null) { + printWriter.close(); + } + } + } + + /** + * Reads the named file, translating {@link IOException} to a + * + * @param fileName {@code non-null;} name of the file to read + * @return {@code non-null;} contents of the file + */ + public static byte[] readFile(String fileName) throws IOException { + File file = new File(fileName); + return readFile(file); + } + + /** + * Reads the given file, translating {@link IOException} to a + * + * @param file {@code non-null;} the file to read + * @return {@code non-null;} contents of the file + * @throws IOException + */ + public static byte[] readFile(File file) throws IOException { + if (!file.exists()) { + throw new RuntimeException(file + ": file not found"); + } + + if (!file.isFile()) { + throw new RuntimeException(file + ": not a file"); + } + + if (!file.canRead()) { + throw new RuntimeException(file + ": file not readable"); + } + + long longLength = file.length(); + int length = (int) longLength; + if (length != longLength) { + throw new RuntimeException(file + ": file too long"); + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(length); + + InputStream in = null; + try { + in = new BufferedInputStream(new FileInputStream(file)); + byte[] buffer = new byte[8192]; + int bytesRead = 0; + while ((bytesRead = in.read(buffer)) > 0) { + baos.write(buffer, 0, bytesRead); + } + } finally { + if (in != null) { + try { + in.close(); + } catch (Exception e) { + // ignored. + } + } + } + + return baos.toByteArray(); + } + + public static byte[] readStream(InputStream is) throws IOException { + return readStream(is, 32 * 1024); + } + + public static byte[] readStream(InputStream is, int initSize) throws IOException { + if (initSize <= 0) { + initSize = 32 * 1024; + } + ByteArrayOutputStream baos = new ByteArrayOutputStream(initSize); + byte[] buffer = new byte[8192]; + int bytesRead; + while ((bytesRead = is.read(buffer)) > 0) { + baos.write(buffer, 0, bytesRead); + } + return baos.toByteArray(); + } + + public static void deleteFile(Context context, String fileName) { + File dir = context.getFilesDir(); + File file = new File(dir, fileName); + if (file.exists()) { + file.delete(); + } + } + + public static String readFirstLine(String fileName, Context ctx) { + File dir = ctx.getFilesDir(); + File file = new File(dir, fileName); + BufferedReader reader = null; + String line = ""; + if (!file.exists()) + return line; + try { + reader = new BufferedReader(new FileReader(file)); + line = reader.readLine(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return line; + } + public static String readFirstLine(File file, Context ctx) { + BufferedReader reader = null; + String line = ""; + if (!file.exists()) + return line; + try { + reader = new BufferedReader(new FileReader(file)); + line = reader.readLine(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return line; + } + + + /** + * 获取存储视频的路径,包含文件名 + * @param prefix 文件前缀 + * @return 创建的文件 path/"VID_"+prefix+yyyyMMdd_HHmmss.mp4 + */ + public static File getOutputMediaFile(String prefix) { + // To be safe, you should check that the SDCard is mounted + // using Environment.getExternalStorageState() before doing this. + File mediaStorageDir = CommonConfig.globalContext.getCacheDir(); + + // Create a media file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + File mediaFile; + mediaFile = new File(mediaStorageDir.getPath() + File.separator + + "VID_" +prefix+ timeStamp + ".mp4"); + return mediaFile; + } + /** + * 生成一个存放视频第一帧图片的路径 + * @param prefix + * @return + */ + public static File getOutputFrameFile(String prefix) { + File mediaStorageDir = getFilesDir(CommonConfig.globalContext);//CommonConfig.globalContext.getCacheDir(); + // Create a media file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + File mediaFile; + mediaFile = new File(mediaStorageDir.getPath() + File.separator + + "qtalk_" +prefix+ timeStamp + ".jpg"); + return mediaFile; + } + + + /** + * 获取第一帧图片 + * @param fileName 视频文件路径 + * @return 第一帧图片的路径 + */ + public static String getFristFrameOfFile(String fileName){ + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + try { + retriever.setDataSource(fileName); + String filePath = saveImage(retriever.getFrameAtTime(1)); + return filePath; + } + catch (Exception e) + { + e.printStackTrace(); + } + + return ""; + } + + /** + * 保存图片 + * @param bmp 要保存的源文件 + * @return 保存后文件的地址 + */ + public static String saveImage(Bitmap bmp){ + String filePath =getOutputFrameFile("frame").getAbsolutePath(); + FileOutputStream out = null; + try { + out = new FileOutputStream(filePath); + bmp.compress(Bitmap.CompressFormat.JPEG, 100, out); // bmp is your Bitmap instance + // PNG is a lossless format, the compression factor (100) is ignored + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + bmp.recycle(); + } + return filePath; + } + + /** + * 计算某个文件或文件夹的大小 + */ + public static long getDirSize(File dir) { + if (dir == null || !dir.exists()) { + return 0; + } + long total = 0; + if (dir.isFile()) { + total += dir.length(); + } else if (dir.isDirectory()) { + File[] getFiles = dir.listFiles(); + if (getFiles.length > 0) { + for (File f : getFiles) { + total += getDirSize(f); + } + } + } + return total; + } + + public static long calculateDiskSize(File dir) { + StatFs statFs = new StatFs(dir.getAbsolutePath()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + return statFs.getTotalBytes(); + } + return statFs.getBlockSize() * statFs.getBlockCount(); + } + + public static long calculateDiskFree(File dir) { + StatFs statFs = new StatFs(dir.getAbsolutePath()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + + return statFs.getFreeBytes(); + } + return statFs.getBlockSize() * statFs.getFreeBlocks(); + } + + public static Uri toUri(String path){ + return Uri.parse("file:///" + path); + } + + public static boolean copy(File source, File dest) { + BufferedInputStream bis = null; + BufferedOutputStream bos = null; + + try { + bis = new BufferedInputStream(new FileInputStream(source)); + bos = new BufferedOutputStream(new FileOutputStream(dest, false)); + + byte[] buf = new byte[1024]; + bis.read(buf); + + do { + bos.write(buf); + } while(bis.read(buf) != -1); + } catch (IOException e) { + return false; + } finally { + try { + if (bis != null) bis.close(); + if (bos != null) bos.close(); + } catch (IOException e) { + return false; + } + } + + return true; + } + + @TargetApi(19) + public static String getPath(final Context context, final Uri uri) { + + // DocumentProvider + if (DocumentsContract.isDocumentUri(context, uri) + &&Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + if ("primary".equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + split[1]; + } + + // TODO handle non-primary volumes + } + // DownloadsProvider + else if (isDownloadsDocument(uri)) { + + final String id = DocumentsContract.getDocumentId(uri); + if(id != null && id.startsWith("raw:")){ + return id.substring(id.indexOf("raw:") + 1); + } + final Uri contentUri = ContentUris.withAppendedId( + Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); + + return getDataColumn(context, contentUri, null, null); + } + // MediaProvider + else if (isMediaDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + + final String selection = "_id=?"; + final String[] selectionArgs = new String[] { + split[1] + }; + + return getDataColumn(context, contentUri, selection, selectionArgs); + } + } + // MediaStore (and general) + else if ("content".equalsIgnoreCase(uri.getScheme())) { + String path = getDataColumn(context, uri, null, null); + return path; + } + // File + else if ("file".equalsIgnoreCase(uri.getScheme())) { + return uri.getPath(); + } + return uri.toString(); + } + + /** + * Get the value of the data column for this Uri. This is useful for + * MediaStore Uris, and other file-based ContentProviders. + * + * @param context The context. + * @param uri The Uri to query. + * @param selection (Optional) Filter used in the query. + * @param selectionArgs (Optional) Selection arguments used in the query. + * @return The value of the _data column, which is typically a file path. + */ + public static String getDataColumn(Context context, Uri uri, String selection, + String[] selectionArgs) { + + Cursor cursor = null; + + final String column = MediaStore.Images.Media.DATA; + final String id = MediaStore.Images.Media._ID; + final String[] projection = { + column + }; + + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, + null); + if (cursor != null && cursor.moveToFirst()) { + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } catch (IllegalArgumentException e) { + //华为scheme content://com.huawei.hidisk.fileprovider/root/storage/emulated/0/ + String rootPre = File.separator + "root"; + return uri.getPath().startsWith(rootPre) ? uri.getPath().replace(rootPre, "") : uri.getPath(); + } catch (Exception e) { + if (cursor != null) + cursor.close(); + return null; + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } + + public static String getIdColumn(Context context, Uri uri, String selection, String[] selectionArgs) { + Cursor cursor = null; + + final String column = MediaStore.Images.Media._ID; + final String[] projection = { + column + }; + + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, + null); + if (cursor != null && cursor.moveToFirst()) { + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } catch (Exception e) { + if (cursor != null) + cursor.close(); + return null; + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } + + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is ExternalStorageProvider. + */ + public static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is DownloadsProvider. + */ + public static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is MediaProvider. + */ + public static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + + public static String formatByteSize(long bytes) { + StringBuilder sb = new StringBuilder(); + if (bytes == 0) { + sb.append("0 Byte"); + } else { + if (bytes < 1024) { //不到1KB + sb.append(bytes).append(" ").append("bytes"); + } else if (bytes < 1024 * 1024) { //不到1 MB + float f = 1.0f * bytes / 1024; + sb.append(String.format("%.2f", f)).append(" ").append("KB"); + } else if (bytes < 1024 * 1024 * 1024) { // 不到 1 GB + float f = 1.0f * bytes / 1024 / 1024; + sb.append(String.format("%.2f", f)).append(" ").append("MB"); + } else { // 大于1GB + float f = 1.0f * bytes / 1024 / 1024 / 1024; + sb.append(String.format("%.2f", f)).append(" ").append("GB"); + } + } + return sb.toString(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/HanziToPinyin.java b/lib_common/src/main/java/com/qunar/im/base/util/HanziToPinyin.java new file mode 100644 index 0000000..983c068 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/HanziToPinyin.java @@ -0,0 +1,65 @@ +package com.qunar.im.base.util; + +import java.io.UnsupportedEncodingException; + +/** + * Created by saber on 15-12-16. + */ +public class HanziToPinyin { + static final int GB_SP_DIFF = 160; // 存放国标一级汉字不同读音的起始区位码 + static final int[] secPosValueList = { 1601, 1637, 1833, 2078, 2274, 2302, + 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, + 4086, 4390, 4558, 4684, 4925, 5249, 5600 }; // 存放国标一级汉字不同读音的起始区位码对应读音 + static final char[] firstLetter = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', + 'Y', 'Z' }; + + public static char getFirstLetter(char ch) { + if (ch >= 'a' && ch <= 'z') { + return (char) (ch - 'a' + 'A'); + } + if (ch >= 'A' && ch <= 'Z') { + return ch; + } + byte[] uniCode = null; + try { + uniCode = String.valueOf(ch).getBytes("GBK"); + } catch (UnsupportedEncodingException e) { + LogUtil.e("Hanzi","error",e); + return ch; + } + if (uniCode[0] > 0) { // 非汉字 + return ch; + } else { + return convert(uniCode); + } + } + + public static String zh2Abb(String str) + { + String result = ""; + for(char ch:str.toCharArray()) + { + result+=getFirstLetter(ch); + } + return result; + } + + static char convert(byte[] bytes) { + char result = '-'; + int secPosValue = 0; + int i; + for (i = 0; i < bytes.length; i++) { + bytes[i] -= GB_SP_DIFF; + } + secPosValue = bytes[0] * 100 + bytes[1]; + for (i = 0; i < 23; i++) { + if (secPosValue >= secPosValueList[i] + && secPosValue < secPosValueList[i + 1]) { + result = firstLetter[i]; + break; + } + } + return result; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/InternDatas.java b/lib_common/src/main/java/com/qunar/im/base/util/InternDatas.java new file mode 100644 index 0000000..be67470 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/InternDatas.java @@ -0,0 +1,91 @@ +package com.qunar.im.base.util; + +import android.text.TextUtils; +import android.util.LruCache; + +import com.qunar.im.base.module.IMMessage; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by saber on 15-8-18. + */ +public class InternDatas { + //头像地址缓存 + public static LruCache JidToUrl = new LruCache(144); + public static LruCache cache = new LruCache(144); + //qtalk时,缓存非组织架构 + private static LruCache notInOrgnazition = new LruCache(144); + //缓存nick -> jid + private static LruCache nick2Jid = new LruCache(144); + //草稿 + private static Map draftData = new LinkedHashMap(); + //缓存组织架构 + private static Map internMap = new LinkedHashMap(); + //缓存ChatId + public static LruCache chatidCache = new LruCache(144); + + //我发送的消息,收到应答移除 + public static List sentMsgIdByMe = new ArrayList(); + //缓存发送中队列,发送成功或者重试两次移除 + public static Map sendingLine = new ConcurrentHashMap<>(); + + public static String getJid(String nick) + { + return nick2Jid.get(nick); + } + + public static void saveJid(String nick,String jid) + { + if (nick == null) return; + if (jid == null) jid = ""; + nick2Jid.put(nick,jid); + } + + public static String getName(String uid) { + return notInOrgnazition.get(uid); + } + + public static void saveName(String uid, String nickName) { + if (uid == null) return; + if (nickName == null) nickName = ""; + notInOrgnazition.put(uid, nickName); + } + + public static String getDraft(String id) { + if (draftData.containsKey(id)) { + return draftData.get(id); + } + return ""; + } + + public static void putDraft(String id, String content) { + if (!TextUtils.isEmpty(id) && !TextUtils.isEmpty(content)) { + draftData.put(id, content); + } + } + + public static void removeDraft(String id){ + if(id != null){ + draftData.remove(id); + } + } + + public static void addData(String key, Object obj) { + internMap.put(key, obj); + } + + public static Object getData(String key) { + return internMap.get(key); + } + + public static boolean existKey(String key) + { + return internMap.containsKey(key); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/ListUtil.java b/lib_common/src/main/java/com/qunar/im/base/util/ListUtil.java new file mode 100644 index 0000000..f3ab66a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/ListUtil.java @@ -0,0 +1,39 @@ +package com.qunar.im.base.util; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by xingchao.song on 7/20/2015. + */ +public class ListUtil { + public interface ListFilter{ + boolean accept(Z source); + } + + public static List filter(List fromList , ListFilter filter){ + ArrayList toList = new ArrayList(); + for(int i=0;i void toArray(List list,T[] ts) + { + + } + + /** + * list是否为空 + * + * @param list + * @return + */ + public static boolean isEmpty(List list) { + return list == null || list.size() == 0; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/LogUtil.java b/lib_common/src/main/java/com/qunar/im/base/util/LogUtil.java new file mode 100644 index 0000000..3bec886 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/LogUtil.java @@ -0,0 +1,109 @@ +package com.qunar.im.base.util; + +import android.util.Log; + +import com.qunar.im.common.CommonConfig; + +/** + * @author zhaoliu + */ +public class LogUtil { + private static final String LOG_TAG = "QIM"; + + /** 详细信息 */ + public static void v(String msg) { + v(LOG_TAG,msg); + } + public static void v(String tag,String msg) { + if (CommonConfig.isDebug) { + if (msg == null) + msg = "value is null"; + Log.v(tag, msg); + } + } + public static void v(String tag,String msg,Throwable tr) { + if (CommonConfig.isDebug) { + if (msg == null) + msg = "value is null"; + Log.v(tag, msg, tr); + } + } + + /** 调试日志 */ + public static void d(String msg) { + d(LOG_TAG,msg); + } + public static void d(String tag,String info) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.d(tag, info); + } + } + public static void d(String tag,String info,Throwable tr) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.d(tag, info, tr); + } + } + + /** 信息日志 */ + public static void i(String info) { + i(LOG_TAG, info); + } + public static void i(String tag,String info) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.i(tag, info); + } + } + public static void i(String tag,String info,Throwable tr) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.i(tag, info, tr); + } + } + + + /** 警告日志 */ + public static void w(String msg) { + w(LOG_TAG,msg); + } + public static void w(String tag,String info) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.w(tag, info); + } + } + public static void w(String tag,String info,Throwable tr) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.w(tag, info, tr); + } + } + + /** 错误日志 */ + public static void e(String msg) { + e(LOG_TAG,msg); + } + public static void e(String tag,String info) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.e(tag, info); + } + } + public static void e(String tag,String info,Throwable tr) { + if (CommonConfig.isDebug) { + if (info == null) + info = "value is null"; + Log.e(tag, info, tr); + } + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/MediaUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/MediaUtils.java new file mode 100644 index 0000000..8ab40fa --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/MediaUtils.java @@ -0,0 +1,173 @@ +package com.qunar.im.base.util; + +import android.content.Context; +import android.content.res.AssetFileDescriptor; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.SoundPool; + +import com.qunar.im.common.CommonConfig; + +import java.io.IOException; + +/** + * Created by xinbo.wang on 2015/4/3. + */ +public class MediaUtils { + static int MSM_SOUND_ID; + static int SHAKE_SOUND_ID; + static SoundPool soundPool; + static MediaPlayer mediaPlayer; + static AudioManager mAudioManager; + static int MSG_VIDEO_TONE; + static int WEBRTC_SOUND_ID; + + static int MAX_STREAMS = 3; + + static int MSG_SOUND_STREAM_ID; + + public static void loadNewMsgSound(Context context, int rid) { + if(MSM_SOUND_ID == 0) { + if (soundPool == null) { + soundPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_RING, 5); + } + //加载短信声音 + MSM_SOUND_ID = soundPool.load(context, rid, 1); + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + } + } + + public static void loadShakeMsgSound(Context context,int resId){ + if(SHAKE_SOUND_ID == 0) { + if (soundPool == null) { + soundPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_RING, 5); + } + //加载短信声音 + SHAKE_SOUND_ID = soundPool.load(context, resId, 1); + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + } + } + public static void playShakeMsgSound(Context context){ + if(SHAKE_SOUND_ID ==0)return; + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + float cur = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + soundPool.play(SHAKE_SOUND_ID, cur, cur, 99, 0, 1); + } + + public static void playNewMsgSound(Context context) { + if(MSM_SOUND_ID==0) return; + if(MSG_SOUND_STREAM_ID>0) soundPool.stop(MSG_SOUND_STREAM_ID); + MSG_SOUND_STREAM_ID = 0; + if(CommonConfig.isPlayVoice) + { + MSG_SOUND_STREAM_ID = soundPool.play(MSM_SOUND_ID, 1, 1, 1, 0, 1); + return; + } + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + float cur = mAudioManager.getStreamVolume(AudioManager.STREAM_RING); + MSG_SOUND_STREAM_ID = soundPool.play(MSM_SOUND_ID, cur, cur, 99, 0, 1); + } + + public static void unLoadNewMsgSound() + { + if(MSM_SOUND_ID >0) { + soundPool.unload(MSM_SOUND_ID); + MSM_SOUND_ID = 0; + } + } + + public static void loadRtcSound(Context context, int rid) { + if(MSG_VIDEO_TONE == 0) { + if (soundPool == null) { + soundPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_RING, 5); + } + //加载短信声音 + MSG_VIDEO_TONE = soundPool.load(context, rid, 2); + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + } + } + + public static void playRtcTone(Context context) + { + if(MSG_VIDEO_TONE>0) { + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + float cur = mAudioManager.getStreamVolume(AudioManager.STREAM_RING); + WEBRTC_SOUND_ID = soundPool.play(MSG_VIDEO_TONE, cur, cur, 99, -1, 1); + } + } + + public static void stopRtcTone() + { + if(WEBRTC_SOUND_ID >0) { + soundPool.stop(WEBRTC_SOUND_ID); + WEBRTC_SOUND_ID = 0; + } + } + + public static void playRtcSound(Context context, int rid) { + if(mediaPlayer == null) { +// mediaPlayer = MediaPlayer.create(context, rid); +// ((Activity) context).setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); + try { + mediaPlayer = new MediaPlayer(); + if (mediaPlayer.isPlaying()) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + mediaPlayer = new MediaPlayer(); + } + AssetFileDescriptor file = context.getResources().openRawResourceFd(rid); + mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), + file.getLength()); + mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); + mediaPlayer.setLooping(true); + mediaPlayer.prepare(); + mediaPlayer.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public static void stopRtcSound() { + if(mediaPlayer != null) { + mediaPlayer.pause(); + mediaPlayer.stop(); + mediaPlayer.reset(); + mediaPlayer.release(); + mediaPlayer = null; + } + } + + public static void unloadRtcTone() + { + if(MSG_VIDEO_TONE>0) + { + soundPool.unload(MSG_VIDEO_TONE); + MSG_VIDEO_TONE = 0; + } + } + + public static void unLoadShakeSound() + { + if(SHAKE_SOUND_ID > 0) { + soundPool.unload(SHAKE_SOUND_ID); + SHAKE_SOUND_ID = 0; + } + } + + public static void changeMode(int mode,Context context) + { + if (mAudioManager == null) + mAudioManager = (AudioManager) context.getSystemService(context.AUDIO_SERVICE); + if(mode == AudioManager.MODE_NORMAL) mAudioManager.setSpeakerphoneOn(true); + else mAudioManager.setSpeakerphoneOn(false); + mAudioManager.setMode(mode); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/MemoryCache.java b/lib_common/src/main/java/com/qunar/im/base/util/MemoryCache.java new file mode 100644 index 0000000..1a1b7f2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/MemoryCache.java @@ -0,0 +1,81 @@ +package com.qunar.im.base.util; + +import android.graphics.Bitmap; +import android.os.Parcelable; +import android.support.rastermill.Cacheable; +import android.util.LruCache; + +import com.qunar.im.base.common.QunarIMApp; +import com.qunar.im.base.util.graphics.BitmapHelper; + +import java.lang.ref.WeakReference; + +/** + * Created by xinbo.wang on 2015/3/24. + */ +public class MemoryCache { + public static void emptyCache() + { + mMemoryCache.evictAll(); + } + private static int maxMemory = (int) Runtime.getRuntime().maxMemory(); + private static int mCacheSize = maxMemory / 8; + + public static int getCurrentSize() + { + return mMemoryCache.size(); + } + + public static int getMaxMemory() + { + return mMemoryCache.size(); + } + + private static LruCache mMemoryCache = new LruCache(mCacheSize) { + @Override + protected int sizeOf(String key, Parcelable value) { + if(value instanceof Bitmap) { + return ((Bitmap)value).getByteCount(); + } + else if(value instanceof Cacheable) + { + return ((Cacheable) value).getByteCount(); + } + else { + return 128; + } + } + }; + + public static void addObjToMemoryCache(String key, Parcelable obj) { + if (obj != null) { + mMemoryCache.put(key, obj); + } + } + + /** + * 从内存缓存中获取一个Object + * @param key + * @return + */ + public static Parcelable getMemoryCache(String key) { + if(key == null) + return null; + return mMemoryCache.get(key); + } + public static void removeFromMemCache(String key){ + mMemoryCache.remove(key); + } + + + static WeakReference defaultGravatar = new WeakReference(null); + public static Bitmap getDefaultGravatar(int rid) + { + if(defaultGravatar.get() == null) + { + Bitmap bitmap = BitmapHelper.decodeResource(QunarIMApp.getContext().getResources(), rid); + defaultGravatar = new WeakReference(bitmap); + } + return defaultGravatar.get(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/MessageUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/MessageUtils.java index bad9f41..d03e8fb 100644 --- a/lib_common/src/main/java/com/qunar/im/base/util/MessageUtils.java +++ b/lib_common/src/main/java/com/qunar/im/base/util/MessageUtils.java @@ -13,6 +13,7 @@ import com.qunar.im.base.structs.MessageStatus; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.QtalkStringUtils; import java.io.File; @@ -41,7 +42,7 @@ public static IMMessage generateSingleIMMessage(String from, String to, String c message.setId(id); message.setMessageID(id); message.setFromID(from); - message.setUserId(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()); + message.setUserId(CurrentPreference.getInstance().getPreferenceUserId()); if (!TextUtils.isEmpty(chatType) && (chatType.equals(String.valueOf(ConversitionType.MSG_TYPE_CONSULT)) || chatType.equals(String.valueOf(ConversitionType.MSG_TYPE_CONSULT_SERVER)))) { @@ -113,7 +114,7 @@ public static IMMessage generateMucIMMessage(String from, String to) { message.setRealfrom(from); message.setFromID(from); message.setToID(to); - message.setNickName(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserName()); + message.setNickName(CurrentPreference.getInstance().getUserName()); message.setTime(time); message.setDirection(IMMessage.DIRECTION_SEND); diff --git a/lib_common/src/main/java/com/qunar/im/base/util/NetworkUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/NetworkUtils.java new file mode 100644 index 0000000..8ab3e97 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/NetworkUtils.java @@ -0,0 +1,49 @@ +package com.qunar.im.base.util; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +/** + * Created by xinbo.wang on 2015/3/29. + */ +public class NetworkUtils { + private static ConnectivityManager connectivityManager; + + public static ConnectStatus isConnection(Context context) { + if (connectivityManager == null) { + connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager == null) + return ConnectStatus.unkown; + } + boolean isConnected = false; + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + if (networkInfo != null) { + isConnected = networkInfo.isConnected(); + } + return isConnected ? ConnectStatus.connected : ConnectStatus.disconnected; + } + + public static int getNetworkType() { + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + if (networkInfo == null) + return -100; + return networkInfo.getType(); + } + + public static boolean isWifi(Context context) { + if (connectivityManager == null) { + connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager == null) + return false; + } + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + if (networkInfo == null) return false; + return networkInfo.getType() == ConnectivityManager.TYPE_WIFI; + } + + public enum ConnectStatus { + connected, disconnected, unkown + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/PhoneInfoUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/PhoneInfoUtils.java new file mode 100644 index 0000000..55818a2 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/PhoneInfoUtils.java @@ -0,0 +1,50 @@ +package com.qunar.im.base.util; + + +import android.text.TextUtils; + +import com.orhanobut.logger.Logger; +import com.qunar.im.common.CommonConfig; + +import java.io.File; +import java.util.UUID; + +/** + * Created by xinbo.wang on 2015/4/13. + */ +public class PhoneInfoUtils { + public synchronized static String getUniqueID() { + File deviceUnique =new File(CommonConfig.globalContext.getFilesDir(), + CommonConfig.currentPlat + + "_" + IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.lastuserid) + + "_" + IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.lastuserdomain) + + "_unique"); + Logger.i("push token filename = " + deviceUnique.getName()); + if(!deviceUnique.exists()){ + //生成uuid + String uuid = BinaryUtil.MD5(UUID.randomUUID().toString()); + FileUtils.writeToFile(uuid, deviceUnique, true); + } + String token = FileUtils.readFirstLine(deviceUnique,CommonConfig.globalContext); + Logger.i("get push token = " + token); + return token; + } + +// File pubkeyFile =new File(CommonConfig.globalContext.getFilesDir(), "_pubkey"); + + public synchronized static void delUniqueID() { + if(!TextUtils.isEmpty(getUniqueID())){ + File deviceUnique =new File(CommonConfig.globalContext.getFilesDir(), + CommonConfig.currentPlat + + "_" + IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.lastuserid) + + "_" + IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.lastuserdomain) + + "_unique"); + Logger.i("del push token filename = " + deviceUnique.getName()); + if(deviceUnique.exists()){ + deviceUnique.delete(); + } + } + } + + +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/base/util/RunningApp.java b/lib_common/src/main/java/com/qunar/im/base/util/RunningApp.java new file mode 100644 index 0000000..4337d16 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/RunningApp.java @@ -0,0 +1,92 @@ +package com.qunar.im.base.util; + +import android.app.ActivityManager; +import android.content.ComponentName; +import android.content.Context; +import android.text.TextUtils; + +import java.util.List; + +/** + * Created by xingchao.song on 7/8/2015. + */ +public class RunningApp { + + public static boolean isForeground(Context context) { + if(context == null){ + return false; + } + ActivityManager activityManager = (ActivityManager) context + .getSystemService(Context.ACTIVITY_SERVICE); + List appProcesses = activityManager + .getRunningAppProcesses(); + if(appProcesses!=null) { + for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.processName.equals(context.getPackageName())) { + if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { + return true; + } else { + return false; + } + } + } + } + return false; + } + + public static boolean isEmptyProcess(Context context) { + ActivityManager activityManager = (ActivityManager) context + .getSystemService(Context.ACTIVITY_SERVICE); + List appProcesses = activityManager.getRunningAppProcesses(); + if(appProcesses!=null) { + for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.processName.equals(context.getPackageName())) { + if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_EMPTY) { + return true; + } else { + return false; + } + } + } + } + return false; + } + + public static boolean isService(Context context) { + ActivityManager activityManager = (ActivityManager) context + .getSystemService(Context.ACTIVITY_SERVICE); + List appProcesses = activityManager.getRunningAppProcesses(); + if(appProcesses!=null) { + for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.processName.equals(context.getPackageName())) { + if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE) { + return true; + } else { + return false; + } + } + } + } + return false; + } + + /** + * 判断某个界面是否在前台 + * + * @param context Context + * @param className 界面的类名 + * @return 是否在前台显示 + */ + public static boolean isForeground(Context context, String className) { + if (context == null || TextUtils.isEmpty(className)) + return false; + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List list = am.getRunningTasks(1); + if (list != null && list.size() > 0) { + ComponentName cpn = list.get(0).topActivity; + if (className.equals(cpn.getClassName())) + return true; + } + return false; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/Utils.java b/lib_common/src/main/java/com/qunar/im/base/util/Utils.java new file mode 100644 index 0000000..1f581bc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/Utils.java @@ -0,0 +1,195 @@ +package com.qunar.im.base.util; + +import android.app.Activity; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.WindowManager; +import android.widget.Toast; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by zhao.liu on 2014/11/26. + */ +public class Utils { + /** + * @param context + * @param showText + */ + public static void showToast(Context context, String showText) { + Toast.makeText(context, showText, Toast.LENGTH_SHORT).show(); + } + + public static int dipToPixels(Context context, float dipValue) { + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); + } + + public static float getDensity(Context context) + { + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + return metrics.density; + } + + public static int dpToPx(Context context, int dp) + { + return dipToPixels(context,dp); + } + + public static int sp2px(Context context, float sp) { + final float scale = context.getResources().getDisplayMetrics().scaledDensity; + return (int) (sp * scale + 0.5f); + } + + public static void jump2Desktop(Context context) + { +// Intent intent = new Intent(Intent.ACTION_MAIN); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// intent.addCategory(Intent.CATEGORY_HOME); +// context.startActivity(intent); + ((Activity)context).moveTaskToBack(true); + } + + public static void dropIntoClipboard(String text,Context context) + { + ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE); + clipboard.setText(text); + } + + public static int getScreenWidth(Context context) { + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + WindowManager manager = (WindowManager) context + .getSystemService(context.WINDOW_SERVICE); + manager.getDefaultDisplay().getMetrics(metrics); + return metrics.widthPixels; + } + + public static int getScreenHeight(Context context) { + DisplayMetrics metrics = new DisplayMetrics(); + WindowManager manager = (WindowManager) context + .getSystemService(context.WINDOW_SERVICE); + manager.getDefaultDisplay().getMetrics(metrics); + return metrics.heightPixels; + } + + public static void sendLocalBroadcast(Intent intent,Context context) + { + context.sendBroadcast(intent); + } + + public static boolean isGifUrl(String url){ + return url.endsWith(".gif") || url.contains(".gif"); + } + + private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code"; + private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"; + private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage"; + + public static boolean isMIUI() { + try { + final BuildProperties prop = BuildProperties.newInstance(); + return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null + || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null + || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null; + } catch (final IOException e) { + return false; + } + } + + /** + * 验证网址Url + * + * @param + * @return 如果是符合格式的字符串,返回 true ,否则为 false + */ + public static boolean IsUrl(String str) { + String regex = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";return match(regex, str); + } + /** + * @param regex + * 正则表达式字符串 + * @param str + * 要匹配的字符串 + * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false; + */ + private static boolean match(String regex, String str) { + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(str); + return matcher.find(); + } + + public static final String[][] MIME_MapTable={ + //{后缀名, MIME类型} + {".3gp", "video/3gpp"}, + {".apk", "application/vnd.android.package-archive"}, + {".asf", "video/x-ms-asf"}, + {".avi", "video/x-msvideo"}, + {".bin", "application/octet-stream"}, + {".bmp", "image/bmp"}, + {".c", "text/plain"}, + {".class", "application/octet-stream"}, + {".conf", "text/plain"}, + {".cpp", "text/plain"}, + {".doc", "application/msword"}, + {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, + {".xls", "application/vnd.ms-excel"}, + {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, + {".exe", "application/octet-stream"}, + {".gif", "image/gif"}, + {".gtar", "application/x-gtar"}, + {".gz", "application/x-gzip"}, + {".h", "text/plain"}, + {".htm", "text/html"}, + {".html", "text/html"}, + {".jar", "application/java-archive"}, + {".java", "text/plain"}, + {".jpeg", "image/jpeg"}, + {".jpg", "image/jpeg"}, + {".js", "application/x-javascript"}, + {".log", "text/plain"}, + {".m3u", "audio/x-mpegurl"}, + {".m4a", "audio/mp4a-latm"}, + {".m4b", "audio/mp4a-latm"}, + {".m4p", "audio/mp4a-latm"}, + {".m4u", "video/vnd.mpegurl"}, + {".m4v", "video/x-m4v"}, + {".mov", "video/quicktime"}, + {".mp2", "audio/x-mpeg"}, + {".mp3", "audio/x-mpeg"}, + {".mp4", "video/mp4"}, + {".mpc", "application/vnd.mpohun.certificate"}, + {".mpe", "video/mpeg"}, + {".mpeg", "video/mpeg"}, + {".mpg", "video/mpeg"}, + {".mpg4", "video/mp4"}, + {".mpga", "audio/mpeg"}, + {".msg", "application/vnd.ms-outlook"}, + {".ogg", "audio/ogg"}, + {".pdf", "application/pdf"}, + {".png", "image/png"}, + {".pps", "application/vnd.ms-powerpoint"}, + {".ppt", "application/vnd.ms-powerpoint"}, + {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, + {".prop", "text/plain"}, + {".rc", "text/plain"}, + {".rmvb", "audio/x-pn-realaudio"}, + {".rtf", "application/rtf"}, + {".sh", "text/plain"}, + {".tar", "application/x-tar"}, + {".tgz", "application/x-compressed"}, + {".txt", "text/plain"}, + {".wav", "audio/x-wav"}, + {".wma", "audio/x-ms-wma"}, + {".wmv", "audio/x-ms-wmv"}, + {".wps", "application/vnd.ms-works"}, + {".xml", "text/plain"}, + {".z", "application/x-compress"}, + {".zip", "application/x-zip-compressed"}, + {"", "*/*"} + }; +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/glide/GlideCircleTransform.java b/lib_common/src/main/java/com/qunar/im/base/util/glide/GlideCircleTransform.java new file mode 100644 index 0000000..4c885e1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/glide/GlideCircleTransform.java @@ -0,0 +1,69 @@ +package com.qunar.im.base.util.glide; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; + +/** + * Created by hubo.hu on 2017/10/12. + */ +public class GlideCircleTransform extends BitmapTransformation { + + private Paint mBorderPaint; + private float mBorderWidth; + + public GlideCircleTransform(Context context) { + super(context); + mBorderWidth = 2;//Resources.getSystem().getDisplayMetrics().density * borderWidth; + + mBorderPaint = new Paint(); + mBorderPaint.setDither(true); + mBorderPaint.setAntiAlias(true); + mBorderPaint.setColor(Color.parseColor("#FF45CF8E")); + mBorderPaint.setStyle(Paint.Style.STROKE); + mBorderPaint.setStrokeWidth(mBorderWidth); + } + + @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { + return circleCrop(pool, toTransform); + } + + private Bitmap circleCrop(BitmapPool pool, Bitmap source) { + if (source == null) return null; + + int size = Math.min(source.getWidth(), source.getHeight()); + int x = (source.getWidth() - size) / 2; + int y = (source.getHeight() - size) / 2; + + // TODO this could be acquired from the pool too + Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); + + Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(result); + Paint paint = new Paint(); + paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); + paint.setAntiAlias(true); + float r = size / 2f; + canvas.drawCircle(r, r, r, paint); + + if (mBorderPaint != null) { + float borderRadius = r - mBorderWidth / 2; +// canvas.drawCircle(r, r, borderRadius, mBorderPaint); + } + return result; + } + + @Override public String getId() { + return getClass().getName(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/glide/GlideRoundTransform.java b/lib_common/src/main/java/com/qunar/im/base/util/glide/GlideRoundTransform.java new file mode 100644 index 0000000..47ca99a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/glide/GlideRoundTransform.java @@ -0,0 +1,54 @@ +package com.qunar.im.base.util.glide; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; + +/** + * Created by Lex lex on 2018/6/29. + */ +public class GlideRoundTransform extends BitmapTransformation { + + private static float radius = 0f; + + public GlideRoundTransform(Context context) { + this(context, 4); + } + + public GlideRoundTransform(Context context, int dp) { + super(context); + this.radius = Resources.getSystem().getDisplayMetrics().density * dp; + } + + @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { + return roundCrop(pool, toTransform); + } + + private static Bitmap roundCrop(BitmapPool pool, Bitmap source) { + if (source == null) return null; + + Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(result); + Paint paint = new Paint(); + paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); + paint.setAntiAlias(true); + RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight()); + canvas.drawRoundRect(rectF, radius, radius, paint); + return result; + } + + @Override public String getId() { + return getClass().getName() + Math.round(radius); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/graphics/BitmapHelper.java b/lib_common/src/main/java/com/qunar/im/base/util/graphics/BitmapHelper.java new file mode 100644 index 0000000..69c47f0 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/graphics/BitmapHelper.java @@ -0,0 +1,42 @@ +package com.qunar.im.base.util.graphics; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +public class BitmapHelper { + + public static Bitmap decodeFile(String pathName,int thumbWidth,int thumbHeight) { + BitmapFactory.Options newOpts = new BitmapFactory.Options(); + newOpts.inJustDecodeBounds = true; + BitmapFactory.decodeFile(pathName, newOpts); + newOpts.inSampleSize = ImageUtils.computeSampleSize(newOpts,-1,thumbHeight*thumbWidth); + newOpts.inJustDecodeBounds = false; + //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 + Bitmap bm = BitmapFactory.decodeFile(pathName, newOpts); + return bm; + } + + public static Bitmap decodeFile(String pathName) { + Bitmap bm = BitmapFactory.decodeFile(pathName); + return bm; + } + + /** + * 读取资源文件返回可编辑的Bitmap + * + * @param res + * @param id + * @return + */ + public static Bitmap decodeResource(Resources res, int id) { + Bitmap bitmap = null; + try { + Bitmap original = BitmapFactory.decodeResource(res, id); + bitmap = original.copy(Bitmap.Config.ARGB_8888, true); + original.recycle(); + } catch (OutOfMemoryError e) { + } + return bitmap; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/graphics/ICacheDir.java b/lib_common/src/main/java/com/qunar/im/base/util/graphics/ICacheDir.java new file mode 100644 index 0000000..c9c2d3b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/graphics/ICacheDir.java @@ -0,0 +1,12 @@ +package com.qunar.im.base.util.graphics; + +import java.io.File; + +/** + * Created by xinbo.wang on 2015/5/20. + */ +public interface ICacheDir { + void setDir(String dir); + File getFile(String fileName); + File getDirectory(); +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/graphics/ImageUtils.java b/lib_common/src/main/java/com/qunar/im/base/util/graphics/ImageUtils.java new file mode 100644 index 0000000..12db700 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/graphics/ImageUtils.java @@ -0,0 +1,1316 @@ +package com.qunar.im.base.util.graphics; + +import android.app.Activity; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Region; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; +import android.media.ExifInterface; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CommonConfig; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.reflect.Method; +import java.util.List; + + +public final class ImageUtils { + + public static final String TAG = "ImageUtils"; + + public static Bitmap compressBimap(String mPath,Activity activity){ + DisplayMetrics metric = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(metric); + int screenWidth = metric.widthPixels; // 屏幕宽度(像素) + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(mPath, options); + options.inPreferredConfig = Bitmap.Config.RGB_565; + options.inSampleSize = calculateInSampleSize(options, screenWidth); + options.inJustDecodeBounds = false; + Bitmap resizeBmp = BitmapFactory.decodeFile(mPath, options); + return resizeBmp; + } + + public static int calculateInSampleSize( + BitmapFactory.Options options, int reqWidth, int reqHeight) { + // Raw height and width of image + final int height = options.outHeight; + final int width = options.outWidth; + int inSampleSize = 1; + if (height > reqHeight || width > reqWidth) { + + final int halfHeight = height / 2; + final int halfWidth = width / 2; + + // Calculate the largest inSampleSize value that is a power of 2 and keeps both + // height and width larger than the requested height and width. + while ((halfHeight / inSampleSize) > reqHeight + && (halfWidth / inSampleSize) > reqWidth) { + inSampleSize *= 2; + } + } + return inSampleSize; + } + + public static int calculateInSampleSize( + BitmapFactory.Options options, int reqWidth) { + // Raw height and width of image + final int width = options.outWidth; + int inSampleSize = 1; + + while ( (width / inSampleSize) > reqWidth) { + inSampleSize *= 2; + } + return inSampleSize; + } + + private static byte[] toByteArray(File file, int len) { + FileInputStream fileInputStream = null; + byte[] bFiles = new byte[len]; + if(!file.exists()) return bFiles; + try { + fileInputStream = new FileInputStream(file); + fileInputStream.read(bFiles, 0, len); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return bFiles; + } + + private static boolean copy(File source, File dest) { + BufferedInputStream bis = null; + BufferedOutputStream bos = null; + + try { + bis = new BufferedInputStream(new FileInputStream(source)); + bos = new BufferedOutputStream(new FileOutputStream(dest, false)); + + byte[] buf = new byte[1024]; + bis.read(buf); + + do { + bos.write(buf); + } while(bis.read(buf) != -1); + } catch (IOException e) { + return false; + } finally { + try { + if (bis != null) bis.close(); + if (bos != null) bos.close(); + } catch (IOException e) { + return false; + } + } + + return true; + } + + public static void compressFile(File src,long maxSize,int maxW,int maxH,File target) { + //文件本身就小于指定的size,不进行压缩处理 + BitmapFactory.Options newOpts = new BitmapFactory.Options(); + //开始读入图片,此时把options.inJustDecodeBounds 设回true了 + newOpts.inJustDecodeBounds = true; + Bitmap bitmap = BitmapFactory.decodeFile(src.getAbsolutePath(),newOpts);//此时返回bm为空 + byte[] bytes = toByteArray(src, 4); + ImageUtils.ImageType type = ImageUtils.adjustImageType(bytes); + if (type == ImageType.GIF){ + //如果是gif图片则复制原文件 + copy(src,target); + return ; + } + newOpts.inJustDecodeBounds = false; + int w = newOpts.outWidth; + int h = newOpts.outHeight; + //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 + int be = 1;//be=1表示不缩放 + if (w > h && w > maxW) {//如果宽度大的话根据宽度固定大小缩放 + be = (int) (1.0f * newOpts.outWidth / maxW); + } else if (w < h && h > maxH) {//如果高度高的话根据宽度固定大小缩放 + be = (int) (1.0f * newOpts.outHeight / maxH); + } + if (be <= 0) + be = 1; + newOpts.inSampleSize = be;//设置缩放比例 + //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 + Bitmap newBitmap = BitmapFactory.decodeFile(src.getAbsolutePath(), newOpts); + compressImage(newBitmap, maxSize, target);//压缩好比例大小后再进行质量压缩 + if (bitmap != null){ + bitmap.recycle(); + } + if(newBitmap!=null) + newBitmap.recycle(); + } + + private static void compressImage(Bitmap image,long maxSize,File target) { + if(image == null){ + return; + } + FileOutputStream fos = null; + ByteArrayOutputStream baos = null; + ByteArrayInputStream isBm = null; + try { + baos = new ByteArrayOutputStream(); + image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 + int options = 100; + while (baos.toByteArray().length > maxSize) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩 + baos.reset();//重置baos即清空baos + options -= 10;//每次都减少10 + image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中 + } + isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 + fos = new FileOutputStream(target); + baos.writeTo(fos); + } catch (IOException e) { + LogUtil.e(TAG, "IO Exception", e); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + LogUtil.e(TAG, "IO Exception", e); + } + } + if (baos != null) { + try { + baos.close(); + } catch (IOException e) { + LogUtil.e(TAG, "IO Exception", e); + } + } + if (isBm != null) { + try { + isBm.close(); + } catch (IOException e) { + LogUtil.e(TAG, "IO Exception", e); + } + } + } + } + public static File compressFile(Bitmap bitmap,File target) + { + try { + target.createNewFile(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 85, new FileOutputStream(target)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return target; + } + public static File compressFile(File file) { + return compressFile(file, null); + } + public static File compressFile(File source, File target) { + Bitmap bitmap = ImageUtils.getThumbnail(source, (int) 0.5f); + if (target == null) { + target = new File(source.getParent(), "compress_" + source.getName()); + } + if (target.exists()) { + target.delete(); + } + File file = compressFile(bitmap,target); + if (bitmap != null) + bitmap.recycle(); + return file; + } + + public static boolean saveBitmap(Bitmap bitmap, File file) { + if (bitmap != null) { + if (file.exists()) { + file.delete(); + } + try { + file.createNewFile(); + FileOutputStream fileOutputStream = new FileOutputStream(file); + bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fileOutputStream); + fileOutputStream.flush(); + fileOutputStream.close(); + return true; + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return false; + } + + public static int computeSampleSize(int w, int h, int minSideLength, int maxNumOfPixels) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.outHeight = h; + options.outWidth = w; + int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels); + int roundedSize; + if (initialSize <= 8) { + roundedSize = 1; + while (roundedSize < initialSize) { + roundedSize <<= 1; + } + } else { + roundedSize = (initialSize + 7) / 8 * 8; + } + return roundedSize; + } + + public static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { + int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels); + int roundedSize; + if (initialSize <= 8) { + roundedSize = 1; + while (roundedSize < initialSize) { + roundedSize <<= 1; + } + } else { + roundedSize = (initialSize + 7) / 8 * 8; + } + return roundedSize; + } + + private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { + double w = options.outWidth; + double h = options.outHeight; + int lowerBound = maxNumOfPixels == -1 ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels)); + int upperBound = minSideLength == -1 ? 128 : (int) Math.min(Math.floor(w / minSideLength), + Math.floor(h / minSideLength)); + if (upperBound < lowerBound) { + // return the larger one when there is no overlapping zone. + return lowerBound; + } + + if (maxNumOfPixels == -1 && minSideLength == -1) { + return 1; + } else if (minSideLength == -1) { + return lowerBound; + } else { + return upperBound; + } + } + + /** + * 创建图片的缩略图 + * + * @param imageFile + * @param sampleSize 缩略图的尺寸(单位为px) + * @return 创建缩略图的Bitmap + */ + public static Bitmap getThumbnail(File imageFile, int sampleSize) { + // 获取这个图片的宽和高 + Bitmap bitmap = null; + try { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options); + + options.inSampleSize = computeSampleSize(options, -1, sampleSize * sampleSize); + // 重新读入图片,这次要把options.inJustDecodeBounds 设为 false + options.inJustDecodeBounds = false; + bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options); + } catch (OutOfMemoryError t) { + System.gc(); + try { + Method m = Runtime.class.getDeclaredMethod("runFinalization", boolean.class); + m.setAccessible(true); + m.invoke(Runtime.getRuntime(), true); + } catch (Exception e) { + } + } + return bitmap; + } + + /** + * Change the drawable to btimap. + * + * @param drawable A drawable object. + * @return A Bitmap object. + */ + public static Bitmap drawableToBitmap(Drawable drawable) { + Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), + drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); + drawable.draw(canvas); + return bitmap; + } + + + /** + * 获得当前屏幕的尺寸 + * + * @param activity + * @return + */ + public static Display getScreenDisplay(Activity activity) { + return activity.getWindowManager().getDefaultDisplay(); + } + /** + * 为textview指定一个等高的icon,若resId不合法将返回null + * + * @param textView + * @param resId + */ + public static Drawable getEqualHeightDrawable(TextView textView, int resId) { + Drawable drawable = null; + if (resId > 0) { + try { + drawable = textView.getContext().getResources().getDrawable(resId); + drawable.setBounds(0, 0, (int) textView.getPaint().getTextSize(), (int) textView.getPaint() + .getTextSize()); + } catch (Exception e) { + // do nothing + } + } + return drawable; + } + + /** + * 获取图片的宽和高 + * + * @param path + * @return options.outWidth单位px + */ + public static BitmapFactory.Options getImageSize(String path) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(path, options); + return options; + } + + /** + * 旋转bitmap + * + * @param b + * @param degrees + * @return + */ + public static Bitmap rotate(Bitmap b, int degrees) { + if (degrees != 0 && b != null) { + Matrix m = new Matrix(); + m.setRotate(degrees, b.getWidth() / 2, b.getHeight() / 2); + try { + Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true); + if (b != b2) { + b.recycle(); + b = b2; + } + } catch (OutOfMemoryError ex) { + } + } + return b; + } + + public static ImageType adjustImageType(byte[] image) { + if (image.length < 2) { + return ImageType.NONE; + } + if (image[0] == 0x42 && image[1] == 0x4d) { + return ImageType.BMP; + } + if (image[0] == 0xff && image[1] == 0xd8) { + return ImageType.JPEG; + } + if (image[0] == 0x47 && image[1] == 0x49 && image[2] == 0x46) { + return ImageType.GIF; + } + if (image[0] == 0x89 && image[1] == 0x50 && image[2] == 0x4E && image[3] == 0x47) { + return ImageType.PNG; + } + return ImageType.NONE; + } + + /** + * 代码代替xml生成Drawable状态变色节省资源 + * + * @param normal + * @param pressed + * @author ran.feng + * @since 2012年9月2日下午3:56:34 + */ + public static StateListDrawable createBGSelector(int normal, int pressed) { + final StateListDrawable drawable = new StateListDrawable(); + ColorDrawable cdNormal = new ColorDrawable(normal); + ColorDrawable cdPressed = new ColorDrawable(pressed); + drawable.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, cdPressed); + drawable.addState(new int[]{android.R.attr.state_selected, android.R.attr.state_enabled}, cdPressed); + drawable.addState(new int[]{android.R.attr.state_checked, android.R.attr.state_enabled}, cdPressed); + drawable.addState(new int[]{android.R.attr.state_enabled}, cdNormal); + return drawable; + } + + public static void saveToGallery(final Context context, Bitmap bitmap) { + + ContentValues values = new ContentValues(); + values.put(MediaStore.Images.Media.TITLE, "title"); + values.put(MediaStore.Images.Media.DESCRIPTION, "desc"); + values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); + values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); + + OutputStream imageOut = null; + // 指定保存图片路径 + File appDir = new File(Environment.getExternalStorageDirectory(), "Qtalk"); + if (!appDir.exists()) { + appDir.mkdir(); + } + String fileName = System.currentTimeMillis() + ".png"; + final File outfile = new File(appDir, fileName); + + try { + + if(!outfile.exists()){ + outfile.createNewFile(); + } + imageOut = new FileOutputStream(outfile); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageOut); + + values.put(MediaStore.Images.Media.DATA, outfile.getAbsolutePath()); + //插入图库 + Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + } catch (Exception e) { + LogUtil.e(TAG,"error",e); + } finally { + try { + imageOut.close(); + } catch (Exception e) { + LogUtil.e(TAG,"error",e); + } + } + CommonConfig.mainhandler.post(new Runnable() { + @Override + public void run() { + //通知更新图库 + context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(outfile))); + Toast.makeText(context, "保存到" + outfile.getAbsolutePath(), Toast.LENGTH_LONG).show(); + } + }); + } + + + + public static void saveToGallery(final Context context, File file,boolean isGif) { + + String suffix; + + ContentValues values = new ContentValues(); + values.put(MediaStore.Images.Media.TITLE, "title"); + values.put(MediaStore.Images.Media.DESCRIPTION, "desc"); + values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); + if(isGif){ + values.put(MediaStore.Images.Media.MIME_TYPE, "image/gif"); + suffix = ".gif"; + }else{ + values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); + suffix = ".jpg"; + } + + // 指定保存图片路径 + File appDir = new File(Environment.getExternalStorageDirectory(), CommonConfig.currentPlat); + if (!appDir.exists()) { + appDir.mkdir(); + } + String fileName = System.currentTimeMillis() + suffix; + final File outfile = new File(appDir, fileName); + + OutputStream imageOut = null; + InputStream is = null; + try { + if(!outfile.exists()){ + outfile.createNewFile(); + } + values.put(MediaStore.Images.Media.DATA, outfile.getAbsolutePath()); + + is = new BufferedInputStream(new FileInputStream(file)); + imageOut = new FileOutputStream(outfile); +// imageOut = context.getContentResolver().openOutputStream(uri); + byte[] buffer = new byte[1024]; + int n = 0; + while ((n = is.read(buffer)) != -1){ + imageOut.write(buffer, 0, n); + } + //插入图库 + final Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + is.close(); + imageOut.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + CommonConfig.mainhandler.post(new Runnable() { + @Override + public void run() { + //通知更新图库 + if(context != null){ + context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(outfile))); + Toast.makeText(context, "保存到" + outfile.getAbsolutePath(), Toast.LENGTH_LONG).show(); + } + } + }); + } + + public static Bitmap transformRotation(String src) { + if (src == null) + return null; + Bitmap bitmap = BitmapFactory.decodeFile(src); + Bitmap target = null; + ExifInterface exifInterface = null; + if (bitmap != null) { + try { + exifInterface = new ExifInterface(src); + } catch (IOException e) { + LogUtil.e("IO Exception"); + } + if (exifInterface != null) { + Matrix matrix = new Matrix(); + switch (exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)) { + case ExifInterface.ORIENTATION_ROTATE_180: + matrix.postRotate(180); + target = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + break; + case ExifInterface.ORIENTATION_ROTATE_270: + matrix.postRotate(270); + target = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + break; + case ExifInterface.ORIENTATION_ROTATE_90: + matrix.postRotate(90); + target = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + break; + default: + target = bitmap; + break; + } + } + } + if (target != bitmap) { + bitmap.recycle(); + } + return target; + } + + public static Bitmap compose(final List source, int width, int height) { + if (source == null || source.size() == 0) { + return null; + } + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + int w, h; + switch (source.size()) { + case 1: + w = width / 2; + h = height / 2; + compose1Bitmap(source, canvas, w, h); + break; + case 2: + w = width / 2; + h = height / 2; + compose2Bitmap(source, canvas, w, h); + break; + case 3: + w = width / 2; + h = height / 2; + compose3Bitmap(source, canvas, w, h); + break; + case 4: + w = width / 2; + h = height / 2; + compose4Bitmap(source, canvas, w, h); + break; + case 5: + w = width / 3; + h = height / 3; + compose5Bitmap(source, canvas, w, h); + break; + case 6: + w = width / 3; + h = height / 3; + compose6Bitmap(source, canvas, w, h); + break; + case 7: + w = width / 3; + h = height / 3; + compose7Bitmap(source, canvas, w, h); + break; + case 8: + w = width / 3; + h = height / 3; + compose8Bitmap(source, canvas, w, h); + break; + case 9: + w = width / 3; + h = height / 3; + compose9Bitmap(source, canvas, w, h); + break; + default: + w = width / 3; + h = height / 3; + compose9PlusBitmap(source, canvas, w, h); + break; + } + return bitmap; + } + + + private static void compose1Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = canvas.getWidth() / 2 - w / 2, top = canvas.getHeight() / 2 - h / 2; + bp = scaleBitmap(source.get(0).getAbsolutePath(), w, h); + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + + private static void compose2Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = 0; + top = 0; + break; + case 1: + left = w; + top = h; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose3Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = canvas.getWidth() / 2 - w / 2; + top = 0; + break; + case 1: + left = 0; + top = h; + break; + case 2: + left = w; + top = h; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose4Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = 0; + top = 0; + break; + case 1: + left = w; + top = 0; + break; + case 2: + left = 0; + top = h; + break; + case 3: + left = w; + top = h; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose5Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = canvas.getWidth() / 2 - w; + top = canvas.getHeight() / 2 - h; + break; + case 1: + left = canvas.getWidth() / 2; + top = canvas.getHeight() / 2 - h; + break; + case 2: + left = 0; + top = canvas.getHeight() / 2; + break; + case 3: + left = w; + top = canvas.getHeight() / 2; + break; + case 4: + left = w * 2; + top = canvas.getHeight() / 2; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose6Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = 0; + top = canvas.getHeight() / 2 - h; + break; + case 1: + left = w; + top = canvas.getHeight() / 2 - h; + break; + case 2: + left = w * 2; + top = canvas.getHeight() / 2 - h; + break; + case 3: + left = 0; + top = canvas.getHeight() / 2; + break; + case 4: + left = w; + top = canvas.getHeight() / 2; + break; + case 5: + left = w * 2; + top = canvas.getHeight() / 2; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose7Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = 0; + top = 0; + break; + case 1: + left = w; + top = 0; + break; + case 2: + left = w * 2; + top = 0; + break; + case 3: + left = 0; + top = h; + break; + case 4: + left = w; + top = h; + break; + case 5: + left = w * 2; + top = h; + break; + case 6: + left = canvas.getWidth() / 2 - w / 2; + top = h * 2; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose8Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left = 0, top = 0; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = 0; + top = 0; + break; + case 1: + left = w; + top = 0; + break; + case 2: + left = w * 2; + top = 0; + break; + case 3: + left = 0; + top = h; + break; + case 4: + left = w; + top = h; + break; + case 5: + left = w * 2; + top = h; + break; + case 6: + left = canvas.getWidth() / 2 - w; + top = h * 2; + break; + case 7: + left = canvas.getWidth() / 2; + top = h * 2; + break; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose9Bitmap(final List source, Canvas canvas, int w, int h) { + Bitmap bp; + int left, top; + for (int i = 0; i < source.size(); i++) { + bp = scaleBitmap(source.get(i).getAbsolutePath(), w, h); + switch (i) { + case 0: + left = 0; + top = 0; + break; + case 1: + left = w; + top = 0; + break; + case 2: + left = w * 2; + top = 0; + break; + case 3: + left = 0; + top = h; + break; + case 4: + left = w; + top = h; + break; + case 5: + left = w * 2; + top = h; + break; + case 6: + left = 0; + top = h * 2; + break; + case 7: + left = w; + top = h * 2; + break; + case 8: + left = w * 2; + top = h * 2; + break; + default: + return; + } + canvas.save(); + canvas.clipRect(left + 0.5f, top + 0.5f, left + w - 0.5f, top + h - 0.5f, Region.Op.INTERSECT); + canvas.drawBitmap(bp, left, top, null); + canvas.restore(); + bp.recycle(); + } + } + + private static void compose9PlusBitmap(final List source, Canvas canvas, int w, int h) { + compose9Bitmap(source, canvas, w, h); + } + + private static Bitmap scaleBitmap(String path, int w, int h) { + Bitmap bitmap = BitmapHelper.decodeFile(path, w, h); + if (bitmap != null) { + if (w == bitmap.getWidth() && h == bitmap.getHeight()) + return bitmap; + Bitmap result = Bitmap.createScaledBitmap(bitmap, w, h, false); + bitmap.recycle(); + return result; + } + return Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + } + + public enum ImageType { + BMP, JPEG, GIF, PNG, NONE + } + + /** + * 先缩小图片,再做高斯模糊速度快.灵感来源于StackOverflow + * @param bkg + * @param view + */ + public static void blur(Bitmap bkg, View view) { + if (bkg == null || view == null || bkg.isRecycled()) { + return; + } + int viewHeight = view.getHeight()==0?bkg.getHeight():view.getHeight(); + int viewWidth = view.getWidth()==0?bkg.getWidth():view.getWidth(); + float radius = 2; + float scaleFactor = 8; + int width = bkg.getWidth(); + int height = (width*viewHeight)/viewWidth; + int finalWidth = (int)(width/scaleFactor); + int finalHeight = (int)(height/scaleFactor); + if(finalWidth <= 0) finalWidth = 48; + if(finalHeight <= 0) finalHeight = 48; + Bitmap overlay = Bitmap.createBitmap(finalWidth,finalHeight , Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(overlay); + canvas.translate(-view.getLeft()/scaleFactor, -view.getTop()/scaleFactor); + canvas.scale(1 / scaleFactor, 1 / scaleFactor); + Paint paint = new Paint(); + paint.setFlags(Paint.FILTER_BITMAP_FLAG); + canvas.drawBitmap(bkg, 0, 0, paint); + overlay = FastBlur.doBlur(overlay, (int) radius, true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + view.setBackground(new BitmapDrawable(view.getResources(), overlay)); + } + else { + view.setBackgroundDrawable(new BitmapDrawable(view.getResources(), overlay)); + } + } + + /** + * stolen from fastBlur + */ + public static class FastBlur { + + public static Bitmap doBlur(Bitmap sentBitmap, int radius, + boolean canReuseInBitmap) { + Bitmap bitmap; + if (canReuseInBitmap) { + bitmap = sentBitmap; + } else { + bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); + } + + if (radius < 1) { + return (null); + } + + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + + int[] pix = new int[w * h]; + bitmap.getPixels(pix, 0, w, 0, 0, w, h); + + int wm = w - 1; + int hm = h - 1; + int wh = w * h; + int div = radius + radius + 1; + + int r[] = new int[wh]; + int g[] = new int[wh]; + int b[] = new int[wh]; + int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; + int vmin[] = new int[Math.max(w, h)]; + + int divsum = (div + 1) >> 1; + divsum *= divsum; + int dv[] = new int[256 * divsum]; + for (i = 0; i < 256 * divsum; i++) { + dv[i] = (i / divsum); + } + + yw = yi = 0; + + int[][] stack = new int[div][3]; + int stackpointer; + int stackstart; + int[] sir; + int rbs; + int r1 = radius + 1; + int routsum, goutsum, boutsum; + int rinsum, ginsum, binsum; + + for (y = 0; y < h; y++) { + rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; + for (i = -radius; i <= radius; i++) { + p = pix[yi + Math.min(wm, Math.max(i, 0))]; + sir = stack[i + radius]; + sir[0] = (p & 0xff0000) >> 16; + sir[1] = (p & 0x00ff00) >> 8; + sir[2] = (p & 0x0000ff); + rbs = r1 - Math.abs(i); + rsum += sir[0] * rbs; + gsum += sir[1] * rbs; + bsum += sir[2] * rbs; + if (i > 0) { + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + } else { + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + } + } + stackpointer = radius; + + for (x = 0; x < w; x++) { + + r[yi] = dv[rsum]; + g[yi] = dv[gsum]; + b[yi] = dv[bsum]; + + rsum -= routsum; + gsum -= goutsum; + bsum -= boutsum; + + stackstart = stackpointer - radius + div; + sir = stack[stackstart % div]; + + routsum -= sir[0]; + goutsum -= sir[1]; + boutsum -= sir[2]; + + if (y == 0) { + vmin[x] = Math.min(x + radius + 1, wm); + } + p = pix[yw + vmin[x]]; + + sir[0] = (p & 0xff0000) >> 16; + sir[1] = (p & 0x00ff00) >> 8; + sir[2] = (p & 0x0000ff); + + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + + rsum += rinsum; + gsum += ginsum; + bsum += binsum; + + stackpointer = (stackpointer + 1) % div; + sir = stack[(stackpointer) % div]; + + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + + rinsum -= sir[0]; + ginsum -= sir[1]; + binsum -= sir[2]; + + yi++; + } + yw += w; + } + for (x = 0; x < w; x++) { + rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; + yp = -radius * w; + for (i = -radius; i <= radius; i++) { + yi = Math.max(0, yp) + x; + + sir = stack[i + radius]; + + sir[0] = r[yi]; + sir[1] = g[yi]; + sir[2] = b[yi]; + + rbs = r1 - Math.abs(i); + + rsum += r[yi] * rbs; + gsum += g[yi] * rbs; + bsum += b[yi] * rbs; + + if (i > 0) { + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + } else { + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + } + + if (i < hm) { + yp += w; + } + } + yi = x; + stackpointer = radius; + for (y = 0; y < h; y++) { + // Preserve alpha channel: ( 0xff000000 & pix[yi] ) + pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) + | (dv[gsum] << 8) | dv[bsum]; + + rsum -= routsum; + gsum -= goutsum; + bsum -= boutsum; + + stackstart = stackpointer - radius + div; + sir = stack[stackstart % div]; + + routsum -= sir[0]; + goutsum -= sir[1]; + boutsum -= sir[2]; + + if (x == 0) { + vmin[y] = Math.min(y + r1, hm) * w; + } + p = x + vmin[y]; + + sir[0] = r[p]; + sir[1] = g[p]; + sir[2] = b[p]; + + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + + rsum += rinsum; + gsum += ginsum; + bsum += binsum; + + stackpointer = (stackpointer + 1) % div; + sir = stack[stackpointer]; + + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + + rinsum -= sir[0]; + ginsum -= sir[1]; + binsum -= sir[2]; + + yi += w; + } + } + + bitmap.setPixels(pix, 0, w, 0, 0, w, h); + + return (bitmap); + } + } + /** + * 截屏 + * @param view + * @return + */ + public static Bitmap getViewScreenshot(View view){ + if (view == null) + return null; + view.setDrawingCacheEnabled(true); + view.buildDrawingCache(); + int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + view.measure(measureSpec, measureSpec); + + if (view.getMeasuredWidth()<=0 || view.getMeasuredHeight()<=0) { + return null; + } + Bitmap bm; + try { + bm = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); + }catch (OutOfMemoryError e){ + System.gc(); + try { + bm = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); + }catch (OutOfMemoryError ee){ + return null; + } + } + Canvas bigCanvas = new Canvas(bm); + Paint paint = new Paint(); + int iHeight = bm.getHeight(); + bigCanvas.drawBitmap(bm, 0, iHeight, paint); + view.draw(bigCanvas); + return bm; + } + public static Bitmap getViewScreenshot(Activity context){ + View view = context.getWindow().getDecorView(); + Bitmap bm = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bm); + view.draw(canvas); + return bm; + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/base/util/graphics/MyDiskCache.java b/lib_common/src/main/java/com/qunar/im/base/util/graphics/MyDiskCache.java new file mode 100644 index 0000000..05ce224 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/base/util/graphics/MyDiskCache.java @@ -0,0 +1,183 @@ +package com.qunar.im.base.util.graphics; + +import android.text.TextUtils; + +import com.facebook.common.util.SecureHashUtil; +import com.qunar.im.base.common.QunarIMApp; +import com.qunar.im.base.util.FileUtils; +import com.qunar.im.base.util.LogUtil; +import com.qunar.im.common.CommonConfig; + +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Locale; +import java.util.UUID; + +/** + * Created by xinbo.wang on 2015/5/4. + */ +public class MyDiskCache +{ + private static final String DEFAULT_DISK_STORAGE_VERSION_PREFIX = "v2"; + + /* + * We use sharding to avoid Samsung's RFS problem, and to avoid having one big directory + * containing thousands of files. + * This number of directories is large enough based on the following reasoning: + * - high usage: 150 photos per day + * - such usage will hit Samsung's 6,500 photos cap in 43 days + * - 100 buckets will extend that period to 4,300 days which is 11.78 years + */ + private static final int SHARDING_BUCKET_COUNT = 100; + private static final String CONTENT_FILE_EXTENSION = ".cnt"; + + public static final String TEMP_VOICE_FILE_NAME = "qvoice.tmp"; + + public static final String CACHE_LOG_DIR = MyDiskCache.getDirectory().getAbsolutePath() + "/logs/" + (CommonConfig.isQtalk?"qtalk":"qchat"); + + public static File getDirectory() { + File file = FileUtils.getFilesDir(QunarIMApp.getContext()); + file = new File(file,"qtalk_cache"); + if(!file.exists()) + { + file.mkdirs(); + } + return file; + } + + public static File getFile(String imageUri) + { + if(TextUtils.isEmpty(imageUri)) + return new File(UUID.randomUUID().toString()+".qtmp"); + File dir = getDirectory(); + String fileName = null; + + try { + String resourceId= SecureHashUtil.makeSHA1HashBase64(imageUri.getBytes("UTF-8")); + dir = new File(dir,getSubdirectory(resourceId)); + if(!dir.exists()){ + dir.mkdirs(); + } + fileName = getFileNameByURL(resourceId); + } catch (UnsupportedEncodingException e) { + LogUtil.e("MyDisk","error",e); + fileName = "empty.tmp"; + } + File file = new File(dir, fileName); + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + return file; + } + + private static String getFileNameByURL(String resourceId) throws UnsupportedEncodingException { + /*String fileName = null; + int len = imageUri.length(); + if(imageUri.indexOf("file=")>0) + { + + if(imageUri.indexOf("&")>0) + { + len = imageUri.indexOf("&"); + } + fileName = imageUri.substring(imageUri.indexOf("=") + 1,len); + } + else { + if(imageUri.indexOf("?")>0) + { + len = imageUri.indexOf("?"); + } + fileName = imageUri.substring(imageUri.lastIndexOf("/")+1,len); + } + int idx = fileName.indexOf("/"); + if(idx>0) + { + fileName = fileName.substring(idx+1,fileName.length()); + }*/ + String fileName = resourceId +CONTENT_FILE_EXTENSION; //BinaryUtil.MD5(imageUri); + return fileName; + } + + private static String getSubdirectory(String resourceId) { + String subdirectory = String.valueOf(Math.abs(resourceId.hashCode() % SHARDING_BUCKET_COUNT)); + return getVersionSubdirectoryName(100)+"/"+subdirectory; + } + + static String getVersionSubdirectoryName(int version) { + return String.format( + (Locale) null, + "%s.ols%d.%d", + DEFAULT_DISK_STORAGE_VERSION_PREFIX, + SHARDING_BUCKET_COUNT, + version); + } + + public static File getSmallDirectory() { + File file = FileUtils.getFilesDir(QunarIMApp.getContext()); + file = new File(file,"small_icon"); + if(!file.exists()) + { + file.mkdirs(); + } + return file; + } + + public static File getSmallFile(String imgUrl) + { + File dir =getSmallDirectory(); + String fileName = null; + + try { + String resourceId= SecureHashUtil.makeSHA1HashBase64(imgUrl.getBytes("UTF-8")); + dir = new File(dir,getSubdirectory(resourceId)); + fileName = getFileNameByURL(resourceId); + } catch (UnsupportedEncodingException e) { + LogUtil.e("MyDisk","error",e); + fileName = "empty.tmp"; + } + return new File(dir, fileName); + } + + public static File getVoiceDir() + { + File internalDir = QunarIMApp.getContext().getFilesDir(); + internalDir = new File(internalDir,"qvoice"); + if(!internalDir.exists()) + { + internalDir.mkdirs(); + } + return internalDir; + } + + public static File getTempDir() + { + File tempDir = FileUtils.getFilesDir(QunarIMApp.getContext()); + tempDir = new File(tempDir,"qtemp"); + if(!tempDir.exists()) + { + tempDir.mkdirs(); + } + return tempDir; + } + + public static File getVoiceFile(String fileName) + { + return new File(getVoiceDir().getAbsolutePath()+File.separator+fileName); + } + + public static File getTempFile(String fileName) + { + return new File(getTempDir(),fileName); + } + + public static File[] getAllCacheDir() + { + File[] files = new File[2]; + files[0] = getDirectory(); + files[1] = getVoiceDir(); + return files; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/cache/IMUserCacheManager.java b/lib_common/src/main/java/com/qunar/im/cache/IMUserCacheManager.java new file mode 100644 index 0000000..563cde5 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/cache/IMUserCacheManager.java @@ -0,0 +1,102 @@ +package com.qunar.im.cache; + +import android.content.Context; +import android.content.SharedPreferences; +import com.qunar.im.core.utils.GlobalConfigManager; +import com.qunar.im.base.util.IMUserDefaults; +import org.json.JSONObject; + +/** + * Created by may on 2017/6/28. + */ + +public class IMUserCacheManager { + private static volatile IMUserCacheManager defaultInstance; + private static final String filenameDefault = "default.pref"; + private Context context; + private SharedPreferences prefs; + + protected IMUserCacheManager(Context context) { + this.context = context; + prefs = context.getSharedPreferences(filenameDefault, 0); + } + + public static IMUserCacheManager getInstance() { + if (defaultInstance == null) { + synchronized (IMUserCacheManager.class) { + + if (defaultInstance == null) { + defaultInstance = new IMUserCacheManager(GlobalConfigManager.getGlobalContext()); + } + } + } + return defaultInstance; + } + + public void putConfig(Context context, String key, String value) { + IMUserDefaults.getStandardUserDefaults().newEditor(context) + .putObject(key, value) + .synchronize(); + } + + public void putConfig(Context context, String key, long value) { + IMUserDefaults.getStandardUserDefaults().newEditor(context) + .putObject(key, value) + .synchronize(); + } + + public void putConfig(Context context, String key, int value) { + IMUserDefaults.getStandardUserDefaults().newEditor(context) + .putObject(key, value) + .synchronize(); + } + + public void putConfig(final Context context, final String key, final JSONObject value) { + IMUserDefaults.getStandardUserDefaults().newEditor(context) + .putObject(key, value) + .synchronize(); + } + + public void putConfig(String key, JSONObject jsonObject) { + putConfig(context, key, jsonObject.toString()); + } + + public void putConfig(String key, String value) { + putConfig(context, key, value); + } + + public void putConfig(String key, long value) { + putConfig(context, key, value); + } + + public void putConfig(String key, int value) { + putConfig(context, key, value); + } + + public String getStringConfig(String key) { + return IMUserDefaults.getStandardUserDefaults().getStringValue(context, key); + } + + public int getIntConfig(String key) { + return IMUserDefaults.getStandardUserDefaults().getIntValue(context, key, 0); + } + + + public JSONObject getJsonConfig(String key) { + return null; + } + + public long getLongConfig(String key) { + return 0; + } + + public double getDoubleConfig(String key) { + return 0.0; + } + + public void removeConfig(String key) { + + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/common/AudioRecordFunc.java b/lib_common/src/main/java/com/qunar/im/common/AudioRecordFunc.java new file mode 100644 index 0000000..65f8119 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/common/AudioRecordFunc.java @@ -0,0 +1,283 @@ +package com.qunar.im.common; + +import android.media.AmrInputStream; +import android.media.AudioFormat; +import android.media.AudioRecord; +import android.media.MediaRecorder; +import android.os.Build; + +import com.qunar.im.base.common.BackgroundExecutor; +import com.qunar.im.base.util.LogUtil; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; + +import io.kvh.media.amr.AmrEncoder; +import io.kvh.media.amr.Pcm2Wav; + +/** + * Created by huayu.chen on 2016/6/16. + */ +public class AudioRecordFunc { + private final static String PCM_FILE_PATH = "PCM.tmp"; + private final static String WAV_FILE_PATH = "WAV.tmp"; + //采用频率 + public final static int AUDIO_SAMPLE_RATE = 8000; //44.1KHz,普遍使用的频率 + // 缓冲区字节大小 + private int bufferSizeInBytes = 0; + + private AudioRecord audioRecord; + //private boolean isRecord = false;// 设置正在录制的状态 + + private volatile static AudioRecordFunc mInstance; + + private int maxAmplitude = 0; + + File rawFile; + File wavFile; + File amrFile; + + final private static byte[] header = new byte[]{0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A}; + + private AudioRecordFunc() { + + } + + + public synchronized static AudioRecordFunc getInstance() { + if (mInstance == null) { + mInstance = new AudioRecordFunc(); + } + return mInstance; + } + + public int getMaxAmplitude() + { + return maxAmplitude; + } + + + public void prepareFile(String filePath) { + amrFile = new File(filePath); + rawFile = new File(CommonConfig.globalContext.getCacheDir(),PCM_FILE_PATH); + wavFile = new File(CommonConfig.globalContext.getCacheDir(),WAV_FILE_PATH); + if(rawFile.exists()) rawFile.delete(); + if(wavFile.exists()) wavFile.delete(); + try { + amrFile.createNewFile(); + rawFile.createNewFile(); + wavFile.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void startRecordAndFile(String filePath) { + prepareFile(filePath); + creatAudioRecord(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + setNoiseSuppress(audioRecord.getAudioSessionId()); + } + audioRecord.startRecording(); + // 开启音频文件写入线程 + BackgroundExecutor.execute(new Runnable() { + @Override + public void run() { + writeDateTOFile(); + } + }); + } + + private void setNoiseSuppress(int sessionId) { + NoiseSuppressorHelper.setAcousticEchoCanceler(sessionId); + NoiseSuppressorHelper.setAutomaticGainControl(sessionId); + NoiseSuppressorHelper.setNoiseSuppressor(sessionId); + } + + public void cancelRecord() + { + if (audioRecord != null) { + audioRecord.stop(); + audioRecord.release();//释放资源 + audioRecord = null; + } + rawFile.delete(); + wavFile.delete(); + amrFile.delete(); + } + + public void stopRecordAndFile() { + if (audioRecord != null) { + LogUtil.d("stopRecord"); + audioRecord.stop(); + audioRecord.release();//释放资源 + OutputStream out = null; + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){//7.0及以上 + pcm2wal(); + convertAMR(wavFile,amrFile); + }else { + out = new BufferedOutputStream(new FileOutputStream(amrFile, true)); + out.write(0x23); + out.write(0x21); + out.write(0x41); + out.write(0x4D); + out.write(0x52); + out.write(0x0A); + pcm2amr(out,rawFile.getAbsolutePath()); + } + } catch (IOException e) { + e.printStackTrace(); + } + finally { + if(out!=null) try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + rawFile.delete(); + } + audioRecord = null; + } + } + + + private void creatAudioRecord() { + // 获得缓冲区字节大小 + bufferSizeInBytes = AudioRecord.getMinBufferSize(AUDIO_SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); + if(bufferSizeInBytes% AmrInputStream.SAMPLES_PER_FRAME>0) bufferSizeInBytes = (bufferSizeInBytes/ AmrInputStream.SAMPLES_PER_FRAME+1)* AmrInputStream.SAMPLES_PER_FRAME; + // 创建AudioRecord对象 + audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, AUDIO_SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes * 2); + } + + /** + * 这里将数据写入文件,但是并不能播放,因为AudioRecord获得的音频是原始的裸音频, + * 如果需要播放就必须加入一些格式或者编码的头信息。但是这样的好处就是你可以对音频的 裸数据进行处理,比如你要做一个爱说话的TOM + * 猫在这里就进行音频的处理,然后重新封装 所以说这样得到的音频比较容易做一些音频的处理。 + */ + + private void writeDateTOFile() { + // new一个short数组用来存一些字节数据,大小为缓冲区大小 + short[] audiodata = new short[bufferSizeInBytes]; + int readsize = 0; + while (AudioRecord.RECORDSTATE_RECORDING == audioRecord.getRecordingState()) { + readsize =audioRecord.read(audiodata, readsize, bufferSizeInBytes); + if(readsize>0){ + if(readsize>2) { + int ab = (audiodata[0]&0xff)<<8|audiodata[1]; + maxAmplitude = Math.abs(ab); + } + OutputStream outputStream = null; + try { + outputStream = new BufferedOutputStream(new FileOutputStream(rawFile,true)); + outputStream.write(short2ByteArray(audiodata)); + outputStream.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + finally { + if(outputStream!=null) + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + if(readsize < 0) readsize = 0; + } + } + + public byte[] short2ByteArray(short[] shorts) { + byte[] bytes = new byte[shorts.length * 2]; + for (int i = 0; i < shorts.length; i++) { + byte high = (byte) (shorts[i] >> 8); + byte low = (byte) shorts[i]; + bytes[i * 2] = low; + bytes[i * 2 + 1] = high; + } + return bytes; + } + + private void pcm2wal(){ + Pcm2Wav tool = new Pcm2Wav(); + try { + tool.convertAudioFiles(rawFile,wavFile); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public void pcm2amr(OutputStream out,String wavFileName) throws IOException { + InputStream inStream = new FileInputStream(wavFileName);//这个是SDcard的wav文件路径 + AmrInputStream aStream = new AmrInputStream(inStream); + try { + byte[] x = new byte[1024]; + int len=0; + while ((len = aStream.read(x)) > 0) { + out.write(x, 0, len); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + finally { + aStream.close(); + out.close(); + } + } + + private void convertAMR(File inFile,File outFile){ + try { + AmrEncoder.init(0); + List armsList = new ArrayList<>(); + FileInputStream inputStream = new FileInputStream(inFile); + FileOutputStream outStream = new FileOutputStream(outFile); + //写入Amr头文件 + outStream.write(header); + + int byteSize = 320; + byte[] buff = new byte[byteSize]; + int rc = 0; + while ((rc = inputStream.read(buff, 0, byteSize)) > 0) { + short[] shortTemp = new short[160]; + //将byte[]转换成short[] + ByteBuffer.wrap(buff).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shortTemp); + //将short[]转换成byte[] +// ByteBuffer.wrap(buff).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().put(shortTemp); + armsList.add(shortTemp); + } + + for (int i = 0; i < armsList.size(); i++) { + int size = armsList.get(i).length; + byte[] encodedData = new byte[size*2]; + int len = AmrEncoder.encode(AmrEncoder.Mode.MR122.ordinal(), armsList.get(i), encodedData); + if (len>0) { + byte[] tempBuf = new byte[len]; + System.arraycopy(encodedData, 0, tempBuf, 0, len); + outStream.write(tempBuf, 0, len); + } + } +// AmrEncoder.reset(); + AmrEncoder.exit(); + + outStream.close(); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/common/MyMediaPlayer.java b/lib_common/src/main/java/com/qunar/im/common/MyMediaPlayer.java new file mode 100644 index 0000000..a0af814 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/common/MyMediaPlayer.java @@ -0,0 +1,34 @@ +package com.qunar.im.common; + +import android.media.MediaPlayer; + + +/** + * Created by xinbo.wang on 16-9-21 + */ +public class MyMediaPlayer extends MediaPlayer { + private volatile static MyMediaPlayer instance; + + protected MyMediaPlayer() + { + } + + + + public static MyMediaPlayer getInstance() { + if(instance == null) + { + instance = createInstance(); + } + return instance; + } + + protected static synchronized MyMediaPlayer createInstance() + { + if(instance==null) + { + instance = new MyMediaPlayer(); + } + return instance; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/common/NoiseSuppressorHelper.java b/lib_common/src/main/java/com/qunar/im/common/NoiseSuppressorHelper.java new file mode 100644 index 0000000..8021df9 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/common/NoiseSuppressorHelper.java @@ -0,0 +1,40 @@ +package com.qunar.im.common; + +import android.media.audiofx.AcousticEchoCanceler; +import android.media.audiofx.AutomaticGainControl; +import android.media.audiofx.NoiseSuppressor; +import android.os.Build; + +/** + * Created by huayu.chen on 2016/6/16. + */ +public class NoiseSuppressorHelper { + //1)判断当前机型是否支持NS,如果支持设置NS(噪声抑制器) + public static void setNoiseSuppressor(int audioSession) { + NoiseSuppressor noiseSuppressor; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && + NoiseSuppressor.isAvailable()) { + noiseSuppressor = NoiseSuppressor.create(audioSession); + if(noiseSuppressor!=null)noiseSuppressor.setEnabled(true); + } + } + + //2)判断当前机型是否支持AES,如果支持设置AES(回声消除器) + public static void setAcousticEchoCanceler(int audioSession) { + AcousticEchoCanceler acousticEchoCanceler; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN&& + AcousticEchoCanceler.isAvailable()) { + acousticEchoCanceler = AcousticEchoCanceler.create(audioSession); + if(acousticEchoCanceler!=null)acousticEchoCanceler.setEnabled(true); + } + } + //3)判断当前机型是否支持AGC,如果支持设置AGC(自动增益控制) + public static void setAutomaticGainControl(int audioSession) { + AutomaticGainControl automaticGainControl; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN&& + AutomaticGainControl.isAvailable()) { + automaticGainControl = AutomaticGainControl.create(audioSession); + if(automaticGainControl!=null)automaticGainControl.setEnabled(true); + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/core/enums/LoginStatus.java b/lib_common/src/main/java/com/qunar/im/core/enums/LoginStatus.java new file mode 100644 index 0000000..b3edc7b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/enums/LoginStatus.java @@ -0,0 +1,15 @@ +package com.qunar.im.core.enums; + +/** + * Created by may on 2017/7/12. + */ + +public enum LoginStatus { + Logout, + Logining, + Updating, + Login, + NotNetwork, + NetworkNotWork, + ReLogining, +} diff --git a/lib_common/src/main/java/com/qunar/im/core/enums/MessageState.java b/lib_common/src/main/java/com/qunar/im/core/enums/MessageState.java new file mode 100644 index 0000000..c64ae2f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/enums/MessageState.java @@ -0,0 +1,9 @@ +package com.qunar.im.core.enums; + +/** + * Created by may on 2017/7/13. + */ + +public enum MessageState { + Failed, didRead, Waiting +} diff --git a/lib_common/src/main/java/com/qunar/im/core/imgtool/Checker.java b/lib_common/src/main/java/com/qunar/im/core/imgtool/Checker.java new file mode 100644 index 0000000..47a2e61 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/imgtool/Checker.java @@ -0,0 +1,64 @@ +package com.qunar.im.core.imgtool; + +import android.text.TextUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +class Checker { + private static List format = new ArrayList<>(); + private static final String JPG = "jpg"; + private static final String JPEG = "jpeg"; + private static final String PNG = "png"; + private static final String WEBP = "webp"; + private static final String GIF = "gif"; + + static { + format.add(JPG); + format.add(JPEG); + format.add(PNG); + format.add(WEBP); + format.add(GIF); + } + + static boolean isImage(String path) { + if (TextUtils.isEmpty(path)) { + return false; + } + + String suffix = path.substring(path.lastIndexOf(".") + 1, path.length()); + return format.contains(suffix.toLowerCase()); + } + + static boolean isJPG(String path) { + if (TextUtils.isEmpty(path)) { + return false; + } + + String suffix = path.substring(path.lastIndexOf("."), path.length()).toLowerCase(); + return suffix.contains(JPG) || suffix.contains(JPEG); + } + + static String checkSuffix(String path) { + if (TextUtils.isEmpty(path)) { + return ".jpg"; + } + + return path.substring(path.lastIndexOf("."), path.length()); + } + + static boolean isNeedCompress(int leastCompressSize, String path) { + if (leastCompressSize > 0) { + File source = new File(path); + if (!source.exists()) { + return false; + } + + if (source.length() <= (leastCompressSize << 10)) { + return false; + } + } + return true; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/core/imgtool/Engine.java b/lib_common/src/main/java/com/qunar/im/core/imgtool/Engine.java new file mode 100644 index 0000000..c018eee --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/imgtool/Engine.java @@ -0,0 +1,106 @@ +package com.qunar.im.core.imgtool; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Matrix; +import android.media.ExifInterface; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * Responsible for starting compress and managing active and cached resources. + */ +class Engine { + private ExifInterface srcExif; + private String srcImg; + private File tagImg; + private int srcWidth; + private int srcHeight; + + Engine(String srcImg, File tagImg) throws IOException { + if (Checker.isJPG(srcImg)) { + this.srcExif = new ExifInterface(srcImg); + } + this.tagImg = tagImg; + this.srcImg = srcImg; + + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + options.inSampleSize = 1; + + BitmapFactory.decodeFile(srcImg, options); + this.srcWidth = options.outWidth; + this.srcHeight = options.outHeight; + } + + private int computeSize() { + srcWidth = srcWidth % 2 == 1 ? srcWidth + 1 : srcWidth; + srcHeight = srcHeight % 2 == 1 ? srcHeight + 1 : srcHeight; + + int longSide = Math.max(srcWidth, srcHeight); + int shortSide = Math.min(srcWidth, srcHeight); + + float scale = ((float) shortSide / longSide); + if (scale <= 1 && scale > 0.5625) { + if (longSide < 1664) { + return 1; + } else if (longSide >= 1664 && longSide < 4990) { + return 2; + } else if (longSide > 4990 && longSide < 10240) { + return 4; + } else { + return longSide / 1280 == 0 ? 1 : longSide / 1280; + } + } else if (scale <= 0.5625 && scale > 0.5) { + return longSide / 1280 == 0 ? 1 : longSide / 1280; + } else { + return (int) Math.ceil(longSide / (1280.0 / scale)); + } + } + + private Bitmap rotatingImage(Bitmap bitmap) { + if (srcExif == null) return bitmap; + + Matrix matrix = new Matrix(); + int angle = 0; + int orientation = srcExif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); + switch (orientation) { + case ExifInterface.ORIENTATION_ROTATE_90: + angle = 90; + break; + case ExifInterface.ORIENTATION_ROTATE_180: + angle = 180; + break; + case ExifInterface.ORIENTATION_ROTATE_270: + angle = 270; + break; + } + + matrix.postRotate(angle); + + return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + } + + File compress() throws IOException { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = computeSize(); + + Bitmap tagBitmap = BitmapFactory.decodeFile(srcImg, options); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + tagBitmap = rotatingImage(tagBitmap); + tagBitmap.compress(Bitmap.CompressFormat.JPEG, 60, stream); + tagBitmap.recycle(); + + FileOutputStream fos = new FileOutputStream(tagImg); + fos.write(stream.toByteArray()); + fos.flush(); + fos.close(); + stream.close(); + + return tagImg; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/core/imgtool/Luban.java b/lib_common/src/main/java/com/qunar/im/core/imgtool/Luban.java new file mode 100644 index 0000000..2b54bf7 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/imgtool/Luban.java @@ -0,0 +1,262 @@ +package com.qunar.im.core.imgtool; + +import android.content.Context; +import android.os.AsyncTask; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import androidx.annotation.Nullable; +import androidx.annotation.UiThread; +import androidx.annotation.WorkerThread; +import android.text.TextUtils; +import android.util.Log; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class Luban implements Handler.Callback { + private static final String TAG = "Luban"; + private static final String DEFAULT_DISK_CACHE_DIR = "luban_disk_cache"; + + private static final int MSG_COMPRESS_SUCCESS = 0; + private static final int MSG_COMPRESS_START = 1; + private static final int MSG_COMPRESS_ERROR = 2; + + private String mTargetDir; + private List mPaths; + private int mLeastCompressSize; + private OnCompressListener mCompressListener; + + private Handler mHandler; + + private Luban(Builder builder) { + this.mPaths = builder.mPaths; + this.mTargetDir = builder.mTargetDir; + this.mCompressListener = builder.mCompressListener; + this.mLeastCompressSize = builder.mLeastCompressSize; + mHandler = new Handler(Looper.getMainLooper(), this); + } + + public static Builder with(Context context) { + return new Builder(context); + } + + /** + * Returns a mFile with a cache audio name in the private cache directory. + * + * @param context + * A context. + */ + private File getImageCacheFile(Context context, String suffix) { + if (TextUtils.isEmpty(mTargetDir)) { + mTargetDir = getImageCacheDir(context).getAbsolutePath(); + } + + String cacheBuilder = mTargetDir + "/" + + System.currentTimeMillis() + + (int) (Math.random() * 1000) + + (TextUtils.isEmpty(suffix) ? ".jpg" : suffix); + + return new File(cacheBuilder); + } + + /** + * Returns a directory with a default name in the private cache directory of the application to + * use to store retrieved audio. + * + * @param context + * A context. + * + * @see #getImageCacheDir(Context, String) + */ + @Nullable + private File getImageCacheDir(Context context) { + return getImageCacheDir(context, DEFAULT_DISK_CACHE_DIR); + } + + /** + * Returns a directory with the given name in the private cache directory of the application to + * use to store retrieved media and thumbnails. + * + * @param context + * A context. + * @param cacheName + * The name of the subdirectory in which to store the cache. + * + * @see #getImageCacheDir(Context) + */ + @Nullable + private File getImageCacheDir(Context context, String cacheName) { + File cacheDir = context.getExternalCacheDir(); + if (cacheDir != null) { + File result = new File(cacheDir, cacheName); + if (!result.mkdirs() && (!result.exists() || !result.isDirectory())) { + // File wasn't able to create a directory, or the result exists but not a directory + return null; + } + return result; + } + if (Log.isLoggable(TAG, Log.ERROR)) { + Log.e(TAG, "default disk cache dir is null"); + } + return null; + } + + /** + * start asynchronous compress thread + */ + @UiThread + private void launch(final Context context) { + if (mPaths == null || mPaths.size() == 0 && mCompressListener != null) { + mCompressListener.onError(new NullPointerException("image file cannot be null")); + } + + Iterator iterator = mPaths.iterator(); + while (iterator.hasNext()) { + final String path = iterator.next(); + if (Checker.isImage(path)) { + AsyncTask.SERIAL_EXECUTOR.execute(new Runnable() { + @Override + public void run() { + try { + mHandler.sendMessage(mHandler.obtainMessage(MSG_COMPRESS_START)); + + File result = Checker.isNeedCompress(mLeastCompressSize, path) ? + new Engine(path, getImageCacheFile(context, Checker.checkSuffix(path))).compress() : + new File(path); + + mHandler.sendMessage(mHandler.obtainMessage(MSG_COMPRESS_SUCCESS, result)); + } catch (IOException e) { + mHandler.sendMessage(mHandler.obtainMessage(MSG_COMPRESS_ERROR, e)); + } + } + }); + } else { + Log.e(TAG, "can not read the path : " + path); + } + iterator.remove(); + } + } + + /** + * start compress and return the mFile + */ + @WorkerThread + private File get(String path, Context context) throws IOException { + return new Engine(path, getImageCacheFile(context, Checker.checkSuffix(path))).compress(); + } + + @WorkerThread + private List get(Context context) throws IOException { + List results = new ArrayList<>(); + Iterator iterator = mPaths.iterator(); + + while (iterator.hasNext()) { + String path = iterator.next(); + if (Checker.isImage(path)) { + results.add(new Engine(path, getImageCacheFile(context, Checker.checkSuffix(path))).compress()); + } + iterator.remove(); + } + + return results; + } + + @Override + public boolean handleMessage(Message msg) { + if (mCompressListener == null) return false; + + switch (msg.what) { + case MSG_COMPRESS_START: + mCompressListener.onStart(); + break; + case MSG_COMPRESS_SUCCESS: + mCompressListener.onSuccess((File) msg.obj); + break; + case MSG_COMPRESS_ERROR: + mCompressListener.onError((Throwable) msg.obj); + break; + } + return false; + } + + public static class Builder { + private Context context; + private String mTargetDir; + private List mPaths; + private int mLeastCompressSize = 100; + private OnCompressListener mCompressListener; + + Builder(Context context) { + this.context = context; + this.mPaths = new ArrayList<>(); + } + + private Luban build() { + return new Luban(this); + } + + public Builder load(File file) { + this.mPaths.add(file.getAbsolutePath()); + return this; + } + + public Builder load(String string) { + this.mPaths.add(string); + return this; + } + + public Builder load(List list) { + this.mPaths.addAll(list); + return this; + } + + public Builder putGear(int gear) { + return this; + } + + public Builder setCompressListener(OnCompressListener listener) { + this.mCompressListener = listener; + return this; + } + + public Builder setTargetDir(String targetDir) { + this.mTargetDir = targetDir; + return this; + } + + /** + * do not compress when the origin image file size less than one value + * + * @param size + * the value of file size, unit KB, default 100K + */ + public Builder ignoreBy(int size) { + this.mLeastCompressSize = size; + return this; + } + + /** + * begin compress image with asynchronous + */ + public void launch() { + build().launch(context); + } + + public File get(String path) throws IOException { + return build().get(path, context); + } + + /** + * begin compress image with synchronize + * + * @return the thumb image file list + */ + public List get() throws IOException { + return build().get(context); + } + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/core/imgtool/OnCompressListener.java b/lib_common/src/main/java/com/qunar/im/core/imgtool/OnCompressListener.java new file mode 100644 index 0000000..4fc44ad --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/imgtool/OnCompressListener.java @@ -0,0 +1,21 @@ +package com.qunar.im.core.imgtool; + +import java.io.File; + +public interface OnCompressListener { + + /** + * Fired when the compression is started, override to handle in your own code + */ + void onStart(); + + /** + * Fired when a compression returns successfully, override to handle in your own code + */ + void onSuccess(File file); + + /** + * Fired when a compression fails to complete, override to handle in your own code + */ + void onError(Throwable e); +} diff --git a/lib_common/src/main/java/com/qunar/im/core/intf/IQuery.java b/lib_common/src/main/java/com/qunar/im/core/intf/IQuery.java new file mode 100644 index 0000000..1a75e8c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/intf/IQuery.java @@ -0,0 +1,12 @@ +package com.qunar.im.core.intf; + +import android.database.Cursor; + +/** + * Created by froyomu on 2019/1/15 + * + * Describe: + */ +public interface IQuery { + Object onQuery(Cursor cursor); +} diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMCoreManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMCoreManager.java index 3dbcba0..ba04580 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/IMCoreManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMCoreManager.java @@ -5,8 +5,7 @@ import com.orhanobut.logger.Logger; import com.qunar.im.base.util.Constants; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.data.cache.IMUserCacheManager; -import com.qunar.im.protobuf.common.ParamIsEmptyException; +import com.qunar.im.cache.IMUserCacheManager; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.utils.StringUtils; import com.qunar.im.utils.DeviceInfoManager; @@ -26,7 +25,7 @@ class Define { public static final String MyHeaderImageSrc = "kMyHeaderImageSrc"; } - public void login(String userName, String password) throws IOException, ParamIsEmptyException { + public void login(String userName, String password) throws IOException { Logger.i("将登陆数据放入相对应内存中,username:"+userName+",password:"+password); DeviceInfoManager.getInstance().setUserName(userName.toLowerCase()); IMUserCacheManager.getInstance().putConfig(Constants.Preferences.lastuserid, userName.toLowerCase()); diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMDatabaseManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMDatabaseManager.java index 77acbdb..c248836 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/IMDatabaseManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMDatabaseManager.java @@ -6,6 +6,7 @@ import android.util.LruCache; import com.google.gson.reflect.TypeToken; +import com.google.protobuf.InvalidProtocolBufferException; import com.orhanobut.logger.Logger; import com.qunar.im.base.common.ConversitionType; import com.qunar.im.base.jsonbean.AtInfo; @@ -26,20 +27,24 @@ import com.qunar.im.base.jsonbean.NewRemoteConfig; import com.qunar.im.base.jsonbean.QuickReplyResult; import com.qunar.im.base.jsonbean.RNSearchData; +import com.qunar.im.base.module.CityLocal; +import com.qunar.im.base.module.FoundConfiguration; +import com.qunar.im.base.module.MedalListResponse; +import com.qunar.im.base.module.MedalSingleUserStatusResponse; +import com.qunar.im.base.module.MedalUserStatusResponse; +import com.qunar.im.base.module.SearchKeyData; +import com.qunar.im.base.module.UserHaveMedalStatus; +import com.qunar.im.base.module.WorkWorldAtShowItem; +import com.qunar.im.base.module.WorkWorldDeleteResponse; import com.qunar.im.base.module.AreaLocal; import com.qunar.im.base.module.AtData; import com.qunar.im.base.module.CalendarTrip; -import com.qunar.im.base.module.CityLocal; import com.qunar.im.base.module.CollectionConversation; import com.qunar.im.base.module.DepartmentItem; -import com.qunar.im.base.module.FoundConfiguration; import com.qunar.im.base.module.GroupMember; import com.qunar.im.base.module.IMGroup; import com.qunar.im.base.module.IMMessage; import com.qunar.im.base.module.IMSessionList; -import com.qunar.im.base.module.MedalListResponse; -import com.qunar.im.base.module.MedalSingleUserStatusResponse; -import com.qunar.im.base.module.MedalUserStatusResponse; import com.qunar.im.base.module.MedalsInfo; import com.qunar.im.base.module.MucListResponse; import com.qunar.im.base.module.Nick; @@ -47,12 +52,8 @@ import com.qunar.im.base.module.PublishPlatformNews; import com.qunar.im.base.module.QuickReplyData; import com.qunar.im.base.module.RecentConversation; -import com.qunar.im.base.module.SearchKeyData; import com.qunar.im.base.module.SetLikeDataResponse; import com.qunar.im.base.module.UserConfigData; -import com.qunar.im.base.module.UserHaveMedalStatus; -import com.qunar.im.base.module.WorkWorldAtShowItem; -import com.qunar.im.base.module.WorkWorldDeleteResponse; import com.qunar.im.base.module.WorkWorldDetailsCommenData; import com.qunar.im.base.module.WorkWorldItem; import com.qunar.im.base.module.WorkWorldNewCommentBean; @@ -72,17 +73,17 @@ import com.qunar.im.core.helper.DatabaseHelper; import com.qunar.im.core.intf.IQuery; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.data.cache.IMUserCacheManager; +import com.qunar.im.cache.IMUserCacheManager; import com.qunar.im.log.LogConstans; import com.qunar.im.log.LogService; import com.qunar.im.log.QLog; import com.qunar.im.other.CacheDataType; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.entity.XMPPJID; import com.qunar.im.protobuf.utils.JSONUtils; import com.qunar.im.protobuf.utils.StringUtils; -import com.qunar.im.protobuf.utils.XmlUtils; +import com.qunar.im.utils.XmlUtils; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.MD5; import com.qunar.im.utils.QtalkStringUtils; diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMLogicManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMLogicManager.java index 3370c53..47fcab0 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/IMLogicManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMLogicManager.java @@ -11,6 +11,7 @@ import android.text.TextUtils; import android.util.LruCache; +import com.google.protobuf.InvalidProtocolBufferException; import com.orhanobut.logger.Logger; import com.qunar.im.base.common.BackgroundExecutor; import com.qunar.im.base.common.ConversitionType; @@ -38,6 +39,7 @@ import com.qunar.im.base.util.IMUserDefaults; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.other.QtalkSDK; @@ -45,19 +47,17 @@ import com.qunar.im.protobuf.Interfaces.IGroupEventReceivedDelegate; import com.qunar.im.protobuf.Interfaces.IIMEventReceivedDelegate; import com.qunar.im.protobuf.Interfaces.IMessageReceivedDelegate; -import com.qunar.im.protobuf.common.CurrentPreference; -import com.qunar.im.protobuf.common.ParamIsEmptyException; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.protobuf.dispatch.DispatcherQueue; import com.qunar.im.protobuf.entity.XMPPJID; -import com.qunar.im.protobuf.stream.PbAssemblyUtil; -import com.qunar.im.protobuf.stream.PbParseUtil; import com.qunar.im.protobuf.stream.ProtobufSocket; import com.qunar.im.protobuf.utils.StringUtils; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.MD5; +import com.qunar.im.utils.PbAssemblyUtil; +import com.qunar.im.utils.PbParseUtil; import com.qunar.im.utils.QtalkStringUtils; import org.json.JSONArray; @@ -74,6 +74,7 @@ import de.greenrobot.event.EventBus; /** + * 有反射调用reConnectionForce方法 不要修改类&包名 * Created by may on 2017/6/29. */ @@ -1082,7 +1083,7 @@ public String clearAndGetRemoteLoginKey() { } - public void login(String username, String password) throws IOException, ParamIsEmptyException { + public void login(String username, String password) throws IOException { if (_protocolType == IMProtocol.PROTOCOL_PROTOBUF) { _pbSocket.setHostName(QtalkNavicationService.getInstance().getXmppHost()); _pbSocket.setDomain(QtalkNavicationService.getInstance().getXmppdomain()); @@ -1518,7 +1519,7 @@ public void onChatMessageReceived(ProtoMessageOuterClass.ProtoMessage message) { return; } IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMMessageManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMMessageManager.java index 1cfccdb..92b4da4 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/IMMessageManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMMessageManager.java @@ -1,6 +1,6 @@ package com.qunar.im.core.manager; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.orhanobut.logger.Logger; @@ -15,6 +15,7 @@ import com.qunar.im.base.util.IMUserDefaults; import com.qunar.im.base.util.JsonUtils; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.enums.MessageState; import com.qunar.im.core.services.QtalkHttpService; import com.qunar.im.core.services.QtalkNavicationService; @@ -63,21 +64,21 @@ public void updateOfflineMessage() throws IOException, JSONException { long start = System.currentTimeMillis(); String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); String timeId = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) + "lastMessageId"); // long lastMessageTime = IMDatabaseManager.getInstance().getLastestMessageTime(); String timeStr = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) + "lastMessageTime"); latestGroupReadMarkTime = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -132,7 +133,7 @@ public void updateOfflineMessage() throws IOException, JSONException { if (chatRequest && groupRequest && headlineRequest && chatStateRequest) { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .removeObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .removeObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -140,7 +141,7 @@ public void updateOfflineMessage() throws IOException, JSONException { .synchronize(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .removeObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .removeObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -150,7 +151,7 @@ public void updateOfflineMessage() throws IOException, JSONException { } if(groupReadMarkRequest){ IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .removeObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .removeObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -348,7 +349,7 @@ private void getMucHistorysJSON(double lastMessageTime) throws JSONException, IO Logger.i("json群聊接口返回的数据size:" + mucJson.getData().size()); lastMessageTime = mucJson.getData().get(mucJson.getData().size() - 1).getT(); inputObject.put("time", lastMessageTime); - boolean success = IMDatabaseManager.getInstance().bulkInsertGroupHistoryFroJson(mucJson.getData(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId(),false); + boolean success = IMDatabaseManager.getInstance().bulkInsertGroupHistoryFroJson(mucJson.getData(), CurrentPreference.getInstance().getPreferenceUserId(),false); if (groupRequest) { groupRequest = success; } @@ -495,7 +496,7 @@ private void getHeadLineMessageJson(double lastMessageTime) throws JSONException Logger.i("json系统消息接口返回的数据size:" + chatJson.getData().size()); lastMessageTime = chatJson.getData().get(chatJson.getData().size() - 1).getT(); inputObject.put("time", lastMessageTime); - boolean success = IMDatabaseManager.getInstance().bulkInsertChatHistoryFroJson(chatJson.getData(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId(), false); + boolean success = IMDatabaseManager.getInstance().bulkInsertChatHistoryFroJson(chatJson.getData(), CurrentPreference.getInstance().getPreferenceUserId(), false); if (headlineRequest) { headlineRequest = success; } @@ -668,7 +669,7 @@ private void getChatHistorysJSON(double lastMessageTime) throws JSONException, I lastMessageTime = chatJson.getData().get(chatJson.getData().size() - 1).getT(); // stateTime = chatJson.getData().get(chatJson.getData().size() - 1).getMessage().getMsec_times(); inputObject.put("time", lastMessageTime); - boolean success = IMDatabaseManager.getInstance().bulkInsertChatHistoryFroJson(chatJson.getData(), com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId(), false); + boolean success = IMDatabaseManager.getInstance().bulkInsertChatHistoryFroJson(chatJson.getData(), CurrentPreference.getInstance().getPreferenceUserId(), false); if (chatRequest) { chatRequest = success; } diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMNetworkObserver.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMNetworkObserver.java new file mode 100644 index 0000000..6338bb8 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMNetworkObserver.java @@ -0,0 +1,88 @@ +package com.qunar.im.core.manager; + +import android.app.Service; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.IBinder; +import androidx.annotation.Nullable; + +/** + * Created by may on 2017/6/28. + */ + +class IMNetworkObserver extends Service { + private static IMNetworkObserver instance; + + private ConnectivityManager connectivityManager; + private NetworkInfo info; + public static final String ACTION_NO_CONNECTION = "ACTION_NO_CONNECTION"; //网络没有连接 + public static final String ACTION_CONNECTIONED = "ACTION_CONNECTIONED"; //网络连接 + + + private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + //当网络发生变化时 + String action = intent.getAction(); + if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { + connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + info = connectivityManager.getActiveNetworkInfo(); + if (info != null && info.isAvailable()) { + String name = info.getTypeName(); + + if (name.equals("WIFI")) { + // wifi 怎么着了应该是 + } else { + // 否则应该是4G神马的 + } + sendNetworkStateBroadCast(ACTION_CONNECTIONED); + } else { + sendNetworkStateBroadCast(ACTION_NO_CONNECTION); + } + } + } + }; + + + /** + * 发送本地广播通知网络状态 + * + * @param action + */ + private void sendNetworkStateBroadCast(String action) { +// if (TextUtils.equals(ACTION_CONNECTIONED, action) || +// TextUtils.equals(ACTION_NO_CONNECTION, action)) { +// Intent intent = new Intent(action); +// LocalBroadcastUtils.send(getApplication(), intent); +// } + } + + @Override + public void onCreate() { + super.onCreate(); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + registerReceiver(broadcastReceiver, intentFilter); + } + + @Override + public void onDestroy() { + unregisterReceiver(broadcastReceiver); + super.onDestroy(); + } + + + public static IMNetworkObserver getInstance() { + return instance; + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + throw new UnsupportedOperationException("Not yet implemented"); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMPayManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMPayManager.java index 2b36d21..00a7424 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/IMPayManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMPayManager.java @@ -110,7 +110,7 @@ public void onFailure(Exception e) { public void bindAlipayAccount(String uid,String openId){ PayApi.bind_alipay_account(uid,openId, new HttpRequestCallback() { @Override - public void onComplete(InputStream response) { + public void onComplete(InputStream response) throws IOException { String resultString = Protocol.parseStream(response); Logger.i("bind_alipay_account",resultString); } diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMProtocol.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMProtocol.java new file mode 100644 index 0000000..1a4e03a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMProtocol.java @@ -0,0 +1,11 @@ +package com.qunar.im.core.manager; + +/** + * Created by may on 2017/6/29. + */ + +public enum IMProtocol { + PROTOCOL_PROTOBUF, + PROTOCOL_XMPP, + PROTOCOL_MQTT, +} diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/IMUserCardManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/IMUserCardManager.java index df88e23..d262336 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/IMUserCardManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/IMUserCardManager.java @@ -15,7 +15,7 @@ import com.qunar.im.core.services.QtalkHttpService; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.Event.QtalkEvent; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.protobuf.entity.XMPPJID; diff --git a/lib_common/src/main/java/com/qunar/im/core/manager/LoginComplateManager.java b/lib_common/src/main/java/com/qunar/im/core/manager/LoginComplateManager.java index 25f43fd..27db8e0 100644 --- a/lib_common/src/main/java/com/qunar/im/core/manager/LoginComplateManager.java +++ b/lib_common/src/main/java/com/qunar/im/core/manager/LoginComplateManager.java @@ -12,6 +12,7 @@ import com.qunar.im.base.module.WorkWorldNoticeHistoryResponse; import com.qunar.im.base.module.WorkWorldResponse; import com.qunar.im.base.structs.WorkWorldItemState; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.log.LogConstans; import com.qunar.im.log.LogService; import com.qunar.im.log.QLog; @@ -44,12 +45,11 @@ import com.qunar.im.core.services.QtalkHttpService; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.entity.XMPPJID; -import com.qunar.im.protobuf.stream.PbAssemblyUtil; import com.qunar.im.utils.CalendarSynchronousUtil; import com.qunar.im.utils.MD5; +import com.qunar.im.utils.PbAssemblyUtil; import org.json.JSONException; import org.json.JSONObject; @@ -174,7 +174,7 @@ public static void loginComplate() { Logger.i("time8:" + (a8e - a8s)); long a9s = System.currentTimeMillis(); - HttpUtil.getMyCapability(false); + HttpUtil.getMyCapability(true); long a9e = System.currentTimeMillis(); Logger.i("time9:" + (a9e - a9s)); @@ -405,8 +405,8 @@ private static void updateMyPushSetting() { public void onCompleted(PushSettingResponseBean pushSettingResponseBean) { if (pushSettingResponseBean.isRet()) { IMDatabaseManager.getInstance().updatePushSettingAllState(pushSettingResponseBean.getData().getPush_flag()); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); } } @@ -600,7 +600,7 @@ public void onFailure(String errMsg) { public static void getQchatDepInfo() { // IMNotificaitonCenter.getInstance().postMainThreadNotificationName(QtalkEvent.Update_Buddy);//更新好友列表 - String time = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + String time = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + Constants.Preferences.buddytime); // long tiem = IMUserDefaults.getStandardUserDefaults().get @@ -609,7 +609,7 @@ public static void getQchatDepInfo() { long newTime = System.currentTimeMillis(); if ((newTime - lastTime) > 24 * 60 * 60 * 1000) { // IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) -// .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() +// .putObject(CurrentPreference.getInstance().getUserid() // + QtalkNavicationService.getInstance().getXmppdomain() // + "buddyTime", String.valueOf(newTime)) // .synchronize(); @@ -622,7 +622,7 @@ public static void getQchatDepInfo() { Logger.i("发送了请求QCHAT组织架构人员请求"); //不知道这段代码有啥用 先注释 // int version = 0;// IMDatabaseManager.getInstance().getIncrementUsersCount(); -// String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() +// String qchatorg = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(CurrentPreference.getInstance().getUserid() // + QtalkNavicationService.getInstance().getXmppdomain() // + Constants.Preferences.qchat_org, ""); // if (!TextUtils.isEmpty(qchatorg)) { @@ -633,14 +633,14 @@ public static void getQchatDepInfo() { public void onCompleted(DepartmentResult departmentResult) { if (departmentResult != null) { //qchat组织架构缓存 - DataUtils.getInstance(CommonConfig.globalContext).putPreferences(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + DataUtils.getInstance(CommonConfig.globalContext).putPreferences(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + Constants.Preferences.qchat_org, JsonUtils.getGson().toJson(departmentResult)); String time = String.valueOf(System.currentTimeMillis()); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + Constants.Preferences.buddytime, time) .synchronize(); @@ -736,7 +736,7 @@ public static void getWordWorldNoticeHistory() { final String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); boolean show = IMUserDefaults.getStandardUserDefaults().getBooleanValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -757,7 +757,7 @@ public void onCompleted(WorkWorldResponse workWorldResponse) { if (!isHave) { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -785,14 +785,14 @@ public void onFailure(String errMsg) { // long start = System.currentTimeMillis(); String timeId = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) + "lastwwuuid"); // long lastMessageTime = IMDatabaseManager.getInstance().getLastestMessageTime(); String timeStr = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -803,7 +803,7 @@ public void onFailure(String errMsg) { public void onCompleted(WorkWorldNoticeHistoryResponse workWorldNoticeHistoryResponse) { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .removeObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .removeObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -811,7 +811,7 @@ public void onCompleted(WorkWorldNoticeHistoryResponse workWorldNoticeHistoryRes .synchronize(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .removeObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .removeObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) diff --git a/lib_common/src/main/java/com/qunar/im/core/services/ClearLogService.java b/lib_common/src/main/java/com/qunar/im/core/services/ClearLogService.java new file mode 100644 index 0000000..542e5a4 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/services/ClearLogService.java @@ -0,0 +1,73 @@ +package com.qunar.im.core.services; + +import android.app.IntentService; +import android.content.Context; +import android.content.Intent; +import androidx.annotation.Nullable; + +import com.orhanobut.logger.Logger; +import com.qunar.im.base.util.DateTimeUtils; +import com.qunar.im.base.util.graphics.MyDiskCache; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * 清理日志 + */ +public class ClearLogService extends IntentService { + public static void runClearLogService(Context context) { + Intent intent = new Intent(context, ClearLogService.class); + context.startService(intent); + } + + public ClearLogService() { + super(ClearLogService.class.getSimpleName()); + } + + @Override + public void onCreate() { + super.onCreate(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + @Override + protected void onHandleIntent(@Nullable Intent intent) { + String folder = MyDiskCache.CACHE_LOG_DIR; + //遍历所有日志文件,大于7天的删除 + List files = listFiles(folder); + Logger.i("ClearLogService clearLogFile 日志文件数" + files.size() + " 当前时间" + DateTimeUtils.getTime(System.currentTimeMillis(), true, true)); + if(files != null && files.size() > 1){ + for(File file : files){ + Logger.i("ClearLogService clearLogFile 当前文件名" + file.getName() + " 当前文件时间" + DateTimeUtils.getTime(file.lastModified(),false, true)); + if(System.currentTimeMillis() - file.lastModified() > 7 * 24 * 60 * 60 * 1000){ + file.delete(); + } + } + } + } + + public static ArrayList listFiles(String strPath) { + return refreshFileList(strPath); + } + public static ArrayList refreshFileList(String strPath) { + ArrayList filelist = new ArrayList(); + File dir = new File(strPath); + File[] files = dir.listFiles(); + if (files == null) + return null; + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + refreshFileList(files[i].getAbsolutePath()); + } else { + filelist.add(files[i]); + } + } + return filelist; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/core/services/FeedBackServcie.java b/lib_common/src/main/java/com/qunar/im/core/services/FeedBackServcie.java index 5ab5142..15a03f2 100644 --- a/lib_common/src/main/java/com/qunar/im/core/services/FeedBackServcie.java +++ b/lib_common/src/main/java/com/qunar/im/core/services/FeedBackServcie.java @@ -24,7 +24,7 @@ import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.DeviceUtil; import com.qunar.im.utils.UnzipUtils; @@ -199,7 +199,7 @@ public void onComplete(InputStream response) { }else { sendNotify(false); } - } catch (Exception e) { + } catch (IOException e) { sendNotify(false); } diff --git a/lib_common/src/main/java/com/qunar/im/core/services/FileProgressRequestBody.java b/lib_common/src/main/java/com/qunar/im/core/services/FileProgressRequestBody.java new file mode 100644 index 0000000..d7329e1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/services/FileProgressRequestBody.java @@ -0,0 +1,106 @@ +package com.qunar.im.core.services; + + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +public class FileProgressRequestBody extends RequestBody { + + /** + * 请求体进度回调接口,用于文件上传进度回调 + */ + public interface ProgressRequestListener { + void onRequestProgress(long bytesWritten, long contentLength, boolean done); + } + //实际的待包装请求体 + private RequestBody requestBody; + //进度回调接口 + private ProgressRequestListener progressListener; + //包装完成的BufferedSink + private BufferedSink bufferedSink; + + /** + * 构造函数,赋值 + * @param requestBody 待包装的请求体 + * @param progressListener 回调接口 + */ + public FileProgressRequestBody(RequestBody requestBody, ProgressRequestListener progressListener) { + this.requestBody = requestBody; + this.progressListener = progressListener; + } + + /** + * 重写调用实际的响应体的contentType + * @return MediaType + */ + @Override + public MediaType contentType() { + return requestBody.contentType(); + } + + /** + * 重写调用实际的响应体的contentLength + * @return contentLength + * @throws IOException 异常 + */ + @Override + public long contentLength() throws IOException { + return requestBody.contentLength(); + } + + /** + * 重写进行写入 + * @param sink BufferedSink + * @throws IOException 异常 + */ + @Override + public void writeTo(BufferedSink sink) throws IOException { + if (bufferedSink == null) { +// //包装 + bufferedSink = Okio.buffer(sink(sink)); + + } + //写入 + requestBody.writeTo(bufferedSink); + //必须调用flush,否则最后一部分数据可能不会被写入 + bufferedSink.flush(); + + + } + + /** + * 写入,回调进度接口 + * @param sink Sink + * @return Sink + */ + private Sink sink(Sink sink) { + return new ForwardingSink(sink) { + //当前写入字节数 + long bytesWritten = 0L; + //总字节长度,避免多次调用contentLength()方法 + long contentLength = 0L; + + @Override + public void write(Buffer source, long byteCount) throws IOException { + super.write(source, byteCount); + if (contentLength == 0) { + //获得contentLength的值,后续不再调用 + contentLength = contentLength(); + } + //增加当前写入的字节数 + bytesWritten += byteCount; + //回调 + if(progressListener != null){ + progressListener.onRequestProgress(bytesWritten, contentLength, bytesWritten == contentLength); + } + } + }; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/core/services/FileProgressResponseBody.java b/lib_common/src/main/java/com/qunar/im/core/services/FileProgressResponseBody.java new file mode 100644 index 0000000..48bc13e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/services/FileProgressResponseBody.java @@ -0,0 +1,103 @@ +package com.qunar.im.core.services; + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; +import okio.ForwardingSource; +import okio.Okio; +import okio.Source; + +public class FileProgressResponseBody extends ResponseBody{ + + /** + * 响应体进度回调接口,用于文件下载进度回调 + */ + public interface ProgressResponseListener { + void onResponseProgress(long bytesRead, long contentLength, boolean done); + } + + //实际的待包装响应体 + private final ResponseBody responseBody; + //进度回调接口 + private final ProgressResponseListener progressListener; + //包装完成的BufferedSource + private BufferedSource bufferedSource; + + /** + * 构造函数,赋值 + * + * @param responseBody 待包装的响应体 + * @param progressListener 回调接口 + */ + public FileProgressResponseBody(ResponseBody responseBody, ProgressResponseListener progressListener) { + this.responseBody = responseBody; + this.progressListener = progressListener; + } + + + /** + * 重写调用实际的响应体的contentType + * + * @return MediaType + */ + @Override + public MediaType contentType() { + return responseBody.contentType(); + } + + + + /** + * 重写调用实际的响应体的contentLength + * + * @return contentLength + * @throws IOException 异常 + */ + @Override + public long contentLength() { + return responseBody.contentLength(); + } + + /** + * 重写进行包装source + * + * @return BufferedSource + */ + @Override + public BufferedSource source() { + if (bufferedSource == null) { + //包装 + bufferedSource = Okio.buffer(source(responseBody.source())); + } + return bufferedSource; + } + + /** + * 读取,回调进度接口 + * + * @param source Source + * @return Source + */ + private Source source(Source source) { + + return new ForwardingSource(source) { + //当前读取字节数 + long totalBytesRead = 0L; + + @Override + public long read(Buffer sink, long byteCount) throws IOException { + long bytesRead = super.read(sink, byteCount); + //增加当前读取的字节数,如果读取完成了bytesRead会返回-1 + totalBytesRead += bytesRead != -1 ? bytesRead : 0; + //回调,如果contentLength()不知道长度,会返回-1 + if(progressListener != null){ + progressListener.onResponseProgress(totalBytesRead, responseBody.contentLength(), bytesRead == -1); + } + return bytesRead; + } + }; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpRequest.java b/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpRequest.java new file mode 100644 index 0000000..8dcf735 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpRequest.java @@ -0,0 +1,95 @@ +package com.qunar.im.core.services; + +import com.orhanobut.logger.Logger; +import com.qunar.im.base.R; +import com.qunar.im.base.util.NetworkUtils; +import com.qunar.im.common.CommonConfig; + +import okhttp3.*; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.Reader; +import java.nio.CharBuffer; + +/** + * Created by may on 2017/8/8. + */ + +public class QtalkHttpRequest { + public static final int NO_NETWORK_CODE = -100; + + private String _url; + private FormBody.Builder _requestBodyBuilder; + + public QtalkHttpRequest(String url) { + _url = url; + _requestBodyBuilder = new FormBody.Builder(); + } + + public QtalkHttpRequest addParam(String key, String value) { + _requestBodyBuilder.add(key, value); + + return this; + } + + public JSONObject post() { + RequestBody requestBody = _requestBodyBuilder.build(); + + try { + //无网络连接 + if(NetworkUtils.isConnection(CommonConfig.globalContext) == NetworkUtils.ConnectStatus.disconnected){ + JSONObject result = new JSONObject(); + result.put("status_id", NO_NETWORK_CODE); + result.put("msg", CommonConfig.globalContext.getString(R.string.atom_base_no_network)); + return result; + } + + Request request = new Request.Builder() + .url(_url) + .post(requestBody) + .build(); + + OkHttpClient httpClient = new OkHttpClient + .Builder() + .build(); + + Response response = null; + try { + response = httpClient.newCall(request).execute(); + } catch (IOException e) { + Logger.e(e, "HTTP GET FAILED, request:\n%s", request); + } + + if (response != null) { + try { + Reader streamReader = response.body().charStream(); + StringBuilder responseStrBuilder = new StringBuilder(); + CharBuffer cb = CharBuffer.allocate(2048); + int length; + + while ((length = streamReader.read(cb)) > 0) { + responseStrBuilder.append(cb.array(), 0, length); + cb.clear(); + } + + JSONObject body = new JSONObject(responseStrBuilder.toString()); + return body; + } catch (Exception e) { + Logger.e(e, "HTTP GET & PARSE response FAILED, request:\n%s, \nresponse:\n%s", request, response); + } finally { + response.body().close(); + response.close(); + } + } else { + JSONObject result = new JSONObject(); + result.put("res", true); + result.put("code", response.code()); + result.put("errmsg", response.message()); + } + } catch (Exception e) { + Logger.e(e, "QtalkHttpRequest post body crashed"); + } + return null; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpService.java b/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpService.java index ebba144..89f8be3 100644 --- a/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpService.java +++ b/lib_common/src/main/java/com/qunar/im/core/services/QtalkHttpService.java @@ -1,6 +1,6 @@ package com.qunar.im.core.services; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.text.TextUtils; import com.orhanobut.logger.Logger; diff --git a/lib_common/src/main/java/com/qunar/im/core/services/QtalkNavicationService.java b/lib_common/src/main/java/com/qunar/im/core/services/QtalkNavicationService.java new file mode 100644 index 0000000..c99ceca --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/core/services/QtalkNavicationService.java @@ -0,0 +1,818 @@ +package com.qunar.im.core.services; + +import android.text.TextUtils; + +import com.orhanobut.logger.Logger; +import com.qunar.im.base.protocol.HttpRequestCallback; +import com.qunar.im.base.protocol.HttpUrlConnectionHandler; +import com.qunar.im.base.protocol.Protocol; +import com.qunar.im.base.common.QChatRSA; +import com.qunar.im.base.jsonbean.NavConfigResult; +import com.qunar.im.base.jsonbean.PubKeyBean; +import com.qunar.im.base.protocol.ProtocolCallback; +import com.qunar.im.base.util.DataUtils; +import com.qunar.im.base.util.JsonUtils; +import com.qunar.im.common.CommonConfig; +import com.qunar.im.core.utils.GlobalConfigManager; +import com.qunar.im.cache.IMUserCacheManager; +import com.qunar.im.protobuf.common.LoginType; +import com.qunar.im.utils.PubKeyUtil; + +import org.json.JSONObject; + +import java.io.InputStream; + + +/** + * 有反射调用updateNavicationConfig方法 不要修改类&包名 + * Created by may on 2017/7/3. + */ + +public class QtalkNavicationService { + private static volatile QtalkNavicationService instance; + + public static final String NAV_CONFIG_UPDATETIME = "NavConfigUpdateTime";//配置导航时间 + public static final String NAV_CONFIG_JSON = "NAV_CONFIG_JSON";//配置导航列表集合 + public static final String NAV_CONFIG_CURRENT_NAME = "NAV_CONFIG_CURRENT_NAME";//当前导航配置名称 + public static final String NAV_CONFIG_CURRENT_URL = "NAV_CONFIG_CURRENT_URL";//当前导航配置URL + public static final String NAV_CHECKCONFIG_UPDATETIME = "NavCheckConfigUpdateTime";//checkconfig时间 + public static final String NAV_CONFIG_CHECK_CONFIG_CAPABILITY = "NAV_CONFIG_CHECK_CONFIG_CAPABILITY_NEW";//当前导航配置checkconfig内容 + + public static final String NAV_CONFIG_PUBLIC_DEFAULT = ""; + private String navicationUrl = ""; + private String navicationUrlForQchat = ""; + + public static final String VIDEO_CALL_URL = ""; + private NavConfigResult mNavConfigResult; + + private LoginType loginType; + private NavConfigResult.Baseaddess mBaseAddress; + private String hosts; + //baseaddess + private String simpleapiurl; + private String pubkey; + private String tokenSmsUrl; + private String verifySmsUrl; + private String javaUrl; + private String xmppHost; + private String xmppdomain; + private int protobufPort; + private String httpHost; + private int httpPort; + private int xmppport; + private String checkconfig; + private int checkconfigVersion; + private String innerFiltHttpHost; + private String new_searchurl; + private String httpUrl; + private String wikiurl; + private String mobileurl; + private String leaderurl; + private String shareurl; + private String domainhost; + private String resetPwdUrl; + private String appWeb; + private String payurl; + + private String uploadFile; + private String uploadCheckLink; + private String persistentImage; + + //ability + private String qCloudHost; + private String qGrabOrder; + private String qcZhongbao; + private String searchurl; + private String mconfig; + private boolean showmsgstat;//是否显示阅读状态 + + private String qcadminHost; + + //imConfig + private boolean showOrganizational; + private String uploadLog; + private String email; + private String foundConfigUrl; + private boolean isToC; + + private String videoHost; + + //checkconfig配置url + public static String HONGBAO_URL = ""; + public static String HONGBAO_BALANCE = ""; + public static String MY_HONGBAO = ""; + public static String AA_PAY_URL = ""; + public static String THANKS_URL = ""; + public static String SEND_ACTIVITY = ""; + public static String COMPANY = "qunar"; + + //qcadmin + public static String QCADMIN_HOST_DEFAULT = ""; + + //ability + private static String ABILITY_GET_PUSH_STATE = ""; + private static String ABILITY_Q_CLOUD_HOST = ""; + private static String ABILITY_SET_PUSH_STATE = ""; + private static String ABILITY_Q_GRAB_ORDER = "";//qchat抢单 + private static String ABILITY_SEARCHURL = ""; + //默认hash url + private static String HOSTS = ""; + //baseaddess + private static final String tokenSmsUrlDefault = ""; + private static final String takeSmsUrlDefault = ""; + private static final String javaurl = ""; + private static final String SimpleApiUrl = ""; + private static String PUB_NET_XMPP_Host = "qt.qunar.com"; + private static String PUB_NET_XMPP_Domain = "ejabhost1"; + private static int PUBLIC_XMPP_PORT = 5223; + private static int PUBLIC_PROTOBUF_PORT = 5202; + private static String PUB_FILE_SERVER = ""; + private static String PUB_NEW_SEARCH_URL=""; + private static String HTTP_SERV_URL = ""; + private static int HTTPS_PORT = 443; + private static String CHECK__CONFIG = ""; + private static String UPLOAD_FILE_LINK_ONLINE ="/file/v2/upload/"; + private static String UPLOAD_CHECK_LINK = "/file/v2/inspection/"; + private static String PERSISTENT_IMAGE = "/file/v2/stp"; + private static String HTTP_URL ="httpurl"; + + + + + private boolean debugEnvironment = CommonConfig.isDebug; + + private void configDefaultNav() { + final long currentTime = System.currentTimeMillis(); + String navname = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_NAME, ""); + String oldNavString = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(navname, ""); + if (!TextUtils.isEmpty(oldNavString)) { + NavConfigResult result = JsonUtils.getGson().fromJson(oldNavString, NavConfigResult.class); + configNav(result); + IMUserCacheManager.getInstance().putConfig(GlobalConfigManager.getGlobalContext(), QtalkNavicationService.NAV_CONFIG_UPDATETIME, currentTime); + } else { + String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); + //没有导航先给个默认的 + final String navConfigUrl = TextUtils.isEmpty(navurl) ? this.getNavicationUrl() : navurl; + DataUtils.getInstance(CommonConfig.globalContext).putPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, navConfigUrl); + makeDefault(); + } + } + + /** + * 清理导航缓存 + */ + public void clearNavconfig() { + String navname = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_NAME, ""); + if (!TextUtils.isEmpty(navname)) { + DataUtils.getInstance(CommonConfig.globalContext).removePreferences(navname); + DataUtils.getInstance(CommonConfig.globalContext).removePreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_NAME); + DataUtils.getInstance(CommonConfig.globalContext).removePreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL); + DataUtils.getInstance(CommonConfig.globalContext).removePreferences(QtalkNavicationService.NAV_CONFIG_UPDATETIME); + } + } + + private void makeDefault() { + Logger.i("初始化默认导航"); + loginType = LoginType.SMSLogin; + + NavConfigResult nav = new NavConfigResult(); + nav.baseaddess.xmpp = xmppHost; + nav.baseaddess.domain = xmppdomain; + nav.baseaddess.protobufPort = protobufPort; + mBaseAddress = nav.baseaddess; + mNavConfigResult = nav; + hosts = HOSTS; + //baseaddess + simpleapiurl = SimpleApiUrl; + tokenSmsUrl = QtalkNavicationService.tokenSmsUrlDefault; + verifySmsUrl = QtalkNavicationService.takeSmsUrlDefault; + javaUrl = QtalkNavicationService.javaurl; + xmppHost = PUB_NET_XMPP_Host; + xmppdomain = PUB_NET_XMPP_Domain; + protobufPort = PUBLIC_PROTOBUF_PORT; + httpHost = HTTP_SERV_URL; + httpPort = HTTPS_PORT; + xmppport = PUBLIC_XMPP_PORT; + checkconfig = CHECK__CONFIG; + innerFiltHttpHost = PUB_FILE_SERVER; + new_searchurl=PUB_NEW_SEARCH_URL; + httpUrl = HTTP_URL; + + uploadFile = PUB_FILE_SERVER + UPLOAD_FILE_LINK_ONLINE; + uploadCheckLink = PUB_FILE_SERVER + UPLOAD_CHECK_LINK; + persistentImage = PUB_FILE_SERVER + PERSISTENT_IMAGE; + + //ability + qCloudHost = ABILITY_Q_CLOUD_HOST; + qGrabOrder = ABILITY_Q_GRAB_ORDER; + //设置搜索地址 + searchurl = ABILITY_SEARCHURL; + //设置代收地址 +// mconfig = ABILITY_MCONFIG; + + qcadminHost = QCADMIN_HOST_DEFAULT; + + videoHost = VIDEO_CALL_URL; + + } + + public void configNav(NavConfigResult result) { + mNavConfigResult = result; + + if (result.Login != null) { + if (!TextUtils.isEmpty(result.Login.loginType)) { + if(result.Login.loginType.equalsIgnoreCase("password")){ + loginType = LoginType.PasswordLogin; + }else if(result.Login.loginType.equalsIgnoreCase("newpassword")){ + loginType = LoginType.NewPasswordLogin; + }else { + loginType = LoginType.SMSLogin; + } + } else { + loginType = LoginType.SMSLogin; + } + } else { + loginType = LoginType.SMSLogin; + } + mBaseAddress = result.baseaddess; + hosts = result.hosts; + //baseaddess + simpleapiurl = result.baseaddess.simpleapiurl; + pubkey = result.baseaddess.pubkey; + tokenSmsUrl = result.baseaddess.sms_token; + verifySmsUrl = result.baseaddess.sms_verify; + javaUrl = result.baseaddess.javaurl; + xmppHost = result.baseaddess.xmpp; + xmppdomain = result.baseaddess.domain; + protobufPort = result.baseaddess.protobufPort; + httpHost = result.baseaddess.apiurl; + httpPort = HTTPS_PORT; + xmppport = result.baseaddess.xmppmport; + checkconfig = result.baseaddess.checkconfig; + innerFiltHttpHost = result.baseaddess.fileurl; + new_searchurl = result.ability.new_searchurl; + httpUrl = result.baseaddess.httpurl; + wikiurl = result.baseaddess.wikiurl; + mobileurl = result.baseaddess.mobileurl; + leaderurl = result.baseaddess.leaderurl; + shareurl = result.baseaddess.shareurl; + domainhost = result.baseaddess.domainhost; + resetPwdUrl = result.baseaddess.resetPwdUrl; + + checkconfigVersion = result.versions.checkconfig; + + uploadFile = result.baseaddess.fileurl + UPLOAD_FILE_LINK_ONLINE; + uploadCheckLink = result.baseaddess.fileurl + UPLOAD_CHECK_LINK; + persistentImage = result.baseaddess.fileurl + PERSISTENT_IMAGE; + appWeb = result.baseaddess.appWeb; + payurl = result.baseaddess.payurl; + + //ability + qCloudHost = result.ability.qCloudHost; + qGrabOrder = result.ability.qcGrabOrder; + qcZhongbao = result.ability.qcZhongbao; + //设置搜索地址 + searchurl = result.ability.searchurl; + mconfig = result.ability.mconfig; + showmsgstat = result.ability.showmsgstat; + + showOrganizational = result.imConfig.showOrganizational; + uploadLog = result.imConfig.uploadLog; + email = result.imConfig.mail; + foundConfigUrl = result.imConfig.foundConfigUrl; + isToC = result.imConfig.isToC; + + qcadminHost = result.qcadmin.host; + + videoHost = result.baseaddess.videourl; + + Logger.i("配置导航:" + result.toString()); + + Logger.i("导航pub_key:" + result.baseaddess.pubkey); + + //qchat pubkey + setPubKey(result.baseaddess.pubkey); + } + + private void setPubKey(String keyFromNav){ + if(!CommonConfig.isQtalk){ + if (!TextUtils.isEmpty(keyFromNav)) { + QChatRSA.pub_key = QChatRSA.readPubkey(CommonConfig.globalContext, keyFromNav); + Logger.i("导航pub_key content:" + QChatRSA.pub_key); + } + } + } + + public void updateNavicationConfig(final boolean withCheck) { + + long navConfigUpdateTime = IMUserCacheManager.getInstance().getLongConfig(QtalkNavicationService.NAV_CONFIG_UPDATETIME); + + final long currentTime = System.currentTimeMillis(); + String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); + + Logger.i("初始化导航当前URL:" + navurl); + if (withCheck /*|| currentTime - navConfigUpdateTime > 2 * 60 * 60 * 10001*/ || this.isDebugEnvironment()) { + + String navConfigUrl = TextUtils.isEmpty(navurl) ? this.getNavicationUrl() : navurl; + if(TextUtils.isEmpty(navConfigUrl) || !navConfigUrl.startsWith("http")){ + return; + }else if(!navConfigUrl.contains("nauth=")){ + if(navConfigUrl.indexOf("?") == -1){ + navConfigUrl += "?nauth=true"; + }else { + navConfigUrl += "&nauth=true"; + } + } + + Logger.i("初始化导航重新获取URL:" + navConfigUrl); + getServerConfig(navConfigUrl, new ProtocolCallback.UnitCallback() { + @Override + public void onCompleted(final NavConfigResult navConfigResult) { + if (navConfigResult != null) { + int version = (TextUtils.isEmpty(navConfigResult.version)) ? Integer.valueOf(navConfigResult.version) : 0; + + String navname = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_NAME, ""); + String oldNavString = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(navname, ""); + Logger.i("初始化导航旧导航配置:version = " + version + "config = " + oldNavString + "withCheck" + withCheck); + if (!TextUtils.isEmpty(oldNavString)) { + NavConfigResult oldNav = JsonUtils.getGson().fromJson(oldNavString, NavConfigResult.class); + int oldVersion = (TextUtils.isEmpty(oldNav.version)) ? Integer.valueOf(oldNav.version) : 0; + + NavConfigResult nav; + if (withCheck || version > oldVersion || isDebugEnvironment()) { + nav = navConfigResult; +// configNav(navConfigResult); + DataUtils.getInstance(CommonConfig.globalContext).putPreferences(navname, JsonUtils.getGson().toJson(navConfigResult)); + } else { + nav = oldNav; +// configNav(oldNav); + } + + + configNav(nav); + + } else { + configNav(navConfigResult); + DataUtils.getInstance(CommonConfig.globalContext).putPreferences(navname, JsonUtils.getGson().toJson(navConfigResult)); + } + + IMUserCacheManager.getInstance().putConfig(GlobalConfigManager.getGlobalContext(), QtalkNavicationService.NAV_CONFIG_UPDATETIME, currentTime); + } else { + configDefaultNav(); + } + + checkPubKey(); + } + + @Override + public void onFailure(String errMsg) { + configDefaultNav(); + checkPubKey(); + } + }); + } + } + + /** + * 同步获取导航 + * + * @param url + * @param callback + */ + private static void getServerConfig(final String url, final ProtocolCallback.UnitCallback callback) { + StringBuilder stringBuilder = new StringBuilder(url); + + Protocol.addBasicParamsOnHead(stringBuilder); + HttpUrlConnectionHandler.executeGetSync(stringBuilder.toString(), new HttpRequestCallback() { + @Override + public void onComplete(final InputStream response) { + try { + String resultString = Protocol.parseStream(response); + if (resultString != null) { + JSONObject jsonObject = new JSONObject(resultString); + if (jsonObject.has("ret") && !Boolean.valueOf(jsonObject.get("ret").toString())) { + callback.onFailure(""); + return; + } + final NavConfigResult result = JsonUtils.getGson().fromJson(resultString, NavConfigResult.class); + if (result == null) { + callback.onFailure(""); + return; + } + + if (TextUtils.isEmpty(result.hosts)) { + callback.onCompleted(result); + } else { + if (url.contains("debug=true")) { + if (result.hosts.contains("?")) { + result.hosts += "&debug=true"; + } else { + result.hosts += "?debug=true"; + } + } + Logger.i("开始请求二级导航:" + result); +// result.hosts+="?debug=true"; + getHashBaseAddress(result, new ProtocolCallback.UnitCallback() { + @Override + public void onCompleted(NavConfigResult baseResult) { + if (baseResult == null) { + callback.onFailure(""); + return; + } + result.baseaddess = baseResult.baseaddess; + callback.onCompleted(result); + } + + @Override + public void onFailure(String errMsg) { + callback.onFailure(""); + } + }); + } + } else { + callback.onFailure(""); + } + } catch (Exception e) { + callback.onFailure(""); + } + } + + @Override + public void onFailure(Exception e) { + callback.onFailure(""); + } + }); + } + + private static void getHashBaseAddress(final NavConfigResult result, final ProtocolCallback.UnitCallback callback) { + if (result == null || TextUtils.isEmpty(result.hosts)) { + callback.onFailure(""); + return; + } + + StringBuilder stringBuilder = new StringBuilder(result.hosts); + Protocol.addBasicParamsOnHead(stringBuilder); + Logger.i("二级导航请求地址加参数:" + stringBuilder.toString()); + HttpUrlConnectionHandler.executeGetSync(stringBuilder.toString(), new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) { + try { + String resultString = Protocol.parseStream(response); + if (resultString != null) { + Logger.i("二级导航请求完成:" + resultString); + NavConfigResult baseResult = JsonUtils.getGson().fromJson(resultString, NavConfigResult.class); + callback.onCompleted(baseResult); + } else { + callback.onFailure(""); + } + } catch (Exception e) { + callback.onFailure(""); + } + } + + @Override + public void onFailure(Exception e) { + Logger.i("getHashBaseAddress->>" + result.hosts + e.getLocalizedMessage()); + callback.onFailure(""); + } + }); + } + + /** + * 同步获取pubkey + * + * @param url + * @param callback + */ + private static void getPubKey(String url, String dommain, final ProtocolCallback.UnitCallback callback) { + StringBuilder stringBuilder = new StringBuilder(url); + + Protocol.addBasicParamsOnHead(stringBuilder, dommain); + HttpUrlConnectionHandler.executeGetSync(stringBuilder.toString(), new HttpRequestCallback() { + @Override + public void onComplete(final InputStream response) { + try { + String resultString = Protocol.parseStream(response); + if (resultString != null) { + JSONObject jsonObject = new JSONObject(resultString); + if (jsonObject.has("ret") && !Boolean.valueOf(jsonObject.get("ret").toString())) { + callback.onFailure(""); + return; + } + Logger.i("pubkey返回的值:" + resultString); + PubKeyBean result = JsonUtils.getGson().fromJson(resultString, PubKeyBean.class); + if (result == null) { + callback.onFailure(""); + return; + } + Logger.i("pubkey'返回的对象:" + result); +// result.hosts+="?debug=true"; + callback.onCompleted(result); + } else { + callback.onFailure(""); + } + } catch (Exception e) { + callback.onFailure(""); + } + } + + @Override + public void onFailure(Exception e) { + callback.onFailure(""); + } + }); + } + + public String getCurrentNavUrl(){ + String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); + return navurl; + } + + /** + * 检车获取pubkey + */ + private void checkPubKey() { + String pubkey = PubKeyUtil.getPUBKEY(getXmppdomain()); + Logger.i("获取缓存key :" + pubkey); + if (!TextUtils.isEmpty(pubkey)) { + QChatRSA.pub_key = pubkey; + return; + } else { + if(TextUtils.isEmpty(getJavaUrl())){ + return; + } + String url = getJavaUrl() + "/qtapi/nck/rsa/get_public_key.do"; + Logger.i("缓存key为null,重新获取:" + url); + getPubKey(url,getXmppdomain(), new ProtocolCallback.UnitCallback() { + @Override + public void onCompleted(PubKeyBean pubKeyBean) { + Logger.i("从网络上获取key:" + JsonUtils.getGson().toJson(pubKeyBean)); + if (pubKeyBean.isRet()) { + String key = pubKeyBean.getData().getPub_key_shortkey(); + PubKeyUtil.setPUBKEY(getXmppdomain(), key); + QChatRSA.pub_key = key; + } + } + + @Override + public void onFailure(String errMsg) { + + } + }); + } + } + + private QtalkNavicationService() { + configDefaultNav(); + } + + public static QtalkNavicationService getInstance() { + synchronized (QtalkNavicationService.class) { + if (instance == null){ + instance = new QtalkNavicationService(); + } + return instance; + } + } + + /** + * 获取导航地址 + * + * @return + */ + public String getSearchurl() { +// return TextUtils.isEmpty(searchurl) ? ABILITY_SEARCHURL : searchurl; + return searchurl; + } + + public String getTokenSmsUrl() { + return tokenSmsUrl; + } + + public String getVerifySmsUrl() { + return verifySmsUrl; + } + + public String getJavaUrl() { + if (TextUtils.isEmpty(javaUrl)) { + return javaurl; + } + return javaUrl; + } + + public void setJavaUrl(String url) { + javaUrl = url; + } + + public String getSimpleapiurl() { + if (TextUtils.isEmpty(simpleapiurl)) + return SimpleApiUrl; + return simpleapiurl; + } + + public boolean isDebugEnvironment() { + return debugEnvironment; + } + + public String getNavicationUrl() { + return CommonConfig.isQtalk ? navicationUrl : navicationUrlForQchat; + } + + public void setNavicationUrl(String navicationUrl) { + this.navicationUrl = navicationUrl; + } + + public String getNavicationUrlForQchat() { + return navicationUrlForQchat; + } + + public void setNavicationUrlForQchat(String navicationUrlForQchat) { + this.navicationUrlForQchat = navicationUrlForQchat; + } + + public NavConfigResult getNavConfigResult() { + return mNavConfigResult; + } + + public NavConfigResult.Baseaddess getBaseAddess() { + return mBaseAddress; + } + + public String getHttpHost() { + return httpHost; + } + + public int getHttpPort() { + return httpPort; + } + + public LoginType getLoginType() { + return loginType; + } + + + public String getInnerFiltHttpHost() { + return innerFiltHttpHost; + } + + public String getNewSerarchUrl(){ + + return TextUtils.isEmpty(new_searchurl)?searchurl:new_searchurl; + } + + + public String getPubkey() { + return pubkey; + } + + public String getXmppHost() { + return xmppHost; + } + + public int getProtobufPort() { + return protobufPort; + } + + public int getXmppport() { + return xmppport; + } + + + public String getXmppdomain() { + return xmppdomain; + } + + public String getUploadFile() { + return uploadFile; + } + + public String getUploadCheckLink() { + return uploadCheckLink; + } + + public String getPersistentImage() { + return persistentImage; + } + + public String getCheckconfig() { + if (TextUtils.isEmpty(checkconfig)) { + return CHECK__CONFIG; + } + return checkconfig; + } + + public String getHosts() { + return hosts; + } + + public String getqCloudHost() { + return qCloudHost; + } + + public String getqGrabOrder() { + return TextUtils.isEmpty(qGrabOrder) ? ABILITY_Q_GRAB_ORDER : qGrabOrder; + } + + public String getQcZhongbao() { + return qcZhongbao; + } + + //获取代收地址 + public String getMconfig() { + return mconfig; + } + + public boolean isShowOrganizational() { + return showOrganizational; + } + + public boolean isShowmsgstat() { + return showmsgstat; + } + + public String getQcadminHost() { + return TextUtils.isEmpty(qcadminHost) ? QCADMIN_HOST_DEFAULT : qcadminHost; + } + + public String getHttpUrl() { + return httpUrl; + } + + public void setHttpUrl(String httpUrl) { + this.httpUrl = httpUrl; + } + + public String getDomainSearchUrl() { + return getHttpUrl() + "/domain/get_domain_list.qunar?t=" + GlobalConfigManager.getAppName().toLowerCase(); + } + + public String getWikiurl() { + return wikiurl; + } + + public int getCheckconfigVersion() { + return checkconfigVersion; + } + + public String getUploadLog() { + return uploadLog; + } + + public String getEmail() { + return email; + } + + public String getLeaderurl() { + return leaderurl; + } + + public void setLeaderurl(String leaderurl) { + this.leaderurl = leaderurl; + } + + public void setMobileurl(String mobileurl) { + this.mobileurl = mobileurl; + } + + public String getMobileurl() { + return mobileurl; + } + + public String getFoundConfigUrl() { + return foundConfigUrl; + } + + public void setFoundConfigUrl(String foundConfigUrl) { + this.foundConfigUrl = foundConfigUrl; + } + + public String getVideoHost() { + return TextUtils.isEmpty(videoHost) ? VIDEO_CALL_URL : videoHost; + } + + public String getShareurl() { + return shareurl; + } + + public String getDomainhost() { + if(!TextUtils.isEmpty(domainhost)) + return domainhost; + else return ".qunar.com"; + } + + public String getResetPwdUrl() { + return resetPwdUrl; + } + + public boolean isToC() { + return isToC; + } + + public String getAppWeb() { + return appWeb; + } + + public String getPayurl() { + return payurl; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/log/LogConstans.java b/lib_common/src/main/java/com/qunar/im/log/LogConstans.java new file mode 100644 index 0000000..564cf5e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/LogConstans.java @@ -0,0 +1,42 @@ +package com.qunar.im.log; + +/** + * Created by froyomu on 2019/1/25 + *

+ * Describe: 日志相关 + */ +public class LogConstans { + public static final class LogType{ + public static final String CAT = "CAT";//端到端日志 + public static final String COD = "COD";//代码级日志 + public static final String FIL = "FIL";//文件日志 + public static final String CRA = "CRA";//崩溃异常日志 + public static final String ACT = "ACT";//行为日志 + } + + public static final class LogSubType{ + /** + * COD SubType + */ + public static final String SQL = "sql"; + public static final String NATIVE = "native"; + + /** + * CAT SubType + */ + public static final String TCP = "tcp"; + public static final String HTTP = "http"; + + /** + * ACT SubType + */ + public static final String CLICK = "click"; + public static final String SHOW = "show"; + + /** + * CRA SubType + */ + public static final String CRASH = "crash"; + public static final String ANR = "anr"; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/log/LogDatabaseHelper.java b/lib_common/src/main/java/com/qunar/im/log/LogDatabaseHelper.java new file mode 100644 index 0000000..7fa0df1 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/LogDatabaseHelper.java @@ -0,0 +1,56 @@ +package com.qunar.im.log; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +/** + * 日志上报db + */ +public class LogDatabaseHelper extends SQLiteOpenHelper{ + + private static final int DB_VERSION = 1; + private static final String DB_NAME = "log.dat"; + + public LogDatabaseHelper(Context context){ + super(context, DB_NAME, null, DB_VERSION); + getWritableDatabase().enableWriteAheadLogging(); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.beginTransactionNonExclusive(); + try{ + String sql = "CREATE TABLE IF NOT EXISTS IM_Log(" + + " type TEXT," + + " subType TEXT," + + " reportTime TEXT," + + " content TEXT);"; + db.execSQL(sql); + + sql = "CREATE INDEX IF NOT EXISTS IM_LOG_TYPE_SUBTYPE ON " + + " IM_Log(type,subType);"; + db.execSQL(sql); + + sql = "CREATE INDEX IF NOT EXISTS IM_LOG_REPORTTIME ON " + + " IM_Log(reportTime);"; + db.execSQL(sql); + + db.setTransactionSuccessful(); + }catch (Exception e){ + + }finally { + db.endTransaction(); + } + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + + } + + @Override + public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { + super.onDowngrade(db, oldVersion, newVersion); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/log/LogDatabaseManager.java b/lib_common/src/main/java/com/qunar/im/log/LogDatabaseManager.java new file mode 100644 index 0000000..2b33adb --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/LogDatabaseManager.java @@ -0,0 +1,101 @@ +package com.qunar.im.log; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteStatement; + +import com.qunar.im.base.jsonbean.LogInfo; +import com.qunar.im.base.util.JsonUtils; + +import java.util.ArrayList; +import java.util.List; + +public class LogDatabaseManager { + + private static LogDatabaseManager instance; + private LogDatabaseHelper logDatabaseHelper; + + public static LogDatabaseManager getInstance(){ + synchronized (LogDatabaseManager.class){ + if(instance == null){ + instance = new LogDatabaseManager(); + } + } + return instance; + } + + /** + * 初始化DB + * @param context + */ + public void initDB(Context context){ + logDatabaseHelper = new LogDatabaseHelper(context); + } + + /** + * 日志插入 + */ + public void insertLog(LogInfo log){ + if(log == null){ + return; + } + String sql = "insert into IM_Log(type,subType,reportTime,content) values (?,?,?,?)"; + SQLiteDatabase db = logDatabaseHelper.getWritableDatabase(); + SQLiteStatement sqLiteStatement = db.compileStatement(sql); + try{ + db.beginTransaction(); + sqLiteStatement.bindString(1,log.getType()); + sqLiteStatement.bindString(2,log.getSubType()); + sqLiteStatement.bindLong(3,log.getReportTime()); + sqLiteStatement.bindString(4,JsonUtils.getGsonEscaping().toJson(log)); + sqLiteStatement.executeInsert(); + db.setTransactionSuccessful(); + }catch (Exception e){ + e.printStackTrace(); + }finally { + db.endTransaction(); + } + } + + public List queryAllLogs(long lastReportTime){ + List lists = new ArrayList<>(); + String sql = "select * from IM_Log where reportTime<= ? order by reportTime desc limit 1000"; + SQLiteDatabase db = logDatabaseHelper.getReadableDatabase(); + Cursor cursor = db.rawQuery(sql,new String[]{String.valueOf(lastReportTime)}); + try{ + while (cursor.moveToNext()){ + String content = cursor.getString(3); + LogInfo logInfo = JsonUtils.getGson().fromJson(content,LogInfo.class); + lists.add(logInfo); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + if(cursor != null){ + cursor.close(); + } + return lists; + } + } + + public boolean clearLogs(long start,long end){ + boolean isScuess = false; + String sql = "delete from IM_Log where reportTime<=? and reportTime>=? "; + SQLiteDatabase db = logDatabaseHelper.getWritableDatabase(); + SQLiteStatement sqLiteStatement = db.compileStatement(sql); + try{ + db.beginTransaction(); + sqLiteStatement.bindLong(1,start); + sqLiteStatement.bindLong(2,end); + sqLiteStatement.executeInsert(); + db.setTransactionSuccessful(); + isScuess = true; + }catch (Exception e){ + e.printStackTrace(); + }finally { + db.endTransaction(); + return isScuess; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/log/LogService.java b/lib_common/src/main/java/com/qunar/im/log/LogService.java new file mode 100644 index 0000000..7f2df66 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/LogService.java @@ -0,0 +1,139 @@ +package com.qunar.im.log; + +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Message; +import android.text.TextUtils; + +import com.qunar.im.base.jsonbean.LogInfo; +import com.qunar.im.base.util.ListUtil; +import com.qunar.im.core.services.QtalkNavicationService; + +import java.util.List; + +/** + * Created by froyomu on 2019/1/17 + *

+ * Describe:日志上报thread + */ + +public class LogService implements LogUploadStateListener{ + private static volatile LogService instance; + + private static final int UPLOAD = 0x01; + private static final int SAVE = 0x02; + + private static final int MAX_FAIL_COUNTS = 5;//最多失败次数 + + private static final int UNIT_MAX_UPLOAD_LOG_COUNT = 20;//每次上报最大日志条数 + private static final int DELAY_TIME = 10*1000; + + private int failCount; + + private HandlerThread handlerThread = new HandlerThread("log_upload"); + private Handler handler; + + private List allLogs; + + @Override + public void onSuccess(List infos) { + if(!ListUtil.isEmpty(infos)){ + long start = infos.get(0).getReportTime(); + long end = infos.get(infos.size() - 1).getReportTime(); + boolean result = LogDatabaseManager.getInstance().clearLogs(start,end); + if(result){ + infos.clear(); + } + if(!ListUtil.isEmpty(allLogs)){ + upload(0); + } + } + } + + @Override + public void onFail(String msg) { + if(failCount > MAX_FAIL_COUNTS){ + return; + } + failCount++; + upload(failCount * DELAY_TIME); + } + + public static LogService getInstance(){ + synchronized (LogService.class){ + if(instance == null){ + instance = new LogService(); + } + } + return instance; + } + + public LogService(){ + start(); + } + + private void start(){ + handlerThread.start(); + if(handler == null){ + handler = new Handler(handlerThread.getLooper()){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if(!TextUtils.isEmpty(QtalkNavicationService.getInstance().getUploadLog())){ + deawithlLog(msg); + } + } + }; + } + queryLogsToUpload(); + } + + private void deawithlLog(Message msg){ + switch (msg.what){ + case UPLOAD: + LogUploadApi.upload(spiltLogs(),LogService.this); + break; + case SAVE: + LogInfo log = (LogInfo) msg.obj; + LogDatabaseManager.getInstance().insertLog(log); + break; + } + } + + private List spiltLogs(){ + List logs = null; + if(!ListUtil.isEmpty(allLogs)){ + int size = allLogs.size(); + if(size > UNIT_MAX_UPLOAD_LOG_COUNT){ + logs = allLogs.subList(0,UNIT_MAX_UPLOAD_LOG_COUNT); + }else { + logs = allLogs; + } + } + return logs; + } + + private void queryLogsToUpload(){ + long currentTime = System.currentTimeMillis(); + allLogs = LogDatabaseManager.getInstance().queryAllLogs(currentTime); + upload(DELAY_TIME); + } + + private void upload(long time){ + handler.sendEmptyMessageDelayed(UPLOAD,time); + } + + public void saveLog(Object log){ + Message message = Message.obtain(); + message.what = SAVE; + message.obj = log; + handler.sendMessage(message); + } + + public void quit(){ + if(handlerThread != null){ + handlerThread.quit(); + } + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/log/LogUploadApi.java b/lib_common/src/main/java/com/qunar/im/log/LogUploadApi.java new file mode 100644 index 0000000..faa6fbc --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/LogUploadApi.java @@ -0,0 +1,92 @@ +package com.qunar.im.log; + + +import com.orhanobut.logger.Logger; +import com.qunar.im.base.common.QunarIMApp; +import com.qunar.im.base.jsonbean.BaseJsonResult; +import com.qunar.im.base.jsonbean.Log; +import com.qunar.im.base.jsonbean.LogInfo; +import com.qunar.im.base.protocol.HttpRequestCallback; +import com.qunar.im.base.protocol.HttpUrlConnectionHandler; +import com.qunar.im.base.protocol.Protocol; +import com.qunar.im.base.util.JsonUtils; +import com.qunar.im.base.util.ListUtil; +import com.qunar.im.core.services.QtalkNavicationService; +import com.qunar.im.core.utils.GlobalConfigManager; +import com.qunar.im.common.CurrentPreference; +import com.qunar.im.utils.DeviceUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * 日志上传 + */ +public class LogUploadApi { + + public static void upload(final List infos, final LogUploadStateListener listener){ + if(ListUtil.isEmpty(infos)){ + return; + } + Log log = new Log(); + log.infos = infos; + log.user = createUserInstance(); + log.device = createDeviceInstance(); + + String url = QtalkNavicationService.getInstance().getUploadLog(); + String json = JsonUtils.getGson().toJson(log); + Logger.i("日志上传信息:" + url + "\n" + json); + HttpUrlConnectionHandler.executePostJsonSync(url, json, new HttpRequestCallback() { + @Override + public void onComplete(InputStream response) throws IOException { + try{ + String resultString = Protocol.parseStream(response); + BaseJsonResult baseJsonResult = JsonUtils.getGson().fromJson(resultString,BaseJsonResult.class); + if(baseJsonResult != null && baseJsonResult.ret && listener != null){ + listener.onSuccess(infos); + Logger.i("日志上传成功:" + resultString); + }else { + if(listener != null){ + listener.onFail(resultString); + } + Logger.i("日志上传失败:" + resultString); + } + }catch (Exception e){ + if(listener != null){ + listener.onFail(e.getLocalizedMessage()); + } + Logger.i("日志上传失败:" + e.getLocalizedMessage()); + } + } + + @Override + public void onFailure(Exception e) { + if(listener != null){ + listener.onFail(e.getLocalizedMessage()); + } + Logger.i("日志上传失败:" + e.getLocalizedMessage()); + } + }); + } + + private static Log.User createUserInstance(){ + Log.User user = new Log.User(); + user.domain = QtalkNavicationService.getInstance().getXmppdomain(); + user.uid = CurrentPreference.getInstance().getUserid(); + user.nav = QtalkNavicationService.getInstance().getCurrentNavUrl(); + return user; + } + + private static Log.Device createDeviceInstance(){ + Log.Device device = new Log.Device(); + device.versionCode = GlobalConfigManager.getAppVersion(); + device.versionName = QunarIMApp.getQunarIMApp().getVersionName(); + device.plat = GlobalConfigManager.getAppName(); + device.os = GlobalConfigManager.getAppPlatform(); + device.osBrand = DeviceUtil.getPhoneBrand(); + device.osModel = DeviceUtil.getPhoneModel(); + device.osVersion = DeviceUtil.getPhoneAndroidVersion(); + return device; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/log/LogUploadStateListener.java b/lib_common/src/main/java/com/qunar/im/log/LogUploadStateListener.java new file mode 100644 index 0000000..bc84310 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/LogUploadStateListener.java @@ -0,0 +1,15 @@ +package com.qunar.im.log; + +import com.qunar.im.base.jsonbean.LogInfo; + +import java.util.List; + +/** + * Created by froyomu on 2019/1/17 + *

+ * Describe: + */ +public interface LogUploadStateListener { + void onSuccess(List infos); + void onFail(String msg); +} diff --git a/lib_common/src/main/java/com/qunar/im/log/QLog.java b/lib_common/src/main/java/com/qunar/im/log/QLog.java new file mode 100644 index 0000000..02184ab --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/log/QLog.java @@ -0,0 +1,26 @@ +package com.qunar.im.log; + +import com.qunar.im.base.jsonbean.LogInfo; + +/** + * Created by froyomu on 2019/1/17 + *

+ * Describe: + */ +public class QLog { + + public static LogInfo build(){ + LogInfo logInfo = new LogInfo(); + return logInfo; + } + + public static LogInfo build(String type){ + LogInfo logInfo = new LogInfo(type); + return logInfo; + } + + public static LogInfo build(String type,String subType){ + LogInfo logInfo = new LogInfo(type,subType); + return logInfo; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/other/CacheDataType.java b/lib_common/src/main/java/com/qunar/im/other/CacheDataType.java new file mode 100644 index 0000000..4ebc72e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/other/CacheDataType.java @@ -0,0 +1,153 @@ +package com.qunar.im.other; + +/** + * Created by hubin on 2017/9/26. + */ + +public class CacheDataType { + /** + * 代表置顶 + */ + public static final int TOP = 1; + public static final int TOPVER = 101; + /** + * 代表提醒 + */ + public static final int REMIND = 2; + + /** + * 代表qchat 众包 参数配置 + */ + public static final int CONVERSATION_PARAMS = 3; + + /** + * 收藏表情 + */ + public static final int COLLECTION_EMO = 4; + + public static final int MARKUP_NAMES = 5; + + /** + * 用户id + */ + public static final int USER_ID_TYPE = 6; + public static final String USER_ID = "USER_ID"; + + /** + * 本地群的ReadMark最新时间 + */ + public static final int GROUP_READMARK_TIME = 7; + public static final String GROUP_READMARK = "GROUP_READMARK"; + /***热线账号列表*/ + public static final String HOTLINE_KEY = "hotline"; + public static final int HOTLINE_TYPE = 8; + + /** + * 用户加号功能配置 + */ + public static final String userCapabilityValue = "userCapabilityValue"; + public static final int userCapabilityValueType = 9; + + /** + * 最后一条消息时间 + */ + public static final String lastUpdateTimeValue = "lastUpdateTime"; + public static final int lastUpdateTimeValueType = 10; + + /** + * 组织架构最新时间戳 + */ + public static final String lastIncrementUserVersion = "lastIncrementUserVersion"; + public static final int lastIncrementUser = 11; + + /** + * 发现页配置 + */ + public static final int FoundConfigurationType = 12; + public static final String FoundConfiguration = "FoundConfiguration"; + + /** + * 驼圈开关 + */ + public static final String kCricleCamelNotify = "kCricleCamelNotify";// 驼圈通知展示开关 + public static final int kCricleCamelNotify_Type = 13; + + + /** + * 朋友圈权限功能 + */ + public static final String workWorldPermissionsValue = "workWorldPermissionsValue"; + public static final int workWorldPermissionsType = 14; + + + /** + * 朋友圈提醒功能 + */ + public static final String workWorldRemindValue = "workWorldRemindValue"; + public static final int workWorldRemindType = 15; + + /** + * 勋章列表版本号 + */ + public static final String medalListVersionValue = "medalListVersionValue"; + public static final int medalListVersionType = 16; + + /** + * 勋章用户状态列表版本号 + */ + public static final String medalUserStatusValue = "medalUserStatusValue"; + public static final int medalUserStatusType = 17; + + /** + * 用户id + */ + public static final int Focus_Search_TYPE = 7; + public static final String Focus_Search_ID = "Focus_Search_ID"; + + + /** + * 代表push开关 + */ + + public static final String pushState = "pushState"; + public static final int PushStateType = 500; + + /** + * 代表新版version版本号 + */ + public static final String userConfigVersion = "userConfigVersion"; + public static final int userConfigVersionType = 99; + + public static final String QUICK_REPLY_VERSION = "quick_reply_version"; + public static final int quick_reply_type = 100; + /** + * 代表议程version版本号 + */ + public static final String userTripVersion = "userTripVersion"; + public static final int userTripVersionType = 98; + + + public static final String kMarkupNames = "kMarkupNames"; //用户备注(通用) + public static final String kCollectionCacheKey = "kCollectionCacheKey";//收藏表情(通用) + public static final String kStickJidDic = "kStickJidDic";//置顶会话(通用) + public static final String kNotificationSetting = "kNotificationSetting"; //客户端通知中心设置(通用) + public static final String kNoticeStickJidDic = "kNoticeStickJidDic"; //会话提醒(通用) + public static final String kConversationParamDic = "kConversationParamDic"; //众包需求(通用) + public static final String kQuickResponse = "kQuickResponse"; //快捷回复(通用) + public static final String kStarContact = "kStarContact";//星标联系人 + public static final String kBlackList = "kBlackList";//黑名单 + public static final String kChatColorInfo = "kChatColorInfo"; //消息气泡颜色(IOS) + public static final String kCurrentFontInfo = "kCurrentFontInfo"; //客户端字体(IOS) + public static final String kChatMessageFontInfo = "kChatMessageFontInfo"; //客户端字体(Mac) + public static final String kAdrFontInfo = "kAdrFontInfo"; //客户端字体(Android) + public static final String kWaterMark = "kWaterMark";//聊天水印背景(Android) + + + public static final int set = 1;//操作符 设置 + public static final int cancel = 2;//操作符 取消 + + public static final int Y = 1;//为真 + public static final int N = 0;//为取消 + + +} diff --git a/lib_common/src/main/java/com/qunar/im/other/IQGetVirtualUserRoleDelegate.java b/lib_common/src/main/java/com/qunar/im/other/IQGetVirtualUserRoleDelegate.java new file mode 100644 index 0000000..6e1a816 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/other/IQGetVirtualUserRoleDelegate.java @@ -0,0 +1,11 @@ +package com.qunar.im.other; + +import com.qunar.im.protobuf.common.ProtoMessageOuterClass; + +/** + * Created by hubin on 2017/8/9. + */ + +public interface IQGetVirtualUserRoleDelegate { + void onVirtualUserResult(ProtoMessageOuterClass.IQMessage iqMessage, String err); +} diff --git a/lib_common/src/main/java/com/qunar/im/other/IQTalkLoginDelegate.java b/lib_common/src/main/java/com/qunar/im/other/IQTalkLoginDelegate.java new file mode 100644 index 0000000..781e8b3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/other/IQTalkLoginDelegate.java @@ -0,0 +1,9 @@ +package com.qunar.im.other; + +/** + * Created by may on 2017/8/8. + */ + +public interface IQTalkLoginDelegate { + void onSmsCodeReceived(int code, String errCode); +} diff --git a/lib_common/src/main/java/com/qunar/im/other/QtalkSDK.java b/lib_common/src/main/java/com/qunar/im/other/QtalkSDK.java index 3c4ccd1..4a75499 100644 --- a/lib_common/src/main/java/com/qunar/im/other/QtalkSDK.java +++ b/lib_common/src/main/java/com/qunar/im/other/QtalkSDK.java @@ -20,12 +20,12 @@ import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.DataUtils; import com.qunar.im.base.util.IMUserDefaults; -import com.qunar.im.base.util.JsonUtils; import com.qunar.im.base.util.LogUtil; import com.qunar.im.base.util.MemoryCache; import com.qunar.im.base.util.PhoneInfoUtils; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.manager.IMCoreManager; import com.qunar.im.core.manager.IMDatabaseManager; import com.qunar.im.core.manager.IMLogicManager; @@ -33,8 +33,6 @@ import com.qunar.im.core.services.QtalkHttpService; import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.LoginType; -import com.qunar.im.protobuf.common.ParamIsEmptyException; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.protobuf.dispatch.DispatcherQueue; @@ -42,7 +40,7 @@ import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.DeviceInfoManager; import com.qunar.im.utils.MD5; -import com.qunar.im.protobuf.stream.PbAssemblyUtil; +import com.qunar.im.utils.PbAssemblyUtil; import com.qunar.im.utils.PubKeyUtil; import com.qunar.im.utils.QtalkDiskLogStrategy; import com.qunar.im.utils.QtalkStringUtils; @@ -109,8 +107,8 @@ public boolean isLoggable(int priority, String tag) { } IMDatabaseManager.getInstance().initialize(userName, CommonConfig.globalContext); //在数据库初始化之出 把 声音震动提醒放入内存 - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); } @@ -237,15 +235,15 @@ public void run(){ final String userName = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.lastuserid); //记住 这个token就是密码, 没有经过base64的密码 没有加 /0xxx/0的密码 final String token = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, Constants.Preferences.usertoken); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setToken(token); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setUserid(userName); + CurrentPreference.getInstance().setToken(token); + CurrentPreference.getInstance().setUserid(userName); IMDatabaseManager.getInstance().initialize(userName, CommonConfig.globalContext); IMDatabaseManager.getInstance().insertUserIdToCacheData(QtalkStringUtils.userId2Jid(userName)); //在初始化数据库,还没建立连接之前,获取到时间戳,并保存 String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); String str = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -253,7 +251,7 @@ public void run(){ //获取朋友圈时间戳 String wwuuid = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -261,7 +259,7 @@ public void run(){ //获取朋友圈时间戳 String wwtime = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -275,7 +273,7 @@ public void run(){ Logger.i("获取历史记录时间戳为空,初始化两天时间时间戳"); } IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -292,7 +290,7 @@ public void run(){ // // } IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -300,7 +298,7 @@ public void run(){ .synchronize(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -311,7 +309,7 @@ public void run(){ //设置最新的群readmark时间戳 String rmt = IMUserDefaults.getStandardUserDefaults().getStringValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -319,7 +317,7 @@ public void run(){ if(TextUtils.isEmpty(rmt)){ String localGroupRMTime = IMDatabaseManager.getInstance().getLatestGroupRMTime(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -329,8 +327,6 @@ public void run(){ coreManager.login(userName, token); } catch (IOException e) { Logger.e(e, "login failed - IOException"); - } catch (ParamIsEmptyException e) { - Logger.e(e, "login failed - ParamIsEmptyException"); } } }; @@ -389,7 +385,7 @@ public void newLogin(String userName, String password){ IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) .putObject(Constants.Preferences.usertoken, password) .synchronize(); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setToken(password); + CurrentPreference.getInstance().setToken(password); //username放入sp IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) .putObject(Constants.Preferences.lastuserid, userName) @@ -421,7 +417,7 @@ public void publicLogin(String userName, String password) { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) .putObject(Constants.Preferences.usertoken, password) .synchronize(); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setToken(password); + CurrentPreference.getInstance().setToken(password); //username放入sp IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) .putObject(Constants.Preferences.lastuserid, userName) @@ -495,7 +491,7 @@ private void saveToken(boolean[] succeeded,String userName,String token){ IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) .putObject(Constants.Preferences.usertoken, pwd) .synchronize(); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setToken(token); + CurrentPreference.getInstance().setToken(token); //username放入sp IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) .putObject(Constants.Preferences.lastuserid, userName) diff --git a/lib_common/src/main/java/com/qunar/im/other/TestAccount.java b/lib_common/src/main/java/com/qunar/im/other/TestAccount.java new file mode 100644 index 0000000..a4aae4b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/other/TestAccount.java @@ -0,0 +1,24 @@ +package com.qunar.im.other; + +import java.util.HashMap; +import java.util.Map; + +/** + * 测试账号类 + */ +public class TestAccount { + + private static Map testAccountMap = new HashMap<>(); + + static { + + } + + public static boolean isTestAccount(String account){ + return testAccountMap.containsKey(account); + } + + public static String getTestAccountToken(String account){ + return testAccountMap.get(account); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/permission/PermissionCallback.java b/lib_common/src/main/java/com/qunar/im/permission/PermissionCallback.java new file mode 100644 index 0000000..0394e14 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/permission/PermissionCallback.java @@ -0,0 +1,8 @@ +package com.qunar.im.permission; + +/** + * Created by saber on 15-11-25. + */ +public interface PermissionCallback { + void responsePermission(int requestCode, boolean granted); +} diff --git a/lib_common/src/main/java/com/qunar/im/permission/PermissionDispatcher.java b/lib_common/src/main/java/com/qunar/im/permission/PermissionDispatcher.java new file mode 100644 index 0000000..0b7c63d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/permission/PermissionDispatcher.java @@ -0,0 +1,103 @@ +package com.qunar.im.permission; + +import android.app.Activity; +import androidx.core.app.ActivityCompat; +import android.util.SparseArray; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * Created by saber on 15-11-25. + */ +public class PermissionDispatcher { + + /** + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + private static AtomicInteger AUTO_INCREASE_KEY = new AtomicInteger(0); + + public static int getRequestCode() + { + int requestCode = AUTO_INCREASE_KEY.getAndIncrement(); +// if(requestCode>127) +// { +// requestCode = 1; +// } + return requestCode; + } + + public final static int REQUEST_CAMERA = 1; + public final static int REQUEST_READ_PHONE_STATE = 2; + public final static int REQUEST_ACCESS_COARSE_LOCATION = 4; + public final static int REQUEST_ACCESS_FINE_LOCATION = 8; + public final static int REQUEST_RECORD_AUDIO = 16; + public final static int REQUEST_READ_EXTERNAL_STORAGE = 32; + public final static int REQUEST_WRITE_EXTERNAL_STORAGE = 64; + public final static int REQUEST_CALL = 128; + public final static int REQUEST_READ_CALENDAR=256; + public final static int REQUEST_WRITE_CALENDAR=512; + public final static SparseArray permissions = new SparseArray(); + private final static SparseArray stashCallback = new SparseArray(); + static { + permissions.append(REQUEST_CAMERA, "android.permission.CAMERA"); + permissions.append(REQUEST_READ_PHONE_STATE, "android.permission.READ_PHONE_STATE"); + permissions.append(REQUEST_ACCESS_COARSE_LOCATION, "android.permission.ACCESS_COARSE_LOCATION"); + permissions.append(REQUEST_ACCESS_FINE_LOCATION, "android.permission.ACCESS_FINE_LOCATION"); + permissions.append(REQUEST_RECORD_AUDIO, "android.permission.RECORD_AUDIO"); + permissions.append(REQUEST_READ_EXTERNAL_STORAGE, "android.permission.READ_EXTERNAL_STORAGE"); + permissions.append(REQUEST_WRITE_EXTERNAL_STORAGE, "android.permission.WRITE_EXTERNAL_STORAGE"); + permissions.append(REQUEST_CALL,"android.permission.CALL_PHONE"); + permissions.append(REQUEST_READ_CALENDAR,"android.permission.READ_CALENDAR"); + permissions.append(REQUEST_WRITE_CALENDAR,"android.permission.WRITE_CALENDAR"); + } + + public static void requestPermissionWithCheck(Activity ctx,int[] permissionFlags,PermissionCallback callback,int requestCode) { + List permissionStr = new ArrayList(permissionFlags.length); + for(int i=0;iActivity or Fragment has access to all given;permissions. + * + * @param context context + * @param permissions permissions + * @return returns true if Activity or Fragment has access to all given permissions. + */ + public static List hasSelfPermissions(Context context,List permissions) { + List result = new ArrayList(permissions.size()); + for (String permission : permissions) { + if (checkSelfPermission(context, permission) != PermissionChecker.PERMISSION_GRANTED) { + result.add(permission); + } + } + return result; + } + + /** + * Checks given permissions are needed to show rationale. + * + * @param activity activity + * @param permissions permission list + * @return returns true if one of the permission is needed to show rationale. + */ + public static boolean shouldShowRequestPermissionRationale(Activity activity, String... permissions) { + for (String permission : permissions) { + if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) { + return true; + } + } + return false; + } + + /** + * Checks given permissions are needed to show rationale. + * + * @param fragment fragment + * @param permissions permission list + * @return returns true if one of the permission is needed to show rationale. + */ + public static boolean shouldShowRequestPermissionRationale(Fragment fragment, String... permissions) { + for (String permission : permissions) { + if (fragment.shouldShowRequestPermissionRationale(permission)) { + return true; + } + } + return false; + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/AppFrontBackHelper.java b/lib_common/src/main/java/com/qunar/im/utils/AppFrontBackHelper.java new file mode 100644 index 0000000..d5ae205 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/AppFrontBackHelper.java @@ -0,0 +1,109 @@ +package com.qunar.im.utils; + + +import android.app.Activity; +import android.app.Application; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; + +import com.orhanobut.logger.Logger; + +/** + * 应用前后台状态监听帮助类,仅在Application中使用 + * Created by dway on 2018/1/30. + */ +public class AppFrontBackHelper implements Application.ActivityLifecycleCallbacks{ + private static final String TAG = "AppFrontBackHelper"; + + private OnAppStatusListener mOnAppStatusListener; + + public static final long CHECK_DELAY = 500; + private boolean foreground = false, paused = true; + private Runnable check; + private Handler handler = new Handler(Looper.getMainLooper()); + + public AppFrontBackHelper() { + + } + + /** + * 注册状态监听,仅在Application中使用 + * @param application + * @param listener + */ + public void register(Application application, OnAppStatusListener listener){ + mOnAppStatusListener = listener; + application.registerActivityLifecycleCallbacks(this); + } + + public void unRegister(Application application){ + application.unregisterActivityLifecycleCallbacks(this); + } + + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { +// Logger.d (TAG + " onActivityCreated activity = " + activity); + } + + @Override + public void onActivityStarted(Activity activity) { +// Logger.d (TAG + " onActivityStarted activity = " + activity); + } + + @Override + public void onActivityResumed(Activity activity) { + paused = false; + boolean wasBackground = !foreground; + foreground = true; + if (check != null) + handler.removeCallbacks(check); + if (wasBackground){ + if(mOnAppStatusListener != null) + mOnAppStatusListener.onFront(); + Logger.d (TAG + " 应用切到前台 activity = " + activity); + } else { + Logger.d (TAG + " still foreground activity = " + activity); + } + } + + @Override + public void onActivityPaused(final Activity activity) { + paused = true; + if (check != null) + handler.removeCallbacks(check); + handler.postDelayed(check = new Runnable(){ + @Override + public void run() { + if (foreground && paused) { + foreground = false; + if(mOnAppStatusListener != null) + mOnAppStatusListener.onBack(); +// Logger.d (TAG + " 应用切到后台 = " + activity); + } else { +// Logger.d (TAG + " still foreground = " + activity); + } + } + }, CHECK_DELAY); + } + + @Override + public void onActivityStopped(Activity activity) { +// Logger.d (TAG + " onActivityStopped activity = " + activity); + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + + } + + @Override + public void onActivityDestroyed(Activity activity) { +// Logger.d (TAG + " onActivityDestroyed activity = " + activity); + } + + public interface OnAppStatusListener{ + void onFront(); + void onBack(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/BeanCloneUtil.java b/lib_common/src/main/java/com/qunar/im/utils/BeanCloneUtil.java new file mode 100644 index 0000000..8dea94e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/BeanCloneUtil.java @@ -0,0 +1,46 @@ +package com.qunar.im.utils; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +/** + * Created by hubo.hu on 2017/9/27. + */ + +public class BeanCloneUtil { + @SuppressWarnings("unchecked") + public static T cloneTo(T src) throws RuntimeException { + ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream(); + ObjectOutputStream out = null; + ObjectInputStream in = null; + T dist = null; + try { + out = new ObjectOutputStream(memoryBuffer); + out.writeObject(src); + out.flush(); + in = new ObjectInputStream(new ByteArrayInputStream(memoryBuffer.toByteArray())); + dist = (T) in.readObject(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + if (out != null) + try { + out.close(); + out = null; + } catch (IOException e) { + throw new RuntimeException(e); + } + if (in != null) + try { + in.close(); + in = null; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return dist; + } +} \ No newline at end of file diff --git a/lib_common/src/main/java/com/qunar/im/utils/CalendarReminderUtils.java b/lib_common/src/main/java/com/qunar/im/utils/CalendarReminderUtils.java index d30bc2e..8ebf81b 100644 --- a/lib_common/src/main/java/com/qunar/im/utils/CalendarReminderUtils.java +++ b/lib_common/src/main/java/com/qunar/im/utils/CalendarReminderUtils.java @@ -15,7 +15,7 @@ import com.qunar.im.base.module.CalendarTrip; import com.qunar.im.base.module.Nick; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import java.text.ParseException; import java.util.TimeZone; @@ -76,7 +76,7 @@ private static long checkEvents(Context context,CalendarTrip.DataBean.TripsBean locan = TextUtils.isEmpty(bean.getAppointment())?bean.getTripLocale()+"-"+bean.getTripRoom():bean.getAppointment(); start = DateUtil.string2Time(bean.getBeginTime(), "yyyy-MM-dd HH:mm:ss").getTime(); end = DateUtil.string2Time(bean.getEndTime(), "yyyy-MM-dd HH:mm:ss").getTime(); - } catch (Exception e) { + } catch (ParseException e) { e.printStackTrace(); } // String selection = "((" + CalendarContract.Events.ORIGINAL_SYNC_ID + " = ?))"; @@ -222,7 +222,7 @@ public static void updateCalendarEvent(Context context, CalendarTrip.DataBean.Tr try { start = DateUtil.string2Time(bean.getBeginTime(), "yyyy-MM-dd HH:mm:ss").getTime(); end = DateUtil.string2Time(bean.getEndTime(), "yyyy-MM-dd HH:mm:ss").getTime(); - } catch (Exception e) { + } catch (ParseException e) { e.printStackTrace(); } @@ -311,7 +311,7 @@ public static void addCalendarEvent(Context context, CalendarTrip.DataBean.Trips try { start = DateUtil.string2Time(bean.getBeginTime(), "yyyy-MM-dd HH:mm:ss").getTime(); end = DateUtil.string2Time(bean.getEndTime(), "yyyy-MM-dd HH:mm:ss").getTime(); - } catch (Exception e) { + } catch (ParseException e) { e.printStackTrace(); } diff --git a/lib_common/src/main/java/com/qunar/im/utils/ConnectionUtil.java b/lib_common/src/main/java/com/qunar/im/utils/ConnectionUtil.java index 87320f4..2599b21 100644 --- a/lib_common/src/main/java/com/qunar/im/utils/ConnectionUtil.java +++ b/lib_common/src/main/java/com/qunar/im/utils/ConnectionUtil.java @@ -52,12 +52,11 @@ import com.qunar.im.other.IQTalkLoginDelegate; import com.qunar.im.other.QtalkSDK; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.protobuf.common.LoginType; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import com.qunar.im.protobuf.dispatch.DispatchHelper; import com.qunar.im.protobuf.entity.XMPPJID; -import com.qunar.im.protobuf.stream.PbAssemblyUtil; import org.json.JSONArray; import org.json.JSONException; @@ -2314,9 +2313,7 @@ public void lanuchGroupVideo(String roomId,String groupName){ intent.setClassName(CommonConfig.globalContext, "com.qunar.im.ui.activity.QunarWebActvity"); //群视频使用webview加载,必须是https的,所以兼容导航是http的情况,强制转https String videoUrl = QtalkNavicationService.getInstance().getVideoHost(); - if(!videoUrl.startsWith("https://")) { - videoUrl.replace("http", "https"); - } + StringBuilder url = new StringBuilder(videoUrl + "conference#/login"); Map params = new HashMap<>(); params.put("userId",CurrentPreference.getInstance().getPreferenceUserId()); diff --git a/lib_common/src/main/java/com/qunar/im/utils/CurrentNetDBM.java b/lib_common/src/main/java/com/qunar/im/utils/CurrentNetDBM.java new file mode 100644 index 0000000..e94265f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/CurrentNetDBM.java @@ -0,0 +1,16 @@ +package com.qunar.im.utils; + +import android.content.Context; + +/** + * Created by hubin on 2017/9/6. + */ + +public class CurrentNetDBM { + + private Context context; + + public CurrentNetDBM(Context context) { + this.context = context; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/DateUtil.java b/lib_common/src/main/java/com/qunar/im/utils/DateUtil.java new file mode 100644 index 0000000..fc80d99 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/DateUtil.java @@ -0,0 +1,252 @@ +package com.qunar.im.utils; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +public class DateUtil { + /** + * 将时间字符串转换为Date类型 + * @param dateStr + * @return Date + */ + public static Date toDate(String dateStr) { + Date date = null; + SimpleDateFormat formater = new SimpleDateFormat(); + formater.applyPattern("yyyy-MM-dd"); + try { + date = formater.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + /** + * 按照提供的格式将字符串转换成Date类型 + * @param dateStr + * @param formaterString + * @return + */ + public static Date toDate(String dateStr, String formaterString) { + Date date = null; + SimpleDateFormat formater = new SimpleDateFormat(); + formater.applyPattern(formaterString); + try { + date = formater.parse(dateStr); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + /** + * 将Date类型时间转换为字符串 + * @param date + * @return + */ + public static String toString(Date date) { + + String time; + SimpleDateFormat formater = new SimpleDateFormat(); + formater.applyPattern("yyyy-MM-dd"); + time = formater.format(date); + return time; + } + + /** + * 按照参数提供的格式将Date类型时间转换为字符串 + * @param date + * @param formaterString + * @return + */ + public static String toString(Date date, String formaterString) { + String time; + SimpleDateFormat formater = new SimpleDateFormat(); + formater.applyPattern(formaterString); + time = formater.format(date); + return time; + } + + /** + * method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp) + * @param dateString + * 需要转换为timestamp的字符串 + * @return dataTime timestamp + */ + public static java.sql.Timestamp string2Time(String dateString) + throws ParseException { + DateFormat dateFormat; +// dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", +// Locale.ENGLISH);// 设定格式 + dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm"); + dateFormat.setLenient(false); + Date timeDate = dateFormat.parse(dateString);// util类型 + + java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());// Timestamp类型,timeDate.getTime()返回一个long型 + return dateTime; + } + + /** + * method 将字符串类型的日期按照转换为一个timestamp(时间戳记java.sql.Timestamp) + * + * @param dateString 需要转换为timestamp的字符串 + * @param formaterString dateString字符串的解析格式 + * @return + * @throws ParseException + */ + public static java.sql.Timestamp string2Time(String dateString, + String formaterString) throws ParseException { + DateFormat dateFormat; + dateFormat = new SimpleDateFormat(formaterString);// 设定格式 + // dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); + dateFormat.setLenient(false); + Date timeDate = dateFormat.parse(dateString);// util类型 + java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());// Timestamp类型,timeDate.getTime()返回一个long型 + return dateTime; + } + + + + /** + * start + * 本周开始时间戳 - 以星期一为本周的第一天 + */ + public static long getWeekStartTime() { + + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + + //设置为1号,当前日期既为本月第一天 + c.set(Calendar.DAY_OF_WEEK, 2); + //将小时至0 + c.set(Calendar.HOUR_OF_DAY, 0); + //将分钟至0 + c.set(Calendar.MINUTE, 0); + //将秒至0 + c.set(Calendar.SECOND,0); + //将毫秒至0 + c.set(Calendar.MILLISECOND, 0); + // 获取本月第一天的时间戳 + return c.getTimeInMillis(); + +// SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyyMMdd", Locale. getDefault()); +// Calendar cal = Calendar.getInstance(); +// int day_of_week = cal.get(Calendar. DAY_OF_WEEK) - 1; +// if (day_of_week == 0 ) { +// day_of_week = 7 ; +// } +// cal.add(Calendar.DATE , -day_of_week + 1 ); +// return simpleDateFormat.format(cal.getTime()) + "000000000"; + } + + /** + * end + * 本周结束时间戳 - 以星期一为本周的第一天 + */ + public static long getWeekEndTime() { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + + //设置为当月最后一天 + c.set(Calendar.DAY_OF_WEEK, c.getActualMaximum(Calendar.DAY_OF_WEEK)); + c.add(Calendar.DATE,1); + //将小时至23 + c.set(Calendar.HOUR_OF_DAY, 23); + //将分钟至59 + c.set(Calendar.MINUTE, 59); + //将秒至59 + c.set(Calendar.SECOND,59); + //将毫秒至999 + c.set(Calendar.MILLISECOND, 999); + // 获取本月最后一天的时间戳 + return c.getTimeInMillis(); + + +// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); +// Calendar cal = Calendar.getInstance(); +// int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 1; +// if (day_of_week == 0) { +// day_of_week = 7; +// } +// cal.add(Calendar.DATE, -day_of_week + 7); +// return simpleDateFormat.format(cal.getTime()) + "235959999"; + + } + + /** + * 获取指定日期所在月份开始的时间戳 + * @return + */ + public static Long getMonthBegin() { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + + //设置为1号,当前日期既为本月第一天 + c.set(Calendar.DAY_OF_MONTH, 1); + //将小时至0 + c.set(Calendar.HOUR_OF_DAY, 0); + //将分钟至0 + c.set(Calendar.MINUTE, 0); + //将秒至0 + c.set(Calendar.SECOND,0); + //将毫秒至0 + c.set(Calendar.MILLISECOND, 0); + // 获取本月第一天的时间戳 + return c.getTimeInMillis(); + } + + /** + * 获取指定日期所在月份结束的时间戳 + * @return + */ + public static Long getMonthEnd() { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + + //设置为当月最后一天 + c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH)); + //将小时至23 + c.set(Calendar.HOUR_OF_DAY, 23); + //将分钟至59 + c.set(Calendar.MINUTE, 59); + //将秒至59 + c.set(Calendar.SECOND,59); + //将毫秒至999 + c.set(Calendar.MILLISECOND, 999); + // 获取本月最后一天的时间戳 + return c.getTimeInMillis(); + } + + /** + * 获得今天的结束时间 + * @return + */ + public static long getToDayEndTime() { + Calendar todayEnd = Calendar.getInstance(); + todayEnd.set(Calendar.HOUR_OF_DAY, 23); + todayEnd.set(Calendar.MINUTE, 59); + todayEnd.set(Calendar.SECOND, 59); + todayEnd.set(Calendar.MILLISECOND, 999); + return todayEnd.getTimeInMillis(); + + } + + /** + * 获得今天的开始时间 + * @return + */ + public static long getToDayBeginTime() { + Calendar todayEnd = Calendar.getInstance(); + todayEnd.set(Calendar.HOUR_OF_DAY, 0); + todayEnd.set(Calendar.MINUTE, 0); + todayEnd.set(Calendar.SECOND, 0); + todayEnd.set(Calendar.MILLISECOND, 0); + return todayEnd.getTimeInMillis(); + + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/DeviceInfoManager.java b/lib_common/src/main/java/com/qunar/im/utils/DeviceInfoManager.java new file mode 100644 index 0000000..080c123 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/DeviceInfoManager.java @@ -0,0 +1,57 @@ +package com.qunar.im.utils; + +import android.content.Context; +import android.provider.Settings; +import com.qunar.im.core.utils.GlobalConfigManager; +import com.qunar.im.base.util.IMUserDefaults; +import com.qunar.im.protobuf.utils.StringUtils; + +import java.util.UUID; + +/** + * Created by may on 2017/6/29. + */ + +public class DeviceInfoManager { + + private String androidId; + private static DeviceInfoManager INSTANCE = new DeviceInfoManager(); + private String userName; + private String deviceId; + + public static DeviceInfoManager getInstance() { + return INSTANCE; + } + + protected DeviceInfoManager() { + } + + public String getId(Context context) { + androidId = Settings.Secure.getString(context.getContentResolver(), + Settings.Secure.ANDROID_ID); + return androidId; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getDeviceId(Context context) { + String id; + if (StringUtils.isNotEmpty(getId(context))) + id = androidId; + else if (StringUtils.isNotEmpty(deviceId)) + id = deviceId; + else { + id = IMUserDefaults.getStandardUserDefaults().getStringValue(GlobalConfigManager.getGlobalContext(), "AndroidDeviceId"); + } + + if (StringUtils.isEmpty(id)) { + id = UUID.randomUUID().toString().replace("-", ""); + IMUserDefaults.getStandardUserDefaults().newEditor(GlobalConfigManager.getGlobalContext()) + .putObject("AndroidDeviceId", id) + .synchronize(); + } + return id; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/DeviceUtil.java b/lib_common/src/main/java/com/qunar/im/utils/DeviceUtil.java new file mode 100755 index 0000000..d40614d --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/DeviceUtil.java @@ -0,0 +1,143 @@ +package com.qunar.im.utils; + +import android.content.Context; +import android.os.Build; +import android.util.DisplayMetrics; +import android.view.WindowManager; + +import java.util.Locale; + + +public class DeviceUtil { + + private static String[] huaweiRongyao = { + "hwH60", //荣耀6 + "hwPE", //荣耀6 plus + "hwH30", //3c + "hwHol", //3c畅玩版 + "hwG750", //3x + "hw7D", //x1 + "hwChe2", //x1 + }; + + public static String getDeviceInfo() { + String handSetInfo = + "手机型号:" + Build.DEVICE + + "\n系统版本:" + Build.VERSION.RELEASE + + "\nSDK版本:" + Build.VERSION.SDK_INT; + return handSetInfo; + } + + public static String getDeviceModel() { + return Build.DEVICE; + } + + public static boolean isHuaWeiRongyao() { + int length = huaweiRongyao.length; + for (int i = 0; i < length; i++) { + if (huaweiRongyao[i].equals(getDeviceModel())) { + return true; + } + } + return false; + } + + public static String getTelephonyManagerInfo() { +// TelephonyManager tm = (TelephonyManager) CommonConfig.globalContext.getSystemService(Context.TELEPHONY_SERVICE); + StringBuffer sb = new StringBuffer(); +// sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId()); +// sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion()); +// sb.append("\nLine1Number = " + tm.getLine1Number()); +// sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso()); +// sb.append("\nNetworkOperator = " + tm.getNetworkOperator()); +// sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName()); +// sb.append("\nNetworkType = " + tm.getNetworkType()); +// sb.append("\nPhoneType = " + tm.getPhoneType()); +// sb.append("\nSimCountryIso = " + tm.getSimCountryIso()); +// sb.append("\nSimOperator = " + tm.getSimOperator()); +// sb.append("\nSimOperatorName = " + tm.getSimOperatorName()); +// sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber()); +// sb.append("\nSimState = " + tm.getSimState()); +// sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId()); +// sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber()); + sb.append("\nBrand = " + getPhoneBrand()); + sb.append("\nModel = " + getPhoneModel()); + sb.append("\nVersion = " + getPhoneAndroidVersion()); + return sb.toString(); + } + + /** + * 设备厂商 + * + * @return + */ + public static String getPhoneBrand() { + return Build.BOARD + " " + Build.MANUFACTURER; + } + + /** + * 设备名称 + * + * @return + */ + public static String getPhoneModel() { + return Build.MODEL; + } /** + * 系统版本号 + * + * @return + */ + public static int getPhoneAndroidVersion() { + return Build.VERSION.SDK_INT; + } + + public static int getWindowWidthPX(Context context){ + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(dm); + int width = dm.widthPixels; // 屏幕宽度(像素) + return width; + } + + public static int getWindowHeightPX(Context context){ + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(dm); + int height = dm.heightPixels; // 屏幕高度(像素) + return height; + } + + public static int getWindowWidth(Context context){ + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(dm); + int width = dm.widthPixels; // 屏幕宽度(像素) + float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) + int screenWidth = (int) (width / density); // 屏幕宽度(dp) + return screenWidth; + } + + public static int getWindowHeight(Context context){ + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(dm); + int height = dm.heightPixels; // 屏幕高度(像素) + float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) + int screenHeight = (int) (height / density);// 屏幕高度(dp) + return screenHeight; + } + + public static String getSystemLangage(Context context){ + Locale locale; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + locale = context.getResources().getConfiguration().getLocales().get(0); + } else { + locale = context.getResources().getConfiguration().locale; + } + + //获取语言的正确姿势: + + String lang = locale.getLanguage() + "-" + locale.getCountry(); + return lang; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/FileUtils.java b/lib_common/src/main/java/com/qunar/im/utils/FileUtils.java new file mode 100644 index 0000000..40089ae --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/FileUtils.java @@ -0,0 +1,46 @@ +package com.qunar.im.utils; + +import java.io.File; +import java.io.FileInputStream; +import java.security.MessageDigest; + +public class FileUtils { + + public static String getFileMD5(File file) { + if (!file.isFile()) { + return null; + } + MessageDigest digest = null; + FileInputStream in = null; + byte buffer[] = new byte[1024]; + int len; + try { + digest = MessageDigest.getInstance("MD5"); + in = new FileInputStream(file); + while ((len = in.read(buffer, 0, 1024)) != -1) { + digest.update(buffer, 0, len); + } + in.close(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return bytesToHexString(digest.digest()); + } + + public static String bytesToHexString(byte[] src) { + StringBuilder stringBuilder = new StringBuilder(""); + if (src == null || src.length <= 0) { + return null; + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + } + return stringBuilder.toString(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/HttpUtil.java b/lib_common/src/main/java/com/qunar/im/utils/HttpUtil.java index 3f6c8e8..58c8843 100644 --- a/lib_common/src/main/java/com/qunar/im/utils/HttpUtil.java +++ b/lib_common/src/main/java/com/qunar/im/utils/HttpUtil.java @@ -96,6 +96,7 @@ import com.qunar.im.base.util.graphics.ImageUtils; import com.qunar.im.base.util.graphics.MyDiskCache; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.enums.MessageState; import com.qunar.im.core.manager.IMDatabaseManager; import com.qunar.im.core.manager.IMLogicManager; @@ -108,7 +109,6 @@ import com.qunar.im.core.services.QtalkNavicationService; import com.qunar.im.core.utils.GlobalConfigManager; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; import com.qunar.im.protobuf.common.ProtoMessageOuterClass; import org.json.JSONArray; @@ -337,7 +337,7 @@ public static void getConsultChatOfflineMsg(final String chatType, final String HttpUrlConnectionHandler.executeGet(requestUrl, new HttpRequestCallback() { @Override - public void onComplete(InputStream response) { + public void onComplete(InputStream response) throws IOException { try { String resultString = Protocol.parseStream(response); @@ -1187,7 +1187,7 @@ public static void registPush(final String key, final String name) { StringBuilder params = new StringBuilder("push/qtapi/token/setpersonmackey.qunar?username="); params.append(username).append("&domain=") .append(QtalkNavicationService.getInstance().getXmppdomain()) - .append("&os=android&version=").append(Protocol.VERSIONVALUE); + .append("&os=android&version=").append(QunarIMApp.getQunarIMApp().getVersion()); params.append("&mac_key=").append(key); params.append("&platname=").append(name); params.append("&pkgname=").append(CommonConfig.globalContext.getApplicationInfo().packageName); @@ -1250,7 +1250,7 @@ public static void unregistPushinfo(final String uuid, final String name, final StringBuilder params = new StringBuilder("push/qtapi/token/delpersonmackey.qunar?username="); params.append(muUsernam).append("&domain=") .append(QtalkNavicationService.getInstance().getXmppdomain()) - .append("&os=android&version=").append(Protocol.VERSIONVALUE); + .append("&os=android&version=").append(QunarIMApp.getQunarIMApp().getVersion()); params.append("&mac_key=").append(uuid); params.append("&platname=").append(name); Protocol.addBasicParamsOnHead(params); @@ -1313,7 +1313,7 @@ public static void setGroupPushSettings(final String mucJid, final int status, f StringBuilder params = new StringBuilder("push/qtapi/token/setgroupnotification.qunar?username="); params.append(muUsernam).append("&domain=") .append(QtalkNavicationService.getInstance().getXmppdomain()) - .append("&os=android&version=").append(Protocol.VERSIONVALUE); + .append("&os=android&version=").append(QunarIMApp.getQunarIMApp().getVersion()); params.append("&muc_name=").append(QtalkStringUtils.parseId(mucJid)); params.append("&subscribe_flag=").append(status); params.append("&muc_domain=").append(QtalkStringUtils.parseDomain(mucJid)); @@ -1371,7 +1371,7 @@ public static void setPushMsgSettings(final int index, final int status, final P StringBuilder params = new StringBuilder("push/qtapi/token/setmsgsettings.qunar?username="); params.append(muUsernam).append("&domain=") .append(QtalkNavicationService.getInstance().getXmppdomain()) - .append("&os=android&version=").append(Protocol.VERSIONVALUE); + .append("&os=android&version=").append(QunarIMApp.getQunarIMApp().getVersion()); params.append("&index=").append(index); params.append("&status=").append(status); Protocol.addBasicParamsOnHead(params); @@ -1426,7 +1426,7 @@ public static void getPushMsgSettings(final ProtocolCallback.UnitCallback jsonDatas, final ProtocolCallback.UnitCallback callback) { try { StringBuilder queryString = new StringBuilder("conf/set_person?"); - if (TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getVerifyKey())) { + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { if (callback != null) callback.doFailure(); return; } @@ -2102,7 +2102,7 @@ public static void requestGet(String url, final ProtocolCallback.UnitCallback jsonDatas, final ProtocolCallback.UnitCallback callback) { try { StringBuilder queryString = new StringBuilder("conf/get_person?"); - if (TextUtils.isEmpty(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getVerifyKey())) { + if (TextUtils.isEmpty(CurrentPreference.getInstance().getVerifyKey())) { if (callback != null) callback.doFailure(); return; } @@ -2688,7 +2688,7 @@ public void onFailure(Call call, Exception e) { public static void notifyOnline() { HttpUrlConnectionHandler.executeGet(Protocol.getUrl(QtalkNavicationService.getInstance().getQcadminHost(), "css/online"), new HttpRequestCallback() { @Override - public void onComplete(InputStream response){ + public void onComplete(InputStream response) throws IOException { if (response != null) { String resultString = Protocol.parseStream(response); Logger.i("notifyOnline:" + resultString); @@ -2720,7 +2720,7 @@ public static void getUnreadCountFromOps(final ProtocolCallback.UnitCallback params = new HashMap<>(); boolean high = IMUserDefaults.getStandardUserDefaults().getBooleanValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + "videoHigh", false); @@ -5492,7 +5492,7 @@ public void onJsonResponse(JSONObject jsonObject) throws JSONException { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug @@ -5500,7 +5500,7 @@ public void onJsonResponse(JSONObject jsonObject) throws JSONException { .synchronize(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug @@ -5509,7 +5509,7 @@ public void onJsonResponse(JSONObject jsonObject) throws JSONException { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug @@ -5517,7 +5517,7 @@ public void onJsonResponse(JSONObject jsonObject) throws JSONException { .synchronize(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug @@ -5525,7 +5525,7 @@ public void onJsonResponse(JSONObject jsonObject) throws JSONException { .synchronize(); IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug diff --git a/lib_common/src/main/java/com/qunar/im/utils/MD5.java b/lib_common/src/main/java/com/qunar/im/utils/MD5.java new file mode 100644 index 0000000..9842f6f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/MD5.java @@ -0,0 +1,38 @@ +package com.qunar.im.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5 { + /** + * Used by the hash method. + */ + private static MessageDigest MD5_DIGEST; + + static { + try { + MD5_DIGEST = MessageDigest.getInstance(StringUtils.MD5); + } + catch (NoSuchAlgorithmException e) { + // Smack wont be able to function normally if this exception is thrown, wrap it into + // an ISE and make the user aware of the problem. + throw new IllegalStateException(e); + } + } + + public static synchronized byte[] bytes(byte[] bytes) { + return MD5_DIGEST.digest(bytes); + } + + public static byte[] bytes(String string) { + return bytes(StringUtils.toBytes(string)); + } + + public static String hex(byte[] bytes) { + return StringUtils.encodeHex(bytes(bytes)); + } + + public static String hex(String string) { + return hex(StringUtils.toBytes(string)); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/PbAssemblyUtil.java b/lib_common/src/main/java/com/qunar/im/utils/PbAssemblyUtil.java new file mode 100644 index 0000000..a673d1e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/PbAssemblyUtil.java @@ -0,0 +1,1433 @@ +package com.qunar.im.utils; + +import android.text.TextUtils; + +import com.google.gson.Gson; +import com.google.protobuf.ByteString; +import com.orhanobut.logger.Logger; +import com.qunar.im.base.common.ConversitionType; +import com.qunar.im.base.module.IMMessage; +import com.qunar.im.core.services.QtalkNavicationService; +import com.qunar.im.common.CurrentPreference; +import com.qunar.im.protobuf.Event.QtalkEvent; +import com.qunar.im.protobuf.common.ProtoMessageOuterClass; +import com.qunar.im.protobuf.entity.XMPPJID; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +/** + * Created by hubin on 2017/8/15. + */ + +//拼接pb消息工具类 +public class PbAssemblyUtil { + + //根据immessage消息转换成发送正在输入状态消息 + public static ProtoMessageOuterClass.ProtoMessage getTypingStatusMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + //设置消息正文 就是空的 + .setValue("") + .build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型 + .setMessageType(ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE) + //设置客户端类型 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本 + .setClientVersion(0) + //设置messageid + .setMessageId("") + //设置消息时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置body + .setBody(messageBody) + .build(); + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 正在输入中 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeTyping_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); + return protoMessage; + } + + + public static ProtoMessageOuterClass.ProtoMessage getRevokeMessage(IMMessage imMessage) { + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + + ProtoMessageOuterClass.StringHeader qchatId; + ProtoMessageOuterClass.StringHeader keyQchatId; + if (!TextUtils.isEmpty(imMessage.getQchatid())) { + qchatId = ProtoMessageOuterClass.StringHeader.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeChatId) + .setValue(imMessage.getQchatid()) + .build(); + keyQchatId = ProtoMessageOuterClass.StringHeader.newBuilder() + .setKey("qchatid") + .setValue(imMessage.getQchatid()) + .build(); + builder.addHeaders(qchatId); + builder.addHeaders(keyQchatId); + } + ProtoMessageOuterClass.StringHeader consultInfo; + if (imMessage.getConsultInfo() != null) { + consultInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeChannelId) + .setValue(new Gson().toJson(imMessage.getConsultInfo())) + .build(); + builder.addHeaders(consultInfo); + } + + //设置消息正文 + ProtoMessageOuterClass.MessageBody messageBody = builder.setValue(imMessage.getBody()) + .build(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息id 这里设置要撤销的那条消息的id + .setMessageId(imMessage.getId()) + //设置消息类型 + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置版本 + .setClientVersion(0) + //设置消息时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置消息体 + .setBody(messageBody) + .build(); + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //? + .setOptions(0) + //设置撤回消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeRevoke_VALUE) + //设置发送人 + .setFrom(imMessage.getFromID()) + //设置接收人 + .setTo(imMessage.getToID()) + //设置消息 + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + .build(); + + if (!TextUtils.isEmpty(imMessage.getRealfrom()) + && !TextUtils.isEmpty(imMessage.getRealto())) { + + protoMessage = protoMessage.toBuilder() + .setRealfrom(imMessage.getRealfrom()) + .setRealto(imMessage.getRealto()) + .build(); + } + + return protoMessage; + } + + + //根据IMMessage类型转换成ProtoMessage 纯文本消息 + public static ProtoMessageOuterClass.ProtoMessage getGroupTextOrEmojiMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + ProtoMessageOuterClass.StringHeader extendInfo; + ProtoMessageOuterClass.StringHeader backUpInfo; + if (!TextUtils.isEmpty(imMessage.getExt())) {//添加extendinfo + extendInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getExt()) + .build(); + builder.addHeaders(extendInfo); + } + if(!TextUtils.isEmpty(imMessage.getBackUp())){ + backUpInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeBackupInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getBackUp()) + .build(); + builder.addHeaders(backUpInfo); + } + + builder.setValue(imMessage.getBody()); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = imMessage.getId(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeGroupChat_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); +// +// +// +//// + return protoMessage; +// return null; + } + + /** + * 发送错误方法单独使用 + * @param userid + * @param str + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage getTextErrorMessage(String userid,String str) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + + + + + builder.setValue(str+"|sendId:"+userid); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = UUID.randomUUID()+""; + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(1) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置toId + .setTo(userid+"@"+ QtalkNavicationService.getInstance().getXmppdomain()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeChat_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); + + +// +// +// +//// + return protoMessage; +// return null; + } + + //根据IMMessage类型转换成ProtoMessage 纯文本消息 + public static ProtoMessageOuterClass.ProtoMessage getTextOrEmojiMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + + + ProtoMessageOuterClass.StringHeader extendInfo; + ProtoMessageOuterClass.StringHeader backUpInfo; + if (!TextUtils.isEmpty(imMessage.getExt())) {//添加extendinfo + extendInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getExt()) + .build(); + builder.addHeaders(extendInfo); + } + if(!TextUtils.isEmpty(imMessage.getBackUp())){ + backUpInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeBackupInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getBackUp()) + .build(); + builder.addHeaders(backUpInfo); + } + ProtoMessageOuterClass.StringHeader qchatId; + ProtoMessageOuterClass.StringHeader keyQchatId; + if (!TextUtils.isEmpty(imMessage.getQchatid())) { + qchatId = ProtoMessageOuterClass.StringHeader.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeChatId) + .setValue(imMessage.getQchatid()) + .build(); + keyQchatId = ProtoMessageOuterClass.StringHeader.newBuilder() + .setKey("qchatid") + .setValue(imMessage.getQchatid()) + .build(); + builder.addHeaders(qchatId); + builder.addHeaders(keyQchatId); + } + ProtoMessageOuterClass.StringHeader consultInfo; + if (imMessage.getConsultInfo() != null) { + consultInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeChannelId) + .setValue(new Gson().toJson(imMessage.getConsultInfo())) + .build(); + builder.addHeaders(consultInfo); + } + + + builder.setValue(imMessage.getBody()); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = imMessage.getId(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeChat_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); + if ((imMessage.getType() == ConversitionType.MSG_TYPE_CONSULT_SERVER + || imMessage.getType() == ConversitionType.MSG_TYPE_CONSULT) && + !TextUtils.isEmpty(imMessage.getRealfrom()) + && !TextUtils.isEmpty(imMessage.getRealto())) { + + imMessage.setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE); + protoMessage = protoMessage.toBuilder() + .setRealfrom(imMessage.getRealfrom()) + .setRealto(imMessage.getRealto()) + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE) + .build(); + } +// +// +// +//// + return protoMessage; +// return null; + } + + //根据IMMessage类型转换成ProtoMessage 机器人消息 + public static ProtoMessageOuterClass.ProtoMessage getSubscriptionMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + ProtoMessageOuterClass.StringHeader extendInfo; + if (!TextUtils.isEmpty(imMessage.getExt())) {//添加extendinfo + extendInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getExt()) + .build(); + builder.addHeaders(extendInfo); + } + builder.setValue(imMessage.getBody()); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = imMessage.getId(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeSubscription_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); +// +// +// +//// + return protoMessage; +// return null; + } + + //根据IMMessage类型转换成ProtoMessage 加密信令消息 + public static ProtoMessageOuterClass.ProtoMessage getEncryptSignalMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + ProtoMessageOuterClass.StringHeader extendInfo; + if (!TextUtils.isEmpty(imMessage.getExt())) {//添加extendinfo + extendInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getExt()) + .build(); + builder.addHeaders(extendInfo); + } + builder.setValue(imMessage.getBody()); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = imMessage.getId(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeEncryption_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); +// +// +// +//// + return protoMessage; +// return null; + } + + //根据IMMessage类型转换成ProtoMessage 机器人消息 + public static ProtoMessageOuterClass.ProtoMessage getWebrtcMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + ProtoMessageOuterClass.StringHeader extendInfo; + if (!TextUtils.isEmpty(imMessage.getExt())) {//添加extendinfo + extendInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getExt()) + .build(); + builder.addHeaders(extendInfo); + } + builder.setValue(imMessage.getBody()); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = imMessage.getId(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeWebRtc_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); + return protoMessage; + } + + //获取群组消息已读拼接对象 + public static ProtoMessageOuterClass.ProtoMessage getGroupBeenReadMessage(JSONArray jsonArray, String tager, XMPPJID self) { + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + ProtoMessageOuterClass.StringHeader stringHeader1 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(tager) + .build(); + ProtoMessageOuterClass.StringHeader stringHeader2 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部 还需要设置read type + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeReadType) +// .setKey("read_type") + //设置value 因为是群组消息 所以设置为2 + .setValue("2") + .build(); + + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + //设置消息正文 + .setValue(jsonArray.toString()) + //设置头部 + .addHeaders(stringHeader1) + .addHeaders(stringHeader2) + //编译 + .build(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置主体 + .setBody(messageBody) + //设置消息id + .setMessageId(UUID.randomUUID().toString()) + //设置消息类型 + .setMessageType(ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE) + //设置客户端类型 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本 + .setClientVersion(0) + //设置时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeReadmark_VALUE) + //设置发送方 此处应为自己 + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置接收方 此处应为自己 + .setTo(CurrentPreference.getInstance().getPreferenceUserId()) + //设置Message + .setMessage(xmppMessage.toByteString()) + .build(); + return protoMessage; + } + + //获取要发送的已读消息对象 + public static ProtoMessageOuterClass.ProtoMessage getBeenReadMessage(JSONArray jsonArray, String target, XMPPJID self) { + Logger.i("发送已读状态:" + jsonArray.toString()); + + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + + ProtoMessageOuterClass.StringHeader stringHeader1 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(target) + .build(); + ProtoMessageOuterClass.StringHeader stringHeader2 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部 还需要设置read type + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeReadType) +// .setKey("read_type") + //设置value + .setValue("1") + .build(); + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + //设置消息正文 + .setValue(jsonArray.toString()) + //设置头部 + .addHeaders(stringHeader1) + .addHeaders(stringHeader2) + //编译 + .build(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置主体 + .setBody(messageBody) + //设置消息id + .setMessageId(UUID.randomUUID().toString()) + //设置消息类型 + .setMessageType(ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE) + //设置客户端类型 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本 + .setClientVersion(0) + //设置时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeReadmark_VALUE) + //设置发送方 此处应为自己 + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置接收方 此处应为自己 + .setTo(CurrentPreference.getInstance().getPreferenceUserId()) + //设置Message + .setMessage(xmppMessage.toByteString()) + .build(); + return protoMessage; + + } + + + + //获取要发送的已读消息对象 + public static ProtoMessageOuterClass.ProtoMessage getBeenNewReadStateForTimeMessage(String state,JSONObject messageTime, String target, XMPPJID self) { +// Logger.i("发送已读状态:" + jsonArray.toString()); + + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + + ProtoMessageOuterClass.StringHeader stringHeader1 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(target) + .build(); + ProtoMessageOuterClass.StringHeader stringHeader2 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部 还需要设置read type + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeReadType) +// .setKey("read_type") + //设置value + .setValue(state) + .build(); + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + //设置消息正文 + .setValue(messageTime.toString()) + //设置头部 + .addHeaders(stringHeader1) + .addHeaders(stringHeader2) + //编译 + .build(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置主体 + .setBody(messageBody) + //设置消息id + .setMessageId(UUID.randomUUID().toString()) + //设置消息类型 + .setMessageType(ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE) + //设置客户端类型 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本 + .setClientVersion(0) + //设置时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeReadmark_VALUE) + //设置发送方 此处应为自己 + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置接收方 此处应为自己 + .setTo(CurrentPreference.getInstance().getPreferenceUserId()) + //设置Message + .setMessage(xmppMessage.toByteString()) + .build(); + return protoMessage; + + } + + + //获取要发送的已读消息对象 + public static ProtoMessageOuterClass.ProtoMessage getBeenNewReadStateMessage(String state,JSONArray messageiD, String target, XMPPJID self) { +// Logger.i("发送已读状态:" + jsonArray.toString()); + + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + + ProtoMessageOuterClass.StringHeader stringHeader1 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(target) + .build(); + ProtoMessageOuterClass.StringHeader stringHeader2 = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部 还需要设置read type + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeReadType) +// .setKey("read_type") + //设置value + .setValue(state) + .build(); + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + //设置消息正文 + .setValue(messageiD.toString()) + //设置头部 + .addHeaders(stringHeader1) + .addHeaders(stringHeader2) + //编译 + .build(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置主体 + .setBody(messageBody) + //设置消息id + .setMessageId(UUID.randomUUID().toString()) + //设置消息类型 + .setMessageType(ProtoMessageOuterClass.MessageType.MessageTypeText_VALUE) + //设置客户端类型 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本 + .setClientVersion(0) + //设置时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeReadmark_VALUE) + //设置发送方 此处应为自己 + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置接收方 此处应为自己 + .setTo(target) + //设置Message + .setMessage(xmppMessage.toByteString()) + .build(); + return protoMessage; + + } + + //根据IMMessage类型转换成ProtoMessage 机器人消息 + public static ProtoMessageOuterClass.ProtoMessage getTransMessage(IMMessage imMessage) { + ProtoMessageOuterClass.MessageBody.Builder builder = ProtoMessageOuterClass.MessageBody.newBuilder(); + ProtoMessageOuterClass.StringHeader extendInfo; + if (!TextUtils.isEmpty(imMessage.getExt())) {//添加extendinfo + extendInfo = ProtoMessageOuterClass.StringHeader.newBuilder() + //设置消息头部key 更新已读状态头部key为extendInfo类型 + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo) +// .setKey("extendInfo") + //设置相对应value 更新已读状态头部value为消息是谁发来的 + .setValue(imMessage.getExt()) + .build(); + builder.addHeaders(extendInfo); + } + builder.setValue(imMessage.getBody()); + ProtoMessageOuterClass.MessageBody messageBody = builder.build(); + //获取当前时间 + Date time = Calendar.getInstance().getTime(); + //获得随机messageId + String id = imMessage.getId(); + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() + //设置消息类型! + .setMessageType(imMessage.getMsgType()) + //设置客户端类型 androidsdk 这个是1 + .setClientType(ProtoMessageOuterClass.ClientType.ClientTypeAndroid_VALUE) + //设置客户端版本? 暂时先写个0 + .setClientVersion(0) + //设置消息发送时间 + .setReceivedTime(time.getTime()- CurrentPreference.getInstance().getServerTimeDiff()) + //设置随机Id + .setMessageId(id) + //设置消息体 + .setBody(messageBody) + //编译 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置fromId + .setFrom(imMessage.getFromID()) + //设置toId + .setTo(imMessage.getToID()) + //这个数据意图不明显,接收到的消息都有 + .setOptions(0) + //设置消息类型 + .setSignalType(141) + //设置Message + .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) + //编译对象 + .build(); + return protoMessage; + } + + + + /** + * 心跳消息 + * + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage getHeartBeatMessage() { + + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + //设置消息正文 + .setValue(" ") + //编译 + .build(); + + ProtoMessageOuterClass.IQMessage xmppMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + //设置主体 + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyPing) + .setMessageId(UUID.randomUUID().toString()) + .setBody(messageBody)//设置客户端类型 + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置Message + .setMessage(xmppMessage.toByteString()) + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + .build(); + return protoMessage; + + } + + /** + * 好友验证消息 + * + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage getVerifyFriendModeMessage(String target) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyGetVerifyFriendOpt) + .setMessageId(UUID.randomUUID().toString()) + .setValue(target) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置 + .setTo(target) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + + } + + public static ProtoMessageOuterClass.ProtoMessage getVerifyFriendMessage(String target,String from) { + ProtoMessageOuterClass.MessageBody body = ProtoMessageOuterClass.MessageBody.newBuilder() + .setValue(QtalkEvent.Verify_Friend) + .build(); + + ProtoMessageOuterClass.PresenceMessage protoPresenceMessage = ProtoMessageOuterClass.PresenceMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.PresenceKeyType.PresenceKeyVerifyFriend) + .setMessageId(UUID.randomUUID().toString()) + .setBody(body) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置 + .setTo(target) + .setFrom(from) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypePresence_VALUE) + //设置Message + .setMessage(protoPresenceMessage.toByteString()) + //编译对象 + .build(); + + return protoMessage; + + } + + + + +// public static ProtoMessageOuterClass.ProtoMessage getSpecialNoticeMessage(String target,String from,String key,String value){ +// +// +// +// ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() +// //设置头部 +//// .addHeaders(type) +// .setValue(key+value) +// //编译 +// .build(); +// ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.newBuilder() +// //设置主体 +// .setBody(messageBody) +// .setCategoryType(ProtoMessageOuterClass.CategoryType.CategorySpecialNotice_VALUE) +// //设置消息id +// .setMessageId(UUID.randomUUID().toString()) +// .build(); +// +// ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() +// //设置 +// .setTo(target) +// .setFrom(from) +// //设置消息类型 +// .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypePresence_VALUE) +// //设置Message +// .setMessage(presenceMessage.toByteString()) +// //设置Message +// //编译对象 +// .build(); +// +// return protoMessage; +// } + + public static ProtoMessageOuterClass.ProtoMessage getVerifyFriendMessage(String target,String from,String answer) { + ProtoMessageOuterClass.StringHeader header = ProtoMessageOuterClass.StringHeader.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeAnswer) + .setValue(answer) + .build(); + + ProtoMessageOuterClass.MessageBody body = ProtoMessageOuterClass.MessageBody.newBuilder() + .setValue(QtalkEvent.Verify_Friend) + .addHeaders(header) + .build(); + + ProtoMessageOuterClass.IQMessage protoPresenceMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyMucCreate) + .setMessageId(UUID.randomUUID().toString()) + .setBody(body) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置 + .setTo(target) + .setFrom(from) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypePresence_VALUE) + //设置Message + .setMessage(protoPresenceMessage.toByteString()) + //编译对象 + .build(); + + return protoMessage; + + } + + +// public static ProtoMessageOuterClass.ProtoMessage getTextOrEmojiMessage(String fromId, String toId,String str) { +// +// ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() +// //设置消息正文 +// .setValue(str) +// //编译 +// .build(); +// //获取当前时间 +// Date time = Calendar.getInstance().getTime(); +// //获得随机messageId +// String id = UUID.randomUUID().toString(); +// ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.newBuilder() +// //设置消息类型! +// .setMessageType(MessageType.TEXT_MESSAGE) +// //设置客户端类型 androidsdk 这个是1 +// .setClientType(1) +// //设置客户端版本? 暂时先写个0 +// .setClientVersion(0) +// //设置消息发送时间 +// .setReceivedTime(time.getTime()) +// //设置随机Id +// .setMessageId(id) +// //设置消息体 +// .setBody(messageBody) +// //编译 +// .build(); +// +// ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() +// //设置fromId +// .setFrom(fromId) +// //设置toId +// .setTo(toId) +// //这个数据意图不明显,接收到的消息都有 +// .setOptions(0) +// //设置消息类型 +// .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeChat_VALUE) +// //设置Message +// .setMessage(ByteString.copyFrom(xmppMessage.toByteArray())) +// //编译对象 +// .build(); +// +// +// + +// return protoMessage; +// } + + /** + * 获取群成员列表 + * + * @param key 群ID + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage getMembersAfterJoin(String key) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyGetMucUser) + .setMessageId(UUID.randomUUID().toString()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置toId + .setTo(key) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + } + + /** + * 创建群 + * + * @param key + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage createGroup(String key) { + Logger.i("创建的群的id:" + key); + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyMucCreate) + .setMessageId(UUID.randomUUID().toString()) + //群id + .setValue(key) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置toId + .setTo(key) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + + } + + /** + * 邀请人消息(v2): + * + * @param groupId + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage inviteMessageV2(XMPPJID self, String groupId, List invitedList) { +// ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder().build(); +// messageBody.toBuilder() + List bodyList = new ArrayList<>(); + for (int i = 0; i < invitedList.size(); i++) { + ProtoMessageOuterClass.MessageBody mb = ProtoMessageOuterClass.MessageBody.newBuilder() + //固定写法 加入群组value为invite + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setKey("jid").setValue(invitedList.get(i)).build()) + .setValue("invite") + .build(); + bodyList.add(mb); + } + + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyMucInviteV2) + .setMessageId(UUID.randomUUID().toString()) + .build(); + for (int i = 0; i < bodyList.size(); i++) { + protoIQMessage = protoIQMessage.toBuilder().addBodys(bodyList.get(i)).build(); + } +// protoIQMessage.getBodysList() + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置toId + .setTo(groupId) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .setOptions(1) + .build(); + + return protoMessage; + } + + /** + * 入群注册 + * + * @param key + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage regitstInGroup(String key) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setKey("MUC_INVITE_V2") + .setMessageId(UUID.randomUUID().toString()) + //群id + .setValue(key) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置toId + .setTo(key) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + } + + /** + * 退出群 + * + * @param key + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage leaveGroup(String key) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyDelMucUser) + + .setMessageId(UUID.randomUUID().toString()) + //群id + .setValue(key) + .build(); + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置toId + .setTo(key) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + } + + + /** + * 销毁群组 + * + * @param key + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage destroyGroup(String key) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyDestroyMuc) + .setMessageId(UUID.randomUUID().toString()) + //群id + .setValue(key) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置toId + .setTo(key) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + } + + + //presence消息 + + /** + * 删除群成员 + * + * @param + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage delGroupMember(XMPPJID self, String groupId, String name, String jid) { +//// ProtoMessageOuterClass.StringHeader header = ProtoMessageOuterClass.StringHeader.newBuilder() +//// .setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeAffiliation) +//// .build(); +// List bodyList = new ArrayList<>(); +// for (Map.Entry entry : map.entrySet()) { + ProtoMessageOuterClass.MessageBody mb = ProtoMessageOuterClass.MessageBody.newBuilder() + //固定写法 加入群组value为invite + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setKey("read_jid").setValue(jid).build()) + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeNick).setValue(name).build()) + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeRole).setValue("none")) + .setValue("item") + .build(); + + + ProtoMessageOuterClass.IQMessage iqMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyCancelMember) + .setMessageId(UUID.randomUUID().toString()) + .setBody(mb) + .build(); +// for (int i = 0; i < bodyList.size(); i++) { +// iqMessage = iqMessage.toBuilder().addBodys(bodyList.get(i)).build(); +// } + + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置toId + .setTo(groupId) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(iqMessage.toByteArray())) + //编译对象 + .setOptions(1) + .build(); + return protoMessage; + } + + public static ProtoMessageOuterClass.ProtoMessage setGroupAdmin(String groupId,String xmppid,String nickName,boolean isAdmin){ + ProtoMessageOuterClass.MessageBody mb = ProtoMessageOuterClass.MessageBody.newBuilder() + //固定写法 加入群组value为invite + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setKey("read_jid").setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeRealJid).setValue(xmppid).build()) + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setKey("nick").setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeNick).setValue(nickName).build()) + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setKey("affiliation").setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeAffiliation).setValue(isAdmin ? "admin" : "member")) + .setValue("item") + .build(); + + ProtoMessageOuterClass.IQMessage iqMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(isAdmin ? ProtoMessageOuterClass.IQMessageKeyType.IQKeySetAdmin : ProtoMessageOuterClass.IQMessageKeyType.IQKeySetMember) + .setMessageId(UUID.randomUUID().toString()) + .setBody(mb) + .build(); + + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + .setTo(groupId) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(iqMessage.toByteArray())) + .build(); + return protoMessage; + } + + public static ProtoMessageOuterClass.ProtoMessage deleteFriend(XMPPJID self,String jid,String domain){ + ProtoMessageOuterClass.MessageBody mb = ProtoMessageOuterClass.MessageBody.newBuilder() + //固定写法 加入群组value为invite + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeJid).setValue(jid).build()) + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeDomain).setValue(domain).build()) + .addHeaders(ProtoMessageOuterClass.StringHeader.newBuilder().setKey("mode").setDefinedKey(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeMode).setValue("2").build()) + .setValue("delete_friend") + .build(); + + + ProtoMessageOuterClass.IQMessage iqMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyDelUserFriend) + .setMessageId(UUID.randomUUID().toString()) + .setBody(mb) + .build(); + + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(iqMessage.toByteArray())) + .build(); + return protoMessage; + } + + /** + * 获取好友列表 + * + * @param key + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage getFriends(String key) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyGetUserFriend) + .setMessageId(UUID.randomUUID().toString()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置 + .setFrom(key) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + } + + /** + * 获取用户注册的群列表 + * + * @param fullname + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage getUserMucs(String fullname) { + ProtoMessageOuterClass.IQMessage protoIQMessage = ProtoMessageOuterClass.IQMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.IQMessageKeyType.IQKeyGetUserMucs) + .setMessageId(UUID.randomUUID().toString()) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置 + .setTo(fullname) + .setFrom(fullname) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypeIQ_VALUE) + //设置Message + .setMessage(ByteString.copyFrom(protoIQMessage.toByteArray())) + //编译对象 + .build(); + + return protoMessage; + } + + /** + * 设置用户状态 + * Key: "status", Value:"user_update_status", Headers:["show":"away", "priority":"5"] + * @param state + * @return + */ + public static ProtoMessageOuterClass.ProtoMessage setUserState(String state) { + ProtoMessageOuterClass.StringHeader stringHeader1 = ProtoMessageOuterClass.StringHeader.newBuilder() + .setKey("show") + .setValue(state) + .build(); + ProtoMessageOuterClass.StringHeader stringHeader2 = ProtoMessageOuterClass.StringHeader.newBuilder() + .setKey("priority") + .setValue("5") + .build(); + + ProtoMessageOuterClass.MessageBody messageBody = ProtoMessageOuterClass.MessageBody.newBuilder() + .setValue("user_update_status") + //设置头部 + .addHeaders(stringHeader1) + .addHeaders(stringHeader2) + //编译 + .build(); + + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.newBuilder() + //设置主体 + .setBody(messageBody) + //设置消息id + .setMessageId(UUID.randomUUID().toString()) + .setKey("status") + .setValue("user_update_status") + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypePresence_VALUE) + //设置发送方 此处应为自己 + .setFrom(CurrentPreference.getInstance().getPreferenceUserId()) + //设置接收方 此处应为自己 + .setTo(CurrentPreference.getInstance().getPreferenceUserId()) + //设置Message + .setMessage(presenceMessage.toByteString()) + .build(); + return protoMessage; + } + + public static ProtoMessageOuterClass.ProtoMessage conversationSynchronizationMessage(String json, String from, String target) { + ProtoMessageOuterClass.MessageBody body = ProtoMessageOuterClass.MessageBody.newBuilder() + .setValue(json) + .build(); + + ProtoMessageOuterClass.PresenceMessage protoPresenceMessage = ProtoMessageOuterClass.PresenceMessage.newBuilder() + .setDefinedKey(ProtoMessageOuterClass.PresenceKeyType.PresenceKeyNotify) + .setMessageId(UUID.randomUUID().toString()) + .setCategoryType(ProtoMessageOuterClass.CategoryType.CategorySessionList_VALUE) + .setBody(body) + .build(); + + ProtoMessageOuterClass.ProtoMessage protoMessage = ProtoMessageOuterClass.ProtoMessage.newBuilder() + //设置 + .setTo(target) + .setFrom(from) + //设置消息类型 + .setSignalType(ProtoMessageOuterClass.SignalType.SignalTypePresence_VALUE) + //设置Message + .setMessage(protoPresenceMessage.toByteString()) + //编译对象 + .build(); + + return protoMessage; + + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/PbParseUtil.java b/lib_common/src/main/java/com/qunar/im/utils/PbParseUtil.java new file mode 100644 index 0000000..68f8f2c --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/PbParseUtil.java @@ -0,0 +1,902 @@ +package com.qunar.im.utils; + +import android.text.TextUtils; + +import com.google.gson.Gson; +import com.google.protobuf.InvalidProtocolBufferException; +import com.orhanobut.logger.Logger; +import com.qunar.im.base.common.ConversitionType; +import com.qunar.im.base.module.GroupMember; +import com.qunar.im.base.module.IMGroup; +import com.qunar.im.base.module.IMMessage; +import com.qunar.im.base.module.Nick; +import com.qunar.im.base.module.RevokeInfo; +import com.qunar.im.base.structs.MessageStatus; +import com.qunar.im.core.services.QtalkNavicationService; +import com.qunar.im.common.CurrentPreference; +import com.qunar.im.protobuf.common.ProtoMessageOuterClass; + +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by hubin on 2017/8/25. + */ + +public class PbParseUtil { + + private static final String CHAT = "chat"; + private static final String GROUP = "groupchat"; + + //解析撤回消息pb + public static RevokeInfo parseRevokeMessage(ProtoMessageOuterClass.ProtoMessage message) { + try { + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.parseFrom(message.getMessage()); + RevokeInfo revokeInfo = new Gson().fromJson(xmppMessage.getBody().getValue(), RevokeInfo.class); + revokeInfo.setMessageType(xmppMessage.getMessageType() + ""); + revokeInfo.setFrom(QtalkStringUtils.parseIdAndDomain(message.getFrom())); + revokeInfo.setTo(message.getTo()); + return revokeInfo; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //解析添加好友通知 + public static Nick parseAddFriend(ProtoMessageOuterClass.ProtoMessage message) { + try { + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = presenceMessage.getBody(); + List list = messageBody.getHeadersList(); + Nick nick = new Nick(); + boolean isSuccess = false; + + for (int i = 0; i < list.size(); i++) { + ProtoMessageOuterClass.StringHeader stringHeader = list.get(i); + if (stringHeader.hasDefinedKey()) { + if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeResult)) { + if ("success".equals(stringHeader.getValue())) { + isSuccess = true; + } else { + isSuccess =false; + } + } + } + + } + if(isSuccess){ + nick.setXmppId(message.getFrom()); + return nick; + }else{ + return null; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + //解析删除好友通知 + public static Nick parseRemoveFriend(ProtoMessageOuterClass.ProtoMessage message) { + try { + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = presenceMessage.getBody(); + List list = messageBody.getHeadersList(); + Nick nick = new Nick(); + boolean isSuccess = false; + String jid=""; + String domain=""; + for (int i = 0; i < list.size(); i++) { + ProtoMessageOuterClass.StringHeader stringHeader = list.get(i); + if (stringHeader.hasDefinedKey()) { + if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeResult)) { + if ("success".equals(stringHeader.getValue())) { + isSuccess = true; + } else { + isSuccess =false; + } + } else if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeJid)) { + jid = stringHeader.getValue(); + } else if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeDomain)) { + domain = stringHeader.getValue(); + } + } + + } + if(isSuccess){ + nick.setXmppId(jid+"@"+domain); + return nick; + }else{ + return null; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 解析群成员 + * + * @param message + * @return + */ + public static Nick parseMucCard(ProtoMessageOuterClass.ProtoMessage message) { + + try { + Nick nick = new Nick(); + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = presenceMessage.getBody(); + nick.setGroupId(message.getFrom()); + List list = messageBody.getHeadersList(); + for (int i = 0; i < list.size(); i++) { + ProtoMessageOuterClass.StringHeader stringHeader = list.get(i); + if (stringHeader.hasDefinedKey()) { + if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeNick)) { + nick.setName(stringHeader.getValue()); + } else if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeTitle)) { + nick.setTopic(stringHeader.getValue()); + } else if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypePic)) { + nick.setHeaderSrc(UrlCheckUtil.checkUrlForHttp(QtalkNavicationService.getInstance().getInnerFiltHttpHost(), stringHeader.getValue())); + } else if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeVersion)) { + nick.setLastUpdateTime(stringHeader.getValue()); + } + } + if (stringHeader.hasKey()) { + if (stringHeader.getKey().equals("desc")) { + nick.setIntroduce(stringHeader.getValue()); + } + } + } + nick.setExtendedFlag(""); + return nick; + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 解析删除成员消息 + * + * @param message + * @return + */ + public static GroupMember parseDeleteMucMember(ProtoMessageOuterClass.ProtoMessage message) { + try { + GroupMember gm = new GroupMember(); + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = presenceMessage.getBody(); + gm.setGroupId(message.getFrom()); + List list = messageBody.getHeadersList(); + + for (int i = 0; i < list.size(); i++) { + ProtoMessageOuterClass.StringHeader stringHeader = list.get(i); + if (stringHeader.hasDefinedKey()) { + if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeDeleleJid)) { + gm.setMemberId(stringHeader.getValue()); + } + } + } + + return gm; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 解析销毁群组消息 + * + * @param message + * @return + */ + public static IMGroup parseDeleteMuc(ProtoMessageOuterClass.ProtoMessage message) { + try { + IMGroup img = new IMGroup(); + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = presenceMessage.getBody(); + img.setGroupId(QtalkStringUtils.parseIdAndDomain(message.getFrom())); + List list = messageBody.getHeadersList(); + + for (int i = 0; i < list.size(); i++) { + ProtoMessageOuterClass.StringHeader stringHeader = list.get(i); + if(stringHeader.hasKey()){ + if("mucname".equals(stringHeader.getKey())){ + String value = stringHeader.getValue(); + if(!TextUtils.isEmpty(value)){ + img.setName(value); + } + } + } +// if (stringHeader.hasDefinedKey()) { +// if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeDeleleJid)) { +// img.setMemberId(stringHeader.getValue()); +// } +// } + } + + return img; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + /** + * 解析成员加入广播 + * + * @param message + * @return + */ + public static GroupMember parseInviteMucMember(ProtoMessageOuterClass.ProtoMessage message) { + try { + GroupMember gm = new GroupMember(); + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = presenceMessage.getBody(); + gm.setGroupId(message.getFrom()); + List list = messageBody.getHeadersList(); + for (int i = 0; i < list.size(); i++) { + ProtoMessageOuterClass.StringHeader stringHeader = list.get(i); + if (stringHeader.hasDefinedKey()) { + if (stringHeader.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeInviteJid)) { + gm.setMemberId(stringHeader.getValue()); + } + } + } + gm.setAffiliation(2 + ""); + gm.setLastUpdateTime(String.valueOf(presenceMessage.getReceivedTime())); + return gm; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 解析收到的群组消息 + * + * @param protoMessage + * @param readState + * @param messageState + * @return + */ + public static IMMessage parseReceiveGroupChatMessage(ProtoMessageOuterClass.ProtoMessage protoMessage, String readState, String messageState) { + try { + + + IMMessage imMessage = new IMMessage(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.parseFrom(protoMessage.getMessage()); +// String myNickName = CurrentPreference.getInstance().getUserName(); + + //获取xmppid + String xmppid = QtalkStringUtils.parseIdAndDomain(protoMessage.getFrom()); + //获取发送消息人名 + String nickName = QtalkStringUtils.parseNickName(protoMessage.getFrom()); +// Nick nick = IMDatabaseManager.getInstance().selectUserByName(nickName); + String realFrom = protoMessage.getRealfrom(); + imMessage.setUserId(realFrom); +// imMessage.setRealfrom(realFrom); +// if (nick != null) { +// imMessage.setUserId(nick.getXmppId()); +// } else { +// imMessage.setUserId(nickName); +// } + List stringHeaders = xmppMessage.getBody().getHeadersList(); + // imMessage.setExt(""); + + for (int i = 0; i < stringHeaders.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = stringHeaders.get(i); + + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo)) { + imMessage.setExt(sh.getValue()); +// = sh.getValue(); + } else if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeBackupInfo)) { + imMessage.setExt(sh.getValue()); + } + + } + //设置中文名 + imMessage.setNickName(nickName); + //// TODO: 2017/8/21 后面应该有判断是左边 还是右边的方法 + //设置消息id + imMessage.setMessageID(xmppMessage.getMessageId()); + imMessage.setId(xmppMessage.getMessageId()); + //设置xmppid + imMessage.setConversationID(xmppid); + imMessage.setRealfrom(TextUtils.isEmpty(realFrom) ? nickName : realFrom); + //设置from 群组消息的from都是名字 + imMessage.setFromID(TextUtils.isEmpty(realFrom) ? nickName : realFrom); + imMessage.setToID(""); + //设置文本消息 + imMessage.setBody(xmppMessage.getBody().getValue()); + //platfrom + imMessage.setMaType(String.valueOf(xmppMessage.getClientType())); + //设置消息类型 + int type = xmppMessage.getMessageType(); + imMessage.setMsgType(type); + //设置消息状态 + imMessage.setReadState(Integer.parseInt(readState)); + //设置方向 + if (realFrom.equals(CurrentPreference.getInstance().getPreferenceUserId())) { + imMessage.setDirection(1); + imMessage.setIsRead(1); + } else { + imMessage.setDirection(0); + imMessage.setIsRead(Integer.parseInt(messageState)); + + } + imMessage.setMessageState(Integer.parseInt(messageState)); + if (type == -1 || type == 15) { + imMessage.setDirection(2); + } + + if (protoMessage.getSignalType() == ProtoMessageOuterClass.SignalType.SignalTypeChat_VALUE) { +// imMessage.setSignalType(ConversitionType.MSG_TYPE_CHAT); + imMessage.setType(ConversitionType.MSG_TYPE_CHAT); + } else if (protoMessage.getSignalType() == ProtoMessageOuterClass.SignalType.SignalTypeGroupChat_VALUE) { +// imMessage.setSignalType(ConversitionType.MSG_TYPE_GROUP); + imMessage.setType(ConversitionType.MSG_TYPE_GROUP); + } else { +// imMessage.setSignalType(ConversitionType.MSG_TYPE_CHAT); + imMessage.setType(ConversitionType.MSG_TYPE_CHAT); + } + + //设置消息时间 + imMessage.setTime(new Date(xmppMessage.getReceivedTime())); + //设置消息字符串 + imMessage.setMessageRaw(String.valueOf(xmppMessage.toByteString())); + + + return imMessage; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + + + /** + * 收到pb消息 阅读状态解析 + * + * @param protoMessage + * @return + */ + public static IMMessage parseReceiveReadMessage(ProtoMessageOuterClass.ProtoMessage protoMessage) { + try { + IMMessage imMessage = new IMMessage(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.parseFrom(protoMessage.getMessage()); + ProtoMessageOuterClass.MessageBody messageBody = xmppMessage.getBody(); + List stringHeaders = xmppMessage.getBody().getHeadersList(); + // imMessage.setExt(""); + + imMessage.setSignalType(protoMessage.getSignalType()); + for (int i = 0; i < stringHeaders.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = stringHeaders.get(i); + //如果为真,证明为抄送类型 + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeReadType)) { + if ((MessageStatus.STATUS_SINGLE_DELIVERED + "").equals(sh.getValue())) { + imMessage.setReadState(MessageStatus.REMOTE_STATUS_CHAT_DELIVERED); + imMessage.setCollectionType(ConversitionType.MSG_TYPE_CHAT); + } else if ((MessageStatus.STATUS_SINGLE_READED + "").equals(sh.getValue())) { + imMessage.setReadState(MessageStatus.REMOTE_STATUS_CHAT_READED); + imMessage.setCollectionType(ConversitionType.MSG_TYPE_CHAT); + }else if((MessageStatus.STATUS_SINGLE_OPERATION+"").equals(sh.getValue())){ + imMessage.setReadState((MessageStatus.REMOTE_STATUS_CHAT_OPERATION|MessageStatus.REMOTE_STATUS_CHAT_READED)); + imMessage.setCollectionType(ConversitionType.MSG_TYPE_CHAT); + } else if ((MessageStatus.STATUS_GROUP_READED + "").equals(sh.getValue())) { + imMessage.setReadState(MessageStatus.REMOTE_STATUS_GROUP_READED); + imMessage.setCollectionType(ConversitionType.MSG_TYPE_GROUP); + } + } + //强化消息字段储存 + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo)) { + imMessage.setExt(sh.getValue()); + } + } + imMessage.setNewReadList(new JSONArray(messageBody.getValue())); + //得到from + String to = QtalkStringUtils.parseIdAndDomain(protoMessage.getTo()); + //得到to + String from = QtalkStringUtils.parseIdAndDomain(protoMessage.getFrom()); + //设置消息id + imMessage.setId(xmppMessage.getMessageId()); + imMessage.setMessageID(xmppMessage.getMessageId()); + imMessage.setTime(new Date(xmppMessage.getReceivedTime())); + if (from.equals(CurrentPreference.getInstance().getPreferenceUserId())) { + if(imMessage.getCollectionType()==ConversitionType.MSG_TYPE_GROUP){ + imMessage.setConversationID(imMessage.getExt()); + imMessage.setUserId(to); + }else{ + imMessage.setConversationID(to); + imMessage.setUserId(to); + } + } else { + imMessage.setConversationID(from); + imMessage.setUserId(from); + } + return imMessage; + + + } catch (Exception e) { + Logger.i(e + ""); + e.printStackTrace(); + } + + return null; + } + + /** + * 收到pb消息解析成IMMessage消息 + * + * @param protoMessage + * @param readState + * @param messageState + * @return + */ + public static IMMessage parseReceiveChatMessage(ProtoMessageOuterClass.ProtoMessage protoMessage, String readState, String messageState) { + try { + IMMessage imMessage = new IMMessage(); + + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.parseFrom(protoMessage.getMessage()); + + //获得当前消息载体是否为抄送类型 + //先获取头部信息列表 + boolean carbon = false; + List stringHeaders = xmppMessage.getBody().getHeadersList(); + // imMessage.setExt(""); + + imMessage.setSignalType(protoMessage.getSignalType()); + for (int i = 0; i < stringHeaders.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = stringHeaders.get(i); + //如果为真,证明为抄送类型 + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeCarbon)) { + carbon = true; + imMessage.setCarbon(true); + } + //强化消息字段储存 + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo)) { + imMessage.setExt(sh.getValue()); +// = sh.getValue(); + } + //自动回复消息 + if (sh.getKey().equals("auto_reply")) { + imMessage.setAuto_reply(Boolean.parseBoolean(sh.getValue())); + } + //chatid 已经废弃了. 现在改为使用QchatId + //cousult消息时 获取qchatid +// if(sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeChatId)){ +// imMessage.setQchatid(sh.getValue()); +// } + if (sh.getKey().equals("qchatid")) { + imMessage.setQchatid(sh.getValue()); + } + + } + //得到from + String to = QtalkStringUtils.parseIdAndDomain(protoMessage.getTo()); + //得到to + String from = QtalkStringUtils.parseIdAndDomain(protoMessage.getFrom()); + //设置消息id + imMessage.setId(xmppMessage.getMessageId()); + imMessage.setMessageID(xmppMessage.getMessageId()); + //设置消息列表会话id + if (!carbon) { + if (from.equals(CurrentPreference.getInstance().getPreferenceUserId())) { + imMessage.setConversationID(to); + imMessage.setUserId(to); +// stat.bindString(2, to); + } else { + imMessage.setConversationID(from); + imMessage.setUserId(from); +// stat.bindString(2, from); + } + } else { + imMessage.setConversationID(from); + imMessage.setUserId(from); +// stat.bindString(2, from); + } + int type = ConversitionType.getConversitionType(protoMessage.getSignalType(), imMessage.getQchatid()); + String realfrom = QtalkStringUtils.parseIdAndDomain(protoMessage.getRealfrom()); + if(type == ConversitionType.MSG_TYPE_GROUP){//群 的realfrom 取sendjid + realfrom = QtalkStringUtils.parseIdAndDomain(protoMessage.getSendjid()); + } + String realto = QtalkStringUtils.parseIdAndDomain(protoMessage.getRealto()); + //判断真实id是否存在 + if (protoMessage.getSignalType() != ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE) { + if (!carbon) { + if (from.equals(CurrentPreference.getInstance().getPreferenceUserId())) { + imMessage.setRealfrom(to); + imMessage.setRealto(from); + } else { + imMessage.setRealfrom(from); + imMessage.setRealto(to); + } + } else { + imMessage.setRealfrom(from); + imMessage.setRealto(to); + } + } else { + if (!carbon) { + if (realfrom.equals(CurrentPreference.getInstance().getPreferenceUserId())) { + imMessage.setRealfrom(realto); + imMessage.setRealto(realfrom); + } else { + if(imMessage.getQchatid().equalsIgnoreCase(ConversitionType.MSG_TYPE_CONSULT_SERVER + "")) { + imMessage.setRealfrom(from); + imMessage.setRealto(realto); + }else { + imMessage.setRealfrom(realfrom); + imMessage.setRealto(realto); + } + } + } else { + imMessage.setRealfrom(realfrom); + imMessage.setRealto(realto); + } +// imMessage.setRealfrom(realfrom); + } + + imMessage.setType(type); + + + Logger.i("截取后的字段:" + from); + if (!carbon) { + //设置from + imMessage.setFromID(from); + //设置to + imMessage.setToID(to); + } else { + //设置from 因为是抄送,所以应该从自己发出 + imMessage.setFromID(to); + //设置to 因为是抄送,所以应该是给对方 + imMessage.setToID(from); + } + + //设置消息文本 + imMessage.setBody(xmppMessage.getBody().getValue()); + //platFrom 平台 android 4 + imMessage.setMaType(String.valueOf(xmppMessage.getClientType())); + //设置消息类型 + imMessage.setMsgType(xmppMessage.getMessageType()); + //设置消息状态 + imMessage.setReadState(Integer.parseInt(readState)); + //根据发送对象判断显示方向 + //如果不是抄送 + if (!carbon) { + if (from.equals(CurrentPreference.getInstance().getPreferenceUserId())) { + imMessage.setDirection(1); + } else { + imMessage.setDirection(0); + } + } else { + imMessage.setDirection(1); + } + + //设置时间 + imMessage.setTime(new Date(xmppMessage.getReceivedTime())); + //设置已读未读状态 + imMessage.setMessageRaw(String.valueOf(xmppMessage.toByteString())); + imMessage.setMessageState(Integer.parseInt(messageState)); + if (!carbon) { + imMessage.setIsRead(Integer.parseInt(messageState)); + } else { + imMessage.setIsRead(1); + } + return imMessage; + //把message对象存入 +// + +// imMessage.getSignalType() + + + } catch (Exception e) { + Logger.i(e + ""); + e.printStackTrace(); + } + + return null; + } + + public static IMMessage parseReceiveCollectionMessage(ProtoMessageOuterClass.ProtoMessage protoMessage) { + IMMessage imMessage = new IMMessage(); + try { + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.parseFrom(protoMessage.getMessage()); + //获得当前消息载体是否为抄送类型 + //先获取头部信息列表 +// boolean carbon = false; + List stringHeaders = xmppMessage.getBody().getHeadersList(); + // imMessage.setExt(""); + String type = protoMessage.getOrigintype(); + imMessage.setSignalType(protoMessage.getSignalType()); + for (int i = 0; i < stringHeaders.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = stringHeaders.get(i); + //如果为真,证明为抄送类型 +// if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeCarbon)) { +// carbon = true; +// imMessage.setCarbon(true); +// } + //强化消息字段储存 + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo)) { + imMessage.setExt(sh.getValue()); +// = sh.getValue(); + } + if (sh.getKey().equals("qchatid")) { + imMessage.setQchatid(sh.getValue()); + } + + } + //得到from + String to = QtalkStringUtils.parseIdAndDomain(protoMessage.getTo()); + //得到to + String from = QtalkStringUtils.parseIdAndDomain(protoMessage.getFrom()); + //得到oFrom + String oFrom = QtalkStringUtils.parseIdAndDomain(protoMessage.getOriginfrom()); + //得到oTo + String oTo = QtalkStringUtils.parseIdAndDomain(protoMessage.getOriginto()); + //群消息真是发送人 + String realfrom = QtalkStringUtils.parseIdAndDomain(protoMessage.getRealfrom()); + //暂时显示名字 +// String nickName = QtalkStringUtils.parseNickName(protoMessage.getOriginfrom()); + + imMessage.setNickName(realfrom); + //设置消息id + imMessage.setId(xmppMessage.getMessageId()); + imMessage.setMessageID(xmppMessage.getMessageId()); + //设置消息列表会话id + imMessage.setFromID(from); + imMessage.setToID(to); + imMessage.setoFromId(oFrom); + imMessage.setoToId(oTo); + imMessage.setConversationID(from); + imMessage.setUserId(from); + imMessage.setRealfrom(realfrom); + + String realto = QtalkStringUtils.parseIdAndDomain(protoMessage.getRealto()); + //判断真实id是否存在 +// if (protoMessage.getSignalType() != ProtoMessageOuterClass.SignalType.SignalTypeConsult_VALUE) { +// if (!carbon) { +// if (from.equals(IMLogicManager.getInstance().getMyself().bareJID().fullname())) { +// imMessage.setRealfrom(to); +// imMessage.setRealto(from); +// } else { +// imMessage.setRealfrom(from); +// imMessage.setRealto(to); +// } +// } else { +// imMessage.setRealfrom(from); +// imMessage.setRealto(to); +// } +// } else { +// if (!carbon) { +// if (realfrom.equals(IMLogicManager.getInstance().getMyself().bareJID().fullname())) { +// imMessage.setRealfrom(realto); +// imMessage.setRealto(realfrom); +// } else { +// imMessage.setRealfrom(realfrom); +// imMessage.setRealto(realto); +// } +// } else { +// imMessage.setRealfrom(realfrom); +// imMessage.setRealto(realto); +// } +//// imMessage.setRealfrom(realfrom); +// } + +// + imMessage.setType(ConversitionType.MSG_TYPE_COLLECTION); + if (CHAT.equals(type)) { + imMessage.setCollectionType(ConversitionType.MSG_TYPE_CHAT); + } else if (GROUP.equals(type)) { + imMessage.setCollectionType(ConversitionType.MSG_TYPE_GROUP); + } + + //设置消息文本 + imMessage.setBody(xmppMessage.getBody().getValue()); + //platFrom 平台 android 4 + imMessage.setMaType(String.valueOf(xmppMessage.getClientType())); + //设置消息类型 + imMessage.setMsgType(xmppMessage.getMessageType()); + //设置消息状态 + imMessage.setReadState(1); + imMessage.setMessageState(MessageStatus.LOCAL_STATUS_SUCCESS_PROCESSION); + imMessage.setReadState(MessageStatus.REMOTE_STATUS_CHAT_DELIVERED); + //设置方向 + imMessage.setDirection(0); + //设置时间 + imMessage.setTime(new Date(xmppMessage.getReceivedTime())); + //设置已读未读状态 + imMessage.setMessageRaw(String.valueOf(xmppMessage.toByteString())); + imMessage.setIsRead(0); + return imMessage; + + } catch (Exception e) { + Logger.i(e + ""); + } + return null; + } + + + public static List parseGetFriends(ProtoMessageOuterClass.ProtoMessage message) { + try { + ProtoMessageOuterClass.IQMessage iqMessage = ProtoMessageOuterClass.IQMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody body = iqMessage.getBody(); + List headerList = body.getHeadersList(); + List nicks = new ArrayList<>(); + JSONArray jsonArray = null; + for (int i = 0; i < headerList.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = headerList.get(i); + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeFriends)) { + jsonArray = new JSONArray(sh.getValue()); + } + } + if (jsonArray == null || jsonArray.length() <= 0) { + return null; + } + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jb = jsonArray.getJSONObject(i); + Nick n = new Nick(); + n.setXmppId(jb.getString("F") + "@" + jb.getString("H")); + n.setUserId(jb.getString("F")); + nicks.add(n); + } + return nicks; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static Map parseVerifyFriendMode(ProtoMessageOuterClass.ProtoMessage message) { + Map mode = new HashMap<>(); + try { + ProtoMessageOuterClass.IQMessage iqMessage = ProtoMessageOuterClass.IQMessage.parseFrom(message.getMessage()); + ProtoMessageOuterClass.MessageBody body = iqMessage.getBody(); + List headerList = body.getHeadersList(); + String jid = ""; + String value = ""; + String Question=""; + for (int i = 0; i < headerList.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = headerList.get(i); + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeJid)) { + jid = sh.getValue(); + } else if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeMode)) { + value = sh.getValue(); + }else if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeQuestion)){ + Question = sh.getValue(); + } + } + mode.put(jid, value); + if(!TextUtils.isEmpty(Question)){ + mode.put("Question",Question); + } + } catch (Exception e) { + e.printStackTrace(); + } + return mode; + } + + public static IMMessage parseErrorMessage(ProtoMessageOuterClass.ProtoMessage protoMessage){ + IMMessage imMessage = new IMMessage(); + try { + ProtoMessageOuterClass.XmppMessage xmppMessage = ProtoMessageOuterClass.XmppMessage.parseFrom(protoMessage.getMessage()); + List stringHeaders = xmppMessage.getBody().getHeadersList(); + imMessage.setSignalType(protoMessage.getSignalType()); + for (int i = 0; i < stringHeaders.size(); i++) { + ProtoMessageOuterClass.StringHeader sh = stringHeaders.get(i); + //强化消息字段储存 + if (sh.getDefinedKey().equals(ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeExtendInfo)) { + imMessage.setExt(sh.getValue()); + } + if ("errcode".equals(sh.getKey()) && "406".equals(sh.getValue())) { + //设置消息状态 + imMessage.setIsRead(1); + imMessage.setMessageState(MessageStatus.LOCAL_STATUS_FAILED); + imMessage.setReadState(MessageStatus.REMOTE_STATUS_CHAT_SUCCESS); + } + + } + //得到from + String to = QtalkStringUtils.parseIdAndDomain(protoMessage.getTo()); + //得到to + String from = QtalkStringUtils.parseIdAndDomain(protoMessage.getFrom()); + //得到oFrom + String oFrom = QtalkStringUtils.parseIdAndDomain(protoMessage.getOriginfrom()); + //得到oTo + String oTo = QtalkStringUtils.parseIdAndDomain(protoMessage.getOriginto()); + //群消息真是发送人 + String realfrom = QtalkStringUtils.parseIdAndDomain(protoMessage.getRealfrom()); + //暂时显示名字 +// String nickName = QtalkStringUtils.parseNickName(protoMessage.getOriginfrom()); + + imMessage.setNickName(realfrom); + //设置消息id + imMessage.setId(xmppMessage.getMessageId()); + imMessage.setMessageID(xmppMessage.getMessageId()); + //设置消息列表会话id + imMessage.setFromID(from); + imMessage.setToID(to); + imMessage.setoFromId(oFrom); + imMessage.setoToId(oTo); + imMessage.setConversationID(from); + imMessage.setUserId(from); + imMessage.setRealfrom(realfrom); + + //设置消息文本 + imMessage.setBody(xmppMessage.getBody().getValue()); + //platFrom 平台 android 4 + imMessage.setMaType(String.valueOf(xmppMessage.getClientType())); + //设置消息类型 + imMessage.setMsgType(xmppMessage.getMessageType()); + + imMessage.setType(ConversitionType.MSG_TYPE_CHAT); + //设置方向 + imMessage.setDirection(1); + //设置时间 + imMessage.setTime(new Date(xmppMessage.getReceivedTime())); + //设置已读未读状态 + imMessage.setMessageRaw(String.valueOf(xmppMessage.toByteString())); + return imMessage; + + } catch (Exception e) { + Logger.i(e + ""); + } + return null; + } + + public static GroupMember parseGroupAffiliation(ProtoMessageOuterClass.ProtoMessage message){ + try{ + ProtoMessageOuterClass.PresenceMessage presenceMessage = ProtoMessageOuterClass.PresenceMessage.parseFrom(message.getMessage()); + GroupMember member = new GroupMember(); + List headerList = presenceMessage.getBody().getHeadersList(); + String userId = ""; + String domain = ""; + String affiliation = ""; + String groupId = QtalkStringUtils.parseIdAndDomain(message.getFrom()); + long lastUodateTime = presenceMessage.getReceivedTime(); + if(headerList != null){ + for(ProtoMessageOuterClass.StringHeader header : headerList){ + if(header.hasDefinedKey()){ + if(header.getDefinedKey() == ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeJid){ + userId = header.getValue(); + }else if(header.getDefinedKey() == ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeAffiliation){ + affiliation = header.getValue(); + }else if(header.getDefinedKey() == ProtoMessageOuterClass.StringHeaderType.StringHeaderTypeDomain){ + domain = header.getValue(); + } + } + } + if(!TextUtils.isEmpty(userId) && !TextUtils.isEmpty(domain) && !TextUtils.isEmpty(affiliation)){ + String xmppid = userId + "@" + domain; + int per = "admin".equals(affiliation) ? 1 : 2; + member.setAffiliation(String.valueOf(per)); + member.setGroupId(groupId); + member.setMemberId(xmppid); + member.setLastUpdateTime(String.valueOf(lastUodateTime)); + } + + } + return member; + }catch (Exception e){ + + } + return null; + + } + + +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/PingUtils.java b/lib_common/src/main/java/com/qunar/im/utils/PingUtils.java new file mode 100644 index 0000000..ccd360b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/PingUtils.java @@ -0,0 +1,133 @@ +package com.qunar.im.utils; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import androidx.annotation.Nullable; +import android.util.Log; + +import com.orhanobut.logger.Logger; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.InetAddress; +import java.net.Socket; +import java.net.URL; + +/** + * Created by Lex lex on 2019-10-14. + */ +public class PingUtils { + + public static class Ping { + public String net = "NO_CONNECTION"; + public String host; + public String ip; + public int dns = Integer.MAX_VALUE; + public int cnt = Integer.MAX_VALUE; + } + /** + * ping + * @param pingNum ping的次数 + * @param url ping的目标URL + * @return + */ + public static boolean ping(int pingNum, String url) { + int status = 0; + Process p; + try { + p = Runtime.getRuntime().exec("/system/bin/ping -c " + pingNum + " " + url); + status = p.waitFor(); + } catch (Exception e) { + e.printStackTrace(); + } + if (status == 0) { + return true; + } else { + return false; + } + } + + public static Ping ping(URL url, Context ctx) { + Ping r = new Ping(); + if (isNetworkConnected(ctx)) { + r.net = getNetworkType(ctx); + try { + String hostAddress; + long start = System.currentTimeMillis(); + hostAddress = InetAddress.getByName(url.getHost()).getHostAddress(); + long dnsResolved = System.currentTimeMillis(); + Socket socket = new Socket(hostAddress, url.getPort()); + socket.close(); + long probeFinish = System.currentTimeMillis(); + r.dns = (int) (dnsResolved - start); + r.cnt = (int) (probeFinish - dnsResolved); + r.host = url.getHost(); + r.ip = hostAddress; + } + catch (Exception ex) { + Logger.e("Unable to ping"); + } + } + return r; + } + + public static boolean isNetworkConnected(Context context) { + ConnectivityManager cm = + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); + } + + @Nullable + public static String getNetworkType(Context context) { + ConnectivityManager cm = + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + if (activeNetwork != null) { + return activeNetwork.getTypeName(); + } + return null; + } + + public static boolean isInternetAvailable() { + try { + InetAddress ipAddr = InetAddress.getByName("google.com"); + //You can replace it with your name + return !ipAddr.equals(""); + + } catch (Exception e) { + return false; + } + } + public static boolean isGoogleConnected(Context context) { + ConnectivityManager cm = (ConnectivityManager)context + .getSystemService(Context.CONNECTIVITY_SERVICE); + + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + if (activeNetwork != null && activeNetwork.isConnected()) { + try { + URL url = new URL("http://www.google.com/"); + HttpURLConnection urlc = (HttpURLConnection)url.openConnection(); + urlc.setRequestProperty("User-Agent", "test"); + urlc.setRequestProperty("Connection", "close"); + urlc.setConnectTimeout(1000); // mTimeout is in seconds + urlc.setReadTimeout(1000); + urlc.connect(); + + Log.i("warning", "checking internet connection result " + urlc.getResponseCode()); + if (urlc.getResponseCode() == 200) { + return true; + } else { + return false; + } + } catch (IOException e) { + Log.i("warning", "Error checking internet connection", e); + return false; + } + } + + return false; + + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/QRUtil.java b/lib_common/src/main/java/com/qunar/im/utils/QRUtil.java new file mode 100644 index 0000000..ed052d6 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/QRUtil.java @@ -0,0 +1,159 @@ +package com.qunar.im.utils; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; +import android.text.TextUtils; +import android.util.Base64; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.BinaryBitmap; +import com.google.zxing.ChecksumException; +import com.google.zxing.DecodeHintType; +import com.google.zxing.EncodeHintType; +import com.google.zxing.FormatException; +import com.google.zxing.NotFoundException; +import com.google.zxing.RGBLuminanceSource; +import com.google.zxing.Result; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.common.HybridBinarizer; +import com.google.zxing.qrcode.QRCodeReader; +import com.google.zxing.qrcode.QRCodeWriter; +import com.orhanobut.logger.Logger; +import com.qunar.im.base.util.LogUtil; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Hashtable; +import java.util.Map; + +/** + * Created by xinbo.wang on 2015/5/15. + */ +public class QRUtil { + private static final String TAG = QRUtil.class.getSimpleName(); + private static final int QR_HEIGHT = 192; + private static final int QR_WIDTH = 192; + + public static Bitmap generateQRImageWihtDes(String source, String desc) { + Bitmap bitmap = generateQRImage(source); + Canvas canvas = new Canvas(); + + return bitmap; + } + + + public static String generateQRBase64(String source){ + return bitmapToBase64(generateQRImage(source)); + } + + public static Bitmap generateQRImage(String source) + { + return generateQRImage(source,QR_WIDTH,QR_HEIGHT); + } + + public static Bitmap generateQRImage(String source,int width,int height) + { + try + { + if(TextUtils.isEmpty(source)) + return null; + Map hints = new Hashtable(); + hints.put(EncodeHintType.CHARACTER_SET,"utf-8"); + BitMatrix bitMatrix = new QRCodeWriter().encode(source, BarcodeFormat.QR_CODE,width,height,hints); + int[] pixels = new int[width*height]; + + for(int y=0;y hints = new Hashtable<>(); + hints.put(DecodeHintType.CHARACTER_SET,"utf-8"); + hints.put(DecodeHintType.TRY_HARDER,Boolean.TRUE); + if(bitmap.getWidth()<200) + { + Matrix matrix = new Matrix(); + matrix.postScale(2,2); + bitmap = Bitmap.createBitmap( + bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true); + } + int[] pixels = new int[bitmap.getWidth()*bitmap.getHeight()]; + bitmap.getPixels(pixels,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight()); + RGBLuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(),bitmap.getHeight(),pixels); + BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); + QRCodeReader reader = new QRCodeReader(); + try { + Result result = reader.decode(binaryBitmap, hints); + decodeStr = result.getText(); + } catch (NotFoundException e) { + Logger.i(TAG + "ERROR=%s", e.getMessage()); + } catch (ChecksumException e) { + Logger.i(TAG + "ERROR=%s", e.getMessage()); + } catch (FormatException e) { + Logger.i(TAG + "ERROR=%s", e.getMessage()); + } catch (Exception e) { + Logger.i(TAG + "ERROR=%s", e.getMessage()); + } + return decodeStr; + } + + + /** + * bitmap转为base64 + * @param bitmap + * @return + */ + public static String bitmapToBase64(Bitmap bitmap) { + + String result = null; + ByteArrayOutputStream baos = null; + try { + if (bitmap != null) { + baos = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); + + baos.flush(); + baos.close(); + + byte[] bitmapBytes = baos.toByteArray(); + result ="data:image/jpg;base64,"+ Base64.encodeToString(bitmapBytes, Base64.DEFAULT); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (baos != null) { + baos.flush(); + baos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return result; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/QtalkDiskLogStrategy.java b/lib_common/src/main/java/com/qunar/im/utils/QtalkDiskLogStrategy.java new file mode 100644 index 0000000..238a508 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/QtalkDiskLogStrategy.java @@ -0,0 +1,116 @@ +package com.qunar.im.utils; + +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +import com.orhanobut.logger.LogStrategy; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Created by hubo.hu on 2017/10/11. + * 自定义log磁盘存储类 + */ + +/** + * Abstract class that takes care of background threading the file log operation on Android. + * implementing classes are free to directly perform I/O operations there. + */ +public class QtalkDiskLogStrategy implements LogStrategy { + + private final Handler handler; + + public QtalkDiskLogStrategy(Handler handler) { + this.handler = handler; + } + + @Override public void log(int level, String tag, String message) { + // do nothing on the calling thread, simply pass the tag/msg to the background thread + handler.sendMessage(handler.obtainMessage(level, message)); + } + + public static class WriteHandler extends Handler { + + private final String folder; + private final int maxFileSize; + + public WriteHandler(Looper looper, String folder, int maxFileSize) { + super(looper); + this.folder = folder; + this.maxFileSize = maxFileSize; + } + + @SuppressWarnings("checkstyle:emptyblock") + @Override public void handleMessage(Message msg) { + String content = (String) msg.obj; + + FileWriter fileWriter = null; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-MM-dd"); + Date date = new Date(System.currentTimeMillis()); + String timeStr = simpleDateFormat.format(date); + String fileName = "logs_"+timeStr; + File logFile = getLogFile(folder, fileName); + + try { + fileWriter = new FileWriter(logFile, true); + + writeLog(fileWriter, content); + + fileWriter.flush(); + fileWriter.close(); + } catch (IOException e) { + if (fileWriter != null) { + try { + fileWriter.flush(); + fileWriter.close(); + } catch (IOException e1) { /* fail silently */ } + } + } + } + + /** + * This is always called on a single background thread. + * Implementing classes must ONLY write to the fileWriter and nothing more. + * The abstract class takes care of everything else including close the stream and catching IOException + * + * @param fileWriter an instance of FileWriter already initialised to the correct file + */ + private void writeLog(FileWriter fileWriter, String content) throws IOException { + fileWriter.append(content); + } + + private File getLogFile(String folderName, String fileName) { + + File folder = new File(folderName); + if (!folder.exists()) { + //TODO: What if folder is not created, what happens then? + folder.mkdirs(); + } + + int newFileCount = 0; + File newFile; + File existingFile = null; + + newFile = new File(folder, String.format("%s_%s.csv", fileName, newFileCount)); + while (newFile.exists()) { + existingFile = newFile; + newFileCount++; + newFile = new File(folder, String.format("%s_%s.csv", fileName, newFileCount)); + } + + if (existingFile != null) { + if (existingFile.length() >= maxFileSize) { + return newFile; + } + return existingFile; + } + + return newFile; + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/QtalkStringUtils.java b/lib_common/src/main/java/com/qunar/im/utils/QtalkStringUtils.java new file mode 100644 index 0000000..5aa5eb3 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/QtalkStringUtils.java @@ -0,0 +1,461 @@ +package com.qunar.im.utils; + +import android.text.TextUtils; +import android.util.Patterns; + +import com.qunar.im.common.CommonConfig; +import com.qunar.im.core.services.QtalkNavicationService; +import com.qunar.im.common.CurrentPreference; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by xingchao.song on 10/13/2015. + */ +public class QtalkStringUtils { + public static String getGravatar(String gravantarUrl, boolean isSmall) { + if (TextUtils.isEmpty(gravantarUrl)) return "res:///" + CommonConfig.DEFAULT_GRAVATAR; + if (gravantarUrl.contains(".gif")) isSmall = false; + if (!gravantarUrl.startsWith("http://") && + !gravantarUrl.startsWith("https://") && + !gravantarUrl.startsWith("file://")) { + if (!gravantarUrl.startsWith("/")) gravantarUrl = "/" + gravantarUrl; + gravantarUrl = QtalkNavicationService.getInstance().getInnerFiltHttpHost() + gravantarUrl; + } + if (gravantarUrl.contains("?")) { + gravantarUrl += "&u=" + CurrentPreference.getInstance().getUserid() + + "&k=" + CurrentPreference.getInstance().getVerifyKey(); + } else { + gravantarUrl += "?u=" + CurrentPreference.getInstance().getUserid() + + "&k=" + CurrentPreference.getInstance().getVerifyKey(); + } + + if (isSmall) { + gravantarUrl += "&w=96&h=96"; + } + if (gravantarUrl.contains("{")) { + gravantarUrl = gravantarUrl.replace("{", ""); + } + if (gravantarUrl.contains("}")) { + gravantarUrl = gravantarUrl.replace("}", ""); + } + if (!Patterns.WEB_URL.matcher(gravantarUrl).matches()) { + return ""; + } + return gravantarUrl; + } + + public static String addFilePathDomain(String url, boolean addKey) { + if (TextUtils.isEmpty(url)) return ""; + if(url.startsWith("/storage")){ + return url; + } + if (!url.startsWith("http://") && !url.startsWith("https://")&& !url.startsWith("file://")) { + if (!url.startsWith("/")) url = "/" + url; + url = QtalkNavicationService.getInstance().getInnerFiltHttpHost() + url; + } + + //不知道为啥要添加u k 暂时注释 此方法添加完成会造成bug + if (addKey) { + + + if (url.contains("?")) { + url += "&u=" + CurrentPreference.getInstance().getUserid() + + "&k=" + CurrentPreference.getInstance().getVerifyKey(); + } else { + url += "?u=" + CurrentPreference.getInstance().getUserid() + + "&k=" + CurrentPreference.getInstance().getVerifyKey(); + } + } + //todo 此方法有问题,会造成匹配不出请求地址 +// if (!Patterns.WEB_URL.matcher(url).matches()) { +// return ""; +// } + return url; + } + + public static String addFilePath(String url) { + if (TextUtils.isEmpty(url)) return ""; + if (!url.startsWith("http://") + && !url.startsWith("https://") + && !url.startsWith("file://")) { + if (!url.startsWith("/")) url = "/" + url; + url = QtalkNavicationService.getInstance().getInnerFiltHttpHost() + url; + } + if (!Patterns.WEB_URL.matcher(url).matches()) { + return ""; + } + return url; + } + + /** + * Returns the domain of an XMPP address (JID). For example, for the address "user@xmpp.org/Resource", "xmpp.org" + * would be returned. If jid is null, then this method returns also null. If + * the input String is no valid JID or has no domainpart, then this method will return the empty String. + * + * @param jid the XMPP address to parse. + * @return the domainpart of the XMPP address, the empty String or null. + */ + public static String parseDomain(String jid) { + if (jid == null) return ""; + int atIndex = jid.indexOf('@'); + if (jid.contains("@conference.")) atIndex += 11; + int slashIndex = jid.indexOf('/'); + if (slashIndex > 0) { + // 'local@domain.foo/resource' and 'local@domain.foo/res@otherres' case + if (slashIndex > atIndex) { + return jid.substring(atIndex + 1, slashIndex); + // 'domain.foo/res@otherres' case + } else { + return jid.substring(0, slashIndex); + } + } else { + if (atIndex == -1) return QtalkNavicationService.getInstance().getXmppdomain(); + return jid.substring(atIndex + 1); + } + } + + + public static String parseLocalpart(String jid) { + if (jid == null) return ""; + int atIndex = jid.indexOf('@'); + if (atIndex <= 0) { + return jid; + } + int slashIndex = jid.indexOf('/'); + if (slashIndex >= 0 && slashIndex < atIndex) { + return jid; + } else { + return jid.substring(0, atIndex); + } + } + + public static String parseBareIdWithoutAt(String pushF) { + if (pushF == null) return ""; + int slashIndex = pushF.lastIndexOf('/'); + if (slashIndex < 0) { + return pushF; + } else if (slashIndex == 0) { + return ""; + } else { + return pushF.substring(0, slashIndex); + } + } + + public static String parseBareIdWith0(String myJid) { + if (myJid == null) return ""; + int slashIndex = myJid.indexOf((char) 0); + if (slashIndex < 0) { + return myJid; + } else if (slashIndex == 0) { + return ""; + } else { + return myJid.substring(0, slashIndex); + } + } + + + public static String parseResouceWith0(String myJid) { + if (myJid == null) return ""; + int slashIndex = myJid.indexOf((char) 0); + if (slashIndex + 1 > myJid.length() || slashIndex < 0) { + return myJid; + } else { + return myJid.substring(slashIndex + 1); + } + } + + public static String parseResourceWithoutAt(String pushF) { + if (pushF == null) return ""; + int slashIndex = pushF.lastIndexOf("/"); + if (slashIndex + 1 > pushF.length() || slashIndex < 0) { + return pushF; + } else { + return pushF.substring(slashIndex + 1); + } + } + + public static String parseBareJid(String jid) { + if (jid == null) return ""; + int atIndex = jid.indexOf("@"); + if (atIndex == -1) return jid; + int slashIndex = jid.indexOf('/', atIndex); + if (slashIndex < 0) { + return jid; + } else if (slashIndex == 0) { + return ""; + } else { + return jid.substring(0, slashIndex); + } + } + + //获取id和域名 aaa@ejbahost1 + public static String parseIdAndDomain(String jid) { + if (TextUtils.isEmpty(jid)) { + return ""; + } + int slashIndex = jid.indexOf("/"); + if (slashIndex != -1) { + return jid.substring(0, slashIndex); + } else { + return jid; + } + } + + public static String parseNickName(String jid) { + + int fromout = jid.indexOf("/"); + if (TextUtils.isEmpty(jid.substring(fromout + 1, jid.length() - 1))) { + return "未解析"; + } else { + return jid.substring(fromout + 1, jid.length()); +// pbimMessage.setNickName(from.substring(fromout+1,from.length())); + } + + } + + //纯获取id + public static String parseId(String jid) { + if (TextUtils.isEmpty(jid)) { + return ""; + } + int slashIndex = jid.indexOf("@"); + if (slashIndex != -1) { + return jid.substring(0, slashIndex); + } else { + return jid; + } + } + + //纯获取id + public static String addIdDomain(String jid) { + if (TextUtils.isEmpty(jid)) { + return ""; + } + int slashIndex = jid.indexOf("@"); + if (slashIndex != -1) { + return jid; + } else { + return jid+"@"+QtalkNavicationService.getInstance().getDomainhost(); + } + } + + public static String parseGroupDomain(String jid) { + if (TextUtils.isEmpty(jid)) { + return ""; + } + int a = -1; + int b = -1; + int start = jid.indexOf("@"); + int end = jid.indexOf("/"); + if (start != -1) { + a = start; + } + if (end != -1) { + b = end; + } + if (a != -1 && b != -1) { + return jid.substring(a + 1, b); + } + if (a != -1 && b == -1) { + return jid.substring(a + 1, jid.length()); + } + return ""; + } + + //获取全限定域名 + public static String parseFullDomain(String jid) { + if (TextUtils.isEmpty(jid)) { + return ""; + } + int a = -1; + int b = -1; + int start = jid.indexOf("@"); + int end = jid.indexOf("/"); + if (start != -1) { + a = start; + } + if (end != -1) { + b = end; + } + if (a != -1 && b != -1) { + return jid.substring(a + 1, b); + } + return ""; + } + + public static String parseResource(String jid) { + if (jid == null) return ""; + int atIndex = jid.indexOf("@"); + if (atIndex == -1) return jid; + int slashIndex = jid.indexOf("/", atIndex); + if (slashIndex + 1 > jid.length() || slashIndex < 0) { + return jid; + } else { + return jid.substring(slashIndex + 1); + } + } + + public static String parseResourceEmptyIfNotFound(String jid) { + if (jid == null) return ""; + int atIndex = jid.indexOf("@"); + if (atIndex == -1) return jid; + int slashIndex = jid.indexOf("/", atIndex); + if (slashIndex + 1 > jid.length() || slashIndex < 0) { + return ""; + } else { + return jid.substring(slashIndex + 1); + } + } + + + public static String roomId2Jid(String roomId) { + if (TextUtils.isEmpty(roomId)) return ""; + if (roomId.contains("@")) return roomId; + return roomId + "@conference." + QtalkNavicationService.getInstance().getXmppdomain(); + } + + public static String userId2Jid(String userId) { + if (TextUtils.isEmpty(userId)) return ""; + if (userId.contains("@")) return userId; + return userId + "@" + QtalkNavicationService.getInstance().getXmppdomain(); + } + + public static String architectureParsing(String text) { + String str = "未知"; + if (TextUtils.isEmpty(text)) { + return str; + } + try { + String[] arr = text.split("/"); + return arr[2]; + } catch (Exception e) { + return str; + } + } + + + public static String findRealUrl(String mUrl) { + String onlyUrl = UrlPage(mUrl); + Map map = URLRequest(mUrl); + if (map != null) { + if (map.containsKey("u")) { + map.remove("u"); + } + if (map.containsKey("k")) { + map.remove("k"); + } + if (map.size() > 0) { + onlyUrl += "?"; + for (Map.Entry entry : map.entrySet()) { +// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); + onlyUrl += entry.getKey() + "=" + entry.getValue() + "&"; + } + onlyUrl = onlyUrl.substring(0, onlyUrl.length() - 1); + } + } + + + //这里进行url解析完成 + + +// int tokenKeyIndex = mUrl.indexOf("?u=") >= 0 ? mUrl.indexOf("?u=") : mUrl.indexOf("&u="); +// if (tokenKeyIndex != -1) { +// int nextAndIndex = mUrl.indexOf("&", tokenKeyIndex + 1); +// if (nextAndIndex != -1) { +// tokenParam = mUrl.substring(tokenKeyIndex + 1, nextAndIndex + 1); +// } else { +// tokenParam = mUrl.substring(tokenKeyIndex); +// } +// } + return onlyUrl; + } + + /** + * 解析出url参数中的键值对 + * 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中 + * + * @param URL url地址 + * @return url请求参数部分 + */ + public static Map URLRequest(String URL) { + Map mapRequest = new HashMap(); + + String[] arrSplit = null; + + String strUrlParam = TruncateUrlPage(URL); + if (strUrlParam == null) { + return mapRequest; + } + //每个键值为一组 www.2cto.com + arrSplit = strUrlParam.split("[&]"); + for (String strSplit : arrSplit) { + String[] arrSplitEqual = null; + arrSplitEqual = strSplit.split("[=]"); + + //解析出键值 + if (arrSplitEqual.length > 1) { + //正确解析 + mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]); + + } else { + if (arrSplitEqual[0] != "") { + //只有参数没有值,不加入 + mapRequest.put(arrSplitEqual[0], ""); + } + } + } + return mapRequest; + } + + + /** + * 去掉url中的路径,留下请求参数部分 + * + * @param strURL url地址 + * @return url请求参数部分 + */ + private static String TruncateUrlPage(String strURL) { + String strAllParam = null; + String[] arrSplit = null; + + strURL = strURL.trim(); + + arrSplit = strURL.split("[?]"); + if (strURL.length() > 1) { + if (arrSplit.length > 1) { + if (arrSplit[1] != null) { + strAllParam = arrSplit[1]; + } + } + } + + return strAllParam; + } + + + /** + * 解析出url请求的路径,包括页面 + * + * @param strURL url地址 + * @return url路径 + */ + public static String UrlPage(String strURL) { + String strPage = null; + String[] arrSplit = null; + + strURL=strURL.trim(); + + arrSplit = strURL.split("[?]"); + if (strURL.length() > 0) { + if (arrSplit.length > 0) { + if (arrSplit[0] != null) { + strPage = arrSplit[0]; + } + } + } + + return strPage; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/SHA1.java b/lib_common/src/main/java/com/qunar/im/utils/SHA1.java new file mode 100644 index 0000000..88d856f --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/SHA1.java @@ -0,0 +1,57 @@ +/** + * + * Copyright © 2014 Florian Schmaus + * + * 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.qunar.im.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class SHA1 { + + /** + * Used by the hash method. + */ + private static MessageDigest SHA1_DIGEST; + + static { + try { + SHA1_DIGEST = MessageDigest.getInstance(StringUtils.SHA1); + } + catch (NoSuchAlgorithmException e) { + // Smack wont be able to function normally if this exception is thrown, wrap it into + // an ISE and make the user aware of the problem. + throw new IllegalStateException(e); + } + } + + public static synchronized byte[] bytes(byte[] bytes) { + SHA1_DIGEST.update(bytes); + return SHA1_DIGEST.digest(); + } + + public static byte[] bytes(String string) { + return bytes(StringUtils.toBytes(string)); + } + + public static String hex(byte[] bytes) { + return StringUtils.encodeHex(bytes(bytes)); + } + + public static String hex(String string) { + return hex(StringUtils.toBytes(string)); + } + +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/SoftKeyboardStateHelper.java b/lib_common/src/main/java/com/qunar/im/utils/SoftKeyboardStateHelper.java new file mode 100644 index 0000000..b9b259e --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/SoftKeyboardStateHelper.java @@ -0,0 +1,89 @@ +package com.qunar.im.utils; + +import android.graphics.Rect; +import android.view.View; +import android.view.ViewTreeObserver; + +import java.util.LinkedList; +import java.util.List; + +public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener { + + public interface SoftKeyboardStateListener { + void onSoftKeyboardOpened(int keyboardHeightInPx); + void onSoftKeyboardClosed(); + } + + private final List listeners = new LinkedList(); + private final View activityRootView; + private int lastSoftKeyboardHeightInPx; + private boolean isSoftKeyboardOpened; + + public SoftKeyboardStateHelper(View activityRootView) { + this(activityRootView, false); + } + + public SoftKeyboardStateHelper(View activityRootView, boolean isSoftKeyboardOpened) { + this.activityRootView = activityRootView; + this.isSoftKeyboardOpened = isSoftKeyboardOpened; + activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this); + } + + @Override + public void onGlobalLayout() { + final Rect r = new Rect(); + //r will be populated with the coordinates of your view that area still visible. + activityRootView.getWindowVisibleDisplayFrame(r); + + final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); + if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... + isSoftKeyboardOpened = true; + notifyOnSoftKeyboardOpened(heightDiff); + } else if (isSoftKeyboardOpened && heightDiff < 100) { + isSoftKeyboardOpened = false; + notifyOnSoftKeyboardClosed(); + } + } + + public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) { + this.isSoftKeyboardOpened = isSoftKeyboardOpened; + } + + public boolean isSoftKeyboardOpened() { + return isSoftKeyboardOpened; + } + + /** + * Default value is zero (0) + * @return last saved keyboard height in px + */ + public int getLastSoftKeyboardHeightInPx() { + return lastSoftKeyboardHeightInPx; + } + + public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) { + listeners.add(listener); + } + + public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) { + listeners.remove(listener); + } + + private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) { + this.lastSoftKeyboardHeightInPx = keyboardHeightInPx; + + for (SoftKeyboardStateListener listener : listeners) { + if (listener != null) { + listener.onSoftKeyboardOpened(keyboardHeightInPx); + } + } + } + + private void notifyOnSoftKeyboardClosed() { + for (SoftKeyboardStateListener listener : listeners) { + if (listener != null) { + listener.onSoftKeyboardClosed(); + } + } + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/StringUtils.java b/lib_common/src/main/java/com/qunar/im/utils/StringUtils.java new file mode 100644 index 0000000..2ee0f05 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/StringUtils.java @@ -0,0 +1,279 @@ +/** + * + * Copyright 2003-2007 Jive Software. + * + * 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.qunar.im.utils; + +import java.io.UnsupportedEncodingException; +import java.util.Collection; +import java.util.Random; + +/** + * A collection of utility methods for String objects. + */ +public class StringUtils { + + public static final String MD5 = "MD5"; + public static final String SHA1 = "SHA-1"; + public static final String UTF8 = "UTF-8"; + public static final String USASCII = "US-ASCII"; + + public static final String QUOTE_ENCODE = """; + public static final String APOS_ENCODE = "'"; + public static final String AMP_ENCODE = "&"; + public static final String LT_ENCODE = "<"; + public static final String GT_ENCODE = ">"; + + public static final char[] HEX_CHARS = "0123456789abcdef".toCharArray(); + + /** + * Escapes all necessary characters in the String so that it can be used + * in an XML doc. + * + * @param string the string to escape. + * @return the string with appropriate characters escaped. + */ + public static CharSequence escapeForXML(final String string) { + if (string == null) { + return null; + } + final char[] input = string.toCharArray(); + final int len = input.length; + final StringBuilder out = new StringBuilder((int)(len*1.3)); + CharSequence toAppend; + char ch; + int last = 0; + int i = 0; + while (i < len) { + toAppend = null; + ch = input[i]; + switch(ch) { + case '<': + toAppend = LT_ENCODE; + break; + case '>': + toAppend = GT_ENCODE; + break; + case '&': + toAppend = AMP_ENCODE; + break; + case '"': + toAppend = QUOTE_ENCODE; + break; + case '\'': + toAppend = APOS_ENCODE; + break; + default: + break; + } + if (toAppend != null) { + if (i > last) { + out.append(input, last, i - last); + } + out.append(toAppend); + last = ++i; + } else { + i++; + } + } + if (last == 0) { + return string; + } + if (i > last) { + out.append(input, last, i - last); + } + return out; + } + + /** + * Hashes a String using the SHA-1 algorithm and returns the result as a + * String of hexadecimal numbers. This method is synchronized to avoid + * excessive MessageDigest object creation. If calling this method becomes + * a bottleneck in your code, you may wish to maintain a pool of + * MessageDigest objects instead of using this method. + *

+ * A hash is a one-way function -- that is, given an + * input, an output is easily computed. However, given the output, the + * input is almost impossible to compute. This is useful for passwords + * since we can store the hash and a hacker will then have a very hard time + * determining the original password. + * + * @param data the String to compute the hash of. + * @return a hashed version of the passed-in String + */ + @Deprecated + public synchronized static String hash(String data) { + return com.qunar.im.utils.SHA1.hex(data); + } + + /** + * Encodes an array of bytes as String representation of hexadecimal. + * + * @param bytes an array of bytes to convert to a hex string. + * @return generated hex string. + */ + public static String encodeHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for ( int j = 0; j < bytes.length; j++ ) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_CHARS[v >>> 4]; + hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F]; + } + return new String(hexChars); + } + + public static byte[] toBytes(String string) { + try { + return string.getBytes(StringUtils.UTF8); + } + catch (UnsupportedEncodingException e) { + throw new IllegalStateException("UTF-8 encoding not supported by platform", e); + } + } + + /** + * Pseudo-random number generator object for use with randomString(). + * The Random class is not considered to be cryptographically secure, so + * only use these random Strings for low to medium security applications. + */ + private static Random randGen = new Random(); + + /** + * Array of numbers and letters of mixed case. Numbers appear in the list + * twice so that there is a more equal chance that a number will be picked. + * We can use the array to get a random number or letter by picking a random + * array index. + */ + private static char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" + + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); + + /** + * Returns a random String of numbers and letters (lower and upper case) + * of the specified length. The method uses the Random class that is + * built-in to Java which is suitable for low to medium grade security uses. + * This means that the output is only pseudo random, i.e., each number is + * mathematically generated so is not truly random.

+ * + * The specified length must be at least one. If not, the method will return + * null. + * + * @param length the desired length of the random String to return. + * @return a random String of numbers and letters of the specified length. + */ + public static String randomString(int length) { + if (length < 1) { + return null; + } + // Create a char buffer to put random letters and numbers in. + char [] randBuffer = new char[length]; + for (int i=0; i collection) { + StringBuilder sb = new StringBuilder(); + for (String s : collection) { + sb.append(s); + sb.append(" "); + } + String res = sb.toString(); + // Remove the trailing whitespace + res = res.substring(0, res.length() - 1); + return res; + } + + public static String returnIfNotEmptyTrimmed(String string) { + if (string == null) + return null; + String trimmedString = string.trim(); + if (trimmedString.length() > 0) { + return trimmedString; + } else { + return null; + } + } + + public static boolean nullSafeCharSequenceEquals(CharSequence csOne, CharSequence csTwo) { + return nullSafeCharSequenceComperator(csOne, csTwo) == 0; + } + + public static int nullSafeCharSequenceComperator(CharSequence csOne, CharSequence csTwo) { + if (csOne == null ^ csTwo == null) { + return (csOne == null) ? -1 : 1; + } + if (csOne == null && csTwo == null) { + return 0; + } + return csOne.toString().compareTo(csTwo.toString()); + } + + public static CS requireNotNullOrEmpty(CS cs, String message) { + if (isNullOrEmpty(cs)) { + throw new IllegalArgumentException(message); + } + return cs; + } + + /** + * Return the String representation of the given char sequence if it is not null. + * + * @param cs the char sequence or null. + * @return the String representation of cs or null. + */ + public static String maybeToString(CharSequence cs) { + if (cs == null) { + return null; + } + return cs.toString(); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/TaskExecutor.java b/lib_common/src/main/java/com/qunar/im/utils/TaskExecutor.java new file mode 100644 index 0000000..be6fb1a --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/TaskExecutor.java @@ -0,0 +1,30 @@ +package com.qunar.im.utils; + +import androidx.annotation.NonNull; + +import java.util.concurrent.Callable; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Created by lihaibin.li on 2017/11/22. + */ + +public class TaskExecutor { + private static final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 4, 1, TimeUnit.MINUTES, + new LinkedBlockingQueue(12), + new ThreadFactory() { + @Override + public Thread newThread(@NonNull Runnable r) { + return new Thread(r, "qunar_sub_thread"); + } + }, + new ThreadPoolExecutor.CallerRunsPolicy()); + + public static Future submit(Callable task) { + return threadPoolExecutor.submit(task); + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/UnzipUtils.java b/lib_common/src/main/java/com/qunar/im/utils/UnzipUtils.java index 91feec9..f62f04d 100644 --- a/lib_common/src/main/java/com/qunar/im/utils/UnzipUtils.java +++ b/lib_common/src/main/java/com/qunar/im/utils/UnzipUtils.java @@ -1,6 +1,6 @@ package com.qunar.im.utils; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.qunar.im.base.util.LogUtil; import com.qunar.im.core.services.FeedBackServcie; diff --git a/lib_common/src/main/java/com/qunar/im/utils/UrlCheckUtil.java b/lib_common/src/main/java/com/qunar/im/utils/UrlCheckUtil.java new file mode 100644 index 0000000..71e811b --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/UrlCheckUtil.java @@ -0,0 +1,221 @@ +package com.qunar.im.utils; + +import android.text.TextUtils; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by hubin on 2017/8/23. + */ + +public class UrlCheckUtil { + + private static final Pattern[] ICON_PATTERNS = new Pattern[] { + Pattern.compile( "rel=[\"']shortcut icon[\"'][^\r\n>]+?((?<=href=[\"']).+?(?=[\"']))" ), + Pattern.compile( "((?<=href=[\"']).+?(?=[\"']))[^\r\n<]+?rel=[\"']shortcut icon[\"']" ) }; + private static final Pattern HEAD_END_PATTERN = Pattern.compile( "" ); + + + public static String checkUrlForHttp(String host, String url) { + if (TextUtils.isEmpty(url)) { + return ""; + } else if (url.startsWith("http")) { + return url; + } else { + return host + "/" + url; + } + + } + + /** + * 验证url + * @param urlString + * @return + */ + private static String getFinalUrl( String urlString ) { + HttpURLConnection connection = null; + try { + connection = getConnection( urlString ); + connection.connect(); + + // 是否跳转,若跳转则跟踪到跳转页面 + if ( connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM + || connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP ) { + String location = connection.getHeaderField( "Location" ); + if ( !location.contains( "http" ) ) { + location = urlString + "/" + location; + } + return location; + } + } + catch ( Exception e ) { + System.err.println( "获取跳转链接超时,返回原链接" + urlString ); + } + finally { + if ( connection != null ) + connection.disconnect(); + } + return urlString; + } + + /** + * 获取Icon地址 + * @param urlString + * @return + * @throws MalformedURLException + */ + public static String getIconUrlString(String urlString) { + try { +// urlString = exists(urlString); + URL url = new URL(urlString); + String iconUrl = url.getProtocol() + "://" + url.getHost() + "/favicon.ico";// 保证从域名根路径搜索 +// if (exists(iconUrl)) +// return iconUrl; + return iconUrl; +// return getIconUrlByRegex(urlString); + } catch (Exception e) { + return ""; + } + } + + /** + * 判断在根目录下是否有Icon + * @param urlString + * @return + */ + private static boolean hasRootIcon( String urlString ) { + HttpURLConnection connection = null; + + try { + connection = getConnection( urlString ); + connection.connect(); + return HttpURLConnection.HTTP_OK == connection.getResponseCode() && connection.getContentLength() > 0; + } + catch ( Exception e ) { + e.printStackTrace(); + return false; + } + finally { + if ( connection != null ) + connection.disconnect(); + } + } + + private static boolean exists(String URLName){ + try { + HttpURLConnection.setFollowRedirects(false); + // note : you may also need + // HttpURLConnection.setInstanceFollowRedirects(false) + HttpURLConnection con = + (HttpURLConnection) new URL(URLName).openConnection(); + con.setRequestMethod("HEAD"); + return (con.getResponseCode() == HttpURLConnection.HTTP_OK); + } + catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 从html中获取Icon地址 + * @param urlString + * @return + */ + private static String getIconUrlByRegex( String urlString ) { + + try { + String headString = getHead( urlString ); + + for ( Pattern iconPattern : ICON_PATTERNS ) { + Matcher matcher = iconPattern.matcher( headString ); + + if ( matcher.find() ) { + String iconUrl = matcher.group( 1 ); + if ( iconUrl.contains( "http" ) ) + return iconUrl; + + if ( iconUrl.charAt( 0 ) == '/' ) {//判断是否为相对路径或根路径 + URL url = new URL( urlString ); + iconUrl = url.getProtocol() + "://" + url.getHost() + iconUrl; + } + else { + iconUrl = urlString + "/" + iconUrl; + } + return iconUrl; + } + } + } + catch ( Exception e ) { + e.printStackTrace(); + } + return null; + } + + /** + * 获取截止到head尾标签的文本 + * @param urlString + * @return + */ + private static String getHead( String urlString ) { + HttpURLConnection connection = null; + BufferedReader reader = null; + + try { + connection = getConnection( urlString ); + connection.connect(); + reader = new BufferedReader( new InputStreamReader( connection.getInputStream() ) ); + + String line = null; + StringBuilder headBuilder = new StringBuilder(); + while ( ( line = reader.readLine() ) != null ) { + Matcher matcher = HEAD_END_PATTERN.matcher( line ); + if ( matcher.find() ) + break; + headBuilder.append( line ); + } + + return headBuilder.toString(); + } + catch ( Exception e ) { + e.printStackTrace(); + return null; + } + finally { + try { + if ( reader != null ) + reader.close(); + if ( connection != null ) + connection.disconnect(); + } + catch ( IOException e ) { + e.printStackTrace(); + } + } + } + + /** + * 获取一个连接 + * @param urlString + * @return + * @throws IOException + */ + private static HttpURLConnection getConnection( String urlString ) throws IOException { + URL url = new URL( urlString ); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setInstanceFollowRedirects( false ); + connection.setConnectTimeout( 3000 ); + connection.setReadTimeout( 3000 ); + connection + .setRequestProperty( "User-Agent", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36" ); + return connection; + } +} diff --git a/lib_common/src/main/java/com/qunar/im/utils/XmlUtils.java b/lib_common/src/main/java/com/qunar/im/utils/XmlUtils.java new file mode 100644 index 0000000..2727594 --- /dev/null +++ b/lib_common/src/main/java/com/qunar/im/utils/XmlUtils.java @@ -0,0 +1,313 @@ +package com.qunar.im.utils; + +import android.util.Xml; + +import com.orhanobut.logger.Logger; +import com.qunar.im.base.module.IMMessage; +import com.qunar.im.protobuf.utils.StringUtils; +import com.qunar.im.utils.QtalkStringUtils; +import com.qunar.im.common.CurrentPreference; + +import org.json.JSONException; +import org.json.JSONObject; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.io.StringReader; +import java.util.Date; + +/** + * Created by may on 2017/7/19. + */ + +public class XmlUtils { + + + public static JSONObject parseMessageObject(String xml, String domain, String toId, String from, String to) { + JSONObject result = new JSONObject(); + + try { + String tt = ""; + String ff = ""; + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(new StringReader(xml)); + int event = parser.getEventType(); + + String msgText = null, type = null; + int platform = 0, msgType = 0, maType = 0; + long msec_times = 0; + String stime = ""; + boolean isBodyTag = false; + + while (event != XmlPullParser.END_DOCUMENT) { + switch (event) { + case XmlPullParser.START_DOCUMENT: + break; + case XmlPullParser.TEXT: { + if (isBodyTag) { + msgText = parser.getText(); + } + } + break; + case XmlPullParser.START_TAG: { + { + String name = parser.getName(); + int count = parser.getAttributeCount(); + + if (name.equalsIgnoreCase("message")) { + for (int index = 0; index < count; ++index) { + String itemName = parser.getAttributeName(index); + if (itemName.equalsIgnoreCase("type")) { + type = parser.getAttributeValue(index); + } else if (itemName.equals("msec_times")) { + msec_times = Long.parseLong(parser.getAttributeValue(index)); + } else if (itemName.equals("channelid")) { + result.put(itemName, parser.getAttributeValue(index)); + } else if (itemName.equals("qchatid")) { + result.put(itemName, parser.getAttributeValue(index)); + } else if (itemName.equals("to")) { + tt = QtalkStringUtils.parseIdAndDomain(parser.getAttributeValue(index)); + result.put(itemName, tt); + } else if (itemName.equals("from")) { + ff = QtalkStringUtils.parseIdAndDomain(parser.getAttributeValue(index)); + result.put(itemName, ff); + } else { + result.put(itemName, parser.getAttributeValue(index)); + } + } + } else if (name.equalsIgnoreCase("body")) { + isBodyTag = true; + String msgBody = parser.getText(); + for (int index = 0; index < count; ++index) { + String itemName = parser.getAttributeName(index); + if (itemName.equals("platformType")) { +// platform = Integer.parseInt(parser.getAttributeValue(index)); + } else if (itemName.equals("maType")) { + platform = Integer.parseInt(parser.getAttributeValue(index)); + } else if (itemName.equals("msgType")) { + msgType = Integer.parseInt(parser.getAttributeValue(index)); + } else if (itemName.equals("id")) { + result.put("MsgId", parser.getAttributeValue(index)); + }else if(itemName.equals("extendInfo")){ + result.put("extendInfo", parser.getAttributeValue(index)); + } + } + if (StringUtils.isNotEmpty(msgBody)) { + result.put("msgText", msgBody); + } + } else if (name.equalsIgnoreCase("stime")) { + for (int index = 0; index < count; ++index) { + String itemName = parser.getAttributeName(index); + if (itemName.equals("stamp")) { + stime = parser.getAttributeValue(index); + } + + } + } + } + } + break; + case XmlPullParser.END_TAG: { + String name = parser.getName(); + if (name.equals("body")) { + isBodyTag = false; + } + + } + break; + } + event = parser.next(); + } + +// String key = String.format("%s@%s", from.equalsIgnoreCase(toId) ? from : to, domain); + //这个是获取会话列表Id + +// result.put("SessionId", key); + result.put("messageType", type); // 这个不是用来插库的 + result.put("From", ff); + result.put("To", tt); + result.put("MsgType", msgType); + result.put("Content", msgText); + result.put("Platform", platform); +// int direction = lId.equals(ff) ? 1 : 0; +// result.put("MsgDirection", direction); + result.put("MsgDateTime", msec_times - 1); + result.put("MsgStime", stime); + //批量插入的数据 消息状态都是1 + result.put("MsgState", "1"); + result.put("MsgRaw", xml); + } catch (XmlPullParserException e) { + Logger.e(e, "parseXmlMessage crashed"); + } catch (IOException e) { + Logger.e(e, "parseXmlMessage crashed"); + } catch (JSONException e) { + Logger.e(e, "parseXmlMessage crashed"); + } + + return result; + } + + /** + * 解析一个xml类型的消息, + * + * @param message 参数为xml样式的字符串 + * @return 返回一个jsonObject + */ + public static JSONObject parseXmlMessage(String message) { + JSONObject result = new JSONObject(); + + try { + result.put("message", new JSONObject()); + result.put("body", new JSONObject()); + result.put("stime", new JSONObject()); + + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(new StringReader(message)); + int event = parser.getEventType(); + + String lastNodeName = null; + boolean isBodyTag = false; + while (event != XmlPullParser.END_DOCUMENT) { + switch (event) { + + case XmlPullParser.TEXT: { + + if (isBodyTag) { + String msgText = parser.getText(); +// if (!msgText.equals("\\n") && !msgText.equals("\n")) { + result.getJSONObject(lastNodeName).put("_text", msgText); + } + +// } +// if (!msgText.equals("\\n") && !msgText.equals("\n")) { +// result.getJSONObject(lastNodeName).put("_text", msgText); +// } + + } + + case XmlPullParser.START_DOCUMENT: + break; + case XmlPullParser.START_TAG: { + String name = parser.getName(); + lastNodeName = name; + int count = parser.getAttributeCount(); + + if (name.equalsIgnoreCase("message")) { + for (int index = 0; index < count; ++index) { + result.getJSONObject(name).put(parser.getAttributeName(index), parser.getAttributeValue(index)); +// String itemName = parser.getAttributeName(index); +// if (itemName.equalsIgnoreCase("type")) { +// result.getJSONObject("message").put(itemName, parser.getAttributeValue(index)); +// } else if (itemName.equals("msec_times")) { +// result.put("msec_times", Long.parseLong(parser.getAttributeValue(index))); +// } else if (itemName.equals("channelid")) { +// result.put(itemName, parser.getAttributeValue(index)); +// } else if (itemName.equals("qchatid")) { +// result.put(itemName, parser.getAttributeValue(index)); +// } else { +// result.put(itemName, parser.getAttributeValue(index)); +// } + } + } else if (name.equalsIgnoreCase("body")) { + isBodyTag = true; + String msgBody = parser.getText(); + for (int index = 0; index < count; ++index) { + result.getJSONObject(name).put(parser.getAttributeName(index), parser.getAttributeValue(index)); +// String itemName = parser.getAttributeName(index); +// if (itemName.equals("platformType")) { +// platform = Integer.parseInt(parser.getAttributeValue(index)); +// } else if (itemName.equals("msgType")) { +// msgType = Integer.parseInt(parser.getAttributeValue(index)); +// } else if (itemName.equals("extendInfo")) { +// extendInfo = parser.getAttributeValue(index); +// } else if (itemName.equals("id")) { +// msgId = parser.getAttributeValue(index); +// } + } +// if (StringUtils.isNotEmpty(msgBody)) { +// result.put("msgText", msgBody); +// } + } else if (name.equals("stime")) { + for (int index = 0; index < count; ++index) { + result.getJSONObject(name).put(parser.getAttributeName(index), parser.getAttributeValue(index)); + } + } + } + break; + case XmlPullParser.END_TAG: { + String name = parser.getName(); + if (name.equals("body")) { + isBodyTag = false; + } + } + break; + } + event = parser.next(); + } + } catch (XmlPullParserException e) { + Logger.e(e, "parseXmlMessage crashed"); + } catch (IOException e) { + Logger.e(e, "parseXmlMessage crashed"); + } catch (JSONException e) { + Logger.e(e, "parseXmlMessage crashed"); + } + + return result; + } + + public static IMMessage parseXmlToIMMessage(String xml) { + JSONObject messageItem = parseXmlMessage(xml); + + try { + JSONObject body = messageItem.getJSONObject("body"); + JSONObject message = messageItem.getJSONObject("message"); + JSONObject stime = messageItem.getJSONObject("stime"); + + IMMessage imMessage = new IMMessage(); + String from = QtalkStringUtils.parseIdAndDomain(message.getString("from")); + imMessage.setFromID(from); + imMessage.setToID(message.getString("to")); + imMessage.setTime(new Date(message.getLong("msec_times"))); + if(message.has("realfrom")){ + imMessage.setRealfrom(message.getString("realfrom")); + } + + String type =message.getString("type"); + if(type.equals("groupchat")){ + imMessage.setType(7); + if(CurrentPreference.getInstance().getPreferenceUserId().equals(message.getString("realfrom"))){ + imMessage.setDirection(1); + }else{ + imMessage.setDirection(0); + } + }else{ + if(CurrentPreference.getInstance().getPreferenceUserId().equals(from)){ + imMessage.setDirection(1); + }else { + imMessage.setDirection(0); + } + imMessage.setType(6); + } + imMessage.setMsgType(body.getInt("msgType")); + if(body.has("maType")){ + imMessage.setMaType(body.getString("maType")); + } + + imMessage.setId(body.getString("id")); + imMessage.setMessageID(body.getString("id")); + imMessage.setMessageID(body.getString("id")); + imMessage.setBody(body.getString("_text")); + imMessage.setReadState(1); + + + return imMessage; + } catch (JSONException e) { + e.printStackTrace(); + return null; + } + + + } + +} diff --git a/lib_common/src/main/jniLibs/libsqliteX.so b/lib_common/src/main/jniLibs/armeabi/libsqliteX.so similarity index 100% rename from lib_common/src/main/jniLibs/libsqliteX.so rename to lib_common/src/main/jniLibs/armeabi/libsqliteX.so diff --git a/lib_rn/build.gradle b/lib_rn/build.gradle index 3a3b9f6..fcf1bac 100644 --- a/lib_rn/build.gradle +++ b/lib_rn/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.library' android { compileSdkVersion project.compileSdkVersion as int -// buildToolsVersion '25.0.0' defaultConfig { minSdkVersion project.minSdkVersion as int @@ -56,6 +55,7 @@ dependencies { implementation 'de.greenrobot:eventbus:2.2.1' //日期选择器 implementation 'com.contrarywind:Android-PickerView:4.1.6' - implementation 'com.android.support:recyclerview-v7:27.1.0' - implementation 'com.android.support:appcompat-v7:27.1.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.appcompat:appcompat:1.0.0' } +//apply from: 'release.gradle' diff --git a/lib_rn/src/main/java/com/qunar/rn_service/activity/QTalkSearchActivity.java b/lib_rn/src/main/java/com/qunar/rn_service/activity/QTalkSearchActivity.java index 65f9ee9..2ad7281 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/activity/QTalkSearchActivity.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/activity/QTalkSearchActivity.java @@ -2,7 +2,7 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.KeyEvent; import com.facebook.react.ReactInstanceManager; @@ -11,7 +11,7 @@ import com.qunar.im.base.module.SearchKeyData; import com.qunar.im.core.manager.IMDatabaseManager; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.rn_service.rnplugins.QimRNBModule; import java.util.ArrayList; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/activity/QtalkServiceRNActivity.java b/lib_rn/src/main/java/com/qunar/rn_service/activity/QtalkServiceRNActivity.java index 9e03093..932caa2 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/activity/QtalkServiceRNActivity.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/activity/QtalkServiceRNActivity.java @@ -4,9 +4,9 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.base.protocol.Protocol; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNBaseFragment.java b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNBaseFragment.java index d80a6c6..575c5a1 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNBaseFragment.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNBaseFragment.java @@ -2,8 +2,9 @@ import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + import android.view.View; public class RNBaseFragment extends Fragment { diff --git a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNCalendarFragment.java b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNCalendarFragment.java index c8abd94..72d5f3e 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNCalendarFragment.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNCalendarFragment.java @@ -3,7 +3,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNContactsFragment.java b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNContactsFragment.java index 58d7ca9..0aa960e 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNContactsFragment.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNContactsFragment.java @@ -3,7 +3,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNFoundFragment.java b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNFoundFragment.java index a449ed2..7c136c2 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNFoundFragment.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNFoundFragment.java @@ -3,9 +3,9 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.ActivityCompat; + +import androidx.annotation.Nullable; + import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -16,7 +16,6 @@ import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.modules.core.DeviceEventManagerModule; -import com.facebook.react.modules.core.PermissionAwareActivity; import com.facebook.react.modules.core.PermissionListener; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.core.manager.IMNotificaitonCenter; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNMineFragment.java b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNMineFragment.java index 58b4820..ec07ba6 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNMineFragment.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNMineFragment.java @@ -3,7 +3,7 @@ import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNWorkWorldFragment.java b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNWorkWorldFragment.java index 38eb6d3..5441964 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNWorkWorldFragment.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/fragment/RNWorkWorldFragment.java @@ -2,7 +2,7 @@ import android.app.Activity; import android.os.Bundle; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/plugins/Login.java b/lib_rn/src/main/java/com/qunar/rn_service/plugins/Login.java index d4a9e02..41ec8ed 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/plugins/Login.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/plugins/Login.java @@ -8,7 +8,7 @@ import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.uimanager.IllegalViewOperationException; import com.qunar.im.base.protocol.Protocol; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; /** * Created by wangyuwang on 16-3-11. diff --git a/lib_rn/src/main/java/com/qunar/rn_service/plugins/QTalkProjectType.java b/lib_rn/src/main/java/com/qunar/rn_service/plugins/QTalkProjectType.java index 3b0d923..f96b689 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/plugins/QTalkProjectType.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/plugins/QTalkProjectType.java @@ -10,6 +10,7 @@ import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.DataUtils; import com.qunar.im.common.CommonConfig; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.core.manager.IMDatabaseManager; import com.qunar.im.core.services.QtalkNavicationService; @@ -35,8 +36,8 @@ public void getProjectType( WritableNativeMap map = new WritableNativeMap(); map.putBoolean("isQTalk", CommonConfig.isQtalk); - map.putString("domain", com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId()); - map.putString("fullname", com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserName()); + map.putString("domain", CurrentPreference.getInstance().getPreferenceUserId()); + map.putString("fullname", CurrentPreference.getInstance().getUserName()); String qckey = Login.getCKey(); map.putString("c_key", qckey); // qchat @@ -52,8 +53,8 @@ public void getProjectType( map.putBoolean("isShowWorkWorld", IMDatabaseManager.getInstance().SelectWorkWorldPremissions()); Logger.i("获取发现:" + " isQTalk=" + CommonConfig.isQtalk - + " domain=" + com.qunar.im.protobuf.common.CurrentPreference.getInstance().getPreferenceUserId() - + " fullname=" + com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserName() + + " domain=" + CurrentPreference.getInstance().getPreferenceUserId() + + " fullname=" + CurrentPreference.getInstance().getUserName() + " isSupplier=" + isMerchant + " showOA=" + QtalkNavicationService.getInstance().getNavConfigResult().imConfig.showOA); diff --git a/lib_rn/src/main/java/com/qunar/rn_service/plugins/TodoEventHandler.java b/lib_rn/src/main/java/com/qunar/rn_service/plugins/TodoEventHandler.java index 5e670a2..6c577c8 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/plugins/TodoEventHandler.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/plugins/TodoEventHandler.java @@ -11,7 +11,7 @@ import com.qunar.im.base.protocol.NativeApi; import com.qunar.im.base.util.Constants; import com.qunar.im.base.util.JsonUtils; -import com.qunar.im.protobuf.utils.XmlUtils; +import com.qunar.im.utils.XmlUtils; import com.qunar.im.base.protocol.NativeApi; import org.json.JSONObject; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/rnmanage/QtalkServiceRNViewInstanceManager.java b/lib_rn/src/main/java/com/qunar/rn_service/rnmanage/QtalkServiceRNViewInstanceManager.java index 0665209..58062dd 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/rnmanage/QtalkServiceRNViewInstanceManager.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/rnmanage/QtalkServiceRNViewInstanceManager.java @@ -4,7 +4,6 @@ import com.AlexanderZaytsev.RNI18n.RNI18nPackage; import com.facebook.react.ReactInstanceManagerBuilder; -import com.facebook.react.modules.i18nmanager.I18nManagerModule; import com.horcrux.svg.SvgPackage; import com.psykar.cookiemanager.CookieManagerPackage; //import com.qunar.rn_service.rnpackage.CookieManagerPackage; diff --git a/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QimRNBModule.java b/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QimRNBModule.java index aba4dbc..1e18e58 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QimRNBModule.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QimRNBModule.java @@ -45,25 +45,20 @@ import com.qunar.im.base.common.CommonUploader; import com.qunar.im.base.common.QunarIMApp; import com.qunar.im.base.jsonbean.LeadInfo; -import com.qunar.im.base.jsonbean.LogInfo; import com.qunar.im.base.jsonbean.NewRemoteConfig; import com.qunar.im.base.jsonbean.SeatStatusResult; import com.qunar.im.base.jsonbean.SetMucVCardResult; import com.qunar.im.base.jsonbean.SetVCardResult; -import com.qunar.im.base.jsonbean.SetWorkWorldRemindResponse; import com.qunar.im.base.jsonbean.UploadImageResult; import com.qunar.im.base.module.AreaLocal; import com.qunar.im.base.module.AvailableRoomRequest; import com.qunar.im.base.module.AvailableRoomResponse; import com.qunar.im.base.module.CalendarTrip; -import com.qunar.im.base.module.CityLocal; import com.qunar.im.base.module.GroupMember; import com.qunar.im.base.module.IMMessage; -import com.qunar.im.base.module.MedalsInfo; import com.qunar.im.base.module.Nick; import com.qunar.im.base.module.TripMemberCheckResponse; import com.qunar.im.base.module.UserConfigData; -import com.qunar.im.base.protocol.HttpRequestCallback; import com.qunar.im.base.protocol.NativeApi; import com.qunar.im.base.protocol.PayApi; import com.qunar.im.base.protocol.Protocol; @@ -90,19 +85,12 @@ import com.qunar.im.core.manager.IMLogicManager; import com.qunar.im.core.manager.IMNotificaitonCenter; import com.qunar.im.core.services.QtalkNavicationService; -import com.qunar.im.core.utils.GlobalConfigManager; -import com.qunar.im.google.auth.OtpProvider; -import com.qunar.im.log.LogConstans; -import com.qunar.im.log.LogService; -import com.qunar.im.log.QLog; -import com.qunar.im.other.CacheDataType; +import com.qunar.im.auth.OtpProvider; import com.qunar.im.permission.PermissionCallback; import com.qunar.im.permission.PermissionDispatcher; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.CalendarSynchronousUtil; -import com.qunar.im.utils.ConnectionUtil; -import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.MD5; import com.qunar.im.utils.QRUtil; import com.qunar.im.utils.QtalkStringUtils; @@ -1935,7 +1923,7 @@ public void updateNotifySoundState(boolean notifySoundState, final Callback call @Override public void onCompleted(Boolean aBoolean) { ConnectionUtil.getInstance().setPushState(PushSettinsStatus.SOUND_INAPP, state ? 1 : 0); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgSound(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.SOUND_INAPP)); map.putBoolean("ok", true); callback.invoke(map); } @@ -1970,7 +1958,7 @@ public void updateNotifyVibrationState(boolean stateVibration, final Callback ca @Override public void onCompleted(Boolean aBoolean) { ConnectionUtil.getInstance().setPushState(PushSettinsStatus.VIBRATE_INAPP, state ? 1 : 0); - com.qunar.im.protobuf.common.CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); + CurrentPreference.getInstance().setTurnOnMsgShock(ConnectionUtil.getInstance().getPushStateBy(PushSettinsStatus.VIBRATE_INAPP)); map.putBoolean("ok", true); callback.invoke(map); } @@ -3431,7 +3419,7 @@ public void onFailure(Exception e) { public void getDomainList(final Callback callback){ HttpUtil.getDomainList(new HttpRequestCallback() { @Override - public void onComplete(InputStream response) { + public void onComplete(InputStream response) throws IOException { WritableNativeMap map = new WritableNativeMap(); try{ String resultString = Protocol.parseStream(response); @@ -3476,7 +3464,7 @@ public static void searchDomainUser(String url,String id,String key,int offset,i params.put("limit",String.valueOf(limit)); HttpUtil.searchDomainUser(url, params, new HttpRequestCallback() { @Override - public void onComplete(InputStream response) { + public void onComplete(InputStream response) throws IOException { try{ String resultString = Protocol.parseStream(response); WritableNativeMap map = new WritableNativeMap(); diff --git a/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QtalkPlugin.java b/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QtalkPlugin.java index 975529b..acd53eb 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QtalkPlugin.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/rnplugins/QtalkPlugin.java @@ -39,7 +39,7 @@ import com.qunar.im.log.QLog; import com.qunar.im.permission.PermissionCallback; import com.qunar.im.protobuf.Event.QtalkEvent; -import com.qunar.im.protobuf.common.CurrentPreference; +import com.qunar.im.common.CurrentPreference; import com.qunar.im.utils.ConnectionUtil; import com.qunar.im.utils.HttpUtil; import com.qunar.im.utils.MD5; @@ -357,7 +357,7 @@ public void onCompleted(WorkWorldResponse workWorldResponse) { final String navurl = DataUtils.getInstance(CommonConfig.globalContext).getPreferences(QtalkNavicationService.NAV_CONFIG_CURRENT_URL, ""); boolean show = IMUserDefaults.getStandardUserDefaults().getBooleanValue(CommonConfig.globalContext, - com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) @@ -372,7 +372,7 @@ public void onCompleted(WorkWorldResponse workWorldResponse) { if (!isHave) { IMUserDefaults.getStandardUserDefaults().newEditor(CommonConfig.globalContext) - .putObject(com.qunar.im.protobuf.common.CurrentPreference.getInstance().getUserid() + .putObject(CurrentPreference.getInstance().getUserid() + QtalkNavicationService.getInstance().getXmppdomain() + CommonConfig.isDebug + MD5.hex(navurl) diff --git a/lib_rn/src/main/java/com/qunar/rn_service/viewmodel/RNViewModel.java b/lib_rn/src/main/java/com/qunar/rn_service/viewmodel/RNViewModel.java index b33d2b2..65db540 100644 --- a/lib_rn/src/main/java/com/qunar/rn_service/viewmodel/RNViewModel.java +++ b/lib_rn/src/main/java/com/qunar/rn_service/viewmodel/RNViewModel.java @@ -1,9 +1,9 @@ package com.qunar.rn_service.viewmodel; import android.app.Application; -import android.arch.lifecycle.AndroidViewModel; -import android.arch.lifecycle.MutableLiveData; -import android.support.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.MutableLiveData; +import androidx.annotation.NonNull; public class RNViewModel extends AndroidViewModel{ private MutableLiveData unreadCountLD = new MutableLiveData<>(); diff --git a/lib_rtc/build.gradle b/lib_rtc/build.gradle index 87a0dc7..c5ae39c 100644 --- a/lib_rtc/build.gradle +++ b/lib_rtc/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'com.android.library' android { compileSdkVersion project.compileSdkVersion as int -// buildToolsVersion '25.0.0' defaultConfig { minSdkVersion project.minSdkVersion as int diff --git a/lib_rtc/src/main/java/com/qunar/im/rtc/activity/RtcActivity.java b/lib_rtc/src/main/java/com/qunar/im/rtc/activity/RtcActivity.java index 6670059..4afea8d 100644 --- a/lib_rtc/src/main/java/com/qunar/im/rtc/activity/RtcActivity.java +++ b/lib_rtc/src/main/java/com/qunar/im/rtc/activity/RtcActivity.java @@ -8,7 +8,7 @@ import android.os.Message; import android.os.SystemClock; import android.os.Vibrator; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.view.Window; import android.view.WindowManager; diff --git a/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QChatSchemaService.java b/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QChatSchemaService.java index 4fcb401..0f37b54 100644 --- a/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QChatSchemaService.java +++ b/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QChatSchemaService.java @@ -3,7 +3,7 @@ */ package com.qunar.im.rtc.scheme; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import java.util.Map; diff --git a/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QchatSchemeActivity.java b/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QchatSchemeActivity.java index 26e4b41..ee02f31 100644 --- a/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QchatSchemeActivity.java +++ b/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/QchatSchemeActivity.java @@ -3,7 +3,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.text.TextUtils; import com.qunar.im.base.util.LogUtil; diff --git a/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/RTCSchemeImpl.java b/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/RTCSchemeImpl.java index dedd4e6..69b51ef 100644 --- a/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/RTCSchemeImpl.java +++ b/lib_rtc/src/main/java/com/qunar/im/rtc/scheme/RTCSchemeImpl.java @@ -2,7 +2,7 @@ import android.content.Context; import android.content.Intent; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import com.qunar.im.base.jsonbean.WebRtcJson; import com.qunar.im.base.module.IMMessage; diff --git a/lib_rtc/src/main/java/com/qunar/im/rtc/webrtc/util/AppRTCUtils.java b/lib_rtc/src/main/java/com/qunar/im/rtc/webrtc/util/AppRTCUtils.java index 3485b82..ec80b8a 100644 --- a/lib_rtc/src/main/java/com/qunar/im/rtc/webrtc/util/AppRTCUtils.java +++ b/lib_rtc/src/main/java/com/qunar/im/rtc/webrtc/util/AppRTCUtils.java @@ -12,7 +12,7 @@ import android.content.Context; import android.os.Build; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import com.orhanobut.logger.Logger; diff --git a/push_service/build.gradle b/push_service/build.gradle index 5c773fd..b4e27bd 100644 --- a/push_service/build.gradle +++ b/push_service/build.gradle @@ -31,12 +31,10 @@ dependencies { api fileTree(include: ['*.jar'], dir: 'libs') api project(':lib_common') api 'de.greenrobot:eventbus:2.2.1' - api 'com.huawei.android.hms:push:2.6.0.301' - api 'com.meizu.flyme.internet:push-internal:3.8.4' - implementation ('com.google.firebase:firebase-messaging:18.0.0') { + implementation 'com.huawei.android.hms:push:2.6.0.301' + implementation 'com.huawei.android.hms:base:2.6.0.301' + implementation 'com.meizu.flyme.internet:push-internal:3.8.4' + implementation ('com.google.firebase:firebase-messaging:20.0.0') { exclude group: 'com.android.support', module: 'support-v4' - exclude group: 'com.google.firebase', module: 'firebase-iid' } - implementation 'com.google.firebase:firebase-iid:18.0.0' } -//apply from: 'release.gradle' diff --git a/push_service/src/main/java/com/qunar/im/thirdpush/QTPushConfiguration.java b/push_service/src/main/java/com/qunar/im/thirdpush/QTPushConfiguration.java index 374be90..a591229 100644 --- a/push_service/src/main/java/com/qunar/im/thirdpush/QTPushConfiguration.java +++ b/push_service/src/main/java/com/qunar/im/thirdpush/QTPushConfiguration.java @@ -1,6 +1,5 @@ package com.qunar.im.thirdpush; -import android.annotation.TargetApi; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; @@ -170,7 +169,6 @@ public static String getPlatName() { return QPushClient.getUsePushName(); } - @TargetApi(Build.VERSION_CODES.O) private static void initNotificationChannel(Context context) { if(26 <= Build.VERSION.SDK_INT) { if (mNotificationManager == null) { diff --git a/push_service/src/main/java/com/qunar/im/thirdpush/client/google/FCMPushManager.java b/push_service/src/main/java/com/qunar/im/thirdpush/client/google/FCMPushManager.java index 383e345..abdee7d 100644 --- a/push_service/src/main/java/com/qunar/im/thirdpush/client/google/FCMPushManager.java +++ b/push_service/src/main/java/com/qunar/im/thirdpush/client/google/FCMPushManager.java @@ -1,7 +1,7 @@ package com.qunar.im.thirdpush.client.google; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; @@ -31,7 +31,7 @@ public void registerPush(Context context) { @Override public void onComplete(@NonNull Task task) { if(!task.isSuccessful()) { - Logger.i("获取firebase service token 失败 "); + Logger.i("获取firebase service token 失败 " + task.getException()); } else { String token = task.getResult().getToken(); Logger.i("获取firebase service token : " + token);