diff --git a/.gitignore b/.gitignore index 1de34119..2c3f2b7e 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,8 @@ *.apk *.ap_ +*.aar + # Files for the ART/Dalvik VM *.dex diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d693820..382babdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,340 @@ # Changelog All notable changes to this project will be documented here. + +## [0.9.14.0] -2021-12-26 + +### Added + + ```SearchSystemMetadataRequest``` + + ```startShareScreen``` callback + + ```onShareScreenStarted``` method + + ```endShareScreen``` callback + + ```onShareScreenEnded``` method + + ```startCallRecord``` method + + ```onCallRecordStarted``` callback + + ```endCallRecord``` method + + ```onCallRecordEnded``` callback + + ```ChatListeners.onCallClientErrors(ChatResponse)``` callback + + +### Changed + + Improved bluetooth headset detection + + Update podcall to 3.5.2 + + Deprecated NosqlListMessageCriteriaVO + + + +## [0.9.13.0] -2021-10-18 + +### Added + +```Chat.addPartnerView(CallPartnerView,int)``` + +```onAnotherDeviceAcceptedCall``` callback + +```VideoCallParam.CameraId``` + +```Chat.switchToFrontCamera``` + +```Chat.switchToBackCamera``` + +```Chat.isBackCamera``` + +```Chat.isFrontCamera``` + + +### Changed + +- Update podcall version to 3.4.3 + + +### Fixed + +- audio call concurrent exception + +- back camera rotation + +- crash when making large number of calls + +- bug to stop displaying CallPartnerView on Activity.onPause + + +### Deprecated + + ```Chat.switchCamera``` + + ```Chat.endAudioCall``` + + ```Chat.terminateAudioCall``` + + + +## [0.9.12.0] -2021-10-4 + +### Added + +- partnerId to CallPartnerView + +- CallPartnerView.setPartnerName(String partnerName) + +- CallPartnerView.setDisplayName(boolean displayName) + +- CallPartnerView.setDisplayCameraIsOffIcon(Boolean displayCameraIsOffIcon) + +- CallPartnerView.setDisplayIsMuteIcon(Boolean displayIsMuteIcon) + +- ArrayList to CallStartResult. only userId, mute and video fills in CallParticipantVO. + + +### Fixed + +- VideoCall minor bugs + +### Changed + +- Improve group call + +- CallActivity UI + + + + +## Version [0.9.11.0] -2021-8-21 + +[Added] **Video Call** + +[Improved] **Audio Call** + +[Added] Permission to use the camera + +[َAdded] setupCall(VideoCallParam, AudioCallParam, CallConfig, List) + +[Added] requestCall(CallRequest) method + +[Added] acceptVoiceCall(AcceptCallRequest) method + +[Added] onCallCreated() callback + +[Added] onCallDelivered(ChatResponse) callback + +[Added] onReceiveCallRequest(ChatResponse) callback + +[Added] onVoiceCallStarted(ChatResponse) callback + +[Added] rejectVoiceCall(RejectCallRequest) method + +[Added] onCallRequestRejected(ChatResponse) callback + +[Added] endAudioCall(EndCallRequest) method + +[Added] onVoiceCallEnded(ChatResponse) callback + +[Added] onEndCallRequestFromNotification() callback + +[Added] onCallReconnect(ChatResponse) callback + +[Added] onCallConnect(ChatResponse) callback + +[Added] MessageVO.getCallHistoryVO(); + +[Added] getCallsHistory(GetCallHistoryRequest) method + +[Added] onReceiveCallHistory(ChatResponse) callback + +[Added] switchCallMuteState(Boolean,CallId) method + +[Added] onAudioCallMuted(ChatResponse) callback + +[Added] onAudioCallUnMuted(ChatResponse) callback + +[Added] requestMuteCallParticipant(MuteUnMuteCallParticipantRequest) method + +[Added] onCallParticipantMuted(ChatResponse) callback + +[Added] requestUnMuteCallParticipant(MuteUnMuteCallParticipantRequest) method + +[Added] onCallParticipantUnMuted(ChatResponse) callback + +[Added] onMutedByAdmin(ChatResponse) callback + +[Added] onUnMutedByAdmin(ChatResponse) callback + +[Added] switchCallSpeakerState(Boolean) method + +[Added] openCamera() method + +[Added] closeCamera() method + +[Added] switchCamera() method + +[Added] turnOnVideo(CallId) method + +[Added] turnOffVideo(CallId) method + +[Added] turnCallParticipantVideoOff(TurnCallParticipantVideoOffRequest) method + +[Added] onCallParticipantStoppedVideo(ChatResponse) callback + +[Added] onCallParticipantStartedVideo(ChatResponse) callback + +[Added] getCallParticipants(GetCallParticipantsRequest) + +[Added] onActiveCallParticipantsReceived(ChatResponse) callback + + + + + + + +## Version [0.9.10.0] -2021-7-17 + +[Added] ```getMutualGroup``` method + +[Added] ```onGetMutualGroups``` callback + +[Added] ```getContacts``` => add username to RequestGetContact + + +## Version [0.9.9.0] +[BugFixed] Failure to receive history in specific situations + + +## Version [0.9.8.2] + +[Added] ```createTag``` method + +[Added] ```onTagCreated``` callback + +[Added] ```editTag``` method + +[Added] ```onTagEdited``` callback + +[Added] ```deleteTag``` method + +[Added] ```onTagDeleted``` callback + +[Added] ```addTagParticipant``` method + +[Added] ```onTagParticipantAdded``` callback + +[Added] ```removeTagParticipant``` method + +[Added] ```onTagParticipantRemoved``` callback + +[Added] ```getTagList``` method + +[Added] ```onTagList``` callback + + + +## Version [0.9.8.1] -2021-4-28 + +[BugFixed] NullPointerException on reconnect + + +## Version [0.9.8.0] -2021-4-27 + +[Added] ```getUserBots``` method + +[Added] ```onUserBots``` callback + +[Added] ```blockAssistant``` method + +[Added] ```onAssistantBlocked``` callback + +[Added] ```unBlockAssistant``` method + +[Added] ```onAssistantUnBlocked``` callback + +[Added] ```getBlocksAssistant``` method + +[Added] ```onAssistantBlocks``` callback + +[BugFixed] Database lock exception. + +[Improvement] Prevented from additional reconnect requests at the same time. + +[Improvement] If the ```NetworkStateConfig``` is not set, the default mode uses. + + +## Version [0.9.7.0] -2021-2-24 + +[Added] ```getAssistantHistory``` method + +[Added] ```onGetAssistantHistory``` callback + +[Added] ```changeThreadType``` method + +[Added] ```onThreadTypeChanged``` callback + +[Added] ```getHashTagList``` method + +[Added] ```onGetHashTagList``` callback + +[Fixed] Sentry NativeLib Exception + +[Fixed] Minor bugs fixed + + + +## Version [0.9.6.0] -2021-1-26 + +[Deprecated] removeParticipants(long threadId, List participantIds, ChatHandler handler) + +[Added] Invitee to RemoveParticipantRequest + +[Added] ability to removeParticipants with Invitee (userId and coreUserId) + +[Added] ```registerAssistant``` method + +[Added] ```onRegisterAssistant``` callback + +[Added] ```deactiveAssistant``` method + +[Added] ```onDeActiveAssistant``` callback + +[Added] ```getAssistants``` method + +[Added] ```onGetAssistants``` callback + + + + + + + +## Version [0.9.5.0] -2020-12-5 + +[Added] Accept call in mute state. + +[BugFixed] Minor bugs fixed. + +## Version [0.9.4.0] -2020-12-5 + +[Changed] ```onGetThread```, Match the content of all onGetThread events + + +## Version [0.9.4.0-beta] -2020-11-25 + +[Added] ```closeChat```, close chat socket + +[Added] ```resumeChat```, open and connect chat socket + + ## Version [0.9.3.1] -2020-11-22 [Added] ```isSentryLogActive``` @@ -12,7 +346,6 @@ All notable changes to this project will be documented here. [Added] ```isSentryResponseLogActive``` - ## Version [0.9.3.0] -2020-11-02 [Added] ```closeThread``` diff --git a/app/build.gradle b/app/build.gradle index 093a8386..5d64c1c7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,35 +2,79 @@ apply plugin: 'com.android.application' android { compileSdkVersion 28 + defaultConfig { applicationId "com.fanap.podchat" minSdkVersion 17 targetSdkVersion 28 - versionCode 1 - versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true vectorDrawables.useSupportLibrary = true } buildTypes { release { - minifyEnabled false + minifyEnabled true + shrinkResources true + debuggable false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { - minifyEnabled true - shrinkResources true + minifyEnabled false + shrinkResources false debuggable true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + flavorDimensions "default" + + productFlavors { + + withCall { + versionName "1.3.0" + versionCode 1 + matchingFallbacks = ["withCall", "withoutCall"] + } + withoutCall { + versionName "0.0.1" + versionCode 1 + matchingFallbacks = ["withoutCall", "withCall"] + } + + } + + + applicationVariants.all { variant -> + + variant.outputs.all { output -> + + def versionName = variant.versionName + def flavorName = variant.flavorName // e. g. withCall + def buildType = variant.buildType.name // e. g. debug + def variantName = variant.name // e. g. withCallDebug + + if (flavorName == "withCall") { + outputFileName = "PodCall-v${versionName}.apk" + } else if (flavorName == "withoutCall") { + outputFileName = "PodChat-v${versionName}.apk" + } + + } + } + + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - buildToolsVersion '28.0.3' + packagingOptions { + exclude 'LICENSE.txt' + } + + testOptions { + unitTests.returnDefaultValues = true + } // packagingOptions { // exclude 'META-INF/rxjava.properties' // exclude 'okhttp3/internal/publicsuffix/publicsuffixes.gz' @@ -43,15 +87,19 @@ dependencies { implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' - testImplementation 'junit:junit:4.12' + + + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.mockito:mockito-core:4.1.0' + androidTestImplementation 'org.mockito:mockito-android:4.1.0' androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test:rules:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' - androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.10.0' - testImplementation 'org.mockito:mockito-core:3.1.0' - // required if you want to use Mockito for Android tests - androidTestImplementation 'org.mockito:mockito-android:3.1.0' + // implementation 'com.google.android.gms:play-services:12.0.1' implementation 'com.orhanobut:logger:2.2.0' + implementation 'com.android.support:cardview-v7:28.0.0' + androidTestImplementation 'com.orhanobut:logger:2.2.0' implementation 'com.google.code.gson:gson:2.8.2' //create fake data @@ -67,9 +115,12 @@ dependencies { // implementation project(path: ':podotp') + implementation 'com.github.bumptech.glide:glide:4.8.0' + //placeholderview +// implementation 'com.mindorks:placeholderview:0.7.1' + implementation('com.mindorks:placeholderview:0.7.1') { + exclude group: 'com.android.support', module: 'recyclerview-v7' + } -} -repositories { - mavenCentral() } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 0704097f..d3231504 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -36,5 +36,4 @@ -keep class net.sqlcipher.database.* { *; } --dontobfuscate -keepattributes SourceFile,LineNumberTable diff --git a/app/src/androidTest/java/com/example/podchat/ChatTest.java b/app/src/androidTest/java/com/example/podchat/ChatTest.java index 25e6fec2..5739250b 100644 --- a/app/src/androidTest/java/com/example/podchat/ChatTest.java +++ b/app/src/androidTest/java/com/example/podchat/ChatTest.java @@ -8,6 +8,7 @@ import android.support.test.filters.FlakyTest; import android.support.test.filters.LargeTest; import android.support.test.filters.MediumTest; +import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import com.example.chat.application.chatexample.BaseApplication; @@ -16,45 +17,64 @@ import com.example.chat.application.chatexample.ChatPresenter; import com.fanap.podchat.ProgressHandler; import com.fanap.podchat.chat.Chat; -import com.fanap.podchat.chat.ChatAdapter; +import com.fanap.podchat.chat.ChatListener; +import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; import com.fanap.podchat.chat.user.profile.RequestUpdateProfile; +import com.fanap.podchat.chat.user.profile.ResultUpdateProfile; import com.fanap.podchat.example.R; import com.fanap.podchat.mainmodel.Contact; import com.fanap.podchat.mainmodel.History; import com.fanap.podchat.mainmodel.Invitee; +import com.fanap.podchat.mainmodel.MessageVO; import com.fanap.podchat.mainmodel.RequestSearchContact; +import com.fanap.podchat.mainmodel.Thread; import com.fanap.podchat.model.ChatResponse; import com.fanap.podchat.model.ErrorOutPut; +import com.fanap.podchat.model.ResultHistory; import com.fanap.podchat.model.ResultImageFile; +import com.fanap.podchat.model.ResultMessage; import com.fanap.podchat.model.ResultThreads; -import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; +import com.fanap.podchat.requestobject.RequestConnect; +import com.fanap.podchat.requestobject.RequestGetHistory; import com.fanap.podchat.requestobject.RequestGetUserRoles; +import com.fanap.podchat.requestobject.RequestMessage; import com.fanap.podchat.requestobject.RequestSignalMsg; +import com.fanap.podchat.requestobject.RequestThread; import com.fanap.podchat.util.ChatMessageType; +import com.fanap.podchat.util.TextMessageType; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; - import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + +import static com.example.chat.application.chatexample.ChatActivity.APP_ID; +import static com.fanap.podchat.util.ChatStateType.ChatSateConstant.CHAT_READY; @RunWith(AndroidJUnit4.class) -public class ChatTest extends ChatAdapter { +public class ChatTest { + public static final boolean CACHE = false; private static ChatContract.presenter presenter; @Mock private static ChatContract.view view; + + @Mock private Activity activity; - private Context appContext; + private static Context appContext; private static String serverName = "chat-server"; private static String appId = "POD-Chat"; @@ -63,53 +83,555 @@ public class ChatTest extends ChatAdapter { private static String socketAddress = BaseApplication.getInstance().getString(R.string.sandbox_socketAddress); private static String platformHost = BaseApplication.getInstance().getString(R.string.sandbox_platformHost); private static String fileServer = BaseApplication.getInstance().getString(R.string.sandbox_fileServer); - private static String TOKEN = "a9e6e26d6fe940ddb714333e51e229d6"; + private static String TOKEN = "cf06e0e5cc3f41fba837f4d05b9a4138"; + @Mock + ChatListener chatListeners; + private ChatActivity chatActivity; + static Chat chat; + + static final Object sync = new Object(); + + @Rule + public ActivityTestRule chatActivityRule = new ActivityTestRule<>(ChatActivity.class); + + + @BeforeClass + public static void initial() { + + + appContext = InstrumentationRegistry.getTargetContext(); + + chat = Chat.init(appContext); + } @Before - public void setUp() { + public void createChat() { Looper.prepare(); - appContext = InstrumentationRegistry.getTargetContext(); - MockitoAnnotations.initMocks(this); + + view = Mockito.mock(ChatContract.view.class); + + chatActivity = chatActivityRule.getActivity(); presenter = new ChatPresenter(appContext, view, chatActivity); - presenter.connect(socketAddress, - appId, serverName, TOKEN, ssoHost, - platformHost, fileServer, ""); + + RequestConnect rc = new RequestConnect.Builder( + socketAddress, + APP_ID, + serverName, + TOKEN, + ssoHost, + platformHost, + fileServer, + "podSpaceServer") + .build(); + + + chatListeners = new ChatListener() { + @Override + public void onChatState(String state) { + if (state.equals(CHAT_READY)) { + resumeProcess(); + } + } + }; + + chat.addListener(chatListeners); + + chat.connect(rc); + + chat.isCacheables(CACHE); + + pauseProcess(); + + + } + + + final ArrayList threads = new ArrayList<>(); + + //requests for list of threads + @Test + public void populateThreadsListFromServerOrCache() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + } + }; + + chat.addListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .build(); + + presenter.getThreads(requestThread, null); + + long t1 = System.currentTimeMillis(); + Mockito.verify(view, Mockito.after(10000).atLeastOnce()).onGetThreadList(Mockito.any(), Mockito.any()); + long t2 = System.currentTimeMillis(); + System.out.println("Received List: " + threads.size() + " after: " + (t2 - t1) + " ms"); + + } + + //requests for list of threads from server + @Test + public void populateThreadsListFromServerOnly() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + if (!thread.isCache()) { + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + resumeProcess(); + } + + } + }; + + chat.setListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .withNoCache() + .build(); + + presenter.getThreads(requestThread, null); + + pauseProcess(); + System.out.println("Received List: " + threads.size()); + + } + + //requests for list of threads from cache + @Test + public void populateThreadsListFromCacheOnly() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + if (thread.isCache()) { + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + resumeProcess(); + } + + } + }; + + chat.addListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .build(); + + presenter.getThreads(requestThread, null); + + pauseProcess(); + System.out.println("Received List: " + threads.size()); + + } + + @Test + public void chatListeners() { + + ChatListener listener1 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener1); + ChatListener listener2 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener2); + ChatListener listener3 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener3); + + chat.removeListener(listener2); + + Assert.assertFalse(chat.getListeners().contains(listener2)); + } @Test @LargeTest - public void updateUserProfile(){ + public void getUserRolesInThread() { + populateThreadsListFromServerOrCache(); - sleep(10000); + for (Thread t : threads) { + if (t.getAdmin()) { + System.out.println("Get roles in " + t.getId()); + getCurrentUserRoles(t.getId()); + break; + } + } + System.out.println("** Get roles in " + threads.get(0).getId()); + getCurrentUserRoles(threads.get(0).getId()); - RequestUpdateProfile request = new RequestUpdateProfile - .Builder("عیب رندان مکن ای زاهد پاکیزه سرشت") + } + + public void getCurrentUserRoles(long threadID) { + + RequestGetUserRoles req = new RequestGetUserRoles.Builder() + .setThreadId(threadID) + .build(); + + presenter.getUserRoles(req); + + sleep(1000); + + Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); + + + } + + + @Test + @LargeTest + public void getThreadHistoryIns() { + populateThreadsListFromServerOrCache(); + System.out.println("** Get history of " + threads.get(0).getId()); + for (Thread thread : + new ArrayList<>(threads)) { + getThreadHistory(thread.getId()); + } +// getThreadHistory(threads.get(0).getId()); + } + + public void getThreadHistory(long threadId) { + + + RequestGetHistory request = new RequestGetHistory + .Builder(threadId) + .offset(0) + .count(25) + .order("desc") //.order("asc") +// .fromTime(new Date().getTime()) + // .toTime(new Date().getTime()) +// .setMessageType(TextMessageType.Constants.POD_SPACE_PICTURE) +// .withNoCache() + .build(); + presenter.getHistory(request, null); + sleep(2000); + Mockito.verify(view, Mockito.atLeastOnce()).onGetThreadHistory(Mockito.any()); + } + + + @Test + @LargeTest + //get 25 message before and after last seen message time + //messages NanoTimes should be lower than last seen in first case + //and greater in second case + public void getThreadHistoryBeforeAndAfterLastSeenMessage() { + + populateThreadsListFromServerOrCache(); + System.out.println("** Get history of " + threads.get(0).getTitle()); + + Thread thread = threads.get(0); + + final long lastSeen = thread.getLastSeenMessageTime() + thread.getLastSeenMessageNanos(); + + AtomicInteger numOfCacheResp = new AtomicInteger(0); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetHistory(String content, ChatResponse history) { + int invokeTimes = 0; + if (history.isCache()) { + invokeTimes = numOfCacheResp.getAndIncrement(); + } + checkTimesIsValid(history, invokeTimes, lastSeen); + if (invokeTimes >= 2) { + resumeProcess(); + } + } + }; + chat.addListener(historyListeners); + RequestGetHistory requestGetHistoryBeforeLastSeenTime = new RequestGetHistory + .Builder(thread.getId()) + .toTimeNanos(lastSeen) + .offset(0) + .count(25) + .order("desc") .build(); + presenter.getHistory(requestGetHistoryBeforeLastSeenTime, null); + + RequestGetHistory requestGetHistoryAfterLastSeenTime = new RequestGetHistory + .Builder(thread.getId()) + .fromTimeNanos(lastSeen) + .offset(0) + .count(25) + .order("asc") + .build(); + presenter.getHistory(requestGetHistoryAfterLastSeenTime, null); + + pauseProcess(); + sleep(2000); + Mockito.verify(view, Mockito.atLeast(2)).onGetThreadHistory(Mockito.any()); + + } + + + @Test + @LargeTest + public void sendMessageToThreadMessage() { + + populateThreadsListFromServerOrCache(); + + long threadID = 0; + for (Thread thread : new ArrayList<>(threads)) { + if (!thread.isClosed() + && thread.isGroup() && thread.getAdmin()) { + threadID = thread.getId(); + } + } + if (threadID > 0) + sendTestMessageOnSeen(threadID); + + + } + + public void sendTestMessageOnSeen(long threadId) { + presenter.sendTextMessage("This is test " + new Date().getTime(), threadId, null, "From android instrumental test at " + new Date().getTime(), null); + sleep(2000); + Mockito.verify(view, Mockito.times(1)).onSentMessage(); + } + + @Test + @LargeTest + public void sendALotOfMessageToThread() { + + populateThreadsListFromServerOnly(); + + long threadID = threads.get(0).getId(); + for (Thread thread : new ArrayList<>(threads)) { + if (!thread.isClosed() && + thread.getParticipantCount() > 1) { + threadID = thread.getId(); + } + } + + if (threadID > 0) { + int counter = 0; + int count = 5; + while (counter < count) { + RequestMessage requestMessage = new RequestMessage.Builder("This is test " + new Date().getTime(), threadID) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData("From android instrumental test at " + new Date().getTime()) + .build(); + presenter.sendTextMessage(requestMessage,null); + counter++; + } + sleep(7000); + Mockito.verify(view, Mockito.atLeastOnce()).onSentMessage(); + }else { + Assert.fail("no suitable thread found"); + } + - presenter.updateChatProfile(request); + } + @Test + @LargeTest + //get threads histories one by one + //performance should be acceptable + public void getAllThreadsHistories() { + //get 25 thread from server + populateThreadsListFromServerOrCache(); + + long startTime = System.currentTimeMillis(); + for (Thread thread : + new ArrayList<>(threads)) { + System.out.println("NEXT: " + thread.getTitle()); + System.out.println(thread.getId()); + getThreadFullHistory(thread); + } + long endTime = System.currentTimeMillis(); Assert.assertTrue(true); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println("TEST IS DONE FOR "); + System.out.println(threads.size()); + System.out.println("THREADS IN"); + System.out.println(endTime - startTime + " MILLISECONDS"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + + } + + private void getThreadFullHistory(Thread thread) { + + + long startTime = System.currentTimeMillis(); + + AtomicBoolean hasNext = new AtomicBoolean(true); + int count = 25; + AtomicLong offset = new AtomicLong(0); + AtomicLong threadMessagesCount = new AtomicLong(-1); + AtomicLong threadReceivedHistory = new AtomicLong(0); + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetHistory(String content, ChatResponse history) { + + + threadMessagesCount.set(history.getResult().getContentCount()); + long received = threadReceivedHistory.get(); + threadReceivedHistory.set(received + history.getResult().getHistory().size()); + hasNext.set(history.getResult().isHasNext()); + if (hasNext.get()) { + offset.set(offset.get() + history.getResult().getHistory().size()); + } + resumeProcess(); + + } + + @Override + public void onError(String content, ErrorOutPut error) { + Assert.fail(content); + } + }; + chat.addListener(historyListeners); + + while (hasNext.get()) { + RequestGetHistory requestGetHistory = new RequestGetHistory + .Builder(thread.getId()) + .offset(offset.get()) + .withNoCache() + .count(count) + .order("desc") + .build(); + String uniqueId = presenter.getHistory(requestGetHistory, null); + pauseProcess(); + } + long endTime = System.currentTimeMillis(); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println("RUNNING TEST ON THREAD:"); + System.out.println(thread.getTitle()); + System.out.println(thread.getId()); + System.out.println("RECEIVED TOTAL " + threadReceivedHistory + " MESSAGES OF HISTORY IN"); + System.out.println(endTime - startTime + " MILLISECONDS"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + Assert.assertEquals(threadMessagesCount.get(), threadReceivedHistory.get()); + } + + private void checkTimesIsValid(ChatResponse history, int invokeTimes, long lastSeen) { + switch (invokeTimes) { + case 1: { + for (MessageVO message : + history.getResult().getHistory()) { + Assert.assertTrue(message.getTimeNanos() <= lastSeen); + } + break; + } + case 2: { + for (MessageVO message : + history.getResult().getHistory()) { + Assert.assertTrue(message.getTimeNanos() >= lastSeen); + } + break; + } + } + } + + // @Test +// @LargeTest +// public void updateUserProfile() { +// +// +// sleep(10000); +// +// RequestUpdateProfile request = new RequestUpdateProfile +// .Builder("عیب رندان مکن ای زاهد پاکیزه سرشت") +// .build(); +// +// chat.updateChatProfile(request); +// +// sleep(1000); +// +// Mockito.verify(chatListeners, Mockito.atLeastOnce()).onChatProfileUpdated(Mockito.any()); +// +// +// Assert.assertTrue(true); +// +// +// } + @Test + @LargeTest + public void updateUserProfile() { + + + String bio = "عیب رندان مکن ای زاهد پاکیزه سرشت"; + RequestUpdateProfile request = new RequestUpdateProfile + .Builder(bio) + .build(); +// +// presenter.updateChatProfile(request); +// +// sleep(1000); + + chat.updateChatProfile(request); + sleep(500); + ChatResponse response = new ChatResponse<>(); + ResultUpdateProfile result = new ResultUpdateProfile(); + result.setBio(bio); + response.setResult(result); + + Mockito.verify(view, Mockito.atLeastOnce()).onChatProfileUpdated(Mockito.any()); } + @Test + @LargeTest + public void getUserInfo() { + presenter.getUserInfo(null); + sleep(500); + Mockito.verify(view, Mockito.atMost(3)).onGetUserInfo(Mockito.any()); + } @Test @@ -140,18 +662,17 @@ public void getRoutsSize() { Assert.assertEquals(0, presenter.getImageFolderSize()); - } @Test public void clearDataBase() { - sleep(10000); + sleep(500); presenter.getCacheSize(); - sleep(2000); + sleep(500); presenter.clearDatabaseCache(new Chat.IClearMessageCache() { @Override @@ -165,7 +686,7 @@ public void onExceptionOccurred(String cause) { } }); - sleep(5000); + sleep(500); presenter.getCacheSize(); @@ -185,25 +706,21 @@ public void getDatabaseSize() { @LargeTest public void getCurrentUserRoles() { - - sleep(25000); - RequestGetUserRoles req = new RequestGetUserRoles.Builder() .setThreadId(5801) .build(); - presenter.getUserRoles(req); + chat.getCurrentUserRoles(req); sleep(1000); - Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); +// Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); + Mockito.verify(chatListeners, Mockito.atLeastOnce()).onError(Mockito.any(), Mockito.any()); } - - @Test @FlakyTest public void startTyping() { @@ -224,8 +741,6 @@ public void startTyping() { @MediumTest public void pinMessage() { - sleep(25000); - RequestPinMessage requestPinMessage = new RequestPinMessage.Builder() .setMessageId(76306) .setNotifyAll(true) @@ -259,20 +774,8 @@ public void unpinMessage() { } - private void sleep(int i) { - try { - Thread.sleep(i); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - @Override - public void onGetThread(String content, ChatResponse thread) { - super.onGetThread(content, thread); - } @Test @MediumTest @@ -348,7 +851,7 @@ public void getThreadHistory() { History history = new History.Builder().count(5).build(); presenter.getHistory(history, 381, null); sleep(3000); - Mockito.verify(view, Mockito.times(1)).onGetThreadHistory(); + Mockito.verify(view, Mockito.times(1)).onGetThreadHistory(Mockito.any()); } @@ -358,7 +861,7 @@ public void getContacts() { sleep(3000); presenter.getContact(50, 0L, null); sleep(3000); - Mockito.verify(view, Mockito.times(1)).onGetContacts(outPutContact.getResult()); + Mockito.verify(view, Mockito.times(1)).onGetContacts(null); } @Test @@ -478,7 +981,7 @@ public void renameThread() { @MediumTest public void addContact() { sleep(5000); - presenter.addContact("maman", "sadeghi", "091224858169", "dev55@gmail.com",""); + presenter.addContact("maman", "sadeghi", "091224858169", "dev55@gmail.com", ""); sleep(3000); Mockito.verify(view, Mockito.times(1)).onAddContact(); // Mockito.verify(view,Mockit.) @@ -717,4 +1220,27 @@ public void searchMap() { sleep(3000); Mockito.verify(view, Mockito.times(1)).onMapSearch(); } + + private void sleep(int i) { + try { + java.lang.Thread.sleep(i); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + private void resumeProcess() { + synchronized (sync) { + sync.notify(); + } + } + + private void pauseProcess() { + synchronized (sync) { + try { + sync.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } } diff --git a/app/src/androidTest/java/com/example/podchat/ChatTestIntegration.java b/app/src/androidTest/java/com/example/podchat/ChatTestIntegration.java new file mode 100644 index 00000000..b122e747 --- /dev/null +++ b/app/src/androidTest/java/com/example/podchat/ChatTestIntegration.java @@ -0,0 +1,1386 @@ +package com.example.podchat; + +import android.app.Activity; +import android.content.Context; +import android.net.Uri; +import android.os.Looper; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.FlakyTest; +import android.support.test.filters.LargeTest; +import android.support.test.filters.MediumTest; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; + +import com.example.chat.application.chatexample.BaseApplication; +import com.example.chat.application.chatexample.ChatActivity; +import com.example.chat.application.chatexample.ChatContract; +import com.example.chat.application.chatexample.ChatPresenter; +import com.fanap.podchat.ProgressHandler; +import com.fanap.podchat.chat.Chat; +import com.fanap.podchat.chat.ChatAdapter; +import com.fanap.podchat.chat.ChatHandler; +import com.fanap.podchat.chat.ChatListener; +import com.fanap.podchat.chat.RoleType; +import com.fanap.podchat.chat.assistant.model.AssistantVo; +import com.fanap.podchat.chat.assistant.request_model.DeActiveAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.RegisterAssistantRequest; +import com.fanap.podchat.chat.hashtag.model.RequestGetHashTagList; +import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; +import com.fanap.podchat.chat.user.profile.RequestUpdateProfile; +import com.fanap.podchat.chat.user.profile.ResultUpdateProfile; +import com.fanap.podchat.example.R; +import com.fanap.podchat.mainmodel.Contact; +import com.fanap.podchat.mainmodel.History; +import com.fanap.podchat.mainmodel.Invitee; +import com.fanap.podchat.mainmodel.MessageVO; +import com.fanap.podchat.mainmodel.RequestSearchContact; +import com.fanap.podchat.mainmodel.Thread; +import com.fanap.podchat.model.ChatResponse; +import com.fanap.podchat.model.ErrorOutPut; +import com.fanap.podchat.model.ResultHistory; +import com.fanap.podchat.model.ResultImageFile; +import com.fanap.podchat.model.ResultMessage; +import com.fanap.podchat.model.ResultThreads; +import com.fanap.podchat.requestobject.RequestConnect; +import com.fanap.podchat.requestobject.RequestGetHistory; +import com.fanap.podchat.requestobject.RequestGetUserRoles; +import com.fanap.podchat.requestobject.RequestMessage; +import com.fanap.podchat.requestobject.RequestSignalMsg; +import com.fanap.podchat.requestobject.RequestThread; +import com.fanap.podchat.util.ChatMessageType; +import com.fanap.podchat.util.InviteType; +import com.orhanobut.logger.Logger; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + +import static com.example.chat.application.chatexample.ChatActivity.APP_ID; +import static com.fanap.podchat.util.ChatStateType.ChatSateConstant.CHAT_READY; + + +@RunWith(AndroidJUnit4.class) +public class ChatTestIntegration extends ChatAdapter { + + private static ChatContract.presenter presenter; + @Mock + private static ChatContract.view view; + + + @Mock + private Activity activity; + private static Context appContext; + + private static String appId = "POD-Chat"; + + + private static String NAME = BaseApplication.getInstance().getString(R.string.test_server_name); + private static String socketAddress = BaseApplication.getInstance().getString(R.string.test_socketAddress); + private static String platformHost = BaseApplication.getInstance().getString(R.string.test_platformHost); + private static String fileServer = BaseApplication.getInstance().getString(R.string.test_fileServer); + private static String TOKEN = BaseApplication.getInstance().getString(R.string.Pooria_Pahlevani); + private static String ssoHost = BaseApplication.getInstance().getString(R.string.integration_ssoHost); + private static String serverName = BaseApplication.getInstance().getString(R.string.integration_serverName); + + + @Mock + ChatListener chatListeners; + + private ChatActivity chatActivity; + + + static Chat chat; + + static final Object sync = new Object(); + + @Rule + public ActivityTestRule chatActivityRule = new ActivityTestRule<>(ChatActivity.class); + + + @BeforeClass + public static void initial() { + + + appContext = InstrumentationRegistry.getTargetContext(); + + chat = Chat.init(appContext); + +// chat.isCacheables(true); +// +// chat.isLoggable(true); +// chat.rawLog(true); +// chat.isSentryLogActive(true); +// chat.isSentryResponseLogActive(true); +// +// chat.setDownloadDirectory(appContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)); +// +// TimeoutConfig timeout = new TimeoutConfig() +// .newConfigBuilder() +// .withConnectTimeout(30, TimeUnit.SECONDS) +// .withWriteTimeout(30, TimeUnit.MINUTES) +// .withReadTimeout(30, TimeUnit.MINUTES) +// .build(); +// +// +// chat.setUploadTimeoutConfig(timeout); +// +// chat.setDownloadTimeoutConfig(timeout); +// +// NetworkPingSender.NetworkStateConfig build = new NetworkPingSender.NetworkStateConfig() +// .setHostName("msg.pod.ir") +// .setPort(443) +// .setDisConnectionThreshold(2) +// .setInterval(7000) +// .setConnectTimeout(10000) +// .build(); + + +// TimeoutConfig uploadConfig = new TimeoutConfig() +// .newConfigBuilder() +// .withConnectTimeout(120, TimeUnit.MINUTES) +// .withWriteTimeout(120, TimeUnit.MINUTES) +// .withReadTimeout(120, TimeUnit.MINUTES) +// .build(); +// +// TimeoutConfig downloadConfig = new TimeoutConfig() +// .newConfigBuilder() +// .withConnectTimeout(20, TimeUnit.SECONDS) +// .withWriteTimeout(0, TimeUnit.SECONDS) +// .withReadTimeout(5, TimeUnit.MINUTES) +// .build(); + +// chat.setNetworkStateConfig(build); +// +// chat.setUploadConfig(uploadConfig); +// +// chat.setDownloadConfig(downloadConfig); + + + } + + @Before + public void createChat() { + Looper.prepare(); + MockitoAnnotations.initMocks(this); + + RequestConnect rc = new RequestConnect.Builder( + socketAddress, + APP_ID, + serverName, + TOKEN, + ssoHost, + platformHost, + fileServer, + "podSpaceServer") + .build(); + + + chatListeners = new ChatListener() { + @Override + public void onChatState(String state) { + if (state.equals(CHAT_READY)) { + resumeProcess(); + } + } + }; + + chat.addListener(chatListeners); + + chat.connect(rc); + + pauseProcess(); + + + } + + @Before + public void setUp() { +// Looper.prepare(); +// appContext = InstrumentationRegistry.getTargetContext(); +// MockitoAnnotations.initMocks(this); + chatActivity = chatActivityRule.getActivity(); + presenter = new ChatPresenter(appContext, view, chatActivity); + +// RequestConnect rc = new RequestConnect.Builder( +// socketAddress, +// APP_ID, +// serverName, +// "f29512343de1472fa15d1e497e264c54", +// ssoHost, +// platformHost, +// fileServer, +// "podSpaceServer") +// .build(); + +// presenter.connect(rc); + + } + + final ArrayList threads = new ArrayList<>(); + + + @Test + public void populateThreadsListFromServerOrCache() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + resumeProcess(); + } + }; + + chat.addListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .build(); + + presenter.getThreads(requestThread, null); + + pauseProcess(); + System.out.println("Received List: " + threads.size()); + + } + + + private void resumeProcess() { + synchronized (sync) { + sync.notify(); + } + } + + private void pauseProcess() { + synchronized (sync) { + try { + sync.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + +// @After +// public void closeChat() { +// if (chat != null) { +// chat.closeChat(); +// } else if (presenter != null) { +// presenter.closeChat(); +// } +// } + + + @Test + public void chatListeners() { + + ChatListener listener1 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener1); + ChatListener listener2 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener2); + ChatListener listener3 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener3); + + chat.removeListener(listener2); + + Assert.assertFalse(chat.getListeners().contains(listener2)); + + } + + + @Test + @LargeTest + public void getUserRolesInThread() { + + populateThreadsListFromServerOrCache(); + + for (Thread t : threads) { + if (t.getAdmin()) { + System.out.println("Get roles in " + t.getId()); + getCurrentUserRoles(t.getId()); + break; + } + } + System.out.println("** Get roles in " + threads.get(0).getId()); + getCurrentUserRoles(threads.get(0).getId()); + + } + + public void getCurrentUserRoles(long threadID) { + + RequestGetUserRoles req = new RequestGetUserRoles.Builder() + .setThreadId(threadID) + .build(); + + presenter.getUserRoles(req); + + sleep(1000); + + Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); + + + } + + + @Test + @LargeTest + public void getThreadHistoryIns() { + populateThreadsListFromServerOrCache(); + System.out.println("** Get history of " + threads.get(0).getId()); + for (Thread thread : + new ArrayList<>(threads)) { + getThreadHistory(thread.getId()); + } +// getThreadHistory(threads.get(0).getId()); + } + + + public void getThreadHistory(long threadId) { + threadId = 8093; + RequestGetHashTagList request = new RequestGetHashTagList + .Builder(threadId) + .setHashtag("test") + .offset(0) + .count(25) + .build(); + presenter.getHashTagList(request, new ChatHandler() { + @Override + public void onGetHistory(String uniqueId) { + super.onGetHistory(uniqueId); + } + }); + + } + + + @Test + @LargeTest + //get 25 message before and after last seen + //messages NanoTimes should be lower than last seen in first case + //and greater in second case + public void getThreadHistoryBeforeAndAfterLastSeenMessage() { + + populateThreadsListFromServerOrCache(); + System.out.println("** Get history of " + threads.get(0).getTitle()); + + Thread thread = threads.get(0); + + final long lastSeen = thread.getLastSeenMessageTime() + thread.getLastSeenMessageNanos(); + + AtomicInteger numOfCacheResp = new AtomicInteger(0); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetHistory(String content, ChatResponse history) { + int invokeTimes = 0; + if (history.isCache()) { + invokeTimes = numOfCacheResp.getAndIncrement(); + } + checkTimesIsValid(history, invokeTimes, lastSeen); + if (invokeTimes >= 2) { + resumeProcess(); + } + } + }; + chat.addListener(historyListeners); + RequestGetHistory requestGetHistoryBeforeLastSeenTime = new RequestGetHistory + .Builder(thread.getId()) + .toTimeNanos(lastSeen) + .offset(0) + .count(25) + .order("desc") + .build(); + + presenter.getHistory(requestGetHistoryBeforeLastSeenTime, null); + + RequestGetHistory requestGetHistoryAfterLastSeenTime = new RequestGetHistory + .Builder(thread.getId()) + .fromTimeNanos(lastSeen) + .offset(0) + .count(25) + .order("asc") + .build(); + presenter.getHistory(requestGetHistoryAfterLastSeenTime, null); + + pauseProcess(); + sleep(2000); + Mockito.verify(view, Mockito.atLeast(2)).onGetThreadHistory(Mockito.any()); + + } + + + @Test + @LargeTest + //get threads histories one by one + //performance should be acceptable + public void getAllThreadsHistories() { + populateThreadsListFromServerOrCache(); + long startTime = System.currentTimeMillis(); + for (Thread thread : + new ArrayList<>(threads)) { + System.out.println("NEXT: " + thread.getTitle()); + System.out.println(thread.getId()); + getThreadFullHistory(thread); + } +// getThreadFullHistory(threads.get(0)); + long endTime = System.currentTimeMillis(); + Assert.assertTrue(true); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println("TEST IS DONE FOR "); + System.out.println(threads.size()); + System.out.println("THREADS IN"); + System.out.println(endTime - startTime + " MILLISECONDS"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + + } + + + @Test + @LargeTest + public void setHashTagTest() { + + ChatListener historyListeners = new ChatListener() { + + @Override + public void onGetHistory(String content, ChatResponse history) { + System.out.println("onGetHistory: "); + Logger.json(history.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + + @Override + public void onSent(String content, ChatResponse response) { + System.out.println("onSent: "); + Logger.json(response.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + }; + + chat.addListener(historyListeners); + + RequestMessage requestMessage = new RequestMessage + .Builder("#android fragment", 8085) + + .build(); + presenter.sendTextMessage(requestMessage, null); + pauseProcess(); + } + + @Test + @LargeTest + public void getHistoryHashtagTest() { + long startTime = System.currentTimeMillis(); + + ChatListener historyListeners = new ChatListener() { + + @Override + public void onGetHistory(String content, ChatResponse history) { + System.out.println("onGetHistory: "); + Logger.json(history.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + + + }; + chat.setListener(historyListeners); + RequestGetHistory request = new RequestGetHistory + .Builder(8085) + .offset(0) + .count(25) + .order("desc") + .build(); + + presenter.getHistory(request, null); + pauseProcess(); + + } + + @Test + @LargeTest + public void registerAssistantsTest() { + + ChatListener historyListeners = new ChatListener() { + @Override + public void onRegisterAssistant(ChatResponse> response) { + + System.out.println("onRegisterAssistant: " + response.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + }; + + chat.addListener(historyListeners); + + registerAssistant(); + + } + + @Test + @LargeTest + public void getAssistantTest() { + long startTime = System.currentTimeMillis(); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetAssistants(ChatResponse> response) { + System.out.println("onGetAssistants: " + response); + Assert.assertTrue(true); + resumeProcess(); + } + }; + + chat.addListener(historyListeners); + + getAssistants(); + + + } + + @Test + @LargeTest + public void deActiveAssistantTest() { + long startTime = System.currentTimeMillis(); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onDeActiveAssistant(ChatResponse> response) { + System.out.println("onDeActiveAssistant: " + response); + Assert.assertTrue(true); + resumeProcess(); + } + }; + + chat.addListener(historyListeners); + + deActiveAssistant(); + + } + + private void getAssistants() { + GetAssistantRequest request = new GetAssistantRequest.Builder().typeCode("default").build(); + + presenter.getAssistants(request); + pauseProcess(); + } + + private void deActiveAssistant() { +// 52987 khodam +// 103187 nemati + //invite + Invitee invite = new Invitee("63253", InviteType.Constants.TO_BE_USER_CONTACT_ID); + + + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVos.add(assistantVo); + + + DeActiveAssistantRequest request = new DeActiveAssistantRequest.Builder(assistantVos).build(); + presenter.deActiveAssistant(request); + pauseProcess(); + } + + private void registerAssistant() { + //63253 kheirkhah + //63254 sajadi + ////63255 anvari + //63256 amjadi + //63257 zhiani + //invite list + +// 52987 khodam +// 103187 nemati + Invitee invite = new Invitee("63253", InviteType.Constants.TO_BE_USER_CONTACT_ID); + + //roles + ArrayList typeRoles = new ArrayList<>(); + typeRoles.add(RoleType.Constants.READ_THREAD); + typeRoles.add(RoleType.Constants.EDIT_THREAD); + typeRoles.add(RoleType.Constants.ADD_ROLE_TO_USER); + + + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVo.setContactType("default"); + assistantVo.setRoles(typeRoles); + + assistantVos.add(assistantVo); + + RegisterAssistantRequest request = new RegisterAssistantRequest.Builder(assistantVos).build(); + + presenter.registerAssistant(request); + pauseProcess(); + } + + private void getThreadFullHistory(Thread thread) { + + + long startTime = System.currentTimeMillis(); + + AtomicBoolean hasNext = new AtomicBoolean(true); + int count = 25; + int offset = 0; + AtomicLong threadMessagesCount = new AtomicLong(-1); + AtomicLong threadReceivedHistory = new AtomicLong(0); + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetHistory(String content, ChatResponse history) { + + threadMessagesCount.set(history.getResult().getContentCount()); + long received = threadReceivedHistory.get(); + threadReceivedHistory.set(received + history.getResult().getHistory().size()); + hasNext.set(history.getResult().isHasNext()); + resumeProcess(); + } + }; + chat.addListener(historyListeners); + + while (hasNext.get()) { + RequestGetHistory requestGetHistory = new RequestGetHistory + .Builder(thread.getId()) + .offset(offset) + .count(count) + .order("desc") + .build(); + String uniqueId = presenter.getHistory(requestGetHistory, null); + offset = offset + count; + pauseProcess(); + } + long endTime = System.currentTimeMillis(); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println("RUNNING TEST ON THREAD:"); + System.out.println(thread.getTitle()); + System.out.println(thread.getId()); + System.out.println("RECEIVED TOTAL " + threadReceivedHistory + " MESSAGES OF HISTORY IN"); + System.out.println(endTime - startTime + " MILLISECONDS"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); +// Assert.assertEquals(threadMessagesCount.get(), threadReceivedHistory.get()); + + + } + + private void checkTimesIsValid(ChatResponse history, int invokeTimes, long lastSeen) { + switch (invokeTimes) { + case 1: { + for (MessageVO message : + history.getResult().getHistory()) { + Assert.assertTrue(message.getTimeNanos() <= lastSeen); + } + break; + } + case 2: { + for (MessageVO message : + history.getResult().getHistory()) { + Assert.assertTrue(message.getTimeNanos() >= lastSeen); + } + break; + } + } + } + + // @Test +// @LargeTest +// public void updateUserProfile() { +// +// +// sleep(10000); +// +// RequestUpdateProfile request = new RequestUpdateProfile +// .Builder("عیب رندان مکن ای زاهد پاکیزه سرشت") +// .build(); +// +// chat.updateChatProfile(request); +// +// sleep(1000); +// +// Mockito.verify(chatListeners, Mockito.atLeastOnce()).onChatProfileUpdated(Mockito.any()); +// +// +// Assert.assertTrue(true); +// +// +// } + @Test + @LargeTest + public void updateUserProfile() { + + + String bio = "عیب رندان مکن ای زاهد پاکیزه سرشت"; + RequestUpdateProfile request = new RequestUpdateProfile + .Builder(bio) + .build(); +// +// presenter.updateChatProfile(request); +// +// sleep(1000); + + chat.updateChatProfile(request); + + sleep(500); + + ChatResponse response = new ChatResponse<>(); + ResultUpdateProfile result = new ResultUpdateProfile(); + result.setBio(bio); + response.setResult(result); + + Mockito.verify(view, Mockito.atLeastOnce()).onChatProfileUpdated(Mockito.any()); + + } + + @Test + @LargeTest + public void getUserInfo() { + + presenter.getUserInfo(null); + + sleep(500); + Mockito.verify(view, Mockito.atMost(3)).onGetUserInfo(Mockito.any()); + + + } + + + @Test + public void getRoutsSize() { + + long totalSize = presenter.getStorageSize(); + + System.out.println(totalSize); + + long imagesSize = presenter.getImageFolderSize(); + + System.out.println(imagesSize); + + long filesSize = presenter.getFilesFolderSize(); + + System.out.println(filesSize); + + boolean imagesClear = presenter.clearPictures(); + + System.out.println(imagesClear); + + boolean clearFiles = presenter.clearFiles(); + + System.out.println(clearFiles); + + Assert.assertEquals(0, presenter.getFilesFolderSize()); + + Assert.assertEquals(0, presenter.getImageFolderSize()); + + + } + + + @Test + public void clearDataBase() { + + sleep(500); + + presenter.getCacheSize(); + + sleep(500); + + presenter.clearDatabaseCache(new Chat.IClearMessageCache() { + @Override + public void onCacheDatabaseCleared() { + + } + + @Override + public void onExceptionOccurred(String cause) { + + } + }); + + sleep(500); + + presenter.getCacheSize(); + + } + + + @Test + public void getDatabaseSize() { + + sleep(10000); + + presenter.getCacheSize(); + + } + + @Test + @LargeTest + public void getCurrentUserRoles() { + + RequestGetUserRoles req = new RequestGetUserRoles.Builder() + .setThreadId(5801) + .build(); + + chat.getCurrentUserRoles(req); + + sleep(1000); + +// Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); + Mockito.verify(chatListeners, Mockito.atLeastOnce()).onError(Mockito.any(), Mockito.any()); + + + } + + + @Test + @FlakyTest + public void startTyping() { + + sleep(7000); + + RequestSignalMsg req = new RequestSignalMsg.Builder() + .signalType(ChatMessageType.SignalMsg.IS_TYPING) + .threadId(6630) + .build(); + + presenter.startTyping(req); + + } + + + @Test + @MediumTest + public void pinMessage() { + + RequestPinMessage requestPinMessage = new RequestPinMessage.Builder() + .setMessageId(76306) + .setNotifyAll(true) + .build(); + + presenter.pinMessage(requestPinMessage); + sleep(1000); + + + Mockito.verify(view, Mockito.times(1)).onPinMessage(Mockito.any()); + + + } + + @Test + @MediumTest + public void unpinMessage() { + + sleep(25000); + + RequestPinMessage requestPinMessage = new RequestPinMessage.Builder() + .setMessageId(76306) + .build(); + + presenter.unPinMessage(requestPinMessage); + sleep(1000); + + + Mockito.verify(view, Mockito.times(1)).onUnPinMessage(Mockito.any()); + + + } + + private void sleep(int i) { + try { + java.lang.Thread.sleep(i); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + + @Override + public void onGetThread(String content, ChatResponse thread) { + super.onGetThread(content, thread); + + } + + @Test + @MediumTest + public void createThreadWithMetaData() { + sleep(7000); + + + Invitee[] invite = new Invitee[]{new Invitee("589", 2) + , new Invitee("1162", 2) + , new Invitee("2404", 2) +// , new Invitee(824, 2) + }; + Contact contac = new Contact(); + contac.setLastName("mamadi"); + +// String metaData = +// JsonUtil.getJson(contac); +// presenter.createThread(0,invite,null,null,null,metaData,null); + + } + + @Test + @MediumTest + public void getThreadList() { + sleep(7000); +// presenter.getThreads(10, null, null, null, null); + sleep(7000); + view = new ChatContract.view() { + @Override + public void onGetThreadList(String content, ChatResponse thread) { + Assert.assertNotNull(thread); + } + }; + Mockito.verify(view, Mockito.times(1)); + } + + // long creatorCoreUserId + @Test + @MediumTest + public void threadWithCreatorCoreUserId() { + sleep(7000); + ArrayList threadIds = new ArrayList<>(); +// threadIds.add(1105); +// threadIds.add(1031); + long count = 5; + long offset; + long creatorCoreUserId = 2; + presenter.getThreads(null, null, null, null, creatorCoreUserId + , 0, 0, null); + sleep(7000); + Mockito.verify(view, Mockito.times(1)); + } + + //long partnerCoreUserId + @Test + @MediumTest + public void threadWithPartnerCoreUserId() { + + } + + //long partnerCoreContactId + @Test + @MediumTest + public void threadWithPartnerCoreContactId() { + + } + + //Get History + @Test + @MediumTest + public void getThreadHistory() { + sleep(3000); + History history = new History.Builder().count(5).build(); + presenter.getHistory(history, 381, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetThreadHistory(Mockito.any()); + } + + + @Test + @MediumTest + public void getContacts() { + sleep(3000); + presenter.getContact(50, 0L, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetContacts(null); + } + + @Test + @MediumTest + public void getThreadParticipant() { + sleep(3000); + presenter.getThreadParticipant(10, 0L, 352, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetThreadParticipant(); + } + + @Test + @MediumTest + public void sendTestMessageOnSent() { + presenter.sendTextMessage("this is test", 381, 5, null, null); + view.onSentMessage(); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onSentMessage(); + } + + @Test + @MediumTest + public void sendTestMessageOnDeliver() { + sleep(5000); + presenter.sendTextMessage("this is test", 381, null, null, null); + view.onSentMessage(); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onGetDeliverMessage(); + } + + @Test + @LargeTest + public void sendTestMessageOnSeen() { + sleep(3000); + presenter.sendTextMessage("this is test", 381, null, "name", null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetSeenMessage(); + } + + + @Test + @MediumTest + public void editMessage() { + view.onSentMessage(); + sleep(5000); + presenter.sendTextMessage("this is test", 381, 2, "", null); + Mockito.verify(view, Mockito.times(1)).onSentMessage(); + sleep(3000); + presenter.editMessage(1350, "salam this is edite" + new Date().getTime() + "by" + NAME, "", null); + Mockito.verify(view, Mockito.times(1)).onEditMessage(); + } + + /** + * int TO_BE_USER_SSO_ID = 1; + * int TO_BE_USER_CONTACT_ID = 2; + * int TO_BE_USER_CELLPHONE_NUMBER = 3; + * int TO_BE_USER_USERNAME = 4; + */ + /** + * "create thread" + * This is Invitee object + * ---->private int id; + * ---->private int idType; + */ + @Test + @MediumTest + public void createThread() { + //alexi 570 + //felfeli 571 + sleep(5000); + Invitee[] invite = new Invitee[]{new Invitee("566", 2)}; + presenter.createThread(0, invite, "yes", "first description", null, null, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onCreateThread(); + } + + @Test + @MediumTest + public void muteThread() { + sleep(5000); + presenter.muteThread(381, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onMuteThread(); + } + + @Test + @MediumTest + public void unMuteThread() { + sleep(5000); + presenter.unMuteThread(352, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUnMuteThread(); + } + + @Test + @MediumTest + public void replyMessage() { + sleep(5000); + + presenter.replyMessage("this is reply to all of you at" + new Date().getTime() + , 381, 14103, null, null); + sleep(3000); +// Mockito.verify(view, Mockito.times(1)). + } + + //fifi is the admin of groupId = 632 + @Test + @MediumTest + public void renameThread() { + sleep(3000); + presenter.renameThread(9162, "5 گروه خودمونی ما", null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onRenameGroupThread(); + } + + @Test + @MediumTest + public void addContact() { + sleep(5000); + presenter.addContact("maman", "sadeghi", "091224858169", "dev55@gmail.com", ""); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onAddContact(); +// Mockito.verify(view,Mockit.) + + } + + // fifiUser + @Test + @MediumTest + public void updateContact() { + sleep(3000); + presenter.updateContact(861, "masoud", "rahimi2", "09122488169" + , "dev@gmail.com"); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUpdateContact(); + } + + @Test + @MediumTest + public void removeContact() { + sleep(3000); + presenter.removeContact(861); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onRemoveContact(); + } + + @Test + @MediumTest + public void uploadFile() { + sleep(3000); + Uri uri = Uri.parse("content://com.android.providers.downloads.documents/document/230"); + String fileUri = "/storage/emulated/0/Download/Manager.v6.31.Build.3.Crack.Only_pd.zip"; + presenter.uploadFile(activity, uri); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUploadFile(); + } + + @Test + @MediumTest + public void UploadImageFile() { + sleep(3000); + Uri uri = Uri.parse("content://media/external/images/media/781"); + presenter.uploadImage(activity, uri); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUploadImageFile(); + } + + @Test + @MediumTest + public void uploadProgressImage() { + sleep(3000); + Uri uri = Uri.parse("content://media/external/images/media/781"); + presenter.uploadImageProgress(appContext, activity, uri, new ProgressHandler.onProgress() { + @Override + public void onProgressUpdate(int progress) { + Mockito.anyInt(); + } + + @Override + public void onFinish(String imageJson, ChatResponse chatResponse) { + + } + + @Override + public void onError(String jsonError, ErrorOutPut error) { + + } + }); + } + + @Test + @MediumTest + public void spam() { + sleep(3000); + presenter.spam(0L); + + } + + @Test + @MediumTest + public void syncContact() { + sleep(3000); + presenter.syncContact(activity); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onAddContact(); + } + + @Test + @MediumTest + public void AddParticipant() { +// sleep(5000); +// List participantIds = new ArrayList<>(); +// participantIds.add(824L); +// participantIds.add(577L); +// +// sleep(5000); +// Mockito.verify(view, Mockito.times(1)).onAddParticipant(); + } + + @Test + @MediumTest + public void removeParticipant() { + sleep(5000); + List contactIds = new ArrayList<>(); + contactIds.add(123L); + contactIds.add(121L); + presenter.removeParticipants(691, contactIds, null); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onRemoveParticipant(); + } + + @Test + @MediumTest + public void leaveThread() { + sleep(5000); + presenter.leaveThread(657, null); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onLeaveThread(); + } + + @Test + @MediumTest + public void deleteMessage() { + sleep(5000); + + + ArrayList messageIds = new ArrayList<>(); + messageIds.add(14380L); + + presenter.deleteMessage(messageIds, 0L, true, null); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onDeleteMessage(); + } + + //getConversationVO possibility test + + @Test + @MediumTest + public void searchInThreads() { + sleep(3000); +// presenter.getThreads(20, 0L, null, "FiFi", null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)); + } + + @Test + @MediumTest + public void getThreadWithIds() { + + } + + @Test + @MediumTest + public void getThreadWithName() { + + } + + @Test + @MediumTest + public void getThreadWithPartnerCoreUserId() { + + } + + @Test + @MediumTest + public void getThreadWithCreatorCoreUserId() { + + } + + @Test + @MediumTest + public void getThreadWithPartnerCoreContactId() { + + } + + + @Test + @MediumTest + public void block() { + sleep(3000); +// presenter.block(575L, null); + + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onBlock(); + } + + @Test + @MediumTest + public void unBlock() { + sleep(3000); +// presenter.unBlock(62L, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUnblock(); + } + + @Test + @MediumTest + public void searchContact() { + + sleep(3000); + RequestSearchContact requestSearchContact = new RequestSearchContact.Builder("0", "2").id("1063").build(); + presenter.searchContact(requestSearchContact); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onSearchContact(); + } + + @Test + @MediumTest + public void searchHistory() { + + } + + @Test + @MediumTest + public void getBlockList() { + sleep(3000); + presenter.getBlockList(null, null, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).ongetBlockList(); + } + + @Test + @MediumTest + public void routingMap() { + sleep(3000); + presenter.mapRouting("35.7003510,51.3376472", "35.7343510,50.3376472"); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onMapRouting(); + } + + @Test + @MediumTest + public void searchMap() { + sleep(3000); + presenter.mapSearch("میدان آزادی", 35.7003510, 51.3376472); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onMapSearch(); + } +} diff --git a/app/src/androidTest/java/com/example/podchat/ChatTestSandbox.java b/app/src/androidTest/java/com/example/podchat/ChatTestSandbox.java new file mode 100644 index 00000000..52e9e979 --- /dev/null +++ b/app/src/androidTest/java/com/example/podchat/ChatTestSandbox.java @@ -0,0 +1,1392 @@ +package com.example.podchat; + +import android.app.Activity; +import android.content.Context; +import android.net.Uri; +import android.os.Looper; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.FlakyTest; +import android.support.test.filters.LargeTest; +import android.support.test.filters.MediumTest; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; + +import com.example.chat.application.chatexample.BaseApplication; +import com.example.chat.application.chatexample.ChatActivity; +import com.example.chat.application.chatexample.ChatContract; +import com.example.chat.application.chatexample.ChatPresenter; +import com.fanap.podchat.ProgressHandler; +import com.fanap.podchat.chat.Chat; +import com.fanap.podchat.chat.ChatAdapter; +import com.fanap.podchat.chat.ChatListener; +import com.fanap.podchat.chat.RoleType; +import com.fanap.podchat.chat.assistant.model.AssistantVo; +import com.fanap.podchat.chat.assistant.request_model.DeActiveAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.RegisterAssistantRequest; +import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; +import com.fanap.podchat.chat.user.profile.RequestUpdateProfile; +import com.fanap.podchat.chat.user.profile.ResultUpdateProfile; +import com.fanap.podchat.example.R; +import com.fanap.podchat.mainmodel.Contact; +import com.fanap.podchat.mainmodel.History; +import com.fanap.podchat.mainmodel.Invitee; +import com.fanap.podchat.mainmodel.MessageVO; +import com.fanap.podchat.mainmodel.RequestSearchContact; +import com.fanap.podchat.mainmodel.Thread; +import com.fanap.podchat.model.ChatResponse; +import com.fanap.podchat.model.ErrorOutPut; +import com.fanap.podchat.model.ResultHistory; +import com.fanap.podchat.model.ResultImageFile; +import com.fanap.podchat.model.ResultMessage; +import com.fanap.podchat.model.ResultThreads; +import com.fanap.podchat.requestobject.RequestConnect; +import com.fanap.podchat.requestobject.RequestGetHistory; +import com.fanap.podchat.requestobject.RequestGetUserRoles; +import com.fanap.podchat.requestobject.RequestMessage; +import com.fanap.podchat.requestobject.RequestSignalMsg; +import com.fanap.podchat.requestobject.RequestThread; +import com.fanap.podchat.util.ChatMessageType; +import com.fanap.podchat.util.InviteType; +import com.orhanobut.logger.Logger; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + +import static com.example.chat.application.chatexample.ChatActivity.APP_ID; +import static com.fanap.podchat.util.ChatStateType.ChatSateConstant.CHAT_READY; + + +@RunWith(AndroidJUnit4.class) +public class ChatTestSandbox extends ChatAdapter { + + private static ChatContract.presenter presenter; + @Mock + private static ChatContract.view view; + + + @Mock + private Activity activity; + private static Context appContext; + + private static String appId = "POD-Chat"; + + private static String NAME = BaseApplication.getInstance().getString(R.string.sandbox_server_name); + private static String socketAddress = BaseApplication.getInstance().getString(R.string.sandbox_socketAddress); + private static String platformHost = BaseApplication.getInstance().getString(R.string.sandbox_platformHost); + private static String fileServer = BaseApplication.getInstance().getString(R.string.sandbox_fileServer); + + private static String TOKEN = "8eb3f9d848ff47358e0a0756034678d5"; + private static String ssoHost = BaseApplication.getInstance().getString(R.string.ssoHost); + private static String serverName = "chat-server"; + + @Mock + ChatListener chatListeners; + + private ChatActivity chatActivity; + + + static Chat chat; + + static final Object sync = new Object(); + + @Rule + public ActivityTestRule chatActivityRule = new ActivityTestRule<>(ChatActivity.class); + + + @BeforeClass + public static void initial() { + + + appContext = InstrumentationRegistry.getTargetContext(); + + chat = Chat.init(appContext); + +// chat.isCacheables(true); +// +// chat.isLoggable(true); +// chat.rawLog(true); +// chat.isSentryLogActive(true); +// chat.isSentryResponseLogActive(true); +// +// chat.setDownloadDirectory(appContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)); +// +// TimeoutConfig timeout = new TimeoutConfig() +// .newConfigBuilder() +// .withConnectTimeout(30, TimeUnit.SECONDS) +// .withWriteTimeout(30, TimeUnit.MINUTES) +// .withReadTimeout(30, TimeUnit.MINUTES) +// .build(); +// +// +// chat.setUploadTimeoutConfig(timeout); +// +// chat.setDownloadTimeoutConfig(timeout); +// +// NetworkPingSender.NetworkStateConfig build = new NetworkPingSender.NetworkStateConfig() +// .setHostName("msg.pod.ir") +// .setPort(443) +// .setDisConnectionThreshold(2) +// .setInterval(7000) +// .setConnectTimeout(10000) +// .build(); + + +// TimeoutConfig uploadConfig = new TimeoutConfig() +// .newConfigBuilder() +// .withConnectTimeout(120, TimeUnit.MINUTES) +// .withWriteTimeout(120, TimeUnit.MINUTES) +// .withReadTimeout(120, TimeUnit.MINUTES) +// .build(); +// +// TimeoutConfig downloadConfig = new TimeoutConfig() +// .newConfigBuilder() +// .withConnectTimeout(20, TimeUnit.SECONDS) +// .withWriteTimeout(0, TimeUnit.SECONDS) +// .withReadTimeout(5, TimeUnit.MINUTES) +// .build(); + +// chat.setNetworkStateConfig(build); +// +// chat.setUploadConfig(uploadConfig); +// +// chat.setDownloadConfig(downloadConfig); + + + } + + @Before + public void createChat() { + Looper.prepare(); + MockitoAnnotations.initMocks(this); + + RequestConnect rc = new RequestConnect.Builder( + socketAddress, + APP_ID, + serverName, + TOKEN, + ssoHost, + platformHost, + fileServer, + "podSpaceServer") + .build(); + + + chatListeners = new ChatListener() { + @Override + public void onChatState(String state) { + if (state.equals(CHAT_READY)) { + resumeProcess(); + } + } + }; + + chat.addListener(chatListeners); + + chat.connect(rc); + + pauseProcess(); + + + } + + @Before + public void setUp() { +// Looper.prepare(); +// appContext = InstrumentationRegistry.getTargetContext(); +// MockitoAnnotations.initMocks(this); + chatActivity = chatActivityRule.getActivity(); + presenter = new ChatPresenter(appContext, view, chatActivity); + +// RequestConnect rc = new RequestConnect.Builder( +// socketAddress, +// APP_ID, +// serverName, +// "f29512343de1472fa15d1e497e264c54", +// ssoHost, +// platformHost, +// fileServer, +// "podSpaceServer") +// .build(); + +// presenter.connect(rc); + + } + + final ArrayList threads = new ArrayList<>(); + + + @Test + public void populateThreadsListFromServerOrCache() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + resumeProcess(); + } + }; + + chat.addListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .build(); + + presenter.getThreads(requestThread, null); + + pauseProcess(); + System.out.println("Received List: " + threads.size()); + + } + + + private void resumeProcess() { + synchronized (sync) { + sync.notify(); + } + } + + private void pauseProcess() { + synchronized (sync) { + try { + sync.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + +// @After +// public void closeChat() { +// if (chat != null) { +// chat.closeChat(); +// } else if (presenter != null) { +// presenter.closeChat(); +// } +// } + + + @Test + public void chatListeners() { + + ChatListener listener1 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener1); + ChatListener listener2 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener2); + ChatListener listener3 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener3); + + chat.removeListener(listener2); + + Assert.assertFalse(chat.getListeners().contains(listener2)); + + } + + + @Test + @LargeTest + public void getUserRolesInThread() { + + populateThreadsListFromServerOrCache(); + + for (Thread t : threads) { + if (t.getAdmin()) { + System.out.println("Get roles in " + t.getId()); + getCurrentUserRoles(t.getId()); + break; + } + } + System.out.println("** Get roles in " + threads.get(0).getId()); + getCurrentUserRoles(threads.get(0).getId()); + + } + + public void getCurrentUserRoles(long threadID) { + + RequestGetUserRoles req = new RequestGetUserRoles.Builder() + .setThreadId(threadID) + .build(); + + presenter.getUserRoles(req); + + sleep(1000); + + Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); + + + } + + + @Test + @LargeTest + public void getThreadHistoryIns() { + populateThreadsListFromServerOrCache(); + System.out.println("** Get history of " + threads.get(0).getId()); + for (Thread thread : + new ArrayList<>(threads)) { + getThreadHistory(thread.getId()); + } +// getThreadHistory(threads.get(0).getId()); + } + + + public void getThreadHistory(long threadId) { + + + RequestGetHistory request = new RequestGetHistory + .Builder(threadId) + .offset(0) + .count(25) + .order("desc") //.order("asc") +// .fromTime(new Date().getTime()) + // .toTime(new Date().getTime()) +// .setMessageType(TextMessageType.Constants.POD_SPACE_PICTURE) +// .withNoCache() + .build(); + presenter.getHistory(request, null); + sleep(2000); + Mockito.verify(view, Mockito.atLeastOnce()).onGetThreadHistory(Mockito.any()); + } + + + @Test + @LargeTest + //get 25 message before and after last seen + //messages NanoTimes should be lower than last seen in first case + //and greater in second case + public void getThreadHistoryBeforeAndAfterLastSeenMessage() { + + populateThreadsListFromServerOrCache(); + System.out.println("** Get history of " + threads.get(0).getTitle()); + + Thread thread = threads.get(0); + + final long lastSeen = thread.getLastSeenMessageTime() + thread.getLastSeenMessageNanos(); + + AtomicInteger numOfCacheResp = new AtomicInteger(0); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetHistory(String content, ChatResponse history) { + int invokeTimes = 0; + if (history.isCache()) { + invokeTimes = numOfCacheResp.getAndIncrement(); + } + checkTimesIsValid(history, invokeTimes, lastSeen); + if (invokeTimes >= 2) { + resumeProcess(); + } + } + }; + chat.addListener(historyListeners); + RequestGetHistory requestGetHistoryBeforeLastSeenTime = new RequestGetHistory + .Builder(thread.getId()) + .toTimeNanos(lastSeen) + .offset(0) + .count(25) + .order("desc") + .build(); + + presenter.getHistory(requestGetHistoryBeforeLastSeenTime, null); + + RequestGetHistory requestGetHistoryAfterLastSeenTime = new RequestGetHistory + .Builder(thread.getId()) + .fromTimeNanos(lastSeen) + .offset(0) + .count(25) + .order("asc") + .build(); + presenter.getHistory(requestGetHistoryAfterLastSeenTime, null); + + pauseProcess(); + sleep(2000); + Mockito.verify(view, Mockito.atLeast(2)).onGetThreadHistory(Mockito.any()); + + } + + + @Test + @LargeTest + //get threads histories one by one + //performance should be acceptable + public void getAllThreadsHistories() { + populateThreadsListFromServerOrCache(); + long startTime = System.currentTimeMillis(); + for (Thread thread : + new ArrayList<>(threads)) { + System.out.println("NEXT: " + thread.getTitle()); + System.out.println(thread.getId()); + getThreadFullHistory(thread); + } +// getThreadFullHistory(threads.get(0)); + long endTime = System.currentTimeMillis(); + Assert.assertTrue(true); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println("TEST IS DONE FOR "); + System.out.println(threads.size()); + System.out.println("THREADS IN"); + System.out.println(endTime - startTime + " MILLISECONDS"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + + } + + + @Test + @LargeTest + public void setHashTagTest() { + + ChatListener historyListeners = new ChatListener() { + + @Override + public void onGetHistory(String content, ChatResponse history) { + System.out.println("onGetHistory: "); + Logger.json(history.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + + @Override + public void onSent(String content, ChatResponse response) { + System.out.println("onSent: "); + Logger.json(response.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + }; + + chat.addListener(historyListeners); + + RequestMessage requestMessage = new RequestMessage + .Builder("#android fragment", 8085) + + .build(); + presenter.sendTextMessage(requestMessage, null); + pauseProcess(); + } + + @Test + @LargeTest + public void getHistoryHashtagTest() { + long startTime = System.currentTimeMillis(); + + ChatListener historyListeners = new ChatListener() { + + @Override + public void onGetHistory(String content, ChatResponse history) { + System.out.println("onGetHistory: "); + Logger.json(history.getJson()); + Assert.assertTrue(true); + resumeProcess(); + } + + + }; + chat.setListener(historyListeners); + RequestGetHistory request = new RequestGetHistory + .Builder(8085) + .offset(0) + .count(25) + .order("desc") + .build(); + + presenter.getHistory(request, null); + pauseProcess(); + + } + + @Test + @LargeTest + public void registerAssistantsTest() { + + ChatListener historyListeners = new ChatListener() { + @Override + public void onRegisterAssistant(ChatResponse> response) { + + System.out.println("onRegisterAssistant: " + response.getJson()); + Assert.assertTrue(true); + + + + } + }; + + chat.addListener(historyListeners); + + registerAssistant(); + + } + + @Test + @LargeTest + public void checkInsert(){ + + } + + @Test + @LargeTest + public void getAssistantTest() { + long startTime = System.currentTimeMillis(); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetAssistants(ChatResponse> response) { + System.out.println("onGetAssistants: " + response); + Assert.assertTrue(true); + + } + }; + + chat.addListener(historyListeners); + + getAssistants(); + + + } + + @Test + @LargeTest + public void deActiveAssistantTest() { + long startTime = System.currentTimeMillis(); + + ChatListener historyListeners = new ChatListener() { + @Override + public void onDeActiveAssistant(ChatResponse> response) { + System.out.println("onDeActiveAssistant: " + response); + Assert.assertTrue(true); + + } + }; + + chat.addListener(historyListeners); + + deActiveAssistant(); + + } + + private void getAssistants() { + GetAssistantRequest request = new GetAssistantRequest.Builder().typeCode("default").build(); + + presenter.getAssistants(request); + pauseProcess(); + } + + private void deActiveAssistant() { +// 52987 khodam +// 103187 nemati + //invite + Invitee invite = new Invitee("52987", InviteType.Constants.TO_BE_USER_CONTACT_ID); + + + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVos.add(assistantVo); + + + DeActiveAssistantRequest request = new DeActiveAssistantRequest.Builder(assistantVos).build(); + presenter.deActiveAssistant(request); + pauseProcess(); + } + + private void registerAssistant() { + //63253 kheirkhah + //63254 sajadi + ////63255 anvari + //63256 amjadi + //63257 zhiani + //invite list + +// 52987 khodam +// 103187 nemati + Invitee invite = new Invitee("52987", InviteType.Constants.TO_BE_USER_CONTACT_ID); + + //roles + ArrayList typeRoles = new ArrayList<>(); + typeRoles.add(RoleType.Constants.READ_THREAD); + typeRoles.add(RoleType.Constants.EDIT_THREAD); + typeRoles.add(RoleType.Constants.ADD_ROLE_TO_USER); + + + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVo.setContactType("default"); + assistantVo.setRoles(typeRoles); + + assistantVos.add(assistantVo); + + RegisterAssistantRequest request = new RegisterAssistantRequest.Builder(assistantVos).build(); + + presenter.registerAssistant(request); + pauseProcess(); + } + + private void getThreadFullHistory(Thread thread) { + + + long startTime = System.currentTimeMillis(); + + AtomicBoolean hasNext = new AtomicBoolean(true); + int count = 25; + int offset = 0; + AtomicLong threadMessagesCount = new AtomicLong(-1); + AtomicLong threadReceivedHistory = new AtomicLong(0); + ChatListener historyListeners = new ChatListener() { + @Override + public void onGetHistory(String content, ChatResponse history) { + + threadMessagesCount.set(history.getResult().getContentCount()); + long received = threadReceivedHistory.get(); + threadReceivedHistory.set(received + history.getResult().getHistory().size()); + hasNext.set(history.getResult().isHasNext()); + resumeProcess(); + } + }; + chat.addListener(historyListeners); + + while (hasNext.get()) { + RequestGetHistory requestGetHistory = new RequestGetHistory + .Builder(thread.getId()) + .offset(offset) + .count(count) + .order("desc") + .build(); + String uniqueId = presenter.getHistory(requestGetHistory, null); + offset = offset + count; + pauseProcess(); + } + long endTime = System.currentTimeMillis(); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println("RUNNING TEST ON THREAD:"); + System.out.println(thread.getTitle()); + System.out.println(thread.getId()); + System.out.println("RECEIVED TOTAL " + threadReceivedHistory + " MESSAGES OF HISTORY IN"); + System.out.println(endTime - startTime + " MILLISECONDS"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); + System.out.println(">>> >>> >>>"); +// Assert.assertEquals(threadMessagesCount.get(), threadReceivedHistory.get()); + + + } + + private void checkTimesIsValid(ChatResponse history, int invokeTimes, long lastSeen) { + switch (invokeTimes) { + case 1: { + for (MessageVO message : + history.getResult().getHistory()) { + Assert.assertTrue(message.getTimeNanos() <= lastSeen); + } + break; + } + case 2: { + for (MessageVO message : + history.getResult().getHistory()) { + Assert.assertTrue(message.getTimeNanos() >= lastSeen); + } + break; + } + } + } + + // @Test +// @LargeTest +// public void updateUserProfile() { +// +// +// sleep(10000); +// +// RequestUpdateProfile request = new RequestUpdateProfile +// .Builder("عیب رندان مکن ای زاهد پاکیزه سرشت") +// .build(); +// +// chat.updateChatProfile(request); +// +// sleep(1000); +// +// Mockito.verify(chatListeners, Mockito.atLeastOnce()).onChatProfileUpdated(Mockito.any()); +// +// +// Assert.assertTrue(true); +// +// +// } + @Test + @LargeTest + public void updateUserProfile() { + + + String bio = "عیب رندان مکن ای زاهد پاکیزه سرشت"; + RequestUpdateProfile request = new RequestUpdateProfile + .Builder(bio) + .build(); +// +// presenter.updateChatProfile(request); +// +// sleep(1000); + + chat.updateChatProfile(request); + + sleep(500); + + ChatResponse response = new ChatResponse<>(); + ResultUpdateProfile result = new ResultUpdateProfile(); + result.setBio(bio); + response.setResult(result); + + Mockito.verify(view, Mockito.atLeastOnce()).onChatProfileUpdated(Mockito.any()); + + } + + @Test + @LargeTest + public void getUserInfo() { + + presenter.getUserInfo(null); + + sleep(500); + Mockito.verify(view, Mockito.atMost(3)).onGetUserInfo(Mockito.any()); + + + } + + + @Test + public void getRoutsSize() { + + long totalSize = presenter.getStorageSize(); + + System.out.println(totalSize); + + long imagesSize = presenter.getImageFolderSize(); + + System.out.println(imagesSize); + + long filesSize = presenter.getFilesFolderSize(); + + System.out.println(filesSize); + + boolean imagesClear = presenter.clearPictures(); + + System.out.println(imagesClear); + + boolean clearFiles = presenter.clearFiles(); + + System.out.println(clearFiles); + + Assert.assertEquals(0, presenter.getFilesFolderSize()); + + Assert.assertEquals(0, presenter.getImageFolderSize()); + + + } + + + @Test + public void clearDataBase() { + + sleep(500); + + presenter.getCacheSize(); + + sleep(500); + + presenter.clearDatabaseCache(new Chat.IClearMessageCache() { + @Override + public void onCacheDatabaseCleared() { + + } + + @Override + public void onExceptionOccurred(String cause) { + + } + }); + + sleep(500); + + presenter.getCacheSize(); + + } + + + @Test + public void getDatabaseSize() { + + sleep(10000); + + presenter.getCacheSize(); + + } + + @Test + @LargeTest + public void getCurrentUserRoles() { + + RequestGetUserRoles req = new RequestGetUserRoles.Builder() + .setThreadId(5801) + .build(); + + chat.getCurrentUserRoles(req); + + sleep(1000); + +// Mockito.verify(view, Mockito.atLeastOnce()).onGetCurrentUserRoles(Mockito.any()); + Mockito.verify(chatListeners, Mockito.atLeastOnce()).onError(Mockito.any(), Mockito.any()); + + + } + + + @Test + @FlakyTest + public void startTyping() { + + sleep(7000); + + RequestSignalMsg req = new RequestSignalMsg.Builder() + .signalType(ChatMessageType.SignalMsg.IS_TYPING) + .threadId(6630) + .build(); + + presenter.startTyping(req); + + } + + + @Test + @MediumTest + public void pinMessage() { + + RequestPinMessage requestPinMessage = new RequestPinMessage.Builder() + .setMessageId(76306) + .setNotifyAll(true) + .build(); + + presenter.pinMessage(requestPinMessage); + sleep(1000); + + + Mockito.verify(view, Mockito.times(1)).onPinMessage(Mockito.any()); + + + } + + @Test + @MediumTest + public void unpinMessage() { + + sleep(25000); + + RequestPinMessage requestPinMessage = new RequestPinMessage.Builder() + .setMessageId(76306) + .build(); + + presenter.unPinMessage(requestPinMessage); + sleep(1000); + + + Mockito.verify(view, Mockito.times(1)).onUnPinMessage(Mockito.any()); + + + } + + private void sleep(int i) { + try { + java.lang.Thread.sleep(i); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + + @Override + public void onGetThread(String content, ChatResponse thread) { + super.onGetThread(content, thread); + + } + + @Test + @MediumTest + public void createThreadWithMetaData() { + sleep(7000); + + + Invitee[] invite = new Invitee[]{new Invitee("589", 2) + , new Invitee("1162", 2) + , new Invitee("2404", 2) +// , new Invitee(824, 2) + }; + Contact contac = new Contact(); + contac.setLastName("mamadi"); + +// String metaData = +// JsonUtil.getJson(contac); +// presenter.createThread(0,invite,null,null,null,metaData,null); + + } + + @Test + @MediumTest + public void getThreadList() { + sleep(7000); +// presenter.getThreads(10, null, null, null, null); + sleep(7000); + view = new ChatContract.view() { + @Override + public void onGetThreadList(String content, ChatResponse thread) { + Assert.assertNotNull(thread); + } + }; + Mockito.verify(view, Mockito.times(1)); + } + + // long creatorCoreUserId + @Test + @MediumTest + public void threadWithCreatorCoreUserId() { + sleep(7000); + ArrayList threadIds = new ArrayList<>(); +// threadIds.add(1105); +// threadIds.add(1031); + long count = 5; + long offset; + long creatorCoreUserId = 2; + presenter.getThreads(null, null, null, null, creatorCoreUserId + , 0, 0, null); + sleep(7000); + Mockito.verify(view, Mockito.times(1)); + } + + //long partnerCoreUserId + @Test + @MediumTest + public void threadWithPartnerCoreUserId() { + + } + + //long partnerCoreContactId + @Test + @MediumTest + public void threadWithPartnerCoreContactId() { + + } + + //Get History + @Test + @MediumTest + public void getThreadHistory() { + sleep(3000); + History history = new History.Builder().count(5).build(); + presenter.getHistory(history, 381, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetThreadHistory(Mockito.any()); + } + + + @Test + @MediumTest + public void getContacts() { + sleep(3000); + presenter.getContact(50, 0L, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetContacts(Mockito.any()); + } + + @Test + @MediumTest + public void getThreadParticipant() { + sleep(3000); + presenter.getThreadParticipant(10, 0L, 352, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetThreadParticipant(); + } + + @Test + @MediumTest + public void sendTestMessageOnSent() { + presenter.sendTextMessage("this is test", 381, 5, null, null); + view.onSentMessage(); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onSentMessage(); + } + + @Test + @MediumTest + public void sendTestMessageOnDeliver() { + sleep(5000); + presenter.sendTextMessage("this is test", 381, null, null, null); + view.onSentMessage(); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onGetDeliverMessage(); + } + + @Test + @LargeTest + public void sendTestMessageOnSeen() { + sleep(3000); + presenter.sendTextMessage("this is test", 381, null, "name", null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onGetSeenMessage(); + } + + + @Test + @MediumTest + public void editMessage() { + view.onSentMessage(); + sleep(5000); + presenter.sendTextMessage("this is test", 381, 2, "", null); + Mockito.verify(view, Mockito.times(1)).onSentMessage(); + sleep(3000); + presenter.editMessage(1350, "salam this is edite" + new Date().getTime() + "by" + NAME, "", null); + Mockito.verify(view, Mockito.times(1)).onEditMessage(); + } + + /** + * int TO_BE_USER_SSO_ID = 1; + * int TO_BE_USER_CONTACT_ID = 2; + * int TO_BE_USER_CELLPHONE_NUMBER = 3; + * int TO_BE_USER_USERNAME = 4; + */ + /** + * "create thread" + * This is Invitee object + * ---->private int id; + * ---->private int idType; + */ + @Test + @MediumTest + public void createThread() { + //alexi 570 + //felfeli 571 + sleep(5000); + Invitee[] invite = new Invitee[]{new Invitee("566", 2)}; + presenter.createThread(0, invite, "yes", "first description", null, null, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onCreateThread(); + } + + @Test + @MediumTest + public void muteThread() { + sleep(5000); + presenter.muteThread(381, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onMuteThread(); + } + + @Test + @MediumTest + public void unMuteThread() { + sleep(5000); + presenter.unMuteThread(352, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUnMuteThread(); + } + + @Test + @MediumTest + public void replyMessage() { + sleep(5000); + + presenter.replyMessage("this is reply to all of you at" + new Date().getTime() + , 381, 14103, null, null); + sleep(3000); +// Mockito.verify(view, Mockito.times(1)). + } + + //fifi is the admin of groupId = 632 + @Test + @MediumTest + public void renameThread() { + sleep(3000); + presenter.renameThread(9162, "5 گروه خودمونی ما", null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onRenameGroupThread(); + } + + @Test + @MediumTest + public void addContact() { + sleep(5000); + presenter.addContact("maman", "sadeghi", "091224858169", "dev55@gmail.com", ""); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onAddContact(); +// Mockito.verify(view,Mockit.) + + } + + // fifiUser + @Test + @MediumTest + public void updateContact() { + sleep(3000); + presenter.updateContact(861, "masoud", "rahimi2", "09122488169" + , "dev@gmail.com"); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUpdateContact(); + } + + @Test + @MediumTest + public void removeContact() { + sleep(3000); + presenter.removeContact(861); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onRemoveContact(); + } + + @Test + @MediumTest + public void uploadFile() { + sleep(3000); + Uri uri = Uri.parse("content://com.android.providers.downloads.documents/document/230"); + String fileUri = "/storage/emulated/0/Download/Manager.v6.31.Build.3.Crack.Only_pd.zip"; + presenter.uploadFile(activity, uri); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUploadFile(); + } + + @Test + @MediumTest + public void UploadImageFile() { + sleep(3000); + Uri uri = Uri.parse("content://media/external/images/media/781"); + presenter.uploadImage(activity, uri); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUploadImageFile(); + } + + @Test + @MediumTest + public void uploadProgressImage() { + sleep(3000); + Uri uri = Uri.parse("content://media/external/images/media/781"); + presenter.uploadImageProgress(appContext, activity, uri, new ProgressHandler.onProgress() { + @Override + public void onProgressUpdate(int progress) { + Mockito.anyInt(); + } + + @Override + public void onFinish(String imageJson, ChatResponse chatResponse) { + + } + + @Override + public void onError(String jsonError, ErrorOutPut error) { + + } + }); + } + + @Test + @MediumTest + public void spam() { + sleep(3000); + presenter.spam(0L); + + } + + @Test + @MediumTest + public void syncContact() { + sleep(3000); + presenter.syncContact(activity); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onAddContact(); + } + + @Test + @MediumTest + public void AddParticipant() { +// sleep(5000); +// List participantIds = new ArrayList<>(); +// participantIds.add(824L); +// participantIds.add(577L); +// +// sleep(5000); +// Mockito.verify(view, Mockito.times(1)).onAddParticipant(); + } + + @Test + @MediumTest + public void removeParticipant() { + sleep(5000); + List contactIds = new ArrayList<>(); + contactIds.add(123L); + contactIds.add(121L); + presenter.removeParticipants(691, contactIds, null); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onRemoveParticipant(); + } + + @Test + @MediumTest + public void leaveThread() { + sleep(5000); + presenter.leaveThread(657, null); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onLeaveThread(); + } + + @Test + @MediumTest + public void deleteMessage() { + sleep(5000); + + + ArrayList messageIds = new ArrayList<>(); + messageIds.add(14380L); + + presenter.deleteMessage(messageIds, 0L, true, null); + sleep(5000); + Mockito.verify(view, Mockito.times(1)).onDeleteMessage(); + } + + //getConversationVO possibility test + + @Test + @MediumTest + public void searchInThreads() { + sleep(3000); +// presenter.getThreads(20, 0L, null, "FiFi", null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)); + } + + @Test + @MediumTest + public void getThreadWithIds() { + + } + + @Test + @MediumTest + public void getThreadWithName() { + + } + + @Test + @MediumTest + public void getThreadWithPartnerCoreUserId() { + + } + + @Test + @MediumTest + public void getThreadWithCreatorCoreUserId() { + + } + + @Test + @MediumTest + public void getThreadWithPartnerCoreContactId() { + + } + + + @Test + @MediumTest + public void block() { + sleep(3000); +// presenter.block(575L, null); + + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onBlock(); + } + + @Test + @MediumTest + public void unBlock() { + sleep(3000); +// presenter.unBlock(62L, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onUnblock(); + } + + @Test + @MediumTest + public void searchContact() { + + sleep(3000); + RequestSearchContact requestSearchContact = new RequestSearchContact.Builder("0", "2").id("1063").build(); + presenter.searchContact(requestSearchContact); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onSearchContact(); + } + + @Test + @MediumTest + public void searchHistory() { + + } + + @Test + @MediumTest + public void getBlockList() { + sleep(3000); + presenter.getBlockList(null, null, null); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).ongetBlockList(); + } + + @Test + @MediumTest + public void routingMap() { + sleep(3000); + presenter.mapRouting("35.7003510,51.3376472", "35.7343510,50.3376472"); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onMapRouting(); + } + + @Test + @MediumTest + public void searchMap() { + sleep(3000); + presenter.mapSearch("میدان آزادی", 35.7003510, 51.3376472); + sleep(3000); + Mockito.verify(view, Mockito.times(1)).onMapSearch(); + } +} diff --git a/app/src/androidTest/java/com/example/podchat/LocalChatTest.java b/app/src/androidTest/java/com/example/podchat/LocalChatTest.java index fd66c61c..3c05ec0d 100644 --- a/app/src/androidTest/java/com/example/podchat/LocalChatTest.java +++ b/app/src/androidTest/java/com/example/podchat/LocalChatTest.java @@ -7,9 +7,9 @@ import android.support.test.filters.MediumTest; import android.support.test.runner.AndroidJUnit4; +import com.example.chat.application.chatexample.ChatActivity; import com.example.chat.application.chatexample.ChatContract; import com.example.chat.application.chatexample.ChatPresenter; -import com.example.chat.application.chatexample.ChatSandBoxActivity; import com.fanap.podchat.mainmodel.History; import org.junit.Before; @@ -58,7 +58,7 @@ public class LocalChatTest { private static String TYPE_CODE = ""; - private ChatSandBoxActivity activy; + private ChatActivity activy; @Before public void setUp() { @@ -91,6 +91,6 @@ public void getHistoryFromTime() { e.printStackTrace(); } - Mockito.verify(view, Mockito.times(1)).onGetThreadHistory(); + Mockito.verify(view, Mockito.times(1)).onGetThreadHistory(Mockito.any()); } } diff --git a/app/src/androidTest/java/com/example/podchat/RetrofitApiTest.java b/app/src/androidTest/java/com/example/podchat/RetrofitApiTest.java deleted file mode 100644 index 2cfb5f06..00000000 --- a/app/src/androidTest/java/com/example/podchat/RetrofitApiTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.podchat; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Before; -import org.junit.runner.RunWith; - -import okhttp3.mockwebserver.MockWebServer; - -@RunWith(AndroidJUnit4.class) -public class RetrofitApiTest { - - private MockWebServer mockWebServer; - private Context appContext; - - - @Before - public void setUp() throws Exception { - appContext = InstrumentationRegistry.getContext(); - mockWebServer = new MockWebServer(); - mockWebServer.start(); - -// injectInstrumentation(InstrumentationRegistry.getInstrumentation()); - - } -} diff --git a/app/src/androidTest/java/com/example/podchat/SearchMetadataTest.java b/app/src/androidTest/java/com/example/podchat/SearchMetadataTest.java new file mode 100644 index 00000000..d560d52b --- /dev/null +++ b/app/src/androidTest/java/com/example/podchat/SearchMetadataTest.java @@ -0,0 +1,839 @@ +package com.example.podchat; + +import static com.example.chat.application.chatexample.ChatActivity.APP_ID; +import static com.fanap.podchat.util.ChatStateType.ChatSateConstant.CHAT_READY; + +import android.app.Activity; +import android.content.Context; +import android.os.Looper; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.LargeTest; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; + +import com.example.chat.application.chatexample.BaseApplication; +import com.example.chat.application.chatexample.ChatActivity; +import com.example.chat.application.chatexample.ChatContract; +import com.example.chat.application.chatexample.ChatPresenter; +import com.fanap.podchat.chat.App; +import com.fanap.podchat.chat.Chat; +import com.fanap.podchat.chat.ChatListener; +import com.fanap.podchat.example.R; +import com.fanap.podchat.chat.messge.SearchSystemMetadataRequest; +import com.fanap.podchat.mainmodel.NosqlSearchMetadataCriteria; +import com.fanap.podchat.mainmodel.Thread; +import com.fanap.podchat.model.ChatResponse; +import com.fanap.podchat.model.ResultHistory; +import com.fanap.podchat.model.ResultMessage; +import com.fanap.podchat.model.ResultNewMessage; +import com.fanap.podchat.model.ResultThreads; +import com.fanap.podchat.requestobject.RequestConnect; +import com.fanap.podchat.requestobject.RequestMessage; +import com.fanap.podchat.requestobject.RequestThread; +import com.fanap.podchat.util.TextMessageType; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; + + +@RunWith(AndroidJUnit4.class) +public class SearchMetadataTest { + + public static final boolean CACHE = true; + private static ChatContract.presenter presenter; + @Mock + private static ChatContract.view view; + + + @Mock + private Activity activity; + private static Context appContext; + + private static String serverName = "chat-server"; + private static String appId = "POD-Chat"; + private static String ssoHost = BaseApplication.getInstance().getString(R.string.ssoHost); + private static String NAME = BaseApplication.getInstance().getString(R.string.sandbox_server_name); + private static String socketAddress = BaseApplication.getInstance().getString(R.string.sandbox_socketAddress); + private static String platformHost = BaseApplication.getInstance().getString(R.string.sandbox_platformHost); + private static String fileServer = BaseApplication.getInstance().getString(R.string.sandbox_fileServer); + private static String TOKEN = "cf06e0e5cc3f41fba837f4d05b9a4138"; + + + @Mock + ChatListener chatListeners; + + private ChatActivity chatActivity; + + + static Chat chat; + + static final Object sync = new Object(); + + @Rule + public ActivityTestRule chatActivityRule = new ActivityTestRule<>(ChatActivity.class); + + + @BeforeClass + public static void initial() { + + + appContext = InstrumentationRegistry.getTargetContext(); + + chat = Chat.init(appContext); + + } + + @Before + public void createChat() { + Looper.prepare(); + + view = Mockito.mock(ChatContract.view.class); + + chatActivity = chatActivityRule.getActivity(); + presenter = new ChatPresenter(appContext, view, chatActivity); + + RequestConnect rc = new RequestConnect.Builder( + socketAddress, + APP_ID, + serverName, + TOKEN, + ssoHost, + platformHost, + fileServer, + "podSpaceServer") + .build(); + + + chatListeners = new ChatListener() { + @Override + public void onChatState(String state) { + if (state.equals(CHAT_READY)) { + resumeProcess(); + } + } + }; + + chat.addListener(chatListeners); + + chat.connect(rc); + + chat.isCacheables(CACHE); + + pauseProcess(); + + + } + + + final ArrayList threads = new ArrayList<>(); + + //requests for list of threads + @Test + public void populateThreadsListFromServerOrCache() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + } + }; + + chat.addListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .build(); + + presenter.getThreads(requestThread, null); + + long t1 = System.currentTimeMillis(); + Mockito.verify(view, Mockito.after(10000).atLeastOnce()).onGetThreadList(Mockito.any(), Mockito.any()); + long t2 = System.currentTimeMillis(); + System.out.println("Received List: " + threads.size() + " after: " + (t2 - t1) + " ms"); + + } + + //requests for list of threads from server + @Test + public void populateThreadsListFromServerOnly() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + if (!thread.isCache()) { + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + resumeProcess(); + } + + } + }; + + chat.setListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .withNoCache() + .build(); + + presenter.getThreads(requestThread, null); + + pauseProcess(); + System.out.println("Received List: " + threads.size()); + + } + + //requests for list of threads from cache + @Test + public void populateThreadsListFromCacheOnly() { + + + chatListeners = new ChatListener() { + @Override + public void onGetThread(String content, ChatResponse thread) { + + if (thread.isCache()) { + System.out.println("Received List: " + content); + threads.addAll(thread.getResult().getThreads()); + resumeProcess(); + } + + } + }; + + chat.addListener(chatListeners); + + RequestThread requestThread = + new RequestThread.Builder() + .count(25) + .build(); + + presenter.getThreads(requestThread, null); + + pauseProcess(); + System.out.println("Received List: " + threads.size()); + + } + + @Test + public void chatListeners() { + + ChatListener listener1 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener1); + ChatListener listener2 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener2); + ChatListener listener3 = new ChatListener() { + @Override + public void onSent(String content, ChatResponse response) { + + } + }; + chat.addListener(listener3); + + chat.removeListener(listener2); + + Assert.assertFalse(chat.getListeners().contains(listener2)); + + } + + public static class DummyMetadataVO { + Integer count = 1; + String desc = "type"; + } + + @Test + @LargeTest + public void sendMessageWithMetadataTest() { + + populateThreadsListFromServerOnly(); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + dummyMetadataVO.count = new Random().nextInt(); + dummyMetadataVO.desc = dummyMetadataVO.desc + "" + dummyMetadataVO.count; + String meta = App.getGson().toJson(dummyMetadataVO); + + RequestMessage request = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta) + .build(); + + chat.sendTextMessage(request, null); + + sleep(2000); + + for (int i = 0; i < 16; i++) { + dummyMetadataVO.count++; + dummyMetadataVO.desc = String.format("%s%d", dummyMetadataVO.desc, dummyMetadataVO.count); + String meta2 = App.getGson().toJson(dummyMetadataVO); + + request = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta2) + .build(); + + chat.sendTextMessage(request, null); + + sleep(6000); + } + + Mockito.verify(mTestListener, Mockito.after(2000).atLeastOnce()).onNewMessage(Mockito.any(), + Mockito.argThat((ChatResponse resp) -> resp.getResult().getMessageVO().getSystemMetadata().equals(meta))); + + Mockito.verify(mTestListener, Mockito.after(2000).atLeastOnce()).onNewMessage(Mockito.any(), + Mockito.argThat((ChatResponse resp) -> !resp.getResult().getMessageVO().getSystemMetadata().equals("I'm something else!"))); + + } + + + @Test + @LargeTest + public void searchHistoryWithMetadata_LT_Test() { + + populateThreadsListFromServerOnly(); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("count") + .lte("4") + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> resp.getResult().getHistory().size() > 0)); + } + + + @Test + @LargeTest + public void searchHistoryWithMetadata_GT_Test() { + + populateThreadsListFromServerOnly(); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + dummyMetadataVO.desc = "GT test"; + dummyMetadataVO.count = 12; + String meta = App.getGson().toJson(dummyMetadataVO); + + RequestMessage sendMessageWithMetadataRequest = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta) + .build(); + + chat.sendTextMessage(sendMessageWithMetadataRequest, null); + + sleep(6000); + + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("count") + .gte("12") + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), Mockito.argThat((ChatResponse resp) -> resp.getResult().getHistory().size() > 0)); + + } + + + @Test + @LargeTest + public void searchHistoryWithMetadata_Has_Test() { + + populateThreadsListFromServerOnly(); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + dummyMetadataVO.desc = "Find me before " + System.currentTimeMillis() + (1_000_000 * 6); + String meta = App.getGson().toJson(dummyMetadataVO); + + RequestMessage sendMessageWithMetadataRequest = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta) + .build(); + + chat.sendTextMessage(sendMessageWithMetadataRequest, null); + + sleep(6000); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("desc") + .has(" me ") + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> + resp.getResult().getHistory().stream().anyMatch( + messageVO -> messageVO.getSystemMetadata().contains(dummyMetadataVO.desc)))); + + } + + + @Test + @LargeTest + public void searchHistoryWithMetadata_Is_StringTest() { + + populateThreadsListFromServerOnly(); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + + dummyMetadataVO.desc = "This is me!"; +// dummyMetadataVO.desc = UUID.randomUUID().toString(); + + String meta = App.getGson().toJson(dummyMetadataVO); + + RequestMessage sendMessageWithMetadataRequest = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta) + .build(); + + chat.sendTextMessage(sendMessageWithMetadataRequest, null); + + sleep(6000); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("desc") + .is(dummyMetadataVO.desc) + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> + resp.getResult().getHistory().stream().anyMatch( + messageVO -> messageVO.getSystemMetadata().equals(meta)))); + + } + + + @Test + @LargeTest + public void searchHistoryWithMetadata_Is_NumberTest() { + + populateThreadsListFromServerOnly(); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + + dummyMetadataVO.desc = "876"; + + String meta = App.getGson().toJson(dummyMetadataVO); + + RequestMessage sendMessageWithMetadataRequest = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta) + .build(); + + chat.sendTextMessage(sendMessageWithMetadataRequest, null); + + sleep(6000); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("desc") + .is(dummyMetadataVO.desc) + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> + resp.getResult().getHistory().stream().anyMatch( + messageVO -> messageVO.getSystemMetadata().equals(meta)))); + + } + + @Test + @LargeTest + public void searchHistoryWithMetadata_AND_Test() { + + populateThreadsListFromServerOnly(); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + dummyMetadataVO.count = 1001; +// String meta = App.getGson().toJson(dummyMetadataVO); +// +// RequestMessage sendMessageWithMetadataRequest = +// new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) +// .messageType(TextMessageType.Constants.TEXT) +// .jsonMetaData(meta) +// .build(); +// +// chat.sendTextMessage(sendMessageWithMetadataRequest, null); +// +// sleep(6000); +// +// dummyMetadataVO.count = 1002; +// meta = App.getGson().toJson(dummyMetadataVO); +// +// sendMessageWithMetadataRequest.setJsonMetaData(meta); +// chat.sendTextMessage(sendMessageWithMetadataRequest, null); +// +// sleep(6000); + + +// NosqlSearchMetadataCriteria +// metadataCriteriaLB = +// new NosqlSearchMetadataCriteria.Builder("count") +// .gt("1000") +// .build(); + + NosqlSearchMetadataCriteria + metadataCriteriaUB = + new NosqlSearchMetadataCriteria.Builder("count") + .lte("1002") + .build(); + + List criteriaList = new ArrayList<>(); + +// criteriaList.add(metadataCriteriaLB); + criteriaList.add(metadataCriteriaUB); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("count") + .gt("1000") + .and(criteriaList) + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> + resp.getResult().getHistory().stream().anyMatch( + messageVO -> messageVO.getSystemMetadata().contains(String.valueOf(dummyMetadataVO.count))))); + + } + + + @Test + @LargeTest + public void searchHistoryWithMetadata_OR_Test() { + + populateThreadsListFromServerOnly(); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + int random1 = Math.abs(new Random().nextInt()); + dummyMetadataVO.count = random1; + String meta = App.getGson().toJson(dummyMetadataVO); + + RequestMessage sendMessageWithMetadataRequest = + new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT) + .jsonMetaData(meta) + .build(); + + chat.sendTextMessage(sendMessageWithMetadataRequest, null); + + sleep(6000); + + int random2 = Math.abs(new Random().nextInt()); + dummyMetadataVO.count = random2; + meta = App.getGson().toJson(dummyMetadataVO); + + sendMessageWithMetadataRequest.setJsonMetaData(meta); + chat.sendTextMessage(sendMessageWithMetadataRequest, null); + + sleep(6000); + + +// NosqlSearchMetadataCriteria +// metadataCriteriaLB = +// new NosqlSearchMetadataCriteria.Builder("count") +// .is(String.valueOf(random1)) +// .build(); + + NosqlSearchMetadataCriteria + metadataCriteriaUB = + new NosqlSearchMetadataCriteria.Builder("count") + .is(String.valueOf(random2)) + .build(); + + List criteriaList = new ArrayList<>(); + +// criteriaList.add(metadataCriteriaLB); + criteriaList.add(metadataCriteriaUB); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("count") + .is(String.valueOf(random1)) + .or(criteriaList) + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> + resp.getResult().getHistory().stream().anyMatch( + messageVO -> messageVO.getSystemMetadata().contains(String.valueOf(dummyMetadataVO.count))))); + + } + + @Test + @LargeTest + public void searchHistoryWithMetadata_NOT_Test() { + + populateThreadsListFromServerOnly(); + + ChatListener mTestListener = Mockito.mock(ChatListener.class); + + chat.setListener(mTestListener); + + + assert threads.size() > 0; + + Thread thread = threads.get(0); + + DummyMetadataVO dummyMetadataVO = new DummyMetadataVO(); + RequestMessage.Builder sendMessageWithMetadataRequest; + sendMessageWithMetadataRequest = new RequestMessage.Builder("Android Test " + new Date(), thread.getId()) + .messageType(TextMessageType.Constants.TEXT); + + + //Meta1 + int random1 = Math.abs(new Random().nextInt()); + dummyMetadataVO.count = random1; + String meta1 = App.getGson().toJson(dummyMetadataVO); + sendMessageWithMetadataRequest.jsonMetaData(meta1); + chat.sendTextMessage(sendMessageWithMetadataRequest.build(), null); + sleep(6000); + + + //Meta2 + int random2 = Math.abs(new Random().nextInt()); + dummyMetadataVO.count = random2; + String meta2 = App.getGson().toJson(dummyMetadataVO); + sendMessageWithMetadataRequest.jsonMetaData(meta2); + chat.sendTextMessage(sendMessageWithMetadataRequest.build(), null); + sleep(6000); + + + + NosqlSearchMetadataCriteria + metadataCriteriaUB = + new NosqlSearchMetadataCriteria.Builder("count") + .is(String.valueOf(random2)) + .build(); + + List criteriaList = new ArrayList<>(); + + criteriaList.add(metadataCriteriaUB); + + NosqlSearchMetadataCriteria + metadataCriteria = + new NosqlSearchMetadataCriteria.Builder("count") + .gte(String.valueOf(random1)) + .not(criteriaList) + .build(); + + SearchSystemMetadataRequest request = + new SearchSystemMetadataRequest.Builder(thread.getId()) + .metadataCriteria(metadataCriteria) + .count(50) + .build(); + + chat.searchHistory(request, null); + + + Mockito.verify(mTestListener, Mockito.after(5000).atLeastOnce()) + .onGetHistory(Mockito.any(String.class), + Mockito.argThat((ChatResponse resp) -> + resp.getResult().getHistory().stream().noneMatch( + messageVO -> messageVO.getSystemMetadata().contains(meta2)))); + + } + + + + private void resumeProcess() { + synchronized (sync) { + sync.notify(); + } + } + + private void pauseProcess() { + synchronized (sync) { + try { + sync.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + private void sleep(int i) { + try { + java.lang.Thread.sleep(i); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1c883bdc..695ed412 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,15 +4,15 @@ package="com.fanap.podchat.example"> - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/assets/methods.json b/app/src/main/assets/methods.json new file mode 100644 index 00000000..ca29b6f0 --- /dev/null +++ b/app/src/main/assets/methods.json @@ -0,0 +1,390 @@ +[ + { + "categoty": "Contact", + "name": "SyncContact" + }, + { + "categoty": "Contact", + "name": "BlockContact" + }, + { + "categoty": "Contact", + "name": "UnBlockContact" + }, + { + "categoty": "Contact", + "name": "GetContacts" + }, + { + "categoty": "Contact", + "name": "AddContact" + }, + { + "categoty": "Contact", + "name": "RemoveContact" + }, + { + "categoty": "Contact", + "name": "UpdateContact" + }, + { + "categoty": "Contact", + "name": "SearchContact" + }, + { + "categoty": "File", + "name": "UploadFile" + }, + { + "categoty": "File", + "name": "DownloadFile" + }, + { + "categoty": "File", + "name": "UploadImage" + }, + { + "categoty": "File", + "name": "DownloadImage" + }, + { + "categoty": "File", + "name": "CancelDownloadImage" + }, + { + "categoty": "File", + "name": "DownloadFileFromThread" + }, + { + "categoty": "File", + "name": "UploadFileToThread" + }, + { + "categoty": "File", + "name": "RetryUpload" + }, + { + "categoty": "File", + "name": "CancelUpload" + }, + { + "categoty": "File", + "name": "SendReplyFileMessage" + }, + { + "categoty": "Thread", + "name": "CreateThread" + }, + { + "categoty": "Thread", + "name": "AddParticipant" + }, + { + "categoty": "Thread", + "name": "RemoveParticipant" + }, + { + "categoty": "Thread", + "name": "GetAllThread" + }, + { + "categoty": "ThreadAction", + "name": "PinThread" + }, + { + "categoty": "ThreadAction", + "name": "UnPinThread" + }, + { + "categoty": "ThreadAction", + "name": "SpamThread" + }, + { + "categoty": "ThreadAction", + "name": "GetAdmins" + }, + { + "categoty": "ThreadAction", + "name": "ClearHistory" + }, + { + "categoty": "ThreadAction", + "name": "CloseThread" + }, + { + "categoty": "ThreadAction", + "name": "RenameThread" + }, + { + "categoty": "ThreadAction", + "name": "GetThreadParticipants" + }, + { + "categoty": "ThreadAction", + "name": "GetThreadHistory" + }, + { + "categoty": "ThreadAction", + "name": "MuteThread" + }, + { + "categoty": "ThreadAction", + "name": "UnMuteThread" + }, + { + "categoty": "ThreadAction", + "name": "UpdateThreadInfo" + }, + { + "categoty": "ThreadAction", + "name": "GetDeliverMessageList" + }, + { + "categoty": "ThreadAction", + "name": "CreateThreadWithMessage" + }, + { + "categoty": "ThreadAction", + "name": "GetThreadWithCoreUser" + }, + { + "categoty": "ThreadAction", + "name": "CreateThreadWithFile" + }, + { + "categoty": "ThreadAction", + "name": "GetHashTagHistory" + }, + { + "categoty": "ThreadAction", + "name": "ChangePrivateThreadToPublic" + }, + { + "categoty": "ThreadAction", + "name": "SearchHistory" + }, + { + "categoty": "ThreadAction", + "name": "SetAdminRules" + }, + { + "categoty": "ThreadAction", + "name": "RemoveAdminRules" + }, + { + "categoty": "ThreadAction", + "name": "SafeLeave" + }, + { + "categoty": "ThreadAction", + "name": "LeaveThread" + }, + { + "categoty": "ThreadAction", + "name": "GetMentionList" + }, + { + "categoty": "ThreadAction", + "name": "CheckIsNameAvailable" + }, + { + "categoty": "ThreadAction", + "name": "CreatePublicThread" + }, + { + "categoty": "ThreadAction", + "name": "JoinPublicThread" + }, + { + "categoty": "ThreadAction", + "name": "DeleteGroup" + }, + { + "categoty": "ThreadRole", + "name": "SetRole" + }, + { + "categoty": "ThreadRole", + "name": "GetRole" + }, + { + "categoty": "ThreadRole", + "name": "RemoveRole" + }, + { + "categoty": "Message", + "name": "SendTextMessage" + }, + { + "categoty": "Message", + "name": "SendFileMessage" + }, + { + "categoty": "Message", + "name": "PingMessage" + }, + { + "categoty": "Message", + "name": "ForwardMessage" + }, + { + "categoty": "Message", + "name": "ReplyMessage" + }, + { + "categoty": "Message", + "name": "SeenMessage" + }, + { + "categoty": "Message", + "name": "SeenMessageList" + }, + { + "categoty": "Message", + "name": "GetNotSeenDur" + }, + { + "categoty": "Message", + "name": "DeleteMessage" + }, + { + "categoty": "Message", + "name": "EditMessage" + }, + { + "categoty": "Message", + "name": "StartTyping" + }, + { + "categoty": "Message", + "name": "StopTyping" + }, + { + "categoty": "Bot", + "name": "CreateBot" + }, + { + "categoty": "Bot", + "name": "DefineBotCommand" + }, + { + "categoty": "Bot", + "name": "StartBot" + }, + { + "categoty": "Bot", + "name": "StopBot" + }, + { + "categoty": "Bot", + "name": "GetUserBots" + }, + { + "categoty": "Tag", + "name": "AddTag" + }, + { + "categoty": "Tag", + "name": "EditTag" + }, + { + "categoty": "Tag", + "name": "DeleteTag" + }, + { + "categoty": "Tag", + "name": "AddTagParticipant" + }, + { + "categoty": "Tag", + "name": "RemoveTagParticipant" + }, + { + "categoty": "Tag", + "name": "GetTagList" + }, + { + "categoty": "User", + "name": "GetUserInfo" + }, + { + "categoty": "User", + "name": "GetBlockedList" + }, + { + "categoty": "User", + "name": "GetMutualGroup" + }, + { + "categoty": "User", + "name": "UpdateProfile" + }, + { + "categoty": "StorageAndCache", + "name": "GetCacheSize" + }, + { + "categoty": "StorageAndCache", + "name": "ClearCache" + }, + { + "categoty": "StorageAndCache", + "name": "GetStorageSize" + }, + { + "categoty": "StorageAndCache", + "name": "ClearStorage" + }, + { + "categoty": "Assistant", + "name": "RegisterAssistant" + }, + { + "categoty": "Assistant", + "name": "DeactiveAssistant" + }, + { + "categoty": "Assistant", + "name": "GetAssistants" + }, + { + "categoty": "Assistant", + "name": "GetAssistantHistory" + }, + { + "categoty": "Assistant", + "name": "BlockAssistant" + }, + { + "categoty": "Assistant", + "name": "UnBlockAssistant" + }, + { + "categoty": "Assistant", + "name": "GetBlocksAssistant" + }, + { + "categoty": "Other", + "name": "SendLocationMsg" + }, + { + "categoty": "Other", + "name": "MapReverse" + }, + { + "categoty": "Other", + "name": "MapStatic" + }, + { + "categoty": "Other", + "name": "GetSentryLogs" + }, + { + "categoty": "Other", + "name": "SearchMap" + }, + { + "categoty": "Other", + "name": "RouteMap" + } +] \ No newline at end of file diff --git a/app/src/main/java/com/example/chat/application/chatexample/CallActivity.java b/app/src/main/java/com/example/chat/application/chatexample/CallActivity.java deleted file mode 100644 index be2d5a19..00000000 --- a/app/src/main/java/com/example/chat/application/chatexample/CallActivity.java +++ /dev/null @@ -1,1032 +0,0 @@ -package com.example.chat.application.chatexample; - -import android.Manifest; -import android.annotation.SuppressLint; -import android.content.Context; -import android.media.AudioManager; -import android.os.Build; -import android.os.Bundle; -import android.os.VibrationEffect; -import android.os.Vibrator; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.ImageButton; -import android.widget.RadioGroup; -import android.widget.TextView; -import android.widget.Toast; - -import com.fanap.podchat.call.contacts.ContactsFragment; -import com.fanap.podchat.call.contacts.ContactsWrapper; -import com.fanap.podchat.call.model.CallInfo; -import com.fanap.podchat.call.model.CallParticipantVO; -import com.fanap.podchat.call.model.CallVO; -import com.fanap.podchat.call.result_model.CallDeliverResult; -import com.fanap.podchat.call.result_model.GetCallHistoryResult; -import com.fanap.podchat.example.R; -import com.fanap.podchat.mainmodel.Participant; -import com.fanap.podchat.model.ChatResponse; -import com.fanap.podchat.model.ResultUserInfo; -import com.fanap.podchat.requestobject.RequestConnect; -import com.fanap.podchat.util.ChatConstant; -import com.fanap.podchat.util.ChatStateType; -import com.fanap.podchat.util.Util; -import com.orhanobut.logger.AndroidLogAdapter; -import com.orhanobut.logger.Logger; - -import java.util.ArrayList; -import java.util.List; - - -public class CallActivity extends AppCompatActivity implements ChatContract.view { - - - private static final String TAG = "CHAT_SDK_CALL"; - public static final long[] VIB_PATTERN = {0, 1000, 1000}; - private String TOKEN = BaseApplication.getInstance().getString(R.string.token_ahmadsajadi); - private final static String Farhad_TOKEN = BaseApplication.getInstance().getString(R.string.token_ahmadsajadi); - private final static String Pooria_TOKEN = BaseApplication.getInstance().getString(R.string.token_ahmadsajadi); - private final static String Masoud_TOKEN = BaseApplication.getInstance().getString(R.string.token_ahmadsajadi); - - //INTEGRATION - - static int Pooria_ID = 18477; - static int Masoud_ID = 18476; - static int Farhad_ID = 18478; - - public final static String POORIA_CID = BaseApplication.getInstance().getString(R.string.ZIZI_FIFI_CONTACT_ID); - public final static String MASOUD_CID = BaseApplication.getInstance().getString(R.string.ZIZI_JIJI_CONTACT_ID); - - - //NEMATI -// static int FIFI_ID = 123; -// static int JIJI_ID = 122; -// static int ZIZI_ID = 121; - - private static String appId = BaseApplication.getInstance().getString(R.string.integration_appId); - private static String ssoHost = BaseApplication.getInstance().getString(R.string.integration_ssoHost); - private static String socketAddress = BaseApplication.getInstance().getString(R.string.integration_socketAddress); - - - //integration - private static String serverName = BaseApplication.getInstance().getString(R.string.integration_serverName); - private static String name = BaseApplication.getInstance().getString(R.string.integration_serverName); - private static String platformHost = BaseApplication.getInstance().getString(R.string.integration_platformHost); - private static String fileServer = BaseApplication.getInstance().getString(R.string.integration_platformHost); -// - - - //nemati -// private static String serverName = BaseApplication.getInstance().getString(R.string.nemati_serverName); -// private static String name = BaseApplication.getInstance().getString(R.string.nemati_serverName); -// private static String platformHost = BaseApplication.getInstance().getString(R.string.nemati_platformHost); -// private static String fileServer = BaseApplication.getInstance().getString(R.string.nemati_fileServer); - - -// integration /group - - public static int TEST_THREAD_ID = 7090; - - - private static String sandBoxSSOHost = BaseApplication.getInstance().getString(R.string.sandbox_ssoHost); - private static String sandBoxServerName = "chat-server"; - - - private static String sandBoxName = BaseApplication.getInstance().getString(R.string.sandbox_server_name); - private static String sandBoxSocketAddress = BaseApplication.getInstance().getString(R.string.sandbox_socketAddress); - private static String sandBoxPlatformHost = BaseApplication.getInstance().getString(R.string.sandbox_platformHost); - private static String sandBoxFileServer = BaseApplication.getInstance().getString(R.string.sandbox_fileServer); - private static String podspaceServer = BaseApplication.getInstance().getString(R.string.podspace_file_server_main); - - - private boolean permissionToRecordAccepted = false; - private String[] permissions = {Manifest.permission.RECORD_AUDIO}; - private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200; - - - private ChatContract.presenter presenter; - - Button buttonCall, buttonConnect, buttonTestCall, buttonCloseHistory, buttonAddCallParticipant, - buttonConnectSandBox, buttonStartSandboxCall, buttonShareLog, buttonRemoveCallParticipant, - buttonTerminateCall; - - TextView tvStatus, tvCallerName, tvHistory; - - RadioGroup groupCaller; - RadioGroup groupPartner; - View callRequestView, inCallView, viewHistory; - ImageButton buttonRejectCall, buttonAcceptCall, buttonEndCall, buttonGetHistory, buttonMute, buttonSpeaker; - EditText etGroupId, etSender, etReceiver, etNumberOrOtp, etSandboxPartnerId, etNewParticipantToAdd; - CheckBox checkBoxSSL, - checkBoxGroupCall, - checkboxZiziPartner, - checkboxJijiPartner, - checkboxFifiPartner, - checkboxAddFarhad, - checkboxAddMasoud, - checkboxAddPooria; - - FrameLayout frameLayout; - FloatingActionButton fabContacts; - -// CheckBox checkBoxViewSandBox, checkBoxViewIntegaration; -// Group groupSandBoxViews, groupIntegartionViews; - - - Vibrator vibrator; - boolean isMute = false; - boolean isSpeakerOn = false; - - - private int partnerId = Masoud_ID; - private boolean chatReady; - private boolean isTestMode = false; -// private boolean isInCall = false; - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_call); - - init(); - - setListeners(); - - - } - - private void connect() { - - RequestConnect request = new RequestConnect.Builder( - socketAddress, - appId, - serverName, - TOKEN, - ssoHost, - platformHost, - fileServer, - podspaceServer - ).build(); - - presenter.connect(request); - - } - - private void setListeners() { - - - buttonConnect.setOnClickListener((v) -> connect()); - - buttonCall.setOnClickListener(v -> { - - if (chatReady) { - if (checkBoxGroupCall.isChecked()) { - presenter.requestGroupCall(checkboxFifiPartner.isChecked(), checkboxZiziPartner.isChecked(), checkboxJijiPartner.isChecked()); - updateStatus("Starting Group Call"); - } else { - presenter.requestCall(partnerId, checkBoxSSL.isChecked()); - updateStatus(String.format("Calling %s", presenter.getNameById(partnerId))); - } - } else - Toast.makeText(this, "Chat Is Not Ready", Toast.LENGTH_SHORT).show(); - - - }); - - buttonTestCall.setOnClickListener(v -> { - - isTestMode = true; - -// setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); - if (!etGroupId.getText().toString().isEmpty() - && !etSender.getText().toString().isEmpty() - && !etReceiver.getText().toString().isEmpty()) { - - presenter.testCall(etGroupId.getText().toString(), - etSender.getText().toString(), - etReceiver.getText().toString() - ); - - } else presenter.testCall(); - - runOnUiThread(() -> { - showInCallView(); - buttonConnect.setVisibility(View.INVISIBLE); - }); - - - }); - - buttonTestCall.setOnLongClickListener(v -> { - presenter.endStream(); - - return true; - }); - - - groupCaller.setOnCheckedChangeListener((group, checkedId) -> { - - Log.e(TAG, "Checked -> " + checkedId); - - updateCaller(checkedId); - - - }); - - groupPartner.setOnCheckedChangeListener((group, checkedId) -> { - - Log.e(TAG, "Checked -> " + checkedId); - - updatePartner(checkedId); - - }); - - buttonAcceptCall.setOnClickListener(v -> { - - updateViewOnCallReaction(); - presenter.acceptIncomingCall(); - - }); - - buttonRejectCall.setOnClickListener((v) -> { - - updateViewOnCallReaction(); - presenter.rejectIncomingCall(); - - }); - - - buttonEndCall.setOnClickListener(v -> { - - - if (isTestMode) { - - presenter.endStream(); - inCallView.setVisibility(View.INVISIBLE); - callRequestView.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.VISIBLE); -// buttonTestCall.setVisibility(View.VISIBLE); - buttonConnect.setVisibility(View.VISIBLE); - - isTestMode = false; - - } else { - presenter.endRunningCall(); - } - onCallEnded(); - - }); - - buttonTerminateCall.setOnClickListener(v -> { - - onCallEnded(); - - - presenter.terminateCall(); - - - }); - - - buttonGetHistory.setOnClickListener(v -> presenter.getCallHistory()); - - buttonCloseHistory.setOnClickListener(v -> viewHistory.setVisibility(View.INVISIBLE)); - - buttonMute.setOnClickListener(v -> { - - vibrate(); - - scaleIt(v); - - presenter.switchMute(); - - toggleMute((ImageButton) v); - }); - - buttonSpeaker.setOnClickListener(v -> { - - vibrate(); - - scaleIt(v); - - presenter.switchSpeaker(); - - toggleSpeaker((ImageButton) v); - - }); - - buttonAddCallParticipant.setOnClickListener(v -> - { - - presenter.addCallParticipant(etNewParticipantToAdd.getText().toString(), - checkboxAddPooria.isChecked(), - checkboxAddMasoud.isChecked(), - checkboxAddFarhad.isChecked()); - - }); - buttonRemoveCallParticipant.setOnClickListener(v -> presenter.removeCallParticipant(checkboxAddPooria.isChecked(), checkboxAddMasoud.isChecked(), checkboxAddFarhad.isChecked())); - - buttonConnectSandBox.setOnClickListener(v -> { - - presenter.enableAutoRefresh(this, etNumberOrOtp.getText().toString()); - - etNumberOrOtp.setText(""); - - }); - - buttonConnectSandBox.setOnLongClickListener(v -> { - presenter.logOut(); - etNumberOrOtp.setText(""); - return true; - }); - - buttonStartSandboxCall.setOnClickListener(v -> { - if (chatReady) { - presenter.requestMainOrSandboxCall(etSandboxPartnerId.getText().toString(), checkBoxGroupCall.isChecked()); - } else { - Toast.makeText(this, "Chat is not ready", Toast.LENGTH_SHORT).show(); - } - }); - - buttonShareLog.setOnClickListener(v -> { - presenter.shareLogs(); - }); - - fabContacts.setOnClickListener(v -> presenter.getContact()); -// checkBoxViewSandBox.setOnCheckedChangeListener((buttonView, isChecked) -> groupSandBoxViews.setVisibility(isChecked ? View.VISIBLE : View.GONE)); -// -// checkBoxViewIntegaration.setOnCheckedChangeListener((buttonView, isChecked) -> groupIntegartionViews.setVisibility(isChecked ? View.VISIBLE : View.GONE)); - - } - - private void toggleSpeaker(ImageButton v) { - - isSpeakerOn = !isSpeakerOn; - - if (isSpeakerOn) { - v.setAlpha(1f); - } else { - v.setAlpha(0.6f); - } - - } - - private void toggleMute(ImageButton v) { - - isMute = !isMute; - - updateMuteButton(isMute); - } - - private void updateMuteButton(boolean isMute) { - - if (isMute) { - buttonMute.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_mic_on)); - } else { - buttonMute.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_mic_off)); - } - } - - private void vibrate() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - - vibrator.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE)); - - } else { - //deprecated in API 26 - vibrator.vibrate(100); - } - } - - private void vibrateE() { - -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { -// -// vibrator.vibrate(VibrationEffect.createWaveform(VIB_PATTERN, 0)); -// -// } else { -// //deprecated in API 26 -// vibrator.vibrate(VIB_PATTERN, 0); -// } - - } - - private void scaleIt(View v) { - v.animate() - .scaleX(0.7f) - .scaleY(0.7f) - .setDuration(250) - .withEndAction(() -> - v.animate() - .scaleX(1f) - .scaleY(1f) - .setDuration(250) - .start()) - .start(); - } - - private void updateViewOnCallReaction() { - - cancelVib(); - - runOnUiThread(() -> { - callRequestView.setVisibility(View.GONE); - buttonCall.setVisibility(View.VISIBLE); - buttonStartSandboxCall.setVisibility(View.VISIBLE); - buttonConnectSandBox.setVisibility(View.VISIBLE); - tvCallerName.setText(""); - }); - - - } - - private void updatePartner(int checkedId) { - - switch (checkedId) { - - case R.id.radioFarhadPartner: { - - Log.e(TAG, "Checked -> zizi"); - - partnerId = Farhad_ID; - - break; - } - case R.id.radioMasoudPartner: { - - Log.e(TAG, "Checked -> fifi"); - partnerId = Pooria_ID; - - break; - } - case R.id.radioPooriaPartner: { - - Log.e(TAG, "Checked -> jiji"); - partnerId = Masoud_ID; - - break; - } - - - } - - - } - - private void updateCaller(int checkedId) { - - switch (checkedId) { - - case R.id.radioFarhadCaller: { - - Log.e(TAG, "Checked -> farhad"); - - TOKEN = Farhad_TOKEN; - - break; - } - case R.id.radioMasoudCaller: { - - Log.e(TAG, "Checked -> masoud"); - - TOKEN = Masoud_TOKEN; - - break; - } - case R.id.radioPooriaCaller: { - - Log.e(TAG, "Checked -> pooria"); - - TOKEN = Pooria_TOKEN; - - break; - } - - - } - } - - private void init() { - - - presenter = new ChatPresenter(this, this, this); - buttonCall = findViewById(R.id.btnCallRequest); - buttonConnect = findViewById(R.id.btnConnect); - buttonTestCall = findViewById(R.id.btnCallTest); - - buttonCloseHistory = findViewById(R.id.buttonCloseHistory); - - buttonAddCallParticipant = findViewById(R.id.btnAddCallParticipant); - buttonRemoveCallParticipant = findViewById(R.id.btnRemoveCallParticipant); - - groupCaller = findViewById(R.id.radioCaller); - groupPartner = findViewById(R.id.radioPartner); - - tvStatus = findViewById(R.id.tvStatus); - - tvCallerName = findViewById(R.id.tvCallerName); - tvHistory = findViewById(R.id.tvHistory); - - callRequestView = findViewById(R.id.viewCallRequest); - inCallView = findViewById(R.id.viewCall); - viewHistory = findViewById(R.id.viewHistory); - - buttonAcceptCall = findViewById(R.id.buttonAccept); - buttonRejectCall = findViewById(R.id.buttonReject); - buttonEndCall = findViewById(R.id.buttonEndCall); - buttonTerminateCall = findViewById(R.id.btnTerminateCall); - buttonGetHistory = findViewById(R.id.buttonGetHistory); - buttonConnectSandBox = findViewById(R.id.btnConnectToSandbox); - buttonStartSandboxCall = findViewById(R.id.btnSandboxCall); - - - buttonMute = findViewById(R.id.buttonMute); - buttonSpeaker = findViewById(R.id.buttonSpeakerOn); - - etGroupId = findViewById(R.id.etGroupId); - etSender = findViewById(R.id.etSender); - etReceiver = findViewById(R.id.etReceiver); - etNumberOrOtp = findViewById(R.id.etOtpNumber); - etSandboxPartnerId = findViewById(R.id.etSandBoxPartnerId); - etNewParticipantToAdd = findViewById(R.id.etNewParticipant); - - checkBoxSSL = findViewById(R.id.checkboxSSL); - checkBoxGroupCall = findViewById(R.id.checkboxGroupCall); - - checkboxZiziPartner = findViewById(R.id.checkboxZiziPartner); - checkboxFifiPartner = findViewById(R.id.checkboxFifiPartner); - checkboxJijiPartner = findViewById(R.id.checkboxJijiPartner); - - checkboxAddFarhad = findViewById(R.id.checkboxAddFarhad); - checkboxAddPooria = findViewById(R.id.checkboxAddPooria); - checkboxAddMasoud = findViewById(R.id.checkboxAddMasoud); - - buttonShareLog = findViewById(R.id.btnShareLogs); - -// checkBoxViewSandBox = findViewById(R.id.checkBoxSandBox); -// checkBoxViewIntegaration = findViewById(R.id.checkboxIntegration); -// -// groupSandBoxViews = findViewById(R.id.groupSandBox); -// groupIntegartionViews = findViewById(R.id.groupIntegration); - - - frameLayout = findViewById(R.id.frame_call); - fabContacts = findViewById(R.id.fabShowContactsList); - ActivityCompat.requestPermissions(this, permissions, REQUEST_RECORD_AUDIO_PERMISSION); - - Logger.addLogAdapter(new AndroidLogAdapter()); - - vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); - - CallInfo callInfo = getIntent().getParcelableExtra(ChatConstant.POD_CALL_INFO); - - Log.e(TAG, "Call info: " + callInfo); - -// connect(); - if (callInfo != null) { - presenter.setCallInfo(callInfo); - showInCallView(); - } - } - - @Override - public void onState(String state) { - - Log.e(TAG, "STATE: " + state); - - if (state.equals(ChatStateType.ChatSateConstant.CHAT_READY)) { - - chatReady = true; - - runOnUiThread(() -> { - buttonConnect.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.VISIBLE); - tvStatus.setText("Chat is Ready :)"); - }); - - } else { - - chatReady = false; - runOnUiThread(() -> { - buttonConnect.setVisibility(View.VISIBLE); - buttonCall.setVisibility(View.INVISIBLE); - tvStatus.setText("Connecting..."); - }); - - - } - - - } - - @Override - public void onVoiceCallRequestReceived(String callerName) { - - vibrateE(); - - runOnUiThread(() -> { - callRequestView.setVisibility(View.VISIBLE); - viewHistory.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.INVISIBLE); - buttonTestCall.setVisibility(View.INVISIBLE); - buttonConnectSandBox.setVisibility(View.INVISIBLE); - buttonStartSandboxCall.setVisibility(View.INVISIBLE); - tvCallerName.setText(" " + callerName); - }); - - } - - @Override - public void onVoiceCallRequestRejected(String callerName) { - - - cancelVib(); - - runOnUiThread(() -> { - buttonCall.setVisibility(View.VISIBLE); -// buttonTestCall.setVisibility(View.VISIBLE); - buttonConnectSandBox.setVisibility(View.VISIBLE); - buttonStartSandboxCall.setVisibility(View.VISIBLE); - tvStatus.setText(String.format("%s Rejected Your Call Request", callerName)); - }); - - - } - - - @Override - public void onVoiceCallStarted(String uniqueId, String clientId) { - - setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); - - cancelVib(); - - runOnUiThread(this::showInCallView); - - - } - - private void cancelVib() { - - vibrator.cancel(); - - } - - private void showInCallView() { - runOnUiThread(() -> { - inCallView.setVisibility(View.VISIBLE); - callRequestView.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.INVISIBLE); - buttonTestCall.setVisibility(View.INVISIBLE); - - buttonConnectSandBox.setVisibility(View.INVISIBLE); - buttonStartSandboxCall.setVisibility(View.INVISIBLE); - }); - } - - private void hideInCallView() { - runOnUiThread(() -> { - inCallView.setVisibility(View.GONE); - callRequestView.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.VISIBLE); - buttonTestCall.setVisibility(View.INVISIBLE); - - buttonConnectSandBox.setVisibility(View.VISIBLE); - buttonStartSandboxCall.setVisibility(View.VISIBLE); - }); - } - - private void showRequestCallView() { - runOnUiThread(() -> { - inCallView.setVisibility(View.VISIBLE); - callRequestView.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.INVISIBLE); - buttonTestCall.setVisibility(View.INVISIBLE); - - buttonConnectSandBox.setVisibility(View.INVISIBLE); - buttonStartSandboxCall.setVisibility(View.INVISIBLE); - }); - } - - private void hideRequestCallView() { - runOnUiThread(() -> { - inCallView.setVisibility(View.GONE); - callRequestView.setVisibility(View.GONE); - buttonCall.setVisibility(View.VISIBLE); - buttonTestCall.setVisibility(View.INVISIBLE); - - buttonConnectSandBox.setVisibility(View.VISIBLE); - buttonStartSandboxCall.setVisibility(View.VISIBLE); - }); - } - - @Override - public void onVoiceCallEnded(String uniqueId, long subjectId) { - - onCallEnded(); - - - } - - private void onCallEnded() { - - setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE); - - runOnUiThread(() -> { - inCallView.setVisibility(View.INVISIBLE); - callRequestView.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.VISIBLE); -// buttonTestCall.setVisibility(View.VISIBLE); - buttonConnectSandBox.setVisibility(View.VISIBLE); - buttonStartSandboxCall.setVisibility(View.VISIBLE); - Toast.makeText(this, "Call has been ended", Toast.LENGTH_SHORT).show(); - tvStatus.setText("Call has been ended"); - }); - } - - @SuppressLint("SetTextI18n") - @Override - public void onGetCallHistory(ChatResponse response) { - - runOnUiThread(() -> { - - viewHistory.setVisibility(View.VISIBLE); - - String source = Util.parserBoolean(response.isCache()) ? "Cache" : "Server"; - - tvHistory.append("\n\n\n===\nSource: " + source + "\n===\n"); - - tvHistory.append("Content Count: " + response.getResult().getContentCount() + "\n\n"); - - tvHistory.append("Has Next: " + response.getResult().isHasNext() + "\n\n"); - - - if (!Util.isNullOrEmpty(response.getResult().getCallsList())) - for (CallVO call : - response.getResult().getCallsList()) { - - tvHistory.append("\n====================\n"); - - tvHistory.append("Call id: " + call.getId() + "\n"); - tvHistory.append("Call CreatorId: " + call.getCreatorId() + "\n"); - tvHistory.append("Call CreateTime: " + call.getCreateTime() + "\n"); - tvHistory.append("Call StartTime: " + call.getStartTime() + "\n"); - tvHistory.append("Call EndTime: " + call.getEndTime() + "\n"); - tvHistory.append("Call Status: " + call.getStatus() + "\n"); - tvHistory.append("Call Type: " + call.getType() + "\n"); - try { - tvHistory.append("Call PartnerParticipant: " + call.getPartnerParticipantVO().toString() + "\n"); - } catch (Exception ignored) { - } - - } - else { - tvHistory.append("\nNo call history\n"); - } - tvHistory.append("\n====================\n"); - }); - - } - - @Override - public void onCallReconnect(long callId) { - runOnUiThread(() -> Toast.makeText(this, "Call with id " + callId + " is reconnecting", Toast.LENGTH_LONG).show()); - } - - @Override - public void onCallConnect(long callId) { - runOnUiThread(() -> { - - Toast.makeText(this, "Call with id " + callId + " is connected", Toast.LENGTH_LONG).show(); - - }); - } - - @Override - public void onCallDelivered(CallDeliverResult result) { - runOnUiThread(() -> { - - Toast.makeText(this, "Call Request Delivered to " + result.getCallParticipantVO().getUserId(), Toast.LENGTH_SHORT).show(); - - }); - } - - @Override - public void onGroupVoiceCallRequestReceived(String callerName, String title, List participants) { - - vibrateE(); - - runOnUiThread(() -> { - Toast.makeText(this, "Group Call from " + callerName, Toast.LENGTH_SHORT).show(); - callRequestView.setVisibility(View.VISIBLE); - viewHistory.setVisibility(View.INVISIBLE); - buttonCall.setVisibility(View.INVISIBLE); - buttonTestCall.setVisibility(View.INVISIBLE); - buttonConnectSandBox.setVisibility(View.INVISIBLE); - buttonStartSandboxCall.setVisibility(View.INVISIBLE); - tvCallerName.setText(callerName + " from " + title); - }); - - } - - @Override - public void onCallParticipantLeft(String participant) { - - vibrate(); - - runOnUiThread(() -> Toast.makeText(this, participant + " Left ", Toast.LENGTH_SHORT).show()); - } - - - @Override - public void onLogEvent(String log) { - Logger.json(log); - } - - @Override - public void onGetToken(String token) { - - RequestConnect request = new RequestConnect.Builder( - sandBoxSocketAddress, - appId, - sandBoxServerName, - token, - sandBoxSSOHost, - sandBoxPlatformHost, - sandBoxFileServer, - podspaceServer - ).build(); - - presenter.connect(request); - - } - - - @Override - public void onGetUserInfo(ChatResponse outPutUserInfo) { - - long id = outPutUserInfo.getResult().getUser().getId(); - - runOnUiThread(() -> etNumberOrOtp.setText("Your ID is: " + id)); - - - } - - @Override - public void onCallParticipantJoined(String participant) { - - vibrate(); - - runOnUiThread(() -> Toast.makeText(this, participant + " joined!", Toast.LENGTH_SHORT).show()); - } - - @Override - public void onCallParticipantRemoved(String name) { - vibrate(); - - runOnUiThread(() -> Toast.makeText(this, name + " removed from call!", Toast.LENGTH_SHORT).show()); - } - - - @Override - public void onRemovedFromCall() { - - vibrate(); - - onCallEnded(); - - runOnUiThread(() -> Toast.makeText(this, "You have been removed from call!", Toast.LENGTH_SHORT).show()); - } - - - @Override - public void onCallCreated(long threadId) { - updateStatus("Call with id " + threadId + " was created"); - showRequestCallView(); - } - - - @Override - public void audioCallMuted() { - updateMuteButton(true); - } - - @Override - public void audioCallUnMuted() { - updateMuteButton(false); - } - - @Override - public void callParticipantMuted(CallParticipantVO participant) { - showToast(participant.getParticipantVO().getFirstName() + " " + participant.getParticipantVO().getLastName() + " is muted now!"); - } - - @Override - public void callParticipantUnMuted(CallParticipantVO participant) { - showToast(participant.getParticipantVO().getFirstName() + " " + participant.getParticipantVO().getLastName() + " Is unmuted now!"); - - } - - @Override - public void audioCallMutedByAdmin() { - vibrate(); - showToast("Call creator muted you!"); - updateMuteButton(true); - } - - @Override - public void audioCallUnMutedByAdmin() { - vibrate(); - showToast("Call creator unmuted you!"); - updateMuteButton(false); - } - - @Override - public void callParticipantCanceledCall(String name) { - showToast(name + " " + " canceled the call!"); - } - - @Override - public void hideCallRequest() { - - hideRequestCallView(); - hideInCallView(); - updateStatus("You've accepted call with another device"); - - } - - @Override - public void updateStatus(String message) { - runOnUiThread(() -> { - try { - tvStatus.setText(" " + message); - } catch (Exception e) { - e.printStackTrace(); - } - }); - } - - private void showToast(String text) { - runOnUiThread(() -> Toast.makeText(this, text, Toast.LENGTH_LONG) - .show()); - } - - - @Override - public void showContactsFragment(ContactsFragment fragment) { - - - runOnUiThread(() -> { - fabContacts.hide(); - if (getSupportFragmentManager().findFragmentByTag("CFRAG") == null) - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.frame_call, fragment, "CFRAG") - .addToBackStack("CFRAG") - .commit(); - }); - - } - - @Override - public void updateContactsFragment(ArrayList contactsWrappers) { - - if (getSupportFragmentManager().findFragmentByTag("CFRAG") != null){ - - - ContactsFragment contactsFragment = (ContactsFragment) getSupportFragmentManager().findFragmentByTag("CFRAG"); - if (contactsFragment != null) { - contactsFragment.updateList(contactsWrappers); - } - - } - } - - @Override - public void onBackPressed() { - - if (getSupportFragmentManager().getBackStackEntryCount() > 0) { - getSupportFragmentManager().popBackStack(); - fabContacts.show(); - Fragment f = getSupportFragmentManager().findFragmentByTag("CFRAG"); - - if (f != null) { - getSupportFragmentManager(). - beginTransaction() - .remove(f) - .commit(); - } - } else - super.onBackPressed(); - - } -} diff --git a/app/src/main/java/com/example/chat/application/chatexample/ChatActivity.java b/app/src/main/java/com/example/chat/application/chatexample/ChatActivity.java index f68d3e1c..3f2573b9 100644 --- a/app/src/main/java/com/example/chat/application/chatexample/ChatActivity.java +++ b/app/src/main/java/com/example/chat/application/chatexample/ChatActivity.java @@ -11,63 +11,82 @@ import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.constraint.ConstraintLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; -import android.widget.ImageView; -import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; - -import com.bumptech.glide.Glide; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; import com.bumptech.glide.request.RequestOptions; +import com.example.chat.application.chatexample.enums.ServerType; +import com.example.chat.application.chatexample.model.Method; +import com.example.chat.application.chatexample.ui.custom.ChildView; +import com.example.chat.application.chatexample.ui.custom.HeaderView; +import com.example.chat.application.chatexample.utils.Utils; import com.fanap.podchat.ProgressHandler; import com.fanap.podchat.chat.Chat; import com.fanap.podchat.chat.ChatHandler; import com.fanap.podchat.chat.RoleType; +import com.fanap.podchat.chat.assistant.model.AssistantVo; +import com.fanap.podchat.chat.assistant.request_model.BlockUnblockAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.DeActiveAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantHistoryRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetBlockedAssistantsRequest; +import com.fanap.podchat.chat.assistant.request_model.RegisterAssistantRequest; import com.fanap.podchat.chat.bot.request_model.CreateBotRequest; import com.fanap.podchat.chat.bot.request_model.DefineBotCommandRequest; +import com.fanap.podchat.chat.bot.request_model.GetUserBotsRequest; import com.fanap.podchat.chat.bot.request_model.StartAndStopBotRequest; import com.fanap.podchat.chat.bot.result_model.CreateBotResult; import com.fanap.podchat.chat.bot.result_model.DefineBotCommandResult; import com.fanap.podchat.chat.file_manager.download_file.model.ResultDownloadFile; +import com.fanap.podchat.chat.hashtag.model.RequestGetHashTagList; import com.fanap.podchat.chat.mention.model.RequestGetMentionList; import com.fanap.podchat.chat.messge.ResultUnreadMessagesCount; import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; import com.fanap.podchat.chat.pin.pin_message.model.ResultPinMessage; import com.fanap.podchat.chat.pin.pin_thread.model.RequestPinThread; import com.fanap.podchat.chat.ping.result.StatusPingResult; +import com.fanap.podchat.chat.tag.request_model.AddTagParticipantRequest; +import com.fanap.podchat.chat.tag.request_model.CreateTagRequest; +import com.fanap.podchat.chat.tag.request_model.DeleteTagRequest; +import com.fanap.podchat.chat.tag.request_model.EditTagRequest; +import com.fanap.podchat.chat.tag.request_model.GetTagListRequest; +import com.fanap.podchat.chat.tag.request_model.RemoveTagParticipantRequest; +import com.fanap.podchat.chat.tag.result_model.TagResult; import com.fanap.podchat.chat.thread.public_thread.RequestCheckIsNameAvailable; import com.fanap.podchat.chat.thread.public_thread.RequestCreatePublicThread; import com.fanap.podchat.chat.thread.public_thread.RequestJoinPublicThread; import com.fanap.podchat.chat.thread.public_thread.ResultIsNameAvailable; import com.fanap.podchat.chat.thread.public_thread.ResultJoinPublicThread; +import com.fanap.podchat.chat.thread.request.ChangeThreadTypeRequest; +import com.fanap.podchat.chat.thread.request.GetMutualGroupRequest; import com.fanap.podchat.chat.user.profile.RequestUpdateProfile; +import com.fanap.podchat.chat.user.profile.ResultUpdateProfile; import com.fanap.podchat.chat.user.user_roles.model.ResultCurrentUserRoles; import com.fanap.podchat.example.R; import com.fanap.podchat.mainmodel.FileUpload; import com.fanap.podchat.mainmodel.Invitee; import com.fanap.podchat.mainmodel.Inviter; -import com.fanap.podchat.mainmodel.NosqlListMessageCriteriaVO; +import com.fanap.podchat.chat.messge.SearchSystemMetadataRequest; import com.fanap.podchat.mainmodel.NosqlSearchMetadataCriteria; import com.fanap.podchat.mainmodel.RequestSearchContact; import com.fanap.podchat.mainmodel.RequestThreadInnerMessage; -import com.fanap.podchat.mainmodel.UpdateContact; import com.fanap.podchat.model.ChatResponse; import com.fanap.podchat.model.ErrorOutPut; import com.fanap.podchat.model.ResultFile; import com.fanap.podchat.model.ResultImageFile; +import com.fanap.podchat.model.ResultThreads; +import com.fanap.podchat.model.ResultUserInfo; import com.fanap.podchat.notification.PodNotificationManager; +import com.fanap.podchat.requestobject.RemoveParticipantRequest; import com.fanap.podchat.requestobject.RequestAddContact; import com.fanap.podchat.requestobject.RequestAddParticipants; import com.fanap.podchat.requestobject.RequestBlockList; @@ -91,7 +110,6 @@ import com.fanap.podchat.requestobject.RequestMapReverse; import com.fanap.podchat.requestobject.RequestMapStaticImage; import com.fanap.podchat.requestobject.RequestMessage; -import com.fanap.podchat.requestobject.RequestRemoveParticipants; import com.fanap.podchat.requestobject.RequestReplyFileMessage; import com.fanap.podchat.requestobject.RequestReplyMessage; import com.fanap.podchat.requestobject.RequestRole; @@ -102,7 +120,6 @@ import com.fanap.podchat.requestobject.RequestThread; import com.fanap.podchat.requestobject.RequestThreadInfo; import com.fanap.podchat.requestobject.RequestThreadParticipant; -import com.fanap.podchat.requestobject.RequestUpdateContact; import com.fanap.podchat.requestobject.RequestUploadFile; import com.fanap.podchat.requestobject.RequestUploadImage; import com.fanap.podchat.requestobject.RetryUpload; @@ -111,10 +128,10 @@ import com.fanap.podchat.util.TextMessageType; import com.fanap.podchat.util.ThreadType; import com.fanap.podchat.util.Util; -import com.github.javafaker.Faker; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; +import com.mindorks.placeholderview.ExpandablePlaceHolderView; import com.orhanobut.logger.AndroidLogAdapter; import com.orhanobut.logger.Logger; @@ -122,255 +139,555 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; public class ChatActivity extends AppCompatActivity - implements AdapterView.OnItemSelectedListener, View.OnClickListener, ChatContract.view { - private static final int FILE_REQUEST_CODE = 2; + implements View.OnClickListener, ChatContract.view { public static final String APP_ID = "appid"; public static final int REQUEST_WRITE_EXTERNAL_STORAGE = 1007; + public static final String THREAD_UNIQUE_NAME = "unique_name_4_1584016531111"; + private static final int FILE_REQUEST_CODE = 2; + private static final int PICK_IMAGE_FILE_REQUEST = 1; + private static final int PICK_FILE_REQUEST = 2; + private static final String TEST_THREAD_HASH = "2JS6BC7L4MGCYT"; + public static int TEST_THREAD_ID = 152321; + + ArrayList runningSignals = new ArrayList<>(); + long notificationThreadId = 0; + long notificationMessageId = 0; private ChatContract.presenter presenter; - private EditText editText; - private EditText editTextToken; - private EditText editTextThread; - private Button buttonFileChoose; - private String selectedFilePath; - private Button buttonConnect; - private Button buttonToken; - private ImageView imageMap; - private TextView textViewState; - private TextView percentage; - private TextView percentageFile; - private Gson gson = new GsonBuilder().create(); - private static final int PICK_IMAGE_FILE_REQUEST = 1; - private static final int PICK_FILE_REQUEST = 2; + private final Gson gson = new GsonBuilder().create(); private Uri uri; - private Button btnUploadFile; + private long tagId = 23; + private String fileUri, signalUniq, downloadingId; - private Button btnUploadImage; + private long TEST_THREAD_LAST_SEEN_MESSAGE_TIME; - //main and sandbox + // Chat server config + private String TOKEN = BaseApplication.getInstance().getString(R.string.Ahmad_Sajadi); + private static String ssoHost = BaseApplication.getInstance().getString(R.string.ssoHost); + private static String serverName = "chat-server"; + private static String appId = "POD-Chat"; + private String podSpaceServer = BaseApplication.getInstance().getString(R.string.podspace_file_server_main); + private String name; + private String socketAddress; + private String platformHost; + private String fileServer; -// private static String TOKEN = "869221a3923f49879ecd38824f7d787e"; -// private static String ssoHost = BaseApplication.getInstance().getString(R.string.ssoHost); -// private static String serverName = "chat-server"; + //views + private Button btConnect, btSendMsg, btChangeThreadId, btSettoken; + private TextView tvState, tvUserInfo, tvServerType; + private EditText et_text; - //local + //other variables + private Map> categoryMap; + private List movieList; + private ExpandablePlaceHolderView expandablePlaceHolderView; + private final Enum serverType = ServerType.Sandbox; -// - private static String TOKEN = BaseApplication.getInstance().getString(R.string.token_ahmadsajadi); - private static String ssoHost = BaseApplication.getInstance().getString(R.string.integration_ssoHost); - private static String serverName = BaseApplication.getInstance().getString(R.string.integration_serverName); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); - //test + init(); -// private static String TOKEN = BaseApplication.getInstance().getString(R.string.token_zabbix_bot_2); -// private static String ssoHost = BaseApplication.getInstance().getString(R.string.test_ssoHost); -// private static String serverName = BaseApplication.getInstance().getString(R.string.test_serverName); + setListeners(); - private static String appId = "POD-Chat"; - private static String podSpaceServer = BaseApplication.getInstance().getString(R.string.podspace_file_server_main); + getNotificationData(); - /** - * Integration server setting: - */ -//// - private static String name = BaseApplication.getInstance().getString(R.string.integration_serverName); - private static String socketAddress = BaseApplication.getInstance().getString(R.string.integration_socketAddress); - private static String platformHost = BaseApplication.getInstance().getString(R.string.integration_platformHost); - private static String fileServer = BaseApplication.getInstance().getString(R.string.integration_platformHost); + setExpandableList(); + } - /** - * Nemati - // */ -// private static String name = BaseApplication.getInstance().getString(R.string.nemati_serverName); -// private static String socketAddress = BaseApplication.getInstance().getString(R.string.integration_socketAddress); -// private static String platformHost = BaseApplication.getInstance().getString(R.string.integration_platformHost); -// private static String fileServer = BaseApplication.getInstance().getString(R.string.integration_platformHost); + private void setExpandableList() { + movieList = new ArrayList<>(); + categoryMap = new HashMap<>(); + expandablePlaceHolderView = (ExpandablePlaceHolderView) findViewById(R.id.expandablePlaceHolder); + loadData(); + } + private void onMethodClick(String methosName) { + final String[] fileUnique = new String[1]; + switch (methosName) { + case "SyncContact": + presenter.syncContact(ChatActivity.this); + break; - /** - * Test server setting: - */ + case "SearchContact": + searchContact(); + break; -// private static String name = BaseApplication.getInstance().getString(R.string.test_server_name); -// private static String socketAddress = BaseApplication.getInstance().getString(R.string.test_socketAddress); -// private static String platformHost = BaseApplication.getInstance().getString(R.string.test_platformHost); -// private static String fileServer = BaseApplication.getInstance().getString(R.string.test_fileServer); + case "BlockContact": + blockContact(); + break; - /** - * Main Server Setting: - */ -// -// private static String name = BaseApplication.getInstance().getString(R.string.main_server_name); -// private static String socketAddress = BaseApplication.getInstance().getString(R.string.socketAddress); -// private static String platformHost = BaseApplication.getInstance().getString(R.string.platformHost); -// private static String fileServer = BaseApplication.getInstance().getString(R.string.fileServer); + case "UnBlockContact": + unblockContact(); + break; - /** - * Sandbox setting: - */ + case "GetContacts": + getContacts(); + break; -// private static String name = BaseApplication.getInstance().getString(R.string.sandbox_server_name); -// private static String socketAddress = BaseApplication.getInstance().getString(R.string.sandbox_socketAddress); -// private static String platformHost = BaseApplication.getInstance().getString(R.string.sandbox_platformHost); -// private static String fileServer = BaseApplication.getInstance().getString(R.string.sandbox_fileServer); + case "AddContact": + addContact(); + break; + case "RemoveContact": + removeContact(); + break; - //sand box / group -//// -// public static int TEST_THREAD_ID = 9508; -// private static final String TEST_THREAD_HASH = "2JS6BC7L4MGCYT"; + case "UpdateContact": + updateContact(); + break; + case "UploadFile": + uploadImage(); + break; -// main server / p2p + case "DownloadFile": + downloadFile(); + break; -// public static int TEST_THREAD_ID = 8182; -// private static final String TEST_THREAD_HASH = "7691JPIS2VG4XM"; + case "UploadImage": + uploadImage(); + break; - // main server / group + case "DownloadImage": + downloadFile(); + break; -// public static int TEST_THREAD_ID = 47528; -// private static final String TEST_THREAD_HASH = "4S5U1G4EH82BVB"; + case "CancelDownloadImage": + cancelDownloadImage(); + break; -// integration /group: fifi,jiji and ... -// public static int TEST_THREAD_ID = 6886; + case "DownloadFileFromThread": + downloadFile(); + break; - //integration /p2p: fifi, jiji + case "UploadFileToThread": + uploadImage(); + break; - public static int TEST_THREAD_ID = 7488; - private static final String TEST_THREAD_HASH = "7691JPIS2VG4XM"; + case "RetryUpload": + retryUpload(); + break; + case "CancelUpload": + cancelUpload(fileUnique[0]); + break; - //test server thread -// public static int TEST_THREAD_ID = 7608; + case "SendReplyFileMessage": + sendFileMessage(fileUnique); + break; + case "CreateThread": + createThread(); + break; - private String fileUri; + case "AddParticipant": + addParticipants(); + break; - private String signalUniq; + case "RemoveParticipant": + removeParticipants(); + break; - ArrayList runningSignals = new ArrayList<>(); + case "GetAllThread": + getThreads(); + break; + case "PinThread": + pinThreadToTop(); + break; - Faker faker; - private String downloadingId = ""; + case "UnPinThread": + unPinThread(); + break; - long notificationThreadId = 0; - long notificationMessageId = 0; + case "SpamThread": + spamThread(); + break; + case "LeaveThread": + leaveThread(); + break; - int offset = 0; + case "GetAdmins": + getAdminList(); + break; + case "ClearHistory": + clearHistory(); + break; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + case "CloseThread": + closeThread(); + break; + case "RenameThread": + renameTHread(); + break; - init(); + case "GetThreadParticipants": + getThreadParticipants(); + break; + case "GetThreadHistory": + getThreadHistory(); + break; - setListeners(); + case "MuteThread": + muteThread(); + break; + case "UnMuteThread": + unMuteThread(); + break; + case "UpdateThreadInfo": + updateThreadInfo(); + break; - getNotificationData(); + case "GetDeliverMessageList": + getDeliverMessageList(); + break; + + case "CreateThreadWithMessage": + createThreadWithMessage(); + break; + case "GetThreadWithCoreUser": + getThreadWithCoreUser(); + break; - } + case "CreateThreadWithFile": + createThreadWithFile(); + break; - private void setListeners() { + case "GetHashTagHistory": + getHashTagHistory(); + break; - imageMap.setOnLongClickListener((v) -> { + case "ChangePrivateThreadToPublic": + changePrivateThreadToPublic(); + break; - showNotification(); + case "SearchHistory": + searchHistory(); + break; - return true; - }); - imageMap.setOnClickListener(v -> downloadWithGlide()); - buttonFileChoose.setOnClickListener(this); - buttonFileChoose.setOnLongClickListener(v -> { + case "SetAdminRules": + setAdminRules(); - presenter.shareLogs(); - return true; - }); - buttonConnect.setOnClickListener(this); - btnUploadFile.setOnClickListener(this::onUploadFile); + break; + case "RemoveAdminRules": - btnUploadFile.setOnLongClickListener(v -> { - offset = 0; - return true; - }); + removeAdminRules(); + break; + case "SafeLeave": + break; + + case "GetMentionList": + getMentionList(); + break; - btnUploadImage.setOnClickListener(this::onUploadImage); + case "CheckIsNameAvailable": + checkIsNameAvailable(); + break; - buttonToken.setOnClickListener(v -> { + case "CreatePublicThread": + createPublicThread(); + break; + case "JoinPublicThread": + joinPublicThread(); + break; - TOKEN = editTextToken.getText().toString(); + case "DeleteGroup": - presenter.setToken(TOKEN); + break; - }); + case "SetRole": + addAuditor(); + break; - buttonToken.setOnLongClickListener(v -> { + case "GetRole": + getUserRoles(); + break; - String entry = editTextToken.getText().toString(); - editTextToken.setText(""); - editTextToken.setHint("Enter OTP or Number"); - presenter.enableAutoRefresh(this, entry); + case "RemoveRole": + removeAuditor(); + break; + + case "SendTextMessage": + sendMessage(null); + break; + case "SendFileMessage": + sendFileMessage(fileUnique); + break; + + case "PingMessage": + pinMessageToTop(); + break; + + case "ForwardMessage": + forwardMessage(); + break; + + case "ReplyMessage": + replyMessage(); + break; + + case "SeenMessage": + seenMessage(); + break; + + case "SeenMessageList": + seenMessageList(); + break; + + case "GetNotSeenDur": + getNotSeenDur(); + break; + + case "DeleteMessage": + deleteMessage(); + break; + + case "EditMessage": + editMessage(); + break; + + case "StartTyping": + startTyping(); + + break; + + case "StopTyping": + stopTyping(); + break; + + case "CreateBot": + createBot(); + break; + + case "DefineBotCommand": + defineBotCommand(); + break; + + case "StartBot": + startBot(); + break; + + case "StopBot": + stopBot(); + break; + + case "GetUserBots": + getUserBots(); + break; + + case "AddTag": + createTag(); + break; + + case "EditTag": + editTag(); + break; + + case "DeleteTag": + deleteTag(); + break; + + case "AddTagParticipant": + addTagParticipant(); + break; + + case "RemoveTagParticipant": + removeTagParticipant(); + break; + + case "GetTagList": + getTagList(); + break; + + case "GetUserInfo": + getUserInfo(); + break; + + case "GetBlockedList": + getBlockedList(); + + break; + + case "GetMutualGroup": + getMutualGroup(); + break; + + case "UpdateProfile": + updateUserProfile(); + break; + + case "GetCacheSize": + presenter.getCacheSize(); + break; + + case "ClearCache": + clearCache(); + break; + + case "GetStorageSize": + getStorageSize(); + break; + + case "ClearStorage": + clearStorage(); + break; + + case "RegisterAssistant": + registerAssistant(); + break; + + case "DeactiveAssistant": + deactiveAssistant(); + break; + + case "GetAssistants": + getAssistants(); + break; + + case "GetAssistantHistory": + getAssistantHistory(); + break; + + case "BlockAssistant": + blockAssistant(); + break; + + case "UnBlockAssistant": + unBlockAssistant(); + break; + + case "GetBlocksAssistant": + getBlocksAssistant(); + break; + + case "MapStatic": + mapStatic(); + break; + + case "MapReverse": + mapReverse(); + break; + + case "SendLocationMsg": + sendLocationMsg(); + break; + + case "GetSentryLogs": + getSentryLogs(); + break; + + case "SearchMap": + searchMap(); + break; + + case "RouteMap": + routeMap(); + break; + } + } + + + private void loadData() { + movieList = Utils.loadJSONFromAsset(this); + getHeaderAndChild(movieList); + } + + private void getHeaderAndChild(List movieList) { + for (Method method : movieList) { + List movieList1 = categoryMap.get(method.getCategoty()); + if (movieList1 == null) { + movieList1 = new ArrayList<>(); + } + movieList1.add(method); + categoryMap.put(method.getCategoty(), movieList1); + } + + Log.d("Map", categoryMap.toString()); + Iterator>> it = categoryMap.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry> pair = it.next(); + Log.d("Key", pair.getKey()); + expandablePlaceHolderView.addView(new HeaderView(this, pair.getKey())); + List movieList1 = pair.getValue(); + for (Method movie : movieList1) { + expandablePlaceHolderView.addView(new ChildView(this, movie, this::onMethodClick)); + } + it.remove(); + } + } + + + private void setListeners() { + //new + btConnect.setOnClickListener(this); + btSendMsg.setOnClickListener(this::sendMessage); + btChangeThreadId.setOnClickListener(this::setThreadId); + btSettoken.setOnClickListener(this::setToken); + + // end new + +// +// buttonFileChoose.setOnClickListener(this); +// buttonFileChoose.setOnLongClickListener(v -> { +// +// presenter.shareLogs(); +// return true; +// }); - return true; - }); } private void init() { - faker = new Faker(); Logger.addLogAdapter(new AndroidLogAdapter()); setContentView(R.layout.activity_chat); - imageMap = findViewById(R.id.imageMap); - textViewState = findViewById(R.id.textViewStateChat); - TextView textViewToken = findViewById(R.id.textViewUserId); - percentage = findViewById(R.id.percentage); - percentageFile = findViewById(R.id.percentageFile); - editText = findViewById(R.id.editTextMessage); - editTextToken = findViewById(R.id.editTextToken); - editTextThread = findViewById(R.id.editTextThread); - ConstraintLayout constraintLayout = findViewById(R.id.constraintLayout); - buttonFileChoose = findViewById(R.id.buttonFileChoose); - buttonConnect = findViewById(R.id.buttonConnect); - buttonToken = findViewById(R.id.buttonToken); - btnUploadFile = findViewById(R.id.buttonUploadFileProgress); - btnUploadImage = findViewById(R.id.buttonUploadImageProgress); - - textViewToken.setText(TOKEN + name); - Spinner spinner = findViewById(R.id.spinner); - Spinner spinnerSecond = findViewById(R.id.spinnerSecond); - Spinner spinnerThird = findViewById(R.id.spinnerThird); - setupFirstSpinner(spinner); - setupSecondSpinner(spinnerSecond); - setupThirdSpinner(spinnerThird); - presenter = new ChatPresenter(this, this, this); + // new ui + btConnect = findViewById(R.id.btConnect); + tvState = findViewById(R.id.tvState); + tvUserInfo = findViewById(R.id.tvUserInfo); + tvServerType = findViewById(R.id.tvServerType); + et_text = findViewById(R.id.et_text); + btSendMsg = findViewById(R.id.btSendMsg); + btChangeThreadId = findViewById(R.id.btChangeThreadId); + btSettoken = findViewById(R.id.btSettoken); + // end of + presenter = new ChatPresenter(this, this, this); presenter.clearNotifications(); + } + + + @Override + public void onGetUserInfo(ChatResponse outPutUserInfo) { + tvUserInfo.setText(outPutUserInfo.getResult().getUser().getName()); } @@ -398,6 +715,8 @@ private void getNotificationData() { } } + //for log events + //this is for showing sample notification on current device private void showNotification() { @@ -430,8 +749,6 @@ private void showNotification() { } - //for log events - @Override public void onLogEvent(String log) { Logger.json(log); @@ -439,146 +756,9 @@ public void onLogEvent(String log) { @Override public void onState(String state) { - runOnUiThread(() -> textViewState.setText(state)); - } - - private void setupThirdSpinner(Spinner spinnerThird) { - - - ArrayAdapter adapterSpinner = - new ArrayAdapter<>(this, - android.R.layout.simple_spinner_item, - ConstantSample.funcThird); - - adapterSpinner - .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerThird - .setAdapter(adapterSpinner); - spinnerThird - .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (position) { - case 0: - break; - case 1: - searchMap(); - break; - case 2: - routeMap(); - break; - case 3: - blockContact(); - break; - case 4: - unblockContact(); - break; - case 5: { - getBlockedList(); - break; - } - case 6: { - updateThreadInfo(); - break; - } - - case 7: { - seenMessageList(); - break; - - } - case 8: - getDeliverMessageList(); - break; - case 9: { - createThreadWithMessage(); - break; - } - case 10: - getThreadWithCoreUser(); - break; - case 11: - mapStatic(); - break; - case 12: - mapReverse(); - break; - case 13: - sendLocationMsg(); - break; - case 14: - setAdminRules(); - break; - case 15: - startTyping(); - break; - case 16: { - stopTyping(); - break; - } - case 17: { - removeAdminRules(); - break; - } - case 18: { - addAuditor(); - break; - } - case 19: { - removeAuditor(); - break; - } - case 20: { - createThreadWithFile(); - break; - } - case 21: { - getUserRoles(); - break; - } - case 22: { - downloadFile(); - break; - } - case 23: { - cancelDownloadImage(); - break; - } - - case 24: { - presenter.getCacheSize(); - break; - } - - case 25: { - - clearCache(); - - break; - } - - case 26: { - - getStorageSize(); - - break; - } - - case 27: { - clearStorage(); - break; - } - - - } - } - - - @Override - public void onNothingSelected(AdapterView parent) { - Toast.makeText(ChatActivity.this, "\\__('?')__/", Toast.LENGTH_SHORT).show(); - } - }); + runOnUiThread(() -> { + tvState.setText(state); + }); } private void getStorageSize() { @@ -590,7 +770,7 @@ private void getBlockedList() { new RequestBlockList.Builder() .count(50) .offset(0) -// .withNoCache() +// .withNoCache() .build(); presenter.getBlockList(request); @@ -637,7 +817,6 @@ private void getDeliverMessageList() { presenter.deliveredMessageList(requestD); } - private void seenMessageList() { RequestSeenMessageList requests = new RequestSeenMessageList @@ -649,21 +828,21 @@ private void updateThreadInfo() { // RequestUploadImage requestUploadImage = -// new RequestUploadImage.Builder(ChatActivity.this, getUri()) -// .sethC(140) -// .setwC(140) -// .setUserGroupHashCode(TEST_THREAD_HASH) -// .build(); +// new RequestUploadImage.Builder(ChatActivity.this, getUri()) +// .sethC(140) +// .setwC(140) +// .setUserGroupHashCode(TEST_THREAD_HASH) +// .build(); RequestThreadInfo request = new RequestThreadInfo.Builder(TEST_THREAD_ID) - .name("Chat sample thread") // required. if not set, thread name will set to null -// .metadata("{}") // required. if not set, thread metadata will set to null - .image("https://podspace.pod.ir/nzh/drive/downloadImage?hash=ELJIHZN9NP37ZIDA") // required. if not set, thread image will set to null + .name("Chat sample thread") // required. if not set, thread name will set to null +// .metadata("{}") // required. if not set, thread metadata will set to null + .image("https://podspace.pod.ir/nzh/drive/downloadImage?hash=ELJIHZN9NP37ZIDA") // required. if not set, thread image will set to null .description("this is test description updated on " + new Date().toString()) // required. if not set, thread name will set to null -// .setUploadThreadImageRequest(requestUploadImage) // set when you wanna upload thread image -// .setUserGroupHash(TEST_THREAD_HASH) // set when you wanna upload thread image +// .setUploadThreadImageRequest(requestUploadImage) // set when you wanna upload thread image +// .setUserGroupHash(TEST_THREAD_HASH) // set when you wanna upload thread image .build(); presenter.updateThreadInfo(request); @@ -671,7 +850,7 @@ private void updateThreadInfo() { private void unblockContact() { Long ubThreadId = null; -// Long ubUserId = 121L; +// Long ubUserId = 121L; Long ubUserId = null; Long ubContactId = null; Long unblockId = (long) TEST_THREAD_ID; @@ -719,7 +898,7 @@ private void createThreadWithMessage() { RequestThreadInnerMessage message = new RequestThreadInnerMessage .Builder("Hi at " + new Date().toString(), TextMessageType.Constants.TEXT) -// .forwardedMessageIds(listForwardIds) +// .forwardedMessageIds(listForwardIds) .build(); RequestCreateThread requestCreateThread = new RequestCreateThread @@ -732,7 +911,6 @@ private void createThreadWithMessage() { } - private void cancelDownloadImage() { @@ -743,7 +921,6 @@ private void cancelDownloadImage() { } - private void downloadWithGlide() { try { @@ -763,17 +940,16 @@ private void downloadWithGlide() { GlideUrl glideUrl = new GlideUrl(url, header); - Glide.with(this) - .applyDefaultRequestOptions(requestOptions) - .load(glideUrl) - .into(imageMap); +// Glide.with(this) +// .applyDefaultRequestOptions(requestOptions) +// .load(glideUrl) +// .into(imageMap); } catch (Exception e) { e.printStackTrace(); } } - private void downloadFile() { @@ -803,7 +979,7 @@ private void downloadFile() { RequestGetPodSpaceImage rePodImage = new RequestGetPodSpaceImage .Builder("613Q7WCCEXZ1DGY5") -// .setCrop(true) +// .setCrop(true) .setQuality(0.45f) .build(); @@ -855,7 +1031,9 @@ public void onFileReady(ChatResponse response) { try { Bitmap v = BitmapFactory.decodeFile(response.getResult().getFile().getAbsolutePath()); - runOnUiThread(() -> imageMap.setImageBitmap(v)); + runOnUiThread(() -> { +// imageMap.setImageBitmap(v) + }); } catch (Exception e) { e.printStackTrace(); Log.e("DOWNLOAD", "Not Image"); @@ -871,58 +1049,57 @@ public void onFileReady(ChatResponse response) { // downloadingId = presenter.downloadFile(requestGetImage, new ProgressHandler.IDownloadFile() { // // -// @Override -// public void onProgressUpdate(String uniqueId, int bytesDownloaded, int totalBytesToDownload) { -// Log.e("DOWNLOAD", "IN ACTIVITY: " + "Downloaded: " + bytesDownloaded + " Left: " + totalBytesToDownload); +// @Override +// public void onProgressUpdate(String uniqueId, int bytesDownloaded, int totalBytesToDownload) { +// Log.e("DOWNLOAD", "IN ACTIVITY: " + "Downloaded: " + bytesDownloaded + " Left: " + totalBytesToDownload); // -// } +// } // -// @Override -// public void onProgressUpdate(String uniqueId, int progress) { +// @Override +// public void onProgressUpdate(String uniqueId, int progress) { // -// } +// } // -// @Override -// public void onError(String uniqueId, String error, String url) { -// Log.e("DOWNLOAD", "IN ACTIVITY: ERROR :((("); +// @Override +// public void onError(String uniqueId, String error, String url) { +// Log.e("DOWNLOAD", "IN ACTIVITY: ERROR :((("); // -// } +// } // -// @Override -// public void onLowFreeSpace(String uniqueId, String url) { -// Log.e("DOWNLOAD", "Low Space..."); +// @Override +// public void onLowFreeSpace(String uniqueId, String url) { +// Log.e("DOWNLOAD", "Low Space..."); // -// } +// } // -// @Override -// public void onFileReady(ChatResponse response) { -// Log.e("DOWNLOAD", "IN ACTIVITY: Finish File!!!!"); -// Log.e("DOWNLOAD", "File name: " + response.getResult().getFile().getName()); -// Log.e("DOWNLOAD", "Uri " + response.getResult().getUri()); -// Log.e("DOWNLOAD", "File Exist " + response.getResult().getFile().exists()); +// @Override +// public void onFileReady(ChatResponse response) { +// Log.e("DOWNLOAD", "IN ACTIVITY: Finish File!!!!"); +// Log.e("DOWNLOAD", "File name: " + response.getResult().getFile().getName()); +// Log.e("DOWNLOAD", "Uri " + response.getResult().getUri()); +// Log.e("DOWNLOAD", "File Exist " + response.getResult().getFile().exists()); // // -// if (response.getResult().getFile().exists()) { +// if (response.getResult().getFile().exists()) { // // -// try { -// Bitmap v = BitmapFactory.decodeFile(response.getResult().getFile().getAbsolutePath()); -// runOnUiThread(() -> imageMap.setImageBitmap(v)); -// } catch (Exception e) { -// e.printStackTrace(); -// } +// try { +// Bitmap v = BitmapFactory.decodeFile(response.getResult().getFile().getAbsolutePath()); +// runOnUiThread(() -> imageMap.setImageBitmap(v)); +// } catch (Exception e) { +// e.printStackTrace(); +// } // -// } +// } // // -// } +// } // // }); } - private void getUserRoles() { RequestGetUserRoles req = new RequestGetUserRoles.Builder() @@ -976,10 +1153,10 @@ private void createThreadWithFile() { // invite.add(new Invitee(1196793, InviteType.Constants.TO_BE_USER_CONTACT_ID)); // RequestThreadInnerMessage innerMessage = new RequestThreadInnerMessage -// .Builder(TextMessageType.Constants.PICTURE) -// // .message("Create thread for File Message Test " + new Date().toString()) -//// .forwardedMessageIds(listForwardIds) -// .build(); +// .Builder(TextMessageType.Constants.PICTURE) +// // .message("Create thread for File Message Test " + new Date().toString()) +//// .forwardedMessageIds(listForwardIds) +// .build(); RequestCreateThreadWithFile request = new RequestCreateThreadWithFile @@ -989,7 +1166,7 @@ private void createThreadWithFile() { TextMessageType.Constants.POD_SPACE_FILE) .title("Test File PodSpace") .setUploadThreadImageRequest(requestUploadThreadImageImage) -// .message(innerMessage) +// .message(innerMessage) .build(); @@ -1056,6 +1233,20 @@ private void removeAuditor() { } + +// private void stopSignalMessage() { +// presenter.stopSignalMessage(getSignalUniq()); +// } +// +// private void startSignalMessage() { +// RequestSignalMsg requestSignalMsg = new RequestSignalMsg.Builder() +// .signalType(ChatMessageType.SignalMsg.IS_TYPING) +// .threadId(1961) +// .build(); +// String uniq = presenter.startSignalMessage(requestSignalMsg); +// setSignalUniq(uniq); +// } + private void addAuditor() { ArrayList typeRoles = new ArrayList<>(); @@ -1077,20 +1268,6 @@ private void addAuditor() { } - -// private void stopSignalMessage() { -// presenter.stopSignalMessage(getSignalUniq()); -// } -// -// private void startSignalMessage() { -// RequestSignalMsg requestSignalMsg = new RequestSignalMsg.Builder() -// .signalType(ChatMessageType.SignalMsg.IS_TYPING) -// .threadId(1961) -// .build(); -// String uniq = presenter.startSignalMessage(requestSignalMsg); -// setSignalUniq(uniq); -// } - private void setAdminRules() { //core 1507 // thread id 1961 @@ -1252,30 +1429,29 @@ private String getMetaData() { // return "{\"actionType\":1,\"data\":\"{\"amount\":100,\"description\":\"\",\"id\":161,\"state\":1,\"destUserId\":1900896}\"}"; } - @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { // if (requestCode == REQUEST_WRITE_EXTERNAL_STORAGE) { // -// if (grantResults.length > 0 -// && grantResults[0] == PackageManager.PERMISSION_GRANTED) { +// if (grantResults.length > 0 +// && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // -// String center = "35.7003510,51.3376472"; +// String center = "35.7003510,51.3376472"; // -// RequestLocationMessage requestLocationMessage = new RequestLocationMessage -// .Builder() -// .center(center) -// .message("This is location ") -// .activity(ChatActivity.this) -// .threadId(TEST_THREAD_ID) -// .build(); +// RequestLocationMessage requestLocationMessage = new RequestLocationMessage +// .Builder() +// .center(center) +// .message("This is location ") +// .activity(ChatActivity.this) +// .threadId(TEST_THREAD_ID) +// .build(); // -// presenter.sendLocationMessage(requestLocationMessage); +// presenter.sendLocationMessage(requestLocationMessage); // // -// } +// } // } @@ -1298,114 +1474,6 @@ public void mapStatic() { presenter.mapStaticImage(staticImage); } - //Function second - private void setupSecondSpinner(Spinner spinnerSecond) { - - ArrayAdapter adapterSpinner = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, ConstantSample.funcSecond); - final String[] fileUnique = new String[1]; - adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerSecond.setAdapter(adapterSpinner); - spinnerSecond.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (position) { - case 0: -// "Choose function", - break; - case 1: - - presenter.syncContact(ChatActivity.this); - break; - case 2: - - sendFileMessage(fileUnique); - - break; - case 3: - uploadImage(); - case 4: -// presenter.uploadFile(ChatSandBoxActivity.this, getUri()); - break; - case 5: - removeParticipants(); - - break; - case 6: - addParticipants(); - - break; - case 7: - leaveThread(); - - break; - case 8: - deleteMessage(); - - break; - case 9: - searchContact(); - break; - case 10: - searchHistory(); - - break; - case 11: - break; - case 12: - cancelUpload(fileUnique[0]); - break; - case 13: - retryUpload(); - - break; - case 14: { - clearHistory(); - } - break; - case 15: { - //2139 - getAdminList(); - break; - } - case 16: { - spamThread(); - break; - } - case 17: { - seenMessage(); - break; - } - case 18: { - updateUserProfile(); - break; - } - case 19: { - createBot(); - break; - } - case 20: { - defineBotCommand(); - break; - } - case 21: { - startBot(); - break; - } - case 22: { - stopBot(); - break; - } - } - } - - - - @Override - public void onNothingSelected(AdapterView parent) { - Toast.makeText(ChatActivity.this, "\\__('?')__/", Toast.LENGTH_SHORT).show(); - } - }); - } private void leaveThread() { presenter.leaveThread(TEST_THREAD_ID, new ChatHandler() { @@ -1456,7 +1524,7 @@ private void searchHistory() { .Builder("name") .is("sina") .build(); - NosqlListMessageCriteriaVO criteriaVO = new NosqlListMessageCriteriaVO.Builder(231) + SearchSystemMetadataRequest criteriaVO = new SearchSystemMetadataRequest.Builder(231) .count(10) .metadataCriteria(builderMeta) .build(); @@ -1466,13 +1534,13 @@ private void searchHistory() { private void searchContact() { RequestSearchContact requestSearchContact = new RequestSearchContact .Builder("0", "20") -// .id("2247") -// .cellphoneNumber("0938") -// .lastName("kHeI") -// .firstName("fAr") +// .id("2247") +// .cellphoneNumber("0938") +// .lastName("kHeI") +// .firstName("fAr") .query("pO") -// .order("desc") -// .email("masoudmanson@gmail.com") +// .order("desc") +// .email("masoudmanson@gmail.com") .build(); presenter.searchContact(requestSearchContact); @@ -1489,12 +1557,12 @@ private void sendFileMessage(String[] fileUnique) { getUri(), TextMessageType.Constants.POD_SPACE_PICTURE) // constructor .description("test file message") -// .systemMetadata(getMetaData()) +// .systemMetadata(getMetaData()) .setUserGroupHash(TEST_THREAD_HASH) -// .setImageHc("100") -// .setImageWc("100") -// .setImageXc("1") -// .setImageYc("1") +// .setImageHc("100") +// .setImageWc("100") +// .setImageXc("1") +// .setImageYc("1") .build(); fileUnique[0] = presenter.sendFileMessage(request, @@ -1529,56 +1597,105 @@ public void onError(String jsonError, ErrorOutPut error) { }); -// fileUnique[0] = presenter.sendFileMessage( -// ChatActivity.this, -// ChatActivity.this, -// "test file message", -// TEST_THREAD_ID, -// getUri(), -// getMetaData(), -// TextMessageType.Constants.PICTURE, -// new ProgressHandler.sendFileMessage() { -// @Override -// public void onProgressUpdate(String uniqueId, int progress, int totalBytesSent, int totalBytesToSend) { +// fileUnique[0] = presenter.sendFileMessage( +// ChatActivity.this, +// ChatActivity.this, +// "test file message", +// TEST_THREAD_ID, +// getUri(), +// getMetaData(), +// TextMessageType.Constants.PICTURE, +// new ProgressHandler.sendFileMessage() { +//@Override +//public void onProgressUpdate(String uniqueId, int progress, int totalBytesSent, int totalBytesToSend) { // -// Log.e("SFM", "Sending files message: " + progress + " * " + totalBytesSent + " * " + totalBytesToSend); -// } +// Log.e("SFM", "Sending files message: " + progress + " * " + totalBytesSent + " * " + totalBytesToSend); +//} // -// @Override -// public void onFinishImage(String json, ChatResponse chatResponse) { +//@Override +//public void onFinishImage(String json, ChatResponse chatResponse) { // -// Log.e("SFM", "onFinishImage"); +// Log.e("SFM", "onFinishImage"); // -// } +//} // -// @Override -// public void onFinishFile(String json, ChatResponse chatResponse) { +//@Override +//public void onFinishFile(String json, ChatResponse chatResponse) { // -// Log.e("SFM", "onFinishFile"); +// Log.e("SFM", "onFinishFile"); // -// } +//} // -// @Override -// public void onError(String jsonError, ErrorOutPut error) { +//@Override +//public void onError(String jsonError, ErrorOutPut error) { // -// Log.e("SFM", "onError"); +// Log.e("SFM", "onError"); // // -// } -// }); +//} +// }); } - private void stopBot() { StartAndStopBotRequest request = new StartAndStopBotRequest.Builder(TEST_THREAD_ID, "TEST2BOT") .build(); - presenter.stopBot(request); + presenter.stopBot(request); + + } + + private void getUserBots() { + + GetUserBotsRequest request = new GetUserBotsRequest.Builder().build(); + + presenter.getUserBots(request); + + } + + public void createTag() { + CreateTagRequest request = new CreateTagRequest.Builder("Tag_" + System.currentTimeMillis() / 1000).build(); + presenter.createTag(request); + } + + public void editTag() { + EditTagRequest request = new EditTagRequest.Builder(tagId, "PrivateThreads" + System.currentTimeMillis()).build(); + presenter.editTag(request); + } + + public void deleteTag() { + DeleteTagRequest request = new DeleteTagRequest.Builder(tagId).build(); + presenter.deleteTag(request); + } + + public void addTagParticipant() { + List threadIds = new ArrayList<>(); + threadIds.add(8688l); + threadIds.add(8730l); + threadIds.add(8729l); + AddTagParticipantRequest request = new AddTagParticipantRequest.Builder(tagId, threadIds).build(); + presenter.addTagParticipant(request); + } + + public void getTagList() { + GetTagListRequest request = new GetTagListRequest.Builder().build(); + presenter.getTagList(request); + } + public void removeTagParticipant() { + List threadIds = new ArrayList<>(); + threadIds.add(8688l); + threadIds.add(8730l); + threadIds.add(8729l); + RemoveTagParticipantRequest request = new RemoveTagParticipantRequest.Builder(tagId, threadIds).build(); + presenter.removeTagParticipant(request); } + @Override + public void onTagCreated(TagResult result) { + tagId = result.getTag().getTagId(); + } private void startBot() { @@ -1605,7 +1722,7 @@ private void defineBotCommand() { private void createBot() { - CreateBotRequest request = new CreateBotRequest.Builder("TEST2BOT") + CreateBotRequest request = new CreateBotRequest.Builder("TEST123BOT") .build(); presenter.createBot(request); @@ -1648,12 +1765,12 @@ private void getAdminList() { //2115 //2107 RequestGetAdmin requestGetAdmin = new RequestGetAdmin -// .Builder(10654,true) +// .Builder(10654,true) .Builder(TEST_THREAD_ID) -// .admin(true) -// .count(50) -// .threadId(TEST_THREAD_ID) -// .withNoCache() +// .admin(true) +// .count(50) +// .threadId(TEST_THREAD_ID) +// .withNoCache() .build(); presenter.getAdminList(requestGetAdmin); @@ -1679,24 +1796,36 @@ public void deleteMessage() { // presenter.deleteMessage(16804, true, new ChatHandler() { -// @Override -// public void onDeleteMessage(String uniqueId) { -// super.onDeleteMessage(uniqueId); -// } +// @Override +// public void onDeleteMessage(String uniqueId) { +// super.onDeleteMessage(uniqueId); +// } // }); } private void removeParticipants() { + List inviteeList = new ArrayList<>(); List participantIds = new ArrayList<>(); - participantIds.add(11925L); - participantIds.add(5581L); - participantIds.add(1261L); + participantIds.add(18476L); +// participantIds.add(5581L); +// participantIds.add(1261L); + + + //SET INVITEE LIST + Invitee invite = new Invitee("30150", InviteType.Constants.TO_BE_CORE_USER_ID); + Invitee invite2 = new Invitee("43593", InviteType.Constants.TO_BE_CORE_USER_ID); + // Invitee invite2 = new Invitee("5736", InviteType.Constants.TO_BE_CORE_USER_ID); + inviteeList.add(invite); + // inviteeList.add(invite2); + + long threadId = TEST_THREAD_ID; - RequestRemoveParticipants request = new RequestRemoveParticipants - .Builder(threadId, participantIds) + RemoveParticipantRequest request = new RemoveParticipantRequest + .Builder(threadId, null) + .setInvitees(inviteeList) .build(); presenter.removeParticipants(request, null); @@ -1710,14 +1839,14 @@ private void addParticipants() { RequestAddParticipants request = RequestAddParticipants .newBuilder() .threadId((long) TEST_THREAD_ID) -// .withCoreUserIds(982L, 5241L) -// .withUserNames("a.rokni", -// "ms.alavizadeh", -// "bhamidpour", -// "z.morshedi", -// "m.rashed") -// .withContactIds(10001L,1000L) -// .withContactId(1000L) +// .withCoreUserIds(982L, 5241L) +// .withUserNames("a.rokni", +// "ms.alavizadeh", +// "bhamidpour", +// "z.morshedi", +// "m.rashed") +// .withContactIds(10001L,1000L) +// .withContactId(1000L) .withUsername("TEST2BOT") .build(); @@ -1727,16 +1856,6 @@ private void addParticipants() { } - private void setupFirstSpinner(Spinner spinner) { - ArrayAdapter adapter = new ArrayAdapter<>(this, - android.R.layout.simple_spinner_item, ConstantSample.func); - - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner.setAdapter(adapter); - spinner.setOnItemSelectedListener(this); - } - - public void sendMessage(View view) { // Inviter inviter = new Inviter(); @@ -1748,214 +1867,57 @@ public void sendMessage(View view) { RequestMessage request = new RequestMessage.Builder("Salam", 1000) .messageType(TextMessageType.Constants.TEXT) .build(); - - - presenter.sendTextMessage(editText.getText().toString(), TEST_THREAD_ID, TextMessageType.Constants.TEXT, meta, null); - - editText.setText(""); +// +// + presenter.sendTextMessage(et_text.getText().toString(), TEST_THREAD_ID, TextMessageType.Constants.TEXT, meta, null); +// +// +// editText.setText(""); // presenter.sendTextMessage("test at" + " " + new Date().getTime() + name -// , 1576, 2, meta, null); +// , 1576, 2, meta, null); // -// new ChatHandler() { -// @Override -// public void onSent(String uniqueId, long threadId) { -// super.onSent(uniqueId, threadId); -// Toast.makeText(ChatActivity.this, "its worked", Toast.LENGTH_SHORT).show(); -// } +// new ChatHandler() { +// @Override +// public void onSent(String uniqueId, long threadId) { +// super.onSent(uniqueId, threadId); +// Toast.makeText(ChatActivity.this, "its worked", Toast.LENGTH_SHORT).show(); +// } // -// @Override -// public void onSentResult(String content) { -// super.onSentResult(content); -// if (content != null) { -// Toast.makeText(ChatActivity.this, "no null", Toast.LENGTH_SHORT).show(); +// @Override +// public void onSentResult(String content) { +// super.onSentResult(content); +// if (content != null) { +// Toast.makeText(ChatActivity.this, "no null", Toast.LENGTH_SHORT).show(); // -// } -// } -// }); +// } +// } +// }); // presenter.sendTextMessage("test at" + " " + new Date().getTime() + name -// , 312, meta, new Chat.SendTextMessageHandler() { -// @Override -// public void onSent(String uniqueId, long threadId) { +// , 312, meta, new Chat.SendTextMessageHandler() { +// @Override +// public void onSent(String uniqueId, long threadId) { // -// } -// }); +// } +// }); // String text = editText.getText().toString(); //// long textThread = Long.valueOf(editTextThread.getText().toString()); //// if (!text.equals("")) { -//// presenter.sendTextMessage(text, 381, null); +//// presenter.sendTextMessage(text, 381, null); //// } else { -//// Toast.makeText(this, "Message is Empty", Toast.LENGTH_SHORT).show(); +//// Toast.makeText(this, "Message is Empty", Toast.LENGTH_SHORT).show(); //// } } - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (position) { - case 0: -// "Choose function", - break; - case 1: - //"get thread" - getThreads(); - break; - case 2: - //"rename thread", - renameTHread(); - break; - case 3: - getUserInfo(); - - break; - case 4: - //"reply message", -// replyMessage(); - - replyFileMessage(); - - break; - case 5: - /**forward message */ - forwardMessage(); - break; - case 6: - //"send text message", - break; - case 7: - //"get thread participant", - getThreadParticipants(); - - - break; - case 8: - createThread(); - - break; - case 9: - //get thread history - getThreadHistory(); - - break; - case 10: - //"mute thread", - muteThread(); - - break; - case 11: - //"un mute thread" - unMuteThread(); - - break; - case 12: - //"get contacts" - getContacts(); - - break; - case 13: - //"edit message" - editMessage(); - - break; - case 14: - addContact(); - break; - case 15: - // remove contact - removeContact(); - break; - case 16: - /** UPDATE CONTACTS*/ - updateContact(); - case 17: { - /** GET LAST SEEN **/ - - getNotSeenDur(); - - break; - } - case 18: { - /** - * Pin ConversationVO - */ - - pinThreadToTop(); - - break; - - } - case 19: { - /** - * UnPin ConversationVO - */ - - unPinThread(); - - break; - - } - - - case 20: { - pinMessageToTop(); - break; - } - - case 21: { - unpinMessage(); - break; - } - - case 22: { - - getMentionList(); - - break; - } - - case 23: { - - checkIsNameAvailable(); - - break; - } - - case 24: { - - createPublicThread(); - - break; - - } - - case 25: { - - joinPublicThread(); - - break; - } - case 26:{ - - closeThread(); - - break; - } - case 27:{ - - getSentryLogs(); - - break; - } - - } - } private void closeThread() { presenter.closeThread(TEST_THREAD_ID); } + private void getSentryLogs() { presenter.getSentryLogs(); @@ -1964,12 +1926,12 @@ private void getSentryLogs() { private void getMentionList() { RequestGetMentionList req = new RequestGetMentionList .Builder(TEST_THREAD_ID) -// .setAllMentioned(true) -// .setUnreadMentioned(true) -// .unreadMentions() +// .setAllMentioned(true) +// .setUnreadMentioned(true) +// .unreadMentions() .offset(0) .count(25) -// .withNoCache() +// .withNoCache() .build(); presenter.getMentionList(req); @@ -2007,11 +1969,90 @@ private void pinThreadToTop() { presenter.pinThread(requestPinThread); } + private void registerAssistant() { + //63263 kheirkhah + ////63264 anvari + + //63254 sajadi + //63256 amjadi + //63257 zhiani + //invite list + + //103187 nemati sandbox +// 52987 sajadi 9063 sandbox + Invitee invite = new Invitee("63256", InviteType.Constants.TO_BE_USER_CONTACT_ID); + + //roles + ArrayList typeRoles = new ArrayList<>(); + typeRoles.add(RoleType.Constants.REMOVE_ROLE_FROM_USER); + + + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVo.setContactType("default"); + assistantVo.setRoles(typeRoles); + + assistantVos.add(assistantVo); + + RegisterAssistantRequest request = new RegisterAssistantRequest.Builder(assistantVos).build(); + + presenter.registerAssistant(request); + } + + private void deactiveAssistant() { + + //invite +// Invitee invite = new Invitee("52987", InviteType.Constants.TO_BE_USER_CONTACT_ID); + Invitee invite = new Invitee("63256", InviteType.Constants.TO_BE_USER_CONTACT_ID); + + + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVos.add(assistantVo); + + + DeActiveAssistantRequest request = new DeActiveAssistantRequest.Builder(assistantVos).build(); + presenter.deActiveAssistant(request); + } + + private void getAssistants() { + GetAssistantRequest request = new GetAssistantRequest.Builder().typeCode("default").setOffset(0).setCount(2).build(); + + presenter.getAssistants(request); + + } + + private void getAssistantHistory() { + GetAssistantHistoryRequest request = new GetAssistantHistoryRequest.Builder().build(); + presenter.getAssistantHistory(request); + } + + private void changePublicThreadToPrivate() { + ChangeThreadTypeRequest request = new ChangeThreadTypeRequest.Builder(8093, 1).build(); + presenter.changeThreadType(request); + + } + + private void getMutualGroup() { + Invitee invite = new Invitee("63256", InviteType.Constants.TO_BE_USER_CONTACT_ID); + GetMutualGroupRequest request = new GetMutualGroupRequest.Builder(invite).build(); + presenter.getMutualGroups(request); + + } + + private void changePrivateThreadToPublic() { + String UniqName = "PrivatethreadConverted_" + System.currentTimeMillis() / 1000; + ChangeThreadTypeRequest request = new ChangeThreadTypeRequest.Builder(8093, 2).setUniqname(UniqName).build(); + presenter.changeThreadType(request); + } + private void getNotSeenDur() { ArrayList testArray = new ArrayList<>(); testArray.add(2); testArray.add(1); -// testArray.add(123); +// testArray.add(123); getNotSeenDuration(testArray); } @@ -2020,56 +2061,58 @@ private void removeContact() { } private void addContact() { + +// {"id":344016830,"senderName":"chat-server","senderId":0,"type":4,"content":"{\"type\":23,\"messageType\":0,\"subjectId\":0,\"uniqueId\":\"fe08a72b-09eb-45b2-b6b2-03cd4dab4855\",\"content\":\"{\\\"id\\\":15424,\\\"coreUserId\\\":31257,\\\"sendEnable\\\":true,\\\"receiveEnable\\\":true,\\\"name\\\":\\\"رضا شریفی\\\",\\\"cellphoneNumber\\\":\\\"09365090061\\\",\\\"email\\\":\\\"rezasharify1993.rsmi@gmail.com\\\",\\\"username\\\":\\\"user-15778858615492\\\",\\\"contactSynced\\\":true}\",\"time\":1606317640273}"} // add contact -// presenter.addContact("", -// "", -// "", -// faker.name().username() + "@gmail.com", -// ""); +// presenter.addContact("", +// "", +// "", +// faker.name().username() + "@gmail.com", +// ""); // -// presenter.addContact("", -// "", -// "", -// "", -// ""); +// presenter.addContact("", +// "", +// "", +// "", +// ""); // 16844 zabix1 List usernames = new ArrayList<>(); - usernames.add("z.mohammadi"); - usernames.add("p.khoshghadam"); - usernames.add("m.hasanpour"); - usernames.add("z.ershad"); - usernames.add("Samira.amiri"); - usernames.add("s.heydarizadeh"); - usernames.add("p.pahlavani"); +// usernames.add("z.mohammadi"); +// usernames.add("p.khoshghadam"); +// usernames.add("m.hasanpour"); +// usernames.add("z.ershad"); +// usernames.add("Samira.amiri"); +// usernames.add("s.heydarizadeh"); +// usernames.add("p.pahlavani"); usernames.add("ma.amjadi"); -// for (String user : -// usernames) { +// for (String user : +// usernames) { // // -// try { -// RequestAddContact request = new RequestAddContact.Builder() -// .firstName(user + " n ") -// .lastName(user + " i ") -// .username(user) -// .build(); +// try { +// RequestAddContact request = new RequestAddContact.Builder() +// .firstName(user + " n ") +// .lastName(user + " i ") +// .username(user) +// .build(); // -// presenter.addContact(request); +// presenter.addContact(request); // -// Thread.sleep(7000); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } +// Thread.sleep(7000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } // // -// } +// } RequestAddContact request = new RequestAddContact.Builder() - .firstName("مسعود") - .lastName("امجدی") - .username("ma.amjadi") + .firstName("Leila") + .lastName("Nemati") + .cellphoneNumber("09126975376") //80617 //80618 // .cellphoneNumber() // .email() .build(); @@ -2080,7 +2123,7 @@ private void addContact() { private void editMessage() { Inviter inviter = new Inviter(); inviter.setName("farhad"); -// String meta = "\"{\\\"actionType\\\":1,\\\"data\\\":\\\"{\\\"amount\\\":1500,\\\"description\\\":\\\"\\\",\\\"id\\\":161,\\\"state\\\":2,\\\"destUserId\\\":1900896}\\\"}\""; +// String meta = "\"{\\\"actionType\\\":1,\\\"data\\\":\\\"{\\\"amount\\\":1500,\\\"description\\\":\\\"\\\",\\\"id\\\":161,\\\"state\\\":2,\\\"destUserId\\\":1900896}\\\"}\""; JsonObject a = new JsonObject(); // @@ -2090,9 +2133,9 @@ private void editMessage() { a.addProperty("state", 2); a.addProperty("destUserId", 1900897); -// a.addProperty("name", "farhad"); -// a.addProperty("family", "kheirkhah"); -// a.addProperty("phoneNumber", "989157770684"); +// a.addProperty("name", "farhad"); +// a.addProperty("family", "kheirkhah"); +// a.addProperty("phoneNumber", "989157770684"); String meta = gson.toJson(a); @@ -2147,7 +2190,7 @@ private void getThreadParticipants() { .count(20) .offset(0) .threadId(TEST_THREAD_ID) -// .withNoCache() +// .withNoCache() .build(); @@ -2155,15 +2198,12 @@ private void getThreadParticipants() { // presenter.getThreadParticipant(20, null, TEST_THREAD_ID, new ChatHandler() { -// @Override -// public void onGetThreadParticipant(String uniqueId) { -// super.onGetThreadParticipant(uniqueId); -// } +// @Override +// public void onGetThreadParticipant(String uniqueId) { +// super.onGetThreadParticipant(uniqueId); +// } // }); } - - //21622 - public static final String THREAD_UNIQUE_NAME = "unique_name_4_1584016531111"; // public static final String THREAD_UNIQUE_NAME = "unique_name_4_" + new Date().getTime(); private void joinPublicThread() { @@ -2195,7 +2235,7 @@ private void createPublicThread() { Arrays.asList(invite), THREAD_UNIQUE_NAME) .withDescription("desc at " + new Date()) - .title("My Public Group") + .title("My Public Group 22") .withImage("http://google.com") .withMetadata(metac) .build(); @@ -2264,23 +2304,22 @@ private void createThread() { * ---->private int idType; * * createThreadTypes = { - * NORMAL: 0, - * OWNER_GROUP: 1, - * PUBLIC_GROUP: 2, - * CHANNEL_GROUP: 4, - * CHANNEL: 8 + *NORMAL: 0, + *OWNER_GROUP: 1, + *PUBLIC_GROUP: 2, + *CHANNEL_GROUP: 4, + *CHANNEL: 8 * } */ // Invitee[] invite = new Invitee[]{ -// new Invitee(2951, 2) -// , new Invitee(1967, 2) -// ,new Invitee(123, 5) -// , new Invitee(824, 2) +// new Invitee(2951, 2) +// , new Invitee(1967, 2) +// ,new Invitee(123, 5) +// , new Invitee(824, 2) // }; - /** * * @@ -2290,23 +2329,23 @@ private void createThread() { */ // Invitee[] invite = new Invitee[]{ -//// new Invitee(3361, 2) -//// , new Invitee(3102, 2) -//// new Invitee(091, 1), -//// new Invitee("22835", InviteType.Constants.TO_BE_USER_CONTACT_ID), -// new Invitee("29782", InviteType.Constants.TO_BE_USER_CONTACT_ID), -//// new Invitee("27774", InviteType.Constants.TO_BE_USER_CONTACT_ID), -//// new Invitee("22835", InviteType.Constants.TO_BE_USER_CONTACT_ID), -//// new Invitee(5638, 2), -//// new Invitee("z.mohammadi", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("p.khoshghadam", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("m.hasanpour", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("z.ershad", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("samira.amiri", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("s.heydarizadeh", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("p.pahlavani", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee("ma.amjadi", InviteType.Constants.TO_BE_USER_USERNAME), -//// new Invitee(5638, 2), +//// new Invitee(3361, 2) +//// , new Invitee(3102, 2) +//// new Invitee(091, 1), +//// new Invitee("22835", InviteType.Constants.TO_BE_USER_CONTACT_ID), +// new Invitee("29782", InviteType.Constants.TO_BE_USER_CONTACT_ID), +//// new Invitee("27774", InviteType.Constants.TO_BE_USER_CONTACT_ID), +//// new Invitee("22835", InviteType.Constants.TO_BE_USER_CONTACT_ID), +//// new Invitee(5638, 2), +//// new Invitee("z.mohammadi", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("p.khoshghadam", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("m.hasanpour", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("z.ershad", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("samira.amiri", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("s.heydarizadeh", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("p.pahlavani", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee("ma.amjadi", InviteType.Constants.TO_BE_USER_USERNAME), +//// new Invitee(5638, 2), // }; Inviter inviterw = new Inviter(); inviterw.setName("this is sample metadata"); @@ -2315,17 +2354,28 @@ private void createThread() { List invite = new ArrayList<>(); // add by user SSO_ID -// invite.add(new Invitee(122, 1)); //user jiji +// invite.add(new Invitee(122, 1)); //user jiji // invite.add(new Invitee("121", 1)); // user zizi - invite.add(new Invitee("63270", InviteType.Constants.TO_BE_USER_CONTACT_ID)); +// invite.add(new Invitee("63270", InviteType.Constants.TO_BE_USER_CONTACT_ID)); // invite.add(new Invitee("63271", InviteType.Constants.TO_BE_USER_CONTACT_ID)); - invite.add(new Invitee("63269", InviteType.Constants.TO_BE_USER_CONTACT_ID)); - invite.add(new Invitee("63268", InviteType.Constants.TO_BE_USER_CONTACT_ID)); -// invite.add(new Invitee(9981084527L, 3)); zizi cellphone -// invite.add(new Invitee(123, 5)); //user fifi -// invite.add(new Invitee(121, 5)); // user zizi - -// invite.add(new Invitee(122, 1)); //user jiji +// integration users +// invite.add(new Invitee("63256", InviteType.Constants.TO_BE_USER_CONTACT_ID)); +// invite.add(new Invitee("63255", InviteType.Constants.TO_BE_USER_CONTACT_ID)); +// invite.add(new Invitee("63253", InviteType.Constants.TO_BE_USER_CONTACT_ID)); +//sand box users +// 52620 farhad +// 52979 masoud +// 52987 khodam + // invite.add(new Invitee("52620", InviteType.Constants.TO_BE_USER_CONTACT_ID)); + invite.add(new Invitee("63254", InviteType.Constants.TO_BE_USER_CONTACT_ID)); + // invite.add(new Invitee("52987", InviteType.Constants.TO_BE_USER_CONTACT_ID)); + // invite.add(new Invitee("1", InviteType.Constants.TO_BE_USER_ID)); //amjadi +// invite.add(new Invitee("80618", InviteType.Constants.TO_BE_USER_CONTACT_ID)); +// invite.add(new Invitee(9981084527L, 3)); zizi cellphone +// invite.add(new Invitee(123, 5)); //user fifi +// invite.add(new Invitee(121, 5)); // user zizi + +// invite.add(new Invitee(122, 1)); //user jiji RequestUploadImage requestUploadImage = @@ -2337,12 +2387,13 @@ private void createThread() { RequestCreateThread requestCreateThread = new RequestCreateThread .Builder(ThreadType.Constants.NORMAL, invite) - .title("A New Thread " + (new Date().getTime() / 1000)) - .withDescription("Description created at " - + new Date().getTime()) -// .withImage("URL") - .withMetadata(metac) -// .setUploadThreadImageRequest(requestUploadImage) + .title("Test Thread ByAhmad" + (new Date().getTime() / 1000)) +// .withDescription("Description created at " +// + new Date().getTime()) +// .withImage("URL") + // .withMetadata(metac) +// .typeCode("podspace") +// .setUploadThreadImageRequest(requestUploadImage) .build(); presenter.createThread(requestCreateThread); @@ -2352,8 +2403,8 @@ private void createThread() { private void updateContact() { - presenter.updateContact(2951, "Farhad Amjadi", - "Amjadi", "--------", "zi@gmail.com" + presenter.updateContact(52979, "agha masoud", + "amjadi ", "---", "gizi@gmail.com" ); } @@ -2361,20 +2412,94 @@ private void updateContact() { public void getThreadHistory() { - RequestGetHistory request = new RequestGetHistory +// RequestGetHistory request = new RequestGetHistory +// .Builder(TEST_THREAD_ID) +// .offset(0) +// .count(50) +// .order("desc") //.order("asc") +//// .fromTime(new Date().getTime()) +// // .toTime(new Date().getTime()) +//// .setMessageType(TextMessageType.Constants.POD_SPACE_PICTURE) +//// .withNoCache() +// .build(); +// +// presenter.getHistory(request, null); + + + if (TEST_THREAD_LAST_SEEN_MESSAGE_TIME > 0) { + showToast("Get History to time " + TEST_THREAD_LAST_SEEN_MESSAGE_TIME); + RequestGetHistory request = new RequestGetHistory + .Builder(TEST_THREAD_ID) + .offset(0) + .count(50) + .order("desc") //.order("asc") + .toTime(TEST_THREAD_LAST_SEEN_MESSAGE_TIME) + .build(); + + presenter.getHistory(request, null); + + showToast("Get History from time " + TEST_THREAD_LAST_SEEN_MESSAGE_TIME); + + request = new RequestGetHistory + .Builder(TEST_THREAD_ID) + .offset(0) + .count(50) + .order("asc") //.order("asc") + .fromTime(TEST_THREAD_LAST_SEEN_MESSAGE_TIME) + .build(); + + presenter.getHistory(request, null); + + } + + } + +// public void getHashTagList() { +// RequestGetHashTagList request = new RequestGetHashTagList +// .Builder(TEST_THREAD_ID) +// .offset(0) +// .count(25) +// .setHashtag("ahmad") +// .build(); +// +// presenter.getHashTagLIst(request, null); +// } + + public void getHashTagHistory() { + RequestGetHashTagList request = new RequestGetHashTagList .Builder(TEST_THREAD_ID) + .setHashtag("test2") .offset(0) .count(25) - .order("desc") //.order("asc") -// .fromTime(new Date().getTime()) - // .toTime(new Date().getTime()) -// .setMessageType(TextMessageType.Constants.POD_SPACE_PICTURE) -// .withNoCache() .build(); + presenter.getHashTagList(request, null); + } + + public void blockAssistant() { + Invitee invite = new Invitee("63256", InviteType.Constants.TO_BE_USER_CONTACT_ID); + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVos.add(assistantVo); + + BlockUnblockAssistantRequest request = new BlockUnblockAssistantRequest.Builder(assistantVos, false).build(); + presenter.blockAssistant(request); + } - presenter.getHistory(request, null); + public void unBlockAssistant() { + Invitee invite = new Invitee("63256", InviteType.Constants.TO_BE_USER_CONTACT_ID); + List assistantVos = new ArrayList<>(); + AssistantVo assistantVo = new AssistantVo(); + assistantVo.setInvitees(invite); + assistantVos.add(assistantVo); + BlockUnblockAssistantRequest request = new BlockUnblockAssistantRequest.Builder(assistantVos, true).build(); + presenter.unBlockAssistant(request); + } + public void getBlocksAssistant() { + GetBlockedAssistantsRequest request = new GetBlockedAssistantsRequest.Builder().build(); + presenter.getBlocksAssistant(request); } public void getThreads() { @@ -2387,14 +2512,14 @@ public void getThreads() { RequestThread requestThread = new RequestThread .Builder() -// .threadName("Te") -// .newMessages() -// .partnerCoreContactId(566) +// .threadName("Te") +// .newMessages() +// .partnerCoreContactId(566) .offset(0) .count(50) -// .threadIds(threadIds) -// .withNoCache() -// .typeCode("default") +// .threadIds(threadIds) +// .withNoCache() +// .typeCode("default") .build(); presenter.getThreads(requestThread, null); @@ -2410,10 +2535,10 @@ public void replyMessage() { // presenter.replyMessage("this is reply from john", 381, 14103, new ChatHandler() { -// @Override -// public void onReplyMessage(String uniqueId) { -// super.onReplyMessage(uniqueId); -// } +// @Override +// public void onReplyMessage(String uniqueId) { +// super.onReplyMessage(uniqueId); +// } // }); } @@ -2445,7 +2570,7 @@ private void getContacts() { RequestGetContact request = new RequestGetContact.Builder() .count(50) .offset(0) -// .withNoCache() +// .withNoCache() .build(); // presenter.getContact(0, 0L, null); @@ -2455,7 +2580,7 @@ private void getContacts() { }).start(); try { - Thread.sleep(5000); + Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } @@ -2466,7 +2591,7 @@ private void getContacts() { RequestGetContact request2 = new RequestGetContact.Builder() .count(10) .offset(0) -// .withNoCache() +// .withNoCache() .build(); // presenter.getContact(0, 0L, null); @@ -2479,40 +2604,76 @@ private void getContacts() { }).start(); } - @Override - public void onNothingSelected(AdapterView parent) { - Toast.makeText(ChatActivity.this, "\\__('?')__/", Toast.LENGTH_SHORT).show(); - } +// @Override +// public void onNothingSelected(AdapterView parent) { +// Toast.makeText(ChatActivity.this, "\\__('?')__/", Toast.LENGTH_SHORT).show(); +// } @Override public void onClick(View v) { - if (v == buttonFileChoose) { - showPicChooser(); +// if (v == buttonFileChoose) { +// showPicChooser(); +// } + + if (v == btConnect) { + connect(); } - if (v == buttonConnect) { - - - RequestConnect rc = new RequestConnect.Builder( - socketAddress, - APP_ID, - serverName, - TOKEN, - ssoHost, - platformHost, - fileServer, - podSpaceServer) - .build(); + } -// presenter.connect(socketAddress, -// APP_ID, serverName, TOKEN, ssoHost, -// platformHost, fileServer, typeCode); -// + private void connect() { + if (serverType == ServerType.Main) { + setMainServer(); + } else if (serverType == ServerType.Sandbox) { + setSandBoxServer(); + } else if (serverType == ServerType.Integration) { + setIntgrationServer(); + } else setMainServer(); + + RequestConnect rc = new RequestConnect.Builder( + socketAddress, + APP_ID, + serverName, + TOKEN, + ssoHost, + platformHost, + fileServer, + podSpaceServer) + .build(); + presenter.connect(rc); - presenter.connect(rc); + tvServerType.setText(serverType.name()); + } + private void setMainServer() { + ssoHost = BaseApplication.getInstance().getString(R.string.ssoHost); + serverName = "chat-server"; - } + name = BaseApplication.getInstance().getString(R.string.main_server_name); + socketAddress = BaseApplication.getInstance().getString(R.string.socketAddress); + platformHost = BaseApplication.getInstance().getString(R.string.platformHost); + fileServer = BaseApplication.getInstance().getString(R.string.fileServer); + } + + private void setSandBoxServer() { + ssoHost = BaseApplication.getInstance().getString(R.string.sandbox_ssoHost); + serverName = BaseApplication.getInstance().getString(R.string.sandbox_server_name); + + name = BaseApplication.getInstance().getString(R.string.sandbox_server_name); + socketAddress = BaseApplication.getInstance().getString(R.string.sandbox_socketAddress); + platformHost = BaseApplication.getInstance().getString(R.string.sandbox_platformHost); + fileServer = BaseApplication.getInstance().getString(R.string.sandbox_fileServer); + + } + + private void setIntgrationServer() { + ssoHost = BaseApplication.getInstance().getString(R.string.integration_ssoHost); + serverName = BaseApplication.getInstance().getString(R.string.integration_serverName); + + name = BaseApplication.getInstance().getString(R.string.integration_serverName); + socketAddress = BaseApplication.getInstance().getString(R.string.integration_socketAddress); + platformHost = BaseApplication.getInstance().getString(R.string.integration_platformHost); + fileServer = BaseApplication.getInstance().getString(R.string.integration_platformHost); } private void showPicChooser() { @@ -2543,14 +2704,14 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten } - public void setUri(Uri uri) { - this.uri = uri; - } - public Uri getUri() { return uri; } + public void setUri(Uri uri) { + this.uri = uri; + } + public void ChooseFile(View view) { Intent chooseFile; Intent intent; @@ -2561,36 +2722,36 @@ public void ChooseFile(View view) { startActivityForResult(intent, FILE_REQUEST_CODE); } - public void setFileUri(String fileUri) { - this.fileUri = fileUri; - } - public String getFileUri() { return fileUri; } + public void setFileUri(String fileUri) { + this.fileUri = fileUri; + } + public void getThreadWithCoreUser() { RequestThread requestThread = new RequestThread.Builder() .partnerCoreContactId(566) -// .threadIds() -// .threadName() -// .partnerCoreContactId() -// .creatorCoreUserId() -// .partnerCoreUserId() -// .count() -// .offset() +// .threadIds() +// .threadName() +// .partnerCoreContactId() +// .creatorCoreUserId() +// .partnerCoreUserId() +// .count() +// .offset() .build(); presenter.getThreads(requestThread, null); } - public void setSignalUniq(String signalUniq) { - this.signalUniq = signalUniq; - } - public String getSignalUniq() { return signalUniq; } + public void setSignalUniq(String signalUniq) { + this.signalUniq = signalUniq; + } + public void onUploadImage(View view) { @@ -2598,7 +2759,7 @@ public void onUploadImage(View view) { @Override public void onProgressUpdate(String uniqueId, int progress, int totalBytesSent, int totalBytesToSend) { - runOnUiThread(() -> percentage.setText(progress + "%")); +// runOnUiThread(() -> percentage.setText(progress + "%")); Log.e("UPLOAD_IMAGE", "op " + progress + " sent " + totalBytesSent + " toSend " + totalBytesToSend); @@ -2610,8 +2771,8 @@ public void onFinish(String imageJson, ChatResponse chatRespons Log.e("UPLAOD", imageJson); runOnUiThread(() -> { Toast.makeText(getApplicationContext(), "Finish Upload", Toast.LENGTH_SHORT).show(); - percentage.setTextColor(getResources().getColor(R.color.colorAccent)); - percentage.setText("100"); +// percentage.setTextColor(getResources().getColor(R.color.colorAccent)); +// percentage.setText("100"); }); } @@ -2629,14 +2790,12 @@ protected void onPause() { protected void onResume() { super.onResume(); presenter.onResume(); - - } @Override protected void onStart() { super.onStart(); - presenter.onStart(); +// presenter.onStart(); } @Override @@ -2693,7 +2852,9 @@ public void onProgress(String uniqueId, int progress, int totalBytesSent, int to Log.e("UFP", "op" + progress + " sent" + totalBytesSent + " toSend" + totalBytesToSend); - runOnUiThread(() -> percentageFile.setText(progress + "%")); + runOnUiThread(() -> { +// percentageFile.setText(progress + "%") + }); } @@ -2710,8 +2871,8 @@ public void onFinish(String imageJson, FileUpload fileImageUpload) { runOnUiThread(() -> { Toast.makeText(getApplicationContext(), "Finish Upload", Toast.LENGTH_SHORT).show(); - percentageFile.setText("100"); - percentageFile.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); +// percentageFile.setText("100"); +// percentageFile.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); }); } @@ -2719,16 +2880,22 @@ public void onFinish(String imageJson, FileUpload fileImageUpload) { } } - public void SetThreadId(View view) { + public void setThreadId(View view) { - String tId = editTextThread.getText().toString(); + String tId = et_text.getText().toString(); if (!tId.isEmpty()) TEST_THREAD_ID = Integer.valueOf(tId); } + public void setToken(View view) { + String tId = et_text.getText().toString(); + if (!tId.isEmpty()) + TOKEN = tId; + } + @Override public void onEditMessage() { @@ -2857,4 +3024,15 @@ public void pingStatusSent(ChatResponse response) { public void onThreadClosed(long subjectId) { showToast("Thread with id: " + subjectId + " has been closed!"); } + + @Override + public void onChatProfileUpdated(ResultUpdateProfile result) { + showToast("Profile Updated: " + result.getBio()); + } + + @Override + public void onGetThreadList(String content, ChatResponse thread) { + + + } } diff --git a/app/src/main/java/com/example/chat/application/chatexample/ChatContract.java b/app/src/main/java/com/example/chat/application/chatexample/ChatContract.java index 376765ef..81cb5d6a 100644 --- a/app/src/main/java/com/example/chat/application/chatexample/ChatContract.java +++ b/app/src/main/java/com/example/chat/application/chatexample/ChatContract.java @@ -5,70 +5,83 @@ import android.net.Uri; import com.fanap.podchat.ProgressHandler; -import com.fanap.podchat.call.contacts.ContactsFragment; -import com.fanap.podchat.call.contacts.ContactsWrapper; -import com.fanap.podchat.call.model.CallInfo; -import com.fanap.podchat.call.model.CallParticipantVO; -import com.fanap.podchat.call.result_model.CallDeliverResult; import com.fanap.podchat.chat.Chat; import com.fanap.podchat.chat.ChatHandler; -import com.fanap.podchat.call.result_model.GetCallHistoryResult; +import com.fanap.podchat.chat.assistant.request_model.BlockUnblockAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.DeActiveAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantHistoryRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetBlockedAssistantsRequest; +import com.fanap.podchat.chat.assistant.request_model.RegisterAssistantRequest; import com.fanap.podchat.chat.bot.request_model.CreateBotRequest; import com.fanap.podchat.chat.bot.request_model.DefineBotCommandRequest; +import com.fanap.podchat.chat.bot.request_model.GetUserBotsRequest; import com.fanap.podchat.chat.bot.request_model.StartAndStopBotRequest; import com.fanap.podchat.chat.bot.result_model.CreateBotResult; import com.fanap.podchat.chat.bot.result_model.DefineBotCommandResult; +import com.fanap.podchat.chat.hashtag.model.RequestGetHashTagList; import com.fanap.podchat.chat.mention.model.RequestGetMentionList; import com.fanap.podchat.chat.messge.ResultUnreadMessagesCount; +import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; +import com.fanap.podchat.chat.pin.pin_message.model.ResultPinMessage; +import com.fanap.podchat.chat.pin.pin_thread.model.RequestPinThread; import com.fanap.podchat.chat.ping.result.StatusPingResult; +import com.fanap.podchat.chat.tag.request_model.AddTagParticipantRequest; +import com.fanap.podchat.chat.tag.request_model.CreateTagRequest; +import com.fanap.podchat.chat.tag.request_model.DeleteTagRequest; +import com.fanap.podchat.chat.tag.request_model.EditTagRequest; +import com.fanap.podchat.chat.tag.request_model.GetTagListRequest; +import com.fanap.podchat.chat.tag.request_model.RemoveTagParticipantRequest; +import com.fanap.podchat.chat.tag.result_model.TagResult; import com.fanap.podchat.chat.thread.public_thread.RequestCheckIsNameAvailable; import com.fanap.podchat.chat.thread.public_thread.RequestCreatePublicThread; import com.fanap.podchat.chat.thread.public_thread.RequestJoinPublicThread; import com.fanap.podchat.chat.thread.public_thread.ResultIsNameAvailable; import com.fanap.podchat.chat.thread.public_thread.ResultJoinPublicThread; +import com.fanap.podchat.chat.thread.request.ChangeThreadTypeRequest; +import com.fanap.podchat.chat.thread.request.GetMutualGroupRequest; import com.fanap.podchat.chat.user.profile.RequestUpdateProfile; +import com.fanap.podchat.chat.user.profile.ResultUpdateProfile; import com.fanap.podchat.chat.user.user_roles.model.ResultCurrentUserRoles; import com.fanap.podchat.mainmodel.History; import com.fanap.podchat.mainmodel.Invitee; -import com.fanap.podchat.mainmodel.NosqlListMessageCriteriaVO; -import com.fanap.podchat.mainmodel.Participant; +import com.fanap.podchat.chat.messge.SearchSystemMetadataRequest; import com.fanap.podchat.mainmodel.RequestSearchContact; import com.fanap.podchat.mainmodel.ThreadInfoVO; import com.fanap.podchat.model.ChatResponse; -import com.fanap.podchat.chat.pin.pin_message.model.ResultPinMessage; +import com.fanap.podchat.model.ResultContact; +import com.fanap.podchat.model.ResultHistory; import com.fanap.podchat.model.ResultStaticMapImage; import com.fanap.podchat.model.ResultThreads; import com.fanap.podchat.model.ResultUserInfo; +import com.fanap.podchat.requestobject.RemoveParticipantRequest; import com.fanap.podchat.requestobject.RequestAddContact; -import com.fanap.podchat.requestobject.RequestBlockList; -import com.fanap.podchat.requestobject.RequestCreateThreadWithFile; -import com.fanap.podchat.requestobject.RequestGetContact; -import com.fanap.podchat.requestobject.RequestGetFile; -import com.fanap.podchat.requestobject.RequestGetImage; -import com.fanap.podchat.requestobject.RequestGetPodSpaceFile; -import com.fanap.podchat.requestobject.RequestGetPodSpaceImage; -import com.fanap.podchat.requestobject.RequestGetUserRoles; -import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; -import com.fanap.podchat.requestobject.RequestSetAdmin; import com.fanap.podchat.requestobject.RequestAddParticipants; +import com.fanap.podchat.requestobject.RequestBlockList; import com.fanap.podchat.requestobject.RequestClearHistory; import com.fanap.podchat.requestobject.RequestConnect; import com.fanap.podchat.requestobject.RequestCreateThread; +import com.fanap.podchat.requestobject.RequestCreateThreadWithFile; import com.fanap.podchat.requestobject.RequestDeleteMessage; import com.fanap.podchat.requestobject.RequestDeliveredMessageList; import com.fanap.podchat.requestobject.RequestFileMessage; import com.fanap.podchat.requestobject.RequestForwardMessage; import com.fanap.podchat.requestobject.RequestGetAdmin; +import com.fanap.podchat.requestobject.RequestGetContact; +import com.fanap.podchat.requestobject.RequestGetFile; import com.fanap.podchat.requestobject.RequestGetHistory; +import com.fanap.podchat.requestobject.RequestGetImage; +import com.fanap.podchat.requestobject.RequestGetPodSpaceFile; +import com.fanap.podchat.requestobject.RequestGetPodSpaceImage; +import com.fanap.podchat.requestobject.RequestGetUserRoles; import com.fanap.podchat.requestobject.RequestLocationMessage; import com.fanap.podchat.requestobject.RequestMapReverse; import com.fanap.podchat.requestobject.RequestMapStaticImage; import com.fanap.podchat.requestobject.RequestMessage; -import com.fanap.podchat.chat.pin.pin_thread.model.RequestPinThread; -import com.fanap.podchat.requestobject.RequestRemoveParticipants; import com.fanap.podchat.requestobject.RequestReplyFileMessage; import com.fanap.podchat.requestobject.RequestReplyMessage; import com.fanap.podchat.requestobject.RequestSeenMessageList; +import com.fanap.podchat.requestobject.RequestSetAdmin; import com.fanap.podchat.requestobject.RequestSetAuditor; import com.fanap.podchat.requestobject.RequestSignalMsg; import com.fanap.podchat.requestobject.RequestSpam; @@ -100,10 +113,10 @@ default void onLogEvent(String log) { default void onGetThreadList(String content, ChatResponse thread) { } - default void onGetThreadHistory() { + default void onGetThreadHistory(ChatResponse history) { } - default void onGetContacts() { + default void onGetContacts(ChatResponse outPutContact) { } @@ -228,57 +241,22 @@ default void onBotStarted(String botName){} default void pingStatusSent(ChatResponse response){} - default void onVoiceCallRequestReceived(String callerName){} - - default void onVoiceCallRequestRejected(String callerName){} - - default void onVoiceCallEnded(String uniqueId, long subjectId){} - default void onVoiceCallStarted(String uniqueId, String clientId){} - - default void onGetCallHistory(ChatResponse result){} - - default void onCallReconnect(long callId){} - - default void onCallConnect(long callId){} - - default void onCallDelivered(CallDeliverResult result){} - - default void onGroupVoiceCallRequestReceived(String callerName, String title, List participants){} - - default void onCallParticipantLeft(String response){} - - default void onCallParticipantJoined(String response){} - - default void onCallParticipantRemoved(String name){} - - default void onRemovedFromCall(){} default void updateStatus(String message){} default void onThreadClosed(long subjectId){} - default void onCallCreated(long threadId){} - - default void audioCallMuted(){} - default void audioCallUnMuted(){} - - default void callParticipantMuted(CallParticipantVO participant){} - default void callParticipantUnMuted(CallParticipantVO participant){} - - default void audioCallMutedByAdmin(){} - default void audioCallUnMutedByAdmin(){} - - - default void callParticipantCanceledCall(String name){} + default void onGetSentryLogs(String logs){} - default void hideCallRequest(){} + default void onChatProfileUpdated(ResultUpdateProfile result){} + default void onTagCreated(TagResult result){} - default void showContactsFragment(ContactsFragment contactsWrappers){} + default void onLoginNeeded(){} - default void updateContactsFragment(ArrayList contactsWrappers){} + default void onLoadingContactsStarted(){} - default void onGetSentryLogs(String logs){} + default void setInitState(){} } interface presenter { @@ -289,8 +267,6 @@ interface presenter { void sendLocationMessage(RequestLocationMessage requestLocationMessage, ProgressHandler.sendFileMessage sendFileMessage); - String requestMainOrSandboxCall(int partnerId, boolean checked); - void searchMap(String haram, double lat, double lon); void retryUpload(RetryUpload retry, ProgressHandler.sendFileMessage handler); @@ -341,9 +317,10 @@ void connect(String serverAddress, String appId, String severName, String token, void getHistory(History history, long threadId, ChatHandler handler); - void getHistory(RequestGetHistory request, ChatHandler handler); + String getHistory(RequestGetHistory request, ChatHandler handler); + String getHashTagList(RequestGetHashTagList request, ChatHandler handler); - void searchHistory(NosqlListMessageCriteriaVO messageCriteriaVO, ChatHandler handler); + void searchHistory(SearchSystemMetadataRequest messageCriteriaVO, ChatHandler handler); void getContact(Integer count, Long offset, ChatHandler handler); @@ -412,7 +389,7 @@ void createThread(int threadType, Invitee[] invitee, String threadTitle, String void removeParticipants(long threadId, List participantIds, ChatHandler handler); - void removeParticipants(RequestRemoveParticipants requestRemoveParticipants, ChatHandler handler); + void removeParticipants(RemoveParticipantRequest removeParticipantRequest, ChatHandler handler); void addParticipants(RequestAddParticipants requestAddParticipants, ChatHandler handler); @@ -505,12 +482,6 @@ void createThread(int threadType, Invitee[] invitee, String threadTitle, String void getThreadParticipant(RequestThreadParticipant request); - void acceptIncomingCall(); - - void rejectIncomingCall(); - - String getNameById(int partnerId); - void shareLogs(); String downloadFile(RequestGetPodSpaceFile rePod, ProgressHandler.IDownloadFile iDownloadFile); @@ -539,38 +510,42 @@ void createThread(int threadType, Invitee[] invitee, String threadTitle, String void stopBot(StartAndStopBotRequest request); + void getUserBots(GetUserBotsRequest request); - void testCall(String groupId, String sender, String receiver); + void closeThread(int testThreadId); - void endStream(); + void getContact(); - void testCall(); + void registerAssistant(RegisterAssistantRequest request); - void endRunningCall(); + void getAssistants(GetAssistantRequest request); - void getCallHistory(); + void deActiveAssistant(DeActiveAssistantRequest request); - void switchMute(); + void getAssistantHistory(GetAssistantHistoryRequest request); - void switchSpeaker(); + void blockAssistant(BlockUnblockAssistantRequest request); - void requestGroupCall(boolean fifi, boolean zizi, boolean jiji); + void unBlockAssistant(BlockUnblockAssistantRequest request); - void addCallParticipant(String username, boolean fifiChecked, boolean jijiChecked, boolean ziziChecked); + void getBlocksAssistant(GetBlockedAssistantsRequest request); - void setCallInfo(CallInfo callInfo); + void changeThreadType(ChangeThreadTypeRequest request); - void requestMainOrSandboxCall(String query, boolean checked); - void requestCall(int partnerId, boolean checked); + void createTag(CreateTagRequest request); - void terminateCall(); + void editTag(EditTagRequest request); - void removeCallParticipant(boolean checked, boolean checked1, boolean checked2); + void deleteTag(DeleteTagRequest request); - void closeThread(int testThreadId); + void addTagParticipant(AddTagParticipantRequest request); - void getContact(); + void removeTagParticipant(RemoveTagParticipantRequest request); + + void getTagList(GetTagListRequest request); + + void getMutualGroups(GetMutualGroupRequest request); } } diff --git a/app/src/main/java/com/example/chat/application/chatexample/ChatPresenter.java b/app/src/main/java/com/example/chat/application/chatexample/ChatPresenter.java index c342bbe8..143573b9 100644 --- a/app/src/main/java/com/example/chat/application/chatexample/ChatPresenter.java +++ b/app/src/main/java/com/example/chat/application/chatexample/ChatPresenter.java @@ -13,41 +13,25 @@ import com.example.chat.application.chatexample.token.TokenHandler; import com.fanap.podchat.ProgressHandler; -import com.fanap.podchat.call.CallConfig; -import com.fanap.podchat.call.CallType; -import com.fanap.podchat.call.contacts.ContactsFragment; -import com.fanap.podchat.call.contacts.ContactsWrapper; -import com.fanap.podchat.call.model.CallInfo; -import com.fanap.podchat.call.model.CallParticipantVO; -import com.fanap.podchat.call.model.CreateCallVO; -import com.fanap.podchat.call.request_model.AcceptCallRequest; -import com.fanap.podchat.call.request_model.CallRequest; -import com.fanap.podchat.call.request_model.EndCallRequest; -import com.fanap.podchat.call.request_model.GetCallHistoryRequest; -import com.fanap.podchat.call.request_model.MuteUnMuteCallParticipantRequest; -import com.fanap.podchat.call.request_model.RejectCallRequest; -import com.fanap.podchat.call.request_model.TerminateCallRequest; -import com.fanap.podchat.call.result_model.CallCancelResult; -import com.fanap.podchat.call.result_model.CallCreatedResult; -import com.fanap.podchat.call.result_model.CallDeliverResult; -import com.fanap.podchat.call.result_model.CallReconnectResult; -import com.fanap.podchat.call.result_model.CallRequestResult; -import com.fanap.podchat.call.result_model.CallStartResult; -import com.fanap.podchat.call.result_model.EndCallResult; -import com.fanap.podchat.call.result_model.GetCallHistoryResult; -import com.fanap.podchat.call.result_model.JoinCallParticipantResult; -import com.fanap.podchat.call.result_model.LeaveCallResult; -import com.fanap.podchat.call.result_model.MuteUnMuteCallParticipantResult; -import com.fanap.podchat.call.result_model.RemoveFromCallResult; import com.fanap.podchat.chat.Chat; import com.fanap.podchat.chat.ChatAdapter; import com.fanap.podchat.chat.ChatHandler; +import com.fanap.podchat.chat.assistant.model.AssistantHistoryVo; +import com.fanap.podchat.chat.assistant.model.AssistantVo; +import com.fanap.podchat.chat.assistant.request_model.BlockUnblockAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.DeActiveAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantHistoryRequest; +import com.fanap.podchat.chat.assistant.request_model.GetAssistantRequest; +import com.fanap.podchat.chat.assistant.request_model.GetBlockedAssistantsRequest; +import com.fanap.podchat.chat.assistant.request_model.RegisterAssistantRequest; import com.fanap.podchat.chat.bot.request_model.CreateBotRequest; import com.fanap.podchat.chat.bot.request_model.DefineBotCommandRequest; +import com.fanap.podchat.chat.bot.request_model.GetUserBotsRequest; import com.fanap.podchat.chat.bot.request_model.StartAndStopBotRequest; import com.fanap.podchat.chat.bot.result_model.CreateBotResult; import com.fanap.podchat.chat.bot.result_model.DefineBotCommandResult; import com.fanap.podchat.chat.bot.result_model.StartStopBotResult; +import com.fanap.podchat.chat.hashtag.model.RequestGetHashTagList; import com.fanap.podchat.chat.mention.model.RequestGetMentionList; import com.fanap.podchat.chat.messge.ResultUnreadMessagesCount; import com.fanap.podchat.chat.pin.pin_message.model.RequestPinMessage; @@ -55,24 +39,35 @@ import com.fanap.podchat.chat.pin.pin_thread.model.RequestPinThread; import com.fanap.podchat.chat.ping.request.StatusPingRequest; import com.fanap.podchat.chat.ping.result.StatusPingResult; +import com.fanap.podchat.chat.tag.request_model.AddTagParticipantRequest; +import com.fanap.podchat.chat.tag.request_model.CreateTagRequest; +import com.fanap.podchat.chat.tag.request_model.DeleteTagRequest; +import com.fanap.podchat.chat.tag.request_model.EditTagRequest; +import com.fanap.podchat.chat.tag.request_model.GetTagListRequest; +import com.fanap.podchat.chat.tag.request_model.RemoveTagParticipantRequest; +import com.fanap.podchat.chat.tag.result_model.TagListResult; +import com.fanap.podchat.chat.tag.result_model.TagParticipantResult; +import com.fanap.podchat.chat.tag.result_model.TagResult; import com.fanap.podchat.chat.thread.public_thread.RequestCheckIsNameAvailable; import com.fanap.podchat.chat.thread.public_thread.RequestCreatePublicThread; import com.fanap.podchat.chat.thread.public_thread.RequestJoinPublicThread; import com.fanap.podchat.chat.thread.public_thread.ResultIsNameAvailable; import com.fanap.podchat.chat.thread.public_thread.ResultJoinPublicThread; +import com.fanap.podchat.chat.thread.request.ChangeThreadTypeRequest; import com.fanap.podchat.chat.thread.request.CloseThreadRequest; +import com.fanap.podchat.chat.thread.request.GetMutualGroupRequest; import com.fanap.podchat.chat.thread.request.SafeLeaveRequest; import com.fanap.podchat.chat.thread.respone.CloseThreadResult; import com.fanap.podchat.chat.user.profile.RequestUpdateProfile; import com.fanap.podchat.chat.user.profile.ResultUpdateProfile; import com.fanap.podchat.chat.user.user_roles.model.ResultCurrentUserRoles; import com.fanap.podchat.example.R; -import com.fanap.podchat.mainmodel.Contact; import com.fanap.podchat.mainmodel.History; import com.fanap.podchat.mainmodel.Invitee; -import com.fanap.podchat.mainmodel.NosqlListMessageCriteriaVO; +import com.fanap.podchat.chat.messge.SearchSystemMetadataRequest; import com.fanap.podchat.mainmodel.RequestSearchContact; import com.fanap.podchat.mainmodel.ResultDeleteMessage; +import com.fanap.podchat.mainmodel.Thread; import com.fanap.podchat.mainmodel.ThreadInfoVO; import com.fanap.podchat.model.ChatResponse; import com.fanap.podchat.model.ErrorOutPut; @@ -103,6 +98,7 @@ import com.fanap.podchat.model.ResultUserInfo; import com.fanap.podchat.networking.retrofithelper.TimeoutConfig; import com.fanap.podchat.notification.CustomNotificationConfig; +import com.fanap.podchat.requestobject.RemoveParticipantRequest; import com.fanap.podchat.requestobject.RequestAddContact; import com.fanap.podchat.requestobject.RequestAddParticipants; import com.fanap.podchat.requestobject.RequestBlockList; @@ -128,7 +124,6 @@ import com.fanap.podchat.requestobject.RequestMapReverse; import com.fanap.podchat.requestobject.RequestMapStaticImage; import com.fanap.podchat.requestobject.RequestMessage; -import com.fanap.podchat.requestobject.RequestRemoveParticipants; import com.fanap.podchat.requestobject.RequestReplyFileMessage; import com.fanap.podchat.requestobject.RequestReplyMessage; import com.fanap.podchat.requestobject.RequestSeenMessageList; @@ -146,22 +141,14 @@ import com.fanap.podchat.requestobject.RetryUpload; import com.fanap.podchat.util.ChatMessageType; import com.fanap.podchat.util.ChatStateType; -import com.fanap.podchat.util.InviteType; import com.fanap.podchat.util.NetworkUtils.NetworkPingSender; import com.fanap.podchat.util.RequestMapSearch; import com.fanap.podchat.util.Util; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; -import static com.example.chat.application.chatexample.CallActivity.Farhad_ID; -import static com.example.chat.application.chatexample.CallActivity.MASOUD_CID; -import static com.example.chat.application.chatexample.CallActivity.Masoud_ID; -import static com.example.chat.application.chatexample.CallActivity.POORIA_CID; -import static com.example.chat.application.chatexample.CallActivity.Pooria_ID; - public class ChatPresenter extends ChatAdapter implements ChatContract.presenter, Application.ActivityLifecycleCallbacks { @@ -178,18 +165,10 @@ public class ChatPresenter extends ChatAdapter implements ChatContract.presenter List uniqueIds = new ArrayList<>(); - private CreateCallVO callVO; - private boolean speakerOn = false; - private boolean isMute = false; - private boolean isInCall; - - public ChatPresenter(Context context, ChatContract.view view, Activity activity) { chat = Chat.init(context); -// RefWatcher refWatcher = LeakCanary.installedRefWatcher(); -// refWatcher.watch(chat); chat.addListener(this); @@ -200,23 +179,22 @@ public ChatPresenter(Context context, ChatContract.view view, Activity activity) .setChannelId("PODCHAT") .setChannelDescription("Fanap soft podchat notification channel") .setIcon(R.mipmap.ic_launcher) + .setNotificationImportance(NotificationManager.IMPORTANCE_DEFAULT) .build(); chat.setupNotification(notificationConfig); - CallConfig callConfig = new CallConfig(CallActivity.class.getName()); - chat.setAudioCallConfig(callConfig); chat.isCacheables(true); chat.isLoggable(true); chat.rawLog(true); - chat.isSentryLogActive(false); - chat.isSentryResponseLogActive(false); + chat.isSentryLogActive(true); + chat.isSentryResponseLogActive(true); chat.setDownloadDirectory(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)); @@ -243,9 +221,7 @@ public ChatPresenter(Context context, ChatContract.view view, Activity activity) activity.getApplication().registerActivityLifecycleCallbacks(this); - tokenHandler = new TokenHandler(activity.getApplicationContext()); - - tokenHandler.addListener(new TokenHandler.ITokenHandler() { + tokenHandler = new TokenHandler(activity.getApplicationContext(),new TokenHandler.ITokenHandler() { @Override public void onGetToken(String token) { view.onGetToken(token); @@ -260,6 +236,12 @@ public void onTokenRefreshed(String token) { } + @Override + public void onLoginNeeded() { + + view.onLoginNeeded(); + } + @Override public void onError(String message) { view.onError(message); @@ -269,9 +251,41 @@ public void onError(String message) { } + @Override + public void onTagCreated(String content, ChatResponse response) { + Log.e(TAG, content); + view.onTagCreated(response.getResult()); + } + + @Override + public void onTagEdited(String content, ChatResponse response) { + Log.e(TAG, content); + } + + @Override + public void onTagDeleted(String content, ChatResponse response) { + Log.e(TAG, content); + } + + @Override + public void OnTagParticipantAdded(String content, ChatResponse response) { + Log.e(TAG, content); + } + + @Override + public void OnTagParticipantRemoved(String content, ChatResponse response) { + Log.e(TAG, content); + } + + @Override + public void OnTagList(String content, ChatResponse response) { + String x = response.getJson(); + Log.e(TAG, x); + } + @Override public void getSentryLogs() { - view.onGetSentryLogs(chat.getSenrtyLogs()); +// view.onGetSentryLogs(chat.getSenrtyLogs()); } @Override @@ -284,7 +298,7 @@ public void connect(String serverAddress, String appId, String severName, public void connect(RequestConnect requestConnect) { NetworkPingSender.NetworkStateConfig build = new NetworkPingSender.NetworkStateConfig() - .setHostName("chat-sandbox.pod.ir") + .setHostName("msg.pod.ir") .setPort(443) .setDisConnectionThreshold(2) .setInterval(7000) @@ -357,40 +371,6 @@ public void getThreadParticipant(RequestThreadParticipant request) { chat.getThreadParticipants(request, null); } - @Override - public void acceptIncomingCall() { - - - AcceptCallRequest.Builder request = new AcceptCallRequest.Builder( - callVO.getCallId()); - - if (isMute) { - request.mute(); - } - - String uniqueId = chat.acceptVoiceCall(request.build()); - uniqueIds.add(uniqueId); - - - } - - @Override - public void rejectIncomingCall() { - - RejectCallRequest request = new RejectCallRequest.Builder( - callVO.getCallId()) - .build(); - - String uniqueId = chat.rejectVoiceCall(request); - uniqueIds.add(uniqueId); - - } - - @Override - public String getNameById(int partnerId) { - return getCallerName(partnerId); - } - @Override public void shareLogs() { if (chat != null) { @@ -416,11 +396,14 @@ public void onStop() { // chat.shouldShowNotification(true); + chat.closeChat(); + } @Override public void onResume() { + chat.resumeChat(); // chat.shouldShowNotification(false); } @@ -474,46 +457,74 @@ public void stopBot(StartAndStopBotRequest request) { String uniqueId = chat.stopBot(request); } + @Override + public void getUserBots(GetUserBotsRequest request) { + chat.getUserBots(request); + } + @Override public void onBotCreated(ChatResponse response) { view.onBotCreated(response); } @Override - public void onBotCommandsDefined(ChatResponse response) { - view.onBotCommandsDefined(response); + public void onRegisterAssistant(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onRegisterAssistant: " + response.getJson()); } - @Override - public void onBotStopped(ChatResponse response) { - view.onBotStopped(response.getResult().getBotName()); + public void onDeActiveAssistant(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onDeActiveAssistant: " + response.getJson()); } @Override - public void onBotStarted(ChatResponse response) { - view.onBotStarted(response.getResult().getBotName()); + public void onGetAssistants(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onGetAssistants: " + response.getJson()); + } + @Override + public void onGetAssistantHistory(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onGetAssistants: " + response.getJson()); } @Override - public void testCall(String groupId, String sender, String receiver) { + public void onAssistantBlocked(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onAssistantBlocked: " + response.getJson()); + } - chat.testCall(groupId, sender, receiver); + @Override + public void onAssistantUnBlocked(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onAssistantUnBlocked: " + response.getJson()); } @Override - public void endStream() { - chat.endAudioStream(); + public void onAssistantBlocks(ChatResponse> response) { + String json = response.getJson(); + Log.e(TAG, "onAssistantBlocks: " + response.getJson()); } @Override - public void testCall() { -// chat.testCall(); - chat.testAudio(); + public void onBotCommandsDefined(ChatResponse response) { + view.onBotCommandsDefined(response); + } + + @Override + public void onBotStopped(ChatResponse response) { + view.onBotStopped(response.getResult().getBotName()); } + @Override + public void onBotStarted(ChatResponse response) { + view.onBotStarted(response.getResult().getBotName()); + + } @Override public void enableAutoRefresh(Activity activity, String entry) { @@ -521,6 +532,8 @@ public void enableAutoRefresh(Activity activity, String entry) { if (entry.startsWith("09")) { tokenHandler.handshake(entry); + } else if (entry.trim().startsWith("*")) { + view.onGetToken(entry.replace("*", "")); } else { tokenHandler.verifyNumber(entry); } @@ -563,30 +576,6 @@ public void sendLocationMessage(RequestLocationMessage requestLocationMessage, P chat.sendLocationMessage(requestLocationMessage, handler); } - @Override - public String requestMainOrSandboxCall(int partnerId, boolean checked) { - - List invitees = new ArrayList<>(); - Invitee invitee = new Invitee(); - invitee.setId(partnerId); - invitee.setIdType(InviteType.Constants.TO_BE_USER_ID); - invitees.add(invitee); - - - //request with invitee list - CallRequest callRequest = new CallRequest.Builder( - invitees, - CallType.Constants.VOICE_CALL).build(); - - //request with subject id - CallRequest callRequestt = new CallRequest.Builder( - 100000L, - CallType.Constants.VOICE_CALL).build(); - - return chat.requestCall(callRequest); - } - - @Override public void onLogEvent(String log) { view.onLogEvent(log); @@ -777,8 +766,9 @@ public void getHistory(History history, long threadId, ChatHandler handler) { } @Override - public void getHistory(RequestGetHistory request, ChatHandler handler) { - chat.getHistory(request, handler); + public String getHistory(RequestGetHistory request, ChatHandler handler) { + + String uniqueId = chat.getHistory(request, handler); StatusPingRequest statusRequest = new StatusPingRequest.Builder() @@ -788,10 +778,16 @@ public void getHistory(RequestGetHistory request, ChatHandler handler) { chat.sendStatusPing(statusRequest); + return uniqueId; } @Override - public void searchHistory(NosqlListMessageCriteriaVO builderListMessage, ChatHandler handler) { + public String getHashTagList(RequestGetHashTagList request, ChatHandler handler) { + return chat.getHashTagList(request); + } + + @Override + public void searchHistory(SearchSystemMetadataRequest builderListMessage, ChatHandler handler) { chat.searchHistory(builderListMessage, handler); } @@ -1038,8 +1034,8 @@ public void removeParticipants(long threadId, List contactIds, ChatHandler } @Override - public void removeParticipants(RequestRemoveParticipants requestRemoveParticipants, ChatHandler handler) { - chat.removeParticipants(requestRemoveParticipants, handler); + public void removeParticipants(RemoveParticipantRequest removeParticipantRequest, ChatHandler handler) { + chat.removeParticipants(removeParticipantRequest, handler); } @@ -1237,37 +1233,22 @@ public void onGetThread(String content, ChatResponse thread) { view.onGetThreadList(content, thread); } + @Override + public void onGetMutualGroups(String content, ChatResponse thread) { + super.onGetMutualGroups(content, thread); + Log.e(TAG, "onGetMutualGroups: " + content); + + } + @Override public void onThreadInfoUpdated(String content, ChatResponse response) { + Log.e(TAG, "onThreadInfoUpdated: "+response.getResult().getThread().getId() + "===> "+response.getResult().getThread().getLastMessage()); } @Override public void onGetContacts(String content, ChatResponse outPutContact) { super.onGetContacts(content, outPutContact); - - - ArrayList contactsWrappers = new ArrayList<>(); - - for (Contact c : - outPutContact.getResult().getContacts()) { - - ContactsWrapper contactsWrapper = new ContactsWrapper(c); - - contactsWrappers.add(contactsWrapper); - } - - ContactsFragment fragment = new ContactsFragment(); -// fragment.setCa - Bundle v = new Bundle(); - - - v.putParcelableArrayList("CONTACTS", contactsWrappers); - fragment.setArguments(v); - - - if (!outPutContact.isCache()) - view.showContactsFragment(fragment); - else view.updateContactsFragment(contactsWrappers); + view.onGetContacts(outPutContact); } @Override @@ -1285,6 +1266,7 @@ public void onUserInfo(String content, ChatResponse outPutUserIn public void onSent(String content, ChatResponse chatResponse) { super.onSent(content, chatResponse); view.onSentMessage(); + Log.e("testmsg", "id : " + chatResponse.getResult().getMessageId()); } @Override @@ -1301,6 +1283,7 @@ public void onError(String content, ErrorOutPut outPutError) { } if (Util.isNotNullOrEmpty(outPutError.getUniqueId()) && uniqueIds.contains(outPutError.getUniqueId())) { + view.onError(""); view.updateStatus(outPutError.getErrorMessage()); } } @@ -1393,7 +1376,7 @@ public boolean clearFiles() { @Override public void closeChat() { - chat.closeChat(); +// chat.closeChat(); } @Override @@ -1428,7 +1411,7 @@ public void onEditedMessage(String content, ChatResponse chatR @Override public void onGetHistory(String content, ChatResponse history) { super.onGetHistory(content, history); - view.onGetThreadHistory(); + view.onGetThreadHistory(history); } @Override @@ -1443,6 +1426,18 @@ public void onUnmuteThread(String content, ChatResponse outPutMute) view.onUnMuteThread(); } + @Override + public void onGetMentionList(ChatResponse response) { + super.onGetMentionList(response); + } + + @Override + public void onGetHashTagList(ChatResponse response) { + super.onGetHashTagList(response); + Log.e(TAG, "onGetHashTagList: " + response.getJson()); + + } + @Override public void onRenameThread(String content, OutPutThread outPutThread) { super.onRenameThread(content, outPutThread); @@ -1511,6 +1506,8 @@ public void onChatProfileUpdated(ChatResponse response) { Log.d("CHAT_SDK_PRESENTER", "Chat profile updated"); + view.onChatProfileUpdated(response.getResult()); + } @Override @@ -1520,17 +1517,55 @@ public void onChatState(String state) { this.state = state; -// if(state.equals(ChatStateType.ChatSateConstant.CHAT_READY)){ + if (state.equals(ChatStateType.ChatSateConstant.CHAT_READY)) { + + +// List usernames = new ArrayList<>(); +// usernames.add("leila.nemati"); +// usernames.add("pooria.pahlevani"); +// usernames.add("nadia.anvari"); +// usernames.add("p.khoshghadam"); +// usernames.add("m.hasanpour"); +// usernames.add("z.ershad"); +// usernames.add("Samira.amiri"); +// usernames.add("s.heydarizadeh"); +// usernames.add("p.pahlavani"); +// usernames.add("09379520706"); +// usernames.add("09124704905"); + +// chat.getContacts(new RequestGetContact.Builder() +// .count(50).offset(0).build(), null); +// for (int i = 0; i < usernames.size(); i++) { // // -// RequestMessage req = new RequestMessage.Builder("ttt",5182) -// .messageType(TextMessageType.Constants.TEXT) -// .build(); +// try { +// String name; +// String family; +// if (i == 0) { +// name = "Masoud"; +// family = "Alavi"; +// } else { +// name = "Ms"; +// family = "HeidariZadeh"; +// } +// RequestAddContact request = new RequestAddContact.Builder() +// .firstName(name) +// .lastName(family) +// .cellphoneNumber(usernames.get(i)) +// .build(); // -// sendTextMessage(req,null); +// chat.addContact(request); // +// Thread.sleep(5000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } // -// } +// +// } + + + } // if (state.equals(ChatStateType.ChatSateConstant.CHAT_READY)) { // // @@ -1708,274 +1743,38 @@ public void onPingStatusSent(ChatResponse response) { view.pingStatusSent(response); } - @Override - public void onReceiveCallRequest(ChatResponse response) { - - if (response.getResult().getType() == CallType.Constants.VOICE_CALL) { - - callVO = response.getResult(); - - String callerName = response.getResult().getCreatorVO().getName(); - - view.onVoiceCallRequestReceived(callerName); - - } - - } - - @Override - public void onVoiceCallStarted(ChatResponse response) { - - isInCall = true; - - view.onVoiceCallStarted(" " + response.getUniqueId(), ""); - - } - - @Override - public void onVoiceCallEnded(ChatResponse response) { - - isInCall = false; - - view.onVoiceCallEnded(response.getUniqueId(), response.getResult().getCallId()); - - } - - public String getCallerName(long callerId) { - String callerName = ""; - if (callerId == CallActivity.Farhad_ID) { - - callerName = "ZIZI"; - } else if (callerId == Pooria_ID) { - callerName = "FIFI"; - } else { - callerName = "JIJI"; - } - return callerName; - } - - - @Override - public void onCallRequestRejected(ChatResponse response) { - - if (response.getResult().getType() == CallType.Constants.VOICE_CALL) { - - callVO = response.getResult(); - - long callerId = response.getResult().getCreatorId(); - - String callerName = getCallerName(callerId); - - view.onVoiceCallRequestRejected(callerName); - - } - - } - - @Override - public void onReceiveCallHistory(ChatResponse response) { - - - view.onGetCallHistory(response); - - } - - - @Override - public void terminateCall() { - - Log.e(TAG, "REQUEST TERMINATE FROM CLIENT"); - - Log.e(TAG, "REQUEST TERMINATE FROM CLIENT. Call Response: " + callVO); - - if (callVO != null) { - - Log.e(TAG, "REQUEST TERMINATE FROM CLIENT call response not null"); - - TerminateCallRequest terminateCallRequest = new TerminateCallRequest.Builder() - .setCallId(callVO.getCallId()) - .build(); - - - String uniqueId = chat.terminateAudioCall(terminateCallRequest); - - } - - } - - - @Override - public void endRunningCall() { - - - if (isInCall) { - - Log.e(TAG, "REQUEST END CALL FROM CLIENT"); - - Log.e(TAG, "REQUEST END CALL FROM CLIENT. Call Response: " + callVO); - - if (callVO != null) { - - Log.e(TAG, "REQUEST END CALL FROM CLIENT call response not null"); - - EndCallRequest endCallRequest = new EndCallRequest.Builder() - .setCallId(callVO.getCallId()) - .build(); - - - String uniqueId = chat.endAudioCall(endCallRequest); - uniqueIds.add(uniqueId); - - } - - } else { - - Log.e(TAG, "REQUEST Cancel CALL FROM CLIENT"); - - Log.e(TAG, "REQUEST Cancell CALL FROM CLIENT. Call: " + callVO); - - if (callVO != null) { - - Log.e(TAG, "REQUEST Cancel CALL FROM CLIENT call response not null"); - - RejectCallRequest endCallRequest = new RejectCallRequest.Builder( - callVO.getCallId()) - .build(); - - - String uniqueId = chat.rejectVoiceCall(endCallRequest); - uniqueIds.add(uniqueId); - - } - - } - - } - - @Override - public void getCallHistory() { - - - GetCallHistoryRequest request = new GetCallHistoryRequest.Builder() - .setType(CallType.Constants.VOICE_CALL) - .count(10) - .build(); - - uniqueIds.add(chat.getCallsHistory(request)); - - - RequestGetHistory request1 = new RequestGetHistory - .Builder(6869) - .offset(0) - .withNoCache() - .count(10) - .order("desc") - .build(); - - getHistory(request1, null); - - - } - - - @Override - public void switchMute() { - - this.isMute = !this.isMute; - - Log.d(TAG, "CHANGE MUTE: " + isMute); - - if (isInCall) { -// ArrayList ids = new ArrayList<>(); -// ids.add((long) Masoud_ID); -// ids.add((long) Pooria_ID); +// @Override +// public void onReceiveCallHistory(ChatResponse response) { // -// MuteUnMuteCallParticipantRequest request -// = new MuteUnMuteCallParticipantRequest.Builder(callVO.getCallId(), ids) -// .build(); - - -// if (isMute) -// chat.requestMuteCallParticipant(request); -// else -// chat.requestUnMuteCallParticipant(request); - - - chat.switchCallMuteState(isMute, callVO.getCallId()); - } else { - // send mute state in AcceptCallRequest - } - - } - - @Override - public void switchSpeaker() { - - this.speakerOn = !this.speakerOn; - - Log.d(TAG, "CHANGE SPEAKER: " + speakerOn); - - chat.switchCallSpeakerState(speakerOn); - - } - - @Override - public void requestGroupCall(boolean withFifi, boolean withZizi, boolean withJiji) { - - List invitees = new ArrayList<>(); - - Invitee invitee; - - if (withFifi) { - invitee = new Invitee(); - invitee.setId(POORIA_CID); - invitee.setIdType(InviteType.Constants.TO_BE_USER_CONTACT_ID); - invitees.add(invitee); - } -// if (withZizi) { -// invitee = new Invitee(); -// invitee.setId(JIJI_CID); -// invitee.setIdType(InviteType.Constants.TO_BE_USER_CONTACT_ID); -// invitees.add(invitee); -// } - if (withJiji) { - invitee = new Invitee(); - invitee.setId(MASOUD_CID); - invitee.setIdType(InviteType.Constants.TO_BE_USER_CONTACT_ID); - invitees.add(invitee); - } - - CallRequest request = new CallRequest -// .Builder(invitees,CallType.Constants.VOICE_CALL) - .Builder(8095, CallType.Constants.VOICE_CALL) - .build(); - - uniqueIds.add(chat.requestGroupCall(request)); - - } - - @Override - public void removeCallParticipant(boolean fifiChecked, boolean jijiChecked, boolean ziziChecked) { - - List ids = new ArrayList<>(); - - if (fifiChecked) - ids.add((long) Pooria_ID); - if (jijiChecked) - ids.add((long) Masoud_ID); - if (ziziChecked) - ids.add((long) Farhad_ID); - - RequestRemoveParticipants request = new RequestRemoveParticipants.Builder( - callVO.getCallId(), - ids) - .build(); - +//// List calls = new ArrayList<>(); +//// +//// for (CallVO call : +//// response.getResult().getCallsList()) { +//// +//// if(call.getPartnerParticipantVO()!=null) +//// calls.add(call); +//// +//// } +//// +//// view.onGetCallHistory(response); +// +// } - chat.removeGroupCallParticipant(request); - } +// @Override +// public void getCallHistory() { +// +// +// GetCallHistoryRequest request = new GetCallHistoryRequest.Builder() +// .setType(CallType.Constants.VIDEO_CALL) +// .count(50) +// .build(); +// +// uniqueIds.add(chat.getCallsHistory(request)); +// +// +// } @Override public void closeThread(int testThreadId) { @@ -1995,296 +1794,105 @@ public void closeThread(int testThreadId) { @Override public void getContact() { - RequestGetContact request = - new RequestGetContact.Builder() - .count(10) - .offset(0) - .build(); - - uniqueIds.add(chat.getContacts(request, null)); - - } - - @Override - public void addCallParticipant(String username, boolean pooriaChecked, boolean masoudChecked, boolean farhadChecked) { - - - if (Util.isNotNullOrEmpty(username)) { - - if (username.contains(",")) { - String[] names = username.split(","); - RequestAddParticipants request = RequestAddParticipants.newBuilder() - .threadId(callVO.getThreadId()) - .withUserNames(names) - .build(); - uniqueIds.add(chat.addGroupCallParticipant(request)); - } else { - RequestAddParticipants request = RequestAddParticipants.newBuilder() - .threadId(callVO.getThreadId()) - .withUserNames(username) - .build(); - uniqueIds.add(chat.addGroupCallParticipant(request)); - } - - } else { - List ids = new ArrayList<>(); - - if (pooriaChecked) - ids.add((long) Pooria_ID); - if (masoudChecked) - ids.add((long) Masoud_ID); - if (farhadChecked) - ids.add((long) Farhad_ID); - - RequestAddParticipants request = RequestAddParticipants.newBuilder() - .threadId(callVO.getThreadId()) - .withCoreUserIds(ids) - .build(); - - - uniqueIds.add(chat.addGroupCallParticipant(request)); - + if(chat.isChatReady()){ + view.onLoadingContactsStarted(); + RequestGetContact request = + new RequestGetContact.Builder() + .count(50) + .offset(0) + .build(); - } - - } - - @Override - public void setCallInfo(CallInfo callInfo) { - - if (callVO == null) { - isInCall = true; - callVO = new CreateCallVO(); - callVO.setCallId(callInfo.getCallId()); + uniqueIds.add(chat.getContacts(request, null)); } } @Override - public void requestMainOrSandboxCall(String query, boolean group) { - - try { - if (Util.isNotNullOrEmpty(query)) { - - String uniqueId = ""; - - - if (query.contains("-")) { - - String[] ids = query.split("-"); - - List invitees = new ArrayList<>(); - if (ids.length == 1) { - // P2P Call - - Invitee invitee = new Invitee(); - invitee.setId(ids[0]); - invitee.setIdType(InviteType.Constants.TO_BE_USER_ID); - invitees.add(invitee); - - //request with invitee list - CallRequest callRequest = new CallRequest.Builder( - invitees, - CallType.Constants.VOICE_CALL).build(); - uniqueId = chat.requestCall(callRequest); - view.updateStatus("Request p2p call with: " + ids[0]); - - } else if (ids.length <= 5) { - //Group Call with invitees - - for (String id : - ids) { - - Invitee invitee = new Invitee(); - invitee.setId(id); - invitee.setIdType(InviteType.Constants.TO_BE_USER_CONTACT_ID); - invitees.add(invitee); - - } - - CallRequest callRequest = new CallRequest.Builder( - invitees, - CallType.Constants.VOICE_CALL).build(); - uniqueId = chat.requestGroupCall(callRequest); - - view.updateStatus("Request group call invitees: " + Arrays.toString(ids)); - } else { - view.updateStatus("حداکثر اعضای تماس گروهی 5 نفر می باشد"); - } - } else { - //Group Call with subject id - - CallRequest callRequest = new CallRequest.Builder( - Long.parseLong(query), - CallType.Constants.VOICE_CALL).build(); - if (group) { - uniqueId = chat.requestGroupCall(callRequest); - } else { - uniqueId = chat.requestCall(callRequest); - } - - } - - if (Util.isNotNullOrEmpty(uniqueId)) - uniqueIds.add(uniqueId); - - } - } catch (NumberFormatException e) { - view.updateStatus("Wrong format"); - } - - } - - @Override - public void requestCall(int partnerId, boolean checked) { - List invitees = new ArrayList<>(); - Invitee invitee = new Invitee(); - invitee.setId(partnerId); - invitee.setIdType(InviteType.Constants.TO_BE_USER_ID); - invitees.add(invitee); - - - //request with invitee list - CallRequest callRequest = new CallRequest.Builder( - invitees, - CallType.Constants.VOICE_CALL).build(); - - - String uniqueId = chat.requestCall(callRequest); - uniqueIds.add(uniqueId); - } - - @Override - public void onCallReconnect(ChatResponse response) { - view.onCallReconnect(response.getResult().getCallId()); + public void registerAssistant(RegisterAssistantRequest request) { + chat.registerAssistant(request); } @Override - public void onCallConnect(ChatResponse response) { - view.onCallConnect(response.getResult().getCallId()); + public void getAssistants(GetAssistantRequest request) { + chat.getAssistants(request); } @Override - public void onCallDelivered(ChatResponse response) { - view.onCallDelivered(response.getResult()); + public void deActiveAssistant(DeActiveAssistantRequest request) { + chat.deactiveAssistant(request); } @Override - public void onReceiveGroupCallRequest(ChatResponse response) { - - if (response.getResult().getType() == CallType.Constants.VOICE_CALL) { - - callVO = response.getResult(); - - String callerName = response.getResult().getCreatorVO().getName(); - - view.onGroupVoiceCallRequestReceived(callerName, response.getResult().getConversationVO().getTitle(), response.getResult().getConversationVO().getParticipants()); - - } + public void getAssistantHistory(GetAssistantHistoryRequest request) { + chat.getAssistantHistory(request); } @Override - public void onCallParticipantLeft(ChatResponse response) { - - - for (CallParticipantVO c : - response.getResult().getCallParticipants()) { - - view.onCallParticipantLeft(c.getParticipantVO().getFirstName() + " " + c.getParticipantVO().getLastName()); - - - } - + public void blockAssistant(BlockUnblockAssistantRequest o) { + chat.blockAssistant(o); } @Override - public void onCallParticipantJoined(ChatResponse response) { - for (CallParticipantVO callParticipant : - response.getResult().getJoinedParticipants()) { - view.onCallParticipantJoined(callParticipant.getParticipantVO().getFirstName() + " " + callParticipant.getParticipantVO().getLastName()); - } + public void unBlockAssistant(BlockUnblockAssistantRequest o) { + chat.unBlockAssistant(o); } @Override - public void onEndCallRequestFromNotification() { - view.onVoiceCallEnded("", 0); + public void getBlocksAssistant(GetBlockedAssistantsRequest o) { + chat.getBlocksAssistant(o); } @Override - public void onCallParticipantRemoved(ChatResponse response) { - - for (CallParticipantVO callParticipant : - response.getResult().getCallParticipants()) { - view.onCallParticipantRemoved(callParticipant.getParticipantVO().getFirstName() + " " + callParticipant.getParticipantVO().getLastName()); - } - + public void changeThreadType(ChangeThreadTypeRequest request) { + chat.changeThreadType(request); } @Override - public void onRemovedFromCall(ChatResponse response) { - - view.onRemovedFromCall(); + public void createTag(CreateTagRequest request) { + chat.createTag(request); } @Override - public void onThreadClosed(ChatResponse response) { - view.onThreadClosed(response.getSubjectId()); + public void editTag(EditTagRequest request) { + chat.editTag(request); } @Override - public void onCallCreated(ChatResponse response) { - - callVO = response.getResult(); - - view.onCallCreated(response.getResult().getCallId()); + public void deleteTag(DeleteTagRequest request) { + chat.deleteTag(request); } - @Override - public void onAudioCallUnMuted(ChatResponse response) { - view.audioCallUnMuted(); + public void addTagParticipant(AddTagParticipantRequest request) { + chat.addTagParticipant(request); } @Override - public void onCallParticipantUnMuted(ChatResponse response) { - for (CallParticipantVO participant : - response.getResult().getCallParticipants()) { - view.callParticipantUnMuted(participant); - } + public void removeTagParticipant(RemoveTagParticipantRequest request) { + chat.removeTagParticipant(request); } @Override - public void onUnMutedByAdmin(ChatResponse response) { - view.audioCallUnMutedByAdmin(); + public void getTagList(GetTagListRequest request) { + chat.getTagList(request); } @Override - public void onAudioCallMuted(ChatResponse response) { - view.audioCallMuted(); + public void getMutualGroups(GetMutualGroupRequest request) { + chat.getMutualGroup(request); } - @Override - public void onMutedByAdmin(ChatResponse response) { - view.audioCallMutedByAdmin(); - } @Override - public void onCallParticipantMuted(ChatResponse response) { - for (CallParticipantVO participant : - response.getResult().getCallParticipants()) { - view.callParticipantMuted(participant); - } + public void onThreadTypeChanged(ChatResponse response) { + super.onThreadTypeChanged(response); + Log.e(TAG, "onThreadChangeType: " + response.getJson()); } @Override - public void onCallParticipantCanceledCall(ChatResponse response) { - view.callParticipantCanceledCall(response.getResult().getCallParticipant().getParticipantVO().getFirstName() - + " " + response.getResult().getCallParticipant().getParticipantVO().getLastName()); + public void onThreadClosed(ChatResponse response) { + view.onThreadClosed(response.getSubjectId()); } - @Override - public void onAnotherDeviceAcceptedCall() { - view.hideCallRequest(); - } } diff --git a/app/src/main/java/com/example/chat/application/chatexample/ChatSandBoxActivity.java b/app/src/main/java/com/example/chat/application/chatexample/ChatSandBoxActivity.java deleted file mode 100644 index c2a67207..00000000 --- a/app/src/main/java/com/example/chat/application/chatexample/ChatSandBoxActivity.java +++ /dev/null @@ -1,898 +0,0 @@ -package com.example.chat.application.chatexample; - -import android.app.Activity; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Bundle; -import android.provider.MediaStore; -import android.support.annotation.Nullable; -import android.support.constraint.ConstraintLayout; -import android.support.v7.app.AppCompatActivity; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.Spinner; -import android.widget.TextView; -import android.widget.Toast; - -import com.fanap.podchat.ProgressHandler; -import com.fanap.podchat.cachemodel.CacheMessageVO; -import com.fanap.podchat.chat.ChatHandler; -import com.fanap.podchat.mainmodel.FileUpload; -import com.fanap.podchat.mainmodel.History; -import com.fanap.podchat.mainmodel.Invitee; -import com.fanap.podchat.mainmodel.Inviter; -import com.fanap.podchat.mainmodel.NosqlListMessageCriteriaVO; -import com.fanap.podchat.mainmodel.NosqlSearchMetadataCriteria; -import com.fanap.podchat.mainmodel.RequestSearchContact; -import com.fanap.podchat.model.ChatResponse; -import com.fanap.podchat.model.ResultImageFile; -import com.fanap.podchat.model.ResultStaticMapImage; -import com.fanap.podchat.requestobject.RequestDeleteMessage; -import com.fanap.podchat.requestobject.RequestDeliveredMessageList; -import com.fanap.podchat.requestobject.RequestLocationMessage; -import com.fanap.podchat.requestobject.RequestMapReverse; -import com.fanap.podchat.requestobject.RequestMapStaticImage; -import com.fanap.podchat.requestobject.RequestMessage; -import com.fanap.podchat.requestobject.RequestReplyFileMessage; -import com.fanap.podchat.requestobject.RequestSeenMessageList; -import com.fanap.podchat.requestobject.RequestThreadInfo; -import com.fanap.podchat.requestobject.RequestUnBlock; -import com.fanap.podchat.requestobject.RequestUpdateContact; - -import com.fanap.podchat.util.FilePick; -import com.fanap.podchat.util.TextMessageType; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.fanap.podchat.example.R; - - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -public class ChatSandBoxActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, View.OnClickListener { - private static final int FILE_REQUEST_CODE = 2; - private ChatContract.presenter presenter; - private EditText editText; - private EditText editTextThread; - private EditText editTextToken; - private Button buttonFileChoose; - private Button buttonConnect; - private Button buttonToken; - private ImageView imageMap; - private String selectedFilePath; - private ProgressBar progressBar; - private TextView percentage; - private static final int PICK_IMAGE_FILE_REQUEST = 1; - private static final int PICK_FILE_REQUEST = 2; - private Gson gson = new GsonBuilder().create(); - - private Uri uri; - private String fileUri; - private static String name = "SandBox"; - private static String TOKEN = "0cc5b265bb8b4ab59aeaf818143a3e88"; - private TextView percentageFile; - private static String socketAddres = "wss://chat-sandbox.pod.ir/ws"; - private static String serverName = "chat-server"; - private static String appId = "POD-Chat"; - private static String ssoHost = "https://accounts.pod.ir/"; - private static String platformHost = "https://sandbox.pod.ir:8043/srv/basic-platform/"; - private static String fileServer = "http://sandbox.pod.ir:8443/"; - private static String TYPE_CODE = ""; - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); -// sqlScoutServer = SqlScoutServer.create(this, getPackageName()); - - setContentView(R.layout.activity_chat); -// try { -// ProviderInstaller.installIfNeeded(this); -// } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) { -// e.printStackTrace(); -// } - TextView textViewState = findViewById(R.id.textViewStateChat); - TextView textViewToken = findViewById(R.id.textViewUserId); - - percentage = findViewById(R.id.percentage); - percentageFile = findViewById(R.id.percentageFile); - - - buttonConnect = findViewById(R.id.buttonConnect); - buttonToken = findViewById(R.id.buttonToken); - editText = findViewById(R.id.editTextMessage); - editTextToken = findViewById(R.id.editTextToken); - editTextThread = findViewById(R.id.editTextThread); - imageMap = findViewById(R.id.imageMap); - - ConstraintLayout constraintLayout = findViewById(R.id.constraintLayout); - buttonFileChoose = findViewById(R.id.buttonFileChoose); - progressBar = findViewById(R.id.progressbar); - - buttonFileChoose.setOnClickListener(this); - - textViewToken.setText(TOKEN + name); - Spinner spinner = findViewById(R.id.spinner); - Spinner spinnerSecond = findViewById(R.id.spinnerSecond); - Spinner spinnerThird = findViewById(R.id.spinnerThird); - ChatContract.view view = new ChatContract.view() { - - @Override - public void onError(String message) { - - } - - @Override - public void onMapStaticImage(ChatResponse chatResponse) { - Bitmap bitmap = chatResponse.getResult().getBitmap(); - imageMap.setImageBitmap(bitmap); - } - }; - presenter = new ChatPresenter(this, view, this); - - setupSpinner(spinner); - setupSecondSpinner(spinnerSecond); - setupThirdSpinner(spinnerThird); - buttonConnect.setOnClickListener(this); - buttonToken.setOnClickListener(this); - - - // PodNotificationActivity - //not appId : NotificationService - //notification serverName : SendPushByAppId - -// PodNotify.setApplication(this); - - } - -// public class OnMsgRecieved extends PodMessagingService { -// @Override -// public void onMessageReceived(PodNotificationActivity notification) { -// super.onMessageReceived(notification); -// Log.d("notifiy", notification.getText()); -// } -// } - - //funcThird - private void setupThirdSpinner(Spinner spinnerThird) { - ArrayAdapter adapterSpinner = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, ConstantSample.funcThird); - - adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerThird.setAdapter(adapterSpinner); - spinnerThird.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (position) { - case 0: - break; - case 1: - presenter.mapSearch("میدان آزادی", 35.7003510, 51.3376472); - break; - case 2: - presenter.mapRouting("35.7003510,51.3376472", "35.7343510,50.3376472"); - break; - case 3: - presenter.block(1382L, null, null, null - ); - - break; - case 4: - unBlock(); - - break; - case 5: - presenter.getBlockList(null, null, null); - - break; - case 6: - updateThreadInfo(); - - break; - case 7: - RequestSeenMessageList requests = new RequestSeenMessageList.Builder(17374).build(); - presenter.getSeenMessageList(requests); - break; - case 8: - RequestDeliveredMessageList requestD = new RequestDeliveredMessageList.Builder(17374).build(); - presenter.deliveredMessageList(requestD); - break; - case 9: - createThreadWithMsg(); - break; - case 10: - - getthreadWithCoreUser(); - break; - case 11: - - mapStatic(); - break; - case 12: - - mapReverse(); - break; - case 13: - sendLocationMsg(); - break; - case 14: -// add admin - break; - } - } - - @Override - public void onNothingSelected(AdapterView parent) { - - } - }); - } - - private void sendLocationMsg() { - String center = "35.7003510,51.3376472"; - - RequestLocationMessage requestLocationMessage = new RequestLocationMessage.Builder() - .center(center) - .message("This is location ") - .activity(ChatSandBoxActivity.this) - .threadId(2) - .build(); - presenter.sendLocationMessage(requestLocationMessage); - } - - public void mapReverse() { - double lat = 35.7003510; - double lng = 51.3376472; - RequestMapReverse requestMapReverse = new RequestMapReverse.Builder(lat, lng).build(); - presenter.mapReverse(requestMapReverse); - } - - public void mapStatic() { -// String center = "35.7003510,51.3376472"; - String center = "35.7003510,35.7003510"; - RequestMapStaticImage staticImage = new RequestMapStaticImage.Builder() - .center(center) - .build(); - presenter.mapStaticImage(staticImage); - } - - public void createThreadWithMsg() { - - List invite = new ArrayList<>(); - invite.add(new Invitee("122", 1)); - -// new Invitee[]{ -// new Invitee(122, 1) -// , new Invitee(1967, 2) -// ,new Invitee(123, 5) -// , new Invitee(824, 2) -// List listForwardIds = new ArrayList<>(); -// listForwardIds.add(1346L); -// RequestThreadInnerMessage message = new RequestThreadInnerMessage -// .Builder() -// .message("create thread with msg") -//// .forwardedMessageIds(listForwardIds) -// .build(); - -// RequestCreateThread requestCreateThread = new RequestCreateThread -// .Builder(0 -// , invite) -// .message(message) -// .build(); -// presenter.createThreadWithMessage(requestCreateThread); - } - - public void updateThreadInfo() { - // 1104 is a group - RequestThreadInfo threadInfo = new RequestThreadInfo.Builder(1104).threadId(1104).description("yes").name("this is test").build(); - - presenter.updateThreadInfo(threadInfo, null); - -// ThreadInfoVO threadInfoVO = new ThreadInfoVO.Builder().description("description + mine").title("new flower").build(); -// presenter.updateThreadInfo(1104, threadInfoVO, new ChatHandler() { -// @Override -// public void onUpdateThreadInfo(String uniqueId) { -// super.onUpdateThreadInfo(uniqueId); -// } -// }); - } - - public void unBlock() { - RequestUnBlock requestUnBlock = new RequestUnBlock.Builder().build(); -// RequestUnBlock requestUnBlock = new RequestUnBlock.Builder(1382).build(); - presenter.unBlock(requestUnBlock, null); - -// presenter.unBlock(1382L, new ChatHandler() { -// @Override -// public void onUnBlock(String uniqueId) { -// super.onUnBlock(uniqueId); -// } -// }); - } - - private void getthreadWithCoreUser() { -// RequestThread requestThread = new RequestThread.Builder().partnerCoreUserId(982).build(); -// presenter.getConversationVOS(requestThread); - - ArrayList threadIds = new ArrayList<>(); -// threadIds.add(1105); -// threadIds.add(1031); - long count = 5; - long offset; - long creatorCoreUserId = 2; - presenter.getThreads(null, null, null, null, creatorCoreUserId - , 0, 0, null); - } - - //funcSecond - private void setupSecondSpinner(Spinner spinnerSecond) { - ArrayAdapter adapterSpinner = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, ConstantSample.funcSecond); - - adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerSecond.setAdapter(adapterSpinner); - spinnerSecond.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (position) { - case 0: -// "Choose function", - break; - case 1: - presenter.syncContact(ChatSandBoxActivity.this); - break; - case 2: - - sendFileMessage(); - break; - case 3: - presenter.uploadImage(ChatSandBoxActivity.this, getUri()); -// presenter.uploadImageProgress(ChatSandBoxActivity.this, ChatSandBoxActivity.this, getUri() -// , new ProgressHandler.onProgress() { -// @Override -// public void onProgressUpdate(int bytesSent) { -// percentage.setText(String.valueOf(bytesSent)); -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { -// progressBar.setProgress(bytesSent, true); -// } -// } -// -// @Override -// public void onFinish(String imageJson, FileImageUpload fileImageUpload) { -// progressBar.setProgress(100); -// percentage.setText(String.valueOf(100)); -// } -// -// @Override -// public void onError(String jsonError, ErrorOutPut ErrorOutPut) { -// -// } -// }); - break; - case 4: - presenter.uploadFile(ChatSandBoxActivity.this, getUri()); - break; - case 5: - List contactIds = new ArrayList<>(); - contactIds.add(2L); -// contactIds.add(121L); - presenter.removeParticipants(1201, contactIds, new ChatHandler() { - @Override - public void onRemoveParticipants(String uniqueId) { - super.onRemoveParticipants(uniqueId); - } - }); - - break; - case 6: - List participantIds = new ArrayList<>(); - participantIds.add(822L); -// participantIds.add(577L); -// participantIds.add(824L); - -//2404 - break; - case 7: - //1482 - presenter.leaveThread(1482, new ChatHandler() { - @Override - public void onLeaveThread(String uniqueId) { - super.onLeaveThread(uniqueId); - } - }); - - break; - case 8: - deleteMessage(); - - break; - case 9: - RequestSearchContact requestSearchContact = new RequestSearchContact.Builder("0", "2").id("1063").build(); - presenter.searchContact(requestSearchContact); - break; - case 10: - NosqlSearchMetadataCriteria builderMeta = new NosqlSearchMetadataCriteria.Builder("name").is("sina").build(); - NosqlListMessageCriteriaVO criteriaVO = new NosqlListMessageCriteriaVO.Builder(231) - .count(10).metadataCriteria(builderMeta).build(); - presenter.searchHistory(criteriaVO, new ChatHandler() { - @Override - public void onSearchHistory(String uniqueId) { - super.onSearchHistory(uniqueId); - } - }); - - break; - case 11: - - replyFileMessage(); - break; - } - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - }); - } - - private void replyFileMessage() { - String messageContent = "this is reply from john"; - long threadId = 1105; - long messageId = 9321; - Uri fileUri = getUri(); - Inviter inviter = new Inviter(); - inviter.setName("sina"); - String meta = gson.toJson(inviter); - RequestReplyFileMessage fileMessage = new RequestReplyFileMessage - .Builder(messageContent, threadId, messageId, fileUri, this, - TextMessageType.Constants.FILE).systemMetaData(meta).build(); - presenter.replyFileMessage(fileMessage, null); - } - - public void deleteMessage() { - ArrayList msgIds = new ArrayList<>(); - msgIds.add(37443L); - RequestDeleteMessage requestDeleteMessage = new RequestDeleteMessage - .Builder() - .messageIds(msgIds) -// .deleteForAll(true) - .typeCode("5") - .build(); - presenter.deleteMessage(requestDeleteMessage, null); - } - - private void setupSpinner(Spinner spinner) { - ArrayAdapter adapter = new ArrayAdapter<>(this, - android.R.layout.simple_spinner_item, ConstantSample.func); - - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinner.setAdapter(adapter); - spinner.setOnItemSelectedListener(this); - } - - public void sendFileMessage() { - -// RequestFileMessage requestFileMessage = new RequestFileMessage -// .Builder(this, 1105, getUri()) -// .systemMetadata("name") -// .build(); - -// presenter.sendFileMessage(requestFileMessage, null); - -// presenter.sendFileMessage(ChatSandBoxActivity.this, ChatSandBoxActivity.this, -// "test file message", -// 381 -// , getUri(), null, null); - } - - public void sendMessage(View view) { - Inviter inviter = new Inviter(); - inviter.setName("sina"); - String meta = gson.toJson(inviter); - RequestMessage requestMessage = new RequestMessage - .Builder("test at" + " " + new Date().getTime() + name, 1105) - .jsonMetaData(meta) - .build(); - presenter.sendTextMessage(requestMessage, null); - - -// presenter.sendTextMessage("test at" + " " + new Date().getTime() + name -// , 22, null, meta, null); - -// String text = editText.getText().toString(); -//// long textThread = Long.valueOf(editTextThread.getText().toString()); -//// if (!text.equals("")) { -//// presenter.sendTextMessage(text, 381, null); -//// } else { -//// Toast.makeText(this, "Message is Empty", Toast.LENGTH_SHORT).show(); -//// } - } - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (position) { - case 0: -// "Choose function", - break; - case 1: - //"get thread" - getThreads(); - - break; - case 2: - //"rename thread", - presenter.renameThread(543, "***new group amiri*", new ChatHandler() { - @Override - public void onRenameThread(String uniqueId) { - super.onRenameThread(uniqueId); - } - }); - - break; - case 3: - //"get user info", - presenter.getUserInfo(new ChatHandler() { - @Override - public void onGetUserInfo(String uniqueId) { - super.onGetUserInfo(uniqueId); - Toast.makeText(ChatSandBoxActivity.this, uniqueId, Toast.LENGTH_SHORT).show(); - } - }); - - break; - case 4: - //"reply message", - presenter.replyMessage("this is reply from john", 381, 14103, null, new ChatHandler() { - @Override - public void onReplyMessage(String uniqueId) { - super.onReplyMessage(uniqueId); - } - }); - - break; - case 5: - /**forward message */ - ArrayList messageIds = new ArrayList<>(); - messageIds.add(9262L); - messageIds.add(9261L); - presenter.forwardMessage(2, messageIds); - break; - case 6: - - break; - case 7: - //"get thread participant", - getThreadParticipant(); - - break; - case 8: - /** - * int TO_BE_USER_SSO_ID = 1; - * int TO_BE_USER_CONTACT_ID = 2; - * int TO_BE_USER_CELLPHONE_NUMBER = 3; - * int TO_BE_USER_USERNAME = 4; - * int TO_BE_USER_ID = 5; - */ - /**"create thread" - * This is Invitee object - * ---->private int id; - * ---->private int idType; - * - */ - // 589 poria - Invitee[] invite = new Invitee[]{new Invitee("2404", 2) -// , new Invitee(1162, 2) -// , new Invitee(2404, 2) -// , new Invitee(824, 2) - }; - CacheMessageVO cacheMessageVO = new CacheMessageVO(); - cacheMessageVO.setConversationId(5464); - String metacreat = gson.toJson(cacheMessageVO); - String image = "https://core.pod.ir/nzh/image/?imageId=17006&width=476&height=476&hashCode=1666eedb75b-0.7473066083939505"; - presenter.createThread(0, invite, null, "this is the test description" - , image, metacreat, new ChatHandler() { - @Override - public void onCreateThread(String uniqueId) { - super.onCreateThread(uniqueId); - Toast.makeText(ChatSandBoxActivity.this, uniqueId, Toast.LENGTH_SHORT).show(); - } - }); - - break; - case 9: - //get thread history - getHistory(); - - break; - case 10: - //"mute thread", - muteTHread(); - - break; - case 11: - //"un mute thread" - //"un mute thread" - unmteThread(); - - break; - case 12: - //"get contacts" - getContacts(); - - break; - case 13: - //"edit message" - editMessage(); - - break; - case 14: - // add contact - addContact(); - break; - case 15: - // remove contact - removeContact(); - break; - case 16: - updateContactInfo(); - - } - } - - private void getHistory() { - History history = new History.Builder().build(); - - presenter.getHistory(history, 22, new ChatHandler() { - @Override - public void onGetHistory(String uniqueId) { - super.onGetHistory(uniqueId); - Toast.makeText(ChatSandBoxActivity.this, uniqueId, Toast.LENGTH_SHORT).show(); - } - }); - } - - private void muteTHread() { - presenter.muteThread(543, new ChatHandler() { - @Override - public void onMuteThread(String uniqueId) { - super.onMuteThread(uniqueId); - Toast.makeText(ChatSandBoxActivity.this, uniqueId, Toast.LENGTH_SHORT).show(); - } - }); - } - - private void unmteThread() { - presenter.unMuteThread(543, new ChatHandler() { - @Override - public void onUnMuteThread(String uniqueId) { - super.onUnMuteThread(uniqueId); - Toast.makeText(ChatSandBoxActivity.this, uniqueId, Toast.LENGTH_SHORT).show(); - } - }); - } - - private void getContacts() { - presenter.getContact(10, null, new ChatHandler() { - @Override - public void onGetContact(String uniqueId) { - super.onGetContact(uniqueId); - Toast.makeText(ChatSandBoxActivity.this, uniqueId, Toast.LENGTH_SHORT).show(); - } - }); - } - - private void editMessage() { - Inviter inviter = new Inviter(); - inviter.setName("sina"); - String meta = gson.toJson(inviter); - presenter.editMessage(9261, - "hi this is edit at" + new Date().getTime() + "by" + name, meta, null); - } - - private void addContact() { - presenter.addContact("Mehran", "Atash", "", "",""); - } - - private void removeContact() { - presenter.removeContact(1041); - } - - private void updateContactInfo() { - /**UPDATE CONTACTS*/ - RequestUpdateContact requestUpdateContact = new RequestUpdateContact.Builder(2404) - .cellphoneNumber("09148401824") - .firstName("Black Masoudi") - .lastName("Amjadi") - .build(); - - presenter.updateContact(requestUpdateContact); - } - - private void getThreads() { - ArrayList threadIds = new ArrayList<>(); - threadIds.add(2); -// threadIds.add(1031); -// presenter.getThreads(10, null, threadIds, null, null); - } - - private void getThreadParticipant() { - presenter.getThreadParticipant(500, 0L, 2, null); - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - - public void onUploadImage(View view) { - presenter.uploadImageProgress(this, ChatSandBoxActivity.this, getUri(), new ProgressHandler.onProgress() { - @Override - public void onProgressUpdate(String uniqueId, int progress, int totalBytesSent, int totalBytesToSend) { - runOnUiThread(new Runnable() { - @Override - public void run() { - percentage.setText(progress); - } - }); - } - - @Override - public void onFinish(String imageJson, ChatResponse chatResponse) { - Toast.makeText(getApplicationContext(), "Finish Upload", Toast.LENGTH_SHORT).show(); - percentage.setTextColor(getResources().getColor(R.color.colorAccent)); - percentage.setText("100"); - - } - }); - } - - public void onUploadFile(View view) { - if (getUri() != null) { - presenter.uploadFileProgress(ChatSandBoxActivity.this, this, getUri(), new ProgressHandler.onProgressFile() { - @Override - public void onProgressUpdate(int progress) { - } - - @Override - public void onProgress(String uniqueId, int progress, int totalBytesSent, int totalBytesToSend) { - runOnUiThread(new Runnable() { - @Override - public void run() { - runOnUiThread(new Runnable() { - @Override - public void run() { - percentageFile.setText(progress); - } - }); - - } - }); - - } - - @Override - public void onFinish(String imageJson, FileUpload fileImageUpload) { - runOnUiThread(new Runnable() { - @Override - public void run() { - percentageFile.setText("100"); - percentage.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); - } - }); - - } - }); - } - } - - @Override - public void onClick(View v) { - if (v == buttonFileChoose) { - showPicChooser(); - } - if (v == buttonConnect) { - presenter.connect(socketAddres, - appId, serverName, TOKEN, ssoHost, - platformHost, fileServer, TYPE_CODE); - -// PodNotify podNotify = new PodNotify.newBuilder() -// .setAppId("NotificationService") -// .setServerName("SendPushByAppId") -// .setSocketServerAddress("http://172.16.110.61:8017") -// .setToken(TOKEN) -// .build(this); -// -// podNotify.start(this); - } - if (v == buttonToken) { - - String freshtoken = editTextToken.getText().toString(); - if (!freshtoken.isEmpty()) { - presenter.setToken(freshtoken); - } - } - } - - - private void showPicChooser() { - Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); - startActivityForResult(i, PICK_IMAGE_FILE_REQUEST); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == Activity.RESULT_OK) { - if (data != null) { - if (requestCode == PICK_IMAGE_FILE_REQUEST) { - Uri selectedFileUri = data.getData(); - String path = selectedFileUri.toString(); - setUri(Uri.parse(path)); - - } else if (requestCode == FILE_REQUEST_CODE) { - Uri fileUri = data.getData(); - String path = FilePick.getSmartFilePath(this, fileUri); - - String pathFile = fileUri.toString(); -// setFileUri(path); - setUri(Uri.parse(pathFile)); - } - } - } - } - - public void setUri(Uri uri) { - this.uri = uri; - } - - public Uri getUri() { - return uri; - } - - public void ChooseFile(View view) { - Intent chooseFile; - Intent intent; - chooseFile = new Intent(Intent.ACTION_GET_CONTENT); - chooseFile.addCategory(Intent.CATEGORY_OPENABLE); - chooseFile.setType("*/*"); - intent = Intent.createChooser(chooseFile, "Choose a file"); - startActivityForResult(intent, FILE_REQUEST_CODE); - } - - public void setFileUri(String fileUri) { - this.fileUri = fileUri; - } - - public String getFileUri() { - return fileUri; - } - - @Override - protected void onResume() { -// sqlScoutServer.resume(); - super.onResume(); - } - - @Override - protected void onDestroy() { -// sqlScoutServer.destroy(); - super.onDestroy(); - } - - @Override - protected void onPause() { -// sqlScoutServer.destroy(); - super.onPause(); - } - - @Override - protected void onStop() { -// sqlScoutServer.destroy(); - super.onStop(); - } - -} diff --git a/app/src/main/java/com/example/chat/application/chatexample/ConstantSample.java b/app/src/main/java/com/example/chat/application/chatexample/ConstantSample.java deleted file mode 100644 index 170c8258..00000000 --- a/app/src/main/java/com/example/chat/application/chatexample/ConstantSample.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.example.chat.application.chatexample; - - -public class ConstantSample { - - - public static final String[] func = { - "Choose function", - "get thread", - "rename thread", - "get user info", - "reply message", - "forward message", - "send text message", - "get thread participant", - "create thread", - "get thread history", - "mute thread", - "un mute thread" - , "get contacts" - , "edit message" - , "add contact" - , "remove contact" - , "update contact" - , "get not seen duration" - , "pin thread" - , "unpin thread", - "Pin Message", - "Unpin Message", - "Get Mention List", - "Is Name Available", - "Create Public Thread or Channel", - "Join Public Thread", - "Close Thread", - "Get Senrty Logs" - }; - - public static final String[] funcSecond = { - "Choose function" - , "Sync Contact" - , "Send file message" - , "Upload Image" - , "Upload File" - , "Remove ConversationVO Participant" - , "Add ConversationVO Participant" - , "Leave ConversationVO" - , "Delete Message" - , "Search Contact" - , "Search History" - , "Send Reply file Message" - , "Cancel upload" - , "Retry upload" - , "Clear History" - , "Get Admin List", - "Spam ConversationVO", - "Seen Message", - "Update Profile", - "Create Bot", - "Define Bot Command", - "Start Bot", - "Start Bot" - }; - - public static final String[] funcThird = { - "Choose Map function" - , "Search Map" - , "Map Routing" - , "Block" - , "UnBlock" - , "GetBlockList" - , "Update the thread info" - , "Seen Message List" - , "delivered Message List" - , "Create thread with new Message" - , "Get thread with coreUserId" - , "map static image" - , "map reverse" - , "Send MapLocation Message" - , "Add Admin" - , "Start Typing" - , "Stop Typing" - , "Remove Admin Rules" - , "Add Auditor" - , "Remove Auditor" - , "CreateThreadWithFile" - , "Get User Roles", - "Download Image", - "Cancel Download Image", - "Get Cache Size", - "Clear Cache", - "Get Storage Size", - "Clear Storage" - - }; -} diff --git a/app/src/main/java/com/example/chat/application/chatexample/ServerType.java b/app/src/main/java/com/example/chat/application/chatexample/ServerType.java new file mode 100644 index 00000000..4034cdff --- /dev/null +++ b/app/src/main/java/com/example/chat/application/chatexample/ServerType.java @@ -0,0 +1,20 @@ +package com.example.chat.application.chatexample; + +public enum ServerType { + + INTEGRATION("INTEGRATION"), + SANDBOX("SANDBOX"), + MAIN("MAIN"); + + + private final String name; + + ServerType(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/app/src/main/java/com/example/chat/application/chatexample/enums/ServerType.java b/app/src/main/java/com/example/chat/application/chatexample/enums/ServerType.java new file mode 100644 index 00000000..2aa13722 --- /dev/null +++ b/app/src/main/java/com/example/chat/application/chatexample/enums/ServerType.java @@ -0,0 +1,22 @@ +package com.example.chat.application.chatexample.enums; + +public enum ServerType { + Main { + @Override + public String toString() { + return "Main"; + } + }, Integration { + @Override + public String toString() { + return "Integration"; + } + }, Sandbox { + @Override + public String toString() { + return "Sandbox"; + } + } + + +} diff --git a/app/src/main/java/com/example/chat/application/chatexample/model/Method.java b/app/src/main/java/com/example/chat/application/chatexample/model/Method.java new file mode 100644 index 00000000..14db0bfc --- /dev/null +++ b/app/src/main/java/com/example/chat/application/chatexample/model/Method.java @@ -0,0 +1,24 @@ +package com.example.chat.application.chatexample.model; + +public class Method { + private String name; + private String categoty; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCategoty() { + return categoty; + } + + public void setCategoty(String categoty) { + this.categoty = categoty; + } +} + + diff --git a/app/src/main/java/com/example/chat/application/chatexample/token/ApiInterface.java b/app/src/main/java/com/example/chat/application/chatexample/token/ApiInterface.java index 63b4f015..4e0838fe 100644 --- a/app/src/main/java/com/example/chat/application/chatexample/token/ApiInterface.java +++ b/app/src/main/java/com/example/chat/application/chatexample/token/ApiInterface.java @@ -3,41 +3,65 @@ import retrofit2.Call; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.Header; import retrofit2.http.POST; +import retrofit2.http.Query; +/** + * Created by Sepehr on 1/25/2017. + */ + public interface ApiInterface { - @POST("otp/handshake/") + @POST("otp/handshake") @FormUrlEncoded - Call handShake(@Field("deviceUid") String deviceid); + Call handShake( + @Field("deviceName") String deviceName, + @Field("deviceOs") String deviceOs, + @Field("deviceOsVersion") String deviceOsVersion, + @Field("deviceType") String deviceType, + @Field("deviceUID") String deviceUID + ); +// Call handShake(@Field("deviceUid") String deviceid); - @POST("otp/authorize/") + @POST("otp/authorize") @FormUrlEncoded - Call login(@Field("identity") String number, @Field("keyId") String keyId); + Call login( + @Field("identity") String identity, + @Header("keyId") String keyId + ); +// @POST("otp/verify") +// @FormUrlEncoded +// Call verifyNumber(@Header("keyId") String keyId +// , @Field("identity") String number +// , @Field("otp") String verifyCode +// ); + @POST("otp/verify") @FormUrlEncoded - Call verifyNumber(@Field("keyId") String keyId + Call verifyNumber(@Header("keyId") String keyId , @Field("identity") String number - , @Field("verifyCode") String verifyCode + , @Field("otp") String verifyCode ); - @POST("accessToken/") @FormUrlEncoded Call getOTPToken(@Field("code") String code); - @POST("refreshToken/") - @FormUrlEncoded +// @POST("refreshToken") + @GET("refresh") +// @FormUrlEncoded Call refreshToken( - @Field("refreshToken") String refreshToken + @Query("refreshToken") String refreshToken ); } \ No newline at end of file diff --git a/app/src/main/java/com/example/chat/application/chatexample/token/TokenHandler.java b/app/src/main/java/com/example/chat/application/chatexample/token/TokenHandler.java index 9036cc6d..471a3996 100644 --- a/app/src/main/java/com/example/chat/application/chatexample/token/TokenHandler.java +++ b/app/src/main/java/com/example/chat/application/chatexample/token/TokenHandler.java @@ -12,6 +12,7 @@ import java.util.concurrent.TimeUnit; + import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.logging.HttpLoggingInterceptor; @@ -50,20 +51,18 @@ private void checkRefreshToken() { refreshToken = refKey; refreshToken(); + }else { + listener.onLoginNeeded(); } } - public TokenHandler(Context context) { + public TokenHandler(Context context,ITokenHandler iTokenHandler) { this.context = context; - checkRefreshToken(); - } - - public void addListener(ITokenHandler iTokenHandler) { - listener = iTokenHandler; + checkRefreshToken(); } public void handshake(String number) { @@ -73,7 +72,7 @@ public void handshake(String number) { @SuppressLint("HardwareIds") String deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); - getAPI().handShake(deviceId) + getAPI().handShake("FanapTestDevice","android","10","MOBILE_PHONE",deviceId) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -143,21 +142,33 @@ public void onFailure(Call call, Throwable throwable) { public void verifyNumber(String code) { getAPI().verifyNumber(auth, number, code) - .enqueue(new Callback() { + .enqueue(new Callback() { @Override - public void onResponse(Call call, Response response) { + public void onResponse(Call call, Response response) { - Log.i("OTP", "Number verified!"); + Log.d("OTP", "get token done!"); - if (response.body() != null && response.body().getResult() != null) - getToken(response.body().getResult().getCode()); - else Log.i("OTP", "Number verify failed!"); + String accessToken = null; + if (response.body() != null) { + + accessToken = response.body().getResult().getAccessToken(); + refreshToken = response.body().getResult().getRefreshToken(); + + listener.onGetToken(accessToken); + + saveToken(refreshToken); + + } else { + + Log.e("OTP", "get token failed!"); + + } } @Override - public void onFailure(Call call, Throwable throwable) { + public void onFailure(Call call, Throwable throwable) { Log.i("OTP", "Number verify failed!"); listener.onError("verify failed"); @@ -165,6 +176,29 @@ public void onFailure(Call call, Throwable throwable) { } }); +// getAPI().verifyNumber(auth, number, code) +// .enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// +// Log.i("OTP", "Number verified!"); +// +// if (response.body() != null && response.body().getResult() != null) +// getToken(response.body().getResult().getCode()); +// else Log.i("OTP", "Number verify failed!"); +// +// +// } +// +// @Override +// public void onFailure(Call call, Throwable throwable) { +// Log.i("OTP", "Number verify failed!"); +// listener.onError("verify failed"); +// +// +// } +// }); + } @@ -306,13 +340,6 @@ private static ApiInterface getAPI() { public void logOut() { - SharedPreferences.Editor p = getDefaultSharedPreferences().edit(); - - p.remove(REFRESH_TOKEN); - - p.apply(); - - } @@ -323,5 +350,7 @@ public interface ITokenHandler { void onTokenRefreshed(String token); void onError(String message); + + default void onLoginNeeded(){} } } diff --git a/app/src/main/java/com/example/chat/application/chatexample/ui/custom/ChildView.java b/app/src/main/java/com/example/chat/application/chatexample/ui/custom/ChildView.java new file mode 100644 index 00000000..2602e728 --- /dev/null +++ b/app/src/main/java/com/example/chat/application/chatexample/ui/custom/ChildView.java @@ -0,0 +1,47 @@ +package com.example.chat.application.chatexample.ui.custom; + +import android.content.Context; +import android.widget.TextView; +import android.widget.Toast; + +import com.example.chat.application.chatexample.model.Method; +import com.fanap.podchat.example.R; +import com.mindorks.placeholderview.annotations.Layout; +import com.mindorks.placeholderview.annotations.Resolve; +import com.mindorks.placeholderview.annotations.View; + +@Layout(R.layout.child_layout) +public class ChildView { + private static String TAG = "ChildView"; + + @View(R.id.child_name) + TextView textViewChild; + + private Context mContext; + private Method method; + + CallBack listener; + + public ChildView(Context mContext, Method method, CallBack listener) { + this.mContext = mContext; + this.method = method; + this.listener = listener; + } + + @Resolve + private void onResolve() { + textViewChild.setText(method.getName()); + textViewChild.setOnClickListener(new android.view.View.OnClickListener() { + @Override + public void onClick(android.view.View v) { + listener.onClick(method.getName()); + } + }); + } + + public interface CallBack { + void onClick(String methosName); + } +} + + diff --git a/app/src/main/java/com/example/chat/application/chatexample/ui/custom/HeaderView.java b/app/src/main/java/com/example/chat/application/chatexample/ui/custom/HeaderView.java new file mode 100644 index 00000000..bfbfcbfa --- /dev/null +++ b/app/src/main/java/com/example/chat/application/chatexample/ui/custom/HeaderView.java @@ -0,0 +1,48 @@ +package com.example.chat.application.chatexample.ui.custom; + +import android.content.Context; +import android.widget.TextView; +import android.widget.Toast; + +import com.fanap.podchat.example.R; +import com.mindorks.placeholderview.annotations.Layout; +import com.mindorks.placeholderview.annotations.Resolve; +import com.mindorks.placeholderview.annotations.View; +import com.mindorks.placeholderview.annotations.expand.Collapse; +import com.mindorks.placeholderview.annotations.expand.Expand; +import com.mindorks.placeholderview.annotations.expand.Parent; +import com.mindorks.placeholderview.annotations.expand.SingleTop; + +@Parent +@SingleTop +@Layout(R.layout.header_layout) +public class HeaderView { + + private static String TAG = "HeaderView"; + + @View(R.id.header_text) + TextView headerText; + + private Context mContext; + private String mHeaderText; + + public HeaderView(Context context, String headerText) { + this.mContext = context; + this.mHeaderText = headerText; + } + + @Resolve + private void onResolve() { + headerText.setText(mHeaderText); + } + + @Expand + private void onExpand() { +// Toast.makeText(mContext, "onExpand "+mHeaderText, Toast.LENGTH_SHORT).show(); + } + + @Collapse + private void onCollapse() { +// Toast.makeText(mContext, "onCollapse "+mHeaderText, Toast.LENGTH_SHORT).show(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/chat/application/chatexample/utils/Utils.java b/app/src/main/java/com/example/chat/application/chatexample/utils/Utils.java new file mode 100644 index 00000000..51c45495 --- /dev/null +++ b/app/src/main/java/com/example/chat/application/chatexample/utils/Utils.java @@ -0,0 +1,38 @@ +package com.example.chat.application.chatexample.utils; + +import android.app.Activity; + +import com.example.chat.application.chatexample.model.Method; +import com.fanap.podchat.chat.App; +import com.google.gson.reflect.TypeToken; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +public class Utils { + + public static List loadJSONFromAsset(Activity activity) { + String json = null; + try { + InputStream is = null; + try { + is = activity.getAssets().open("methods.json"); + } catch (IOException e) { + e.printStackTrace(); + } + int size = is.available(); + byte[] buffer = new byte[size]; + is.read(buffer); + is.close(); + json = new String(buffer, "UTF-8"); + } catch (IOException ex) { + ex.printStackTrace(); + return null; + } + List methods = App.getGson().fromJson(json, new TypeToken>() { + }.getType()); + return methods; + } +} diff --git a/app/src/main/java/com/fanap/podchat/KafkaTestActivity.java b/app/src/main/java/com/fanap/podchat/KafkaTestActivity.java deleted file mode 100644 index 59294597..00000000 --- a/app/src/main/java/com/fanap/podchat/KafkaTestActivity.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.fanap.podchat; - -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; - -import com.example.chat.application.chatexample.BaseApplication; -import com.fanap.podchat.call.CallConfig; -import com.fanap.podchat.call.audio_call.ICallState; -import com.fanap.podchat.chat.Chat; -import com.fanap.podchat.chat.ChatListener; -import com.fanap.podchat.example.R; -import com.fanap.podchat.model.ErrorOutPut; -import com.fanap.podchat.requestobject.RequestConnect; - -public class KafkaTestActivity extends AppCompatActivity implements ICallState, ChatListener { - - TextView status; - - private String TOKEN = BaseApplication.getInstance().getString(R.string.token_ahmadsajadi); - private static String serverName = BaseApplication.getInstance().getString(R.string.integration_serverName); - private static String platformHost = BaseApplication.getInstance().getString(R.string.integration_platformHost); - private static String fileServer = BaseApplication.getInstance().getString(R.string.integration_platformHost); - - private static String appId = BaseApplication.getInstance().getString(R.string.integration_appId); - private static String ssoHost = BaseApplication.getInstance().getString(R.string.integration_ssoHost); - private static String socketAddress = BaseApplication.getInstance().getString(R.string.integration_socketAddress); - private static String podspaceServer = BaseApplication.getInstance().getString(R.string.podspace_file_server_main); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_kafka_test); - - Chat chat = Chat.init(this); - - EditText br = findViewById(R.id.etBroker); - EditText s = findViewById(R.id.etSend); - EditText r = findViewById(R.id.etReceive); - EditText sk = findViewById(R.id.etSendKey); - - status = findViewById(R.id.tvKafkaSt); - - Button d = findViewById(R.id.buttonConnectKafka); - - - RequestConnect connect = new RequestConnect.Builder( - socketAddress, - appId, - serverName, - TOKEN, - ssoHost, - platformHost, fileServer, - podspaceServer - ).build(); - - chat.addListener(this); - - CallConfig callConfig = new CallConfig(this.getClass().getName()); - chat.setAudioCallConfig(callConfig); - -// chat.connect(connect); - - d.setOnClickListener(v -> new Thread(() -> chat.testCall( - br.getText().toString(), - s.getText().toString(), - r.getText().toString(), - "", - sk.getText().toString(), - this - )).start()); - - - } - - @Override - public void onInfoEvent(String info) { -// status.setText(info); - updataStatus(info); - } - - private void updataStatus(String info) { - runOnUiThread(() -> { - status.setText(info); - }); - } - - @Override - public void onErrorEvent(String cause) { -// status.setText(cause); - updataStatus(cause); - } - - @Override - public void onEndCallRequested() { - - } - - @Override - public void onError(String content, ErrorOutPut error) { - updataStatus(content); - } - - @Override - public void onChatState(String state) { - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/fanap/podchat/call/contacts/ContactsAdaptor.java b/app/src/main/java/com/fanap/podchat/call/contacts/ContactsAdaptor.java deleted file mode 100644 index cd5074f9..00000000 --- a/app/src/main/java/com/fanap/podchat/call/contacts/ContactsAdaptor.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.fanap.podchat.call.contacts; - -import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.TextView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.fanap.podchat.example.R; -import com.fanap.podchat.util.Util; - -import java.util.ArrayList; - -class ContactsAdaptor extends RecyclerView.Adapter { - - - public interface IContactInterface { - void onCantactSelected(ContactsWrapper wrapper); - } - - ArrayList contacts; - - Context context; - - boolean isMultiSelect = false; - - IContactInterface iContactInterface; - - public ContactsAdaptor(ArrayList contacts, Context context) { - this.contacts = contacts; - this.context = context; - } - - public ContactsAdaptor(ArrayList contacts, Context context, boolean isMultiSelect, IContactInterface iContactInterface) { - this.contacts = contacts; - this.context = context; - this.isMultiSelect = isMultiSelect; - this.iContactInterface = iContactInterface; - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { - View view = LayoutInflater.from(context).inflate(R.layout.item_contact, viewGroup, false); - return new ViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { - - if (!contacts.isEmpty()) { - - ContactsWrapper contact = contacts.get(viewHolder.getAdapterPosition()); - - viewHolder.tvName.setText(contact.getFirstName() + " " + contact.getLastName()); - - if (Util.isNotNullOrEmpty(contact.getProfileImage())) - Glide.with(context) - .load(contact.getProfileImage()) - .apply(RequestOptions.circleCropTransform()) - .into(viewHolder.imageViewProfile); - - if (contact.isSelected()) - viewHolder.imageViewDone.setVisibility(View.VISIBLE); - else viewHolder.imageViewDone.setVisibility(View.INVISIBLE); - - - if(isMultiSelect) - viewHolder.imageButtonCall.setVisibility(View.GONE); - else { - viewHolder.imageButtonCall.setOnClickListener(v->{ - if (iContactInterface != null) - iContactInterface.onCantactSelected(contact); - }); - } - - viewHolder.itemView.setOnClickListener(v -> { - if (isMultiSelect) { - contact.setSelected(!contact.isSelected()); - notifyDataSetChanged(); - if (iContactInterface != null) - iContactInterface.onCantactSelected(contact); - } - }); - } - - - } - - @Override - public int getItemCount() { - return contacts.size(); - } - - public static class ViewHolder extends RecyclerView.ViewHolder { - - TextView tvName; - ImageView imageViewProfile; - ImageButton imageButtonCall; - ImageView imageViewDone; - - public ViewHolder(@NonNull View itemView) { - super(itemView); - tvName = itemView.findViewById(R.id.tvContactName); - imageViewProfile = itemView.findViewById(R.id.imageContact); - imageButtonCall = itemView.findViewById(R.id.imgBtnCallContact); - imageViewDone = itemView.findViewById(R.id.imageDone); - } - - } -} diff --git a/app/src/main/java/com/fanap/podchat/call/contacts/ContactsFragment.java b/app/src/main/java/com/fanap/podchat/call/contacts/ContactsFragment.java deleted file mode 100644 index ee67ce2a..00000000 --- a/app/src/main/java/com/fanap/podchat/call/contacts/ContactsFragment.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.fanap.podchat.call.contacts; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.fanap.podchat.example.R; - -import java.util.ArrayList; - - -public class ContactsFragment extends Fragment { - - - RecyclerView recyclerView; - - ArrayList contacts = new ArrayList<>(); - ContactsAdaptor adaptor; - - public ContactsFragment() { - // Required empty public constructor - } - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - contacts = getArguments().getParcelableArrayList("CONTACTS"); - } - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - - View view = inflater.inflate(R.layout.fragment_contacts, container, false); - - recyclerView = view.findViewById(R.id.recyclerViewContacts); - - recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); - - adaptor = new ContactsAdaptor(contacts, view.getContext(), false, contactsWrapper -> Log.d("TAGG", "Selected " + contactsWrapper.getFirstName())); - - recyclerView.setAdapter(adaptor); - - return view; - } - - - public void updateList(ArrayList contactsWrappers) { - contacts.clear(); - contacts.addAll(contactsWrappers); - adaptor.notifyDataSetChanged(); - } -} \ No newline at end of file diff --git a/app/src/main/res/drawable/circle_grey_low.xml b/app/src/main/res/drawable/circle_grey_low.xml new file mode 100644 index 00000000..29371fca --- /dev/null +++ b/app/src/main/res/drawable/circle_grey_low.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml b/app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml new file mode 100644 index 00000000..88dee787 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_fiber_manual_record_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_mobile_screen_share_24.xml b/app/src/main/res/drawable/ic_baseline_mobile_screen_share_24.xml new file mode 100644 index 00000000..303069f3 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_mobile_screen_share_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_stop_24.xml b/app/src/main/res/drawable/ic_baseline_stop_24.xml new file mode 100644 index 00000000..c3963cf6 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_stop_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_call_declined.xml b/app/src/main/res/drawable/ic_call_declined.xml new file mode 100644 index 00000000..642134a4 --- /dev/null +++ b/app/src/main/res/drawable/ic_call_declined.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_call_end_24dp.xml b/app/src/main/res/drawable/ic_call_end_24dp.xml index edca9bf5..23d4795d 100644 --- a/app/src/main/res/drawable/ic_call_end_24dp.xml +++ b/app/src/main/res/drawable/ic_call_end_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_call_end_green.xml b/app/src/main/res/drawable/ic_call_end_green.xml new file mode 100644 index 00000000..e1f0232a --- /dev/null +++ b/app/src/main/res/drawable/ic_call_end_green.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_call_missed_red.xml b/app/src/main/res/drawable/ic_call_missed_red.xml new file mode 100644 index 00000000..8f914313 --- /dev/null +++ b/app/src/main/res/drawable/ic_call_missed_red.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_call_requested.xml b/app/src/main/res/drawable/ic_call_requested.xml new file mode 100644 index 00000000..ae363a81 --- /dev/null +++ b/app/src/main/res/drawable/ic_call_requested.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_cameraswitch.xml b/app/src/main/res/drawable/ic_cameraswitch.xml new file mode 100644 index 00000000..e433059a --- /dev/null +++ b/app/src/main/res/drawable/ic_cameraswitch.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_message_2.xml b/app/src/main/res/drawable/ic_message_2.xml new file mode 100644 index 00000000..4b286f4d --- /dev/null +++ b/app/src/main/res/drawable/ic_message_2.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_mic_off.xml b/app/src/main/res/drawable/ic_mic_off.xml index daa15425..7915ddf6 100644 --- a/app/src/main/res/drawable/ic_mic_off.xml +++ b/app/src/main/res/drawable/ic_mic_off.xml @@ -1,6 +1,6 @@ diff --git a/app/src/main/res/drawable/ic_mobile_screen_share.xml b/app/src/main/res/drawable/ic_mobile_screen_share.xml new file mode 100644 index 00000000..9537acc0 --- /dev/null +++ b/app/src/main/res/drawable/ic_mobile_screen_share.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_new_call.xml b/app/src/main/res/drawable/ic_new_call.xml new file mode 100644 index 00000000..a1450e1f --- /dev/null +++ b/app/src/main/res/drawable/ic_new_call.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_partner_add.xml b/app/src/main/res/drawable/ic_partner_add.xml new file mode 100644 index 00000000..cb309e76 --- /dev/null +++ b/app/src/main/res/drawable/ic_partner_add.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_speaker_on.xml b/app/src/main/res/drawable/ic_speaker_on.xml index a1fb93ef..9130c838 100644 --- a/app/src/main/res/drawable/ic_speaker_on.xml +++ b/app/src/main/res/drawable/ic_speaker_on.xml @@ -1,6 +1,6 @@ diff --git a/app/src/main/res/drawable/ic_start_record_call.xml b/app/src/main/res/drawable/ic_start_record_call.xml new file mode 100644 index 00000000..199210e6 --- /dev/null +++ b/app/src/main/res/drawable/ic_start_record_call.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_videocam.xml b/app/src/main/res/drawable/ic_videocam.xml new file mode 100644 index 00000000..82e54727 --- /dev/null +++ b/app/src/main/res/drawable/ic_videocam.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_videocam_off.xml b/app/src/main/res/drawable/ic_videocam_off.xml new file mode 100644 index 00000000..3fcf3ca4 --- /dev/null +++ b/app/src/main/res/drawable/ic_videocam_off.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_videocam_white.xml b/app/src/main/res/drawable/ic_videocam_white.xml new file mode 100644 index 00000000..5ea7a412 --- /dev/null +++ b/app/src/main/res/drawable/ic_videocam_white.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/rounded_border_white.xml b/app/src/main/res/drawable/rounded_border_white.xml new file mode 100644 index 00000000..f906bf98 --- /dev/null +++ b/app/src/main/res/drawable/rounded_border_white.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_button_prim_dark.xml b/app/src/main/res/drawable/rounded_button_prim_dark.xml new file mode 100644 index 00000000..77c5e4ac --- /dev/null +++ b/app/src/main/res/drawable/rounded_button_prim_dark.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_button_transparent.xml b/app/src/main/res/drawable/rounded_button_transparent.xml new file mode 100644 index 00000000..325d2925 --- /dev/null +++ b/app/src/main/res/drawable/rounded_button_transparent.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_primary.xml b/app/src/main/res/drawable/rounded_primary.xml new file mode 100644 index 00000000..d193513a --- /dev/null +++ b/app/src/main/res/drawable/rounded_primary.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_white.xml b/app/src/main/res/drawable/rounded_white.xml new file mode 100644 index 00000000..3bba9d6d --- /dev/null +++ b/app/src/main/res/drawable/rounded_white.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_white_background.xml b/app/src/main/res/drawable/rounded_white_background.xml new file mode 100644 index 00000000..b3c50389 --- /dev/null +++ b/app/src/main/res/drawable/rounded_white_background.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_call.xml b/app/src/main/res/layout/activity_call.xml index e52a5d77..5b299886 100644 --- a/app/src/main/res/layout/activity_call.xml +++ b/app/src/main/res/layout/activity_call.xml @@ -4,369 +4,159 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:keepScreenOn="true" android:background="@color/grey" tools:context="com.example.chat.application.chatexample.CallActivity"> - + + - - - + + + + + +