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
7abdac72
Commit
7abdac72
authored
May 09, 2019
by
Viktor De Pasquale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replaced log calls from magiskdb to repo
parent
90d85eaf
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
55 additions
and
50 deletions
+55
-50
DatabaseDefinition.kt
...topjohnwu/magisk/data/database/base/DatabaseDefinition.kt
+2
-5
LogRepository.kt
...ava/com/topjohnwu/magisk/data/repository/LogRepository.kt
+10
-0
MagiskLog.kt
.../main/java/com/topjohnwu/magisk/model/entity/MagiskLog.kt
+5
-1
LogRvItem.kt
...a/com/topjohnwu/magisk/model/entity/recycler/LogRvItem.kt
+8
-6
Flashing.kt
...rc/main/java/com/topjohnwu/magisk/model/flash/Flashing.kt
+1
-2
LogViewModel.kt
...src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt
+23
-33
XTime.kt
app/src/main/java/com/topjohnwu/magisk/utils/XTime.kt
+6
-3
No files found.
app/src/main/java/com/topjohnwu/magisk/data/database/base/DatabaseDefinition.kt
View file @
7abdac72
...
@@ -18,11 +18,8 @@ object DatabaseDefinition {
...
@@ -18,11 +18,8 @@ object DatabaseDefinition {
@AnyThread
@AnyThread
fun
MagiskQuery
.
query
()
=
query
.
su
()
fun
MagiskQuery
.
query
()
=
query
.
su
()
fun
String
.
suRaw
()
=
Single
.
just
(
Shell
.
su
(
this
))
fun
String
.
suRaw
()
=
Single
.
fromCallable
{
Shell
.
su
(
this
).
exec
().
out
}
.
map
{
it
.
exec
().
out
}
fun
String
.
su
()
=
suRaw
().
map
{
it
.
toMap
()
}
fun
String
.
su
()
=
suRaw
()
.
map
{
it
.
toMap
()
}
fun
List
<
String
>.
toMap
()
=
map
{
it
.
split
(
Regex
(
"\\|"
))
}
fun
List
<
String
>.
toMap
()
=
map
{
it
.
split
(
Regex
(
"\\|"
))
}
.
map
{
it
.
toMapInternal
()
}
.
map
{
it
.
toMapInternal
()
}
...
...
app/src/main/java/com/topjohnwu/magisk/data/repository/LogRepository.kt
View file @
7abdac72
package
com.topjohnwu.magisk.data.repository
package
com.topjohnwu.magisk.data.repository
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.Constants
import
com.topjohnwu.magisk.Constants
import
com.topjohnwu.magisk.data.database.LogDao
import
com.topjohnwu.magisk.data.database.LogDao
import
com.topjohnwu.magisk.data.database.base.suRaw
import
com.topjohnwu.magisk.data.database.base.suRaw
import
com.topjohnwu.magisk.model.entity.MagiskLog
import
com.topjohnwu.magisk.model.entity.MagiskLog
import
com.topjohnwu.magisk.model.entity.WrappedMagiskLog
import
com.topjohnwu.magisk.model.entity.WrappedMagiskLog
import
com.topjohnwu.magisk.utils.toSingle
import
com.topjohnwu.superuser.Shell
import
timber.log.Timber
import
timber.log.Timber
import
java.util.concurrent.TimeUnit
import
java.util.concurrent.TimeUnit
...
@@ -21,6 +24,13 @@ class LogRepository(
...
@@ -21,6 +24,13 @@ class LogRepository(
.
filter
{
it
.
isNotEmpty
()
}
.
filter
{
it
.
isNotEmpty
()
}
.
map
{
Timber
.
i
(
it
.
toString
());
it
}
.
map
{
Timber
.
i
(
it
.
toString
());
it
}
fun
clearLogs
()
=
logDao
.
deleteAll
()
fun
clearOutdated
()
=
logDao
.
deleteOutdated
()
fun
clearMagiskLogs
()
=
Shell
.
su
(
"echo -n > "
+
Const
.
MAGISK_LOG
)
.
toSingle
()
.
map
{
it
.
exec
()
}
private
fun
List
<
MagiskLog
>.
wrap
():
List
<
WrappedMagiskLog
>
{
private
fun
List
<
MagiskLog
>.
wrap
():
List
<
WrappedMagiskLog
>
{
val
day
=
TimeUnit
.
DAYS
.
toMillis
(
1
)
val
day
=
TimeUnit
.
DAYS
.
toMillis
(
1
)
var
currentDay
=
firstOrNull
()
?.
date
?.
time
?:
return
listOf
()
var
currentDay
=
firstOrNull
()
?.
date
?.
time
?:
return
listOf
()
...
...
app/src/main/java/com/topjohnwu/magisk/model/entity/MagiskLog.kt
View file @
7abdac72
package
com.topjohnwu.magisk.model.entity
package
com.topjohnwu.magisk.model.entity
import
com.topjohnwu.magisk.utils.timeFormatTime
import
com.topjohnwu.magisk.utils.toTime
import
java.util.*
import
java.util.*
data class
MagiskLog
(
data class
MagiskLog
(
...
@@ -11,7 +13,9 @@ data class MagiskLog(
...
@@ -11,7 +13,9 @@ data class MagiskLog(
val
command
:
String
,
val
command
:
String
,
val
action
:
Boolean
,
val
action
:
Boolean
,
val
date
:
Date
val
date
:
Date
)
)
{
val
timeString
=
date
.
time
.
toTime
(
timeFormatTime
)
}
data class
WrappedMagiskLog
(
data class
WrappedMagiskLog
(
val
time
:
Long
,
val
time
:
Long
,
...
...
app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/LogRvItem.kt
View file @
7abdac72
package
com.topjohnwu.magisk.model.entity.recycler
package
com.topjohnwu.magisk.model.entity.recycler
import
androidx.databinding.ObservableList
import
com.skoumal.teanity.databinding.ComparableRvItem
import
com.skoumal.teanity.databinding.ComparableRvItem
import
com.skoumal.teanity.util.DiffObservableList
import
com.skoumal.teanity.util.DiffObservableList
import
com.skoumal.teanity.util.KObservableField
import
com.skoumal.teanity.util.KObservableField
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.model.entity.SuLogEntry
import
com.topjohnwu.magisk.model.entity.MagiskLog
import
com.topjohnwu.magisk.model.entity.WrappedMagiskLog
import
com.topjohnwu.magisk.utils.timeFormatMedium
import
com.topjohnwu.magisk.utils.toTime
import
com.topjohnwu.magisk.utils.toggle
import
com.topjohnwu.magisk.utils.toggle
class
LogRvItem
:
ComparableRvItem
<
LogRvItem
>()
{
class
LogRvItem
:
ComparableRvItem
<
LogRvItem
>()
{
...
@@ -25,12 +27,12 @@ class LogRvItem : ComparableRvItem<LogRvItem>() {
...
@@ -25,12 +27,12 @@ class LogRvItem : ComparableRvItem<LogRvItem>() {
}
}
class
LogItemRvItem
(
class
LogItemRvItem
(
val
items
:
ObservableList
<
ComparableRvItem
<*>>
item
:
WrappedMagiskLog
)
:
ComparableRvItem
<
LogItemRvItem
>()
{
)
:
ComparableRvItem
<
LogItemRvItem
>()
{
override
val
layoutRes
:
Int
=
R
.
layout
.
item_superuser_log
override
val
layoutRes
:
Int
=
R
.
layout
.
item_superuser_log
val
date
=
item
s
.
filterIsInstance
<
LogItemEntryRvItem
>().
firstOrNull
(
)
val
date
=
item
.
time
.
toTime
(
timeFormatMedium
)
?.
item
?.
dateString
.
orEmpty
()
val
items
:
List
<
ComparableRvItem
<*>>
=
item
.
items
.
map
{
LogItemEntryRvItem
(
it
)
}
val
isExpanded
=
KObservableField
(
false
)
val
isExpanded
=
KObservableField
(
false
)
fun
toggle
()
=
isExpanded
.
toggle
()
fun
toggle
()
=
isExpanded
.
toggle
()
...
@@ -41,7 +43,7 @@ class LogItemRvItem(
...
@@ -41,7 +43,7 @@ class LogItemRvItem(
override
fun
itemSameAs
(
other
:
LogItemRvItem
):
Boolean
=
date
==
other
.
date
override
fun
itemSameAs
(
other
:
LogItemRvItem
):
Boolean
=
date
==
other
.
date
}
}
class
LogItemEntryRvItem
(
val
item
:
SuLogEntry
)
:
ComparableRvItem
<
LogItemEntryRvItem
>()
{
class
LogItemEntryRvItem
(
val
item
:
MagiskLog
)
:
ComparableRvItem
<
LogItemEntryRvItem
>()
{
override
val
layoutRes
:
Int
=
R
.
layout
.
item_superuser_log_entry
override
val
layoutRes
:
Int
=
R
.
layout
.
item_superuser_log_entry
val
isExpanded
=
KObservableField
(
false
)
val
isExpanded
=
KObservableField
(
false
)
...
...
app/src/main/java/com/topjohnwu/magisk/model/flash/Flashing.kt
View file @
7abdac72
...
@@ -4,7 +4,6 @@ import android.content.Context
...
@@ -4,7 +4,6 @@ import android.content.Context
import
android.net.Uri
import
android.net.Uri
import
androidx.core.os.postDelayed
import
androidx.core.os.postDelayed
import
com.topjohnwu.magisk.tasks.FlashZip
import
com.topjohnwu.magisk.tasks.FlashZip
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.utils.inject
import
com.topjohnwu.magisk.utils.inject
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
com.topjohnwu.superuser.internal.UiThreadHandler
...
@@ -33,7 +32,7 @@ sealed class Flashing(
...
@@ -33,7 +32,7 @@ sealed class Flashing(
override
fun
onResult
(
success
:
Boolean
)
{
override
fun
onResult
(
success
:
Boolean
)
{
if
(
success
)
{
if
(
success
)
{
Utils
.
loadModules
()
//
Utils.loadModules()
}
}
super
.
onResult
(
success
)
super
.
onResult
(
success
)
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt
View file @
7abdac72
package
com.topjohnwu.magisk.ui.log
package
com.topjohnwu.magisk.ui.log
import
android.content.res.Resources
import
android.content.res.Resources
import
androidx.databinding.ObservableArrayList
import
com.skoumal.teanity.databinding.ComparableRvItem
import
com.skoumal.teanity.databinding.ComparableRvItem
import
com.skoumal.teanity.extensions.addOnPropertyChangedCallback
import
com.skoumal.teanity.extensions.addOnPropertyChangedCallback
import
com.skoumal.teanity.extensions.doOnSu
ccess
Ui
import
com.skoumal.teanity.extensions.doOnSu
bscribe
Ui
import
com.skoumal.teanity.extensions.subscribeK
import
com.skoumal.teanity.extensions.subscribeK
import
com.skoumal.teanity.util.DiffObservableList
import
com.skoumal.teanity.util.DiffObservableList
import
com.skoumal.teanity.util.KObservableField
import
com.skoumal.teanity.util.KObservableField
...
@@ -12,14 +11,14 @@ import com.skoumal.teanity.viewevents.SnackbarEvent
...
@@ -12,14 +11,14 @@ import com.skoumal.teanity.viewevents.SnackbarEvent
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.data.database.MagiskDB
import
com.topjohnwu.magisk.data.repository.LogRepository
import
com.topjohnwu.magisk.model.entity.recycler.*
import
com.topjohnwu.magisk.model.entity.recycler.ConsoleRvItem
import
com.topjohnwu.magisk.model.entity.recycler.LogItemRvItem
import
com.topjohnwu.magisk.model.entity.recycler.LogRvItem
import
com.topjohnwu.magisk.model.entity.recycler.MagiskLogRvItem
import
com.topjohnwu.magisk.model.events.PageChangedEvent
import
com.topjohnwu.magisk.model.events.PageChangedEvent
import
com.topjohnwu.magisk.ui.base.MagiskViewModel
import
com.topjohnwu.magisk.ui.base.MagiskViewModel
import
com.topjohnwu.magisk.utils.toSingle
import
com.topjohnwu.magisk.utils.zip
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Single
import
me.tatarka.bindingcollectionadapter2.BindingViewPagerAdapter
import
me.tatarka.bindingcollectionadapter2.BindingViewPagerAdapter
import
me.tatarka.bindingcollectionadapter2.OnItemBind
import
me.tatarka.bindingcollectionadapter2.OnItemBind
import
java.io.File
import
java.io.File
...
@@ -28,7 +27,7 @@ import java.util.*
...
@@ -28,7 +27,7 @@ import java.util.*
class
LogViewModel
(
class
LogViewModel
(
private
val
resources
:
Resources
,
private
val
resources
:
Resources
,
private
val
database
:
MagiskDB
private
val
logRepo
:
LogRepository
)
:
MagiskViewModel
(),
BindingViewPagerAdapter
.
PageTitles
<
ComparableRvItem
<*>>
{
)
:
MagiskViewModel
(),
BindingViewPagerAdapter
.
PageTitles
<
ComparableRvItem
<*>>
{
val
items
=
DiffObservableList
(
ComparableRvItem
.
callback
)
val
items
=
DiffObservableList
(
ComparableRvItem
.
callback
)
...
@@ -58,9 +57,10 @@ class LogViewModel(
...
@@ -58,9 +57,10 @@ class LogViewModel(
else
->
""
else
->
""
}
}
fun
refresh
()
=
zip
(
updateLogs
(),
updateMagiskLog
())
{
_
,
_
->
true
}
fun
refresh
()
{
.
subscribeK
()
fetchLogs
().
subscribeK
{
logItem
.
update
(
it
)
}
.
add
()
fetchMagiskLog
().
subscribeK
{
magiskLogItem
.
update
(
it
)
}
}
fun
saveLog
()
{
fun
saveLog
()
{
val
now
=
Calendar
.
getInstance
()
val
now
=
Calendar
.
getInstance
()
...
@@ -88,35 +88,25 @@ class LogViewModel(
...
@@ -88,35 +88,25 @@ class LogViewModel(
else
->
Unit
else
->
Unit
}
}
private
fun
clearLogs
(
callback
:
()
->
Unit
)
{
private
fun
clearLogs
(
callback
:
()
->
Unit
)
=
logRepo
.
clearLogs
()
Single
.
fromCallable
{
database
.
clearLogs
()
}
.
doOnSubscribeUi
(
callback
)
.
subscribeK
{
.
subscribeK
{
SnackbarEvent
(
R
.
string
.
logs_cleared
).
publish
()
}
SnackbarEvent
(
R
.
string
.
logs_cleared
).
publish
()
.
add
()
callback
()
}
.
add
()
}
private
fun
clearMagiskLogs
(
callback
:
()
->
Unit
)
{
private
fun
clearMagiskLogs
(
callback
:
()
->
Unit
)
=
logRepo
.
clearMagiskLogs
()
Shell
.
su
(
"echo -n > "
+
Const
.
MAGISK_LOG
).
submit
{
.
ignoreElement
()
SnackbarEvent
(
R
.
string
.
logs_cleared
).
publish
()
.
doOnComplete
(
callback
)
callback
()
.
subscribeK
{
SnackbarEvent
(
R
.
string
.
logs_cleared
).
publish
()
}
}
.
add
()
}
private
fun
updateLogs
()
=
Single
.
fromCallable
{
database
.
logs
}
private
fun
fetchLogs
()
=
logRepo
.
fetchLogs
()
.
flattenAsFlowable
{
it
}
.
flattenAsFlowable
{
it
}
.
map
{
it
.
map
{
LogItemEntryRvItem
(
it
)
}
}
.
map
{
LogItemRvItem
(
it
)
}
.
map
{
LogItemRvItem
(
ObservableArrayList
<
ComparableRvItem
<*>>().
apply
{
addAll
(
it
)
})
}
.
toList
()
.
toList
()
.
doOnSuccessUi
{
logItem
.
update
(
it
)
}
private
fun
updateMagiskLog
()
=
Shell
.
su
(
"tail -n 5000 ${Const.MAGISK_LOG}"
).
toSingle
()
private
fun
fetchMagiskLog
()
=
logRepo
.
fetchMagiskLogs
()
.
map
{
it
.
exec
()
}
.
map
{
it
.
out
}
.
flattenAsFlowable
{
it
}
.
flattenAsFlowable
{
it
}
.
map
{
ConsoleRvItem
(
it
)
}
.
map
{
ConsoleRvItem
(
it
)
}
.
toList
()
.
toList
()
.
doOnSuccessUi
{
magiskLogItem
.
update
(
it
)
}
}
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/utils/XTime.kt
View file @
7abdac72
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.utils
import
java.text.DateFormat
import
java.text.ParseException
import
java.text.ParseException
import
java.text.SimpleDateFormat
import
java.text.SimpleDateFormat
import
java.util.*
import
java.util.*
val
now
get
()
=
System
.
currentTimeMillis
()
val
now
get
()
=
System
.
currentTimeMillis
()
fun
Long
.
toTime
(
format
:
Simple
DateFormat
)
=
format
.
format
(
this
).
orEmpty
()
fun
Long
.
toTime
(
format
:
DateFormat
)
=
format
.
format
(
this
).
orEmpty
()
fun
String
.
toTime
(
format
:
Simple
DateFormat
)
=
try
{
fun
String
.
toTime
(
format
:
DateFormat
)
=
try
{
format
.
parse
(
this
)
?.
time
?:
-
1
format
.
parse
(
this
)
?.
time
?:
-
1
}
catch
(
e
:
ParseException
)
{
}
catch
(
e
:
ParseException
)
{
-
1L
-
1L
...
@@ -15,4 +16,6 @@ fun String.toTime(format: SimpleDateFormat) = try {
...
@@ -15,4 +16,6 @@ fun String.toTime(format: SimpleDateFormat) = try {
private
val
locale
get
()
=
Locale
.
getDefault
()
private
val
locale
get
()
=
Locale
.
getDefault
()
val
timeFormatFull
by
lazy
{
SimpleDateFormat
(
"yyyy/MM/dd_HH:mm:ss"
,
locale
)
}
val
timeFormatFull
by
lazy
{
SimpleDateFormat
(
"yyyy/MM/dd_HH:mm:ss"
,
locale
)
}
val
timeFormatStandard
by
lazy
{
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
,
locale
)
}
val
timeFormatStandard
by
lazy
{
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
,
locale
)
}
\ No newline at end of file
val
timeFormatMedium
by
lazy
{
DateFormat
.
getDateInstance
(
DateFormat
.
MEDIUM
,
LocaleManager
.
locale
)
}
val
timeFormatTime
by
lazy
{
SimpleDateFormat
(
"h:mm a"
,
LocaleManager
.
locale
)
}
\ No newline at end of file
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