Commit dff98476 authored by DrKLO's avatar DrKLO

Video convert queue, bug fixes

parent 27972c8e
......@@ -80,7 +80,7 @@ android {
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 330
versionCode 331
versionName "1.9.0"
}
}
......@@ -105,7 +105,7 @@ public class ContactsController {
try {
nameDisplayOrder = Settings.System.getInt(ApplicationLoader.applicationContext.getContentResolver(), "android.contacts.DISPLAY_ORDER");
} catch (Exception e) {
FileLog.e("tmessages", e);
//don't promt
}
}
......
......@@ -586,41 +586,69 @@ public class ImageLoader {
private HashMap<Integer, File> createMediaPaths() {
HashMap<Integer, File> mediaDirs = new HashMap<Integer, File>();
File cachePath = AndroidUtilities.getCacheDir();
try {
cachePath.mkdirs();
new File(cachePath, ".nomedia").createNewFile();
} catch (Exception e) {
FileLog.e("tmessages", e);
if (!cachePath.isDirectory()) {
try {
cachePath.mkdirs();
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
mediaDirs.put(FileLoader.MEDIA_DIR_CACHE, cachePath);
try {
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
File telegramPath = new File(Environment.getExternalStorageDirectory(), LocaleController.getString("AppName", R.string.AppName));
telegramPath.mkdirs();
if (telegramPath.isDirectory()) {
try {
File imagePath = new File(telegramPath, "Images");
imagePath.mkdir();
if (imagePath.isDirectory()) {
new File(imagePath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_IMAGE, imagePath);
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
try {
File videoPath = new File(telegramPath, "Video");
videoPath.mkdir();
if (videoPath.isDirectory()) {
new File(videoPath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_VIDEO, videoPath);
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
try {
File audioPath = new File(telegramPath, "Audio");
audioPath.mkdir();
if (audioPath.isDirectory()) {
new File(audioPath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_AUDIO, audioPath);
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
File imagePath = new File(telegramPath, "Images");
imagePath.mkdir();
new File(imagePath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_IMAGE, imagePath);
File videoPath = new File(telegramPath, "Video");
videoPath.mkdir();
new File(videoPath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_VIDEO, videoPath);
File audioPath = new File(telegramPath, "Audio");
audioPath.mkdir();
new File(audioPath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_AUDIO, audioPath);
File documentPath = new File(telegramPath, "Documents");
documentPath.mkdir();
new File(documentPath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_DOCUMENT, documentPath);
try {
File documentPath = new File(telegramPath, "Documents");
documentPath.mkdir();
if (documentPath.isDirectory()) {
new File(documentPath, ".nomedia").createNewFile();
mediaDirs.put(FileLoader.MEDIA_DIR_DOCUMENT, documentPath);
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
return mediaDirs;
}
......
......@@ -623,4 +623,16 @@ public class MessageObject {
}
}
}
public boolean isSending() {
return messageOwner.send_state == MESSAGE_SEND_STATE_SENDING;
}
public boolean isSendError() {
return messageOwner.send_state == MESSAGE_SEND_STATE_SEND_ERROR;
}
public boolean isSent() {
return messageOwner.send_state == MESSAGE_SEND_STATE_SENT;
}
}
......@@ -2450,7 +2450,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
public void run() {
for (HashMap.Entry<Integer, Integer> entry : corrected.entrySet()) {
Integer oldId = entry.getKey();
SendMessagesHelper.getInstance().setMessageSent(oldId);
SendMessagesHelper.getInstance().processSentMessage(oldId);
Integer newId = entry.getValue();
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageReceivedByServer, oldId, newId, null);
}
......@@ -3464,9 +3464,9 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} else {
MessageObject currentDialogMessage = dialogMessage.get(dialog.top_message);
if (currentDialogMessage != null) {
if (currentDialogMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING && lastMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
if (currentDialogMessage.isSending() && lastMessage.isSending()) {
change = true;
} else if (dialog.last_message_date < lastMessage.messageOwner.date || dialog.last_message_date == lastMessage.messageOwner.date && lastMessage.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
} else if (dialog.last_message_date < lastMessage.messageOwner.date || dialog.last_message_date == lastMessage.messageOwner.date && lastMessage.isSending()) {
change = true;
}
} else {
......
......@@ -39,6 +39,7 @@ public class NotificationCenter {
public static final int pushMessagesUpdated = 27;
public static final int blockedUsersDidLoaded = 28;
public static final int openedChatChanged = 29;
public static final int hideEmojiKeyboard = 30;
public static final int wallpapersDidLoaded = 171;
public static final int closeOtherAppActivities = 702;
......@@ -52,6 +53,9 @@ public class NotificationCenter {
public static final int FileLoadProgressChanged = 10003;
public static final int FileDidLoaded = 10004;
public static final int FileDidFailedLoad = 10005;
public static final int FilePreparingStarted = 10006;
public static final int FileNewChunkAvailable = 10007;
public static final int FilePreparingFailed = 10008;
public final static int audioProgressDidChanged = 50001;
public final static int audioDidReset = 50002;
......
......@@ -75,7 +75,14 @@ public class FileLoader {
public File getDirectory(int type) {
File dir = mediaDirs.get(type);
if (dir == null && type != MEDIA_DIR_CACHE) {
return mediaDirs.get(MEDIA_DIR_CACHE);
dir = mediaDirs.get(MEDIA_DIR_CACHE);
}
try {
if (!dir.isDirectory()) {
dir.mkdirs();
}
} catch (Exception e) {
//don't promt
}
return dir;
}
......@@ -588,6 +595,16 @@ public class FileLoader {
return new File("");
}
public static File getExistPathToAttach(TLObject attach) {
File path = getInstance().getDirectory(MEDIA_DIR_CACHE);
String fileName = getAttachFileName(attach);
File attachPath = new File(path, fileName);
if (attachPath.exists()) {
return attachPath;
}
return getPathToAttach(attach);
}
public static File getPathToAttach(TLObject attach) {
File dir = null;
if (attach instanceof TLRPC.Video) {
......
......@@ -42,8 +42,9 @@ public class FileUploadOperation {
private boolean isBigFile = false;
private String fileKey;
private int estimatedSize = 0;
FileInputStream stream;
MessageDigest mdEnc = null;
private int uploadStartTime = 0;
private FileInputStream stream;
private MessageDigest mdEnc = null;
public static interface FileUploadOperationDelegate {
public abstract void didFinishUploadingFile(FileUploadOperation operation, TLRPC.InputFile inputFile, TLRPC.InputEncryptedFile inputEncryptedFile);
......@@ -93,14 +94,16 @@ public class FileUploadOperation {
remove(fileKey + "_ivc").commit();
}
public void checkNewDataAvailable(final long finalSize) {
protected void checkNewDataAvailable(final long finalSize) {
Utilities.stageQueue.postRunnable(new Runnable() {
@Override
public void run() {
if (finalSize != 0) {
if (estimatedSize != 0 && finalSize != 0) {
estimatedSize = 0;
totalFileSize = finalSize;
totalPartsCount = (int) Math.ceil((float) totalFileSize / (float) uploadChunkSize);
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("uploadinfo", Activity.MODE_PRIVATE);
storeFileUploadInfo(preferences);
}
if (requestToken == 0) {
startUploadRequest();
......@@ -109,6 +112,20 @@ public class FileUploadOperation {
});
}
private void storeFileUploadInfo(SharedPreferences preferences) {
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(fileKey + "_time", uploadStartTime);
editor.putLong(fileKey + "_size", totalFileSize);
editor.putLong(fileKey + "_id", currentFileId);
editor.remove(fileKey + "_uploaded");
if (isEncrypted) {
editor.putString(fileKey + "_iv", Utilities.bytesToHex(iv));
editor.putString(fileKey + "_ivc", Utilities.bytesToHex(ivChange));
editor.putString(fileKey + "_key", Utilities.bytesToHex(key));
}
editor.commit();
}
private void startUploadRequest() {
if (state != 1) {
return;
......@@ -151,7 +168,7 @@ public class FileUploadOperation {
fileKey = Utilities.MD5(uploadingFilePath + (isEncrypted ? "enc" : ""));
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("uploadinfo", Activity.MODE_PRIVATE);
long fileSize = preferences.getLong(fileKey + "_size", 0);
int currentTime = (int)(System.currentTimeMillis() / 1000);
uploadStartTime = (int)(System.currentTimeMillis() / 1000);
boolean rewrite = false;
if (estimatedSize == 0 && fileSize == totalFileSize) {
currentFileId = preferences.getLong(fileKey + "_id", 0);
......@@ -170,9 +187,9 @@ public class FileUploadOperation {
}
}
if (!rewrite && date != 0) {
if (isBigFile && date < currentTime - 60 * 60 * 24) {
if (isBigFile && date < uploadStartTime - 60 * 60 * 24) {
date = 0;
} else if (!isBigFile && date < currentTime - 60 * 60 * 1.5f) {
} else if (!isBigFile && date < uploadStartTime - 60 * 60 * 1.5f) {
date = 0;
}
if (date != 0) {
......@@ -235,17 +252,7 @@ public class FileUploadOperation {
}
currentFileId = Utilities.random.nextLong();
if (estimatedSize == 0) {
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(fileKey + "_time", currentTime);
editor.putLong(fileKey + "_size", totalFileSize);
editor.putLong(fileKey + "_id", currentFileId);
editor.remove(fileKey + "_uploaded");
if (isEncrypted) {
editor.putString(fileKey + "_iv", Utilities.bytesToHex(iv));
editor.putString(fileKey + "_ivc", Utilities.bytesToHex(ivChange));
editor.putString(fileKey + "_key", Utilities.bytesToHex(key));
}
editor.commit();
storeFileUploadInfo(preferences);
}
}
......
......@@ -9,6 +9,7 @@
package org.telegram.messenger;
import java.util.ArrayList;
import java.util.Locale;
@SuppressWarnings("unchecked")
public class TLRPC {
......@@ -8539,6 +8540,7 @@ public class TLRPC {
public int local_id = 0;
public long dialog_id;
public int ttl;
public VideoEditedInfo videoEditedInfo = null;
}
public static class TL_messageForwarded extends Message {
......@@ -8559,9 +8561,13 @@ public class TLRPC {
if (id < 0) {
fwd_msg_id = stream.readInt32();
}
if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.equals("-1"))) {
if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.startsWith("-1"))) {
attachPath = stream.readString();
}
if (id < 0 && message.length() > 6 && media instanceof TL_messageMediaVideo) {
videoEditedInfo = new VideoEditedInfo();
videoEditedInfo.parseString(message);
}
}
public void serializeToStream(AbsSerializedData stream) {
......@@ -8595,9 +8601,13 @@ public class TLRPC {
date = stream.readInt32();
message = stream.readString();
media = (MessageMedia)TLClassStore.Instance().TLdeserialize(stream, stream.readInt32());
if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.equals("-1"))) {
if (id < 0 || (media != null && !(media instanceof TL_messageMediaEmpty) && message != null && message.length() != 0 && message.startsWith("-1"))) {
attachPath = stream.readString();
}
if (id < 0 && message.length() > 6 && media instanceof TL_messageMediaVideo) {
videoEditedInfo = new VideoEditedInfo();
videoEditedInfo.parseString(message);
}
}
public void serializeToStream(AbsSerializedData stream) {
......@@ -8954,6 +8964,46 @@ public class TLRPC {
}
}
public static class VideoEditedInfo {
public long startTime;
public long endTime;
public int rotationValue;
public int originalWidth;
public int originalHeight;
public int resultWidth;
public int resultHeight;
public int bitrate;
public String originalPath;
public String getString() {
return String.format(Locale.US, "-1_%d_%d_%d_%d_%d_%d_%d_%d_%s", startTime, endTime, rotationValue, originalWidth, originalHeight, bitrate, resultWidth, resultHeight, originalPath);
}
public void parseString(String string) {
if (string.length() < 6) {
return;
}
String args[] = string.split("_");
if (args.length >= 10) {
startTime = Long.parseLong(args[1]);
endTime = Long.parseLong(args[2]);
rotationValue = Integer.parseInt(args[3]);
originalWidth = Integer.parseInt(args[4]);
originalHeight = Integer.parseInt(args[5]);
bitrate = Integer.parseInt(args[6]);
resultWidth = Integer.parseInt(args[7]);
resultHeight = Integer.parseInt(args[8]);
for (int a = 9; a < args.length; a++) {
if (originalPath == null) {
originalPath = args[a];
} else {
originalPath += "_" + args[a];
}
}
}
}
}
public static class Video extends TLObject {
public long id;
public long access_hash;
......@@ -8967,10 +9017,9 @@ public class TLRPC {
public int dc_id;
public int w;
public int h;
public String path;
public byte[] key;
public byte[] iv;
public boolean estimatedSize;
public VideoEditedInfo videoEditedInfo = null;
}
public static class Document extends TLObject {
......@@ -8983,7 +9032,6 @@ public class TLRPC {
public int size;
public PhotoSize thumb;
public int dc_id;
public String path;
public byte[] key;
public byte[] iv;
}
......@@ -8997,7 +9045,6 @@ public class TLRPC {
public String mime_type;
public int size;
public int dc_id;
public String path;
public byte[] key;
public byte[] iv;
}
......
......@@ -564,17 +564,17 @@ public class ChatBaseCell extends BaseCell {
boolean drawError = false;
boolean isBroadcast = (int)(currentMessageObject.getDialogId() >> 32) == 1;
if (currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
if (currentMessageObject.isSending()) {
drawCheck1 = false;
drawCheck2 = false;
drawClock = true;
drawError = false;
} else if (currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) {
} else if (currentMessageObject.isSendError()) {
drawCheck1 = false;
drawCheck2 = false;
drawClock = false;
drawError = true;
} else if (currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) {
} else if (currentMessageObject.isSent()) {
if (!currentMessageObject.isUnread()) {
drawCheck1 = true;
drawCheck2 = true;
......
......@@ -52,8 +52,8 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
private static Drawable videoIconDrawable;
private static Drawable docMenuInDrawable;
private static Drawable docMenuOutDrawable;
private static Drawable[] buttonStatesDrawables = new Drawable[4];
private static Drawable[][] buttonStatesDrawablesDoc = new Drawable[2][2];
private static Drawable[] buttonStatesDrawables = new Drawable[5];
private static Drawable[][] buttonStatesDrawablesDoc = new Drawable[3][2];
private static TextPaint infoPaint;
private static MessageObject lastDownloadedGifMessage = null;
private static TextPaint namePaint;
......@@ -114,10 +114,13 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
buttonStatesDrawables[1] = getResources().getDrawable(R.drawable.photocancel);
buttonStatesDrawables[2] = getResources().getDrawable(R.drawable.photogif);
buttonStatesDrawables[3] = getResources().getDrawable(R.drawable.playvideo);
buttonStatesDrawables[4] = getResources().getDrawable(R.drawable.photopause);
buttonStatesDrawablesDoc[0][0] = getResources().getDrawable(R.drawable.docload_b);
buttonStatesDrawablesDoc[1][0] = getResources().getDrawable(R.drawable.doccancel_b);
buttonStatesDrawablesDoc[2][0] = getResources().getDrawable(R.drawable.docpause_b);
buttonStatesDrawablesDoc[0][1] = getResources().getDrawable(R.drawable.docload_g);
buttonStatesDrawablesDoc[1][1] = getResources().getDrawable(R.drawable.doccancel_g);
buttonStatesDrawablesDoc[2][1] = getResources().getDrawable(R.drawable.docpause_g);
videoIconDrawable = getResources().getDrawable(R.drawable.ic_video);
docMenuInDrawable = getResources().getDrawable(R.drawable.doc_actions_b);
docMenuOutDrawable = getResources().getDrawable(R.drawable.doc_actions_g);
......@@ -172,7 +175,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
float y = event.getY();
boolean result = false;
int side = AndroidUtilities.dp(44);
int side = AndroidUtilities.dp(48);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (delegate == null || delegate.canPerformActions()) {
if (buttonState != -1 && x >= buttonX && x <= buttonX + side && y >= buttonY && y <= buttonY + side) {
......@@ -321,7 +324,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
buttonState = 1;
invalidate();
} else if (buttonState == 1) {
if (currentMessageObject.isOut() && currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
if (currentMessageObject.isOut() && currentMessageObject.isSending()) {
if (delegate != null) {
delegate.didPressedCancelSendButton(this);
}
......@@ -616,7 +619,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
if (fileName == null) {
return;
}
if (currentMessageObject.isOut() && currentMessageObject.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
if (currentMessageObject.isOut() && currentMessageObject.isSending()) {
if (currentMessageObject.messageOwner.attachPath != null) {
MediaController.getInstance().addLoadingFileObserver(currentMessageObject.messageOwner.attachPath, this);
progressVisible = true;
......@@ -709,7 +712,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
}
private void invalidateProgress() {
int offset = AndroidUtilities.dp(1);
int offset = AndroidUtilities.dp(2);
invalidate((int)progressRect.left - offset, (int)progressRect.top - offset, (int)progressRect.right + offset * 2, (int)progressRect.bottom + offset * 2);
}
......@@ -742,10 +745,10 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
}
}
photoImage.setImageCoords(x, AndroidUtilities.dp(7), photoWidth, photoHeight);
int size = AndroidUtilities.dp(44);
int size = AndroidUtilities.dp(48);
buttonX = (int)(x + (photoWidth - size) / 2.0f);
buttonY = (int)(AndroidUtilities.dp(7) + (photoHeight - size) / 2.0f);
progressRect.set(buttonX + AndroidUtilities.dp(1), buttonY + AndroidUtilities.dp(1), buttonX + AndroidUtilities.dp(43), buttonY + AndroidUtilities.dp(43));
progressRect.set(buttonX + AndroidUtilities.dp(1), buttonY + AndroidUtilities.dp(1), buttonX + AndroidUtilities.dp(47), buttonY + AndroidUtilities.dp(47));
}
@Override
......@@ -783,7 +786,7 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
if (buttonState == -1) {
Drawable drawable = currentMessageObject.isOut() ? placeholderDocOutDrawable : placeholderDocInDrawable;
setDrawableBounds(drawable, photoImage.getImageX() + AndroidUtilities.dp(27), photoImage.getImageY() + AndroidUtilities.dp(27));
setDrawableBounds(drawable, photoImage.getImageX() + AndroidUtilities.dp(19), photoImage.getImageY() + AndroidUtilities.dp(19));
drawable.draw(canvas);
}
if (currentMessageObject.isOut()) {
......@@ -802,9 +805,17 @@ public class ChatMediaCell extends ChatBaseCell implements MediaController.FileD
if (buttonState >= 0 && buttonState < 4) {
Drawable currentButtonDrawable = null;
if (currentMessageObject.type == 9 && !imageDrawn) {
currentButtonDrawable = buttonStatesDrawablesDoc[buttonState][currentMessageObject.isOut() ? 1 : 0];
if (buttonState == 1 && !currentMessageObject.isSending()) {
currentButtonDrawable = buttonStatesDrawablesDoc[2][currentMessageObject.isOut() ? 1 : 0];
} else {
currentButtonDrawable = buttonStatesDrawablesDoc[buttonState][currentMessageObject.isOut() ? 1 : 0];
}
} else {
currentButtonDrawable = buttonStatesDrawables[buttonState];
if (buttonState == 1 && !currentMessageObject.isSending()) {
currentButtonDrawable = buttonStatesDrawables[4];
} else {
currentButtonDrawable = buttonStatesDrawables[buttonState];
}
}
setDrawableBounds(currentButtonDrawable, buttonX, buttonY);
currentButtonDrawable.draw(canvas);
......
......@@ -528,18 +528,18 @@ public class DialogCell extends BaseCell {
}
if (message.isFromMe() && message.isOut()) {
if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENDING) {
if (message.isSending()) {
drawCheck1 = false;
drawCheck2 = false;
drawClock = true;
drawError = false;
} else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) {
} else if (message.isSendError()) {
drawCheck1 = false;
drawCheck2 = false;
drawClock = false;
drawError = true;
drawCount = false;
} else if (message.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) {
} else if (message.isSent()) {
if (!message.isUnread()) {
drawCheck1 = true;
drawCheck2 = true;
......
......@@ -288,6 +288,7 @@ public class PhotoCropActivity extends BaseFragment {
@Override
public boolean onFragmentCreate() {
swipeBackEnabled = false;
String photoPath = getArguments().getString("photoPath");
Uri photoUri = getArguments().getParcelable("photoUri");
if (photoPath == null && photoUri == null) {
......
......@@ -645,7 +645,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
return;
}
MessageObject obj = imagesArr.get(currentIndex);
if (obj.messageOwner.send_state == MessageObject.MESSAGE_SEND_STATE_SENT) {
if (obj.isSent()) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(obj.messageOwner.id);
MessagesController.getInstance().deleteMessages(arr, null, null);
......@@ -1061,7 +1061,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
return;
}
if (currentFileName.endsWith("mp4")) {
if (currentMessageObject.messageOwner.send_state != MessageObject.MESSAGE_SEND_STATE_SENDING && currentMessageObject.messageOwner.send_state != MessageObject.MESSAGE_SEND_STATE_SEND_ERROR) {
if (!currentMessageObject.isSending() && !currentMessageObject.isSendError()) {
currentOverlay.setVisibility(View.VISIBLE);
boolean load = false;
if (currentMessageObject.messageOwner.attachPath != null && currentMessageObject.messageOwner.attachPath.length() != 0) {
......@@ -1393,7 +1393,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
if (currentThumb != null && imageReceiver == centerImage) {
placeHolder = currentThumb;
}
imageReceiver.setImage(fileLocation, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, size[0]);
imageReceiver.setImage(fileLocation, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, 0);
} else {
imageReceiver.setImageBitmap(parentActivity.getResources().getDrawable(R.drawable.photoview_placeholder));
}
......
......@@ -31,6 +31,7 @@ import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import org.telegram.android.AndroidUtilities;
import org.telegram.android.NotificationCenter;
import org.telegram.messenger.FileLog;
import org.telegram.messenger.R;
......@@ -199,11 +200,11 @@ public class ActionBarLayout extends FrameLayout {
}
private void onSlideAnimationEnd(boolean backAnimation) {
containerView.setX(0);
containerViewBack.setX(0);
containerView.setTranslationX(0);
containerViewBack.setTranslationX(0);
actionBar.stopMoving(backAnimation);
shadowView.setVisibility(View.INVISIBLE);
shadowView.setX(-AndroidUtilities.dp(2));
shadowView.setTranslationX(-AndroidUtilities.dp(2));
if (!backAnimation) {
BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1);
lastFragment.onPause();
......@@ -240,7 +241,7 @@ public class ActionBarLayout extends FrameLayout {
startedTracking = true;
startedTrackingX = (int) ev.getX();
shadowView.setVisibility(View.VISIBLE);
shadowView.setX(-AndroidUtilities.dp(2));
shadowView.setTranslationX(-AndroidUtilities.dp(2));
containerViewBack.setVisibility(View.VISIBLE);
beginTrackingSent = false;
......@@ -297,8 +298,8 @@ public class ActionBarLayout extends FrameLayout {
beginTrackingSent = true;
}
actionBar.moveActionBarByX(dx);
containerView.setX(dx);
shadowView.setX(dx - AndroidUtilities.dp(2));
containerView.setTranslationX(dx);
shadowView.setTranslationX(dx - AndroidUtilities.dp(2));
}
} else if (ev != null && ev.getPointerId(0) == startedTrackingPointerId && (ev.getAction() == MotionEvent.ACTION_CANCEL || ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_UP)) {
if (velocityTracker == null) {
......@@ -488,19 +489,20 @@ public class ActionBarLayout extends FrameLayout {
}
public boolean presentFragment(BaseFragment fragment) {
return presentFragment(fragment, false, false);
return presentFragment(fragment, false, false, true);
}
public boolean presentFragment(BaseFragment fragment, boolean removeLast) {
return presentFragment(fragment, removeLast, false);
return presentFragment(fragment, removeLast, false, true);
}
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation) {
if (checkTransitionAnimation() || delegate != null && !delegate.needPresentFragment(fragment, removeLast, forceWithoutAnimation, this) || !fragment.onFragmentCreate()) {
public boolean presentFragment(final BaseFragment fragment, final boolean removeLast, boolean forceWithoutAnimation, boolean check) {
if (checkTransitionAnimation() || delegate != null && check && !delegate.needPresentFragment(fragment, removeLast, forceWithoutAnimation, this) || !fragment.onFragmentCreate()) {
return false;
}
if (parentActivity.getCurrentFocus() != null) {
AndroidUtilities.hideKeyboard(parentActivity.getCurrentFocus());
NotificationCenter.getInstance().postNotificationName(NotificationCenter.hideEmojiKeyboard);
}
boolean needAnimation = openAnimation != null && !forceWithoutAnimation && parentActivity.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE).getBoolean("view_animations", true);
if (useAlphaAnimations && fragmentsStack.size() == 0 && alphaOpenAnimation == null) {
......@@ -533,6 +535,9 @@ public class ActionBarLayout extends FrameLayout {
if (!needAnimation) {
presentFragmentInternalRemoveOld(removeLast, currentFragment);
if (backgroundView != null) {
backgroundView.setVisibility(VISIBLE);
}
}
if (needAnimation) {
......
......@@ -157,11 +157,14 @@ public class BaseFragment {
if (parentLayout == null) {
return;
}
parentLayout.presentFragment(fragment, removeLast, forceWithoutAnimation);
parentLayout.presentFragment(fragment, removeLast, forceWithoutAnimation, true);
}
public Activity getParentActivity() {
return parentLayout.parentActivity;
if (parentLayout != null) {
return parentLayout.parentActivity;
}
return null;
}
public void showActionBar() {
......
......@@ -45,6 +45,8 @@ import org.telegram.messenger.R;
import org.telegram.messenger.TLRPC;
import org.telegram.ui.ApplicationLoader;
import java.lang.reflect.Method;
public class ChatActivityEnterView implements NotificationCenter.NotificationCenterDelegate, SizeNotifierRelativeLayout.SizeNotifierRelativeLayoutDelegate {
public static interface ChatActivityEnterViewDelegate {
......@@ -87,6 +89,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
NotificationCenter.getInstance().addObserver(this, NotificationCenter.closeChats);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidSent);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);
NotificationCenter.getInstance().addObserver(this, NotificationCenter.hideEmojiKeyboard);
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
sendByEnter = preferences.getBoolean("send_by_enter", false);
}
......@@ -99,6 +102,7 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.closeChats);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidSent);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.emojiDidLoaded);
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.hideEmojiKeyboard);
if (mWakeLock != null) {
try {
mWakeLock.release();
......@@ -507,6 +511,15 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
}
});
emojiPopup = new PopupWindow(emojiView);
/*Utry {
Method method = emojiPopup.getClass().getMethod("setWindowLayoutType", int.class);
if (method != null) {
method.invoke(emojiPopup, WindowManager.LayoutParams.LAST_SUB_WINDOW);
}
} catch (Exception e) {
//don't promt
}*/
}
public void setDelegate(ChatActivityEnterViewDelegate delegate) {
......@@ -646,6 +659,8 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
if (delegate != null) {
delegate.onMessageSend();
}
} else if (id == NotificationCenter.hideEmojiKeyboard) {
hideEmojiPopup();
}
}
}
......@@ -213,30 +213,26 @@ public class EmojiView extends LinearLayout {
}
public int getCount() {
return this.data.length;
return data.length;
}
public Object getItem(int paramInt)
{
public Object getItem(int i) {
return null;
}
public long getItemId(int paramInt)
{
return this.data[paramInt];
public long getItemId(int i) {
return data[i];
}
public View getView(int paramInt, View paramView, ViewGroup paramViewGroup) {
ImageView localObject;
if (paramView != null) {
localObject = (ImageView)paramView;
} else {
localObject = new ImageView(EmojiView.this.getContext()) {
public View getView(int i, View view, ViewGroup paramViewGroup) {
ImageView imageView = (ImageView)view;
if (imageView == null) {
imageView = new ImageView(EmojiView.this.getContext()) {
public void onMeasure(int paramAnonymousInt1, int paramAnonymousInt2) {
setMeasuredDimension(View.MeasureSpec.getSize(paramAnonymousInt1), View.MeasureSpec.getSize(paramAnonymousInt1));
}
};
localObject.setOnClickListener(new View.OnClickListener() {
imageView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (EmojiView.this.listener != null) {
EmojiView.this.listener.onEmojiSelected(EmojiView.this.convert((Long)view.getTag()));
......@@ -244,13 +240,12 @@ public class EmojiView extends LinearLayout {
EmojiView.this.addToRecent((Long)view.getTag());
}
});
localObject.setBackgroundResource(R.drawable.list_selector);
localObject.setScaleType(ImageView.ScaleType.CENTER);
imageView.setBackgroundResource(R.drawable.list_selector);
imageView.setScaleType(ImageView.ScaleType.CENTER);
}
localObject.setImageDrawable(Emoji.getEmojiBigDrawable(this.data[paramInt]));
localObject.setTag(this.data[paramInt]);
return localObject;
imageView.setImageDrawable(Emoji.getEmojiBigDrawable(data[i]));
imageView.setTag(data[i]);
return imageView;
}
@Override
......
......@@ -12,7 +12,6 @@ import java.util.Locale;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
......@@ -42,15 +41,7 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
public int getPageIconResId(int position);
}
// @formatter:off
private static final int[] ATTRS = new int[] {
android.R.attr.textSize,
android.R.attr.textColor
};
// @formatter:on
private LinearLayout.LayoutParams defaultTabLayoutParams;
private LinearLayout.LayoutParams expandedTabLayoutParams;
private final PageListener pageListener = new PageListener();
public OnPageChangeListener delegatePageListener;
......@@ -66,8 +57,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
private Paint rectPaint;
private Paint dividerPaint;
private boolean checkedTabWidths = false;
private int indicatorColor = 0xFF666666;
private int underlineColor = 0x1A000000;
private int dividerColor = 0x1A000000;
......@@ -122,33 +111,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerWidth, dm);
tabTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, tabTextSize, dm);
// get system attrs (android:textSize and android:textColor)
TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
tabTextSize = a.getDimensionPixelSize(0, tabTextSize);
tabTextColor = a.getColor(1, tabTextColor);
a.recycle();
// get custom attrs
a = context.obtainStyledAttributes(attrs, R.styleable.PagerSlidingTabStrip);
indicatorColor = a.getColor(R.styleable.PagerSlidingTabStrip_indicatorColor, indicatorColor);
underlineColor = a.getColor(R.styleable.PagerSlidingTabStrip_underlineColor, underlineColor);
dividerColor = a.getColor(R.styleable.PagerSlidingTabStrip_dividerColor, dividerColor);
indicatorHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_indicatorHeight, indicatorHeight);
underlineHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_underlineHeight, underlineHeight);
dividerPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_dividerPadding1, dividerPadding);
tabPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_tabPaddingLeftRight, tabPadding);
tabBackgroundResId = a.getResourceId(R.styleable.PagerSlidingTabStrip_tabBackground, tabBackgroundResId);
shouldExpand = a.getBoolean(R.styleable.PagerSlidingTabStrip_shouldExpand, shouldExpand);
scrollOffset = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_scrollOffset, scrollOffset);
textAllCaps = a.getBoolean(R.styleable.PagerSlidingTabStrip_textAllCaps1, textAllCaps);
a.recycle();
rectPaint = new Paint();
rectPaint.setAntiAlias(true);
rectPaint.setStyle(Style.FILL);
......@@ -158,7 +120,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
dividerPaint.setStrokeWidth(dividerWidth);
defaultTabLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
expandedTabLayoutParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f);
if (locale == null) {
locale = getResources().getConfiguration().locale;
......@@ -199,8 +160,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
updateTabStyles();
checkedTabWidths = false;
getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
......@@ -296,7 +255,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
}
}
}
}
@Override
......@@ -312,7 +270,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
}
private void scrollToChild(int position, int offset) {
if (tabCount == 0) {
return;
}
......@@ -327,7 +284,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
lastScrollX = newScrollX;
scrollTo(newScrollX, 0);
}
}
@Override
......@@ -615,5 +571,4 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
}
};
}
}
TMessagesProj/src/main/res/drawable-hdpi/photocancel.png

2.21 KB | W: | H:

TMessagesProj/src/main/res/drawable-hdpi/photocancel.png

1.4 KB | W: | H:

TMessagesProj/src/main/res/drawable-hdpi/photocancel.png
TMessagesProj/src/main/res/drawable-hdpi/photocancel.png
TMessagesProj/src/main/res/drawable-hdpi/photocancel.png
TMessagesProj/src/main/res/drawable-hdpi/photocancel.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-hdpi/photogif.png

2.35 KB | W: | H:

TMessagesProj/src/main/res/drawable-hdpi/photogif.png

1.62 KB | W: | H:

TMessagesProj/src/main/res/drawable-hdpi/photogif.png
TMessagesProj/src/main/res/drawable-hdpi/photogif.png
TMessagesProj/src/main/res/drawable-hdpi/photogif.png
TMessagesProj/src/main/res/drawable-hdpi/photogif.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-hdpi/photoload.png

2.11 KB | W: | H:

TMessagesProj/src/main/res/drawable-hdpi/photoload.png

1.23 KB | W: | H:

TMessagesProj/src/main/res/drawable-hdpi/photoload.png
TMessagesProj/src/main/res/drawable-hdpi/photoload.png
TMessagesProj/src/main/res/drawable-hdpi/photoload.png
TMessagesProj/src/main/res/drawable-hdpi/photoload.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-ldpi/photocancel.png

1.72 KB | W: | H:

TMessagesProj/src/main/res/drawable-ldpi/photocancel.png

724 Bytes | W: | H:

TMessagesProj/src/main/res/drawable-ldpi/photocancel.png
TMessagesProj/src/main/res/drawable-ldpi/photocancel.png
TMessagesProj/src/main/res/drawable-ldpi/photocancel.png
TMessagesProj/src/main/res/drawable-ldpi/photocancel.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-ldpi/photogif.png

1.68 KB | W: | H:

TMessagesProj/src/main/res/drawable-ldpi/photogif.png

853 Bytes | W: | H:

TMessagesProj/src/main/res/drawable-ldpi/photogif.png
TMessagesProj/src/main/res/drawable-ldpi/photogif.png
TMessagesProj/src/main/res/drawable-ldpi/photogif.png
TMessagesProj/src/main/res/drawable-ldpi/photogif.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-ldpi/photoload.png

1.47 KB | W: | H:

TMessagesProj/src/main/res/drawable-ldpi/photoload.png

708 Bytes | W: | H:

TMessagesProj/src/main/res/drawable-ldpi/photoload.png
TMessagesProj/src/main/res/drawable-ldpi/photoload.png
TMessagesProj/src/main/res/drawable-ldpi/photoload.png
TMessagesProj/src/main/res/drawable-ldpi/photoload.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-mdpi/photocancel.png

1.9 KB | W: | H:

TMessagesProj/src/main/res/drawable-mdpi/photocancel.png

1.04 KB | W: | H:

TMessagesProj/src/main/res/drawable-mdpi/photocancel.png
TMessagesProj/src/main/res/drawable-mdpi/photocancel.png
TMessagesProj/src/main/res/drawable-mdpi/photocancel.png
TMessagesProj/src/main/res/drawable-mdpi/photocancel.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-mdpi/photogif.png

1.89 KB | W: | H:

TMessagesProj/src/main/res/drawable-mdpi/photogif.png

1.13 KB | W: | H:

TMessagesProj/src/main/res/drawable-mdpi/photogif.png
TMessagesProj/src/main/res/drawable-mdpi/photogif.png
TMessagesProj/src/main/res/drawable-mdpi/photogif.png
TMessagesProj/src/main/res/drawable-mdpi/photogif.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-mdpi/photoload.png

1.76 KB | W: | H:

TMessagesProj/src/main/res/drawable-mdpi/photoload.png

899 Bytes | W: | H:

TMessagesProj/src/main/res/drawable-mdpi/photoload.png
TMessagesProj/src/main/res/drawable-mdpi/photoload.png
TMessagesProj/src/main/res/drawable-mdpi/photoload.png
TMessagesProj/src/main/res/drawable-mdpi/photoload.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png

2.63 KB | W: | H:

TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png

2.04 KB | W: | H:

TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png
TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png
TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png
TMessagesProj/src/main/res/drawable-xhdpi/photocancel.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-xhdpi/photogif.png

2.73 KB | W: | H:

TMessagesProj/src/main/res/drawable-xhdpi/photogif.png

2.18 KB | W: | H:

TMessagesProj/src/main/res/drawable-xhdpi/photogif.png
TMessagesProj/src/main/res/drawable-xhdpi/photogif.png
TMessagesProj/src/main/res/drawable-xhdpi/photogif.png
TMessagesProj/src/main/res/drawable-xhdpi/photogif.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-xhdpi/photoload.png

2.46 KB | W: | H:

TMessagesProj/src/main/res/drawable-xhdpi/photoload.png

1.75 KB | W: | H:

TMessagesProj/src/main/res/drawable-xhdpi/photoload.png
TMessagesProj/src/main/res/drawable-xhdpi/photoload.png
TMessagesProj/src/main/res/drawable-xhdpi/photoload.png
TMessagesProj/src/main/res/drawable-xhdpi/photoload.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png

3.42 KB | W: | H:

TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png

2.8 KB | W: | H:

TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png
TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png
TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png
TMessagesProj/src/main/res/drawable-xxhdpi/photocancel.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png

3.59 KB | W: | H:

TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png

3.12 KB | W: | H:

TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png
TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png
TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png
TMessagesProj/src/main/res/drawable-xxhdpi/photogif.png
  • 2-up
  • Swipe
  • Onion skin
TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png

3.23 KB | W: | H:

TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png

2.46 KB | W: | H:

TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png
TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png
TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png
TMessagesProj/src/main/res/drawable-xxhdpi/photoload.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -317,6 +317,7 @@
<string name="EditVideo">تحرير الفيديو</string>
<string name="OriginalVideo">الفيديو الأصلي</string>
<string name="EditedVideo">تم تحرير الفيديو</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">التالي</string>
......
......@@ -317,6 +317,7 @@
<string name="EditVideo">Video bearbeiten</string>
<string name="OriginalVideo">Originalvideo</string>
<string name="EditedVideo">Bearbeitetes Video</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">Weiter</string>
......
......@@ -317,6 +317,7 @@
<string name="EditVideo">Editar vídeo</string>
<string name="OriginalVideo">Vídeo original</string>
<string name="EditedVideo">Vídeo editado</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">Siguiente</string>
......
......@@ -317,6 +317,7 @@
<string name="EditVideo">Modifica video</string>
<string name="OriginalVideo">Video originale</string>
<string name="EditedVideo">Video modificato</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">Avanti</string>
......
......@@ -317,6 +317,7 @@
<string name="EditVideo">Video bewerken</string>
<string name="OriginalVideo">Originele video</string>
<string name="EditedVideo">Bewerkte video</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">Volgende</string>
......
......@@ -317,6 +317,7 @@
<string name="EditVideo">Editar Vídeo</string>
<string name="OriginalVideo">Vídeo Original</string>
<string name="EditedVideo">Vídeo Editado</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">Próximo</string>
......
......@@ -317,6 +317,7 @@
<string name="EditVideo">Edit Video</string>
<string name="OriginalVideo">Original Video</string>
<string name="EditedVideo">Edited Video</string>
<string name="SendingVideo">Sending video...</string>
<!--button titles-->
<string name="Next">Seguinte</string>
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="PagerSlidingTabStrip">
<attr name="indicatorColor" format="color" />
<attr name="underlineColor" format="color" />
<attr name="dividerColor" format="color" />
<attr name="indicatorHeight" format="dimension" />
<attr name="underlineHeight" format="dimension" />
<attr name="dividerPadding1" format="dimension" />
<attr name="tabPaddingLeftRight" format="dimension" />
<attr name="scrollOffset" format="dimension" />
<attr name="tabBackground" format="reference" />
<attr name="shouldExpand" format="boolean" />
<attr name="textAllCaps1" format="boolean" />
</declare-styleable>
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment