Skip to content

Commit

Permalink
fix for notification
Browse files Browse the repository at this point in the history
  • Loading branch information
lzwjava committed May 13, 2015
1 parent f521940 commit cec1528
Show file tree
Hide file tree
Showing 23 changed files with 272 additions and 172 deletions.
49 changes: 9 additions & 40 deletions leanchat/src/main/java/com/avoscloud/chat/base/App.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,22 @@
package com.avoscloud.chat.base;

import android.app.Application;
import android.app.Notification;
import android.content.Context;
import android.os.StrictMode;
import com.avos.avoscloud.*;
import com.avoscloud.chat.entity.avobject.AddRequest;
import com.avoscloud.chat.entity.avobject.UpdateInfo;
import com.avoscloud.chat.entity.avobject.User;
import com.avoscloud.chat.service.CacheService;
import com.avoscloud.chat.service.ChatManagerAdapterImpl;
import com.avoscloud.chat.service.ConversationManager;
import com.avoscloud.chat.service.PreferenceMap;
import com.avoscloud.chat.ui.entry.EntrySplashActivity;
import com.avoscloud.chat.util.Logger;
import com.avoscloud.chat.util.Utils;
import com.avoscloud.leanchatlib.controller.ChatManager;
import com.avoscloud.leanchatlib.controller.UserInfoFactory;
import com.avoscloud.leanchatlib.model.UserInfo;
import com.baidu.mapapi.SDKInitializer;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;

import java.util.List;

/**
* Created by lzw on 14-5-29.
*/
Expand Down Expand Up @@ -88,44 +81,20 @@ public void onCreate() {
chatManager.setupDatabaseWithSelfId(AVUser.getCurrentUser().getObjectId());
}
chatManager.setConversationEventHandler(ConversationManager.getConversationHandler());
chatManager.setUserInfoFactory(new UserInfoFactory() {
PreferenceMap preferenceMap = PreferenceMap.getCurUserPrefDao(App.this);

@Override
public UserInfo getUserInfoById(String userId) {
AVUser user = CacheService.lookupUser(userId);
UserInfo userInfo = new UserInfo();
userInfo.setUsername(user.getUsername());
userInfo.setAvatarUrl(User.getAvatarUrl(user));
return userInfo;
}

@Override
public void cacheUserInfoByIdsInBackground(List<String> userIds) throws Exception {
CacheService.cacheUsers(userIds);
}

@Override
public boolean showNotificationWhenNewMessageCome(String selfId) {
return preferenceMap.isNotifyWhenNews();
}

@Override
public void configureNotification(Notification notification) {
if (preferenceMap.isVoiceNotify()) {
notification.defaults |= Notification.DEFAULT_SOUND;
}
if (preferenceMap.isVibrateNotify()) {
notification.defaults |= Notification.DEFAULT_VIBRATE;
}
}
});
ChatManagerAdapterImpl chatManagerAdapter = new ChatManagerAdapterImpl(App.ctx);
chatManager.setChatManagerAdapter(chatManagerAdapter);
ChatManager.setDebugEnabled(App.debug);
if (App.debug) {
Logger.level = Logger.VERBOSE;
} else {
Logger.level = Logger.NONE;
}
// AVNetworkHelper.amendDNS("leancloud.cn", new AVNetworkHelper.DNSUpdateCallback() {
// @Override
// public void done(AVException e) {
//
// }
// });
}

public void openStrictMode() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package com.avoscloud.chat.service;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import com.avos.avoscloud.AVUser;
import com.avos.avoscloud.im.v2.AVIMConversation;
import com.avos.avoscloud.im.v2.AVIMTypedMessage;
import com.avoscloud.chat.entity.avobject.User;
import com.avoscloud.chat.ui.chat.ChatRoomActivity;
import com.avoscloud.leanchatlib.activity.ChatActivity;
import com.avoscloud.leanchatlib.controller.ChatManagerAdapter;
import com.avoscloud.leanchatlib.controller.MessageHelper;
import com.avoscloud.leanchatlib.model.UserInfo;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
* Created by lzw on 15/5/13.
*/
public class ChatManagerAdapterImpl implements ChatManagerAdapter {
private static final long NOTIFY_PERIOD = 1000;
private static final int REPLY_NOTIFY_ID = 1;
private static long lastNotifyTime = 0;
private Context context;

public ChatManagerAdapterImpl(Context context) {
this.context = context;
}

@Override
public UserInfo getUserInfoById(String userId) {
AVUser user = CacheService.lookupUser(userId);
UserInfo userInfo = new UserInfo();
userInfo.setUsername(user.getUsername());
userInfo.setAvatarUrl(User.getAvatarUrl(user));
return userInfo;
}

@Override
public void cacheUserInfoByIdsInBackground(List<String> userIds) throws Exception {
CacheService.cacheUsers(userIds);
}

@Override
public void shouldShowNotification(final Context context, String selfId, final AVIMConversation conversation, final AVIMTypedMessage message) {
if (showNotificationWhenNewMessageCome(selfId)) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
try {
if (getUserInfoById(message.getFrom()) == null) {
cacheUserInfoByIdsInBackground(Arrays.asList(message.getFrom()));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


@Override
protected void onPostExecute(Void aVoid) {
showMessageNotification(context, conversation, message);
}
}.execute();
}
}

private void showMessageNotification(Context context, AVIMConversation conv, AVIMTypedMessage msg) {
if (System.currentTimeMillis() - lastNotifyTime < NOTIFY_PERIOD) {
return;
} else {
lastNotifyTime = System.currentTimeMillis();
}
int icon = context.getApplicationInfo().icon;
Intent intent = new Intent(context, ChatRoomActivity.class);
intent.putExtra(ChatActivity.CONVID, conv.getConversationId());

//why Random().nextInt()
//http://stackoverflow.com/questions/13838313/android-onnewintent-always-receives-same-intent
PendingIntent pend = PendingIntent.getActivity(context, new Random().nextInt(),
intent, 0);
Notification.Builder builder = new Notification.Builder(context);
CharSequence notifyContent = MessageHelper.outlineOfMsg(msg);
CharSequence username = "username";
UserInfo from = getUserInfoById(msg.getFrom());
if (from != null) {
username = from.getUsername();
}
builder.setContentIntent(pend)
.setSmallIcon(icon)
.setWhen(System.currentTimeMillis())
.setTicker(username + "\n" + notifyContent)
.setContentTitle(username)
.setContentText(notifyContent)
.setAutoCancel(true);
NotificationManager man = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = builder.getNotification();
PreferenceMap preferenceMap = PreferenceMap.getCurUserPrefDao(this.context);
if (preferenceMap.isVoiceNotify()) {
notification.defaults |= Notification.DEFAULT_SOUND;
}
if (preferenceMap.isVibrateNotify()) {
notification.defaults |= Notification.DEFAULT_VIBRATE;
}
man.notify(REPLY_NOTIFY_ID, notification);
}


private boolean showNotificationWhenNewMessageCome(String selfId) {
PreferenceMap preferenceMap = PreferenceMap.getCurUserPrefDao(context);
return preferenceMap.isNotifyWhenNews();
}


public void cancelNotification() {
NotificationManager nMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancel(REPLY_NOTIFY_ID);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import com.avoscloud.chat.ui.conversation.ConversationRecentFragment;
import com.avoscloud.chat.ui.discover.DiscoverFragment;
import com.avoscloud.chat.ui.profile.ProfileFragment;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;
import com.avoscloud.leanchatlib.controller.ChatManager;
import com.avoscloud.chat.util.Logger;
import com.baidu.location.BDLocation;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.avoscloud.leanchatlib.activity;
package com.avoscloud.chat.ui.base_activity;

import android.app.ActionBar;
import android.app.ProgressDialog;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import android.widget.EditText;
import android.widget.TextView;
import com.avoscloud.chat.R;
import com.avoscloud.leanchatlib.activity.BaseActivity;

/**
* Created by lzw on 14-9-17.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@
import com.avoscloud.chat.R;
import com.avoscloud.chat.entity.AVIMUserInfoMessage;
import com.avoscloud.chat.service.CacheService;
import com.avoscloud.chat.service.ChatManagerAdapterImpl;
import com.avoscloud.chat.service.ConversationChangeEvent;
import com.avoscloud.chat.service.event.FinishEvent;
import com.avoscloud.chat.ui.conversation.ConversationDetailActivity;
import com.avoscloud.chat.util.Logger;
import com.avoscloud.chat.util.Utils;
import com.avoscloud.leanchatlib.activity.ChatActivity;
import com.avoscloud.leanchatlib.controller.ChatManager;
import com.avoscloud.leanchatlib.controller.ConversationHelper;
import com.avoscloud.chat.util.Logger;

import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -71,6 +72,8 @@ private void initLocation() {
@Override
protected void onResume() {
CacheService.setCurConv(conversation);
ChatManagerAdapterImpl chatManagerAdapter = (ChatManagerAdapterImpl) ChatManager.getInstance().getChatManagerAdapter();
chatManagerAdapter.cancelNotification();
super.onResume();
}

Expand Down Expand Up @@ -119,7 +122,7 @@ public boolean onCreateOptionsMenu(Menu menu) {
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int menuId = item.getItemId();
if (menuId == R.id.people) {
Utils.goActivity(ctx, ConversationDetailActivity.class);
Utils.goActivity(this, ConversationDetailActivity.class);
}
return super.onMenuItemSelected(featureId, item);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import android.view.Menu;
import android.view.MenuItem;
import com.avoscloud.chat.R;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;
import com.avoscloud.chat.util.Logger;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import com.avoscloud.chat.service.AddRequestService;
import com.avoscloud.chat.service.UserService;
import com.avoscloud.chat.ui.view.BaseListView;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;
import com.avoscloud.leanchatlib.adapter.BaseListAdapter;
import com.avoscloud.leanchatlib.view.ViewHolder;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import com.avoscloud.chat.ui.view.BaseListView;
import com.avoscloud.chat.util.RefreshTask;
import com.avoscloud.chat.util.Refreshable;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;
import com.avoscloud.leanchatlib.adapter.BaseListAdapter;
import com.avoscloud.leanchatlib.view.ViewHolder;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import com.avoscloud.chat.service.CacheService;
import com.avoscloud.chat.service.UserService;
import com.avoscloud.chat.ui.chat.ChatRoomActivity;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import android.os.Bundle;
import com.avoscloud.chat.service.ConversationChangeEvent;
import com.avoscloud.chat.service.event.FinishEvent;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;
import de.greenrobot.event.EventBus;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import android.os.Bundle;
import com.avoscloud.chat.service.event.LoginFinishEvent;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;
import de.greenrobot.event.EventBus;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.avoscloud.chat.service.UserService;
import com.avoscloud.chat.ui.MainActivity;
import com.avoscloud.chat.util.Utils;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;

public class EntrySplashActivity extends BaseActivity {
public static final int SPLASH_DURATION = 2000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import android.os.Bundle;
import com.avoscloud.chat.R;
import com.avoscloud.leanchatlib.activity.BaseActivity;
import com.avoscloud.chat.ui.base_activity.BaseActivity;

/**
* Created by lzw on 14-9-24.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.avoscloud.leanchatlib_demo;

import android.app.Application;
import android.app.Notification;
import android.content.Context;
import android.widget.Toast;
import com.avos.avoscloud.AVOSCloud;
import com.avos.avoscloud.im.v2.AVIMConversation;
import com.avos.avoscloud.im.v2.AVIMTypedMessage;
import com.avoscloud.leanchatlib.controller.ChatManager;
import com.avoscloud.leanchatlib.controller.UserInfoFactory;
import com.avoscloud.leanchatlib.controller.ChatManagerAdapter;
import com.avoscloud.leanchatlib.model.UserInfo;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
Expand Down Expand Up @@ -37,7 +39,7 @@ public void onCreate() {
AVOSCloud.setDebugLogEnabled(true); // set false when release
final ChatManager chatManager = ChatManager.getInstance();
chatManager.init(this);
chatManager.setUserInfoFactory(new UserInfoFactory() {
chatManager.setChatManagerAdapter(new ChatManagerAdapter() {
@Override
public UserInfo getUserInfoById(String userId) {
UserInfo userInfo = new UserInfo();
Expand All @@ -50,14 +52,10 @@ public UserInfo getUserInfoById(String userId) {
public void cacheUserInfoByIdsInBackground(List<String> userIds) throws Exception {
}

//关于这个方法请见 leanchat 应用中的 ChatManagerAdapterImpl.java
@Override
public boolean showNotificationWhenNewMessageCome(String selfId) {
return true;
}

@Override
public void configureNotification(Notification notification) {
notification.defaults |= Notification.DEFAULT_ALL;
public void shouldShowNotification(Context context, String selfId, AVIMConversation conversation, AVIMTypedMessage message) {
Toast.makeText(context, "收到了一条消息但并未打开相应的对话。可以触发系统通知。", Toast.LENGTH_LONG).show();
}
});
initImageLoader(this);
Expand Down
Loading

0 comments on commit cec1528

Please sign in to comment.