diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 89f7d6cd7..8da6ad317 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -def verName = "7.2.1.2" -def verCode = 119 +def verName = "7.2.1.3" +def verCode = 120 def serviceAccountCredentialsFile = rootProject.file("service_account_credentials.json") @@ -112,7 +112,7 @@ android { defaultConfig { minSdkVersion 16 //noinspection ExpiredTargetSdkVersion,OldTargetApi - targetSdkVersion 28 + targetSdkVersion 29 versionName verName versionCode verCode diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index 0c32babb5..beb97198b 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -120,6 +120,7 @@ android:roundIcon="@mipmap/ic_launcher" android:supportsRtl="false" android:theme="@style/Theme.TMessages.Start" + android:requestLegacyExternalStorage="true" tools:replace="android:supportsRtl"> { AlertDialog progressDialog = new AlertDialog(this, 3); progressDialog.setCanCacnel(false); @@ -2509,7 +2503,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } else { text = LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred) + "\n" + error.text; } - AlertUtil.showSimpleAlert(this, LocaleController.getString("AuthAnotherClient", R.string.AuthAnotherClient), text); + AlertUtil.showSimpleAlert(this, LocaleController.getString("AuthAnotherClient", R.string.AuthAnotherClient), text); }); } })); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java index 599fdd0c6..18ee2553a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java @@ -408,7 +408,7 @@ public class LoginActivity extends BaseFragment implements NotificationCenter.No true, LocaleController.getString("UseCustomApiNotice", R.string.UseCustomApiNotice)); - builder.addRadioItem(LocaleController.getString("", R.string.CustomApiNo), NekoXConfig.customApi == 0, (cell) -> { + builder.addRadioItem(LocaleController.getString("CustomApiNo", R.string.CustomApiNo), NekoXConfig.customApi == 0, (cell) -> { targetApi.set(0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java index b933bb1e1..c5320f09d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java @@ -428,7 +428,7 @@ public class ProxyListActivity extends BaseFragment implements NotificationCente if (!errors.isEmpty()) { - status.append(LocaleController.getString("", R.string.ErrorsInImport)); + status.append(LocaleController.getString("ErrorsInImport", R.string.ErrorsInImport)); for (Map.Entry error : errors.entrySet()) { diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/PrivacyUtil.kt b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/PrivacyUtil.kt index 151ff8ab4..01c58a9b3 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/PrivacyUtil.kt +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/PrivacyUtil.kt @@ -174,7 +174,7 @@ object PrivacyUtil { val builder = AlertDialog.Builder(ctx) - builder.setTitle(LocaleController.getString("", R.string.PrivacyNotice)) + builder.setTitle(LocaleController.getString("PrivacyNotice", R.string.PrivacyNotice)) builder.setMessage(AndroidUtilities.replaceTags(when (type) { 0 -> LocaleController.getString("PrivacyNoticePhoneVisible", R.string.PrivacyNoticePhoneVisible) @@ -207,7 +207,7 @@ object PrivacyUtil { } - builder.setNeutralButton(LocaleController.getString("Cancel", R.string.Cancel), null) + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null) builder.setNeutralButton(LocaleController.getString("DoNotRemindAgain", R.string.DoNotRemindAgain)) { _, _ -> @@ -233,7 +233,7 @@ object PrivacyUtil { val builder = AlertDialog.Builder(ctx) - builder.setTitle(LocaleController.getString("", R.string.PrivacyNotice)) + builder.setTitle(LocaleController.getString("PrivacyNotice", R.string.PrivacyNotice)) builder.setMessage(AndroidUtilities.replaceTags(LocaleController.getString("PrivacyNotice2fa", R.string.PrivacyNotice2fa))) diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/UpdateUtil.kt b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/UpdateUtil.kt new file mode 100644 index 000000000..4da63b59c --- /dev/null +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/utils/UpdateUtil.kt @@ -0,0 +1,80 @@ +package tw.nekomimi.nekogram.utils + +import android.content.Context +import org.telegram.messenger.* +import org.telegram.messenger.browser.Browser +import org.telegram.tgnet.ConnectionsManager +import org.telegram.tgnet.TLObject +import org.telegram.tgnet.TLRPC +import org.telegram.ui.ActionBar.AlertDialog + +object UpdateUtil { + + const val channelUsername = "NekogramX" + + @JvmStatic + fun postCheckFollowChannel(ctx: Context, currentAccount: Int) = UIUtil.runOnIoDispatcher { + + if (MessagesController.getMainSettings(currentAccount).getBoolean("update_channel_skip", false)) return@runOnIoDispatcher + + val messagesCollector = MessagesController.getInstance(currentAccount) + val connectionsManager = ConnectionsManager.getInstance(currentAccount) + val messagesStorage = MessagesStorage.getInstance(currentAccount) + val updateChannel = messagesCollector.getUserOrChat(channelUsername) + + if (updateChannel is TLRPC.Chat) checkFollowChannel(ctx, currentAccount, updateChannel) else { + connectionsManager.sendRequest(TLRPC.TL_contacts_resolveUsername().apply { + username = channelUsername + }) { response: TLObject?, error: TLRPC.TL_error? -> + if (error == null) { + val res = response as TLRPC.TL_contacts_resolvedPeer + if (res.chats.isEmpty()) { + return@sendRequest + } + messagesCollector.putChats(res.chats, false) + messagesStorage.putUsersAndChats(res.users, res.chats, false, true) + checkFollowChannel(ctx, currentAccount, res.chats.find { it.username == channelUsername }!!) + } + } + } + + } + + private fun checkFollowChannel(ctx: Context, currentAccount: Int, channel: TLRPC.Chat) { + + if (!channel.left || channel.kicked) { + + // MessagesController.getMainSettings(currentAccount).edit().putBoolean("update_channel_skip", true).apply() + + return + + } + + UIUtil.runOnUIThread { + + val messagesCollector = MessagesController.getInstance(currentAccount) + val userConfig = UserConfig.getInstance(currentAccount) + + val builder = AlertDialog.Builder(ctx) + + builder.setTitle(LocaleController.getString("FCTitle", R.string.FCTitle)) + builder.setMessage(LocaleController.getString("FCInfo", R.string.FCInfo)) + + builder.setPositiveButton(LocaleController.getString("ChannelJoin", R.string.ChannelJoin)) { _, _ -> + messagesCollector.addUserToChat(channel.id, userConfig.currentUser, null, 0, null, null, null) + Browser.openUrl(ctx, "https://t.me/$channelUsername") + } + + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null) + + builder.setNeutralButton(LocaleController.getString("DoNotRemindAgain", R.string.DoNotRemindAgain)) { _, _ -> + MessagesController.getMainSettings(currentAccount).edit().putBoolean("update_channel_skip", true).apply() + } + + builder.show() + + } + + } + +} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/strings_nekox.xml b/TMessagesProj/src/main/res/values/strings_nekox.xml index 1bb31c51b..a4a12dba7 100644 --- a/TMessagesProj/src/main/res/values/strings_nekox.xml +++ b/TMessagesProj/src/main/res/values/strings_nekox.xml @@ -258,4 +258,7 @@ Clear Storage All data of this application will be permanently deleted (and try to log out of all accounts first). + About application updates + Follow our announcements and updates channel? + \ No newline at end of file