diff --git a/app/schemas/com.jeeldobariya.passcodes.database.MasterDatabase/1.json b/app/schemas/com.jeeldobariya.passcodes.database.MasterDatabase/1.json deleted file mode 100644 index 0292e42d..00000000 --- a/app/schemas/com.jeeldobariya.passcodes.database.MasterDatabase/1.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "formatVersion": 1, - "database": { - "version": 1, - "identityHash": "14ca55af836200a4982f037d2dc57317", - "entities": [ - { - "tableName": "passwords", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `domain` TEXT NOT NULL, `username` TEXT NOT NULL, `password` TEXT NOT NULL, `notes` TEXT NOT NULL, `created_at` TEXT DEFAULT CURRENT_TIMESTAMP, `updated_at` TEXT DEFAULT CURRENT_TIMESTAMP)", - "fields": [ - { - "fieldPath": "id", - "columnName": "id", - "affinity": "INTEGER", - "notNull": true - }, - { - "fieldPath": "domain", - "columnName": "domain", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "username", - "columnName": "username", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "password", - "columnName": "password", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "notes", - "columnName": "notes", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "createdAt", - "columnName": "created_at", - "affinity": "TEXT", - "defaultValue": "CURRENT_TIMESTAMP" - }, - { - "fieldPath": "updatedAt", - "columnName": "updated_at", - "affinity": "TEXT", - "defaultValue": "CURRENT_TIMESTAMP" - } - ], - "primaryKey": { - "autoGenerate": true, - "columnNames": [ - "id" - ] - } - } - ], - "setupQueries": [ - "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '14ca55af836200a4982f037d2dc57317')" - ] - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4a0a13fd..f700473a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,7 +29,6 @@ - diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/AuthActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/AuthActivity.kt index 3335e370..6093386e 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/AuthActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/AuthActivity.kt @@ -25,6 +25,7 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight @@ -38,12 +39,16 @@ import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore import com.jeeldobariya.passcodes.design_system.theme.PasscodesTheme import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch +import androidx.core.net.toUri +import androidx.compose.material3.AlertDialog class AuthActivity : AppCompatActivity() { private lateinit var biometricPrompt: BiometricPrompt private lateinit var promptInfo: BiometricPrompt.PromptInfo + private var showDeprecationDialog = mutableStateOf(true) + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -55,11 +60,89 @@ class AuthActivity : AppCompatActivity() { setContent { PasscodesTheme { + + if (showDeprecationDialog.value) { + DeprecationDialog( + onDismiss = { showDeprecationDialog.value = false }, + onUpdate = { + Intent(Intent.ACTION_VIEW, + Constant.WEBSITE_URL.toUri()).also { + startActivity(it) + } + } + ) + } + AuthScreenContent() } } } + @Composable + private fun DeprecationDialog(onDismiss: () -> Unit, onUpdate: () -> Unit) { + AlertDialog( + onDismissRequest = { /* Rigid: user must choose an action */ }, + title = { + Column { + Text( + text = " 🛑 End of Support Notice", + style = MaterialTheme.typography.headlineSmall, + fontWeight = FontWeight.ExtraBold + ) + } + }, + text = { + Column(verticalArrangement = Arrangement.spacedBy(12.dp)) { + Text( + text = "As of now & forwards, we are officially deprecating all versions v2.x.x and prior.", + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface + ) + + Text( + text = "To ensure your data remains secure and you keep access to your passcodes, please update to the latest version immediately.", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + + Text( + text = "Version 3.0.0 is coming soon", + style = MaterialTheme.typography.bodySmall.copy(fontWeight = FontWeight.Bold), // Explicit bold + color = MaterialTheme.colorScheme.primary // Use primary to highlight the upcoming good news + ) + + Text( + text = "END OF SUPPORT: May 25, 2026", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.error, + fontWeight = FontWeight.Bold + ) + } + }, + confirmButton = { + Column(modifier = Modifier.fillMaxWidth()) { + Button( + onClick = onUpdate, + modifier = Modifier.fillMaxWidth() + ) { + Text("Download Latest Version") + } + TextButton( + onClick = onDismiss, + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = "Continue with Legacy Version (Unsafe)", + color = MaterialTheme.colorScheme.error, + fontSize = 12.sp + ) + } + } + }, + dismissButton = null + ) + } + @Composable private fun AuthScreenContent() { Scaffold { padding -> diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/Constants.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/Constants.kt index 37e4fc57..c7df480e 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/Constants.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/Constants.kt @@ -1,11 +1,14 @@ package com.jeeldobariya.passcodes object Constant { + + const val GH_DOMAIN_URL = "https://passcodesapp.github.io" const val REPOSITORY_SIGNATURE = "PasscodesApp/Passcodes" // Main URL Constants - const val DOCS_WEBSITE_URL = "https://passcodesapp.github.io/Passcodes-Docs" - const val TELEGRAM_COMMUNITY_URL = "https://t.me/passcodescommunity" + const val WEBSITE_URL = "$GH_DOMAIN_URL/Passcodes-Website" + const val DOCS_WEBSITE_URL = "$GH_DOMAIN_URL/Passcodes-Docs" + const val DISCORD_COMMUNITY_URL = "https://discord.gg/zPbk2gp3Sg" const val REPOSITORY_URL = "https://github.com/$REPOSITORY_SIGNATURE" // URL Constants diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/MainActivity.kt index 0f71c452..b4ea8c12 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/MainActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/MainActivity.kt @@ -29,7 +29,7 @@ class MainActivity : ComponentActivity() { checkForUpdateUseCase( currentVersion = BuildConfig.VERSION_NAME, githubReleaseApiUrl = Constant.GITHUB_RELEASE_API_URL, - telegramCommunityUrl = Constant.TELEGRAM_COMMUNITY_URL + discordUrl = Constant.DISCORD_COMMUNITY_URL ) } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/AboutUsActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/AboutUsActivity.kt index d9752697..b9f23707 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/AboutUsActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/AboutUsActivity.kt @@ -53,7 +53,7 @@ class AboutUsActivity : AppCompatActivity() { } binding.cardTelegramCommunity.setOnClickListener { - openBrowser(Constant.TELEGRAM_COMMUNITY_URL) + openBrowser(Constant.DISCORD_COMMUNITY_URL) } } } \ No newline at end of file diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt index 0c6b3b09..51d5c021 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt @@ -3,6 +3,7 @@ package com.jeeldobariya.passcodes.oldui import android.content.Intent import android.os.Bundle import android.util.Log +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope @@ -41,16 +42,14 @@ class MainActivity : AppCompatActivity() { val result = checkForUpdateUseCase( currentVersion = BuildConfig.VERSION_NAME, githubReleaseApiUrl = Constant.GITHUB_RELEASE_API_URL, - telegramCommunityUrl = Constant.TELEGRAM_COMMUNITY_URL + discordUrl = Constant.DISCORD_COMMUNITY_URL ) when (result) { UpdateCheckingResult.ON_UNOFFICIAL_RELEASE, - UpdateCheckingResult.ON_PRE_RELEASE - -> { - Intent(this@MainActivity, UpdateCheckingActivity::class.java).also { - startActivity(it) - } + UpdateCheckingResult.ON_PRE_RELEASE -> { + Toast.makeText(this@MainActivity, "You are on a Unofficial Release", Toast.LENGTH_LONG).show() + Toast.makeText(this@MainActivity, "Update as soon as possible!!", Toast.LENGTH_LONG).show() } else -> Log.e("UpdateChecking", result.toString()) } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/UpdateCheckingActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/UpdateCheckingActivity.kt deleted file mode 100644 index 919b3269..00000000 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/UpdateCheckingActivity.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.jeeldobariya.passcodes.oldui - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import com.jeeldobariya.passcodes.core.datastore.appDatastore -import com.jeeldobariya.passcodes.databinding.ActivityUpdateCheckingBinding -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.runBlocking - -class UpdateCheckingActivity: AppCompatActivity() { - - private lateinit var binding: ActivityUpdateCheckingBinding - - override fun onCreate(savedInstanceState: Bundle?) { - runBlocking { - setTheme(appDatastore.data.first().theme) - } - - super.onCreate(savedInstanceState) - binding = ActivityUpdateCheckingBinding.inflate(layoutInflater) - setContentView(binding.root) - } -} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt index 1c6ca6d1..7bb7db84 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/about_screen/ClassicalAboutScreen.kt @@ -182,10 +182,9 @@ private fun AboutGridSection() { ) } - TelegramCard( - text = stringResource(R.string.view_telegram_community_text), + DiscordCard( onClick = { - Intent(Intent.ACTION_VIEW, Constant.TELEGRAM_COMMUNITY_URL.toUri()).also { + Intent(Intent.ACTION_VIEW, Constant.DISCORD_COMMUNITY_URL.toUri()).also { context.startActivity(it) } } @@ -229,8 +228,8 @@ private fun AboutCard( } @Composable -private fun TelegramCard( - text: String, +private fun DiscordCard( + text: String = "Join Discord", onClick: () -> Unit ) { Card( diff --git a/app/src/main/res/layout/activity_about_us.xml b/app/src/main/res/layout/activity_about_us.xml index 6075a040..4e6b3534 100644 --- a/app/src/main/res/layout/activity_about_us.xml +++ b/app/src/main/res/layout/activity_about_us.xml @@ -208,17 +208,17 @@ android:padding="16dp"> diff --git a/app/src/main/res/layout/activity_update_checking.xml b/app/src/main/res/layout/activity_update_checking.xml deleted file mode 100644 index bdf11c3a..00000000 --- a/app/src/main/res/layout/activity_update_checking.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - diff --git a/core/src/main/kotlin/com/jeeldobariya/passcodes/core/domain/usecases/CheckForUpdateUseCase.kt b/core/src/main/kotlin/com/jeeldobariya/passcodes/core/domain/usecases/CheckForUpdateUseCase.kt index abb0d749..29e9f4aa 100644 --- a/core/src/main/kotlin/com/jeeldobariya/passcodes/core/domain/usecases/CheckForUpdateUseCase.kt +++ b/core/src/main/kotlin/com/jeeldobariya/passcodes/core/domain/usecases/CheckForUpdateUseCase.kt @@ -28,7 +28,7 @@ class CheckForUpdateUseCase( suspend operator fun invoke( currentVersion: String, githubReleaseApiUrl: String, - telegramCommunityUrl: String + discordUrl: String ): UpdateCheckingResult = withContext(dispatcher) { val currNormalizedVersion = SemVerUtils.normalize(currentVersion) @@ -47,7 +47,7 @@ class CheckForUpdateUseCase( userReleaseFound = true if (release.prerelease) { showToast("⚠️ You are using a PRE-RELEASE ($currNormalizedVersion). Not safe for use!!") - showToast("Join telegram @ ($telegramCommunityUrl)") + showToast("Join Discord @ ($discordUrl)") return@withContext UpdateCheckingResult.ON_PRE_RELEASE } @@ -71,7 +71,7 @@ class CheckForUpdateUseCase( if (!userReleaseFound) { showToast("⚠️ Version ($currNormalizedVersion) is not an official releases on github...") - showToast("Join telegram @ ($telegramCommunityUrl)") + showToast("Join Discord @ ($discordUrl)") return@withContext UpdateCheckingResult.ON_UNOFFICIAL_RELEASE } diff --git a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/oldui/PasswordManagerActivity.kt b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/oldui/PasswordManagerActivity.kt index 1b789ee8..37b6f822 100644 --- a/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/oldui/PasswordManagerActivity.kt +++ b/password_manager/src/main/kotlin/com/jeeldobariya/passcodes/password_manager/oldui/PasswordManagerActivity.kt @@ -2,15 +2,12 @@ package com.jeeldobariya.passcodes.password_manager.oldui import android.content.Intent import android.os.Bundle -import android.view.View.GONE import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope import com.jeeldobariya.passcodes.core.datastore.appDatastore -import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore -import com.jeeldobariya.passcodes.core.utils.collectLatestLifecycleFlow import com.jeeldobariya.passcodes.password_manager.R import com.jeeldobariya.passcodes.password_manager.databinding.ActivityPasswordManagerBinding import com.jeeldobariya.passcodes.password_manager.domain.usecases.ExportPasswordCSVUseCase @@ -67,13 +64,6 @@ class PasswordManagerActivity : AppCompatActivity() { binding = ActivityPasswordManagerBinding.inflate(layoutInflater) setContentView(binding.root) - collectLatestLifecycleFlow(featureFlagsDatastore.data) { - if (!it.isPreviewFeaturesEnabled) { - binding.importPasswordBtn.visibility = GONE - binding.exportPasswordBtn.visibility = GONE - } - } - // Add event onclick listener addOnClickListenerOnButton(binding) diff --git a/password_manager/src/main/res/values/strings.xml b/password_manager/src/main/res/values/strings.xml index 10594826..edb94c6e 100644 --- a/password_manager/src/main/res/values/strings.xml +++ b/password_manager/src/main/res/values/strings.xml @@ -15,8 +15,8 @@ Load Password Update Password Delete Password - Import G-Password - Export G-Password + Import Goggle-Password + Export Goggle-Password Password Manager