419 lines
17 KiB
Java
419 lines
17 KiB
Java
|
/*
|
||
|
* This is the source code of Telegram for Android v. 1.4.x.
|
||
|
* It is licensed under GNU GPL v. 2 or later.
|
||
|
* You should have received a copy of the license in this archive (see LICENSE).
|
||
|
*
|
||
|
* Copyright Nikolai Kudashov, 2013-2014.
|
||
|
*/
|
||
|
|
||
|
package org.telegram.ui;
|
||
|
|
||
|
import android.app.Activity;
|
||
|
import android.app.KeyguardManager;
|
||
|
import android.content.Context;
|
||
|
import android.content.Intent;
|
||
|
import android.graphics.drawable.AnimationDrawable;
|
||
|
import android.os.Bundle;
|
||
|
import android.os.PowerManager;
|
||
|
import android.util.TypedValue;
|
||
|
import android.view.View;
|
||
|
import android.view.ViewGroup;
|
||
|
import android.view.WindowManager;
|
||
|
import android.widget.RelativeLayout;
|
||
|
import android.widget.TextView;
|
||
|
|
||
|
import org.telegram.android.AndroidUtilities;
|
||
|
import org.telegram.android.ContactsController;
|
||
|
import org.telegram.android.LocaleController;
|
||
|
import org.telegram.android.MessagesController;
|
||
|
import org.telegram.PhoneFormat.PhoneFormat;
|
||
|
import org.telegram.messenger.ConnectionsManager;
|
||
|
import org.telegram.messenger.FileLog;
|
||
|
import org.telegram.messenger.NotificationCenter;
|
||
|
import org.telegram.messenger.R;
|
||
|
import org.telegram.messenger.TLRPC;
|
||
|
import org.telegram.messenger.Utilities;
|
||
|
import org.telegram.objects.MessageObject;
|
||
|
import org.telegram.ui.Views.ActionBar.ActionBar;
|
||
|
import org.telegram.ui.Views.ActionBar.ActionBarLayer;
|
||
|
import org.telegram.ui.Views.ActionBar.ActionBarMenu;
|
||
|
import org.telegram.ui.Views.BackupImageView;
|
||
|
import org.telegram.ui.Views.ChatActivityEnterView;
|
||
|
|
||
|
public class PopupNotificationActivity extends Activity implements NotificationCenter.NotificationCenterDelegate {
|
||
|
|
||
|
private ActionBarLayer actionBarLayer;
|
||
|
private ChatActivityEnterView chatActivityEnterView;
|
||
|
private BackupImageView avatarImageView;
|
||
|
private TextView messageText;
|
||
|
private TextView countText;
|
||
|
private View textScroll;
|
||
|
|
||
|
private int classGuid;
|
||
|
private TLRPC.User currentUser;
|
||
|
private TLRPC.Chat currentChat;
|
||
|
private boolean finished = false;
|
||
|
private CharSequence lastPrintString;
|
||
|
private MessageObject currentMessageObject = null;
|
||
|
private int currentMessageNum = 0;
|
||
|
private PowerManager.WakeLock wakeLock = null;
|
||
|
|
||
|
@Override
|
||
|
protected void onCreate(Bundle savedInstanceState) {
|
||
|
super.onCreate(savedInstanceState);
|
||
|
classGuid = ConnectionsManager.getInstance().generateClassGuid();
|
||
|
NotificationCenter.getInstance().addObserver(this, 1234);
|
||
|
NotificationCenter.getInstance().addObserver(this, MessagesController.pushMessagesUpdated);
|
||
|
NotificationCenter.getInstance().addObserver(this, MessagesController.updateInterfaces);
|
||
|
|
||
|
chatActivityEnterView = new ChatActivityEnterView();
|
||
|
chatActivityEnterView.setDelegate(new ChatActivityEnterView.ChatActivityEnterViewDelegate() {
|
||
|
@Override
|
||
|
public void onMessageSend() {
|
||
|
MessagesController.getInstance().pushMessages.remove(0);
|
||
|
currentMessageObject = null;
|
||
|
getNewMessage();
|
||
|
//MessagesController.getInstance().markDialogAsRead(dialog_id, messages.get(0).messageOwner.id, minMessageId, 0, maxDate, wasUnread);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void needSendTyping() {
|
||
|
if (currentMessageObject != null) {
|
||
|
MessagesController.getInstance().sendTyping(currentMessageObject.getDialogId(), classGuid);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
setContentView(R.layout.popup_notification_layout);
|
||
|
RelativeLayout popupContainer = (RelativeLayout) findViewById(R.id.popup_container);
|
||
|
messageText = (TextView)findViewById(R.id.message_text);
|
||
|
View messageContainer = findViewById(R.id.text_container);
|
||
|
messageContainer.setOnClickListener(new View.OnClickListener() {
|
||
|
@Override
|
||
|
public void onClick(View v) {
|
||
|
openCurrentMessage();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
ActionBar actionBar = new ActionBar(this);
|
||
|
popupContainer.addView(actionBar);
|
||
|
ViewGroup.LayoutParams layoutParams = actionBar.getLayoutParams();
|
||
|
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
|
||
|
actionBar.setLayoutParams(layoutParams);
|
||
|
|
||
|
actionBarLayer = actionBar.createLayer();
|
||
|
actionBarLayer.setDisplayHomeAsUpEnabled(true, R.drawable.ic_ab_back);
|
||
|
actionBarLayer.setBackgroundResource(R.color.header);
|
||
|
actionBarLayer.setItemsBackground(R.drawable.bar_selector);
|
||
|
actionBar.setCurrentActionBarLayer(actionBarLayer);
|
||
|
|
||
|
ActionBarMenu menu = actionBarLayer.createMenu();
|
||
|
View view = menu.addItemResource(2, R.layout.popup_count_layout);
|
||
|
countText = (TextView) view.findViewById(R.id.count_text);
|
||
|
|
||
|
view = menu.addItemResource(1, R.layout.chat_header_layout);
|
||
|
avatarImageView = (BackupImageView)view.findViewById(R.id.chat_avatar_image);
|
||
|
avatarImageView.processDetach = false;
|
||
|
|
||
|
actionBarLayer.setActionBarMenuOnItemClick(new ActionBarLayer.ActionBarMenuOnItemClick() {
|
||
|
@Override
|
||
|
public void onItemClick(int id) {
|
||
|
if (id == -1) {
|
||
|
finish();
|
||
|
} else if (id == 1) {
|
||
|
openCurrentMessage();
|
||
|
} else if (id == 2) {
|
||
|
if (MessagesController.getInstance().pushMessages.size() > 1) {
|
||
|
if (currentMessageNum < MessagesController.getInstance().pushMessages.size() - 1) {
|
||
|
currentMessageNum++;
|
||
|
} else {
|
||
|
currentMessageNum = 0;
|
||
|
}
|
||
|
currentMessageObject = MessagesController.getInstance().pushMessages.get(currentMessageNum);
|
||
|
updateInterfaceForCurrentMessage();
|
||
|
countText.setText(String.format("%d/%d", currentMessageNum + 1, MessagesController.getInstance().pushMessages.size()));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
chatActivityEnterView.setContainerView(this, findViewById(R.id.chat_layout));
|
||
|
|
||
|
PowerManager pm = (PowerManager)ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE);
|
||
|
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "screen");
|
||
|
|
||
|
handleIntent(getIntent());
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void onNewIntent(Intent intent) {
|
||
|
super.onNewIntent(intent);
|
||
|
handleIntent(intent);
|
||
|
}
|
||
|
|
||
|
public void handleIntent(Intent intent) {
|
||
|
KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
|
||
|
if (km.inKeyguardRestrictedInputMode() || !ApplicationLoader.isScreenOn) {
|
||
|
getWindow().addFlags(
|
||
|
WindowManager.LayoutParams.FLAG_DIM_BEHIND |
|
||
|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
|
||
|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
|
||
|
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||
|
} else {
|
||
|
getWindow().addFlags(
|
||
|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
|
||
|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
|
||
|
WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
|
||
|
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
|
||
|
}
|
||
|
|
||
|
if (currentMessageObject == null) {
|
||
|
currentMessageNum = 0;
|
||
|
getNewMessage();
|
||
|
}
|
||
|
wakeLock.acquire(7000);
|
||
|
}
|
||
|
|
||
|
private void getNewMessage() {
|
||
|
if (MessagesController.getInstance().pushMessages.isEmpty()) {
|
||
|
finish();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
boolean found = false;
|
||
|
if ((currentMessageNum != 0 || chatActivityEnterView.hasText()) && currentMessageObject != null) {
|
||
|
for (int a = 0; a < MessagesController.getInstance().pushMessages.size(); a++) {
|
||
|
if (MessagesController.getInstance().pushMessages.get(a).messageOwner.id == currentMessageObject.messageOwner.id) {
|
||
|
currentMessageNum = a;
|
||
|
found = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!found) {
|
||
|
currentMessageObject = MessagesController.getInstance().pushMessages.get(0);
|
||
|
updateInterfaceForCurrentMessage();
|
||
|
}
|
||
|
countText.setText(String.format("%d/%d", currentMessageNum + 1, MessagesController.getInstance().pushMessages.size()));
|
||
|
}
|
||
|
|
||
|
private void openCurrentMessage() {
|
||
|
if (currentMessageObject == null) {
|
||
|
return;
|
||
|
}
|
||
|
Intent intent = new Intent(ApplicationLoader.applicationContext, LaunchActivity.class);
|
||
|
long dialog_id = currentMessageObject.getDialogId();
|
||
|
if ((int)dialog_id != 0) {
|
||
|
int lower_id = (int)dialog_id;
|
||
|
if (lower_id < 0) {
|
||
|
intent.putExtra("chatId", -lower_id);
|
||
|
} else {
|
||
|
intent.putExtra("userId", lower_id);
|
||
|
}
|
||
|
} else {
|
||
|
intent.putExtra("encId", (int)(dialog_id >> 32));
|
||
|
}
|
||
|
intent.setAction("com.tmessages.openchat" + Math.random() + Integer.MAX_VALUE);
|
||
|
intent.setFlags(0x00008000);
|
||
|
startActivity(intent);
|
||
|
}
|
||
|
|
||
|
private void updateInterfaceForCurrentMessage() {
|
||
|
if (actionBarLayer == null) {
|
||
|
return;
|
||
|
}
|
||
|
currentChat = null;
|
||
|
currentUser = null;
|
||
|
long dialog_id = currentMessageObject.getDialogId();
|
||
|
chatActivityEnterView.setDialogId(dialog_id);
|
||
|
if ((int)dialog_id != 0) {
|
||
|
int lower_id = (int)dialog_id;
|
||
|
if (lower_id > 0) {
|
||
|
currentUser = MessagesController.getInstance().users.get(lower_id);
|
||
|
} else {
|
||
|
currentChat = MessagesController.getInstance().chats.get(-lower_id);
|
||
|
currentUser = MessagesController.getInstance().users.get(currentMessageObject.messageOwner.from_id);
|
||
|
}
|
||
|
} else {
|
||
|
TLRPC.EncryptedChat encryptedChat = MessagesController.getInstance().encryptedChats.get((int)(dialog_id >> 32));
|
||
|
currentUser = MessagesController.getInstance().users.get(encryptedChat.user_id);
|
||
|
}
|
||
|
|
||
|
if (currentChat != null && currentUser != null) {
|
||
|
actionBarLayer.setTitle(currentChat.title);
|
||
|
actionBarLayer.setSubtitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
||
|
} else if (currentUser != null) {
|
||
|
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
||
|
if ((int)dialog_id == 0) {
|
||
|
actionBarLayer.setTitleIcon(R.drawable.ic_lock_white, AndroidUtilities.dp(4));
|
||
|
} else {
|
||
|
actionBarLayer.setTitleIcon(0, 0);
|
||
|
}
|
||
|
}
|
||
|
messageText.setTextSize(TypedValue.COMPLEX_UNIT_SP, MessagesController.getInstance().fontSize);
|
||
|
messageText.setText(currentMessageObject.messageText);
|
||
|
updateSubtitle();
|
||
|
checkAndUpdateAvatar();
|
||
|
}
|
||
|
|
||
|
private void updateSubtitle() {
|
||
|
if (actionBarLayer == null) {
|
||
|
return;
|
||
|
}
|
||
|
if (currentChat != null || currentUser == null) {
|
||
|
return;
|
||
|
}
|
||
|
if (currentUser.id / 1000 != 777 && currentUser.id / 1000 != 333 && ContactsController.getInstance().contactsDict.get(currentUser.id) == null && (ContactsController.getInstance().contactsDict.size() != 0 || !ContactsController.getInstance().isLoadingContacts())) {
|
||
|
if (currentUser.phone != null && currentUser.phone.length() != 0) {
|
||
|
actionBarLayer.setTitle(PhoneFormat.getInstance().format("+" + currentUser.phone));
|
||
|
} else {
|
||
|
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
||
|
}
|
||
|
} else {
|
||
|
actionBarLayer.setTitle(Utilities.formatName(currentUser.first_name, currentUser.last_name));
|
||
|
}
|
||
|
CharSequence printString = MessagesController.getInstance().printingStrings.get(currentMessageObject.getDialogId());
|
||
|
if (printString == null || printString.length() == 0) {
|
||
|
lastPrintString = null;
|
||
|
setTypingAnimation(false);
|
||
|
TLRPC.User user = MessagesController.getInstance().users.get(currentUser.id);
|
||
|
if (user != null) {
|
||
|
currentUser = user;
|
||
|
}
|
||
|
actionBarLayer.setSubtitle(LocaleController.formatUserStatus(currentUser));
|
||
|
} else {
|
||
|
lastPrintString = printString;
|
||
|
actionBarLayer.setSubtitle(printString);
|
||
|
setTypingAnimation(true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void checkAndUpdateAvatar() {
|
||
|
TLRPC.FileLocation newPhoto = null;
|
||
|
int placeHolderId = 0;
|
||
|
if (currentChat != null) {
|
||
|
TLRPC.Chat chat = MessagesController.getInstance().chats.get(currentChat.id);
|
||
|
if (chat == null) {
|
||
|
return;
|
||
|
}
|
||
|
currentChat = chat;
|
||
|
if (currentChat.photo != null) {
|
||
|
newPhoto = currentChat.photo.photo_small;
|
||
|
}
|
||
|
placeHolderId = Utilities.getGroupAvatarForId(currentChat.id);
|
||
|
} else if (currentUser != null) {
|
||
|
TLRPC.User user = MessagesController.getInstance().users.get(currentUser.id);
|
||
|
if (user == null) {
|
||
|
return;
|
||
|
}
|
||
|
currentUser = user;
|
||
|
if (currentUser.photo != null) {
|
||
|
newPhoto = currentUser.photo.photo_small;
|
||
|
}
|
||
|
placeHolderId = Utilities.getUserAvatarForId(currentUser.id);
|
||
|
}
|
||
|
if (avatarImageView != null) {
|
||
|
avatarImageView.setImage(newPhoto, "50_50", placeHolderId);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void setTypingAnimation(boolean start) {
|
||
|
if (actionBarLayer == null) {
|
||
|
return;
|
||
|
}
|
||
|
if (start) {
|
||
|
try {
|
||
|
actionBarLayer.setSubTitleIcon(R.drawable.typing_dots, AndroidUtilities.dp(4));
|
||
|
AnimationDrawable mAnim = (AnimationDrawable)actionBarLayer.getSubTitleIcon();
|
||
|
mAnim.setAlpha(200);
|
||
|
mAnim.start();
|
||
|
} catch (Exception e) {
|
||
|
FileLog.e("tmessages", e);
|
||
|
}
|
||
|
} else {
|
||
|
actionBarLayer.setSubTitleIcon(0, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onBackPressed() {
|
||
|
if (chatActivityEnterView.isEmojiPopupShowing()) {
|
||
|
chatActivityEnterView.hideEmojiPopup();
|
||
|
return;
|
||
|
}
|
||
|
super.onBackPressed();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void onResume() {
|
||
|
super.onResume();
|
||
|
if (chatActivityEnterView != null) {
|
||
|
chatActivityEnterView.setFieldFocused(true);
|
||
|
}
|
||
|
ConnectionsManager.getInstance().setAppPaused(false, false);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void onPause() {
|
||
|
super.onPause();
|
||
|
overridePendingTransition(0, 0);
|
||
|
if (chatActivityEnterView != null) {
|
||
|
chatActivityEnterView.hideEmojiPopup();
|
||
|
chatActivityEnterView.setFieldFocused(false);
|
||
|
}
|
||
|
ConnectionsManager.getInstance().setAppPaused(true, false);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void didReceivedNotification(int id, Object... args) {
|
||
|
if (id == 1234) {
|
||
|
onFinish();
|
||
|
finish();
|
||
|
} else if (id == MessagesController.pushMessagesUpdated) {
|
||
|
getNewMessage();
|
||
|
} else if (id == MessagesController.updateInterfaces) {
|
||
|
if (currentMessageObject == null) {
|
||
|
return;
|
||
|
}
|
||
|
int updateMask = (Integer)args[0];
|
||
|
if ((updateMask & MessagesController.UPDATE_MASK_NAME) != 0 || (updateMask & MessagesController.UPDATE_MASK_STATUS) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_NAME) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_MEMBERS) != 0) {
|
||
|
updateSubtitle();
|
||
|
}
|
||
|
if ((updateMask & MessagesController.UPDATE_MASK_AVATAR) != 0 || (updateMask & MessagesController.UPDATE_MASK_CHAT_AVATAR) != 0) {
|
||
|
checkAndUpdateAvatar();
|
||
|
}
|
||
|
if ((updateMask & MessagesController.UPDATE_MASK_USER_PRINT) != 0) {
|
||
|
CharSequence printString = MessagesController.getInstance().printingStrings.get(currentMessageObject.getDialogId());
|
||
|
if (lastPrintString != null && printString == null || lastPrintString == null && printString != null || lastPrintString != null && printString != null && !lastPrintString.equals(printString)) {
|
||
|
updateSubtitle();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected void onDestroy() {
|
||
|
super.onDestroy();
|
||
|
onFinish();
|
||
|
if (wakeLock.isHeld()) {
|
||
|
wakeLock.release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected void onFinish() {
|
||
|
if (finished) {
|
||
|
return;
|
||
|
}
|
||
|
finished = true;
|
||
|
NotificationCenter.getInstance().removeObserver(this, 1234);
|
||
|
NotificationCenter.getInstance().removeObserver(this, MessagesController.pushMessagesUpdated);
|
||
|
NotificationCenter.getInstance().removeObserver(this, MessagesController.updateInterfaces);
|
||
|
if (chatActivityEnterView != null) {
|
||
|
chatActivityEnterView.onDestroy();
|
||
|
}
|
||
|
if (wakeLock.isHeld()) {
|
||
|
wakeLock.release();
|
||
|
}
|
||
|
}
|
||
|
}
|