diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index d0dbed6ae..56b601084 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -80,7 +80,7 @@ android { defaultConfig { minSdkVersion 8 targetSdkVersion 19 - versionCode 371 - versionName "1.9.5" + versionCode 372 + versionName "1.9.6" } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/BaseContactsSearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/BaseContactsSearchAdapter.java index bc0b4f9e2..e639fb166 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/BaseContactsSearchAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/BaseContactsSearchAdapter.java @@ -18,7 +18,7 @@ import java.util.ArrayList; public class BaseContactsSearchAdapter extends BaseFragmentAdapter { - protected ArrayList globalSearch; + protected ArrayList globalSearch = new ArrayList(); private long reqId = 0; private int lastReqId; protected String lastFoundUsername = null; @@ -29,7 +29,7 @@ public class BaseContactsSearchAdapter extends BaseFragmentAdapter { ConnectionsManager.getInstance().cancelRpc(reqId, true); reqId = 0; } - globalSearch = null; + globalSearch.clear(); lastReqId = 0; notifyDataSetChanged(); return; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivitySearchAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivitySearchAdapter.java index b1a1f02a0..cab7b6471 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivitySearchAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/ContactsActivitySearchAdapter.java @@ -36,17 +36,21 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { private ArrayList searchResult; private ArrayList searchResultNames; private Timer searchTimer; + private boolean allowUsernameSearch; - public ContactsActivitySearchAdapter(Context context, HashMap arg1) { + public ContactsActivitySearchAdapter(Context context, HashMap arg1, boolean usernameSearch) { mContext = context; ignoreUsers = arg1; + allowUsernameSearch = usernameSearch; } public void searchDialogs(final String query) { if (query == null) { - searchResult = null; - searchResultNames = null; - queryServerSearch(null); + searchResult.clear(); + searchResultNames.clear(); + if (allowUsernameSearch) { + queryServerSearch(null); + } notifyDataSetChanged(); } else { try { @@ -76,7 +80,9 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { AndroidUtilities.RunOnUIThread(new Runnable() { @Override public void run() { - queryServerSearch(query); + if (allowUsernameSearch) { + queryServerSearch(query); + } final ArrayList contactsCopy = new ArrayList(); contactsCopy.addAll(ContactsController.getInstance().contacts); Utilities.searchQueue.postRunnable(new Runnable() { @@ -128,13 +134,13 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { @Override public boolean isEnabled(int i) { - return i != (searchResult == null ? 0 : searchResult.size()); + return i != searchResult.size(); } @Override public int getCount() { - int count = searchResult == null ? 0 : searchResult.size(); - int globalCount = globalSearch == null ? 0 : globalSearch.size(); + int count = searchResult.size(); + int globalCount = globalSearch.size(); if (globalCount != 0) { count += globalCount + 1; } @@ -142,8 +148,8 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { } public boolean isGlobalSearch(int i) { - int localCount = searchResult == null ? 0 : searchResult.size(); - int globalCount = globalSearch == null ? 0 : globalSearch.size(); + int localCount = searchResult.size(); + int globalCount = globalSearch.size(); if (i >= 0 && i < localCount) { return false; } else if (i > localCount && i <= globalCount + localCount) { @@ -154,8 +160,8 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { @Override public TLRPC.User getItem(int i) { - int localCount = searchResult == null ? 0 : searchResult.size(); - int globalCount = globalSearch == null ? 0 : globalSearch.size(); + int localCount = searchResult.size(); + int globalCount = globalSearch.size(); if (i >= 0 && i < localCount) { return searchResult.get(i); } else if (i > localCount && i <= globalCount + localCount) { @@ -176,7 +182,7 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { @Override public View getView(int i, View view, ViewGroup viewGroup) { - if (i == (searchResult == null ? 0 : searchResult.size())) { + if (i == searchResult.size()) { if (view == null) { view = new SettingsSectionLayout(mContext); ((SettingsSectionLayout) view).setText(LocaleController.getString("GlobalSearch", R.string.GlobalSearch)); @@ -192,7 +198,12 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { if (user != null) { CharSequence username = null; if (i > searchResult.size() && user.username != null) { - username = Html.fromHtml(String.format("@%s%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length()))); + try { + username = Html.fromHtml(String.format("@%s%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length()))); + } catch (Exception e) { + username = user.username; + FileLog.e("tmessages", e); + } } ((ChatOrUserCell) view).setData(user, null, null, i < searchResult.size() ? searchResultNames.get(i) : null, username); @@ -211,7 +222,7 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { @Override public int getItemViewType(int i) { - if (i == (searchResult == null ? 0 : searchResult.size())) { + if (i == searchResult.size()) { return 1; } return 0; @@ -224,6 +235,6 @@ public class ContactsActivitySearchAdapter extends BaseContactsSearchAdapter { @Override public boolean isEmpty() { - return (searchResult == null || searchResult.size() == 0) && (globalSearch == null || globalSearch.isEmpty()); + return searchResult.isEmpty() && globalSearch.isEmpty(); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java index 8c56eca95..dc7dd128d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatProfileActivity.java @@ -477,6 +477,7 @@ public class ChatProfileActivity extends BaseFragment implements NotificationCen args.putBoolean("destroyAfterSelect", true); args.putBoolean("usersAsSections", true); args.putBoolean("returnAsResult", true); + args.putBoolean("allowUsernameSearch", false); if (chat_id > 0) { args.putString("selectAlertString", LocaleController.getString("AddToTheGroup", R.string.AddToTheGroup)); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java index 9bfd611b9..a65ce45d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContactsActivity.java @@ -73,6 +73,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter private String inviteText; private boolean updatingInviteText = false; + private boolean allowUsernameSearch = true; private ContactsActivityDelegate delegate; public static interface ContactsActivityDelegate { @@ -92,11 +93,12 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatCreated); if (arguments != null) { onlyUsers = getArguments().getBoolean("onlyUsers", false); - destroyAfterSelect = getArguments().getBoolean("destroyAfterSelect", false); - usersAsSections = getArguments().getBoolean("usersAsSections", false); - returnAsResult = getArguments().getBoolean("returnAsResult", false); - createSecretChat = getArguments().getBoolean("createSecretChat", false); + destroyAfterSelect = arguments.getBoolean("destroyAfterSelect", false); + usersAsSections = arguments.getBoolean("usersAsSections", false); + returnAsResult = arguments.getBoolean("returnAsResult", false); + createSecretChat = arguments.getBoolean("createSecretChat", false); selectAlertString = arguments.getString("selectAlertString"); + allowUsernameSearch = arguments.getBoolean("allowUsernameSearch", true); } SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE); @@ -200,7 +202,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter emptyTextView = (TextView)fragmentView.findViewById(R.id.searchEmptyView); emptyTextView.setText(LocaleController.getString("NoContacts", R.string.NoContacts)); - searchListViewAdapter = new ContactsActivitySearchAdapter(getParentActivity(), ignoreUsers); + searchListViewAdapter = new ContactsActivitySearchAdapter(getParentActivity(), ignoreUsers, allowUsernameSearch); listView = (PinnedHeaderListView)fragmentView.findViewById(R.id.listView); listView.setEmptyView(emptyTextView); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 9cc075474..9806c5d89 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -787,6 +787,9 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa public void fixLayout() { if (AndroidUtilities.isTablet()) { + if (actionBarLayout == null) { + return; + } actionBarLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java index c65d81520..6f2b8ec6b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MessagesActivity.java @@ -619,8 +619,8 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter private Context mContext; private Timer searchTimer; - private ArrayList searchResult; - private ArrayList searchResultNames; + private ArrayList searchResult = new ArrayList(); + private ArrayList searchResultNames = new ArrayList(); public MessagesAdapter(Context context) { mContext = context; @@ -656,8 +656,8 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter public boolean isGlobalSearch(int i) { if (searching && searchWas) { - int localCount = searchResult == null ? 0 : searchResult.size(); - int globalCount = globalSearch == null ? 0 : globalSearch.size(); + int localCount = searchResult.size(); + int globalCount = globalSearch.size(); if (i >= 0 && i < localCount) { return false; } else if (i > localCount && i <= globalCount + localCount) { @@ -669,8 +669,8 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter public void searchDialogs(final String query) { if (query == null) { - searchResult = null; - searchResultNames = null; + searchResult.clear(); + searchResultNames.clear(); queryServerSearch(null); notifyDataSetChanged(); } else { @@ -710,14 +710,14 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter @Override public boolean isEnabled(int i) { - return !(searching && searchWas) || i != (searchResult == null ? 0 : searchResult.size()); + return !(searching && searchWas) || i != searchResult.size(); } @Override public int getCount() { if (searching && searchWas) { - int count = searchResult == null ? 0 : searchResult.size(); - int globalCount = globalSearch == null ? 0 : globalSearch.size(); + int count = searchResult.size(); + int globalCount = globalSearch.size(); if (globalCount != 0) { count += globalCount + 1; } @@ -741,8 +741,8 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter @Override public TLObject getItem(int i) { if (searching && searchWas) { - int localCount = searchResult == null ? 0 : searchResult.size(); - int globalCount = globalSearch == null ? 0 : globalSearch.size(); + int localCount = searchResult.size(); + int globalCount = globalSearch.size(); if (i >= 0 && i < localCount) { return searchResult.get(i); } else if (i > localCount && i <= globalCount + localCount) { @@ -776,7 +776,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter @Override public View getView(int i, View view, ViewGroup viewGroup) { if (searching && searchWas) { - if (i == (searchResult == null ? 0 : searchResult.size())) { + if (i == searchResult.size()) { if (view == null) { view = new SettingsSectionLayout(mContext); ((SettingsSectionLayout) view).setText(LocaleController.getString("GlobalSearch", R.string.GlobalSearch)); @@ -805,8 +805,13 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter } CharSequence username = null; - if (i > searchResult.size() && user.username != null) { - username = Html.fromHtml(String.format("@%s%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length()))); + if (i > searchResult.size() && user != null && user.username != null) { + try { + username = Html.fromHtml(String.format("@%s%s", user.username.substring(0, lastFoundUsername.length()), user.username.substring(lastFoundUsername.length()))); + } catch (Exception e) { + username = user.username; + FileLog.e("tmessages", e); + } } ((ChatOrUserCell) view).setData(user, chat, encryptedChat, i < searchResult.size() ? searchResultNames.get(i) : null, username); @@ -847,7 +852,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter @Override public int getItemViewType(int i) { if (searching && searchWas) { - if (i == (searchResult == null ? 0 : searchResult.size())) { + if (i == searchResult.size()) { return 3; } return 2; @@ -866,7 +871,7 @@ public class MessagesActivity extends BaseFragment implements NotificationCenter @Override public boolean isEmpty() { if (searching && searchWas) { - return (searchResult == null || searchResult.size() == 0) && (globalSearch == null || globalSearch.isEmpty()); + return searchResult.size() == 0 && globalSearch.isEmpty(); } if (MessagesController.getInstance().loadingDialogs && MessagesController.getInstance().dialogs.isEmpty()) { return false; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java index 351d86b3d..8b93ea57c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoPickerActivity.java @@ -279,6 +279,9 @@ public class PhotoPickerActivity extends BaseFragment implements NotificationCen int count = listView.getChildCount(); for (int a = 0; a < count; a++) { View view = listView.getChildAt(a); + if (view.getTag() == null) { + continue; + } int num = (Integer)view.getTag(); if (num < 0 || num >= selectedAlbum.photos.size()) { continue; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/SettingsChangeUsernameActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/SettingsChangeUsernameActivity.java index 9a4177047..d5fdfb342 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/SettingsChangeUsernameActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/SettingsChangeUsernameActivity.java @@ -239,7 +239,7 @@ public class SettingsChangeUsernameActivity extends BaseFragment { } return false; } - if (!(ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || a == '_')) { + if (!(ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch == '_')) { if (alert) { showErrorAlert(LocaleController.getString("UsernameInvalid", R.string.UsernameInvalid)); } else {