├── .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 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_multi_pwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
19 |
20 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------