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
da9c6f6e
Commit
da9c6f6e
authored
Dec 27, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Switch to WorkManager
parent
58ba0b0b
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
114 additions
and
59 deletions
+114
-59
build.gradle
app/build.gradle
+1
-0
AndroidManifest.xml
app/src/full/AndroidManifest.xml
+0
-4
g.java
app/src/full/java/a/g.java
+15
-0
k.java
app/src/full/java/a/k.java
+0
-7
w.java
app/src/full/java/a/w.java
+35
-0
ClassMap.java
app/src/full/java/com/topjohnwu/magisk/ClassMap.java
+2
-2
SplashActivity.java
app/src/full/java/com/topjohnwu/magisk/SplashActivity.java
+3
-2
SettingsFragment.java
...java/com/topjohnwu/magisk/fragments/SettingsFragment.java
+1
-1
DelegateWorker.java
...ll/java/com/topjohnwu/magisk/services/DelegateWorker.java
+9
-0
UpdateCheckService.java
...ava/com/topjohnwu/magisk/services/UpdateCheckService.java
+14
-17
AppUtils.java
app/src/full/java/com/topjohnwu/magisk/utils/AppUtils.java
+20
-19
Const.java
core/src/main/java/com/topjohnwu/core/Const.java
+1
-0
CheckUpdates.java
.../src/main/java/com/topjohnwu/core/tasks/CheckUpdates.java
+13
-7
No files found.
app/build.gradle
View file @
da9c6f6e
...
...
@@ -81,6 +81,7 @@ dependencies {
fullImplementation
"androidx.recyclerview:recyclerview:${rootProject.ext.androidXVersion}"
fullImplementation
"androidx.cardview:cardview:${rootProject.ext.androidXVersion}"
fullImplementation
"com.google.android.material:material:${rootProject.ext.androidXVersion}"
fullImplementation
'android.arch.work:work-runtime:1.0.0-beta01'
fullImplementation
'com.github.topjohnwu:libsu:2.1.2'
fullImplementation
'org.kamranzafar:jtar:2.3'
fullImplementation
'ru.noties:markwon:2.0.1'
...
...
app/src/full/AndroidManifest.xml
View file @
da9c6f6e
...
...
@@ -75,10 +75,6 @@
android:name=
"a.j"
android:exported=
"true"
android:permission=
"android.permission.BIND_JOB_SERVICE"
/>
<service
android:name=
"a.k"
android:exported=
"true"
android:permission=
"android.permission.BIND_JOB_SERVICE"
/>
<!-- Hardcode GMS version -->
<meta-data
...
...
app/src/full/java/a/g.java
0 → 100644
View file @
da9c6f6e
package
a
;
import
android.content.Context
;
import
com.topjohnwu.magisk.services.UpdateCheckService
;
import
androidx.annotation.NonNull
;
import
androidx.work.WorkerParameters
;
public
class
g
extends
w
<
UpdateCheckService
>
{
/* Stub */
public
g
(
@NonNull
Context
context
,
@NonNull
WorkerParameters
workerParams
)
{
super
(
context
,
workerParams
);
}
}
app/src/full/java/a/k.java
deleted
100644 → 0
View file @
58ba0b0b
package
a
;
import
com.topjohnwu.magisk.services.UpdateCheckService
;
public
class
k
extends
UpdateCheckService
{
/* stub */
}
app/src/full/java/a/w.java
0 → 100644
View file @
da9c6f6e
package
a
;
import
android.content.Context
;
import
com.topjohnwu.magisk.services.DelegateWorker
;
import
java.lang.reflect.ParameterizedType
;
import
androidx.annotation.NonNull
;
import
androidx.work.Worker
;
import
androidx.work.WorkerParameters
;
public
class
w
<
T
extends
DelegateWorker
>
extends
Worker
{
/* Wrapper class to workaround Proguard -keep class * extends Worker */
private
T
base
;
@SuppressWarnings
(
"unchecked"
)
w
(
@NonNull
Context
context
,
@NonNull
WorkerParameters
workerParams
)
{
super
(
context
,
workerParams
);
try
{
base
=
((
Class
<
T
>)
((
ParameterizedType
)
getClass
().
getGenericSuperclass
())
.
getActualTypeArguments
()[
0
]).
newInstance
();
}
catch
(
IllegalAccessException
|
InstantiationException
ignored
)
{}
}
@NonNull
@Override
public
Result
doWork
()
{
if
(
base
==
null
)
return
Result
.
failure
();
return
base
.
doWork
();
}
}
app/src/full/java/com/topjohnwu/magisk/ClassMap.java
View file @
da9c6f6e
...
...
@@ -20,15 +20,15 @@ public class ClassMap {
classMap
.
put
(
AboutActivity
.
class
,
a
.
d
.
class
);
classMap
.
put
(
DonationActivity
.
class
,
a
.
e
.
class
);
classMap
.
put
(
FlashActivity
.
class
,
a
.
f
.
class
);
classMap
.
put
(
UpdateCheckService
.
class
,
a
.
g
.
class
);
classMap
.
put
(
GeneralReceiver
.
class
,
a
.
h
.
class
);
classMap
.
put
(
ShortcutReceiver
.
class
,
a
.
i
.
class
);
classMap
.
put
(
OnBootService
.
class
,
a
.
j
.
class
);
classMap
.
put
(
UpdateCheckService
.
class
,
a
.
k
.
class
);
classMap
.
put
(
AboutCardRow
.
class
,
a
.
l
.
class
);
classMap
.
put
(
SuRequestActivity
.
class
,
a
.
m
.
class
);
}
public
static
Class
get
(
Class
c
)
{
public
static
<
T
>
Class
<
T
>
get
(
Class
c
)
{
return
classMap
.
get
(
c
);
}
}
app/src/full/java/com/topjohnwu/magisk/SplashActivity.java
View file @
da9c6f6e
...
...
@@ -42,8 +42,6 @@ public class SplashActivity extends BaseActivity {
// Magisk working as expected
if
(
Shell
.
rootAccess
()
&&
Data
.
magiskVersionCode
>
0
)
{
// Update check service
AppUtils
.
setupUpdateCheck
();
// Load modules
Utils
.
loadModules
();
}
...
...
@@ -53,6 +51,9 @@ public class SplashActivity extends BaseActivity {
// Create notification channel on Android O
Notifications
.
setup
(
this
);
// Schedule periodic update checks
AppUtils
.
scheduleUpdateCheck
();
// Setup shortcuts
sendBroadcast
(
new
Intent
(
this
,
ClassMap
.
get
(
ShortcutReceiver
.
class
)));
...
...
app/src/full/java/com/topjohnwu/magisk/fragments/SettingsFragment.java
View file @
da9c6f6e
...
...
@@ -252,7 +252,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
CheckUpdates
.
check
();
break
;
case
Const
.
Key
.
CHECK_UPDATES
:
AppUtils
.
s
etup
UpdateCheck
();
AppUtils
.
s
chedule
UpdateCheck
();
break
;
}
Data
.
loadConfig
();
...
...
app/src/full/java/com/topjohnwu/magisk/services/DelegateWorker.java
0 → 100644
View file @
da9c6f6e
package
com
.
topjohnwu
.
magisk
.
services
;
import
androidx.annotation.NonNull
;
import
androidx.work.ListenableWorker
;
public
abstract
class
DelegateWorker
{
@NonNull
public
abstract
ListenableWorker
.
Result
doWork
();
}
app/src/full/java/com/topjohnwu/magisk/services/UpdateCheckService.java
View file @
da9c6f6e
package
com
.
topjohnwu
.
magisk
.
services
;
import
android.app.job.JobParameters
;
import
android.app.job.JobService
;
import
com.topjohnwu.core.Data
;
import
com.topjohnwu.core.tasks.CheckUpdates
;
import
com.topjohnwu.magisk.BuildConfig
;
import
com.topjohnwu.magisk.components.Notifications
;
import
com.topjohnwu.superuser.Shell
;
public
class
UpdateCheckService
extends
JobService
{
import
androidx.annotation.NonNull
;
import
androidx.work.ListenableWorker
;
public
class
UpdateCheckService
extends
DelegateWorker
{
@NonNull
@Override
public
boolean
onStartJob
(
JobParameters
params
)
{
public
ListenableWorker
.
Result
doWork
(
)
{
Shell
.
getShell
();
CheckUpdates
.
check
(()
->
{
CheckUpdates
.
checkNow
(
this
::
onCheckDone
);
return
ListenableWorker
.
Result
.
success
();
}
private
void
onCheckDone
()
{
if
(
BuildConfig
.
VERSION_CODE
<
Data
.
remoteManagerVersionCode
)
{
Notifications
.
managerUpdate
();
}
else
if
(
Data
.
magiskVersionCode
<
Data
.
remoteMagiskVersionCode
)
{
Notifications
.
magiskUpdate
();
}
jobFinished
(
params
,
false
);
});
return
true
;
}
@Override
public
boolean
onStopJob
(
JobParameters
params
)
{
return
true
;
}
}
app/src/full/java/com/topjohnwu/magisk/utils/AppUtils.java
View file @
da9c6f6e
package
com
.
topjohnwu
.
magisk
.
utils
;
import
android.app.job.JobInfo
;
import
android.app.job.JobScheduler
;
import
android.content.ComponentName
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.net.Uri
;
...
...
@@ -15,25 +12,29 @@ import com.topjohnwu.magisk.ClassMap;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.services.UpdateCheckService
;
import
java.util.concurrent.TimeUnit
;
import
androidx.work.Constraints
;
import
androidx.work.ExistingPeriodicWorkPolicy
;
import
androidx.work.NetworkType
;
import
androidx.work.PeriodicWorkRequest
;
import
androidx.work.WorkManager
;
public
class
AppUtils
{
public
static
void
setupUpdateCheck
()
{
App
app
=
App
.
self
;
JobScheduler
scheduler
=
(
JobScheduler
)
app
.
getSystemService
(
Context
.
JOB_SCHEDULER_SERVICE
);
if
(
app
.
prefs
.
getBoolean
(
Const
.
Key
.
CHECK_UPDATES
,
true
))
{
if
(
scheduler
.
getAllPendingJobs
().
isEmpty
()
||
Const
.
UPDATE_SERVICE_VER
>
app
.
prefs
.
getInt
(
Const
.
Key
.
UPDATE_SERVICE_VER
,
-
1
))
{
ComponentName
service
=
new
ComponentName
(
app
,
ClassMap
.
get
(
UpdateCheckService
.
class
));
JobInfo
info
=
new
JobInfo
.
Builder
(
Const
.
ID
.
UPDATE_SERVICE_ID
,
service
)
.
setRequiredNetworkType
(
JobInfo
.
NETWORK_TYPE_ANY
)
.
setPersisted
(
true
)
.
setPeriodic
(
8
*
60
*
60
*
1000
)
public
static
void
scheduleUpdateCheck
()
{
if
(
App
.
self
.
prefs
.
getBoolean
(
Const
.
Key
.
CHECK_UPDATES
,
true
))
{
Constraints
constraints
=
new
Constraints
.
Builder
()
.
setRequiredNetworkType
(
NetworkType
.
CONNECTED
)
.
build
();
scheduler
.
schedule
(
info
);
}
PeriodicWorkRequest
request
=
new
PeriodicWorkRequest
.
Builder
(
ClassMap
.
get
(
UpdateCheckService
.
class
),
12
,
TimeUnit
.
HOURS
)
.
setConstraints
(
constraints
)
.
build
();
WorkManager
.
getInstance
().
enqueueUniquePeriodicWork
(
Const
.
ID
.
CHECK_MAGISK_UPDATE_WORKER_ID
,
ExistingPeriodicWorkPolicy
.
REPLACE
,
request
);
}
else
{
scheduler
.
cancel
(
Const
.
UPDATE_SERVICE_VER
);
WorkManager
.
getInstance
().
cancelUniqueWork
(
Const
.
ID
.
CHECK_MAGISK_UPDATE_WORKER_ID
);
}
}
...
...
core/src/main/java/com/topjohnwu/core/Const.java
View file @
da9c6f6e
...
...
@@ -62,6 +62,7 @@ public class Const {
public
static
final
int
HIDE_MANAGER_NOTIFICATION_ID
=
8
;
public
static
final
String
UPDATE_NOTIFICATION_CHANNEL
=
"update"
;
public
static
final
String
PROGRESS_NOTIFICATION_CHANNEL
=
"progress"
;
public
static
final
String
CHECK_MAGISK_UPDATE_WORKER_ID
=
"magisk_update"
;
}
public
static
class
Url
{
...
...
core/src/main/java/com/topjohnwu/core/tasks/CheckUpdates.java
View file @
da9c6f6e
...
...
@@ -5,6 +5,7 @@ import com.topjohnwu.core.Const;
import
com.topjohnwu.core.Data
;
import
com.topjohnwu.core.utils.Topic
;
import
com.topjohnwu.net.Networking
;
import
com.topjohnwu.net.Request
;
import
com.topjohnwu.net.ResponseListener
;
import
org.json.JSONException
;
...
...
@@ -40,26 +41,31 @@ public class CheckUpdates {
}
}
p
ublic
static
void
check
(
Runnable
cb
)
{
p
rivate
static
Request
getRequest
(
)
{
String
url
;
switch
(
Data
.
updateChannel
)
{
case
Const
.
Value
.
STABLE_CHANNEL
:
url
=
Const
.
Url
.
STABLE_URL
;
break
;
case
Const
.
Value
.
BETA_CHANNEL
:
url
=
Const
.
Url
.
BETA_URL
;
break
;
case
Const
.
Value
.
CUSTOM_CHANNEL
:
url
=
App
.
self
.
prefs
.
getString
(
Const
.
Key
.
CUSTOM_CHANNEL
,
""
);
break
;
case
Const
.
Value
.
STABLE_CHANNEL
:
default
:
return
;
url
=
Const
.
Url
.
STABLE_URL
;
break
;
}
Networking
.
get
(
url
).
getAsJSONObject
(
new
UpdateListener
(
cb
)
);
return
Networking
.
get
(
url
);
}
public
static
void
check
()
{
check
(
null
);
getRequest
().
getAsJSONObject
(
new
UpdateListener
(
null
));
}
public
static
void
checkNow
(
Runnable
cb
)
{
JSONObject
json
=
getRequest
().
execForJSONObject
().
getResult
();
if
(
json
!=
null
)
new
UpdateListener
(
cb
).
onResponse
(
json
);
}
private
static
class
UpdateListener
implements
ResponseListener
<
JSONObject
>
{
...
...
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