Skip to content

Commit cfcf080

Browse files
committed
2 parents f0dd86d + 819494e commit cfcf080

File tree

4 files changed

+124
-3
lines changed

4 files changed

+124
-3
lines changed

android/src/main/java/com/codeheadlabs/zendesk/MethodCallHandlerImpl.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,54 @@
44
import android.content.Intent;
55
import android.net.Uri;
66
import android.os.Build;
7+
import android.os.Handler;
8+
import android.os.Message;
79
import android.provider.Settings;
810

911
import androidx.annotation.NonNull;
1012
import androidx.annotation.Nullable;
13+
14+
import com.zendesk.service.ZendeskCallback;
1115
import com.zopim.android.sdk.api.ZopimChat;
1216
import com.zopim.android.sdk.api.ZopimChatApi;
17+
import com.zopim.android.sdk.data.LivechatAgentsPath;
18+
import com.zopim.android.sdk.data.LivechatChatLogPath;
19+
import com.zopim.android.sdk.data.observers.ChatLogObserver;
20+
import com.zopim.android.sdk.model.ChatLog;
21+
import com.zopim.android.sdk.model.PushData;
1322
import com.zopim.android.sdk.model.VisitorInfo;
1423
import com.zopim.android.sdk.prechat.ZopimChatActivity;
1524
import com.zopim.android.sdk.util.AppInfo;
1625
import com.zopim.android.sdk.widget.ChatWidgetService;
1726

27+
import java.util.HashMap;
28+
import java.util.LinkedHashMap;
29+
import java.util.Map;
30+
1831
import androidx.annotation.RequiresApi;
1932
import io.flutter.Log;
2033
import io.flutter.plugin.common.MethodCall;
34+
import io.flutter.plugin.common.MethodChannel;
2135
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
2236
import io.flutter.plugin.common.MethodChannel.Result;
2337

2438
public class MethodCallHandlerImpl implements MethodCallHandler {
2539

2640
@Nullable
2741
private Activity activity;
42+
int initCount= 0;
43+
private MethodChannel methodCallHandler;
44+
45+
Handler mhandler=new Handler(){
46+
@Override
47+
public void dispatchMessage(Message msg) {
48+
methodCallHandler.invokeMethod("UnreadListener",msg.what);
49+
}
50+
};
2851

52+
void setMethodCall(MethodChannel methodCallHandler){
53+
this.methodCallHandler=methodCallHandler;
54+
}
2955
void setActivity(@Nullable Activity activity) {
3056
this.activity = activity;
3157
}
@@ -68,6 +94,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
6894
}
6995
}
7096

97+
7198
private void closeChatWidget(Result result) {
7299
Log.d("closeChatWidget","closeChatWidget");
73100
ChatWidgetService.stopService(activity);
@@ -86,6 +113,11 @@ private void handleInit(MethodCall call, Result result) {
86113
result.success(true);
87114
}
88115

116+
public void getInitCountMessage(){
117+
initCount=LivechatChatLogPath.getInstance().countMessages(new ChatLog.Type[]{ChatLog.Type.CHAT_MSG_AGENT});
118+
Log.d("onActivity","initCount=="+initCount);
119+
}
120+
89121

90122
private void handleSetVisitorInfo(MethodCall call, Result result) {
91123
VisitorInfo.Builder builder = new VisitorInfo.Builder();
@@ -112,6 +144,7 @@ private void handleSetVisitorInfo(MethodCall call, Result result) {
112144
}
113145
}
114146
ZopimChat.setVisitorInfo(builder.build());
147+
115148
result.success(true);
116149
}
117150

@@ -126,7 +159,7 @@ private void handleSetToken(MethodCall call, Result result) {
126159
}
127160

128161
private void handleStartChat(MethodCall call, Result result) {
129-
Log.d("handleStartChat","handleStartChat activity="+(activity==null));
162+
ZopimChatApi.getDataSource().addChatLogObserver(mChannelLogObserver);
130163
if (activity != null) {
131164
Intent intent = new Intent(activity, ZopimChatActivity.class);
132165
activity.startActivity(intent);
@@ -181,4 +214,17 @@ private void checkSystemAlertPermission(Result result) {
181214
}
182215
}
183216

217+
ChatLogObserver mChannelLogObserver = new ChatLogObserver() {
218+
public void update(LinkedHashMap<String, ChatLog> chatLog) {
219+
if(!ZendeskPlugin.isFore){
220+
int currentCount = LivechatChatLogPath.getInstance().countMessages(new ChatLog.Type[]{ChatLog.Type.CHAT_MSG_AGENT});
221+
if(initCount==0){
222+
initCount=LivechatChatLogPath.getInstance().countMessages(new ChatLog.Type[]{ChatLog.Type.CHAT_MSG_AGENT});
223+
}
224+
final int unread = currentCount-initCount;
225+
mhandler.sendEmptyMessage(unread);
226+
}
227+
}
228+
};
229+
184230
}

android/src/main/java/com/codeheadlabs/zendesk/ZendeskPlugin.java

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import android.os.Bundle;
66
import android.util.Log;
77

8+
import com.zopim.android.sdk.api.ZopimChatApi;
9+
import com.zopim.android.sdk.prechat.ZopimChatActivity;
810
import com.zopim.android.sdk.widget.ChatWidgetService;
911

1012
import androidx.annotation.NonNull;
@@ -19,14 +21,16 @@
1921
/**
2022
* ZendeskPlugin
2123
*/
22-
public class ZendeskPlugin implements FlutterPlugin, ActivityAware {
24+
public class ZendeskPlugin implements FlutterPlugin, ActivityAware , Application.ActivityLifecycleCallbacks {
2325

2426
private MethodChannel channel;
2527
private MethodCallHandlerImpl methodCallHandler = new MethodCallHandlerImpl();
2628
private Activity activity;
29+
public static boolean isFore=false;
2730

2831
public ZendeskPlugin(Activity activity) {
2932
this.activity=activity;
33+
activity.getApplication().registerActivityLifecycleCallbacks(this);
3034
}
3135

3236
public static void registerWith(Registrar registrar) {
@@ -49,6 +53,7 @@ private void startListening(BinaryMessenger messenger) {
4953
channel = new MethodChannel(messenger, "com.codeheadlabs.zendesk");
5054
channel.setMethodCallHandler(methodCallHandler);
5155
methodCallHandler.setActivity(activity);
56+
methodCallHandler.setMethodCall(channel);
5257
}
5358

5459
@Override
@@ -72,4 +77,50 @@ public void onDetachedFromActivity() {
7277
}
7378

7479

80+
@Override
81+
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
82+
83+
}
84+
85+
@Override
86+
public void onActivityStarted(Activity activity) {
87+
if(activity instanceof ZopimChatActivity){
88+
isFore=true;
89+
}
90+
Log.d("onActivity","onActivityStarted,activity="+activity);
91+
}
92+
93+
@Override
94+
public void onActivityResumed(Activity activity) {
95+
if(activity instanceof ZopimChatActivity){
96+
isFore=true;
97+
}
98+
Log.d("onActivity","onActivityResumed,activity="+activity);
99+
}
100+
101+
@Override
102+
public void onActivityPaused(Activity activity) {
103+
if(activity instanceof ZopimChatActivity){
104+
isFore=false;
105+
methodCallHandler.getInitCountMessage();
106+
}
107+
}
108+
109+
@Override
110+
public void onActivityStopped(Activity activity) {
111+
Log.d("onActivity","onActivityStopped,activity="+activity);
112+
if(activity instanceof ZopimChatActivity){
113+
isFore=false;
114+
}
115+
}
116+
117+
@Override
118+
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
119+
Log.d("onActivity","onActivitySaveInstanceState,activity="+activity);
120+
}
121+
122+
@Override
123+
public void onActivityDestroyed(Activity activity) {
124+
Log.d("onActivity","onActivityDestroyed,activity="+activity);
125+
}
75126
}

lib/zendesk.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ import 'dart:ui';
33

44
import 'package:flutter/services.dart';
55

6+
typedef Future<dynamic> UnReadListener(int unRead);
7+
68
class Zendesk {
79
static const MethodChannel _channel =
810
const MethodChannel('com.codeheadlabs.zendesk');
911

12+
UnReadListener _unReadListener;
13+
1014
Future<void> init(String accountKey,
1115
{String department, String appName}) async {
1216
await _channel.invokeMethod('init', <String, String>{
@@ -61,4 +65,24 @@ class Zendesk {
6165
Future<String> version() async {
6266
return _channel.invokeMethod<String>('version');
6367
}
68+
69+
void addUnreadListener(UnReadListener unReadListener) {
70+
_unReadListener = unReadListener;
71+
_channel.setMethodCallHandler(_handleMethod);
72+
}
73+
74+
Future<dynamic> _handleMethod(MethodCall call) async {
75+
switch (call.method) {
76+
case "UnreadListener":
77+
int unRead = call.arguments;
78+
if (_unReadListener != null) {
79+
_unReadListener(unRead);
80+
}
81+
}
82+
}
83+
84+
Future<void> onReceiveMessage() async {
85+
print("flutter:onReceiveMessage");
86+
await _channel.invokeMethod('onReceivedChatMessage');
87+
}
6488
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: zendesk
22
description: Flutter interface for Zendesk Mobile SDK
3-
version: 1.0.4
3+
version: 1.0.5
44
author: Jon Keating <jon@licq.org>
55
homepage: https://github.com/emostar/flutter-zendesk
66

0 commit comments

Comments
 (0)