diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 8f048d1f0e..65737589e1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -27191,7 +27191,7 @@ private void updatePinnedMessageView(boolean animated, int animateToNext) { SharedPreferences preferences = MessagesController.getNotificationsSettings(currentAccount); if ((threadMessageObject == null || isTopic) && (chatInfo == null && userInfo == null || pinned_msg_id == 0 || !pinnedMessageIds.isEmpty() && pinnedMessageIds.get(0) == preferences.getInt("pin_" + dialog_id, 0)) || isReport() || actionBar != null && (actionBar.isActionModeShowed() || actionBar.isSearchFieldVisible())) { changed = hidePinnedMessageView(animated); - if (headerItem != null) headerItem.hideSubItem(nkheaderbtn_show_pinned); + if (headerItem != null) headerItem.showSubItem(nkheaderbtn_show_pinned); } else if (pinned_msg_id == preferences.getInt("pin_" + dialog_id, 0)) { changed = hidePinnedMessageView(animated); if (headerItem != null) headerItem.showSubItem(nkheaderbtn_show_pinned); @@ -42133,7 +42133,7 @@ private void nkbtn_onclick_actionbar(int id) { selectAndShareMyKey(new Intent()); } else if (id == nkheaderbtn_show_pinned) { SharedPreferences preferences = MessagesController.getNotificationsSettings(currentAccount); - preferences.edit().putInt("pin_" + dialog_id, 0).apply(); + preferences.edit().remove("pin_" + dialog_id).apply(); updatePinnedMessageView(true); } else if (id == nkheaderbtn_linked_chat) { if (chatInfo == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java index 6627c6f4ac..07257025d0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayer.java @@ -102,6 +102,8 @@ import java.util.HashMap; import java.util.HashSet; +import xyz.nextalone.nagram.NaConfig; + @SuppressLint("NewApi") public class VideoPlayer implements Player.Listener, VideoListener, AnalyticsListener, NotificationCenter.NotificationCenterDelegate { @@ -401,9 +403,46 @@ public void preparePlayer(ArrayList qualities, Quality select) { } } + public static Quality getDefaultSavedQualityInt(ArrayList qualities, int pL, int p) { + for (Quality q : qualities) { + if (!q.original && q.p() <= pL && q.p() >= p) return q; + } + return null; + } + + public static Quality getDefaultSavedQuality(ArrayList qualities) { + int v = NaConfig.INSTANCE.getDefaultHlsVideoQuality().Int(); + Quality q1; + switch (v) { + case 0: + return null; + case 1: + for (Quality q : qualities) { + if (q.original) return q; + } + case 2: + q1 = getDefaultSavedQualityInt(qualities, Integer.MAX_VALUE, 1440); + if (q1 != null) return q1; + case 3: + q1 = getDefaultSavedQualityInt(qualities, 1440, 1000); + if (q1 != null) return q1; + case 4: + q1 = getDefaultSavedQualityInt(qualities, 1000, 700); + if (q1 != null) return q1; + case 5: + q1 = getDefaultSavedQualityInt(qualities, 700, 0); + if (q1 != null) return q1; + } + return null; + } + public static Quality getSavedQuality(ArrayList qualities, MessageObject messageObject) { - if (messageObject == null) return null; - return getSavedQuality(qualities, messageObject.getDialogId(), messageObject.getId()); + if (messageObject == null) return getDefaultSavedQuality(qualities); + var q = getSavedQuality(qualities, messageObject.getDialogId(), messageObject.getId()); + if (q == null) { + return getDefaultSavedQuality(qualities); + } + return q; } public static Quality getSavedQuality(ArrayList qualities, long did, int mid) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index 06d538251b..48801ecda7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -6638,6 +6638,39 @@ private boolean processOnClickOrPress(final int position, final View view, final } else { return false; } + String link; + if (userId == 0) { + TLRPC.Chat chat = getMessagesController().getChat(chatId); + if (ChatObject.isPublic(chat)) { + link = "https://" + getMessagesController().linkPrefix + "/" + ChatObject.getPublicUsername(chat) + (topicId != 0 ? "/" + topicId : ""); + } else { + link = "https://" + getMessagesController().linkPrefix + "/c/" + chat.id + (topicId != 0 ? "/" + topicId : ""); + } + } else { +// if (editRow(view, position)) return true; + link = "https://" + getMessagesController().linkPrefix + "/" + username; + if (usernameObj != null && !usernameObj.editable) { + TL_fragment.TL_getCollectibleInfo req = new TL_fragment.TL_getCollectibleInfo(); + TL_fragment.TL_inputCollectibleUsername input = new TL_fragment.TL_inputCollectibleUsername(); + input.username = usernameObj.username; + req.collectible = input; + int reqId = getConnectionsManager().sendRequest(req, (res, err) -> AndroidUtilities.runOnUIThread(() -> { + if (res instanceof TL_fragment.TL_collectibleInfo) { + TLObject obj; + if (userId != 0) { + obj = getMessagesController().getUser(userId); + } else { + obj = getMessagesController().getChat(chatId); + } + FragmentUsernameBottomSheet.open(getContext(), FragmentUsernameBottomSheet.TYPE_USERNAME, usernameObj.username, obj, (TL_fragment.TL_collectibleInfo) res, getResourceProvider()); + } else { + BulletinFactory.showError(err); + } + })); + getConnectionsManager().bindRequestToGuid(reqId, getClassGuid()); + return true; + } + } BottomBuilder builder = new BottomBuilder(getParentActivity()); builder.addTitle("@" + username); @@ -6665,7 +6698,20 @@ private boolean processOnClickOrPress(final int position, final View view, final }); builder.addItem(LocaleController.getString(R.string.CopyLink), R.drawable.msg_link, __ -> { - AlertUtil.copyAndAlert("https://t.me/" + username); + AlertUtil.copyAndAlert(link); + return Unit.INSTANCE; + }); + + builder.addItem(LocaleController.getString(R.string.ShareSendTo), R.drawable.msg_share, __ -> { + ShareAlert shareAlert = new ShareAlert(getParentActivity(), null, link, false, link, false) { + @Override + protected void onSend(LongSparseArray dids, int count, TLRPC.TL_forumTopic topic) { + AndroidUtilities.runOnUIThread(() -> { + BulletinFactory.createInviteSentBulletin(getParentActivity(), contentView, dids.size(), dids.size() == 1 ? dids.valueAt(0).id : 0, count, getThemedColor(Theme.key_undo_background), getThemedColor(Theme.key_undo_infoColor)).show(); + }, 250); + } + }; + showDialog(shareAlert); return Unit.INSTANCE; }); diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java index d375bd15b1..a50bd05e54 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/settings/NekoGeneralSettingsActivity.java @@ -133,6 +133,15 @@ public class NekoGeneralSettingsActivity extends BaseNekoXSettingsActivity { // private final AbstractConfigCell customPublicProxyIPRow = cellGroup.appendCell(new ConfigCellTextDetail(NekoConfig.customPublicProxyIP, (view, position) -> { // customDialog_BottomInputString(position, NekoConfig.customPublicProxyIP, LocaleController.getString("customPublicProxyIPNotice"), "IP"); // }, LocaleController.getString("UsernameEmpty", R.string.UsernameEmpty))); +private final AbstractConfigCell defaultHlsVideoQualityRow = cellGroup.appendCell(new ConfigCellSelectBox(null, NaConfig.INSTANCE.getDefaultHlsVideoQuality(), + new String[]{ + LocaleController.getString(R.string.QualityAuto), + LocaleController.getString(R.string.QualityOriginal), + LocaleController.getString(R.string.Quality1440), + LocaleController.getString(R.string.Quality1080), + LocaleController.getString(R.string.Quality720), + LocaleController.getString(R.string.Quality144), + }, null)); private final AbstractConfigCell dividerConnection = cellGroup.appendCell(new ConfigCellDivider()); private final AbstractConfigCell headerFolder = cellGroup.appendCell(new ConfigCellHeader(LocaleController.getString("Folder"))); diff --git a/TMessagesProj/src/main/kotlin/xyz/nextalone/nagram/NaConfig.kt b/TMessagesProj/src/main/kotlin/xyz/nextalone/nagram/NaConfig.kt index c1587dbd0e..a50512d955 100644 --- a/TMessagesProj/src/main/kotlin/xyz/nextalone/nagram/NaConfig.kt +++ b/TMessagesProj/src/main/kotlin/xyz/nextalone/nagram/NaConfig.kt @@ -652,6 +652,12 @@ object NaConfig { ConfigItem.configTypeBool, false ) + val defaultHlsVideoQuality = + addConfig( + "DefaultHlsVideoQuality", + ConfigItem.configTypeInt, + 0 + ) private fun addConfig( k: String, diff --git a/TMessagesProj/src/main/res/values-el-rGR/strings_na.xml b/TMessagesProj/src/main/res/values-el-rGR/strings_na.xml index dfdc88821c..675548d043 100644 --- a/TMessagesProj/src/main/res/values-el-rGR/strings_na.xml +++ b/TMessagesProj/src/main/res/values-el-rGR/strings_na.xml @@ -13,13 +13,13 @@ Αναίρεση/Επαναφορά Αναίρεση Επανάληψη - Θόρυβος Καταστολή Και Βελτίωση Φωνής - Επανάληψη ως αντιγραφή + Καταστολή Θορύβου Και Βελτίωση Φωνής + Επανάληψη ως Αντιγραφή Ενέργεια Διπλής Αφής Αποστολή Αντιδράσεων Εμφάνιση Αντιδράσεων Προσαρμοσμένος Τίτλος - Αφήστε κενό για να χρησιμοποιήσετε το Nagram + Αφήστε κενό για χρήση Nagram Επισήμανση σύνταξης κώδικα Δημιουργία Monospace Κωδικός γλώσσας @@ -35,8 +35,10 @@ Εμφάνιση premium αυτοκόλλητα Animation Εμφάνιση Premium Star Στη Συνομιλία Εμφάνιση Premium Avatar Εφέ - AlwaysSaveChatOffset + Πάντα Αποθ. Offset συνομιλίας Αυτόματη αντικατάσταση επανάληψης για επανάληψη ως αντιγραφή + Αυτόματη μετάφραση + Αυτόματη μετάφραση μηνυμάτων από άλλη γλώσσα. Google Πολύχρωμο Σκούρο Πράσινο @@ -47,10 +49,10 @@ Θόλωμα Μπλε Αυτόματη εισαγωγή τίτλου πριν από την αποστολή GIF Προσαρμ. προεπιλ. Κωδικό γλώσσας - Απενεργοποίηση Καθολικής Αναζήτησης + Απενεργ/ση Καθολικής Αναζήτησης Μήνυμα εισόδου Id Προς το μήνυμα - Απόκρυψη προέλευσης μετά τη μετάφραση + Απόκρυψη αρχικού μετά τη μετάφραση Φιλτράρισμα συμβόλων \"Zalgo\" Όλα τα σύμβολα \"Ζοοχ-ον\" ομέ ο\" σε ψευδώνυμα ή μηνύματα θα αφαιρεθούν. Προσαρμ προεπιλ ετικέτας καναλιού @@ -70,7 +72,7 @@ Προεπιλεγμένη πισίνα Προσαρμ. λέξη επεξεργασμένου μηνύματος Ψευδής Συσκευή Υψηλής Απόδοσης - Απενεργοποίηση Ορίου Σχεδίου Emoji + Απενεργ/ση Ορίου Σχεδίου Emoji Διακόσμηση Εικονιδίων Εικονίδιο Ειδοποιήσεων Επίσημο @@ -93,14 +95,14 @@ Να μην αποσυμπιεσθεί με σύρσιμο Χωρίς κοινή χρήση αριθμού τηλεφώνου μου Προεπιλεγμένο Διαγραφή Μενού - Απενεργοποίηση Πρότασης Ρυθμίσεων Προφίλ - Απενεργοποίηση Ιστοριών - Απενεργοποίηση Αποστολής Ανάγνωσης Ιστοριών + Απενεργ/ση Πρότασης Ρυθμίσεων Προφίλ + Απενεργ/ση Ιστοριών + Απενεργ/ση Αποστολής Ανάγνωσης Ιστοριών Απόκρυψη φίλτρου σίγασης όλων Χρήση χρώματος τοπικής προσφοράς Προβολή τετράγωνου avatar - Απενεργοποίηση προσαρμοσμένης ταπετσαρίας χρήστη - Απενεργοποίηση προσαρμοσμένης ταπετσαρίας καναλιών + Απενεργ/ση προσαρμοσμένης ταπετσαρίας χρήστη + Απενεργ/ση προσαρμοσμένης ταπετσαρίας καναλιών Αντιγραφή Φωτογραφίας Ως Αυτοκόλλητο Εξωτερική μνήμη cache αυτοκόλλητου Για κοινή χρήση πακέτων αυτοκόλλητων ετικετών με άλλες εφαρμογές. Κάντε κλικ για επιλογή τοποθεσίας αποθήκευσης. @@ -114,7 +116,7 @@ Διαγραφή όλων των κρυφών μνημών Ονομασία καταλόγου Μεταβατικός Μεταφραστής - Απενεργοποίηση Markdown + Απενεργ/ση Markdown Αποστολή με markdown Απενεργ/ση αναστροφής avatars με πάτημα Θέλετε να ακολουθήσετε το κανάλι μας χαρακτηριστικά? @@ -123,7 +125,7 @@ Απενεργοποιήστε το κλικ στην εντολή κειμένου για αποστολή Για την πρόληψη ακούσιας αφής Απενεργ/ση Πλωτού Κουμπιού Διαλόγων - Απενεργοποίηση Flag Secure + Απενεργ/ση Flag Secure Κεντράρισμα τίτλου στη γραμμή ενεργειών Εμφάνιση Γρήγορης Απάντησης Στις Εντολές Bot Τύπος Υπηρεσίας Push @@ -136,10 +138,10 @@ Αποστολή εγγράφου mp4 ως βίντεο Επιλέξτε ένα σύντομο όνομα για το πακέτο σας. Αντιγραφή Σετ Αυτοκόλλητων - Απενεργοποίηση κουμπιού σίγασης καναλιού - Απενεργοποίηση συντόμευσης ήχου βίντεο προεπισκόπησης - Απενεργοποίηση πλήκτρων έντασης για ενεργοποίηση προεπισκόπησης ήχου βίντεο - Απενεργοποίηση αυτόματης σύνδεσης στον ιστό + Απενεργ/ση κουμπιού σίγασης καναλιού + Απενεργ. συντόμ. ήχου βίντεο προεπισκ/σης + Πλήκτρα έντασης για ενεργ. προεπ. ήχου βίντεο + Απενεργ/ση αυτόματης σύνδεσης στον ιστό Αποστολή Φωτογραφίας Αποστολή Βίντεο Αποστολή Αρχείου @@ -165,4 +167,4 @@ Παρανοϊκό διάστημα κειμένου για καλή αναγνωσιμότητα, για αυτόματη εισαγωγή κενών μεταξύ χαρακτήρων CJK (Κινεζικά, Ιαπωνικά, Κορεατικά), μισού πλάτους Αγγλικά, ψηφίων και συμβόλων. Αποστολή με Pangu Αποστολή χωρίς Pangu - + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-el/strings_nekox.xml b/TMessagesProj/src/main/res/values-el/strings_nekox.xml index 1fd06ce624..601085855f 100644 --- a/TMessagesProj/src/main/res/values-el/strings_nekox.xml +++ b/TMessagesProj/src/main/res/values-el/strings_nekox.xml @@ -39,7 +39,7 @@ Κλειδί μετάφρασης Google Cloud Ενημέρωση Συνδεδεμένο κανάλι - Κράτηση θέσης - Απεν/ποίηση + Κράτηση θέσης - Απενεργ/ση Yandex Αργότερα Δεν είμαστε υπεύθυνοι για οποιαδήποτε ακατάλληλη χρήση των λειτουργιών προγραμματιστή. @@ -122,11 +122,11 @@ Πρωτόκολλο Obfs Κοινή χρήση του δημόσιου κλειδιού μου - Απεν/ποίηση Δόνησης + Απενεργ/ση Δόνησης Παράβλεψη περιορισμών περιεχομένου Obfs Παράμετρος Ασφάλεια - Απεν/ποίηση Λογ/σμού Συστήματος + Απενεργ/ση Λογ/σμού Συστήματος Εισαγωγή ιδιωτικού κλειδιού Ταξινόμηση κατά επαφές Υπηρεσία NekoX Push @@ -138,7 +138,7 @@ Αναγνωριστικό χρήστη Διαγραφή όλων στη συνομιλία Πρόσθετο - Απενεργοποίηση λειτουργίας προγραμματιστή + Απενεργ/ση λειτουργίας προγραμματιστή Επαλήθευση μηνύματος Εισαγωγή δημόσιου κλειδιού Προσθήκη Shadowsocks Proxy @@ -205,7 +205,7 @@ Λειτουργία tablet Καρφίτσωμα Payload - Απεν/ποίηση άμεσης κάμερας + Απενεργ/ση άμεσης κάμερας Εμφάνιση χρονικής σήμανσης σε δευτ. Πατήστε για να μεταφράσετε το changelog Προεπισκόπηση (Ασταθής) @@ -237,6 +237,7 @@ Ψευδώνυμο καναλιού Αυτοκόλλητο Επιβεβαίωση + Χρήση Telegram Μετάφρ. UI σε συνομιλία Προεπιλογή Telegram \nAvatar ως φόντο \nΜεγάλο avatar @@ -264,7 +265,7 @@ Απλοποιημένα κινέζικα (Κίνα) (Καρφιτσωμένο) Ρυθμίσεις αναμετάδοσης WebSocket - Ρυθμίσεις αντιγράφων ασφαλείας + Εξαγωγή ρυθμίσεων Ερώτηση πριν επαναλάβετε Σύνδεση QR Στόχος diff --git a/TMessagesProj/src/main/res/values-zh-rCN/strings_na.xml b/TMessagesProj/src/main/res/values-zh-rCN/strings_na.xml index b551b08661..70bb795218 100644 --- a/TMessagesProj/src/main/res/values-zh-rCN/strings_na.xml +++ b/TMessagesProj/src/main/res/values-zh-rCN/strings_na.xml @@ -166,4 +166,5 @@ 使文字更具可读性。在 CJK(中文、日文、韩文)、半宽英文、数字和符号字符之间间隔中自动插入空格 使用 Pangu 发送 不使用 Pangu 发送 + 默认 Hls 视频质量 diff --git a/TMessagesProj/src/main/res/values/strings_na.xml b/TMessagesProj/src/main/res/values/strings_na.xml index 37cf954d76..f975f6339c 100644 --- a/TMessagesProj/src/main/res/values/strings_na.xml +++ b/TMessagesProj/src/main/res/values/strings_na.xml @@ -167,4 +167,5 @@ Paranoid text spacing for good readability, to automatically insert whitespace between CJK (Chinese, Japanese, Korean), half-width English, digit and symbol characters. Send with Pangu Send without Pangu + Default Hls Video Quality