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
826543a2
Commit
826543a2
authored
Nov 14, 2017
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fully support dtbo.img patching
parent
4ac83cfd
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
157 additions
and
207 deletions
+157
-207
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+1
-0
MagiskFragment.java
app/src/main/java/com/topjohnwu/magisk/MagiskFragment.java
+3
-48
MagiskManager.java
app/src/main/java/com/topjohnwu/magisk/MagiskManager.java
+0
-1
SplashActivity.java
app/src/main/java/com/topjohnwu/magisk/SplashActivity.java
+3
-19
CheckUpdates.java
...c/main/java/com/topjohnwu/magisk/asyncs/CheckUpdates.java
+2
-2
InstallMagisk.java
.../main/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java
+4
-2
RestoreStockBoot.java
...in/java/com/topjohnwu/magisk/asyncs/RestoreStockBoot.java
+6
-14
Activity.java
...c/main/java/com/topjohnwu/magisk/components/Activity.java
+18
-0
Fragment.java
...c/main/java/com/topjohnwu/magisk/components/Fragment.java
+0
-20
BootReceiver.java
...ain/java/com/topjohnwu/magisk/receivers/BootReceiver.java
+1
-4
RebootReceiver.java
...n/java/com/topjohnwu/magisk/receivers/RebootReceiver.java
+14
-0
OnBootIntentService.java
...va/com/topjohnwu/magisk/services/OnBootIntentService.java
+15
-1
Const.java
app/src/main/java/com/topjohnwu/magisk/utils/Const.java
+4
-3
Shell.java
app/src/main/java/com/topjohnwu/magisk/utils/Shell.java
+16
-0
ShowUI.java
app/src/main/java/com/topjohnwu/magisk/utils/ShowUI.java
+59
-38
Utils.java
app/src/main/java/com/topjohnwu/magisk/utils/Utils.java
+9
-0
fragment_magisk.xml
app/src/main/res/layout/fragment_magisk.xml
+0
-55
strings.xml
app/src/main/res/values/strings.xml
+2
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
826543a2
...
...
@@ -73,6 +73,7 @@
</intent-filter>
</receiver>
<receiver
android:name=
".receivers.ManagerUpdate"
/>
<receiver
android:name=
".receivers.RebootReceiver"
/>
<service
android:name=
".services.OnBootIntentService"
/>
<service
...
...
app/src/main/java/com/topjohnwu/magisk/MagiskFragment.java
View file @
826543a2
...
...
@@ -5,20 +5,16 @@ import android.content.Context;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.StringRes
;
import
android.support.design.widget.Snackbar
;
import
android.support.v4.widget.SwipeRefreshLayout
;
import
android.support.v7.widget.CardView
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.ArrayAdapter
;
import
android.widget.Button
;
import
android.widget.CheckBox
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.ProgressBar
;
import
android.widget.RelativeLayout
;
import
android.widget.Spinner
;
import
android.widget.TextView
;
import
com.topjohnwu.magisk.asyncs.CheckSafetyNet
;
...
...
@@ -26,15 +22,11 @@ import com.topjohnwu.magisk.asyncs.CheckUpdates;
import
com.topjohnwu.magisk.components.AlertDialogBuilder
;
import
com.topjohnwu.magisk.components.ExpandableView
;
import
com.topjohnwu.magisk.components.Fragment
;
import
com.topjohnwu.magisk.components.SnackbarMaker
;
import
com.topjohnwu.magisk.utils.Shell
;
import
com.topjohnwu.magisk.utils.ShowUI
;
import
com.topjohnwu.magisk.utils.Topic
;
import
com.topjohnwu.magisk.utils.Utils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
butterknife.BindColor
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
...
...
@@ -77,9 +69,6 @@ public class MagiskFragment extends Fragment
@BindView
(
R
.
id
.
basic_status_icon
)
ImageView
basicStatusIcon
;
@BindView
(
R
.
id
.
basic_status
)
TextView
basicStatusText
;
@BindView
(
R
.
id
.
bootimage_card
)
CardView
bootImageCard
;
@BindView
(
R
.
id
.
block_spinner
)
Spinner
spinner
;
@BindView
(
R
.
id
.
detect_bootimage
)
Button
detectButton
;
@BindView
(
R
.
id
.
install_option_card
)
CardView
installOptionCard
;
@BindView
(
R
.
id
.
keep_force_enc
)
CheckBox
keepEncChkbox
;
@BindView
(
R
.
id
.
keep_verity
)
CheckBox
keepVerityChkbox
;
...
...
@@ -123,18 +112,18 @@ public class MagiskFragment extends Fragment
// Show Manager update first
if
(
mm
.
remoteManagerVersionCode
>
BuildConfig
.
VERSION_CODE
)
{
ShowUI
.
showM
anagerInstallDialog
(
getActivity
());
ShowUI
.
m
anagerInstallDialog
(
getActivity
());
return
;
}
((
NotificationManager
)
mm
.
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)).
cancelAll
();
ShowUI
.
showMagiskInstallDialog
(
this
,
ShowUI
.
magiskInstallDialog
(
getActivity
()
,
keepEncChkbox
.
isChecked
(),
keepVerityChkbox
.
isChecked
());
}
@OnClick
(
R
.
id
.
uninstall_button
)
void
uninstall
()
{
ShowUI
.
showUninstallDialog
(
this
);
ShowUI
.
uninstallDialog
(
getActivity
()
);
}
@Nullable
...
...
@@ -207,25 +196,6 @@ public class MagiskFragment extends Fragment
return
expandableContainer
;
}
public
String
getSelectedBootImage
()
{
if
(
Shell
.
rootAccess
())
{
if
(
mm
.
bootBlock
!=
null
)
{
return
mm
.
bootBlock
;
}
else
{
int
idx
=
spinner
.
getSelectedItemPosition
();
if
(
idx
>
0
)
{
return
mm
.
blockList
.
get
(
idx
-
1
);
}
else
{
SnackbarMaker
.
make
(
getActivity
(),
R
.
string
.
manual_boot_image
,
Snackbar
.
LENGTH_LONG
).
show
();
return
null
;
}
}
}
else
{
return
null
;
}
}
private
void
updateUI
()
{
((
MainActivity
)
getActivity
()).
checkHideSection
();
...
...
@@ -235,7 +205,6 @@ public class MagiskFragment extends Fragment
magiskUpdate
.
setVisibility
(
hasNetwork
?
View
.
VISIBLE
:
View
.
GONE
);
safetyNetCard
.
setVisibility
(
hasNetwork
?
View
.
VISIBLE
:
View
.
GONE
);
bootImageCard
.
setVisibility
(
hasNetwork
&&
hasRoot
?
View
.
VISIBLE
:
View
.
GONE
);
installOptionCard
.
setVisibility
(
hasNetwork
?
View
.
VISIBLE
:
View
.
GONE
);
uninstallButton
.
setVisibility
(
isUpToDate
&&
hasRoot
?
View
.
VISIBLE
:
View
.
GONE
);
...
...
@@ -253,20 +222,6 @@ public class MagiskFragment extends Fragment
magiskStatusIcon
.
setImageResource
(
image
);
magiskStatusIcon
.
setColorFilter
(
color
);
List
<
String
>
items
=
new
ArrayList
<>();
if
(
mm
.
bootBlock
!=
null
)
{
items
.
add
(
getString
(
R
.
string
.
auto_detect
,
mm
.
bootBlock
));
spinner
.
setEnabled
(
false
);
}
else
{
items
.
add
(
getString
(
R
.
string
.
cannot_auto_detect
));
if
(
mm
.
blockList
!=
null
)
items
.
addAll
(
mm
.
blockList
);
}
ArrayAdapter
<
String
>
adapter
=
new
ArrayAdapter
<>(
getActivity
(),
android
.
R
.
layout
.
simple_spinner_item
,
items
);
adapter
.
setDropDownViewResource
(
android
.
R
.
layout
.
simple_spinner_dropdown_item
);
spinner
.
setAdapter
(
adapter
);
}
private
void
updateCheckUI
()
{
...
...
app/src/main/java/com/topjohnwu/magisk/MagiskManager.java
View file @
826543a2
...
...
@@ -55,7 +55,6 @@ public class MagiskManager extends Application {
// Data
public
Map
<
String
,
Module
>
moduleMap
;
public
List
<
String
>
blockList
;
public
List
<
Locale
>
locales
;
// Configurations
...
...
app/src/main/java/com/topjohnwu/magisk/SplashActivity.java
View file @
826543a2
...
...
@@ -21,8 +21,6 @@ import com.topjohnwu.magisk.utils.Const;
import
com.topjohnwu.magisk.utils.Shell
;
import
com.topjohnwu.magisk.utils.Utils
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.List
;
public
class
SplashActivity
extends
Activity
{
...
...
@@ -57,27 +55,10 @@ public class SplashActivity extends Activity {
// Magisk working as expected
if
(
Shell
.
rootAccess
()
&&
mm
.
magiskVersionCode
>
0
)
{
// Load utility shell scripts
try
(
InputStream
in
=
getAssets
().
open
(
Const
.
UTIL_FUNCTIONS
))
{
Shell
.
getShell
().
loadInputStream
(
in
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
// Root shell initialization
Shell
.
su_raw
(
"export PATH="
+
Const
.
BUSYBOXPATH
+
":$PATH"
,
"mount_partitions"
,
"BOOTIMAGE="
,
"find_boot_image"
,
"migrate_boot_backup"
);
List
<
String
>
ret
=
Shell
.
su
(
"echo \"$BOOTIMAGE\""
);
if
(
Utils
.
isValidShellResponse
(
ret
))
{
mm
.
bootBlock
=
ret
.
get
(
0
);
}
else
{
mm
.
blockList
=
Shell
.
su
(
"find /dev/block -type b | grep -vE 'dm|ram|loop'"
);
}
// Setup suDB
...
...
@@ -105,6 +86,9 @@ public class SplashActivity extends Activity {
// Fire asynctasks
loadModuleTask
.
exec
();
// Check dtbo status
Utils
.
patchDTBO
();
}
// Write back default values
...
...
app/src/main/java/com/topjohnwu/magisk/asyncs/CheckUpdates.java
View file @
826543a2
...
...
@@ -55,9 +55,9 @@ public class CheckUpdates extends ParallelTask<Void, Void, Void> {
MagiskManager
mm
=
MagiskManager
.
get
();
if
(
showNotification
&&
mm
.
updateNotification
)
{
if
(
BuildConfig
.
VERSION_CODE
<
mm
.
remoteManagerVersionCode
)
{
ShowUI
.
showM
anagerUpdateNotification
();
ShowUI
.
m
anagerUpdateNotification
();
}
else
if
(
mm
.
magiskVersionCode
<
mm
.
remoteMagiskVersionCode
)
{
ShowUI
.
showM
agiskUpdateNotification
();
ShowUI
.
m
agiskUpdateNotification
();
}
}
mm
.
updateCheckDone
.
publish
();
...
...
app/src/main/java/com/topjohnwu/magisk/asyncs/InstallMagisk.java
View file @
826543a2
...
...
@@ -226,13 +226,15 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
mList
.
add
(
"*********************************"
);
break
;
case
DIRECT_MODE:
// Direct flash boot image
// Direct flash boot image
and patch dtbo if possible
Shell
.
su
(
mList
,
"rm -rf /data/magisk/*"
,
"mkdir -p /data/magisk 2>/dev/null"
,
"mv -f "
+
install
+
"/* /data/magisk"
,
"rm -rf "
+
install
,
"flash_boot_image "
+
patched_boot
+
" "
+
mBootLocation
,
"rm -rf "
+
patched_boot
);
"rm -rf "
+
patched_boot
,
"patch_dtbo_image"
);
break
;
default
:
return
false
;
...
...
app/src/main/java/com/topjohnwu/magisk/asyncs/RestoreStockBoot.java
View file @
826543a2
...
...
@@ -11,30 +11,22 @@ import java.util.List;
public
class
RestoreStockBoot
extends
ParallelTask
<
Void
,
Void
,
Boolean
>
{
private
String
mBoot
;
public
RestoreStockBoot
(
String
boot
)
{
mBoot
=
boot
;
}
@Override
protected
Boolean
doInBackground
(
Void
...
voids
)
{
String
sha1
;
List
<
String
>
ret
=
Utils
.
readFile
(
"/.backup/.sha1"
);
if
(!
Utils
.
isValidShellResponse
(
ret
))
{
if
(
Utils
.
isValidShellResponse
(
ret
))
{
sha1
=
ret
.
get
(
0
);
}
else
{
ret
=
Shell
.
su
(
"cat /init.magisk.rc | grep STOCKSHA1"
);
if
(!
Utils
.
isValidShellResponse
(
ret
))
return
false
;
sha1
=
ret
.
get
(
0
).
substring
(
ret
.
get
(
0
).
indexOf
(
'='
)
+
1
);
}
else
{
sha1
=
ret
.
get
(
0
);
}
String
stock_boot
=
"/data/stock_boot_"
+
sha1
+
".img.gz"
;
if
(!
Utils
.
itemExist
(
stock_boot
))
return
false
;
Shell
.
su_raw
(
"flash_boot_image "
+
stock_boot
+
" "
+
mBoot
);
return
true
;
ret
=
Shell
.
su
(
"restore_imgs "
+
sha1
+
" && echo true || echo false"
);
return
Utils
.
isValidShellResponse
(
ret
)
&&
Boolean
.
parseBoolean
(
ret
.
get
(
ret
.
size
()
-
1
));
}
@Override
...
...
app/src/main/java/com/topjohnwu/magisk/components/Activity.java
View file @
826543a2
package
com
.
topjohnwu
.
magisk
.
components
;
import
android.content.Intent
;
import
android.content.pm.PackageManager
;
import
android.content.res.AssetManager
;
import
android.content.res.Configuration
;
...
...
@@ -20,6 +21,7 @@ public class Activity extends AppCompatActivity {
private
AssetManager
mAssetManager
=
null
;
private
Resources
mResources
=
null
;
private
ActivityResultListener
activityResultListener
;
public
Activity
()
{
super
();
...
...
@@ -83,6 +85,18 @@ public class Activity extends AppCompatActivity {
}
}
@Override
protected
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
if
(
activityResultListener
!=
null
)
activityResultListener
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
activityResultListener
=
null
;
}
public
void
startActivityForResult
(
Intent
intent
,
int
requestCode
,
ActivityResultListener
listener
)
{
activityResultListener
=
listener
;
super
.
startActivityForResult
(
intent
,
requestCode
);
}
@Keep
public
void
swapResources
(
String
dexPath
)
{
mAssetManager
=
Utils
.
getAssets
(
dexPath
);
...
...
@@ -99,4 +113,8 @@ public class Activity extends AppCompatActivity {
mResources
=
null
;
}
public
interface
ActivityResultListener
{
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
);
}
}
app/src/main/java/com/topjohnwu/magisk/components/Fragment.java
View file @
826543a2
package
com
.
topjohnwu
.
magisk
.
components
;
import
android.content.Intent
;
import
com.topjohnwu.magisk.MagiskManager
;
import
com.topjohnwu.magisk.utils.Topic
;
import
com.topjohnwu.magisk.utils.Utils
;
public
class
Fragment
extends
android
.
support
.
v4
.
app
.
Fragment
{
private
ActivityResultListener
activityResultListener
;
public
MagiskManager
getApplication
()
{
return
Utils
.
getMagiskManager
(
getActivity
());
}
...
...
@@ -29,20 +25,4 @@ public class Fragment extends android.support.v4.app.Fragment {
}
super
.
onPause
();
}
@Override
public
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
if
(
activityResultListener
!=
null
)
activityResultListener
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
activityResultListener
=
null
;
}
public
void
startActivityForResult
(
Intent
intent
,
int
requestCode
,
ActivityResultListener
listener
)
{
activityResultListener
=
listener
;
super
.
startActivityForResult
(
intent
,
requestCode
);
}
public
interface
ActivityResultListener
{
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
);
}
}
app/src/main/java/com/topjohnwu/magisk/receivers/BootReceiver.java
View file @
826543a2
...
...
@@ -19,10 +19,7 @@ public class BootReceiver extends BroadcastReceiver {
@Override
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
if
(
intent
.
getAction
().
equals
(
Intent
.
ACTION_BOOT_COMPLETED
))
{
// There is currently no need to start an IntentService onBoot
// startIntentService(context);
}
startIntentService
(
context
);
}
}
app/src/main/java/com/topjohnwu/magisk/receivers/RebootReceiver.java
0 → 100644
View file @
826543a2
package
com
.
topjohnwu
.
magisk
.
receivers
;
import
android.content.BroadcastReceiver
;
import
android.content.Context
;
import
android.content.Intent
;
import
com.topjohnwu.magisk.utils.Shell
;
public
class
RebootReceiver
extends
BroadcastReceiver
{
@Override
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
Shell
.
su_raw
(
"reboot"
);
}
}
app/src/main/java/com/topjohnwu/magisk/services/OnBootIntentService.java
View file @
826543a2
...
...
@@ -5,8 +5,11 @@ import android.content.Intent;
import
android.os.Build
;
import
android.support.v4.app.NotificationCompat
;
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
;
public
class
OnBootIntentService
extends
IntentService
{
...
...
@@ -29,6 +32,17 @@ public class OnBootIntentService extends IntentService {
@Override
protected
void
onHandleIntent
(
Intent
intent
)
{
// Currently nothing to do
/* Pixel 2 (XL) devices will need to patch dtbo.img.
* However, that is not possible if Magisk is installed by
* patching boot image with Magisk Manager and fastboot flash
* the boot image, since at that time we do not have root.
* Check for dtbo status every boot time, and prompt user
* to reboot if dtbo wasn't patched and patched by Magisk Manager.
* */
MagiskManager
mm
=
Utils
.
getMagiskManager
(
this
);
mm
.
loadMagiskInfo
();
if
(
Shell
.
rootAccess
())
{
Utils
.
patchDTBO
();
}
}
}
app/src/main/java/com/topjohnwu/magisk/utils/Const.java
View file @
826543a2
...
...
@@ -59,13 +59,14 @@ public class Const {
public
static
final
int
MAGISK_UPDATE_NOTIFICATION_ID
=
4
;
public
static
final
int
APK_UPDATE_NOTIFICATION_ID
=
5
;
public
static
final
int
ONBOOT_NOTIFICATION_ID
=
6
;
public
static
final
String
NOTIFICATION_CHANNEL
=
"magisk_update_notice"
;
public
static
final
int
DTBO_NOTIFICATION_ID
=
7
;
public
static
final
String
NOTIFICATION_CHANNEL
=
"magisk_notification"
;
}
public
static
class
Url
{
public
static
final
String
STABLE_URL
=
"https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/stable.json"
;
public
static
final
String
BETA_URL
=
"https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/
beta
.json"
;
public
static
final
String
SNET_URL
=
"https://www.dropbox.com/s/
jg2yhcrn3l9fckc
/snet.apk?dl=1"
;
public
static
final
String
BETA_URL
=
"https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/
stable
.json"
;
public
static
final
String
SNET_URL
=
"https://www.dropbox.com/s/
vbq6y8pzfn4rq60
/snet.apk?dl=1"
;
public
static
final
String
REPO_URL
=
"https://api.github.com/users/Magisk-Modules-Repo/repos?per_page=100&page=%d"
;
public
static
final
String
FILE_URL
=
"https://raw.githubusercontent.com/Magisk-Modules-Repo/%s/master/%s"
;
public
static
final
String
ZIP_URL
=
"https://github.com/Magisk-Modules-Repo/%s/archive/master.zip"
;
...
...
app/src/main/java/com/topjohnwu/magisk/utils/Shell.java
View file @
826543a2
...
...
@@ -78,6 +78,22 @@ public class Shell {
}
}
}
if
(
rootAccess
())
{
// Load utility shell scripts
try
(
InputStream
in
=
mm
.
getAssets
().
open
(
Const
.
UTIL_FUNCTIONS
))
{
mm
.
shell
.
loadInputStream
(
in
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
// Root shell initialization
mm
.
shell
.
run_raw
(
false
,
"export PATH="
+
Const
.
BUSYBOXPATH
+
":$PATH"
,
"mount_partitions"
,
"find_boot_image"
,
"migrate_boot_backup"
);
}
}
return
mm
.
shell
;
...
...
app/src/main/java/com/topjohnwu/magisk/utils/ShowUI.java
View file @
826543a2
This diff is collapsed.
Click to expand it.
app/src/main/java/com/topjohnwu/magisk/utils/Utils.java
View file @
826543a2
...
...
@@ -234,4 +234,13 @@ public class Utils {
}
out
.
flush
();
}
public
static
void
patchDTBO
()
{
if
(
MagiskManager
.
get
().
magiskVersionCode
>=
1446
)
{
List
<
String
>
ret
=
Shell
.
su
(
"patch_dtbo_image && echo true || echo false"
);
if
(
Utils
.
isValidShellResponse
(
ret
)
&&
Boolean
.
parseBoolean
(
ret
.
get
(
ret
.
size
()
-
1
)))
{
ShowUI
.
dtboPatchedNotification
();
}
}
}
}
\ No newline at end of file
app/src/main/res/layout/fragment_magisk.xml
View file @
826543a2
...
...
@@ -224,61 +224,6 @@
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:id=
"@+id/bootimage_card"
style=
"?attr/cardStyle"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_marginBottom=
"4dp"
android:layout_marginEnd=
"5dp"
android:layout_marginStart=
"5dp"
android:layout_marginTop=
"4dp"
app:cardCornerRadius=
"@dimen/card_corner_radius"
app:cardElevation=
"@dimen/card_elevation"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginBottom=
"15dp"
android:layout_marginTop=
"15dp"
android:orientation=
"vertical"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:gravity=
"center"
android:paddingBottom=
"10dp"
android:text=
"@string/boot_image_title"
android:textStyle=
"bold"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginEnd=
"25dp"
android:layout_marginStart=
"25dp"
android:minHeight=
"35dp"
android:orientation=
"horizontal"
>
<Spinner
android:id=
"@+id/block_spinner"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
/>
<Button
android:id=
"@+id/detect_bootimage"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/detect_button"
android:visibility=
"gone"
/>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:id=
"@+id/install_option_card"
style=
"?attr/cardStyle"
...
...
app/src/main/res/values/strings.xml
View file @
826543a2
...
...
@@ -106,6 +106,8 @@
<string
name=
"manual_boot_image"
>
Please manually select a boot image!
</string>
<string
name=
"manager_update_title"
>
New Magisk Manager Update Available!
</string>
<string
name=
"manager_download_install"
>
Press to download and install
</string>
<string
name=
"dtbo_patched_title"
>
DTBO was patched!
</string>
<string
name=
"dtbo_patched_reboot"
>
Magisk Manager has patched dtbo.img, please reboot
</string>
<string
name=
"magisk_updates"
>
Magisk Updates
</string>
<string
name=
"flashing"
>
Flashing
</string>
<string
name=
"hide_manager_toast"
>
Hiding Magisk Manager…
</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