Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
40916877
Commit
40916877
authored
Jan 31, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Separate FingerprintHelper and AuthDialog
parent
cfb0a3ba
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
103 additions
and
71 deletions
+103
-71
AndroidManifest.xml
app-core/src/main/AndroidManifest.xml
+3
-1
FingerprintHelper.java
...in/java/com/topjohnwu/magisk/utils/FingerprintHelper.java
+1
-60
AndroidManifest.xml
app/src/full/AndroidManifest.xml
+0
-1
SuRequestActivity.java
...src/full/java/com/topjohnwu/magisk/SuRequestActivity.java
+1
-1
PolicyAdapter.java
...ull/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java
+4
-3
CustomAlertDialog.java
.../java/com/topjohnwu/magisk/dialogs/CustomAlertDialog.java
+2
-2
FingerprintAuthDialog.java
...a/com/topjohnwu/magisk/dialogs/FingerprintAuthDialog.java
+88
-0
SettingsFragment.java
...java/com/topjohnwu/magisk/fragments/SettingsFragment.java
+4
-3
No files found.
app-core/src/main/AndroidManifest.xml
View file @
40916877
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"com.topjohnwu.magisk.core"
/>
package=
"com.topjohnwu.magisk.core"
>
<uses-permission
android:name=
"android.permission.USE_FINGERPRINT"
/>
</manifest>
app
/src/full
/java/com/topjohnwu/magisk/utils/FingerprintHelper.java
→
app
-core/src/main
/java/com/topjohnwu/magisk/utils/FingerprintHelper.java
View file @
40916877
package
com
.
topjohnwu
.
magisk
.
utils
;
import
android.annotation.TargetApi
;
import
android.app.Activity
;
import
android.app.KeyguardManager
;
import
android.content.res.Resources
;
import
android.content.res.TypedArray
;
import
android.graphics.Color
;
import
android.graphics.drawable.Drawable
;
import
android.hardware.fingerprint.FingerprintManager
;
import
android.os.Build
;
import
android.os.CancellationSignal
;
import
android.security.keystore.KeyGenParameterSpec
;
import
android.security.keystore.KeyPermanentlyInvalidatedException
;
import
android.security.keystore.KeyProperties
;
import
android.view.Gravity
;
import
android.widget.Toast
;
import
com.topjohnwu.magisk.App
;
import
com.topjohnwu.magisk.Config
;
import
com.topjohnwu.magisk.Const
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.dialogs.CustomAlertDialog
;
import
java.security.KeyStore
;
...
...
@@ -35,7 +26,7 @@ public abstract class FingerprintHelper {
private
Cipher
cipher
;
private
CancellationSignal
cancel
;
public
static
boolean
useFinger
P
rint
()
{
public
static
boolean
useFinger
p
rint
()
{
boolean
fp
=
Config
.
get
(
Config
.
Key
.
SU_FINGERPRINT
);
if
(
fp
&&
!
canUseFingerprint
())
{
Config
.
set
(
Config
.
Key
.
SU_FINGERPRINT
,
false
);
...
...
@@ -52,56 +43,6 @@ public abstract class FingerprintHelper {
return
km
.
isKeyguardSecure
()
&&
fm
!=
null
&&
fm
.
isHardwareDetected
()
&&
fm
.
hasEnrolledFingerprints
();
}
public
static
void
showAuthDialog
(
Activity
activity
,
Runnable
onSuccess
)
{
CustomAlertDialog
dialog
=
new
CustomAlertDialog
(
activity
);
CustomAlertDialog
.
ViewHolder
vh
=
dialog
.
getViewHolder
();
try
{
FingerprintHelper
helper
=
new
FingerprintHelper
()
{
@Override
public
void
onAuthenticationError
(
int
errorCode
,
CharSequence
errString
)
{
vh
.
messageView
.
setTextColor
(
Color
.
RED
);
vh
.
messageView
.
setText
(
errString
);
}
@Override
public
void
onAuthenticationHelp
(
int
helpCode
,
CharSequence
helpString
)
{
vh
.
messageView
.
setTextColor
(
Color
.
RED
);
vh
.
messageView
.
setText
(
helpString
);
}
@Override
public
void
onAuthenticationFailed
()
{
vh
.
messageView
.
setTextColor
(
Color
.
RED
);
vh
.
messageView
.
setText
(
R
.
string
.
auth_fail
);
}
@Override
public
void
onAuthenticationSucceeded
(
FingerprintManager
.
AuthenticationResult
result
)
{
dialog
.
dismiss
();
onSuccess
.
run
();
}
};
Drawable
fingerprint
=
activity
.
getResources
().
getDrawable
(
R
.
drawable
.
ic_fingerprint
);
fingerprint
.
setBounds
(
0
,
0
,
Utils
.
dpInPx
(
50
),
Utils
.
dpInPx
(
50
));
Resources
.
Theme
theme
=
activity
.
getTheme
();
TypedArray
ta
=
theme
.
obtainStyledAttributes
(
new
int
[]
{
R
.
attr
.
imageColorTint
});
fingerprint
.
setTint
(
ta
.
getColor
(
0
,
Color
.
GRAY
));
ta
.
recycle
();
vh
.
messageView
.
setCompoundDrawables
(
null
,
null
,
null
,
fingerprint
);
vh
.
messageView
.
setCompoundDrawablePadding
(
Utils
.
dpInPx
(
20
));
vh
.
messageView
.
setGravity
(
Gravity
.
CENTER
);
dialog
.
setMessage
(
R
.
string
.
auth_fingerprint
)
.
setNegativeButton
(
R
.
string
.
close
,
(
d
,
w
)
->
helper
.
cancel
())
.
setOnCancelListener
(
d
->
helper
.
cancel
())
.
show
();
helper
.
authenticate
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
Utils
.
toast
(
R
.
string
.
auth_fail
,
Toast
.
LENGTH_SHORT
);
}
}
protected
FingerprintHelper
()
throws
Exception
{
KeyStore
keyStore
=
KeyStore
.
getInstance
(
"AndroidKeyStore"
);
manager
=
App
.
self
.
getSystemService
(
FingerprintManager
.
class
);
...
...
app/src/full/AndroidManifest.xml
View file @
40916877
...
...
@@ -5,7 +5,6 @@
<uses-permission
android:name=
"android.permission.VIBRATE"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE"
/>
<uses-permission
android:name=
"android.permission.USE_FINGERPRINT"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE"
/>
<application
...
...
app/src/full/java/com/topjohnwu/magisk/SuRequestActivity.java
View file @
40916877
...
...
@@ -148,7 +148,7 @@ public class SuRequestActivity extends BaseActivity {
}
};
boolean
useFP
=
FingerprintHelper
.
useFinger
P
rint
();
boolean
useFP
=
FingerprintHelper
.
useFinger
p
rint
();
if
(
useFP
)
{
try
{
...
...
app/src/full/java/com/topjohnwu/magisk/adapters/PolicyAdapter.java
View file @
40916877
...
...
@@ -15,6 +15,7 @@ import com.topjohnwu.magisk.R;
import
com.topjohnwu.magisk.container.Policy
;
import
com.topjohnwu.magisk.database.MagiskDB
;
import
com.topjohnwu.magisk.dialogs.CustomAlertDialog
;
import
com.topjohnwu.magisk.dialogs.FingerprintAuthDialog
;
import
com.topjohnwu.magisk.uicomponents.ExpandableViewHolder
;
import
com.topjohnwu.magisk.uicomponents.SnackbarMaker
;
import
com.topjohnwu.magisk.utils.FingerprintHelper
;
...
...
@@ -85,12 +86,12 @@ public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder
dbHelper
.
updatePolicy
(
policy
);
}
};
if
(
FingerprintHelper
.
useFinger
P
rint
())
{
if
(
FingerprintHelper
.
useFinger
p
rint
())
{
holder
.
masterSwitch
.
setChecked
(!
isChecked
);
FingerprintHelper
.
show
AuthDialog
((
Activity
)
v
.
getContext
(),
()
->
{
new
Fingerprint
AuthDialog
((
Activity
)
v
.
getContext
(),
()
->
{
holder
.
masterSwitch
.
setChecked
(
isChecked
);
r
.
run
();
});
})
.
show
()
;
}
else
{
r
.
run
();
}
...
...
app/src/full/java/com/topjohnwu/magisk/dialogs/CustomAlertDialog.java
View file @
40916877
...
...
@@ -22,9 +22,9 @@ public class CustomAlertDialog extends AlertDialog.Builder {
private
DialogInterface
.
OnClickListener
positiveListener
;
private
DialogInterface
.
OnClickListener
negativeListener
;
private
DialogInterface
.
OnClickListener
neutralListener
;
private
AlertDialog
dialog
;
private
ViewHolder
vh
;
protected
AlertDialog
dialog
;
protected
ViewHolder
vh
;
public
class
ViewHolder
{
@BindView
(
R
.
id
.
dialog_layout
)
public
LinearLayout
dialogLayout
;
...
...
app/src/full/java/com/topjohnwu/magisk/dialogs/FingerprintAuthDialog.java
0 → 100644
View file @
40916877
package
com
.
topjohnwu
.
magisk
.
dialogs
;
import
android.annotation.TargetApi
;
import
android.app.Activity
;
import
android.content.res.Resources
;
import
android.content.res.TypedArray
;
import
android.graphics.Color
;
import
android.graphics.drawable.Drawable
;
import
android.hardware.fingerprint.FingerprintManager
;
import
android.os.Build
;
import
android.view.Gravity
;
import
android.widget.Toast
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.utils.FingerprintHelper
;
import
com.topjohnwu.magisk.utils.Utils
;
import
androidx.annotation.NonNull
;
import
androidx.appcompat.app.AlertDialog
;
@TargetApi
(
Build
.
VERSION_CODES
.
M
)
public
class
FingerprintAuthDialog
extends
CustomAlertDialog
{
private
Runnable
callback
;
private
DialogFingerprintHelper
helper
;
public
FingerprintAuthDialog
(
@NonNull
Activity
activity
,
Runnable
onSuccess
)
{
super
(
activity
);
callback
=
onSuccess
;
Drawable
fingerprint
=
activity
.
getResources
().
getDrawable
(
R
.
drawable
.
ic_fingerprint
);
fingerprint
.
setBounds
(
0
,
0
,
Utils
.
dpInPx
(
50
),
Utils
.
dpInPx
(
50
));
Resources
.
Theme
theme
=
activity
.
getTheme
();
TypedArray
ta
=
theme
.
obtainStyledAttributes
(
new
int
[]
{
R
.
attr
.
imageColorTint
});
fingerprint
.
setTint
(
ta
.
getColor
(
0
,
Color
.
GRAY
));
ta
.
recycle
();
vh
.
messageView
.
setCompoundDrawables
(
null
,
null
,
null
,
fingerprint
);
vh
.
messageView
.
setCompoundDrawablePadding
(
Utils
.
dpInPx
(
20
));
vh
.
messageView
.
setGravity
(
Gravity
.
CENTER
);
setMessage
(
R
.
string
.
auth_fingerprint
);
setNegativeButton
(
R
.
string
.
close
,
(
d
,
w
)
->
helper
.
cancel
());
setOnCancelListener
(
d
->
helper
.
cancel
());
try
{
helper
=
new
DialogFingerprintHelper
();
}
catch
(
Exception
ignored
)
{}
}
@Override
public
AlertDialog
show
()
{
create
();
if
(
helper
==
null
)
{
dialog
.
dismiss
();
Utils
.
toast
(
R
.
string
.
auth_fail
,
Toast
.
LENGTH_SHORT
);
}
else
{
helper
.
authenticate
();
dialog
.
show
();
}
return
dialog
;
}
class
DialogFingerprintHelper
extends
FingerprintHelper
{
DialogFingerprintHelper
()
throws
Exception
{}
@Override
public
void
onAuthenticationError
(
int
errorCode
,
CharSequence
errString
)
{
vh
.
messageView
.
setTextColor
(
Color
.
RED
);
vh
.
messageView
.
setText
(
errString
);
}
@Override
public
void
onAuthenticationHelp
(
int
helpCode
,
CharSequence
helpString
)
{
vh
.
messageView
.
setTextColor
(
Color
.
RED
);
vh
.
messageView
.
setText
(
helpString
);
}
@Override
public
void
onAuthenticationFailed
()
{
vh
.
messageView
.
setTextColor
(
Color
.
RED
);
vh
.
messageView
.
setText
(
R
.
string
.
auth_fail
);
}
@Override
public
void
onAuthenticationSucceeded
(
FingerprintManager
.
AuthenticationResult
result
)
{
dismiss
();
callback
.
run
();
}
}
}
app/src/full/java/com/topjohnwu/magisk/fragments/SettingsFragment.java
View file @
40916877
...
...
@@ -13,6 +13,7 @@ import com.topjohnwu.magisk.Config;
import
com.topjohnwu.magisk.Const
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.components.BasePreferenceFragment
;
import
com.topjohnwu.magisk.dialogs.FingerprintAuthDialog
;
import
com.topjohnwu.magisk.tasks.CheckUpdates
;
import
com.topjohnwu.magisk.utils.AppUtils
;
import
com.topjohnwu.magisk.utils.DownloadApp
;
...
...
@@ -46,7 +47,7 @@ public class SettingsFragment extends BasePreferenceFragment implements Topic.Su
boolean
showSuperuser
=
Utils
.
showSuperUser
();
app
.
prefs
.
edit
()
.
putBoolean
(
Config
.
Key
.
SU_FINGERPRINT
,
FingerprintHelper
.
useFinger
P
rint
())
.
putBoolean
(
Config
.
Key
.
SU_FINGERPRINT
,
FingerprintHelper
.
useFinger
p
rint
())
.
apply
();
PreferenceScreen
prefScreen
=
getPreferenceScreen
();
...
...
@@ -217,10 +218,10 @@ public class SettingsFragment extends BasePreferenceFragment implements Topic.Su
case
Config
.
Key
.
SU_FINGERPRINT
:
boolean
checked
=
((
SwitchPreferenceCompat
)
preference
).
isChecked
();
((
SwitchPreferenceCompat
)
preference
).
setChecked
(!
checked
);
FingerprintHelper
.
show
AuthDialog
(
requireActivity
(),
()
->
{
new
Fingerprint
AuthDialog
(
requireActivity
(),
()
->
{
((
SwitchPreferenceCompat
)
preference
).
setChecked
(
checked
);
Config
.
set
(
key
,
checked
);
});
})
.
show
()
;
break
;
}
return
true
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment