Skip to content

Commit 024aac9

Browse files
committed
- Quality checker improved
1 parent 8f77928 commit 024aac9

File tree

10 files changed

+240
-11
lines changed

10 files changed

+240
-11
lines changed

app/src/main/java/com/mikhailgrigorev/quickpass/NewPasswordActivity.kt

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import android.view.KeyEvent
1111
import android.view.MotionEvent
1212
import android.view.View
1313
import android.view.animation.AccelerateDecelerateInterpolator
14-
import android.view.animation.AnimationUtils
1514
import android.widget.SeekBar
1615
import android.widget.Toast
1716
import androidx.appcompat.app.AppCompatActivity
@@ -118,7 +117,13 @@ class NewPasswordActivity : AppCompatActivity() {
118117
genPasswordIdField.setText(pass)
119118
if(pass!="") {
120119
val myPasswordManager = PasswordManager()
121-
val evaluation: String = myPasswordManager.evaluatePasswordString(genPasswordIdField.text.toString())
120+
var evaluation: String = myPasswordManager.evaluatePasswordString(genPasswordIdField.text.toString())
121+
if (myPasswordManager.popularPasswords(genPasswordIdField.text.toString())){
122+
evaluation = "low"
123+
}
124+
if (genPasswordIdField.text.toString().length == 4)
125+
if (myPasswordManager.popularPin(genPasswordIdField.text.toString()))
126+
evaluation = "low"
122127
passQuality.text = evaluation
123128
when (evaluation) {
124129
"low" -> passQuality.text = getString(R.string.low)
@@ -235,8 +240,15 @@ class NewPasswordActivity : AppCompatActivity() {
235240
myPasswordManager.isNumbers(genPasswordIdField.text.toString())
236241
symToggles.isChecked =
237242
myPasswordManager.isSymbols(genPasswordIdField.text.toString())
238-
val evaluation: String =
243+
var evaluation: String =
239244
myPasswordManager.evaluatePasswordString(genPasswordIdField.text.toString())
245+
if (myPasswordManager.popularPasswords(genPasswordIdField.text.toString())){
246+
evaluation = "low"
247+
}
248+
if (genPasswordIdField.text.toString().length == 4)
249+
if (myPasswordManager.popularPin(genPasswordIdField.text.toString()))
250+
evaluation = "low"
251+
240252
when (evaluation) {
241253
"low" -> passQuality.text = getString(R.string.low)
242254
"high" -> passQuality.text = getString(R.string.high)
@@ -287,7 +299,13 @@ class NewPasswordActivity : AppCompatActivity() {
287299
myPasswordManager.generatePassword(useLetters, useUC, useNumbers, useSymbols, length)
288300
genPasswordIdField.setText(newPassword)
289301

290-
val evaluation: String = myPasswordManager.evaluatePasswordString(genPasswordIdField.text.toString())
302+
var evaluation: String = myPasswordManager.evaluatePasswordString(genPasswordIdField.text.toString())
303+
if (myPasswordManager.popularPasswords(genPasswordIdField.text.toString())){
304+
evaluation = "low"
305+
}
306+
if (genPasswordIdField.text.toString().length == 4)
307+
if (myPasswordManager.popularPin(genPasswordIdField.text.toString()))
308+
evaluation = "low"
291309
passQuality.text = evaluation
292310
when (evaluation) {
293311
"low" -> passQuality.text = getString(R.string.low)

app/src/main/java/com/mikhailgrigorev/quickpass/PassGenActivity.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,15 @@ class PassGenActivity : AppCompatActivity() {
285285

286286
if (dbCipherIndex != "crypted" && pass.length == 4)
287287
qualityNum = "4"
288+
289+
if (pm.popularPasswords(pass)
290+
or ((pass.length == 4)
291+
and pm.popularPin(pass))){
292+
qualityNum = if (qualityNum == "4")
293+
"5"
294+
else
295+
"2"
296+
}
288297
j++
289298
if (pCursor.getString(groupIndex) == null || pCursor.getString(
290299
groupIndex
@@ -1447,6 +1456,14 @@ class PassGenActivity : AppCompatActivity() {
14471456

14481457
if (dbCipherIndex != "crypted" && pass.length == 4)
14491458
qualityNum = "4"
1459+
if (pm.popularPasswords(pass)
1460+
or ((pass.length == 4)
1461+
and pm.popularPin(pass))){
1462+
qualityNum = if (qualityNum == "4")
1463+
"5"
1464+
else
1465+
"2"
1466+
}
14501467
j++
14511468
if(pCursor.getString(groupIndex) == null || pCursor.getString(groupIndex) == "none"|| pCursor.getString(
14521469
groupIndex
@@ -1583,6 +1600,14 @@ class PassGenActivity : AppCompatActivity() {
15831600

15841601
if (dbCipherIndex != "crypted" && pass.length == 4)
15851602
qualityNum = "4"
1603+
if (pm.popularPasswords(pass)
1604+
or ((pass.length == 4)
1605+
and pm.popularPin(pass))){
1606+
qualityNum = if (qualityNum == "4")
1607+
"5"
1608+
else
1609+
"2"
1610+
}
15861611
j++
15871612
if(pCursor.getString(groupIndex) == null || pCursor.getString(groupIndex) == "none"|| pCursor.getString(
15881613
groupIndex

app/src/main/java/com/mikhailgrigorev/quickpass/PasswordAdapter.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ class PasswordAdapter(private val items: ArrayList<Pair<String, String>>,
7575
holder.credit.visibility = View.VISIBLE
7676
holder.marker.visibility = View.GONE
7777
}
78+
quality[position] == "5" -> {
79+
holder.creditNeg.visibility = View.VISIBLE
80+
holder.marker.visibility = View.GONE
81+
}
7882
quality[position] == "6" -> {
7983
holder.lock.visibility = View.VISIBLE
8084
holder.marker.visibility = View.GONE
@@ -100,5 +104,6 @@ class ViewHolder (view: View) : RecyclerView.ViewHolder(view) {
100104
val marker = view.marker!!
101105
val group = view.group!!
102106
val credit = view.credit!!
107+
val creditNeg = view.credit2!!
103108
val lock = view.lock!!
104109
}

app/src/main/java/com/mikhailgrigorev/quickpass/PasswordManager.kt

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import javax.crypto.SecretKeyFactory
88
import javax.crypto.spec.IvParameterSpec
99
import javax.crypto.spec.PBEKeySpec
1010
import javax.crypto.spec.SecretKeySpec
11+
import kotlin.math.abs
1112
import kotlin.math.max
1213

1314
class PasswordManager {
@@ -89,9 +90,58 @@ class PasswordManager {
8990
return (factor*length)/(maxPasswordFactor*max(maxPasswordLength, length.toFloat()))
9091
}
9192

92-
fun evaluatePin(passwordToTest: String) : Float {
93+
fun popularPasswords(passwordToTest: String): Boolean {
94+
val list = listOf(
95+
"123456",
96+
"password",
97+
"123456789",
98+
"12345",
99+
"12345678",
100+
"qwerty",
101+
"1234567",
102+
"111111",
103+
"1234567890",
104+
"123123",
105+
"abc123",
106+
"1234",
107+
"password1",
108+
"iloveyou",
109+
"1q2w3e4r",
110+
"000000",
111+
"qwerty123",
112+
"zaq12wsx",
113+
"dragon",
114+
"sunshine",
115+
"princess",
116+
"letmein",
117+
"654321",
118+
"monkey",
119+
"27653",
120+
"1qaz2wsx",
121+
"123321",
122+
"qwertyuiop",
123+
"superman",
124+
"asdfghjkl")
125+
return passwordToTest in list
126+
}
93127

94-
return 0F
128+
fun popularPin(passwordToTest: String) : Boolean {
129+
var popular = false
130+
131+
if(((abs(passwordToTest[0].toInt() - passwordToTest[1].toInt()) < 2 )
132+
and (abs(passwordToTest[1].toInt() - passwordToTest[2].toInt()) < 2))
133+
or
134+
((abs(passwordToTest[1].toInt() - passwordToTest[2].toInt()) < 2 )
135+
and (abs(passwordToTest[2].toInt() - passwordToTest [3].toInt()) < 2 ))
136+
or
137+
((abs(passwordToTest[0].toInt() - passwordToTest[3].toInt()) < 2 )
138+
and (abs(passwordToTest[2].toInt() - passwordToTest [3].toInt()) < 2 ))
139+
or
140+
((abs(passwordToTest[0].toInt() - passwordToTest[1].toInt()) < 2 )
141+
and (abs(passwordToTest[1].toInt() - passwordToTest [3].toInt()) < 2 )))
142+
popular = true
143+
144+
return popular
95145
}
96146

97147
fun evaluatePasswordString(passwordToTest: String) : String {

app/src/main/java/com/mikhailgrigorev/quickpass/PasswordViewActivity.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,15 @@ class PasswordViewActivity : AppCompatActivity() {
203203

204204
dbPassword = pCursor.getString(passIndex).toString()
205205

206+
val pm = PasswordManager()
207+
206208
addSettings.visibility = View.GONE
207209
if (dbCryptIndex == "crypted"){
208210
crypt.isChecked = true
209211
crypt.visibility = View.VISIBLE
210212
addSettings.visibility = View.VISIBLE
211-
val pm = PasswordManager()
213+
cypheredWarn.visibility = View.VISIBLE
214+
cypheredWarnImg.visibility = View.VISIBLE
212215
dbPassword = pm.decrypt(dbPassword).toString()
213216
}
214217

@@ -231,6 +234,12 @@ class PasswordViewActivity : AppCompatActivity() {
231234
evaluation = "low"
232235
}
233236

237+
if (pm.popularPasswords(dbPassword) or ((dbPassword.length == 4) and pm.popularPin(dbPassword))){
238+
tooEasy.visibility = View.VISIBLE
239+
tooEasyImg.visibility = View.VISIBLE
240+
evaluation = "low"
241+
}
242+
234243
when (evaluation) {
235244
"low" -> passQuality.text = getString(R.string.low)
236245
"high" -> passQuality.text = getString(R.string.high)
@@ -262,6 +271,8 @@ class PasswordViewActivity : AppCompatActivity() {
262271
else
263272
warning2.visibility = View.GONE
264273

274+
275+
265276
if((dbPassword.length == 4) and (evaluation == "high")){
266277
passQualityText.text = getString(R.string.showPin)
267278
passQuality.visibility = View.GONE

app/src/main/res/layout/activity_account.xml

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,56 @@
183183
</androidx.cardview.widget.CardView>
184184

185185

186+
<androidx.cardview.widget.CardView
187+
android:id="@+id/warn_Card"
188+
android:layout_width="fill_parent"
189+
android:layout_height="wrap_content"
190+
android:layout_marginStart="20dp"
191+
android:layout_marginTop="20dp"
192+
android:layout_marginEnd="20dp"
193+
android:clickable="true"
194+
android:focusable="true"
195+
android:foreground="?android:attr/selectableItemBackground"
196+
app:cardBackgroundColor="?attr/colorPrimary"
197+
app:cardCornerRadius="10dp"
198+
app:cardElevation="20dp"
199+
app:layout_constraintEnd_toEndOf="parent"
200+
app:layout_constraintStart_toStartOf="parent"
201+
app:layout_constraintTop_toBottomOf="@+id/crypted">
202+
203+
<LinearLayout
204+
android:layout_width="wrap_content"
205+
android:layout_height="wrap_content"
206+
android:orientation="vertical"
207+
android:paddingTop="10dp"
208+
android:paddingBottom="20dp">
209+
210+
<TextView
211+
android:layout_width="match_parent"
212+
android:layout_height="wrap_content"
213+
android:layout_marginStart="20dp"
214+
android:layout_marginTop="10dp"
215+
android:layout_marginEnd="20dp"
216+
android:text="@string/newPassIdea"
217+
android:textColor="@color/white"
218+
android:textStyle="bold" />
219+
220+
<TextView
221+
android:layout_width="match_parent"
222+
android:layout_height="wrap_content"
223+
android:layout_marginStart="20dp"
224+
android:layout_marginTop="10dp"
225+
android:layout_marginEnd="20dp"
226+
android:text="@string/newPassIdea1"
227+
android:textColor="@color/white"
228+
android:visibility="visible"
229+
app:layout_constraintEnd_toEndOf="parent"
230+
app:layout_constraintStart_toStartOf="parent"
231+
app:layout_constraintTop_toBottomOf="@+id/_2faInfo" />
232+
233+
</LinearLayout>
234+
</androidx.cardview.widget.CardView>
235+
186236
<androidx.cardview.widget.CardView
187237
android:layout_width="wrap_content"
188238
android:layout_height="wrap_content"
@@ -194,7 +244,7 @@
194244
app:layout_constraintBottom_toBottomOf="parent"
195245
app:layout_constraintEnd_toEndOf="parent"
196246
app:layout_constraintStart_toStartOf="parent"
197-
app:layout_constraintTop_toBottomOf="@+id/crypted"
247+
app:layout_constraintTop_toBottomOf="@+id/warn_Card"
198248
app:layout_constraintVertical_bias="1.0">
199249

200250
<LinearLayout

app/src/main/res/layout/activity_password_view.xml

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,32 @@
3333
android:layout_height="match_parent">
3434

3535

36+
<TextView
37+
android:id="@+id/tooEasy"
38+
android:layout_width="0dp"
39+
android:layout_height="wrap_content"
40+
android:layout_marginStart="10dp"
41+
android:layout_marginTop="20dp"
42+
android:layout_marginEnd="20dp"
43+
android:text="@string/tooEasyText"
44+
android:visibility="gone"
45+
app:layout_constraintEnd_toEndOf="parent"
46+
app:layout_constraintStart_toEndOf="@+id/tooEasyImg"
47+
app:layout_constraintTop_toBottomOf="@+id/cypheredWarn" />
48+
49+
<TextView
50+
android:id="@+id/cypheredWarn"
51+
android:layout_width="0dp"
52+
android:layout_height="wrap_content"
53+
android:layout_marginStart="10dp"
54+
android:layout_marginTop="20dp"
55+
android:layout_marginEnd="20dp"
56+
android:text="@string/warnQuality"
57+
android:visibility="gone"
58+
app:layout_constraintEnd_toEndOf="parent"
59+
app:layout_constraintStart_toEndOf="@+id/cypheredWarnImg"
60+
app:layout_constraintTop_toBottomOf="@+id/passQualityText" />
61+
3662
<ImageView
3763
android:id="@+id/warning0"
3864
android:layout_width="20dp"
@@ -124,7 +150,7 @@
124150
android:textStyle="bold"
125151
app:layout_constraintEnd_toEndOf="parent"
126152
app:layout_constraintStart_toStartOf="parent"
127-
app:layout_constraintTop_toBottomOf="@+id/sameParts" />
153+
app:layout_constraintTop_toBottomOf="@+id/tooEasy" />
128154

129155
<HorizontalScrollView
130156
android:id="@+id/horizontalScroll2"
@@ -428,6 +454,32 @@
428454
app:srcCompat="@drawable/alert_circle_outline"
429455
app:tint="@color/black" />
430456

457+
<ImageView
458+
android:id="@+id/tooEasyImg"
459+
android:layout_width="20dp"
460+
android:layout_height="20dp"
461+
android:layout_marginStart="20dp"
462+
android:contentDescription="@string/no_text"
463+
android:visibility="gone"
464+
app:layout_constraintBottom_toBottomOf="@+id/tooEasy"
465+
app:layout_constraintStart_toStartOf="parent"
466+
app:layout_constraintTop_toTopOf="@+id/tooEasy"
467+
app:srcCompat="@drawable/alert_circle_outline"
468+
app:tint="@color/black" />
469+
470+
<ImageView
471+
android:id="@+id/cypheredWarnImg"
472+
android:layout_width="20dp"
473+
android:layout_height="20dp"
474+
android:layout_marginStart="20dp"
475+
android:contentDescription="@string/no_text"
476+
android:visibility="gone"
477+
app:layout_constraintBottom_toBottomOf="@+id/cypheredWarn"
478+
app:layout_constraintStart_toStartOf="parent"
479+
app:layout_constraintTop_toTopOf="@+id/cypheredWarn"
480+
app:srcCompat="@drawable/database_lock_outline"
481+
app:tint="@color/black" />
482+
431483
<ImageView
432484
android:id="@+id/warning2"
433485
android:layout_width="20dp"

app/src/main/res/layout/pass_fragment.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,15 @@
9292
android:visibility="gone"
9393
card_view:srcCompat="@drawable/credit_card"
9494
card_view:tint="@color/black" />
95-
95+
<ImageView
96+
android:id="@+id/credit2"
97+
android:layout_width="15dp"
98+
android:layout_height="15dp"
99+
android:layout_gravity="top"
100+
android:contentDescription="@string/bank_card"
101+
android:visibility="gone"
102+
card_view:srcCompat="@drawable/credit_card"
103+
card_view:tint="@color/negative" />
96104
<ImageView
97105
android:id="@+id/marker"
98106
android:layout_width="10dp"

0 commit comments

Comments
 (0)