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
9e3afcfe
Commit
9e3afcfe
authored
Oct 24, 2019
by
Viktor De Pasquale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added safetynet implementation
parent
21f2f86c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
344 additions
and
47 deletions
+344
-47
SafetynetFragment.kt
.../topjohnwu/magisk/redesign/safetynet/SafetynetFragment.kt
+40
-0
SafetynetViewModel.kt
...topjohnwu/magisk/redesign/safetynet/SafetynetViewModel.kt
+42
-21
bg_divider_rounded_on_primary.xml
app/src/main/res/drawable/bg_divider_rounded_on_primary.xml
+7
-0
ic_refresh_safetynet_md2.xml
app/src/main/res/drawable/ic_refresh_safetynet_md2.xml
+10
-0
fragment_safetynet_md2.xml
app/src/main/res/layout/fragment_safetynet_md2.xml
+240
-26
strings_md2.xml
app/src/main/res/values/strings_md2.xml
+5
-0
No files found.
app/src/main/java/com/topjohnwu/magisk/redesign/safetynet/SafetynetFragment.kt
View file @
9e3afcfe
package
com.topjohnwu.magisk.redesign.safetynet
package
com.topjohnwu.magisk.redesign.safetynet
import
android.os.Build
import
android.view.View
import
android.view.ViewAnimationUtils
import
androidx.core.animation.doOnEnd
import
androidx.core.view.isInvisible
import
androidx.core.view.isVisible
import
androidx.databinding.BindingAdapter
import
androidx.interpolator.view.animation.FastOutSlowInInterpolator
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentSafetynetMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentSafetynetMd2Binding
import
com.topjohnwu.magisk.redesign.compat.CompatFragment
import
com.topjohnwu.magisk.redesign.compat.CompatFragment
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
kotlin.math.hypot
import
kotlin.math.roundToInt
class
SafetynetFragment
:
CompatFragment
<
SafetynetViewModel
,
FragmentSafetynetMd2Binding
>()
{
class
SafetynetFragment
:
CompatFragment
<
SafetynetViewModel
,
FragmentSafetynetMd2Binding
>()
{
...
@@ -15,4 +25,34 @@ class SafetynetFragment : CompatFragment<SafetynetViewModel, FragmentSafetynetMd
...
@@ -15,4 +25,34 @@ class SafetynetFragment : CompatFragment<SafetynetViewModel, FragmentSafetynetMd
activity
.
setTitle
(
R
.
string
.
safetyNet
)
activity
.
setTitle
(
R
.
string
.
safetyNet
)
}
}
}
@BindingAdapter
(
"revealSafetyNet"
)
fun
View
.
revealOnCenter
(
expand
:
Boolean
)
{
val
anim
=
if
(
Build
.
VERSION
.
SDK_INT
<
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
isInvisible
=
expand
return
}
else
{
val
x
=
measuredWidth
.
toDouble
()
val
y
=
measuredHeight
.
toDouble
()
val
maxRadius
=
hypot
(
x
,
y
).
toFloat
()
val
start
=
if
(
expand
)
0f
else
maxRadius
val
end
=
if
(
expand
)
maxRadius
else
0f
ViewAnimationUtils
.
createCircularReveal
(
this
,
(
x
/
2
).
roundToInt
(),
(
y
/
2
).
roundToInt
(),
start
,
end
).
apply
{
interpolator
=
FastOutSlowInInterpolator
()
doOnEnd
{
if
(!
expand
)
isVisible
=
false
}
}
}
post
{
isVisible
=
true
anim
.
start
()
}
}
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/redesign/safetynet/SafetynetViewModel.kt
View file @
9e3afcfe
package
com.topjohnwu.magisk.redesign.safetynet
package
com.topjohnwu.magisk.redesign.safetynet
import
androidx.databinding.Bindable
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.events.SafetyNetResult
import
com.topjohnwu.magisk.model.events.SafetyNetResult
...
@@ -14,44 +16,63 @@ class SafetynetViewModel(
...
@@ -14,44 +16,63 @@ class SafetynetViewModel(
rxBus
:
RxBus
rxBus
:
RxBus
)
:
CompatViewModel
()
{
)
:
CompatViewModel
()
{
private
var
currentState
=
IDLE
set
(
value
)
{
field
=
value
notifyStateChanged
()
}
val
safetyNetTitle
=
KObservableField
(
R
.
string
.
empty
)
val
safetyNetTitle
=
KObservableField
(
R
.
string
.
empty
)
val
ctsState
=
KObservableField
(
IDLE
)
val
ctsState
=
KObservableField
(
false
)
val
basicIntegrityState
=
KObservableField
(
IDLE
)
val
basicIntegrityState
=
KObservableField
(
false
)
val
isChecking
@Bindable
get
()
=
currentState
==
LOADING
val
isFailed
@Bindable
get
()
=
currentState
==
FAILED
val
isSuccess
@Bindable
get
()
=
currentState
==
PASS
init
{
init
{
rxBus
.
register
<
SafetyNetResult
>()
rxBus
.
register
<
SafetyNetResult
>()
.
subscribeK
{
resolveResponse
(
it
.
responseCode
)
}
.
subscribeK
{
resolveResponse
(
it
.
responseCode
)
}
.
add
()
.
add
()
attest
()
}
}
fun
attest
()
=
UpdateSafetyNetEvent
().
publish
()
override
fun
notifyStateChanged
()
{
super
.
notifyStateChanged
()
notifyPropertyChanged
(
BR
.
loading
)
notifyPropertyChanged
(
BR
.
failed
)
notifyPropertyChanged
(
BR
.
success
)
}
private
fun
attest
()
{
currentState
=
LOADING
UpdateSafetyNetEvent
().
publish
()
}
fun
reset
()
=
attest
()
private
fun
resolveResponse
(
response
:
Int
)
=
when
{
private
fun
resolveResponse
(
response
:
Int
)
=
when
{
//todo animate (reveal) to result (green/error)
response
and
0
x0F
==
0
->
{
response
and
0
x0F
==
0
->
{
val
hasCtsPassed
=
response
and
SafetyNetHelper
.
CTS_PASS
!=
0
val
hasCtsPassed
=
response
and
SafetyNetHelper
.
CTS_PASS
!=
0
val
hasBasicIntegrityPassed
=
response
and
SafetyNetHelper
.
BASIC_PASS
!=
0
val
hasBasicIntegrityPassed
=
response
and
SafetyNetHelper
.
BASIC_PASS
!=
0
safetyNetTitle
.
value
=
R
.
string
.
safetyNet_check_success
val
result
=
hasCtsPassed
&&
hasBasicIntegrityPassed
ctsState
.
value
=
if
(
hasCtsPassed
)
{
ctsState
.
value
=
hasCtsPassed
PASS
basicIntegrityState
.
value
=
hasBasicIntegrityPassed
}
else
{
currentState
=
if
(
result
)
PASS
else
FAILED
FAILED
safetyNetTitle
.
value
=
}
if
(
result
)
R
.
string
.
safetynet_attest_success
basicIntegrityState
.
value
=
if
(
hasBasicIntegrityPassed
)
{
else
R
.
string
.
safetynet_attest_failure
PASS
}
else
{
FAILED
}
}
}
//todo animate (collapse) back to initial (fade error)
response
==
-
2
->
{
response
==
-
2
->
{
ctsState
.
value
=
IDLE
currentState
=
FAILED
basicIntegrityState
.
value
=
IDLE
ctsState
.
value
=
false
basicIntegrityState
.
value
=
false
back
()
}
}
//todo animate (collapse) back to initial (surface)
else
->
{
else
->
{
ctsState
.
value
=
IDLE
currentState
=
FAILED
basicIntegrityState
.
value
=
IDLE
ctsState
.
value
=
false
basicIntegrityState
.
value
=
false
safetyNetTitle
.
value
=
when
(
response
)
{
safetyNetTitle
.
value
=
when
(
response
)
{
SafetyNetHelper
.
RESPONSE_ERR
->
R
.
string
.
safetyNet_res_invalid
SafetyNetHelper
.
RESPONSE_ERR
->
R
.
string
.
safetyNet_res_invalid
else
->
R
.
string
.
safetyNet_api_error
else
->
R
.
string
.
safetyNet_api_error
...
...
app/src/main/res/drawable/bg_divider_rounded_on_primary.xml
0 → 100644
View file @
9e3afcfe
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<size
android:height=
"4dp"
/>
<corners
android:radius=
"2dp"
/>
<solid
android:color=
"?colorOnPrimary"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/ic_refresh_safetynet_md2.xml
0 → 100644
View file @
9e3afcfe
<?xml version="1.0" encoding="utf-8"?>
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
>
<path
android:fillColor=
"?colorOnSurface"
android:pathData=
"M12 21C8.25 20 5 15.54 5 11.22V6.3L12 3.18L19 6.3V12.07A6.45 6.45 0 0 1 20.91 12.67A11.63 11.63 0 0 0 21 11V5L12 1L3 5V11C3 16.55 6.84 21.74 12 23C12.35 22.91 12.7 22.8 13 22.68A6.3 6.3 0 0 1 12 21M18 14.5V13L15.75 15.25L18 17.5V16A2.5 2.5 0 0 1 20.24 19.62L21.33 20.71A4 4 0 0 0 18 14.5M18 21A2.5 2.5 0 0 1 15.76 17.38L14.67 16.29A4 4 0 0 0 18 22.5V24L20.25 21.75L18 19.5Z"
/>
</vector>
\ No newline at end of file
app/src/main/res/layout/fragment_safetynet_md2.xml
View file @
9e3afcfe
This diff is collapsed.
Click to expand it.
app/src/main/res/values/strings_md2.xml
View file @
9e3afcfe
...
@@ -29,6 +29,11 @@
...
@@ -29,6 +29,11 @@
<!--ref. Magisk Hide-->
<!--ref. Magisk Hide-->
<string
name=
"magisk_hide_md2"
>
Hide
</string>
<string
name=
"magisk_hide_md2"
>
Hide
</string>
<string
name=
"safetynet_attest_success"
>
Success!
</string>
<string
name=
"safetynet_attest_failure"
>
Attestation failed!
</string>
<string
name=
"safetynet_attest_loading"
>
Just a sec…
</string>
<string
name=
"safetynet_attest_restart"
>
Try again
</string>
<string
name=
"settings_dark_mode_title"
>
Theme Mode
</string>
<string
name=
"settings_dark_mode_title"
>
Theme Mode
</string>
<string
name=
"settings_dark_mode_message"
>
Select mode which best suits your style!
</string>
<string
name=
"settings_dark_mode_message"
>
Select mode which best suits your style!
</string>
<string
name=
"settings_dark_mode_light"
>
Always Light
</string>
<string
name=
"settings_dark_mode_light"
>
Always Light
</string>
...
...
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