diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle
index 24c5e8949..2a1bb4c7f 100644
--- a/TMessagesProj/build.gradle
+++ b/TMessagesProj/build.gradle
@@ -65,16 +65,16 @@ android {
jni.srcDirs = [] //disable automatic ndk-build call
}
- sourceSets {
- debug {
- manifest.srcFile 'config/debug/AndroidManifest.xml'
- }
- release {
- manifest.srcFile 'config/release/AndroidManifest.xml'
- }
- foss {
- manifest.srcFile 'config/foss/AndroidManifest.xml'
- }
+ sourceSets.debug {
+ manifest.srcFile 'config/debug/AndroidManifest.xml'
+ }
+
+ sourceSets.release {
+ manifest.srcFile 'config/release/AndroidManifest.xml'
+ }
+
+ sourceSets.foss {
+ manifest.srcFile 'config/foss/AndroidManifest.xml'
}
defaultConfig {
diff --git a/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java
index 91ac10b6c..9e8afe33f 100644
--- a/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java
+++ b/TMessagesProj/src/main/java/org/telegram/android/AndroidUtilities.java
@@ -346,7 +346,7 @@ public class AndroidUtilities {
} else if (encryptedChat.ttl == 60 * 60 * 24 * 7) {
numberPicker.setValue(20);
} else if (encryptedChat.ttl == 0) {
- numberPicker.setValue(5);
+ numberPicker.setValue(0);
}
numberPicker.setFormatter(new NumberPicker.Formatter() {
@Override
diff --git a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java
index 953bdb110..d3cc37878 100644
--- a/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java
+++ b/TMessagesProj/src/main/java/org/telegram/android/MessageObject.java
@@ -345,7 +345,9 @@ public class MessageObject {
int dateMonth = rightNow.get(Calendar.MONTH);
dateKey = String.format("%d_%02d_%02d", dateYear, dateMonth, dateDay);
- generateLayout();
+ if (preview != 0) {
+ generateLayout();
+ }
generateThumbs(false, preview);
}
diff --git a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java
index e63e291d8..4b23d7ef0 100644
--- a/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java
+++ b/TMessagesProj/src/main/java/org/telegram/android/NotificationsController.java
@@ -424,6 +424,12 @@ public class NotificationsController {
mBuilder.setPriority(NotificationCompat.PRIORITY_MAX);
}
+ mBuilder.setCategory(NotificationCompat.CATEGORY_MESSAGE);
+ mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
+ /*Bundle bundle = new Bundle();
+ bundle.putString(NotificationCompat.EXTRA_PEOPLE, );
+ mBuilder.setExtras()*/
+
String lastMessage = null;
String lastMessageFull = null;
if (pushMessages.size() == 1) {
@@ -627,7 +633,8 @@ public class NotificationsController {
.setContentText(text)
.setGroupSummary(false)
.setContentIntent(contentIntent)
- .extend(new NotificationCompat.WearableExtender().addAction(action));
+ .extend(new NotificationCompat.WearableExtender().addAction(action))
+ .setCategory(NotificationCompat.CATEGORY_MESSAGE);
notificationManager.notify(notificationId, builder.build());
wearNoticationsIds.put(dialog_id, notificationId);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsAdapter.java
index 5cf62fbff..99915e3eb 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsAdapter.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsAdapter.java
@@ -220,7 +220,7 @@ public class ContactsAdapter extends BaseSectionsAdapter {
TLRPC.User user = MessagesController.getInstance().getUser(arr.get(position).user_id);
((UserCell)convertView).setData(user, null, null, 0);
if (checkedMap != null) {
- ((UserCell) convertView).setChecked(checkedMap.containsKey(user.id));
+ ((UserCell) convertView).setChecked(checkedMap.containsKey(user.id), false);
}
if (ignoreUsers != null) {
if (ignoreUsers.containsKey(user.id)) {
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java
index f2ae0178e..8d5fe7023 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsSearchAdapter.java
@@ -215,6 +215,9 @@ public class ContactsSearchAdapter extends BaseContactsSearchAdapter {
if (view == null) {
if (useUserCell) {
view = new UserCell(mContext, 1);
+ if (checkedMap != null) {
+ ((UserCell) view).setChecked(false, false);
+ }
} else {
view = new ProfileSearchCell(mContext);
}
@@ -244,7 +247,7 @@ public class ContactsSearchAdapter extends BaseContactsSearchAdapter {
if (useUserCell) {
((UserCell) view).setData(user, name, username, 0);
if (checkedMap != null) {
- ((UserCell) view).setChecked(checkedMap.containsKey(user.id));
+ ((UserCell) view).setChecked(checkedMap.containsKey(user.id), false);
}
} else {
((ProfileSearchCell) view).setData(user, null, null, name, username);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java
index 2f12ebf40..c7e20f198 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatActionCell.java
@@ -228,7 +228,7 @@ public class ChatActionCell extends BaseCell {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), textHeight + AndroidUtilities.dp(14));
return;
}
- int width = MeasureSpec.getSize(widthMeasureSpec);
+ int width = Math.max(AndroidUtilities.dp(30), MeasureSpec.getSize(widthMeasureSpec));
if (width != previousWidth) {
previousWidth = width;
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java
index decbc68ea..ebbe032f1 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java
@@ -328,7 +328,12 @@ public class DialogCell extends BaseCell {
messageString = Emoji.replaceEmoji(Html.fromHtml(String.format("%s: %s", name, message.messageText)), messagePaint.getFontMetricsInt(), AndroidUtilities.dp(20));
} else {
if (message.messageOwner.message != null) {
- messageString = Emoji.replaceEmoji(Html.fromHtml(String.format("%s: %s", name, message.messageOwner.message.replace("\n", " ").replace("<", "<").replace(">", ">"))), messagePaint.getFontMetricsInt(), AndroidUtilities.dp(20));
+ String mess = message.messageOwner.message;
+ if (mess.length() > 150) {
+ mess = mess.substring(0, 150);
+ }
+ mess = mess.replace("\n", " ");
+ messageString = Emoji.replaceEmoji(Html.fromHtml(String.format("%s: %s", name, mess.replace("<", "<").replace(">", ">"))), messagePaint.getFontMetricsInt(), AndroidUtilities.dp(20));
}
}
} else {
@@ -505,10 +510,11 @@ public class DialogCell extends BaseCell {
if (messageString == null) {
messageString = "";
}
- String mess = messageString.toString().replace("\n", " ");
+ String mess = messageString.toString();
if (mess.length() > 150) {
mess = mess.substring(0, 150);
}
+ mess = mess.replace("\n", " ");
messageString = Emoji.replaceEmoji(mess, messagePaint.getFontMetricsInt(), AndroidUtilities.dp(17));
}
messageWidth = Math.max(AndroidUtilities.dp(12), messageWidth);
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java
index 1492ccf90..4d49a33a2 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java
@@ -142,11 +142,11 @@ public class UserCell extends FrameLayout {
update(0);
}
- public void setChecked(boolean checked) {
+ public void setChecked(boolean checked, boolean animated) {
if (checkBox.getVisibility() != VISIBLE) {
checkBox.setVisibility(VISIBLE);
}
- checkBox.setChecked(checked);
+ checkBox.setChecked(checked, animated);
}
@Override
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java
index c03c0af83..7a3193837 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateActivity.java
@@ -120,7 +120,7 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
isBroadcast = args.getBoolean("broadcast", false);
isAlwaysShare = args.getBoolean("isAlwaysShare", false);
isNeverShare = args.getBoolean("isNeverShare", false);
- maxCount = !isBroadcast ? MessagesController.getInstance().maxGroupCount : MessagesController.getInstance().maxBroadcastCount;
+ maxCount = !isBroadcast ? MessagesController.getInstance().maxGroupCount - 1 : MessagesController.getInstance().maxBroadcastCount;
}
@Override
@@ -391,7 +391,9 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
return;
}
+ boolean check = true;
if (selectedContacts.containsKey(user.id)) {
+ check = false;
try {
XImageSpan span = selectedContacts.get(user.id);
selectedContacts.remove(user.id);
@@ -441,7 +443,9 @@ public class GroupCreateActivity extends BaseFragment implements NotificationCen
listView.setVerticalScrollBarEnabled(false);
emptyTextView.setText(LocaleController.getString("NoContacts", R.string.NoContacts));
} else {
- listView.invalidateViews();
+ if (view instanceof UserCell) {
+ ((UserCell) view).setChecked(check, true);
+ }
}
}
});
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LastSeenActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LastSeenActivity.java
index 7ba77bdb8..653e39fde 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/LastSeenActivity.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/LastSeenActivity.java
@@ -193,8 +193,14 @@ public class LastSeenActivity extends BaseFragment implements NotificationCenter
public void didSelectUsers(ArrayList ids) {
if (i == neverShareRow) {
currentMinus = ids;
+ for (Integer id : currentMinus) {
+ currentPlus.remove(id);
+ }
} else {
currentPlus = ids;
+ for (Integer id : currentPlus) {
+ currentMinus.remove(id);
+ }
}
doneButton.setVisibility(View.VISIBLE);
listAdapter.notifyDataSetChanged();
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/CheckBox.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/CheckBox.java
index c407daac5..9a27adba8 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Views/CheckBox.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/CheckBox.java
@@ -9,50 +9,146 @@
package org.telegram.ui.Views;
import android.content.Context;
+import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
import android.graphics.drawable.Drawable;
-import android.widget.CompoundButton;
+import android.view.View;
+import org.telegram.android.AndroidUtilities;
import org.telegram.messenger.R;
+import org.telegram.ui.AnimationCompat.ObjectAnimatorProxy;
-public class CheckBox extends CompoundButton {
+public class CheckBox extends View {
- private Paint paint;
- private Drawable checkDrawable;
+ private static Drawable checkDrawable;
+ private static Paint paint;
+ private static Paint eraser;
+ private static Paint eraser2;
+ private static Paint checkPaint;
+
+ private Bitmap drawBitmap;
+ private Bitmap checkBitmap;
+ private Canvas bitmapCanvas;
+ private Canvas checkCanvas;
+
+ private float progress;
+ private ObjectAnimatorProxy checkAnimator;
+ private boolean isCheckAnimation = true;
+
+ private boolean attachedToWindow;
+ private boolean isChecked = false;
+
+ private final static float progressBounceDiff = 0.2f;
public CheckBox(Context context) {
super(context);
+ if (checkDrawable == null) {
+ checkDrawable = context.getResources().getDrawable(R.drawable.round_check2);
+ paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ paint.setColor(0xff5ec245);
+ eraser = new Paint(Paint.ANTI_ALIAS_FLAG);
+ eraser.setColor(0);
+ eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
+ eraser2 = new Paint(Paint.ANTI_ALIAS_FLAG);
+ eraser2.setColor(0);
+ eraser2.setStyle(Paint.Style.STROKE);
+ eraser2.setStrokeWidth(AndroidUtilities.dp(28));
+ eraser2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
+ }
+ drawBitmap = Bitmap.createBitmap(AndroidUtilities.dp(22), AndroidUtilities.dp(22), Bitmap.Config.ARGB_4444);
+ bitmapCanvas = new Canvas(drawBitmap);
+ checkBitmap = Bitmap.createBitmap(AndroidUtilities.dp(22), AndroidUtilities.dp(22), Bitmap.Config.ARGB_4444);
+ checkCanvas = new Canvas(checkBitmap);
+ }
- paint = new Paint(Paint.ANTI_ALIAS_FLAG);
- paint.setColor(0xff5ec245);
+ public void setProgress(float value) {
+ progress = value;
+ invalidate();
+ }
- checkDrawable = context.getResources().getDrawable(R.drawable.round_check2);
+ public float getProgress() {
+ return progress;
+ }
+
+ private void cancelCheckAnimator() {
+ if (checkAnimator != null) {
+ checkAnimator.cancel();
+ }
+ }
+
+ private void animateToCheckedState(boolean newCheckedState) {
+ isCheckAnimation = newCheckedState;
+ checkAnimator = ObjectAnimatorProxy.ofFloatProxy(this, "progress", newCheckedState ? 1 : 0);
+ checkAnimator.setDuration(300);
+ checkAnimator.start();
}
@Override
- public void setChecked(boolean checked) {
- super.setChecked(checked);
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ attachedToWindow = true;
+ }
- checked = isChecked();
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ attachedToWindow = false;
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ }
+
+ public void setChecked(boolean checked, boolean animated) {
+ isChecked = checked;
invalidate();
- /*if (attachedToWindow && wasLayout) {
- animateThumbToCheckedState(checked);
+ if (attachedToWindow && animated) {
+ animateToCheckedState(checked);
} else {
- cancelPositionAnimator();
- setThumbPosition(checked ? 1 : 0);
- }*/
+ cancelCheckAnimator();
+ setProgress(checked ? 1.0f : 0.0f);
+ }
+ }
+
+ public boolean isChecked() {
+ return isChecked;
}
@Override
protected void onDraw(Canvas canvas) {
- if (isChecked()) {
- canvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, getMeasuredWidth() / 2, paint);
- int x = (getMeasuredWidth() - checkDrawable.getIntrinsicWidth()) / 2;
- int y = (getMeasuredHeight() - checkDrawable.getIntrinsicHeight()) / 2;
- checkDrawable.setBounds(x, y, x + checkDrawable.getIntrinsicWidth(), y + checkDrawable.getIntrinsicHeight());
- checkDrawable.draw(canvas);
+ if (progress != 0) {
+ drawBitmap.eraseColor(0);
+ float rad = getMeasuredWidth() / 2;
+
+ float roundProgress = progress >= 0.5f ? 1.0f : progress / 0.5f;
+ float checkProgress = progress < 0.5f ? 0.0f : (progress - 0.5f) / 0.5f;
+
+ float roundProgressCheckState = isCheckAnimation ? progress : (1.0f - progress);
+ if (roundProgressCheckState < progressBounceDiff) {
+ rad -= AndroidUtilities.dp(2) * roundProgressCheckState / progressBounceDiff;
+ } else if (roundProgressCheckState < progressBounceDiff * 2) {
+ rad -= AndroidUtilities.dp(2) - AndroidUtilities.dp(2) * (roundProgressCheckState - progressBounceDiff) / progressBounceDiff;
+ }
+ bitmapCanvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, rad, paint);
+ bitmapCanvas.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, rad * (1 - roundProgress), eraser);
+ canvas.drawBitmap(drawBitmap, 0, 0, null);
+
+ checkBitmap.eraseColor(0);
+ int w = checkDrawable.getIntrinsicWidth();
+ int h = checkDrawable.getIntrinsicHeight();
+ int x = (getMeasuredWidth() - w) / 2;
+ int y = (getMeasuredHeight() - h) / 2;
+
+ checkDrawable.setBounds(x, y, x + w, y + h);
+ checkDrawable.draw(checkCanvas);
+ checkCanvas.drawCircle(getMeasuredWidth() / 2 - AndroidUtilities.dp(2.5f), getMeasuredHeight() / 2 + AndroidUtilities.dp(4), ((getMeasuredWidth() + AndroidUtilities.dp(6)) / 2) * (1 - checkProgress), eraser2);
+
+ canvas.drawBitmap(checkBitmap, 0, 0, null);
}
}
}
diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Views/Switch.java b/TMessagesProj/src/main/java/org/telegram/ui/Views/Switch.java
index b1bb9aa0a..1a10e4334 100644
--- a/TMessagesProj/src/main/java/org/telegram/ui/Views/Switch.java
+++ b/TMessagesProj/src/main/java/org/telegram/ui/Views/Switch.java
@@ -90,7 +90,6 @@ public class Switch extends CompoundButton {
private ObjectAnimatorProxy mPositionAnimator;
- @SuppressWarnings("hiding")
private final Rect mTempRect = new Rect();
public Switch(Context context) {
diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml
index 6006908e2..d38745b32 100644
--- a/TMessagesProj/src/main/res/values/strings.xml
+++ b/TMessagesProj/src/main/res/values/strings.xml
@@ -137,7 +137,7 @@
%1$s removed you from the group %2$s
%1$s has left the group %2$s
%1$s joined Telegram!
- %1$s,\nWe detected a login into your account from a new device on %2$s\n\nDevice: %3$s\nLocation: %4$s\n\nIf this wasn\'t you, you can go to Settings - Terminate all sessions.\n\nSincerely,\nThe Telegram Team
+ %1$s,\nWe detected a login into your account from a new device on %2$s\n\nDevice: %3$s\nLocation: %4$s\n\nIf this wasn\'t you, you can go to Settings - Privacy and Security - Terminate all other sessions.\n\nSincerely,\nThe Telegram Team
%1$s updated profile photo
Reply
Reply to %1$s