Commit abf8f6f6 authored by DrKLO's avatar DrKLO

Bug fixes

parent d03fa955
## Telegram messenger for Android ## Telegram messenger for Android
[Telegram](http://telegram.org) is a messaging app with a focus on speed and security. It’s superfast, simple and free. [Telegram](http://telegram.org) is a messaging app with a focus on speed and security. It’s superfast, simple and free.
This repo contains the official source code for [Telegram App for Android](https://play.google.com/store/apps/details?id=org.telegram.messenger).
This repo contains official [Telegram App for Android](https://play.google.com/store/apps/details?id=org.telegram.messenger) source code. ##Creating your Telegram Application
We welcome all developers to use our API and source code to create applications on our platform.
There are several things we require from **all developers** for the moment.
1. [**Obtain your own api_id**](https://core.telegram.org/api/obtaining_api_id) for your application.
2. Please **do not** use the name Telegram for your app — or make sure your users understand that it is unofficial.
3. Kindly **do not** use our standard logo (white paper plane in a blue circle) as your app's logo.
3. Please study our [**security guidelines**](https://core.telegram.org/mtproto/security_guidelines) and take good care of your users' data and privacy.
4. Please remember to publish **your** code too in order to comply with the licences.
### API, Protocol documentation ### API, Protocol documentation
Documentation for Telegram API is available here: http://core.telegram.org/api Telegram API manuals: http://core.telegram.org/api
Documentation for MTproto protocol is available here: http://core.telegram.org/mtproto MTproto protocol manuals: http://core.telegram.org/mtproto
### Usage ### Usage
**Beware of using dev branch and uploading it to any markets, in most cases it will work as you expecting** **Beware of using the dev branch and uploading it to any markets, in many cases it not will work as expected**.
First of all your should take a look to **src/main/java/org/telegram/messenger/BuildVars.java** and fill it with correct values.
First of all, take a look at **src/main/java/org/telegram/messenger/BuildVars.java** and fill it with correct values.
Import the root folder into your IDE (tested on Android Studio), then run project. Import the root folder into your IDE (tested on Android Studio), then run project.
### Localization ### Localization
......
...@@ -25,7 +25,7 @@ dependencies { ...@@ -25,7 +25,7 @@ dependencies {
android { android {
compileSdkVersion 21 compileSdkVersion 21
buildToolsVersion '21.0.1' buildToolsVersion '21.0.2'
signingConfigs { signingConfigs {
debug { debug {
...@@ -80,7 +80,7 @@ android { ...@@ -80,7 +80,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 8 minSdkVersion 8
targetSdkVersion 19 targetSdkVersion 19
versionCode 372 versionCode 374
versionName "1.9.6" versionName "1.9.6"
} }
} }
...@@ -218,7 +218,7 @@ public class AndroidUtilities { ...@@ -218,7 +218,7 @@ public class AndroidUtilities {
} }
public static File getCacheDir() { public static File getCacheDir() {
if (Environment.getExternalStorageState().startsWith(Environment.MEDIA_MOUNTED)) { if (Environment.getExternalStorageState() == null || Environment.getExternalStorageState().startsWith(Environment.MEDIA_MOUNTED)) {
try { try {
File file = ApplicationLoader.applicationContext.getExternalCacheDir(); File file = ApplicationLoader.applicationContext.getExternalCacheDir();
if (file != null) { if (file != null) {
......
...@@ -1711,7 +1711,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -1711,7 +1711,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} }
public void markMessageAsRead(final long dialog_id, final long random_id, int ttl) { public void markMessageAsRead(final long dialog_id, final long random_id, int ttl) {
if (random_id == 0 || dialog_id == 0) { if (random_id == 0 || dialog_id == 0 || ttl <= 0) {
return; return;
} }
int lower_part = (int)dialog_id; int lower_part = (int)dialog_id;
...@@ -1726,10 +1726,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -1726,10 +1726,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
ArrayList<Long> random_ids = new ArrayList<Long>(); ArrayList<Long> random_ids = new ArrayList<Long>();
random_ids.add(random_id); random_ids.add(random_id);
SendMessagesHelper.getInstance().sendMessagesReadMessage(chat, random_ids, null); SendMessagesHelper.getInstance().sendMessagesReadMessage(chat, random_ids, null);
if (ttl > 0) { int time = ConnectionsManager.getInstance().getCurrentTime();
int time = ConnectionsManager.getInstance().getCurrentTime(); MessagesStorage.getInstance().createTaskForSecretChat(chat.id, time, time, 0, random_ids);
MessagesStorage.getInstance().createTaskForSecretChat(chat.id, time, time, 0, random_ids);
}
} }
public void markDialogAsRead(final long dialog_id, final int max_id, final int max_positive_id, final int offset, final int max_date, final boolean was, final boolean popup) { public void markDialogAsRead(final long dialog_id, final int max_id, final int max_positive_id, final int offset, final int max_date, final boolean was, final boolean popup) {
......
...@@ -626,10 +626,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -626,10 +626,12 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
newMsg.to_id.user_id = encryptedChat.participant_id; newMsg.to_id.user_id = encryptedChat.participant_id;
} }
newMsg.ttl = encryptedChat.ttl; newMsg.ttl = encryptedChat.ttl;
if (newMsg.media instanceof TLRPC.TL_messageMediaAudio) { if (newMsg.ttl != 0) {
newMsg.ttl = Math.max(encryptedChat.ttl, newMsg.media.audio.duration + 1); if (newMsg.media instanceof TLRPC.TL_messageMediaAudio) {
} else if (newMsg.media instanceof TLRPC.TL_messageMediaVideo) { newMsg.ttl = Math.max(encryptedChat.ttl, newMsg.media.audio.duration + 1);
newMsg.ttl = Math.max(encryptedChat.ttl, newMsg.media.video.duration + 1); } else if (newMsg.media instanceof TLRPC.TL_messageMediaVideo) {
newMsg.ttl = Math.max(encryptedChat.ttl, newMsg.media.video.duration + 1);
}
} }
} }
......
...@@ -99,12 +99,25 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { ...@@ -99,12 +99,25 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter {
for (TLRPC.TL_contact contact : contactsCopy) { for (TLRPC.TL_contact contact : contactsCopy) {
TLRPC.User user = MessagesController.getInstance().getUser(contact.user_id); TLRPC.User user = MessagesController.getInstance().getUser(contact.user_id);
if (user.id == UserConfig.getClientUserId()) {
continue;
}
String name = ContactsController.formatName(user.first_name, user.last_name).toLowerCase(); String name = ContactsController.formatName(user.first_name, user.last_name).toLowerCase();
int found = 0;
if (name.startsWith(q) || name.contains(" " + q)) { if (name.startsWith(q) || name.contains(" " + q)) {
if (user.id == UserConfig.getClientUserId()) { found = 1;
continue; } else if (user.username != null && user.username.startsWith(q)) {
found = 2;
}
if (found != 0) {
if (found == 1) {
resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q));
} else {
resultArrayNames.add(Utilities.generateSearchName("@" + user.username, null, "@" + q));
} }
resultArrayNames.add(Utilities.generateSearchName(user.first_name, user.last_name, q));
resultArray.add(user); resultArray.add(user);
} }
} }
...@@ -197,7 +210,16 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { ...@@ -197,7 +210,16 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter {
TLRPC.User user = getItem(i); TLRPC.User user = getItem(i);
if (user != null) { if (user != null) {
CharSequence username = null; CharSequence username = null;
if (i > searchResult.size() && user.username != null) { CharSequence name = null;
if (i < searchResult.size()) {
name = searchResultNames.get(i);
if (name != null && user != null && user.username != null && user.username.length() > 0) {
if (name.toString().startsWith("@" + user.username)) {
username = name;
name = null;
}
}
} else if (i > searchResult.size() && user.username != null) {
try { try {
username = Html.fromHtml(String.format("<font color=\"#357aa8\">@%s</font>%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length()))); username = Html.fromHtml(String.format("<font color=\"#357aa8\">@%s</font>%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length())));
} catch (Exception e) { } catch (Exception e) {
...@@ -206,7 +228,7 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { ...@@ -206,7 +228,7 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter {
} }
} }
((ChatOrUserCell) view).setData(user, null, null, i < searchResult.size() ? searchResultNames.get(i) : null, username); ((ChatOrUserCell) view).setData(user, null, null, name, username);
if (ignoreUsers != null) { if (ignoreUsers != null) {
if (ignoreUsers.containsKey(user.id)) { if (ignoreUsers.containsKey(user.id)) {
......
...@@ -1040,7 +1040,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not ...@@ -1040,7 +1040,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
} }
private boolean sendSecretMessageRead(MessageObject messageObject) { private boolean sendSecretMessageRead(MessageObject messageObject) {
if (messageObject == null || messageObject.isOut() || !messageObject.isSecretMedia() || messageObject.messageOwner.destroyTime != 0) { if (messageObject == null || messageObject.isOut() || !messageObject.isSecretMedia() || messageObject.messageOwner.destroyTime != 0 || messageObject.messageOwner.ttl <= 0) {
return false; return false;
} }
MessagesController.getInstance().markMessageAsRead(dialog_id, messageObject.messageOwner.random_id, messageObject.messageOwner.ttl); MessagesController.getInstance().markMessageAsRead(dialog_id, messageObject.messageOwner.random_id, messageObject.messageOwner.ttl);
......
...@@ -477,7 +477,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen ...@@ -477,7 +477,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen
args.putBoolean("destroyAfterSelect", true); args.putBoolean("destroyAfterSelect", true);
args.putBoolean("usersAsSections", true); args.putBoolean("usersAsSections", true);
args.putBoolean("returnAsResult", true); args.putBoolean("returnAsResult", true);
args.putBoolean("allowUsernameSearch", false); //args.putBoolean("allowUsernameSearch", false);
if (chat_id > 0) { if (chat_id > 0) {
args.putString("selectAlertString", LocaleController.getString("AddToTheGroup", R.string.AddToTheGroup)); args.putString("selectAlertString", LocaleController.getString("AddToTheGroup", R.string.AddToTheGroup));
} }
......
...@@ -82,11 +82,10 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati ...@@ -82,11 +82,10 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati
if (!usersToLoad.isEmpty()) { if (!usersToLoad.isEmpty()) {
final Semaphore semaphore = new Semaphore(0); final Semaphore semaphore = new Semaphore(0);
final ArrayList<TLRPC.User> users = new ArrayList<TLRPC.User>(); final ArrayList<TLRPC.User> users = new ArrayList<TLRPC.User>();
final boolean[] error = new boolean[1];
MessagesStorage.getInstance().storageQueue.postRunnable(new Runnable() { MessagesStorage.getInstance().storageQueue.postRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
users.addAll(MessagesStorage.getInstance().getUsers(usersToLoad, error)); users.addAll(MessagesStorage.getInstance().getUsers(usersToLoad));
semaphore.release(); semaphore.release();
} }
}); });
...@@ -95,7 +94,7 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati ...@@ -95,7 +94,7 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati
} catch (Exception e) { } catch (Exception e) {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
} }
if (error[0]) { if (usersToLoad.size() != users.size()) {
return false; return false;
} }
if (!users.isEmpty()) { if (!users.isEmpty()) {
......
...@@ -775,17 +775,19 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter ...@@ -775,17 +775,19 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
@Override @Override
public View getView(int i, View view, ViewGroup viewGroup) { public View getView(int i, View view, ViewGroup viewGroup) {
if (searching && searchWas) { int type = getItemViewType(i);
if (i == searchResult.size()) {
if (view == null) { if (type == 3) {
view = new SettingsSectionLayout(mContext); if (view == null) {
((SettingsSectionLayout) view).setText(LocaleController.getString("GlobalSearch", R.string.GlobalSearch)); view = new SettingsSectionLayout(mContext);
view.setPadding(AndroidUtilities.dp(11), 0, AndroidUtilities.dp(11), 0); ((SettingsSectionLayout) view).setText(LocaleController.getString("GlobalSearch", R.string.GlobalSearch));
} view.setPadding(AndroidUtilities.dp(11), 0, AndroidUtilities.dp(11), 0);
} else { }
if (view == null) { } else if (type == 2) {
view = new ChatOrUserCell(mContext); if (view == null) {
} view = new ChatOrUserCell(mContext);
}
if (searching && searchWas) {
TLRPC.User user = null; TLRPC.User user = null;
TLRPC.Chat chat = null; TLRPC.Chat chat = null;
TLRPC.EncryptedChat encryptedChat = null; TLRPC.EncryptedChat encryptedChat = null;
...@@ -795,7 +797,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter ...@@ -795,7 +797,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
if (obj instanceof TLRPC.User) { if (obj instanceof TLRPC.User) {
user = MessagesController.getInstance().getUser(((TLRPC.User) obj).id); user = MessagesController.getInstance().getUser(((TLRPC.User) obj).id);
if (user == null) { if (user == null) {
user = (TLRPC.User)obj; user = (TLRPC.User) obj;
} }
} else if (obj instanceof TLRPC.Chat) { } else if (obj instanceof TLRPC.Chat) {
chat = MessagesController.getInstance().getChat(((TLRPC.Chat) obj).id); chat = MessagesController.getInstance().getChat(((TLRPC.Chat) obj).id);
...@@ -805,7 +807,16 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter ...@@ -805,7 +807,16 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
} }
CharSequence username = null; CharSequence username = null;
if (i > searchResult.size() && user != null && user.username != null) { CharSequence name = null;
if (i < searchResult.size()) {
name = searchResultNames.get(i);
if (name != null && user != null && user.username != null && user.username.length() > 0) {
if (name.toString().startsWith("@" + user.username)) {
username = name;
name = null;
}
}
} else if (i > searchResult.size() && user != null && user.username != null) {
try { try {
username = Html.fromHtml(String.format("<font color=\"#357aa8\">@%s</font>%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length()))); username = Html.fromHtml(String.format("<font color=\"#357aa8\">@%s</font>%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length())));
} catch (Exception e) { } catch (Exception e) {
...@@ -814,36 +825,31 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter ...@@ -814,36 +825,31 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter
} }
} }
((ChatOrUserCell) view).setData(user, chat, encryptedChat, i < searchResult.size() ? searchResultNames.get(i) : null, username); ((ChatOrUserCell) view).setData(user, chat, encryptedChat, name, username);
} }
} else if (type == 1) {
return view;
}
int type = getItemViewType(i);
if (type == 1) {
if (view == null) { if (view == null) {
LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.loading_more_layout, viewGroup, false); view = li.inflate(R.layout.loading_more_layout, viewGroup, false);
} }
return view; } else if (type == 0) {
} if (view == null) {
view = new DialogCell(mContext);
if (view == null) { }
view = new DialogCell(mContext); ((DialogCell) view).useSeparator = (i != getCount() - 1);
} if (serverOnly) {
((DialogCell) view).useSeparator = (i != getCount() - 1); ((DialogCell) view).setDialog(MessagesController.getInstance().dialogsServerOnly.get(i));
if (serverOnly) { } else {
((DialogCell)view).setDialog(MessagesController.getInstance().dialogsServerOnly.get(i)); TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs.get(i);
} else { if (AndroidUtilities.isTablet()) {
TLRPC.TL_dialog dialog = MessagesController.getInstance().dialogs.get(i); if (dialog.id == openedDialogId) {
if (AndroidUtilities.isTablet()) { view.setBackgroundColor(0x0f000000);
if (dialog.id == openedDialogId) { } else {
view.setBackgroundColor(0x0f000000); view.setBackgroundColor(0);
} else { }
view.setBackgroundColor(0);
} }
((DialogCell) view).setDialog(dialog);
} }
((DialogCell)view).setDialog(dialog);
} }
return view; return view;
......
...@@ -1173,6 +1173,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat ...@@ -1173,6 +1173,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
menuItem.hideSubItem(gallery_menu_save); menuItem.hideSubItem(gallery_menu_save);
shareButton.setVisibility(View.GONE); shareButton.setVisibility(View.GONE);
} else { } else {
menuItem.showSubItem(gallery_menu_save);
shareButton.setVisibility(View.VISIBLE); shareButton.setVisibility(View.VISIBLE);
} }
setImageIndex(0, true); setImageIndex(0, true);
...@@ -1215,6 +1216,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat ...@@ -1215,6 +1216,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
menuItem.hideSubItem(gallery_menu_save); menuItem.hideSubItem(gallery_menu_save);
shareButton.setVisibility(View.GONE); shareButton.setVisibility(View.GONE);
} else { } else {
menuItem.showSubItem(gallery_menu_save);
shareButton.setVisibility(View.VISIBLE); shareButton.setVisibility(View.VISIBLE);
} }
opennedFromMedia = true; opennedFromMedia = true;
......
...@@ -194,6 +194,9 @@ public class SettingsChangeUsernameActivity extends BaseFragment { ...@@ -194,6 +194,9 @@ public class SettingsChangeUsernameActivity extends BaseFragment {
} }
private void showErrorAlert(String error) { private void showErrorAlert(String error) {
if (getParentActivity() == null) {
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
if (error.equals("USERNAME_INVALID")) { if (error.equals("USERNAME_INVALID")) {
......
...@@ -457,11 +457,17 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur ...@@ -457,11 +457,17 @@ public class VideoEditorActivity extends BaseFragment implements TextureView.Sur
} }
private void onPlayComplete() { private void onPlayComplete() {
playButton.setImageResource(R.drawable.video_play); if (playButton != null) {
videoSeekBarView.setProgress(videoTimelineView.getLeftProgress()); playButton.setImageResource(R.drawable.video_play);
}
if (videoSeekBarView != null && videoTimelineView != null) {
videoSeekBarView.setProgress(videoTimelineView.getLeftProgress());
}
try { try {
if (videoPlayer != null) { if (videoPlayer != null) {
videoPlayer.seekTo((int) (videoTimelineView.getLeftProgress() * videoDuration)); if (videoTimelineView != null) {
videoPlayer.seekTo((int) (videoTimelineView.getLeftProgress() * videoDuration));
}
} }
} catch (Exception e) { } catch (Exception e) {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
......
...@@ -597,24 +597,22 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen ...@@ -597,24 +597,22 @@ public class ChatActivityEnterView implements NotificationCenter.NotificationCen
messsageEditText.dispatchKeyEvent(new KeyEvent(0, 67)); messsageEditText.dispatchKeyEvent(new KeyEvent(0, 67));
} }
public void onEmojiSelected(String paramAnonymousString) { public void onEmojiSelected(String symbol) {
int i = messsageEditText.getSelectionEnd(); int i = messsageEditText.getSelectionEnd();
CharSequence localCharSequence = Emoji.replaceEmoji(paramAnonymousString, messsageEditText.getPaint().getFontMetricsInt(), AndroidUtilities.dp(20)); if (i < 0) {
messsageEditText.setText(messsageEditText.getText().insert(i, localCharSequence)); i = 0;
int j = i + localCharSequence.length(); }
messsageEditText.setSelection(j, j); try {
CharSequence localCharSequence = Emoji.replaceEmoji(symbol, messsageEditText.getPaint().getFontMetricsInt(), AndroidUtilities.dp(20));
messsageEditText.setText(messsageEditText.getText().insert(i, localCharSequence));
int j = i + localCharSequence.length();
messsageEditText.setSelection(j, j);
} catch (Exception e) {
FileLog.e("tmessages", e);
}
} }
}); });
emojiPopup = new PopupWindow(emojiView); emojiPopup = new PopupWindow(emojiView);
/*try {
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) { public void setDelegate(ChatActivityEnterViewDelegate delegate) {
......
...@@ -20,12 +20,12 @@ ...@@ -20,12 +20,12 @@
android:fromAlpha="0.0" android:fromAlpha="0.0"
android:toAlpha="1.0" android:toAlpha="1.0"
android:interpolator="@anim/decelerate_cubic" android:interpolator="@anim/decelerate_cubic"
android:duration="220"/> android:duration="150"/>
<scale <scale
android:fromXScale=".8" android:toXScale="1.0" android:fromXScale=".8" android:toXScale="1.0"
android:fromYScale=".8" android:toYScale="1.0" android:fromYScale=".8" android:toYScale="1.0"
android:pivotX="50%p" android:pivotY="50%p" android:pivotX="50%p" android:pivotY="50%p"
android:interpolator="@anim/decelerate_cubic" android:interpolator="@anim/decelerate_cubic"
android:duration="220"/> android:duration="150"/>
</set> </set>
\ No newline at end of file
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
android:fromAlpha="1.0" android:fromAlpha="1.0"
android:toAlpha="0.0" android:toAlpha="0.0"
android:interpolator="@anim/decelerate_cubic" android:interpolator="@anim/decelerate_cubic"
android:duration="220"/> android:duration="150"/>
<scale <scale
android:fromXScale="1.0" android:fromXScale="1.0"
...@@ -30,5 +30,5 @@ ...@@ -30,5 +30,5 @@
android:pivotX="50%p" android:pivotX="50%p"
android:pivotY="50%p" android:pivotY="50%p"
android:interpolator="@anim/decelerate_cubic" android:interpolator="@anim/decelerate_cubic"
android:duration="220"/> android:duration="150"/>
</set> </set>
\ 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