├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ └── bug_report.yml └── PULL_REQUEST_TEMPLATE │ ├── fixes_and_feature.md │ └── string_translations.md ├── .gitignore ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── PRIVACY.md ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── password │ │ └── monitor │ │ ├── activities │ │ ├── DetailsActivity.kt │ │ ├── MainActivity.kt │ │ └── MultiPwdActivity.kt │ │ ├── adapters │ │ ├── LicenseItemAdapter.kt │ │ ├── MultiPwdAdapter.kt │ │ └── SupportMethodItemAdapter.kt │ │ ├── api │ │ ├── ApiManager.kt │ │ └── ApiService.kt │ │ ├── appmanager │ │ └── ApplicationManager.kt │ │ ├── bottomsheets │ │ ├── AddMultiPwdBottomSheet.kt │ │ ├── LicensesBottomSheet.kt │ │ ├── NoNetworkBottomSheet.kt │ │ ├── ScanMultiPwdBottomSheet.kt │ │ ├── SupportMethodsBottomSheet.kt │ │ └── ThemeBottomSheet.kt │ │ ├── fragments │ │ ├── details │ │ │ └── DetailsFragment.kt │ │ ├── main │ │ │ ├── ScanFragment.kt │ │ │ └── SettingsFragment.kt │ │ └── multipwd │ │ │ └── MultiPwdFragment.kt │ │ ├── koin_di │ │ └── AppModule.kt │ │ ├── models │ │ ├── License.kt │ │ ├── MultiPwdItem.kt │ │ └── SupportMethod.kt │ │ ├── objects │ │ └── MultiPwdList.kt │ │ ├── preferences │ │ └── PreferenceManager.kt │ │ ├── repositories │ │ └── ApiRepository.kt │ │ └── utils │ │ ├── HashUtils.kt │ │ ├── IntentUtils.kt │ │ ├── NetworkUtils.kt │ │ └── UiUtils.kt │ └── res │ ├── anim │ ├── slide_from_end.xml │ ├── slide_from_start.xml │ ├── slide_to_end.xml │ └── slide_to_start.xml │ ├── color │ └── chip_bg_color.xml │ ├── drawable │ ├── ic_add.xml │ ├── ic_back.xml │ ├── ic_block_screenshots.xml │ ├── ic_bookmarks.xml │ ├── ic_bookmarks_filled.xml │ ├── ic_bookmarks_outlined.xml │ ├── ic_cancel.xml │ ├── ic_check.xml │ ├── ic_details.xml │ ├── ic_found.xml │ ├── ic_found_in_breach.xml │ ├── ic_incognito_keyboard.xml │ ├── ic_info.xml │ ├── ic_kofi.xml │ ├── ic_kofi_qr.xml │ ├── ic_launcher_foreground.xml │ ├── ic_liberapay.xml │ ├── ic_liberapay_qr.xml │ ├── ic_licenses.xml │ ├── ic_material_you.xml │ ├── ic_not_found_in_breach.xml │ ├── ic_open_in_browser.xml │ ├── ic_paypal.xml │ ├── ic_paypal_qr.xml │ ├── ic_privacy_policy.xml │ ├── ic_report_issue.xml │ ├── ic_retry.xml │ ├── ic_scan.xml │ ├── ic_scan_filled.xml │ ├── ic_scan_multiple_fab.xml │ ├── ic_scan_outlined.xml │ ├── ic_select_file.xml │ ├── ic_settings.xml │ ├── ic_settings_filled.xml │ ├── ic_settings_outlined.xml │ ├── ic_sort.xml │ ├── ic_suggestion.xml │ ├── ic_support.xml │ ├── ic_system_default.xml │ ├── ic_theme.xml │ ├── ic_theme_dark.xml │ ├── ic_theme_light.xml │ ├── ic_times_found.xml │ ├── ic_view_grid.xml │ ├── ic_view_list.xml │ ├── ic_view_on_github.xml │ └── shape_scrollbar_thumb.xml │ ├── layout │ ├── activity_details.xml │ ├── activity_host_fragment.xml │ ├── activity_main.xml │ ├── activity_multi_pwd.xml │ ├── bottom_sheet_add_multi_pwd.xml │ ├── bottom_sheet_footer.xml │ ├── bottom_sheet_header.xml │ ├── bottom_sheet_no_network.xml │ ├── bottom_sheet_recycler_view.xml │ ├── bottom_sheet_scan_multi_pwd.xml │ ├── bottom_sheet_theme.xml │ ├── divider_horizontal.xml │ ├── fragment_multi_pwd.xml │ ├── fragment_scan.xml │ ├── fragment_settings.xml │ ├── item_file_recycler_view.xml │ ├── item_licenses_recycler_view.xml │ └── item_support_methods_recycler_view.xml │ ├── menu │ ├── menu_bottom_nav.xml │ └── menu_multi_pwd.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── navigation │ ├── main_fragments_nav_graph.xml │ └── multi_pwd_fragments_nav_graph.xml │ ├── values-de │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-it │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-night-v27 │ └── themes.xml │ ├── values-night │ └── colors.xml │ ├── values-nl │ └── strings.xml │ ├── values-sv │ └── strings.xml │ ├── values-tr │ └── strings.xml │ ├── values-v27 │ └── themes.xml │ ├── values-zh │ └── strings.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── donottranslate_strings.xml │ ├── licenses_strings.xml │ ├── strings.xml │ ├── styles.xml │ ├── theme_overlays.xml │ ├── themes.xml │ └── urls_strings.xml ├── build.gradle.kts ├── fastlane └── metadata │ └── android │ ├── de-DE │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── en-US │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── images │ │ ├── featureGraphic.png │ │ ├── icon.png │ │ └── phoneScreenshots │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ └── 4.png │ ├── short_description.txt │ └── title.txt │ ├── es-ES │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── fr-FR │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── it-IT │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── ja-JP │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── nl-NL │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── sv-SV │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ ├── tr-TR │ ├── changelogs │ │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ └── zh-CN │ ├── changelogs │ └── 102.txt │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle.kts /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | liberapay: stellarsand 2 | ko_fi: stellarsand 3 | custom: ["https://paypal.me/stellarsand"] -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Report a bug or issue with the app 3 | title: "[Issue]: " 4 | labels: ["bug"] 5 | body: 6 | - type: textarea 7 | id: desc 8 | attributes: 9 | label: Description 10 | description: A clear & concise description of what the issue is. 11 | validations: 12 | required: true 13 | - type: textarea 14 | id: repsteps 15 | attributes: 16 | label: Steps to reproduce the issue 17 | placeholder: | 18 | 1. Go to ... 19 | 2. Tap on ... 20 | 3. See error 21 | validations: 22 | required: true 23 | - type: textarea 24 | id: logs 25 | attributes: 26 | label: Error messages/logs 27 | description: | 28 | If possible, provide the error messages/logs to make it easier to identify the issue. Check [here](https://developer.android.com/studio/debug/bug-report) to know how to get the logs. 29 | validations: 30 | required: false 31 | - type: textarea 32 | id: addcontext 33 | attributes: 34 | label: Additional context 35 | description: Any other relevant information or context that can help us understand the issue. 36 | validations: 37 | required: false 38 | - type: checkboxes 39 | id: terms 40 | attributes: 41 | label: Terms 42 | description: By reporting this issue, you acknowledge the following 43 | options: 44 | - label: This issue occurs on the [latest version](https://github.com/StellarSand/Password-Monitor/releases/latest). 45 | required: true 46 | - label: This is not a duplicate of another issue. 47 | required: true 48 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/fixes_and_feature.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | A clear and concise description of the changes made in this pull request. 3 | - If there are any breaking changes, describe the impact and why it is necessary. 4 | - If there are any UI changes, include screenshots or design mockups to help illustrate the changes. 5 | - If something has not been tested, please provide a reason why. 6 | 7 | 8 | 9 | ### Issue(s) fixed 10 | If applicable, list the issue(s) being fixed in this PR. 11 | Fixes # issue 12 | 13 | 14 | ### Type of change 15 | - [ ] Bug fix (non-breaking change which fixes an issue) 16 | - [ ] New feature (non-breaking change which adds functionality) 17 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 18 | 19 | 20 | ### Terms 21 | - [ ] I have read the [contributing guidelines](https://github.com/StellarSand/Password-Monitor/blob/main/CONTRIBUTING.md). 22 | - [ ] I have properly tested new/changed/fixed functionality. 23 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/string_translations.md: -------------------------------------------------------------------------------- 1 | ## Language: 2 | English, German, French etc. 3 | 4 | 5 | ## Type of change 6 | - [ ] New strings have been added 7 | - [ ] Existing strings have been modified 8 | 9 | 10 | ### Terms 11 | - [ ] I have read the [contributing guidelines](https://github.com/StellarSand/Password-Monitor/blob/main/CONTRIBUTING.md). 12 | - [ ] Proper encoding has been used for characters (example: `ä` as `\u00E4`, `é` as `\u00E9` etc). 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .idea 3 | .gradle 4 | .kotlin 5 | build 6 | app/release 7 | app/debug 8 | local.properties 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | 4 | ## v1.0.2 5 | - Support for Android 15. 6 | 7 | 8 | 9 | ## v1.0.1 10 | - Improved network availability checks. 11 | 12 | 13 | 14 | ## v1.0.0 15 | - Initial Release -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # CONTRIBUTING 2 | 3 | ### Translations 4 | - Remember to insert a backslash (`\`) before any apostrophe (`'`). 5 | - Make sure the characters are properly encoded when translating strings (example: `ä` as `\u00E4`, `é` as `\u00E9` etc). 6 |
You can use websites like [Compart](https://www.compart.com/en/unicode), [Symbl](https://symbl.cc/en/unicode/table/) or something else. 7 |
Example: `é` would be shown as `U+00E9` on these websites, so just convert it to `\u00E9` for the android strings. 8 |
The strings can be found here: 9 | - [English](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values/strings.xml) 10 | - [Chinese](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-zh/strings.xml) 11 | - [Dutch](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-nl/strings.xml) 12 | - [French](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-fr/strings.xml) 13 | - [German](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-de/strings.xml) 14 | - [Italian](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-it/strings.xml) 15 | - [Japanese](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-ja/strings.xml) 16 | - [Spanish](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-es/strings.xml) 17 | - [Swedish](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-sv/strings.xml) 18 | - [Turkish](https://github.com/StellarSand/Password-Monitor/blob/main/app/src/main/res/values-tr/strings.xml) 19 | 20 | ### Code 21 | - Do not submit pull requests to update gradle, dependencies or SDK. 22 | - Try not to use any deprecated libraries, dependencies or methods, if other alternatives are available. 23 | - Please test your changes before submitting a pull request. 24 | -------------------------------------------------------------------------------- /PRIVACY.md: -------------------------------------------------------------------------------- 1 | # Password Monitor Privacy Policy 2 | 3 | This privacy policy applies to your use of the `Password Monitor` software application on mobile devices. 4 | 5 | The terms “we,” “us,” and “our” refer to the developers of this app, while “you” and "your" refers to you, as a user of the `Password Monitor` app. 6 | 7 | 8 | 9 | ## App permissions 10 | The app requires the following permissions: 11 | - **ACCESS_NETWORK_STATE**: Required to determine whether an internet connection is available before initiating any network request. 12 | - **INTERNET**: Required to retrieve the hash list from [Have I Been Pwned?](https://haveibeenpwned.com). 13 | 14 | 15 | 16 | ## Data collection 17 | We are committed to protecting the privacy of our users. 18 | - No data is collected through this app. 19 | - No personally identifiable information or sensitive data is stored on your device. 20 | - This app checks if your password is compromised without sending it to [Have I Been Pwned?](https://haveibeenpwned.com). 21 |
Check the [wiki](https://github.com/StellarSand/Password-Monitor/wiki) for a detailed explanation on how this is achieved. 22 | 23 | 24 | 25 | ## Changes to our privacy policy 26 | We reserve the right to modify this Privacy Policy and our Terms of Use as needed. If any changes are made, we will post them on this page to ensure you are always aware of the information we collect, how we use it, and when we disclose it. It is your responsibility to review any updates to this Privacy Policy. If you disagree with any modifications, if and when such changes may be made to this Privacy Policy, you must stop using this application. 27 | 28 | 29 | **Last modified: May 16, 2024** 30 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | plugins { 19 | alias(libs.plugins.android.application) 20 | alias(libs.plugins.android.kotlin) 21 | } 22 | 23 | kotlin { 24 | jvmToolchain(21) 25 | } 26 | 27 | android { 28 | namespace = "com.password.monitor" 29 | compileSdk = 35 30 | 31 | defaultConfig { 32 | applicationId = "com.password.monitor" 33 | minSdk = 23 34 | targetSdk = 35 35 | versionCode = 102 36 | versionName = "1.0.2" 37 | setProperty("archivesBaseName", "PasswordMonitor_v$versionName") 38 | } 39 | 40 | buildTypes { 41 | getByName("release") { 42 | isMinifyEnabled = true 43 | isShrinkResources = true 44 | vcsInfo.include = false // https://f-droid.org/docs/Reproducible_Builds/#vcs-info 45 | proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") 46 | } 47 | /*getByName("debug") { 48 | isMinifyEnabled = true 49 | isShrinkResources = true 50 | proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") 51 | }*/ 52 | } 53 | 54 | dependenciesInfo { 55 | includeInApk = false // Disables dependency metadata when building APKs. 56 | includeInBundle = false // Disables dependency metadata when building Android App Bundles. 57 | } 58 | 59 | buildFeatures { 60 | viewBinding = true 61 | buildConfig = true 62 | } 63 | } 64 | 65 | dependencies { 66 | implementation(libs.bundles.androidxCoreComponents) 67 | implementation(libs.material3) 68 | implementation(libs.koin.android) 69 | implementation(libs.bundles.navigation) 70 | implementation(libs.bundles.ktor) 71 | implementation(libs.androidFastScrollKt) 72 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2024-present StellarSand 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | 18 | # Add project specific ProGuard rules here. 19 | # You can control the set of applied configuration files using the 20 | # proguardFiles setting in build.gradle.kts. 21 | # 22 | # For more details, see 23 | # http://developer.android.com/guide/developing/tools/proguard.html 24 | 25 | # If your project uses WebView with JS, uncomment the following 26 | # and specify the fully qualified class name to the JavaScript interface 27 | # class: 28 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 29 | # public *; 30 | #} 31 | 32 | # If you keep the line number information, uncomment this to 33 | # hide the original source file name. 34 | #-renamesourcefileattribute SourceFile 35 | 36 | ################################################################################### 37 | 38 | # Keep the line number information for debugging stack traces. 39 | -keepattributes SourceFile,LineNumberTable -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 22 | 23 | 24 | 25 | 34 | 35 | 36 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 52 | 53 | 54 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/activities/DetailsActivity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.activities 19 | 20 | import android.os.Bundle 21 | import androidx.activity.enableEdgeToEdge 22 | import androidx.appcompat.app.AppCompatActivity 23 | import com.password.monitor.R 24 | import com.password.monitor.databinding.ActivityDetailsBinding 25 | import com.password.monitor.fragments.details.DetailsFragment 26 | import com.password.monitor.preferences.PreferenceManager 27 | import com.password.monitor.preferences.PreferenceManager.Companion.BLOCK_SS 28 | import com.password.monitor.utils.UiUtils.Companion.blockScreenshots 29 | import com.password.monitor.utils.UiUtils.Companion.setNavBarContrastEnforced 30 | import org.koin.android.ext.android.get 31 | 32 | class DetailsActivity : AppCompatActivity() { 33 | 34 | lateinit var activityBinding: ActivityDetailsBinding 35 | lateinit var passwordLine: String 36 | 37 | override fun onCreate(savedInstanceState: Bundle?) { 38 | enableEdgeToEdge() 39 | window.setNavBarContrastEnforced() 40 | super.onCreate(savedInstanceState) 41 | activityBinding = ActivityDetailsBinding.inflate(layoutInflater) 42 | setContentView(activityBinding.root) 43 | 44 | passwordLine = intent.getStringExtra("PwdLine")!! 45 | 46 | // Disable screenshots and screen recordings 47 | window.blockScreenshots(get().getBoolean(BLOCK_SS)) 48 | 49 | activityBinding.detailsBottomAppBar.apply { 50 | setSupportActionBar(this) 51 | setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } 52 | } 53 | 54 | supportFragmentManager.beginTransaction() 55 | .replace(R.id.activity_host_fragment, DetailsFragment()) 56 | .commitNow() 57 | 58 | } 59 | 60 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/adapters/LicenseItemAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.adapters 19 | 20 | import android.view.LayoutInflater 21 | import android.view.View 22 | import android.view.ViewGroup 23 | import androidx.recyclerview.widget.RecyclerView 24 | import com.google.android.material.textview.MaterialTextView 25 | import com.password.monitor.R 26 | import com.password.monitor.activities.MainActivity 27 | import com.password.monitor.models.License 28 | import com.password.monitor.utils.IntentUtils.Companion.openURL 29 | 30 | class LicenseItemAdapter(private val aListViewItems: ArrayList, 31 | private val mainActivity: MainActivity) : RecyclerView.Adapter() { 32 | 33 | inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 34 | 35 | val licenseTitle: MaterialTextView = itemView.findViewById(R.id.license_title) 36 | val licenseDesc: MaterialTextView = itemView.findViewById(R.id.license_desc) 37 | 38 | } 39 | 40 | override fun onCreateViewHolder(parent: ViewGroup, 41 | viewType: Int): ListViewHolder { 42 | return ListViewHolder( 43 | LayoutInflater.from(parent.context).inflate(R.layout.item_licenses_recycler_view, parent, false) 44 | ) 45 | } 46 | 47 | override fun onBindViewHolder(holder: ListViewHolder, position: Int) { 48 | 49 | val license = aListViewItems[position] 50 | 51 | holder.licenseTitle.apply { 52 | text = license.title 53 | setOnClickListener { 54 | openURL(mainActivity, license.url) 55 | } 56 | } 57 | 58 | holder.licenseDesc.text = license.desc 59 | } 60 | 61 | override fun getItemCount(): Int { 62 | return aListViewItems.size 63 | } 64 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/adapters/MultiPwdAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.adapters 19 | 20 | import com.password.monitor.models.MultiPwdItem 21 | import androidx.recyclerview.widget.RecyclerView 22 | import com.password.monitor.adapters.MultiPwdAdapter.ListViewHolder 23 | import android.widget.TextView 24 | import com.password.monitor.R 25 | import android.view.ViewGroup 26 | import android.view.LayoutInflater 27 | import android.view.View 28 | import me.stellarsand.android.fastscroll.PopupTextProvider 29 | 30 | class MultiPwdAdapter(private val aListViewItems: List, 31 | private val clickListener: OnItemClickListener): RecyclerView.Adapter(), PopupTextProvider { 32 | 33 | interface OnItemClickListener { 34 | fun onItemClick(position: Int) 35 | } 36 | 37 | inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { 38 | 39 | val passwordLine: TextView = itemView.findViewById(R.id.password_line) 40 | 41 | init { 42 | // Handle click events of items 43 | itemView.setOnClickListener(this) 44 | } 45 | 46 | override fun onClick(v: View?) { 47 | val position = bindingAdapterPosition 48 | if (position != RecyclerView.NO_POSITION) { 49 | clickListener.onItemClick(position) 50 | } 51 | } 52 | 53 | } 54 | 55 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder { 56 | val view = LayoutInflater.from(parent.context).inflate(R.layout.item_file_recycler_view, parent, false) 57 | return ListViewHolder(view) 58 | } 59 | 60 | override fun onBindViewHolder(holder: ListViewHolder, position: Int) { 61 | holder.passwordLine.text = aListViewItems[position].passwordLine 62 | } 63 | 64 | override fun getItemCount(): Int { 65 | return aListViewItems.size 66 | } 67 | 68 | override fun getItemViewType(position: Int): Int { 69 | return position 70 | } 71 | 72 | override fun getPopupText(view: View, position: Int): CharSequence { 73 | return aListViewItems[position].passwordLine.substring(0, 1) 74 | } 75 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/adapters/SupportMethodItemAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.adapters 19 | 20 | import android.view.LayoutInflater 21 | import android.view.View 22 | import android.view.ViewGroup 23 | import androidx.recyclerview.widget.RecyclerView 24 | import com.google.android.material.imageview.ShapeableImageView 25 | import com.google.android.material.textview.MaterialTextView 26 | import com.password.monitor.R 27 | import com.password.monitor.activities.MainActivity 28 | import com.password.monitor.models.SupportMethod 29 | import com.password.monitor.utils.IntentUtils.Companion.openURL 30 | 31 | class SupportMethodItemAdapter (private val aListViewItems: ArrayList, 32 | private val mainActivity: MainActivity) : RecyclerView.Adapter() { 33 | 34 | inner class ListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 35 | 36 | val supportMethodTitle: MaterialTextView = itemView.findViewById(R.id.supportMethodTitle) 37 | val supportMethodQr: ShapeableImageView = itemView.findViewById(R.id.supportMethodQr) 38 | val supportMethodUrl: MaterialTextView = itemView.findViewById(R.id.supportMethodUrl) 39 | 40 | } 41 | 42 | override fun onCreateViewHolder(parent: ViewGroup, 43 | viewType: Int): ListViewHolder { 44 | return ListViewHolder(LayoutInflater.from(parent.context) 45 | .inflate(R.layout.item_support_methods_recycler_view, parent, false) 46 | ) 47 | } 48 | 49 | override fun onBindViewHolder(holder: ListViewHolder, position: Int) { 50 | 51 | val supportMethod = aListViewItems[position] 52 | 53 | holder.supportMethodTitle.apply { 54 | text = supportMethod.title 55 | setCompoundDrawablesWithIntrinsicBounds(supportMethod.titleIcon, 0, 0, 0) 56 | } 57 | 58 | holder.supportMethodQr.setImageResource(supportMethod.qr) 59 | 60 | holder.supportMethodUrl.apply { 61 | text = supportMethod.url 62 | setOnClickListener { 63 | openURL(mainActivity, supportMethod.url) 64 | } 65 | } 66 | } 67 | 68 | override fun getItemCount(): Int { 69 | return aListViewItems.size 70 | } 71 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/api/ApiManager.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.api 19 | 20 | import io.ktor.client.HttpClient 21 | import io.ktor.client.engine.okhttp.OkHttp 22 | import okhttp3.CertificatePinner 23 | import okhttp3.ConnectionSpec 24 | 25 | class ApiManager { 26 | 27 | companion object { 28 | 29 | private val httpClient = 30 | HttpClient(OkHttp) { 31 | engine { 32 | config { 33 | followRedirects(true) 34 | connectionSpecs(listOf(ConnectionSpec.RESTRICTED_TLS, ConnectionSpec.MODERN_TLS)) 35 | certificatePinner( 36 | CertificatePinner.Builder() 37 | .add("api.pwnedpasswords.com","sha256/8U2U045KrvwjayFk78sd+2LJv7xiun4wfD+Dnaqft1M=") 38 | .build() 39 | ) 40 | } 41 | } 42 | } 43 | 44 | fun apiBuilder(): ApiService { 45 | return ApiService(httpClient) 46 | } 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/api/ApiService.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.api 19 | 20 | import io.ktor.client.HttpClient 21 | import io.ktor.client.call.body 22 | import io.ktor.client.request.get 23 | 24 | class ApiService(private val okHttpClient: HttpClient) { 25 | 26 | suspend fun getHashes(prefix: String): String { 27 | return okHttpClient.get("https://api.pwnedpasswords.com/range/$prefix").body() 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/appmanager/ApplicationManager.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.appmanager 19 | 20 | import android.app.Application 21 | import com.password.monitor.koin_di.appModule 22 | import com.password.monitor.preferences.PreferenceManager 23 | import com.password.monitor.preferences.PreferenceManager.Companion.THEME 24 | import com.password.monitor.utils.UiUtils.Companion.setAppTheme 25 | import org.koin.android.ext.android.get 26 | import org.koin.android.ext.koin.androidContext 27 | import org.koin.core.context.startKoin 28 | 29 | class ApplicationManager : Application() { 30 | 31 | override fun onCreate() { 32 | super.onCreate() 33 | 34 | startKoin { 35 | androidContext(this@ApplicationManager) 36 | modules(appModule) 37 | } 38 | 39 | // Theme 40 | setAppTheme(get().getInt(THEME)) 41 | 42 | } 43 | 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/koin_di/AppModule.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2022-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.koin_di 19 | 20 | import com.password.monitor.api.ApiManager.Companion.apiBuilder 21 | import com.password.monitor.preferences.PreferenceManager 22 | import com.password.monitor.repositories.ApiRepository 23 | import org.koin.dsl.module 24 | 25 | val appModule = 26 | module { 27 | single { PreferenceManager(get()) } 28 | single { apiBuilder() } 29 | single { ApiRepository(get()) } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/models/License.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.models 19 | 20 | data class License( 21 | val title: String, 22 | val desc: String, 23 | val url: String 24 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/models/MultiPwdItem.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.models 19 | 20 | data class MultiPwdItem(val passwordLine: String) -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/models/SupportMethod.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.models 19 | 20 | data class SupportMethod( 21 | val title: String, 22 | val titleIcon: Int, 23 | val qr: Int, 24 | val url: String 25 | ) 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/objects/MultiPwdList.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2022-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.objects 19 | 20 | import com.password.monitor.models.MultiPwdItem 21 | 22 | object MultiPwdList { 23 | 24 | val pwdList by lazy { mutableListOf() } 25 | 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/preferences/PreferenceManager.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.preferences 19 | 20 | import android.content.Context 21 | 22 | class PreferenceManager(context: Context) { 23 | 24 | companion object { 25 | // Shared pref keys 26 | const val THEME = "theme" 27 | const val GRID_VIEW = "grid_view" 28 | const val SORT_ASC = "sort_asc" 29 | const val MATERIAL_YOU = "material_you" 30 | const val BLOCK_SS = "block_ss" 31 | const val INCOG_KEYBOARD = "incog_keyboard" 32 | } 33 | 34 | private val sharedPreferences = 35 | context.getSharedPreferences("com.password.monitor_preferences", Context.MODE_PRIVATE) 36 | 37 | fun getInt(key: String): Int { 38 | return sharedPreferences.getInt(key, 0) 39 | } 40 | 41 | fun setInt(key: String, value: Int) { 42 | val editor = sharedPreferences.edit() 43 | editor.putInt(key, value) 44 | editor.apply() 45 | } 46 | 47 | fun getBoolean(key: String, defValue: Boolean = true): Boolean { 48 | return sharedPreferences.getBoolean(key, defValue) 49 | } 50 | 51 | fun setBoolean(key: String, value: Boolean) { 52 | val editor = sharedPreferences.edit() 53 | editor.putBoolean(key, value) 54 | editor.apply() 55 | } 56 | 57 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/repositories/ApiRepository.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.repositories 19 | 20 | import com.password.monitor.api.ApiService 21 | 22 | class ApiRepository(private val apiService: ApiService) { 23 | 24 | suspend fun getHashes(prefix: String): String { 25 | return apiService.getHashes(prefix) 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/utils/HashUtils.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.utils 19 | 20 | import java.security.MessageDigest 21 | 22 | class HashUtils { 23 | 24 | companion object { 25 | 26 | private const val ITEM_NOT_FOUND = -1 27 | 28 | fun String.generateSHA1Hash(): String { 29 | val messageDigest = MessageDigest.getInstance("SHA-1") 30 | val bytes = messageDigest.digest(toByteArray()) 31 | return bytes.joinToString("") { "%02x".format(it) } 32 | } 33 | 34 | fun getHashCount(response: String?, suffix: String): Int { 35 | val matchingLine = response?.lines()?.firstOrNull { 36 | val parts = it.split(":") 37 | parts.firstOrNull()?.endsWith(suffix) == true 38 | } 39 | return matchingLine?.split(":")?.get(1)?.toIntOrNull() ?: ITEM_NOT_FOUND 40 | } 41 | 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/utils/IntentUtils.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.utils 19 | 20 | import android.app.Activity 21 | import android.content.ActivityNotFoundException 22 | import android.content.Intent 23 | import android.net.Uri 24 | import android.view.View 25 | import android.widget.Toast 26 | import androidx.coordinatorlayout.widget.CoordinatorLayout 27 | import com.password.monitor.R 28 | import com.password.monitor.utils.UiUtils.Companion.showSnackbar 29 | 30 | class IntentUtils { 31 | 32 | companion object { 33 | 34 | fun openURL(activity: Activity, 35 | url: String, 36 | coordinatorLayout: CoordinatorLayout, 37 | anchorView: View?) { 38 | try { 39 | activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) 40 | } 41 | // If no browser installed, show snackbar 42 | catch (_: ActivityNotFoundException) { 43 | showSnackbar(coordinatorLayout, 44 | activity.getString(R.string.no_browsers), 45 | anchorView) 46 | } 47 | } 48 | fun openURL(activity: Activity, 49 | url: String) { 50 | try { 51 | activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) 52 | } 53 | // If no browser installed, show toast 54 | catch (_: ActivityNotFoundException) { 55 | Toast.makeText(activity, activity.getString(R.string.no_browsers), Toast.LENGTH_SHORT).show() 56 | } 57 | } 58 | 59 | } 60 | 61 | } -------------------------------------------------------------------------------- /app/src/main/java/com/password/monitor/utils/NetworkUtils.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.password.monitor.utils 19 | 20 | import android.content.Context 21 | import android.net.ConnectivityManager 22 | import android.net.NetworkCapabilities 23 | import kotlinx.coroutines.Dispatchers 24 | import kotlinx.coroutines.withContext 25 | import java.io.IOException 26 | import java.net.InetSocketAddress 27 | import java.net.Socket 28 | 29 | class NetworkUtils { 30 | 31 | companion object { 32 | 33 | // Check network availability 34 | suspend fun hasNetwork(context: Context): Boolean { 35 | return withContext(Dispatchers.IO) { 36 | val connectivityManager = 37 | context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager 38 | val capabilities = 39 | connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork) 40 | capabilities != null && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) 41 | } 42 | } 43 | 44 | // Check if network has internet connection 45 | // Must be called in background thread 46 | suspend fun hasInternet(): Boolean { 47 | return try { 48 | withContext(Dispatchers.IO) { 49 | Socket().apply { 50 | connect(InetSocketAddress("haveibeenpwned.com", 443), 10000) 51 | close() 52 | } 53 | true 54 | } 55 | } 56 | catch (_: IOException) { 57 | false 58 | } 59 | } 60 | 61 | } 62 | 63 | } -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_from_end.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_from_start.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 22 | 23 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_to_end.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 22 | 23 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_to_start.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/color/chip_bg_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_block_screenshots.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmarks.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmarks_filled.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmarks_outlined.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cancel.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_details.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_found.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_found_in_breach.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_incognito_keyboard.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_liberapay.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 28 | 29 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_licenses.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_material_you.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_not_found_in_breach.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_open_in_browser.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_paypal.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_privacy_policy.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_report_issue.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_retry.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_scan.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_scan_filled.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_scan_multiple_fab.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_scan_outlined.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 26 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_select_file.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings_filled.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings_outlined.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sort.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_suggestion.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 23 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_support.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_system_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_theme.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_theme_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_theme_light.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_times_found.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_grid.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_on_github.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_scrollbar_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_details.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 33 | 34 | 42 | 43 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_host_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 36 | 37 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_multi_pwd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 26 | 27 | 35 | 36 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_add_multi_pwd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 29 | 30 | 32 | 33 | 34 | 35 | 40 | 41 | 48 | 49 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_footer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 31 | 32 | 39 | 40 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 22 | 23 | 28 | 29 | 39 | 40 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_no_network.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 28 | 29 | 31 | 32 | 43 | 44 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 29 | 30 | 32 | 33 | 38 | 39 | 44 | 45 | 55 | 56 | 57 | 58 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_scan_multi_pwd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 30 | 31 | 33 | 34 | 51 | 52 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /app/src/main/res/layout/bottom_sheet_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 29 | 30 | 32 | 33 | 44 | 45 | 53 | 54 | 61 | 62 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /app/src/main/res/layout/divider_horizontal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_multi_pwd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_file_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 28 | 29 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_licenses_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 28 | 29 | 36 | 37 | 51 | 52 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_support_methods_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 29 | 30 | 36 | 37 | 49 | 50 | 59 | 60 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_bottom_nav.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 22 | 23 | 27 | 28 | 32 | 33 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_multi_pwd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 23 | 24 | 29 | 30 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/navigation/main_fragments_nav_graph.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 30 | 35 | 36 | 37 | 42 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app/src/main/res/navigation/multi_pwd_fragments_nav_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 26 | 27 | 32 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v27/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/values-v27/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 75dp 22 | 40dp 23 | 35dp 24 | 32dp 25 | 30dp 26 | 25dp 27 | 22dp 28 | 20dp 29 | 16dp 30 | 12dp 31 | 10dp 32 | 8dp 33 | 6.5dp 34 | 4dp 35 | 2.5dp 36 | 37 | 38 | 20sp 39 | 19sp 40 | 18sp 41 | 17sp 42 | 16sp 43 | 15sp 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/values/donottranslate_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | Password Monitor 23 | - 24 | 25 | Bottom Sheet Title 26 | 27 | 28 | Liberapay 29 | PayPal 30 | Ko-fi 31 | 32 | 33 | Ktor 34 | AndroidFastScroll-kt 35 | Liberapay icon 36 | PayPal icon 37 | Ko-fi icon 38 | 39 | Copyright \u00A9 2023-present StellarSand 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/values/licenses_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | Licensed under the Apache License, Version 2.0 (the "License"); 23 | \nyou may not use this file except in compliance with the License. 24 | \nYou may obtain a copy of the License at 25 | \n 26 | \nhttps://www.apache.org/licenses/LICENSE-2.0 27 | \n 28 | \nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. 29 | 30 | No Copyright 31 | \nThe person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. 32 | \n 33 | \nYou can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission. See Other Information below. 34 | \n 35 | \nOther Information 36 | \n 37 | \n- In no way are the patent or trademark rights of any person affected by CC0, nor are the rights that other persons may have in the work or in how the work is used, such as publicity or privacy rights. 38 | \n 39 | \n- Unless expressly stated otherwise, the person who associated a work with this deed makes no warranties about the work, and disclaims liability for all uses of the work, to the fullest extent permitted by applicable law. 40 | \n 41 | \n- When using or citing the work, you should not imply endorsement by the author or the affirmer. 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 35 | 36 | 37 | 47 | 48 | 49 | 50 | 51 | 54 | 55 | 56 | 61 | 62 | 63 | 66 | 67 | 70 | 71 | 72 | 73 | 74 | 77 | 78 | -------------------------------------------------------------------------------- /app/src/main/res/values/urls_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 21 | 22 | https://github.com/StellarSand/Password-Monitor/wiki 23 | https://github.com/StellarSand/Password-Monitor/blob/master/PRIVACY.md 24 | https://github.com/StellarSand/Password-Monitor/issues 25 | https://github.com/StellarSand/Password-Monitor 26 | 27 | 28 | https://liberapay.com/stellarsand 29 | https://www.paypal.com/paypalme/stellarsand 30 | https://ko-fi.com/stellarsand 31 | 32 | 33 | https://github.com/ktorio/ktor/blob/main/LICENSE 34 | https://github.com/StellarSand/AndroidFastScroll-kt/blob/master/LICENSE 35 | https://liberapay.com/about/logos 36 | https://commons.wikimedia.org/wiki/Category:SVG_PayPal_logos 37 | https://more.ko-fi.com/brand-assets 38 | 39 | 40 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 19 | plugins { 20 | alias(libs.plugins.android.application) apply false 21 | alias(libs.plugins.android.kotlin) apply false 22 | } 23 | 24 | tasks.register("clean", Delete::class) { 25 | delete(rootProject.layout.buildDirectory) 26 | } -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Unterstützung für Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/full_description.txt: -------------------------------------------------------------------------------- 1 | Diese App ist nahtlos mit Have I Been Pwned? integriert und hilft Ihnen zu überprüfen, ob Ihre Passwörter bei öffentlich bekannt gewordenen Datenschutzverletzungen kompromittiert wurden. 2 | Ihre Passwörter bleiben privat und werden nirgendwo weitergegeben. 3 | 4 | Merkmale: 5 | 6 | - Vollständig quelloffen 7 | - Material design 3 & Material You 8 | - Unterstützt sowohl helles als auch dunkles Design 9 | - Keine Werbung 10 | - Keine Sammlung von persönlichen Daten -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/short_description.txt: -------------------------------------------------------------------------------- 1 | Sorgen Sie für die Sicherheit Ihrer Passwörter, indem Sie nach Verstößen suchen. -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Support for Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | This app seamlessly integrates with Have I Been Pwned? to help you verify whether your passwords have been compromised in any publicly disclosed data breaches. 2 | Your passwords stay private and are never shared anywhere. 3 | 4 | Features: 5 | 6 | - Fully open source 7 | - Material design 3 & Material You 8 | - Supports both light and dark theme 9 | - No ads 10 | - No collection of personal data -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Ensure your password safety by scanning for potential breaches. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Compatibilidad con Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/full_description.txt: -------------------------------------------------------------------------------- 1 | Esta aplicación se integra perfectamente con Have I Been Pwned? para ayudarte a verificar si tus contraseñas se han visto comprometidas en alguna filtración de datos divulgada públicamente. 2 | Sus contraseñas se mantienen privadas y nunca se comparten en cualquier lugar. 3 | 4 | Características: 5 | 6 | - Totalmente de código abierto 7 | - Material Design 3 y Material You 8 | - Soporta temas claros y oscuros 9 | - Sin anuncios 10 | - No recopila datos personales -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/short_description.txt: -------------------------------------------------------------------------------- 1 | Garantice la seguridad de sus contraseñas buscando posibles infracciones. -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Prise en charge d'Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/full_description.txt: -------------------------------------------------------------------------------- 1 | Cette application s'intègre parfaitement à Have I Been Pwned? pour vous aider à vérifier si vos mots de passe ont été compromis lors de violations de données rendues publiques. 2 | Vos mots de passe restent privés et ne sont jamais partagés. 3 | 4 | Caractéristiques : 5 | 6 | - Entièrement open source 7 | - Material design 3 & Material You 8 | - Prend en charge les thèmes clairs et foncés 9 | - Pas de publicité 10 | - Pas de collecte de données personnelles -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/short_description.txt: -------------------------------------------------------------------------------- 1 | Assurez la sécurité de votre mot de passe en recherchant les failles. -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Supporto per Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/full_description.txt: -------------------------------------------------------------------------------- 1 | Questa applicazione si integra perfettamente con Have I Been Pwned? per aiutarvi a verificare se le vostre password sono state compromesse da violazioni di dati divulgate pubblicamente. 2 | Le vostre password rimangono private e non vengono mai condivise. 3 | 4 | Caratteristiche: 5 | 6 | - Completamente open source 7 | - Material design 3 e Material You 8 | - Supporta sia il tema chiaro che quello scuro 9 | - Nessuna pubblicità 10 | - Nessuna raccolta di dati personali -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/short_description.txt: -------------------------------------------------------------------------------- 1 | Garantite la sicurezza delle password analizzando le potenziali violazioni. -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - アンドロイド15に対応。 -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/full_description.txt: -------------------------------------------------------------------------------- 1 | 本应用程序与 Have I Been Pwned? 无缝集成,帮助您验证您的密码是否在任何公开披露的数据泄露事件中被泄露。 2 | 您的密码保持私密,绝不会在任何地方共享。 3 | 4 | 功能特点 5 | 6 | - 完全开源 7 | - Material design 3 和 Material You 8 | - 支持浅色和深色主题 9 | - 无广告 10 | - 不收集个人数据 -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/short_description.txt: -------------------------------------------------------------------------------- 1 | 扫描潜在漏洞,确保密码安全。 -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Ondersteuning voor Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/full_description.txt: -------------------------------------------------------------------------------- 1 | Deze app integreert naadloos met Have I Been Pwned? om je te helpen controleren of je wachtwoorden zijn gecompromitteerd in openbaar gemaakte datalekken. 2 | Je wachtwoorden blijven privé en worden nooit ergens gedeeld. 3 | 4 | Kenmerken: 5 | 6 | - Volledig open source 7 | - Material design 3 & Material You 8 | - Ondersteunt zowel licht als donker thema 9 | - Geen advertenties 10 | - Geen verzameling van persoonlijke gegevens -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/short_description.txt: -------------------------------------------------------------------------------- 1 | Zorg voor een veilig wachtwoord door te scannen op mogelijke inbreuken. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SV/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Stöd för Android 15. -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SV/full_description.txt: -------------------------------------------------------------------------------- 1 | Den här appen integreras sömlöst med Have I Been Pwned? för att hjälpa dig att verifiera om dina lösenord har äventyrats i några offentligt avslöjade dataintrång. 2 | Dina lösenord förblir privata och delas aldrig någonstans. 3 | 4 | Funktioner: 5 | 6 | - Helt öppen källkod 7 | - Material design 3 & Material You 8 | - Stöder både ljust och mörkt tema 9 | - Inga annonser 10 | - Ingen insamling av personuppgifter -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SV/short_description.txt: -------------------------------------------------------------------------------- 1 | Säkerställ lösenordssäkerheten genom att söka efter potentiella intrång. -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SV/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - Android 15 için destek. -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/full_description.txt: -------------------------------------------------------------------------------- 1 | Bu uygulama Have I Been Pwned? ile sorunsuz bir şekilde entegre olarak şifrelerinizin kamuya açık veri ihlallerinde tehlikeye girip girmediğini doğrulamanıza yardımcı olur. 2 | Parolalarınız gizli kalır ve asla hiçbir yerde paylaşılmaz. 3 | 4 | Özellikler 5 | 6 | - Tamamen açık kaynak 7 | - Material Design 3 & Material You 8 | - Hem açık hem de koyu temayı destekler 9 | - Reklam yok 10 | - Kişisel veri toplama yok -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/short_description.txt: -------------------------------------------------------------------------------- 1 | Olası ihlallere karşı tarama yaparak parola güvenliğinizi sağlayın. -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/changelogs/102.txt: -------------------------------------------------------------------------------- 1 | - 支持 Android 15。 -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/full_description.txt: -------------------------------------------------------------------------------- 1 | 本应用程序与 Have I Been Pwned? 无缝集成,帮助您验证您的密码是否在任何公开披露的数据泄露事件中被泄露。 2 | 您的密码保持私密,绝不会在任何地方共享。 3 | 4 | 功能特点 5 | 6 | - 完全开源 7 | - Material design 3 和 Material You 8 | - 支持浅色和深色主题 9 | - 无广告 10 | - 不收集个人数据 -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/short_description.txt: -------------------------------------------------------------------------------- 1 | 扫描潜在漏洞,确保密码安全。 -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/title.txt: -------------------------------------------------------------------------------- 1 | Password Monitor -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2024-present StellarSand 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | 18 | # Project-wide Gradle settings. 19 | # IDE (e.g. Android Studio) users: 20 | # Gradle settings configured through the IDE *will override* 21 | # any settings specified in this file. 22 | # For more details on how to configure your build environment visit 23 | # http://www.gradle.org/docs/current/userguide/build_environment.html 24 | # Specifies the JVM arguments used for the daemon process. 25 | # The setting is particularly useful for tweaking memory settings. 26 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 27 | # When configured, Gradle will run in incubating parallel mode. 28 | # This option should only be used with decoupled projects. More details, visit 29 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 30 | # org.gradle.parallel=true 31 | # AndroidX package structure to make it clearer which packages are bundled with the 32 | # Android operating system, and which are packaged with your app's APK 33 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 34 | android.useAndroidX=true 35 | # Kotlin code style for this project: "official" or "obsolete": 36 | kotlin.code.style=official 37 | # Enables namespacing of each library's R class so that its R class includes only the 38 | # resources declared in the library itself and none from the library's dependencies, 39 | # thereby reducing the size of the R class for that library 40 | android.nonTransitiveRClass=true 41 | android.nonFinalResIds=false 42 | 43 | # Gradle caching 44 | org.gradle.caching=true 45 | org.gradle.configuration-cache=true 46 | 47 | # Free system resources after build/sync 48 | # if idle for specified milliseconds. 49 | org.gradle.daemon.idletimeout=30000 -------------------------------------------------------------------------------- /gradle/libs.versions.toml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2024-present StellarSand 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | 18 | [versions] 19 | androidGradle = "8.10.0" 20 | androidKotlin = "2.1.20" # https://github.com/JetBrains/kotlin/releases/latest (latest version is not auto detected) 21 | appcompat = "1.7.0" 22 | coreKtx = "1.16.0" 23 | splashscreen = "1.0.1" 24 | material3 = "1.13.0-alpha13" 25 | koin = "4.0.2" 26 | navigationKtx = "2.9.0" 27 | ktor = "3.0.3" 28 | androidFastscrollKt = "v1.0.8" 29 | 30 | [libraries] 31 | androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } 32 | androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } 33 | androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "splashscreen" } 34 | material3 = { module = "com.google.android.material:material", version.ref = "material3" } 35 | koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } 36 | androidx-navigation-runtime-ktx = { module = "androidx.navigation:navigation-runtime-ktx", version.ref = "navigationKtx" } 37 | androidx-navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "navigationKtx" } 38 | androidx-navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigationKtx" } 39 | ktor = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } 40 | ktor-engine = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } 41 | androidFastScrollKt = { module = "com.github.StellarSand:AndroidFastScroll-kt", version.ref = "androidFastscrollKt" } 42 | 43 | [bundles] 44 | androidxCoreComponents = ["androidx-appcompat", "androidx-core-ktx", "androidx-core-splashscreen"] 45 | navigation = ["androidx-navigation-runtime-ktx", "androidx-navigation-fragment-ktx", "androidx-navigation-ui-ktx"] 46 | ktor = ["ktor", "ktor-engine"] 47 | 48 | [plugins] 49 | android-application = { id = "com.android.application", version.ref = "androidGradle" } 50 | android-kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "androidKotlin" } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StellarSand/Password-Monitor/205ca93d7261380113c1cd2fa65d44ea1fa9191f/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2024-present StellarSand 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | 18 | distributionBase=GRADLE_USER_HOME 19 | distributionPath=wrapper/dists 20 | distributionSha256Sum=61ad310d3c7d3e5da131b76bbf22b5a4c0786e9d892dae8c1658d4b484de3caa 21 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip 22 | networkTimeout=10000 23 | validateDistributionUrl=true 24 | zipStoreBase=GRADLE_USER_HOME 25 | zipStorePath=wrapper/dists 26 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | @rem SPDX-License-Identifier: Apache-2.0 17 | @rem 18 | 19 | @if "%DEBUG%"=="" @echo off 20 | @rem ########################################################################## 21 | @rem 22 | @rem Gradle startup script for Windows 23 | @rem 24 | @rem ########################################################################## 25 | 26 | @rem Set local scope for the variables with windows NT shell 27 | if "%OS%"=="Windows_NT" setlocal 28 | 29 | set DIRNAME=%~dp0 30 | if "%DIRNAME%"=="" set DIRNAME=. 31 | @rem This is normally unused 32 | set APP_BASE_NAME=%~n0 33 | set APP_HOME=%DIRNAME% 34 | 35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 37 | 38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 40 | 41 | @rem Find java.exe 42 | if defined JAVA_HOME goto findJavaFromJavaHome 43 | 44 | set JAVA_EXE=java.exe 45 | %JAVA_EXE% -version >NUL 2>&1 46 | if %ERRORLEVEL% equ 0 goto execute 47 | 48 | echo. 1>&2 49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 50 | echo. 1>&2 51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 52 | echo location of your Java installation. 1>&2 53 | 54 | goto fail 55 | 56 | :findJavaFromJavaHome 57 | set JAVA_HOME=%JAVA_HOME:"=% 58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 59 | 60 | if exist "%JAVA_EXE%" goto execute 61 | 62 | echo. 1>&2 63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 64 | echo. 1>&2 65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 66 | echo location of your Java installation. 1>&2 67 | 68 | goto fail 69 | 70 | :execute 71 | @rem Setup the command line 72 | 73 | set CLASSPATH= 74 | 75 | 76 | @rem Execute Gradle 77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* 78 | 79 | :end 80 | @rem End local scope for the variables with windows NT shell 81 | if %ERRORLEVEL% equ 0 goto mainEnd 82 | 83 | :fail 84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 85 | rem the _cmd.exe /c_ return code! 86 | set EXIT_CODE=%ERRORLEVEL% 87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 89 | exit /b %EXIT_CODE% 90 | 91 | :mainEnd 92 | if "%OS%"=="Windows_NT" endlocal 93 | 94 | :omega 95 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2024-present StellarSand 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | pluginManagement { 19 | repositories { 20 | gradlePluginPortal() 21 | google() 22 | mavenCentral() 23 | } 24 | } 25 | dependencyResolutionManagement { 26 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 27 | repositories { 28 | google() 29 | mavenCentral() 30 | maven("https://jitpack.io") 31 | } 32 | } 33 | rootProject.name = "Password-Monitor" 34 | include("app") 35 | --------------------------------------------------------------------------------