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
658d74e0
Commit
658d74e0
authored
Jan 24, 2021
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update home fragment
parent
5113f6d3
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
53 additions
and
112 deletions
+53
-112
Info.kt
app/src/main/java/com/topjohnwu/magisk/core/Info.kt
+3
-7
HomeFragment.kt
...rc/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt
+11
-8
HomeViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt
+24
-45
TransitiveText.kt
...rc/main/java/com/topjohnwu/magisk/utils/TransitiveText.kt
+3
-4
fragment_home_md2.xml
app/src/main/res/layout/fragment_home_md2.xml
+2
-2
include_home_magisk.xml
app/src/main/res/layout/include_home_magisk.xml
+6
-42
include_home_manager.xml
app/src/main/res/layout/include_home_manager.xml
+4
-4
No files found.
app/src/main/java/com/topjohnwu/magisk/core/Info.kt
View file @
658d74e0
...
...
@@ -6,7 +6,6 @@ import com.topjohnwu.magisk.core.model.UpdateInfo
import
com.topjohnwu.magisk.core.utils.net.NetworkObserver
import
com.topjohnwu.magisk.ktx.get
import
com.topjohnwu.magisk.ktx.getProperty
import
com.topjohnwu.magisk.utils.CachedValue
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.ShellUtils.fastCmd
import
com.topjohnwu.superuser.internal.UiThreadHandler
...
...
@@ -18,10 +17,6 @@ val isRunningAsStub get() = Info.stub != null
object
Info
{
val
envRef
=
CachedValue
{
loadState
()
}
@JvmStatic
val
env
by
envRef
var
stub
:
DynAPK
.
Data
?
=
null
val
stubChk
:
DynAPK
.
Data
get
()
=
stub
as
DynAPK
.
Data
...
...
@@ -29,15 +24,16 @@ object Info {
var
remote
=
UpdateInfo
()
// Device state
var
crypto
=
""
@JvmStatic
val
env
by
lazy
{
loadState
()
}
@JvmField
var
isSAR
=
false
@JvmField
var
isAB
=
false
@JvmStatic
val
isFDE
get
()
=
crypto
==
"block"
@JvmField
var
ramdisk
=
false
@JvmField
var
hasGMS
=
true
@JvmField
var
isPixel
=
false
@JvmStatic
val
cryptoText
get
()=
crypto
.
capitalize
(
Locale
.
US
)
@JvmStatic
val
cryptoText
get
()
=
crypto
.
capitalize
(
Locale
.
US
)
@JvmField
val
isEmulator
=
getProperty
(
"ro.kernel.qemu"
,
"0"
)
==
"1"
var
crypto
=
""
val
isConnected
by
lazy
{
ObservableBoolean
(
false
).
also
{
field
->
...
...
app/src/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt
View file @
658d74e0
...
...
@@ -26,14 +26,14 @@ class HomeFragment : BaseUIFragment<HomeViewModel, FragmentHomeMd2Binding>() {
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
{
):
View
{
super
.
onCreateView
(
inflater
,
container
,
savedInstanceState
)
// Set barrier reference IDs in code, since resource IDs will be stripped in release mode
binding
.
homeMagiskWrapper
.
homeMagiskTitleBarrier
.
referencedIds
=
intArrayOf
(
R
.
id
.
home_magisk_button
,
R
.
id
.
home_magisk_title
,
R
.
id
.
home_magisk_icon
)
binding
.
homeMagiskWrapper
.
homeMagiskBarrier
.
referencedIds
=
intArrayOf
(
R
.
id
.
home_magisk_
latest_version
,
R
.
id
.
home_magisk_installed_version
)
intArrayOf
(
R
.
id
.
home_magisk_
installed_version
,
R
.
id
.
home_device_details_ramdisk
)
binding
.
homeManagerWrapper
.
homeManagerTitleBarrier
.
referencedIds
=
intArrayOf
(
R
.
id
.
home_manager_button
,
R
.
id
.
home_manager_title
,
R
.
id
.
home_manager_icon
)
...
...
@@ -46,11 +46,14 @@ class HomeFragment : BaseUIFragment<HomeViewModel, FragmentHomeMd2Binding>() {
menu
.
removeItem
(
R
.
id
.
action_reboot
)
}
override
fun
onOptionsItemSelected
(
item
:
MenuItem
)
=
when
(
item
.
itemId
)
{
R
.
id
.
action_settings
->
HomeFragmentDirections
.
actionHomeFragmentToSettingsFragment
()
.
navigate
()
R
.
id
.
action_reboot
->
RebootEvent
.
inflateMenu
(
activity
).
show
()
else
->
null
}
?.
let
{
true
}
?:
super
.
onOptionsItemSelected
(
item
)
override
fun
onOptionsItemSelected
(
item
:
MenuItem
):
Boolean
{
when
(
item
.
itemId
)
{
R
.
id
.
action_settings
->
HomeFragmentDirections
.
actionHomeFragmentToSettingsFragment
().
navigate
()
R
.
id
.
action_reboot
->
RebootEvent
.
inflateMenu
(
activity
).
show
()
else
->
return
super
.
onOptionsItemSelected
(
item
)
}
return
true
}
}
app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt
View file @
658d74e0
...
...
@@ -9,8 +9,6 @@ import com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.download.Subject
import
com.topjohnwu.magisk.core.download.Subject.Manager
import
com.topjohnwu.magisk.core.model.MagiskJson
import
com.topjohnwu.magisk.core.model.ManagerJson
import
com.topjohnwu.magisk.data.repository.NetworkService
import
com.topjohnwu.magisk.events.OpenInappLinkEvent
import
com.topjohnwu.magisk.events.SnackbarEvent
...
...
@@ -18,8 +16,7 @@ import com.topjohnwu.magisk.events.dialog.EnvFixDialog
import
com.topjohnwu.magisk.events.dialog.ManagerInstallDialog
import
com.topjohnwu.magisk.events.dialog.UninstallDialog
import
com.topjohnwu.magisk.ktx.await
import
com.topjohnwu.magisk.ktx.packageName
import
com.topjohnwu.magisk.ktx.res
import
com.topjohnwu.magisk.utils.asTransitive
import
com.topjohnwu.magisk.utils.set
import
com.topjohnwu.superuser.Shell
import
kotlinx.coroutines.launch
...
...
@@ -38,37 +35,35 @@ class HomeViewModel(
var
isNoticeVisible
=
Config
.
safetyNotice
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
noticeVisible
)
@get
:
Bindable
var
stateMagisk
=
MagiskState
.
LOADING
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
stateMagisk
,
BR
.
showUninstall
)
val
stateMagisk
=
when
{
!
Info
.
env
.
isActive
->
MagiskState
.
NOT_INSTALLED
Info
.
env
.
magiskVersionCode
<
BuildConfig
.
VERSION_CODE
->
MagiskState
.
OBSOLETE
else
->
MagiskState
.
UP_TO_DATE
}
@get
:
Bindable
var
stateManager
=
MagiskState
.
LOADING
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
stateManager
)
@get
:
Bindable
var
magiskRemoteVersion
=
R
.
string
.
loading
.
res
(
)
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
magiskRemoteVersion
)
val
magiskInstalledVersion
get
()
=
"${Info.env.magiskVersionString} (${Info.env.magiskVersionCode})"
val
magiskInstalledVersion
get
()
=
Info
.
env
.
run
{
if
(
isActive
)
"$magiskVersionString ($magiskVersionCode)"
.
asTransitive
(
)
else
R
.
string
.
not_available
.
asTransitive
()
}
@get
:
Bindable
var
managerRemoteVersion
=
R
.
string
.
loading
.
res
()
var
managerRemoteVersion
=
R
.
string
.
loading
.
asTransitive
()
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
managerRemoteVersion
)
val
managerInstalledVersion
=
Info
.
stub
?.
let
{
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE}) (${it.version})"
}
?:
"${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})"
val
statePackageName
=
packageName
@get
:
Bindable
var
stateManagerProgress
=
0
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
stateManagerProgress
)
@get
:
Bindable
val
showUninstall
get
()
=
Info
.
env
.
isActive
&&
state
!=
State
.
LOADING
@get
:
Bindable
val
showSafetyNet
get
()
=
Info
.
hasGMS
&&
isConnected
.
get
()
...
...
@@ -80,30 +75,25 @@ class HomeViewModel(
override
fun
refresh
()
=
viewModelScope
.
launch
{
state
=
State
.
LOADING
notifyPropertyChanged
(
BR
.
showSafetyNet
)
svc
.
fetchUpdate
()
?.
apply
{
state
=
State
.
LOADED
stateMagisk
=
when
{
!
Info
.
env
.
isActive
->
MagiskState
.
NOT_INSTALLED
magisk
.
isObsolete
->
MagiskState
.
OBSOLETE
else
->
MagiskState
.
UP_TO_DATE
}
stateManager
=
when
{
app
.
isObsolet
e
->
MagiskState
.
OBSOLETE
BuildConfig
.
VERSION_CODE
<
magisk
.
versionCod
e
->
MagiskState
.
OBSOLETE
else
->
MagiskState
.
UP_TO_DATE
}
magiskRemoteVersion
=
"${magisk.version} (${magisk.versionCode})"
managerRemoteVersion
=
"${
app.version} (${app.versionCode}) (${stub.versionCode})"
"${
magisk.version} (${magisk.versionCode}) (${stub.versionCode})"
.
asTransitive
()
launch
{
ensureEnv
()
}
}
?:
apply
{
state
=
State
.
LOADING_FAILED
}
notifyPropertyChanged
(
BR
.
showUninstall
)
notifyPropertyChanged
(
BR
.
showSafetyNet
)
}
?:
{
state
=
State
.
LOADING_FAILED
managerRemoteVersion
=
R
.
string
.
not_available
.
asTransitive
()
}()
}
val
showTest
=
false
...
...
@@ -115,9 +105,8 @@ class HomeViewModel(
}.
publish
()
fun
onProgressUpdate
(
progress
:
Float
,
subject
:
Subject
)
{
when
(
subject
)
{
is
Manager
->
stateManagerProgress
=
progress
.
times
(
100f
).
roundToInt
()
}
if
(
subject
is
Manager
)
stateManagerProgress
=
progress
.
times
(
100f
).
roundToInt
()
}
fun
onLinkPressed
(
link
:
String
)
=
OpenInappLinkEvent
(
link
).
publish
()
...
...
@@ -130,13 +119,8 @@ class HomeViewModel(
else
->
SnackbarEvent
(
R
.
string
.
no_connection
).
publish
()
}
fun
onMagiskPressed
()
=
when
(
state
)
{
State
.
LOADED
->
withExternalRW
{
HomeFragmentDirections
.
actionHomeFragmentToInstallFragment
().
publish
()
}
State
.
LOADING
->
SnackbarEvent
(
R
.
string
.
loading
).
publish
()
else
->
SnackbarEvent
(
R
.
string
.
no_connection
).
publish
()
}
fun
onMagiskPressed
()
=
HomeFragmentDirections
.
actionHomeFragmentToInstallFragment
().
publish
()
fun
onSafetyNetPressed
()
=
HomeFragmentDirections
.
actionHomeFragmentToSafetynetFragment
().
publish
()
...
...
@@ -160,9 +144,4 @@ class HomeViewModel(
}
}
private
val
MagiskJson
.
isObsolete
get
()
=
Info
.
env
.
isActive
&&
Info
.
env
.
magiskVersionCode
<
versionCode
private
val
ManagerJson
.
isObsolete
get
()
=
BuildConfig
.
VERSION_CODE
<
versionCode
}
app/src/main/java/com/topjohnwu/magisk/utils/TransitiveText.kt
View file @
658d74e0
...
...
@@ -4,7 +4,6 @@ import android.content.res.Resources
import
android.widget.TextView
import
androidx.databinding.BindingAdapter
import
androidx.databinding.InverseBindingAdapter
import
com.topjohnwu.magisk.ktx.get
sealed
class
TransitiveText
{
...
...
@@ -42,13 +41,13 @@ sealed class TransitiveText {
}
fun
Int
.
asTransitive
(
vararg
params
:
Any
)
=
TransitiveText
.
Res
(
this
,
*
params
)
fun
CharSequence
.
asTransitive
()
=
TransitiveText
.
String
(
this
)
fun
Int
.
asTransitive
(
vararg
params
:
Any
)
:
TransitiveText
=
TransitiveText
.
Res
(
this
,
*
params
)
fun
CharSequence
.
asTransitive
()
:
TransitiveText
=
TransitiveText
.
String
(
this
)
@BindingAdapter
(
"android:text"
)
fun
TextView
.
setText
(
text
:
TransitiveText
)
{
this
.
text
=
text
.
getText
(
get
()
)
this
.
text
=
text
.
getText
(
context
.
resources
)
}
@InverseBindingAdapter
(
attribute
=
"android:text"
,
event
=
"android:textAttrChanged"
)
...
...
app/src/main/res/layout/fragment_home_md2.xml
View file @
658d74e0
...
...
@@ -108,7 +108,7 @@
app:layout_constraintTop_toBottomOf=
"@+id/home_magisk_wrapper"
/>
<Space
gone=
"@{!viewModel.showSafetyNet && !
viewModel.showUninstall
}"
gone=
"@{!viewModel.showSafetyNet && !
Info.env.isActive
}"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/l1"
/>
...
...
@@ -128,7 +128,7 @@
<Button
style=
"@style/WidgetFoundation.Button.Outlined.Error"
gone
=
"@{!viewModel.showUninstall
}"
gone
Unless=
"@{Info.env.isActive
}"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/l1"
...
...
app/src/main/res/layout/include_home_magisk.xml
View file @
658d74e0
...
...
@@ -55,7 +55,6 @@
android:id=
"@+id/home_magisk_button"
style=
"@style/WidgetFoundation.Button"
invisible=
"@{viewModel.stateMagisk != MagiskState.OBSOLETE}"
android:enabled=
"@{viewModel.stateManager != MagiskState.OBSOLETE}"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:onClick=
"@{() -> viewModel.onMagiskPressed()}"
...
...
@@ -69,7 +68,6 @@
<Button
style=
"@style/WidgetFoundation.Button.Text"
invisible=
"@{viewModel.stateMagisk == MagiskState.OBSOLETE}"
android:enabled=
"@{viewModel.stateManager != MagiskState.OBSOLETE}"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:onClick=
"@{() -> viewModel.onMagiskPressed()}"
...
...
@@ -105,41 +103,24 @@
android:layout_height=
"wrap_content"
>
<LinearLayout
android:id=
"@+id/home_magisk_
latest
_version"
android:id=
"@+id/home_magisk_
installed
_version"
style=
"@style/W.Home.Item.Top"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<TextView
style=
"@style/W.Home.ItemContent"
android:text=
"@string/home_latest_version"
/>
<TextView
style=
"@style/W.Home.ItemContent.Right"
android:text=
"@{viewModel.loadFailed ? @string/not_available : viewModel.magiskRemoteVersion }"
tools:text=
"20.1 (12345)"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/home_magisk_installed_version"
style=
"@style/W.Home.Item"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/home_magisk_latest_version"
>
<TextView
style=
"@style/W.Home.ItemContent"
android:text=
"@string/home_installed_version"
/>
<TextView
style=
"@style/W.Home.ItemContent.Right"
android:text=
"@{
Info.env.isActive ? viewModel.magiskInstalledVersion : @string/not_available
}"
tools:text=
"2
0.1 (12345
)"
/>
android:text=
"@{
viewModel.magiskInstalledVersion
}"
tools:text=
"2
2.0 (22000
)"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/home_device_details_r
ecovery
"
android:id=
"@+id/home_device_details_r
amdisk
"
style=
"@style/W.Home.Item.Bottom"
app:layout_constraintStart_toStartOf=
"@+id/home_magisk_installed_version"
app:layout_constraintTop_toBottomOf=
"@+id/home_magisk_installed_version"
>
...
...
@@ -160,7 +141,7 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:barrierDirection=
"end"
tools:constraint_referenced_ids=
"home_magisk_
latest_version,home_magisk_installed_version
"
/>
tools:constraint_referenced_ids=
"home_magisk_
installed_version,home_device_details_ramdisk
"
/>
<LinearLayout
android:id=
"@+id/home_device_details_ab"
...
...
@@ -181,7 +162,7 @@
<LinearLayout
android:id=
"@+id/home_device_details_sar"
style=
"@style/W.Home.Item"
style=
"@style/W.Home.Item
.Bottom
"
app:layout_constraintStart_toStartOf=
"@+id/home_device_details_ab"
app:layout_constraintTop_toBottomOf=
"@+id/home_device_details_ab"
>
...
...
@@ -196,23 +177,6 @@
</LinearLayout>
<LinearLayout
android:id=
"@+id/home_device_details_crypto"
style=
"@style/W.Home.Item.Bottom"
app:layout_constraintStart_toStartOf=
"@+id/home_device_details_sar"
app:layout_constraintTop_toBottomOf=
"@+id/home_device_details_sar"
>
<TextView
style=
"@style/W.Home.ItemContent"
android:text=
"Crypto"
/>
<TextView
style=
"@style/W.Home.ItemContent.Right"
android:text=
"@{Info.cryptoText}"
tools:text=
"N/A"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
...
...
app/src/main/res/layout/include_home_manager.xml
View file @
658d74e0
...
...
@@ -115,8 +115,8 @@
<TextView
style=
"@style/W.Home.ItemContent.Right"
android:text=
"@{viewModel.
loadFailed ? @string/not_available : viewModel.
managerRemoteVersion}"
tools:text=
"
8.0.0 (123) (10
)"
/>
android:text=
"@{viewModel.managerRemoteVersion}"
tools:text=
"
22.0 (22000) (16
)"
/>
</LinearLayout>
...
...
@@ -133,7 +133,7 @@
<TextView
style=
"@style/W.Home.ItemContent.Right"
android:text=
"@{viewModel.managerInstalledVersion}"
tools:text=
"
8.0.0 (123) (10
)"
/>
tools:text=
"
22.0 (22000) (16
)"
/>
</LinearLayout>
...
...
@@ -150,7 +150,7 @@
<TextView
android:id=
"@+id/home_manager_extra_connection_value"
style=
"@style/W.Home.ItemContent.Right"
android:text=
"@{
viewModel.stateP
ackageName}"
android:text=
"@{
context.p
ackageName}"
tools:text=
"com.topjohnwu.magisk"
/>
</LinearLayout>
...
...
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