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
3a74729e
Commit
3a74729e
authored
Nov 17, 2017
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add saving logs feature for installation
parent
49c672ac
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
154 additions
and
112 deletions
+154
-112
FlashActivity.java
app/src/main/java/com/topjohnwu/magisk/FlashActivity.java
+53
-34
MagiskLogFragment.java
...src/main/java/com/topjohnwu/magisk/MagiskLogFragment.java
+0
-1
FlashZip.java
app/src/main/java/com/topjohnwu/magisk/asyncs/FlashZip.java
+24
-18
InstallMagisk.java
.../main/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java
+37
-29
CallbackList.java
...ain/java/com/topjohnwu/magisk/container/CallbackList.java
+2
-2
activity_flash.xml
app/src/main/res/layout/activity_flash.xml
+8
-0
menu_log.xml
app/src/main/res/menu/menu_log.xml
+1
-1
strings.xml
app/src/main/res/values-ar/strings.xml
+0
-1
strings.xml
app/src/main/res/values-cs/strings.xml
+1
-1
strings.xml
app/src/main/res/values-de/strings.xml
+1
-1
strings.xml
app/src/main/res/values-el/strings.xml
+1
-1
strings.xml
app/src/main/res/values-es/strings.xml
+1
-1
strings.xml
app/src/main/res/values-et/strings.xml
+1
-1
strings.xml
app/src/main/res/values-fr/strings.xml
+1
-1
strings.xml
app/src/main/res/values-hr/strings.xml
+1
-1
strings.xml
app/src/main/res/values-it/strings.xml
+1
-1
strings.xml
app/src/main/res/values-ja/strings.xml
+1
-1
strings.xml
app/src/main/res/values-ko/strings.xml
+1
-1
strings.xml
app/src/main/res/values-nl/strings.xml
+1
-1
strings.xml
app/src/main/res/values-pl/strings.xml
+1
-1
strings.xml
app/src/main/res/values-pt-rBR/strings.xml
+1
-1
strings.xml
app/src/main/res/values-pt-rPT/strings.xml
+7
-4
strings.xml
app/src/main/res/values-ro/strings.xml
+1
-1
strings.xml
app/src/main/res/values-ru/strings.xml
+1
-1
strings.xml
app/src/main/res/values-sv/strings.xml
+1
-1
strings.xml
app/src/main/res/values-tr/strings.xml
+1
-1
strings.xml
app/src/main/res/values-uk/strings.xml
+1
-1
strings.xml
app/src/main/res/values-vi/strings.xml
+1
-1
strings.xml
app/src/main/res/values-zh-rCN/strings.xml
+1
-1
strings.xml
app/src/main/res/values-zh-rTW/strings.xml
+1
-1
strings.xml
app/src/main/res/values/strings.xml
+1
-1
No files found.
app/src/main/java/com/topjohnwu/magisk/FlashActivity.java
View file @
3a74729e
...
...
@@ -11,6 +11,7 @@ import android.widget.Button;
import
android.widget.LinearLayout
;
import
android.widget.ScrollView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
com.topjohnwu.magisk.asyncs.FlashZip
;
import
com.topjohnwu.magisk.asyncs.InstallMagisk
;
...
...
@@ -19,6 +20,14 @@ import com.topjohnwu.magisk.container.CallbackList;
import
com.topjohnwu.magisk.utils.Const
;
import
com.topjohnwu.magisk.utils.Shell
;
import
java.io.File
;
import
java.io.FileWriter
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.List
;
import
java.util.Locale
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
butterknife.OnClick
;
...
...
@@ -27,32 +36,50 @@ public class FlashActivity extends Activity {
@BindView
(
R
.
id
.
toolbar
)
Toolbar
toolbar
;
@BindView
(
R
.
id
.
txtLog
)
TextView
flashLogs
;
@BindView
(
R
.
id
.
button_panel
)
LinearLayout
buttonPanel
;
@BindView
(
R
.
id
.
reboot
)
Button
reboot
;
@BindView
(
R
.
id
.
button_panel
)
public
LinearLayout
buttonPanel
;
@BindView
(
R
.
id
.
reboot
)
public
Button
reboot
;
@BindView
(
R
.
id
.
scrollView
)
ScrollView
sv
;
private
List
<
String
>
logs
;
@OnClick
(
R
.
id
.
no_thanks
)
public
void
dismiss
()
{
void
dismiss
()
{
finish
();
}
@OnClick
(
R
.
id
.
reboot
)
public
void
reboot
()
{
void
reboot
()
{
Shell
.
su_raw
(
"reboot"
);
}
@OnClick
(
R
.
id
.
save_logs
)
void
saveLogs
()
{
Calendar
now
=
Calendar
.
getInstance
();
String
filename
=
String
.
format
(
Locale
.
US
,
"install_log_%04d%02d%02d_%02d:%02d:%02d.log"
,
now
.
get
(
Calendar
.
YEAR
),
now
.
get
(
Calendar
.
MONTH
)
+
1
,
now
.
get
(
Calendar
.
DAY_OF_MONTH
),
now
.
get
(
Calendar
.
HOUR_OF_DAY
),
now
.
get
(
Calendar
.
MINUTE
),
now
.
get
(
Calendar
.
SECOND
));
File
logFile
=
new
File
(
Const
.
EXTERNAL_PATH
+
"/logs"
,
filename
);
logFile
.
getParentFile
().
mkdirs
();
try
(
FileWriter
writer
=
new
FileWriter
(
logFile
))
{
for
(
String
s
:
logs
)
{
writer
.
write
(
s
);
writer
.
write
(
'\n'
);
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
;
}
MagiskManager
.
toast
(
logFile
.
getPath
(),
Toast
.
LENGTH_LONG
);
}
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_flash
);
ButterKnife
.
bind
(
this
);
CallbackList
<
String
>
rootShellOutput
=
new
CallbackList
<
String
>()
{
@Override
public
synchronized
void
onAddElement
()
{
flashLogs
.
setText
(
TextUtils
.
join
(
"\n"
,
this
));
sv
.
postDelayed
(()
->
sv
.
fullScroll
(
ScrollView
.
FOCUS_DOWN
),
10
);
}
};
setSupportActionBar
(
toolbar
);
ActionBar
ab
=
getSupportActionBar
();
if
(
ab
!=
null
)
{
...
...
@@ -63,6 +90,16 @@ public class FlashActivity extends Activity {
if
(!
Shell
.
rootAccess
())
reboot
.
setVisibility
(
View
.
GONE
);
logs
=
new
ArrayList
<>();
List
<
String
>
console
=
new
CallbackList
<
String
>()
{
@Override
public
synchronized
void
onAddElement
(
String
e
)
{
logs
.
add
(
e
);
flashLogs
.
setText
(
TextUtils
.
join
(
"\n"
,
this
));
sv
.
postDelayed
(()
->
sv
.
fullScroll
(
ScrollView
.
FOCUS_DOWN
),
10
);
}
};
// We must receive a Uri of the target zip
Intent
intent
=
getIntent
();
Uri
uri
=
intent
.
getData
();
...
...
@@ -70,35 +107,17 @@ public class FlashActivity extends Activity {
boolean
keepEnc
=
intent
.
getBooleanExtra
(
Const
.
Key
.
FLASH_SET_ENC
,
false
);
boolean
keepVerity
=
intent
.
getBooleanExtra
(
Const
.
Key
.
FLASH_SET_VERITY
,
false
);
switch
(
getIntent
()
.
getStringExtra
(
Const
.
Key
.
FLASH_ACTION
))
{
switch
(
intent
.
getStringExtra
(
Const
.
Key
.
FLASH_ACTION
))
{
case
Const
.
Value
.
FLASH_ZIP
:
new
FlashZip
(
this
,
uri
,
rootShellOutput
)
.
setCallBack
(()
->
buttonPanel
.
setVisibility
(
View
.
VISIBLE
))
.
exec
();
new
FlashZip
(
this
,
uri
,
console
,
logs
).
exec
();
break
;
case
Const
.
Value
.
PATCH_BOOT
:
new
InstallMagisk
(
this
,
rootShellOutput
,
uri
,
keepEnc
,
keepVerity
,
(
Uri
)
intent
.
getParcelableExtra
(
Const
.
Key
.
FLASH_SET_BOOT
))
.
setCallBack
(()
->
buttonPanel
.
setVisibility
(
View
.
VISIBLE
))
new
InstallMagisk
(
this
,
console
,
logs
,
uri
,
keepEnc
,
keepVerity
,
(
Uri
)
intent
.
getParcelableExtra
(
Const
.
Key
.
FLASH_SET_BOOT
))
.
exec
();
break
;
case
Const
.
Value
.
FLASH_MAGISK
:
String
boot
=
intent
.
getStringExtra
(
Const
.
Key
.
FLASH_SET_BOOT
);
if
(
getMagiskManager
().
remoteMagiskVersionCode
<
1370
)
{
// Use legacy installation method
Shell
.
su_raw
(
"echo \"BOOTIMAGE="
+
boot
+
"\" > /dev/.magisk"
,
"echo \"KEEPFORCEENCRYPT="
+
keepEnc
+
"\" >> /dev/.magisk"
,
"echo \"KEEPVERITY="
+
keepVerity
+
"\" >> /dev/.magisk"
);
new
FlashZip
(
this
,
uri
,
rootShellOutput
)
.
setCallBack
(()
->
buttonPanel
.
setVisibility
(
View
.
VISIBLE
))
.
exec
();
}
else
{
// Use new installation method
new
InstallMagisk
(
this
,
rootShellOutput
,
uri
,
keepEnc
,
keepVerity
,
boot
)
.
setCallBack
(()
->
buttonPanel
.
setVisibility
(
View
.
VISIBLE
))
.
exec
();
}
new
InstallMagisk
(
this
,
console
,
logs
,
uri
,
keepEnc
,
keepVerity
,
intent
.
getStringExtra
(
Const
.
Key
.
FLASH_SET_BOOT
))
.
exec
();
break
;
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/MagiskLogFragment.java
View file @
3a74729e
package
com
.
topjohnwu
.
magisk
;
import
android.Manifest
;
import
android.annotation.SuppressLint
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.design.widget.Snackbar
;
...
...
app/src/main/java/com/topjohnwu/magisk/asyncs/FlashZip.java
View file @
3a74729e
...
...
@@ -3,9 +3,10 @@ package com.topjohnwu.magisk.asyncs;
import
android.app.Activity
;
import
android.net.Uri
;
import
android.text.TextUtils
;
import
android.view.View
;
import
com.topjohnwu.magisk.FlashActivity
;
import
com.topjohnwu.magisk.MagiskManager
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.utils.Const
;
import
com.topjohnwu.magisk.utils.Shell
;
import
com.topjohnwu.magisk.utils.Utils
;
...
...
@@ -25,12 +26,13 @@ public class FlashZip extends ParallelTask<Void, Void, Integer> {
private
Uri
mUri
;
private
File
mCachedFile
;
private
List
<
String
>
mList
;
private
List
<
String
>
console
,
logs
;
public
FlashZip
(
Activity
context
,
Uri
uri
,
List
<
String
>
list
)
{
public
FlashZip
(
Activity
context
,
Uri
uri
,
List
<
String
>
console
,
List
<
String
>
logs
)
{
super
(
context
);
mUri
=
uri
;
mList
=
list
;
this
.
console
=
console
;
this
.
logs
=
logs
;
mCachedFile
=
new
File
(
context
.
getCacheDir
(),
"install.zip"
);
}
...
...
@@ -44,7 +46,7 @@ public class FlashZip extends ParallelTask<Void, Void, Integer> {
protected
Integer
doInBackground
(
Void
...
voids
)
{
MagiskManager
mm
=
MagiskManager
.
get
();
try
{
mList
.
add
(
"- Copying zip to temp directory"
);
console
.
add
(
"- Copying zip to temp directory"
);
mCachedFile
.
delete
();
try
(
...
...
@@ -55,48 +57,52 @@ public class FlashZip extends ParallelTask<Void, Void, Integer> {
InputStream
buf
=
new
BufferedInputStream
(
in
);
Utils
.
inToOut
(
buf
,
out
);
}
catch
(
FileNotFoundException
e
)
{
mList
.
add
(
"! Invalid Uri"
);
console
.
add
(
"! Invalid Uri"
);
throw
e
;
}
catch
(
IOException
e
)
{
mList
.
add
(
"! Cannot copy to cache"
);
console
.
add
(
"! Cannot copy to cache"
);
throw
e
;
}
if
(!
unzipAndCheck
())
return
0
;
mList
.
add
(
"- Installing "
+
Utils
.
getNameFromUri
(
mm
,
mUri
));
Shell
.
su
(
mList
,
console
.
add
(
"- Installing "
+
Utils
.
getNameFromUri
(
mm
,
mUri
));
Shell
.
getShell
().
run
(
console
,
logs
,
"cd "
+
mCachedFile
.
getParent
(),
"BOOTMODE=true sh update-binary dummy 1 "
+
mCachedFile
+
" && echo 'Success!' || echo 'Failed!'"
"BOOTMODE=true sh update-binary dummy 1 "
+
mCachedFile
+
" || echo 'Failed!'"
);
if
(
TextUtils
.
equals
(
mList
.
get
(
mList
.
size
()
-
1
),
"Success!"
))
return
1
;
if
(
TextUtils
.
equals
(
console
.
get
(
console
.
size
()
-
1
),
"Failed!"
))
return
-
1
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
-
1
;
}
return
-
1
;
console
.
add
(
"- All done!"
);
return
1
;
}
// -1 = error, manual install; 0 = invalid zip; 1 = success
@Override
protected
void
onPostExecute
(
Integer
result
)
{
MagiskManager
mm
=
MagiskManager
.
get
();
FlashActivity
activity
=
(
FlashActivity
)
getActivity
();
Shell
.
su_raw
(
"rm -rf "
+
mCachedFile
.
getParent
(),
"rm -rf "
+
Const
.
TMP_FOLDER_PATH
);
switch
(
result
)
{
case
-
1
:
mList
.
add
(
mm
.
getString
(
R
.
string
.
install_error
)
);
console
.
add
(
"! Installation failed"
);
Utils
.
showUriSnack
(
getActivity
(),
mUri
);
break
;
case
0
:
mList
.
add
(
mm
.
getString
(
R
.
string
.
invalid_zip
)
);
console
.
add
(
"! This zip is not a Magisk Module!"
);
break
;
case
1
:
// Success
new
LoadModules
().
exec
();
break
;
}
super
.
onPostExecute
(
result
);
activity
.
reboot
.
setVisibility
(
result
>
0
?
View
.
VISIBLE
:
View
.
GONE
);
activity
.
buttonPanel
.
setVisibility
(
View
.
VISIBLE
);
}
}
app/src/main/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java
View file @
3a74729e
...
...
@@ -5,8 +5,10 @@ import android.content.res.AssetManager;
import
android.net.Uri
;
import
android.os.Build
;
import
android.text.TextUtils
;
import
android.view.View
;
import
com.topjohnwu.crypto.SignBoot
;
import
com.topjohnwu.magisk.FlashActivity
;
import
com.topjohnwu.magisk.MagiskManager
;
import
com.topjohnwu.magisk.container.TarEntry
;
import
com.topjohnwu.magisk.utils.Const
;
...
...
@@ -35,27 +37,28 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
private
static
final
int
DIRECT_MODE
=
1
;
private
Uri
mBootImg
,
mZip
;
private
List
<
String
>
mList
;
private
List
<
String
>
console
,
logs
;
private
String
mBootLocation
;
private
boolean
mKeepEnc
,
mKeepVerity
;
private
int
mode
;
private
InstallMagisk
(
Activity
context
,
List
<
String
>
list
,
Uri
zip
,
boolean
enc
,
boolean
verity
)
{
private
InstallMagisk
(
Activity
context
,
List
<
String
>
console
,
List
<
String
>
logs
,
Uri
zip
,
boolean
enc
,
boolean
verity
)
{
super
(
context
);
mList
=
list
;
this
.
console
=
console
;
this
.
logs
=
logs
;
mZip
=
zip
;
mKeepEnc
=
enc
;
mKeepVerity
=
verity
;
}
public
InstallMagisk
(
Activity
context
,
List
<
String
>
list
,
Uri
zip
,
boolean
enc
,
boolean
verity
,
Uri
boot
)
{
this
(
context
,
list
,
zip
,
enc
,
verity
);
public
InstallMagisk
(
Activity
context
,
List
<
String
>
console
,
List
<
String
>
logs
,
Uri
zip
,
boolean
enc
,
boolean
verity
,
Uri
boot
)
{
this
(
context
,
console
,
logs
,
zip
,
enc
,
verity
);
mBootImg
=
boot
;
mode
=
PATCH_MODE
;
}
public
InstallMagisk
(
Activity
context
,
List
<
String
>
list
,
Uri
zip
,
boolean
enc
,
boolean
verity
,
String
boot
)
{
this
(
context
,
list
,
zip
,
enc
,
verity
);
public
InstallMagisk
(
Activity
context
,
List
<
String
>
console
,
List
<
String
>
logs
,
Uri
zip
,
boolean
enc
,
boolean
verity
,
String
boot
)
{
this
(
context
,
console
,
logs
,
zip
,
enc
,
verity
);
mBootLocation
=
boot
;
mode
=
DIRECT_MODE
;
}
...
...
@@ -77,11 +80,11 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
else
if
(
abis
.
contains
(
"arm64-v8a"
))
arch
=
"arm64"
;
else
if
(
abis
.
contains
(
"x86"
))
arch
=
"x86"
;
else
arch
=
"arm"
;
mList
.
add
(
"- Device platform: "
+
arch
);
console
.
add
(
"- Device platform: "
+
arch
);
try
{
// Unzip files
mList
.
add
(
"- Extracting files"
);
console
.
add
(
"- Extracting files"
);
try
(
InputStream
in
=
mm
.
getContentResolver
().
openInputStream
(
mZip
))
{
if
(
in
==
null
)
throw
new
FileNotFoundException
();
BufferedInputStream
buf
=
new
BufferedInputStream
(
in
);
...
...
@@ -95,17 +98,17 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
ZipUtils
.
unzip
(
buf
,
install
,
"META-INF/com/google/android/update-binary"
,
true
);
buf
.
close
();
}
catch
(
FileNotFoundException
e
)
{
mList
.
add
(
"! Invalid Uri"
);
console
.
add
(
"! Invalid Uri"
);
throw
e
;
}
catch
(
Exception
e
)
{
mList
.
add
(
"! Cannot unzip zip"
);
console
.
add
(
"! Cannot unzip zip"
);
throw
e
;
}
File
boot
=
new
File
(
install
,
"boot.img"
);
switch
(
mode
)
{
case
PATCH_MODE:
mList
.
add
(
"- Use boot image: "
+
boot
);
console
.
add
(
"- Use boot image: "
+
boot
);
// Copy boot image to local
try
(
InputStream
in
=
mm
.
getContentResolver
().
openInputStream
(
mBootImg
);
...
...
@@ -129,19 +132,19 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
}
Utils
.
inToOut
(
source
,
out
);
}
catch
(
FileNotFoundException
e
)
{
mList
.
add
(
"! Invalid Uri"
);
console
.
add
(
"! Invalid Uri"
);
throw
e
;
}
catch
(
IOException
e
)
{
mList
.
add
(
"! Copy failed"
);
console
.
add
(
"! Copy failed"
);
throw
e
;
}
break
;
case
DIRECT_MODE:
mList
.
add
(
"- Use boot image: "
+
mBootLocation
);
console
.
add
(
"- Use boot image: "
+
mBootLocation
);
if
(
boot
.
createNewFile
())
{
Shell
.
su
(
"cat "
+
mBootLocation
+
" > "
+
boot
);
}
else
{
mList
.
add
(
"! Dump boot image failed"
);
console
.
add
(
"! Dump boot image failed"
);
return
false
;
}
break
;
...
...
@@ -153,10 +156,10 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
try
(
InputStream
in
=
new
FileInputStream
(
boot
))
{
isSigned
=
SignBoot
.
verifySignature
(
in
,
null
);
if
(
isSigned
)
{
mList
.
add
(
"- Signed boot image detected"
);
console
.
add
(
"- Signed boot image detected"
);
}
}
catch
(
Exception
e
)
{
mList
.
add
(
"! Unable to check signature"
);
console
.
add
(
"! Unable to check signature"
);
throw
e
;
}
...
...
@@ -168,12 +171,12 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
shell
=
Shell
.
getShell
();
// Patch boot image
shell
.
run
(
mList
,
null
,
shell
.
run
(
console
,
logs
,
"cd "
+
install
,
"KEEPFORCEENCRYPT="
+
mKeepEnc
+
" KEEPVERITY="
+
mKeepVerity
+
" sh "
+
"update-binary indep boot_patch.sh "
+
boot
+
" || echo 'Failed!'"
);
if
(
TextUtils
.
equals
(
mList
.
get
(
mList
.
size
()
-
1
),
"Failed!"
))
if
(
TextUtils
.
equals
(
console
.
get
(
console
.
size
()
-
1
),
"Failed!"
))
return
false
;
shell
.
run
(
null
,
null
,
...
...
@@ -185,7 +188,7 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
File
patched_boot
=
new
File
(
install
.
getParent
(),
"new-boot.img"
);
if
(
isSigned
)
{
mList
.
add
(
"- Signing boot image"
);
console
.
add
(
"- Signing boot image"
);
File
signed
=
new
File
(
install
.
getParent
(),
"signed.img"
);
AssetManager
assets
=
mm
.
getAssets
();
try
(
...
...
@@ -217,15 +220,15 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
}
break
;
}
mList
.
add
(
""
);
mList
.
add
(
"*********************************"
);
mList
.
add
(
" Patched Boot Image is placed in "
);
mList
.
add
(
" "
+
dest
+
" "
);
mList
.
add
(
"*********************************"
);
console
.
add
(
""
);
console
.
add
(
"*********************************"
);
console
.
add
(
" Patched Boot Image is placed in "
);
console
.
add
(
" "
+
dest
+
" "
);
console
.
add
(
"*********************************"
);
break
;
case
DIRECT_MODE:
// Direct flash boot image and patch dtbo if possible
Shell
.
su
(
mList
,
Shell
.
getShell
().
run
(
console
,
logs
,
"rm -rf /data/magisk/*"
,
"mkdir -p /data/magisk 2>/dev/null"
,
"mv -f "
+
install
+
"/* /data/magisk"
,
...
...
@@ -238,7 +241,7 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
return
false
;
}
mList
.
add
(
"- All done!"
);
console
.
add
(
"- All done!"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
...
...
@@ -248,6 +251,11 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
@Override
protected
void
onPostExecute
(
Boolean
result
)
{
super
.
onPostExecute
(
result
);
FlashActivity
activity
=
(
FlashActivity
)
getActivity
();
if
(!
result
)
{
console
.
add
(
"! Installation failed"
);
activity
.
reboot
.
setVisibility
(
View
.
GONE
);
}
activity
.
buttonPanel
.
setVisibility
(
View
.
VISIBLE
);
}
}
app/src/main/java/com/topjohnwu/magisk/container/CallbackList.java
View file @
3a74729e
...
...
@@ -12,11 +12,11 @@ public abstract class CallbackList<E> extends ArrayList<E> {
handler
=
new
Handler
();
}
public
abstract
void
onAddElement
();
public
abstract
void
onAddElement
(
E
e
);
public
synchronized
boolean
add
(
E
e
)
{
boolean
ret
=
super
.
add
(
e
);
handler
.
post
(
this
::
onAddElement
);
handler
.
post
(
()
->
onAddElement
(
e
)
);
return
ret
;
}
}
app/src/main/res/layout/activity_flash.xml
View file @
3a74729e
...
...
@@ -50,6 +50,14 @@
android:layout_weight=
"1"
android:text=
"@string/close"
/>
<Button
android:id=
"@+id/save_logs"
style=
"?android:borderlessButtonStyle"
android:layout_width=
"0dp"
android:layout_height=
"50dp"
android:layout_weight=
"1"
android:text=
"@string/menuSaveLog"
/>
<Button
android:id=
"@+id/reboot"
style=
"?android:borderlessButtonStyle"
...
...
app/src/main/res/menu/menu_log.xml
View file @
3a74729e
...
...
@@ -5,7 +5,7 @@
<item
android:id=
"@+id/menu_save"
android:icon=
"@drawable/ic_save"
android:title=
"@string/menuSave
ToSd
"
android:title=
"@string/menuSave
Log
"
app:showAsAction=
"ifRoom"
/>
<item
...
...
app/src/main/res/values-ar/strings.xml
View file @
3a74729e
...
...
@@ -53,7 +53,6 @@
<string
name=
"not_installed"
>
غير مثبت
</string>
<!--Log Fragment-->
<string
name=
"menuSaveToSd"
>
حفظ إلى بطاقة ذاكرة SD
</string>
<string
name=
"menuReload"
>
إعادة تحميل
</string>
<string
name=
"menuClearLog"
>
حذف السجل الآن
</string>
<string
name=
"logs_cleared"
>
تم حذف السجل بنجاح
</string>
...
...
app/src/main/res/values-cs/strings.xml
View file @
3a74729e
...
...
@@ -49,7 +49,7 @@
<string
name=
"not_installed"
>
Nenainstalováno
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Uložit na SD
</string>
<string
name=
"menuSave
Log"
>
Uložit log
</string>
<string
name=
"menuReload"
>
Aktualizovat
</string>
<string
name=
"menuClearLog"
>
Smazat Log
</string>
<string
name=
"logs_cleared"
>
Log byl smazán
</string>
...
...
app/src/main/res/values-de/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
Nicht installiert
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Log auf SD-Karte
speichern
</string>
<string
name=
"menuSave
Log"
>
Log auf
speichern
</string>
<string
name=
"menuReload"
>
Log erneut laden
</string>
<string
name=
"menuClearLog"
>
Log löschen
</string>
<string
name=
"logs_cleared"
>
Log gelöscht
</string>
...
...
app/src/main/res/values-el/strings.xml
View file @
3a74729e
...
...
@@ -52,7 +52,7 @@
<string
name=
"not_installed"
>
Μη εγκατεστημένη
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Αποθήκευση σε SD
</string>
<string
name=
"menuSave
Log"
>
"Αποθήκευση καταγραφής "
</string>
<string
name=
"menuReload"
>
Επαναφόρτωση
</string>
<string
name=
"menuClearLog"
>
Εκκαθάριση αρχείου καταγραφής τώρα
</string>
<string
name=
"logs_cleared"
>
Το αρχείο καταγραφής εκκαθαρίστηκε επιτυχώς
</string>
...
...
app/src/main/res/values-es/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
No Instalado
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Guardar en la SD
</string>
<string
name=
"menuSave
Log"
>
Guardar registro
</string>
<string
name=
"menuReload"
>
Recargar
</string>
<string
name=
"menuClearLog"
>
Limpiar registro ahora
</string>
<string
name=
"logs_cleared"
>
Registro limpiado correctamente
</string>
...
...
app/src/main/res/values-et/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
Pole installitud
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Salvesta SD-kaardile
</string>
<string
name=
"menuSave
Log"
>
Salvesta logi
</string>
<string
name=
"menuReload"
>
Laadi uuesti
</string>
<string
name=
"menuClearLog"
>
Tühjenda logi nüüd
</string>
<string
name=
"logs_cleared"
>
Logi edukalt tühjendatud
</string>
...
...
app/src/main/res/values-fr/strings.xml
View file @
3a74729e
...
...
@@ -48,7 +48,7 @@
<string
name=
"installed"
>
Installé
</string>
<string
name=
"not_installed"
>
Non installé
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Enregistrer sur SD
</string>
<string
name=
"menuSave
Log"
>
Enregistrer journal
</string>
<string
name=
"menuReload"
>
Actualiser
</string>
<string
name=
"menuClearLog"
>
Effacer le journal maintenant
</string>
<string
name=
"logs_cleared"
>
Journal effacé avec succès
</string>
...
...
app/src/main/res/values-hr/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
Nije instalirano
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Spremi na SD karticu
</string>
<string
name=
"menuSave
Log"
>
"Spremi zapisnik "
</string>
<string
name=
"menuReload"
>
Ponovno učitaj
</string>
<string
name=
"menuClearLog"
>
Očisti zapisnik sada
</string>
<string
name=
"logs_cleared"
>
Zapisnik je uspješno izbrisan
</string>
...
...
app/src/main/res/values-it/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
Non installato
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Salva nella SD
</string>
<string
name=
"menuSave
Log"
>
Salva registro
</string>
<string
name=
"menuReload"
>
Ricarica
</string>
<string
name=
"menuClearLog"
>
Pulisci registro eventi
</string>
<string
name=
"logs_cleared"
>
Registro eventi creato correttamente
</string>
...
...
app/src/main/res/values-ja/strings.xml
View file @
3a74729e
...
...
@@ -49,7 +49,7 @@
<string
name=
"not_installed"
>
未インストール
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
SDカードに
保存
</string>
<string
name=
"menuSave
Log"
>
ログ
保存
</string>
<string
name=
"menuReload"
>
リロード
</string>
<string
name=
"menuClearLog"
>
ログを消去する
</string>
<string
name=
"logs_cleared"
>
ログは正常にクリアされました
</string>
...
...
app/src/main/res/values-ko/strings.xml
View file @
3a74729e
...
...
@@ -49,7 +49,7 @@
<string
name=
"not_installed"
>
설치되지 않음
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
SD 카드에 저장
</string>
<string
name=
"menuSave
Log"
>
저장 로그
</string>
<string
name=
"menuReload"
>
다시 불러오기
</string>
<string
name=
"menuClearLog"
>
지금 로그 비우기
</string>
<string
name=
"logs_cleared"
>
로그가 성공적으로 비워짐
</string>
...
...
app/src/main/res/values-nl/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
Niet geïnstalleerd
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Opslaan op SD-kaart
</string>
<string
name=
"menuSave
Log"
>
Opslaan log
</string>
<string
name=
"menuReload"
>
Herladen
</string>
<string
name=
"menuClearLog"
>
Log nu wissen
</string>
<string
name=
"logs_cleared"
>
Log succesvol gewist
</string>
...
...
app/src/main/res/values-pl/strings.xml
View file @
3a74729e
...
...
@@ -59,7 +59,7 @@
<string
name=
"not_installed"
>
Nie zainstalowany
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Zapisz na SD
</string>
<string
name=
"menuSave
Log"
>
Zapisz log
</string>
<string
name=
"menuReload"
>
Załaduj ponownie
</string>
<string
name=
"menuClearLog"
>
Wyczyść Log
</string>
<string
name=
"logs_cleared"
>
Log wyczyszczony
</string>
...
...
app/src/main/res/values-pt-rBR/strings.xml
View file @
3a74729e
...
...
@@ -59,7 +59,7 @@
<string
name=
"not_installed"
>
Não Instalado
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Salvar no SD
</string>
<string
name=
"menuSave
Log"
>
Salvar registro
</string>
<string
name=
"menuReload"
>
Recarregar
</string>
<string
name=
"menuClearLog"
>
Limpar registro agora
</string>
<string
name=
"logs_cleared"
>
Registro limpado com sucesso
</string>
...
...
app/src/main/res/values-pt-rPT/strings.xml
View file @
3a74729e
...
...
@@ -55,7 +55,7 @@
<string
name=
"not_installed"
>
Não Instalado
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Gravar no SD
</string>
<string
name=
"menuSave
Log"
>
Gravar registo
</string>
<string
name=
"menuReload"
>
Recarregar
</string>
<string
name=
"menuClearLog"
>
Limpar registo agora
</string>
<string
name=
"logs_cleared"
>
Registo limpo com sucesso
</string>
...
...
@@ -91,9 +91,11 @@
<string
name=
"settings_reboot_toast"
>
Reinicie para aplicar definições
</string>
<string
name=
"release_notes"
>
Notas da atualização
</string>
<string
name=
"repo_cache_cleared"
>
Cache do repositório apagado
</string>
<string
name=
"safetyNet_hide_notice"
>
Esta aplicação usa SafetyNet \nJá manipulado pelo MagiskHide por padrão
</string>
<string
name=
"safetyNet_hide_notice"
>
Esta aplicação usa SafetyNet
\nJá manipulado pelo MagiskHide por padrão
</string>
<string
name=
"process_error"
>
Erro no processo
</string>
<string
name=
"internal_storage"
>
O zip foi guardado em: \n[Armazenamento interno]%1$s
</string>
<string
name=
"internal_storage"
>
O zip foi guardado em:
\n[Armazenamento interno]%1$s
</string>
<string
name=
"zip_download_msg"
>
A transferir ficheiro zip (%1$d%%) …
</string>
<string
name=
"zip_process_title"
>
A processar
</string>
<string
name=
"zip_process_msg"
>
A processar ficheiro zip …
</string>
...
...
@@ -170,7 +172,8 @@
<string
name=
"deny"
>
Negar
</string>
<string
name=
"prompt"
>
Perguntar
</string>
<string
name=
"grant"
>
Permitir
</string>
<string
name=
"su_warning"
>
Concede acesso total ao seu dispositivo. \nNegue se não tiver certeza!
</string>
<string
name=
"su_warning"
>
Concede acesso total ao seu dispositivo.
\nNegue se não tiver certeza!
</string>
<string
name=
"forever"
>
Sempre
</string>
<string
name=
"once"
>
Uma vez
</string>
<string
name=
"tenmin"
>
10 minutos
</string>
...
...
app/src/main/res/values-ro/strings.xml
View file @
3a74729e
...
...
@@ -49,7 +49,7 @@
<string
name=
"not_installed"
>
Nu este instalat
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Salvare pe cardul SD
</string>
<string
name=
"menuSave
Log"
>
Salvare jurnal
</string>
<string
name=
"menuReload"
>
Reîncărcare
</string>
<string
name=
"menuClearLog"
>
Șterge jurnal acum
</string>
<string
name=
"logs_cleared"
>
Jurnal şters
</string>
...
...
app/src/main/res/values-ru/strings.xml
View file @
3a74729e
...
...
@@ -56,7 +56,7 @@
<string
name=
"not_installed"
>
Не установлен
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Сохранить на карту памяти
</string>
<string
name=
"menuSave
Log"
>
"Сохранить историю "
</string>
<string
name=
"menuReload"
>
Обновить
</string>
<string
name=
"menuClearLog"
>
Очистить историю сейчас
</string>
<string
name=
"logs_cleared"
>
История успешно очищена
</string>
...
...
app/src/main/res/values-sv/strings.xml
View file @
3a74729e
...
...
@@ -54,7 +54,7 @@
<string
name=
"not_installed"
>
Inte installerad
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Spara till SD-kort
</string>
<string
name=
"menuSave
Log"
>
Spara loggen
</string>
<string
name=
"menuReload"
>
Uppdatera
</string>
<string
name=
"menuClearLog"
>
Rensa loggen
</string>
<string
name=
"logs_cleared"
>
Loggen rensad
</string>
...
...
app/src/main/res/values-tr/strings.xml
View file @
3a74729e
...
...
@@ -54,7 +54,7 @@
<string
name=
"not_installed"
>
Yüklenmemiş
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
"SD Kart\'a kaydet"
</string>
<string
name=
"menuSave
Log"
>
Günlüğü kaydet
</string>
<string
name=
"menuReload"
>
Yenile
</string>
<string
name=
"menuClearLog"
>
Günlüğü temizle
</string>
<string
name=
"logs_cleared"
>
Günlük başarıyla temizlendi
</string>
...
...
app/src/main/res/values-uk/strings.xml
View file @
3a74729e
...
...
@@ -55,7 +55,7 @@
<string
name=
"not_installed"
>
Не встановлено
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Зберегти на карту пам\'яті
</string>
<string
name=
"menuSave
Log"
>
Зберегти логи
</string>
<string
name=
"menuReload"
>
Оновити
</string>
<string
name=
"menuClearLog"
>
Очистити логи
</string>
<string
name=
"logs_cleared"
>
Логи очищено
</string>
...
...
app/src/main/res/values-vi/strings.xml
View file @
3a74729e
...
...
@@ -49,7 +49,7 @@
<string
name=
"not_installed"
>
Chưa được cài đặt
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Lưu vào thẻ nhớ
</string>
<string
name=
"menuSave
Log"
>
Lưu nhật ký
</string>
<string
name=
"menuReload"
>
Tải lại
</string>
<string
name=
"menuClearLog"
>
Xoá nhật ký ngay
</string>
<string
name=
"logs_cleared"
>
Đã xoá nhật ký thành công
</string>
...
...
app/src/main/res/values-zh-rCN/strings.xml
View file @
3a74729e
...
...
@@ -55,7 +55,7 @@
<string
name=
"not_installed"
>
未安装
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
保存到内置存储
</string>
<string
name=
"menuSave
Log"
>
保存日志
</string>
<string
name=
"menuReload"
>
刷新
</string>
<string
name=
"menuClearLog"
>
清除日志
</string>
<string
name=
"logs_cleared"
>
日志已成功清除
</string>
...
...
app/src/main/res/values-zh-rTW/strings.xml
View file @
3a74729e
...
...
@@ -47,7 +47,7 @@
<string
name=
"not_installed"
>
未安裝
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
保存到 SD 卡
</string>
<string
name=
"menuSave
Log"
>
保存日誌
</string>
<string
name=
"menuReload"
>
重載
</string>
<string
name=
"menuClearLog"
>
清除日誌
</string>
<string
name=
"logs_cleared"
>
日誌已成功清除
</string>
...
...
app/src/main/res/values/strings.xml
View file @
3a74729e
...
...
@@ -59,7 +59,7 @@
<string
name=
"not_installed"
>
Not Installed
</string>
<!--Log Fragment-->
<string
name=
"menuSave
ToSd"
>
Save to SD
</string>
<string
name=
"menuSave
Log"
>
Save log
</string>
<string
name=
"menuReload"
>
Reload
</string>
<string
name=
"menuClearLog"
>
Clear log now
</string>
<string
name=
"logs_cleared"
>
Log successfully cleared
</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