mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-08-14 12:40:56 +00:00
Compare commits
23 Commits
manager-v4
...
manager-v4
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0a0ad9a184 | ||
![]() |
234bead59e | ||
![]() |
76de310986 | ||
![]() |
817f050bcd | ||
![]() |
60ae685d1e | ||
![]() |
4c7bdbb284 | ||
![]() |
435251ca41 | ||
![]() |
324a0dd38f | ||
![]() |
cc77d93918 | ||
![]() |
0ea7d8bd8c | ||
![]() |
849b217143 | ||
![]() |
9af6efba59 | ||
![]() |
079d6f06ef | ||
![]() |
9cf0757689 | ||
![]() |
b54c438948 | ||
![]() |
c3ff4bfdad | ||
![]() |
5d62e066e2 | ||
![]() |
e94219c5a3 | ||
![]() |
8ed9634adf | ||
![]() |
0aefa9599f | ||
![]() |
e279cf0575 | ||
![]() |
a3f0ef8e77 | ||
![]() |
8eba05ed4a |
@@ -8,8 +8,8 @@ android {
|
|||||||
applicationId "com.topjohnwu.magisk"
|
applicationId "com.topjohnwu.magisk"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 25
|
targetSdkVersion 25
|
||||||
versionCode 23
|
versionCode 28
|
||||||
versionName "4.2"
|
versionName "4.3.1"
|
||||||
jackOptions {
|
jackOptions {
|
||||||
enabled true
|
enabled true
|
||||||
jackInProcess true
|
jackInProcess true
|
||||||
@@ -47,10 +47,10 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
compile fileTree(include: ['*.jar'], dir: 'libs')
|
compile fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
|
|
||||||
compile 'com.android.support:recyclerview-v7:25.1.1'
|
compile 'com.android.support:recyclerview-v7:25.3.1'
|
||||||
compile 'com.android.support:cardview-v7:25.1.1'
|
compile 'com.android.support:cardview-v7:25.3.1'
|
||||||
compile 'com.android.support:design:25.1.1'
|
compile 'com.android.support:design:25.3.1'
|
||||||
compile 'com.android.support:support-v4:25.1.1'
|
compile 'com.android.support:support-v4:25.3.1'
|
||||||
compile 'com.jakewharton:butterknife:8.5.1'
|
compile 'com.jakewharton:butterknife:8.5.1'
|
||||||
compile 'com.github.clans:fab:1.6.4'
|
compile 'com.github.clans:fab:1.6.4'
|
||||||
compile 'com.thoughtbot:expandablerecyclerview:1.4'
|
compile 'com.thoughtbot:expandablerecyclerview:1.4'
|
||||||
|
@@ -1,21 +1,20 @@
|
|||||||
#!/system/bin/sh
|
|
||||||
|
|
||||||
[ -z $BOOTMODE ] && BOOTMODE=false
|
[ -z $BOOTMODE ] && BOOTMODE=false
|
||||||
TMPDIR=/tmp
|
|
||||||
($BOOTMODE) && TMPDIR=/dev/tmp
|
|
||||||
|
|
||||||
BINDIR=/data/magisk
|
# This path should work in any cases
|
||||||
CHROMEDIR=$BINDIR/chromeos
|
TMPDIR=/dev/tmp
|
||||||
|
|
||||||
NEWBOOT=$TMPDIR/boottmp/new-boot.img
|
BOOTTMP=$TMPDIR/boottmp
|
||||||
UNPACKDIR=$TMPDIR/boottmp/bootunpack
|
MAGISKBIN=/data/magisk
|
||||||
RAMDISK=$TMPDIR/boottmp/ramdisk
|
CHROMEDIR=$MAGISKBIN/chromeos
|
||||||
|
|
||||||
SYSTEMLIB=/system/lib
|
SYSTEMLIB=/system/lib
|
||||||
[ -d /system/lib64 ] && SYSTEMLIB=/system/lib64
|
[ -d /system/lib64 ] && SYSTEMLIB=/system/lib64
|
||||||
|
|
||||||
ui_print() {
|
# Default permissions
|
||||||
echo "$1"
|
umask 022
|
||||||
|
|
||||||
|
ui_print_wrapper() {
|
||||||
|
type ui_print >/dev/null && ui_print "$1" || echo "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
grep_prop() {
|
grep_prop() {
|
||||||
@@ -25,7 +24,7 @@ grep_prop() {
|
|||||||
if [ -z "$FILES" ]; then
|
if [ -z "$FILES" ]; then
|
||||||
FILES='/system/build.prop'
|
FILES='/system/build.prop'
|
||||||
fi
|
fi
|
||||||
cat $FILES 2>/dev/null | sed -n $REGEX | head -n 1
|
cat $FILES 2>/dev/null | sed -n "$REGEX" | head -n 1
|
||||||
}
|
}
|
||||||
|
|
||||||
find_boot_image() {
|
find_boot_image() {
|
||||||
@@ -42,109 +41,93 @@ find_boot_image() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
unpack_boot() {
|
# Environments
|
||||||
rm -rf $UNPACKDIR $RAMDISK 2>/dev/null
|
|
||||||
mkdir -p $UNPACKDIR
|
|
||||||
mkdir -p $RAMDISK
|
|
||||||
cd $UNPACKDIR
|
|
||||||
LD_LIBRARY_PATH=$SYSTEMLIB $BINDIR/bootimgtools --extract $1
|
|
||||||
|
|
||||||
cd $RAMDISK
|
|
||||||
$BINDIR/busybox gunzip -c < $UNPACKDIR/ramdisk.gz | cpio -i
|
|
||||||
}
|
|
||||||
|
|
||||||
repack_boot() {
|
|
||||||
cd $RAMDISK
|
|
||||||
find . | cpio -o -H newc 2>/dev/null | gzip -9 > $UNPACKDIR/ramdisk.gz
|
|
||||||
cd $UNPACKDIR
|
|
||||||
LD_LIBRARY_PATH=$SYSTEMLIB $BINDIR/bootimgtools --repack $BOOTIMAGE
|
|
||||||
if [ -f chromeos ]; then
|
|
||||||
echo " " > config
|
|
||||||
echo " " > bootloader
|
|
||||||
LD_LIBRARY_PATH=$SYSTEMLIB $CHROMEDIR/futility vbutil_kernel --pack new-boot.img.signed --keyblock $CHROMEDIR/kernel.keyblock --signprivate $CHROMEDIR/kernel_data_key.vbprivk --version 1 --vmlinuz new-boot.img --config config --arch arm --bootloader bootloader --flags 0x1
|
|
||||||
rm -f new-boot.img
|
|
||||||
mv new-boot.img.signed new-boot.img
|
|
||||||
fi
|
|
||||||
if ($SAMSUNG); then
|
|
||||||
SAMSUNG_CHECK=$(cat new-boot.img | grep SEANDROIDENFORCE)
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -n "SEANDROIDENFORCE" >> new-boot.img
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if ($LGE_G); then
|
|
||||||
# Prevent secure boot error on LG G2/G3.
|
|
||||||
# Just for know, It's a pattern which bootloader verifies at boot. Thanks to LG hackers.
|
|
||||||
echo -n -e "\x41\xa9\xe4\x67\x74\x4d\x1d\x1b\xa4\x29\xf2\xec\xea\x65\x52\x79" >> new-boot.img
|
|
||||||
fi
|
|
||||||
mv new-boot.img $NEWBOOT
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set permissions
|
# Set permissions
|
||||||
chmod -R 755 $CHROMEDIR/futility $BINDIR
|
chmod -R 755 $CHROMEDIR/futility $MAGISKBIN 2>/dev/null
|
||||||
|
# Temporary busybox for installation
|
||||||
|
mkdir -p $TMPDIR/busybox
|
||||||
|
$MAGISKBIN/busybox --install -s $TMPDIR/busybox
|
||||||
|
rm -f $TMPDIR/busybox/su $TMPDIR/busybox/sh $TMPDIR/busybox/reboot
|
||||||
|
PATH=$TMPDIR/busybox:$PATH
|
||||||
|
|
||||||
# Find the boot image
|
# Find the boot image
|
||||||
find_boot_image
|
find_boot_image
|
||||||
if [ -z "$BOOTIMAGE" ]; then
|
if [ -z "$BOOTIMAGE" ]; then
|
||||||
ui_print "! Unable to detect boot image"
|
ui_print_wrapper "! Unable to detect boot image"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ui_print "- Found Boot Image: $BOOTIMAGE"
|
ui_print_wrapper "- Found Boot Image: $BOOTIMAGE"
|
||||||
|
|
||||||
# Detect special vendors
|
rm -rf $BOOTTMP 2>/dev/null
|
||||||
SAMSUNG=false
|
mkdir -p $BOOTTMP
|
||||||
SAMSUNG_CHECK=$(cat /system/build.prop | grep "ro.build.fingerprint=" | grep -i "samsung")
|
cd $BOOTTMP
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
SAMSUNG=true
|
ui_print_wrapper "- Unpacking boot image"
|
||||||
fi
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --unpack $BOOTIMAGE
|
||||||
LGE_G=false
|
if [ $? -ne 0 ]; then
|
||||||
RBRAND=$(grep_prop ro.product.brand)
|
ui_print_wrapper "! Unable to unpack boot image"
|
||||||
RMODEL=$(grep_prop ro.product.device)
|
exit 1
|
||||||
if [ "$RBRAND" = "lge" ] || [ "$RBRAND" = "LGE" ]; then
|
|
||||||
if [ "$RMODEL" = "*D80*" ] ||
|
|
||||||
[ "$RMODEL" = "*S98*" ] ||
|
|
||||||
[ "$RMODEL" = "*D85*" ] ||
|
|
||||||
[ "$RMODEL" = "*F40*" ]; then
|
|
||||||
LGE_G=true
|
|
||||||
ui_print "! Bump device detected"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# First unpack the boot image
|
# Update our previous backup to new format if exists
|
||||||
unpack_boot $BOOTIMAGE
|
if [ -f /data/stock_boot.img ]; then
|
||||||
|
SHA1=`LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --sha1 /data/stock_boot.img | tail -n 1`
|
||||||
|
STOCKDUMP=/data/stock_boot_${SHA1}.img
|
||||||
|
mv /data/stock_boot.img $STOCKDUMP
|
||||||
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --compress $STOCKDUMP
|
||||||
|
fi
|
||||||
|
|
||||||
SUPERSU=false
|
# Detect boot image state
|
||||||
[ -f sbin/launch_daemonsu.sh ] && SUPERSU=true
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --cpio-test ramdisk.cpio
|
||||||
|
case $? in
|
||||||
if ($SUPERSU); then
|
0 )
|
||||||
ui_print "- SuperSU patched image detected"
|
ui_print_wrapper "! Magisk is not installed!"
|
||||||
rm -f magisk sbin/init.magisk.rc sbin/magic_mask.sh
|
ui_print_wrapper "! Nothing to uninstall"
|
||||||
repack_boot
|
exit
|
||||||
else
|
;;
|
||||||
if [ -f /data/stock_boot.img ]; then
|
1 )
|
||||||
ui_print "- Boot image backup found!"
|
# Find SHA1 of stock boot image
|
||||||
NEWBOOT=/data/stock_boot.img
|
if [ -z $SHA1 ]; then
|
||||||
else
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --cpio-extract ramdisk.cpio init.magisk.rc init.magisk.rc
|
||||||
ui_print "! Boot image backup unavailable"
|
SHA1=`grep_prop "# STOCKSHA1" init.magisk.rc`
|
||||||
if [ -d ".backup" ]; then
|
[ ! -z $SHA1 ] && STOCKDUMP=/data/stock_boot_${SHA1}.img
|
||||||
ui_print "- Restoring ramdisk with backup"
|
rm -f init.magisk.rc
|
||||||
cp -af .backup/. .
|
|
||||||
fi
|
fi
|
||||||
rm -f magisk sbin/init.magisk.rc sbin/magic_mask.sh
|
if [ -f ${STOCKDUMP}.gz ]; then
|
||||||
repack_boot
|
ui_print_wrapper "- Boot image backup found!"
|
||||||
fi
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --decompress ${STOCKDUMP}.gz stock_boot.img
|
||||||
|
else
|
||||||
|
ui_print_wrapper "! Boot image backup unavailable"
|
||||||
|
ui_print_wrapper "- Restoring ramdisk with backup"
|
||||||
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --cpio-restore ramdisk.cpio
|
||||||
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --repack $BOOTIMAGE stock_boot.img
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
2 )
|
||||||
|
ui_print_wrapper "- SuperSU patched image detected"
|
||||||
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --cpio-restore ramdisk.cpio
|
||||||
|
LD_LIBRARY_PATH=$SYSTEMLIB $MAGISKBIN/magiskboot --repack $BOOTIMAGE stock_boot.img
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Sign chromeos boot
|
||||||
|
if [ -f chromeos ]; then
|
||||||
|
echo > config
|
||||||
|
echo > bootloader
|
||||||
|
LD_LIBRARY_PATH=$SYSTEMLIB $CHROMEDIR/futility vbutil_kernel --pack stock_boot.img.signed --keyblock $CHROMEDIR/kernel.keyblock --signprivate $CHROMEDIR/kernel_data_key.vbprivk --version 1 --vmlinuz stock_boot.img --config config --arch arm --bootloader bootloader --flags 0x1
|
||||||
|
rm -f stock_boot.img
|
||||||
|
mv stock_boot.img.signed stock_boot.img
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chmod 644 $NEWBOOT
|
ui_print_wrapper "- Flashing stock/reverted image"
|
||||||
|
|
||||||
ui_print "- Flashing stock/reverted image"
|
|
||||||
[ ! -L "$BOOTIMAGE" ] && dd if=/dev/zero of=$BOOTIMAGE bs=4096 2>/dev/null
|
[ ! -L "$BOOTIMAGE" ] && dd if=/dev/zero of=$BOOTIMAGE bs=4096 2>/dev/null
|
||||||
dd if=$NEWBOOT of=$BOOTIMAGE bs=4096
|
dd if=stock_boot.img of=$BOOTIMAGE bs=4096
|
||||||
|
|
||||||
ui_print "- Removing Magisk files"
|
ui_print_wrapper "- Removing Magisk files"
|
||||||
rm -rf /cache/magisk.log /cache/last_magisk.log /cache/magiskhide.log /cache/.disable_magisk \
|
rm -rf /cache/magisk.log /cache/last_magisk.log /cache/magiskhide.log /cache/.disable_magisk \
|
||||||
/cache/magisk /cache/magisk_merge /cache/magisk_mount /cache/unblock /cache/magisk_uninstaller.sh \
|
/cache/magisk /cache/magisk_merge /cache/magisk_mount /cache/unblock /cache/magisk_uninstaller.sh \
|
||||||
/data/Magisk.apk /data/magisk.apk /data/magisk.img /data/magisk_merge.img \
|
/data/Magisk.apk /data/magisk.apk /data/magisk.img /data/magisk_merge.img \
|
||||||
/data/busybox /data/magisk /data/custom_ramdisk_patch.sh 2>/dev/null
|
/data/busybox /data/magisk /data/custom_ramdisk_patch.sh 2>/dev/null
|
||||||
|
|
||||||
($BOOTMODE) && reboot
|
$BOOTMODE && reboot
|
||||||
|
@@ -6,6 +6,7 @@ import android.net.Uri;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.CountDownTimer;
|
import android.os.CountDownTimer;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.design.widget.Snackbar;
|
||||||
import android.support.v7.widget.CardView;
|
import android.support.v7.widget.CardView;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -19,6 +20,7 @@ import android.widget.TextView;
|
|||||||
import com.topjohnwu.magisk.asyncs.ProcessMagiskZip;
|
import com.topjohnwu.magisk.asyncs.ProcessMagiskZip;
|
||||||
import com.topjohnwu.magisk.components.AlertDialogBuilder;
|
import com.topjohnwu.magisk.components.AlertDialogBuilder;
|
||||||
import com.topjohnwu.magisk.components.Fragment;
|
import com.topjohnwu.magisk.components.Fragment;
|
||||||
|
import com.topjohnwu.magisk.components.SnackbarMaker;
|
||||||
import com.topjohnwu.magisk.receivers.DownloadReceiver;
|
import com.topjohnwu.magisk.receivers.DownloadReceiver;
|
||||||
import com.topjohnwu.magisk.utils.CallbackEvent;
|
import com.topjohnwu.magisk.utils.CallbackEvent;
|
||||||
import com.topjohnwu.magisk.utils.Shell;
|
import com.topjohnwu.magisk.utils.Shell;
|
||||||
@@ -34,6 +36,7 @@ import java.util.Locale;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
import butterknife.OnClick;
|
||||||
import butterknife.Unbinder;
|
import butterknife.Unbinder;
|
||||||
|
|
||||||
public class InstallFragment extends Fragment implements CallbackEvent.Listener<Void> {
|
public class InstallFragment extends Fragment implements CallbackEvent.Listener<Void> {
|
||||||
@@ -41,108 +44,130 @@ public class InstallFragment extends Fragment implements CallbackEvent.Listener<
|
|||||||
|
|
||||||
private static final String UNINSTALLER = "magisk_uninstaller.sh";
|
private static final String UNINSTALLER = "magisk_uninstaller.sh";
|
||||||
|
|
||||||
private Unbinder unbinder;
|
|
||||||
@BindView(R.id.current_version_title) TextView currentVersionTitle;
|
@BindView(R.id.current_version_title) TextView currentVersionTitle;
|
||||||
@BindView(R.id.install_title) TextView installTitle;
|
@BindView(R.id.install_title) TextView installTitle;
|
||||||
@BindView(R.id.block_spinner) Spinner spinner;
|
@BindView(R.id.block_spinner) Spinner spinner;
|
||||||
@BindView(R.id.detect_bootimage) Button detectButton;
|
@BindView(R.id.detect_bootimage) Button detectButton;
|
||||||
@BindView(R.id.flash_button) CardView flashButton;
|
@BindView(R.id.install_button) CardView installButton;
|
||||||
|
@BindView(R.id.install_text) TextView installText;
|
||||||
@BindView(R.id.uninstall_button) CardView uninstallButton;
|
@BindView(R.id.uninstall_button) CardView uninstallButton;
|
||||||
@BindView(R.id.keep_force_enc) CheckBox keepEncChkbox;
|
@BindView(R.id.keep_force_enc) CheckBox keepEncChkbox;
|
||||||
@BindView(R.id.keep_verity) CheckBox keepVerityChkbox;
|
@BindView(R.id.keep_verity) CheckBox keepVerityChkbox;
|
||||||
|
|
||||||
|
@OnClick(R.id.detect_bootimage)
|
||||||
|
public void toAutoDetect() {
|
||||||
|
if (magiskManager.bootBlock != null) {
|
||||||
|
spinner.setSelection(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnClick(R.id.install_button)
|
||||||
|
public void install() {
|
||||||
|
String bootImage = null;
|
||||||
|
if (magiskManager.blockList != null) {
|
||||||
|
int idx = spinner.getSelectedItemPosition();
|
||||||
|
if (magiskManager.bootBlock != null) {
|
||||||
|
if (idx > 0) {
|
||||||
|
bootImage = magiskManager.blockList.get(idx - 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (idx > 0) {
|
||||||
|
bootImage = magiskManager.blockList.get(idx - 1);
|
||||||
|
} else {
|
||||||
|
SnackbarMaker.make(getActivity(), R.string.manual_boot_image, Snackbar.LENGTH_LONG);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final String finalBootImage = bootImage;
|
||||||
|
String filename = "Magisk-v" + magiskManager.remoteMagiskVersion + ".zip";
|
||||||
|
new AlertDialogBuilder(getActivity())
|
||||||
|
.setTitle(getString(R.string.repo_install_title, getString(R.string.magisk)))
|
||||||
|
.setMessage(getString(R.string.repo_install_msg, filename))
|
||||||
|
.setCancelable(true)
|
||||||
|
.setPositiveButton(Shell.rootAccess() ? R.string.install : R.string.download,
|
||||||
|
(dialogInterface, i) -> Utils.dlAndReceive(
|
||||||
|
getActivity(),
|
||||||
|
new DownloadReceiver() {
|
||||||
|
private String boot = finalBootImage;
|
||||||
|
private boolean enc = keepEncChkbox.isChecked();
|
||||||
|
private boolean verity = keepVerityChkbox.isChecked();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDownloadDone(Uri uri) {
|
||||||
|
new ProcessMagiskZip(getActivity(), uri, boot, enc, verity).exec();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
magiskManager.magiskLink,
|
||||||
|
Utils.getLegalFilename(filename)))
|
||||||
|
.setNeutralButton(R.string.release_notes, (dialog, which) -> {
|
||||||
|
if (magiskManager.releaseNoteLink != null) {
|
||||||
|
Intent openReleaseNoteLink = new Intent(Intent.ACTION_VIEW, Uri.parse(magiskManager.releaseNoteLink));
|
||||||
|
openReleaseNoteLink.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
magiskManager.startActivity(openReleaseNoteLink);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.no_thanks, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnClick(R.id.uninstall_button)
|
||||||
|
public void uninstall() {
|
||||||
|
new AlertDialogBuilder(getActivity())
|
||||||
|
.setTitle(R.string.uninstall_magisk_title)
|
||||||
|
.setMessage(R.string.uninstall_magisk_msg)
|
||||||
|
.setPositiveButton(R.string.yes, (dialogInterface, i) -> {
|
||||||
|
try {
|
||||||
|
InputStream in = magiskManager.getAssets().open(UNINSTALLER);
|
||||||
|
File uninstaller = new File(magiskManager.getCacheDir(), UNINSTALLER);
|
||||||
|
FileOutputStream out = new FileOutputStream(uninstaller);
|
||||||
|
byte[] bytes = new byte[1024];
|
||||||
|
int read;
|
||||||
|
while ((read = in.read(bytes)) != -1) {
|
||||||
|
out.write(bytes, 0, read);
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
ProgressDialog progress = new ProgressDialog(getActivity());
|
||||||
|
progress.setTitle(R.string.reboot);
|
||||||
|
progress.show();
|
||||||
|
new CountDownTimer(5000, 1000) {
|
||||||
|
@Override
|
||||||
|
public void onTick(long millisUntilFinished) {
|
||||||
|
progress.setMessage(getString(R.string.reboot_countdown, millisUntilFinished / 1000));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFinish() {
|
||||||
|
progress.setMessage(getString(R.string.reboot_countdown, 0));
|
||||||
|
Shell.su(true, "mv -f " + uninstaller + " /cache/" + UNINSTALLER,
|
||||||
|
"reboot");
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.no_thanks, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Unbinder unbinder;
|
||||||
|
private MagiskManager magiskManager;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_install, container, false);
|
View v = inflater.inflate(R.layout.fragment_install, container, false);
|
||||||
unbinder = ButterKnife.bind(this, v);
|
unbinder = ButterKnife.bind(this, v);
|
||||||
detectButton.setOnClickListener(v1 -> toAutoDetect());
|
magiskManager = getApplication();
|
||||||
if (getApplication().magiskVersion < 0)
|
if (magiskManager.magiskVersion < 0) {
|
||||||
currentVersionTitle.setText(getString(R.string.current_magisk_title, getString(R.string.version_none)));
|
currentVersionTitle.setText(getString(R.string.current_magisk_title, getString(R.string.version_none)));
|
||||||
else
|
|
||||||
currentVersionTitle.setText(getString(R.string.current_magisk_title, "v" + getApplication().magiskVersionString));
|
|
||||||
installTitle.setText(getString(R.string.install_magisk_title, "v" + String.format(Locale.US, "%.1f", getApplication().remoteMagiskVersion)));
|
|
||||||
flashButton.setOnClickListener(v1 -> {
|
|
||||||
String bootImage;
|
|
||||||
if (getApplication().bootBlock != null) {
|
|
||||||
if (spinner.getSelectedItemPosition() > 0)
|
|
||||||
bootImage = getApplication().blockList.get(spinner.getSelectedItemPosition() - 1);
|
|
||||||
else
|
|
||||||
bootImage = getApplication().bootBlock;
|
|
||||||
} else {
|
|
||||||
bootImage = getApplication().blockList.get(spinner.getSelectedItemPosition());
|
|
||||||
}
|
|
||||||
String filename = "Magisk-v" + getApplication().remoteMagiskVersion + ".zip";
|
|
||||||
new AlertDialogBuilder(getActivity())
|
|
||||||
.setTitle(getString(R.string.repo_install_title, getString(R.string.magisk)))
|
|
||||||
.setMessage(getString(R.string.repo_install_msg, filename))
|
|
||||||
.setCancelable(true)
|
|
||||||
.setPositiveButton(R.string.install, (dialogInterface, i) -> Utils.dlAndReceive(
|
|
||||||
getActivity(),
|
|
||||||
new DownloadReceiver() {
|
|
||||||
private String boot = bootImage;
|
|
||||||
private boolean enc = keepEncChkbox.isChecked();
|
|
||||||
private boolean verity = keepVerityChkbox.isChecked();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDownloadDone(Uri uri) {
|
|
||||||
new ProcessMagiskZip(getActivity(), uri, boot, enc, verity).exec();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getApplication().magiskLink,
|
|
||||||
Utils.getLegalFilename(filename)))
|
|
||||||
.setNeutralButton(R.string.release_notes, (dialog, which) -> {
|
|
||||||
getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getApplication().releaseNoteLink)));
|
|
||||||
})
|
|
||||||
.setNegativeButton(R.string.no_thanks, null)
|
|
||||||
.show();
|
|
||||||
});
|
|
||||||
if (getApplication().magiskVersion < 10.3) {
|
|
||||||
uninstallButton.setVisibility(View.GONE);
|
|
||||||
} else {
|
} else {
|
||||||
uninstallButton.setOnClickListener(vi -> {
|
currentVersionTitle.setText(getString(R.string.current_magisk_title, "v" + magiskManager.magiskVersionString));
|
||||||
new AlertDialogBuilder(getActivity())
|
|
||||||
.setTitle(R.string.uninstall_magisk_title)
|
|
||||||
.setMessage(R.string.uninstall_magisk_msg)
|
|
||||||
.setPositiveButton(R.string.yes, (dialogInterface, i) -> {
|
|
||||||
try {
|
|
||||||
InputStream in = getActivity().getAssets().open(UNINSTALLER);
|
|
||||||
File uninstaller = new File(getActivity().getCacheDir().getAbsolutePath() + "/" + UNINSTALLER);
|
|
||||||
FileOutputStream out = new FileOutputStream(uninstaller);
|
|
||||||
byte[] bytes = new byte[1024];
|
|
||||||
int read;
|
|
||||||
while ((read = in.read(bytes)) != -1)
|
|
||||||
out.write(bytes, 0, read);
|
|
||||||
in.close();
|
|
||||||
out.close();
|
|
||||||
ProgressDialog progress = new ProgressDialog(getActivity());
|
|
||||||
progress.setTitle(R.string.reboot);
|
|
||||||
progress.show();
|
|
||||||
new CountDownTimer(5000, 1000) {
|
|
||||||
@Override
|
|
||||||
public void onTick(long millisUntilFinished) {
|
|
||||||
progress.setMessage(getString(R.string.reboot_countdown, millisUntilFinished / 1000));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFinish() {
|
|
||||||
progress.setMessage(getString(R.string.reboot_countdown, 0));
|
|
||||||
Shell.su(true, "cp -af " + uninstaller + " /cache/" + UNINSTALLER,
|
|
||||||
"reboot");
|
|
||||||
}
|
|
||||||
}.start();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setNegativeButton(R.string.no_thanks, null)
|
|
||||||
.show();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
installTitle.setText(getString(R.string.install_magisk_title, "v" + String.format(Locale.US, "%.1f", magiskManager.remoteMagiskVersion)));
|
||||||
|
|
||||||
if (getApplication().blockDetectionDone.isTriggered) {
|
updateUI();
|
||||||
updateUI();
|
|
||||||
}
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,19 +177,33 @@ public class InstallFragment extends Fragment implements CallbackEvent.Listener<
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateUI() {
|
private void updateUI() {
|
||||||
List<String> items = new ArrayList<>(getApplication().blockList);
|
if (magiskManager.blockList == null || !Shell.rootAccess()) {
|
||||||
if (getApplication().bootBlock != null)
|
uninstallButton.setVisibility(View.GONE);
|
||||||
items.add(0, getString(R.string.auto_detect, getApplication().bootBlock));
|
installText.setText(R.string.download);
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
|
detectButton.setEnabled(false);
|
||||||
android.R.layout.simple_spinner_item, items);
|
keepEncChkbox.setEnabled(false);
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
keepVerityChkbox.setEnabled(false);
|
||||||
spinner.setAdapter(adapter);
|
spinner.setEnabled(false);
|
||||||
toAutoDetect();
|
} else {
|
||||||
}
|
uninstallButton.setVisibility(magiskManager.magiskVersion > 10.3 ? View.VISIBLE : View.GONE);
|
||||||
|
installText.setText(R.string.download_install);
|
||||||
|
detectButton.setEnabled(true);
|
||||||
|
keepEncChkbox.setEnabled(true);
|
||||||
|
keepVerityChkbox.setEnabled(true);
|
||||||
|
spinner.setEnabled(true);
|
||||||
|
|
||||||
private void toAutoDetect() {
|
List<String> items = new ArrayList<>();
|
||||||
if (getApplication().bootBlock != null) {
|
if (magiskManager.bootBlock != null) {
|
||||||
spinner.setSelection(0);
|
items.add(getString(R.string.auto_detect, magiskManager.bootBlock));
|
||||||
|
} else {
|
||||||
|
items.add(getString(R.string.cannot_auto_detect));
|
||||||
|
}
|
||||||
|
items.addAll(magiskManager.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);
|
||||||
|
toAutoDetect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,12 +211,12 @@ public class InstallFragment extends Fragment implements CallbackEvent.Listener<
|
|||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
getActivity().setTitle(R.string.install);
|
getActivity().setTitle(R.string.install);
|
||||||
getApplication().blockDetectionDone.register(this);
|
magiskManager.blockDetectionDone.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
getApplication().blockDetectionDone.unRegister(this);
|
magiskManager.blockDetectionDone.unRegister(this);
|
||||||
super.onStop();
|
super.onStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -71,8 +71,9 @@ public class MagiskHideFragment extends Fragment implements CallbackEvent.Listen
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (getApplication().magiskHideDone.isTriggered)
|
if (getApplication().magiskHideDone.isTriggered) {
|
||||||
onTrigger(getApplication().magiskHideDone);
|
onTrigger(getApplication().magiskHideDone);
|
||||||
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
@@ -162,8 +162,9 @@ public class MagiskLogFragment extends Fragment {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
|
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Calendar now = Calendar.getInstance();
|
Calendar now = Calendar.getInstance();
|
||||||
String filename = String.format(
|
String filename = String.format(
|
||||||
@@ -175,8 +176,9 @@ public class MagiskLogFragment extends Fragment {
|
|||||||
targetFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MagiskManager/" + filename);
|
targetFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MagiskManager/" + filename);
|
||||||
|
|
||||||
if ((!targetFile.getParentFile().exists() && !targetFile.getParentFile().mkdirs())
|
if ((!targetFile.getParentFile().exists() && !targetFile.getParentFile().mkdirs())
|
||||||
|| (targetFile.exists() && !targetFile.delete()))
|
|| (targetFile.exists() && !targetFile.delete())) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
List<String> in = Utils.readFile(MAGISK_LOG);
|
List<String> in = Utils.readFile(MAGISK_LOG);
|
||||||
|
|
||||||
@@ -214,10 +216,11 @@ public class MagiskLogFragment extends Fragment {
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
bool = (boolean) o;
|
bool = (boolean) o;
|
||||||
if (bool)
|
if (bool) {
|
||||||
Toast.makeText(getActivity(), targetFile.toString(), Toast.LENGTH_LONG).show();
|
Toast.makeText(getActivity(), targetFile.toString(), Toast.LENGTH_LONG).show();
|
||||||
else
|
} else {
|
||||||
Toast.makeText(getActivity(), getString(R.string.logs_save_failed), Toast.LENGTH_LONG).show();
|
Toast.makeText(getActivity(), getString(R.string.logs_save_failed), Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,6 +25,7 @@ public class MagiskManager extends Application {
|
|||||||
public static final String MAGISK_HIDE_PATH = "/magisk/.core/magiskhide/";
|
public static final String MAGISK_HIDE_PATH = "/magisk/.core/magiskhide/";
|
||||||
public static final String TMP_FOLDER_PATH = "/dev/tmp";
|
public static final String TMP_FOLDER_PATH = "/dev/tmp";
|
||||||
public static final String MAGISK_PATH = "/magisk";
|
public static final String MAGISK_PATH = "/magisk";
|
||||||
|
public static final String INTENT_SECTION = "section";
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
public final CallbackEvent<Void> blockDetectionDone = new CallbackEvent<>();
|
public final CallbackEvent<Void> blockDetectionDone = new CallbackEvent<>();
|
||||||
@@ -62,6 +63,8 @@ public class MagiskManager extends Application {
|
|||||||
|
|
||||||
public boolean magiskHide;
|
public boolean magiskHide;
|
||||||
public boolean isDarkTheme;
|
public boolean isDarkTheme;
|
||||||
|
public boolean updateNotification;
|
||||||
|
public boolean busybox;
|
||||||
public int suRequestTimeout;
|
public int suRequestTimeout;
|
||||||
public int suLogTimeout = 14;
|
public int suLogTimeout = 14;
|
||||||
public int suAccessState;
|
public int suAccessState;
|
||||||
@@ -91,6 +94,7 @@ public class MagiskManager extends Application {
|
|||||||
devLogging = prefs.getBoolean("developer_logging", false);
|
devLogging = prefs.getBoolean("developer_logging", false);
|
||||||
shellLogging = prefs.getBoolean("shell_logging", false);
|
shellLogging = prefs.getBoolean("shell_logging", false);
|
||||||
magiskHide = prefs.getBoolean("magiskhide", false);
|
magiskHide = prefs.getBoolean("magiskhide", false);
|
||||||
|
updateNotification = prefs.getBoolean("notification", true);
|
||||||
// Always start a new root shell manually, just for safety
|
// Always start a new root shell manually, just for safety
|
||||||
Shell.init();
|
Shell.init();
|
||||||
updateMagiskInfo();
|
updateMagiskInfo();
|
||||||
@@ -100,7 +104,8 @@ public class MagiskManager extends Application {
|
|||||||
prefs.edit()
|
prefs.edit()
|
||||||
.putBoolean("dark_theme", isDarkTheme)
|
.putBoolean("dark_theme", isDarkTheme)
|
||||||
.putBoolean("magiskhide", magiskHide)
|
.putBoolean("magiskhide", magiskHide)
|
||||||
.putBoolean("busybox", Utils.commandExists("busybox"))
|
.putBoolean("notification", updateNotification)
|
||||||
|
.putBoolean("busybox", busybox)
|
||||||
.putBoolean("hosts", new File("/magisk/.core/hosts").exists())
|
.putBoolean("hosts", new File("/magisk/.core/hosts").exists())
|
||||||
.putBoolean("disable", Utils.itemExist(MAGISK_DISABLE_FILE))
|
.putBoolean("disable", Utils.itemExist(MAGISK_DISABLE_FILE))
|
||||||
.putString("su_request_timeout", String.valueOf(suRequestTimeout))
|
.putString("su_request_timeout", String.valueOf(suRequestTimeout))
|
||||||
@@ -124,9 +129,9 @@ public class MagiskManager extends Application {
|
|||||||
}
|
}
|
||||||
if (isSuClient) {
|
if (isSuClient) {
|
||||||
ret = Shell.sh("getprop persist.sys.root_access");
|
ret = Shell.sh("getprop persist.sys.root_access");
|
||||||
if (Utils.isValidShellResponse(ret))
|
if (Utils.isValidShellResponse(ret)) {
|
||||||
suAccessState = Integer.parseInt(ret.get(0));
|
suAccessState = Integer.parseInt(ret.get(0));
|
||||||
else {
|
} else {
|
||||||
Shell.su(true, "setprop persist.sys.root_access 3");
|
Shell.su(true, "setprop persist.sys.root_access 3");
|
||||||
suAccessState = 3;
|
suAccessState = 3;
|
||||||
}
|
}
|
||||||
@@ -146,6 +151,12 @@ public class MagiskManager extends Application {
|
|||||||
magiskVersion = Double.POSITIVE_INFINITY;
|
magiskVersion = Double.POSITIVE_INFINITY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ret = Shell.sh("getprop persist.magisk.busybox");
|
||||||
|
try {
|
||||||
|
busybox = Utils.isValidShellResponse(ret) && Integer.parseInt(ret.get(0)) != 0;
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
busybox = false;
|
||||||
|
}
|
||||||
ret = Shell.sh("getprop ro.magisk.disable");
|
ret = Shell.sh("getprop ro.magisk.disable");
|
||||||
try {
|
try {
|
||||||
disabled = Utils.isValidShellResponse(ret) && Integer.parseInt(ret.get(0)) != 0;
|
disabled = Utils.isValidShellResponse(ret) && Integer.parseInt(ret.get(0)) != 0;
|
||||||
@@ -159,8 +170,9 @@ public class MagiskManager extends Application {
|
|||||||
magiskHideStarted = false;
|
magiskHideStarted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!magiskHide && magiskHideStarted)
|
if (magiskHideStarted) {
|
||||||
magiskHide = true;
|
magiskHide = true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,8 +29,6 @@ import butterknife.ButterKnife;
|
|||||||
public class MainActivity extends Activity
|
public class MainActivity extends Activity
|
||||||
implements NavigationView.OnNavigationItemSelectedListener, CallbackEvent.Listener<Void> {
|
implements NavigationView.OnNavigationItemSelectedListener, CallbackEvent.Listener<Void> {
|
||||||
|
|
||||||
public static final String SECTION = "section";
|
|
||||||
|
|
||||||
private final Handler mDrawerHandler = new Handler();
|
private final Handler mDrawerHandler = new Handler();
|
||||||
private SharedPreferences prefs;
|
private SharedPreferences prefs;
|
||||||
private int mDrawerItem;
|
private int mDrawerItem;
|
||||||
@@ -79,10 +77,11 @@ public class MainActivity extends Activity
|
|||||||
toggle.syncState();
|
toggle.syncState();
|
||||||
|
|
||||||
if (savedInstanceState == null)
|
if (savedInstanceState == null)
|
||||||
navigate(getIntent().getStringExtra(SECTION));
|
navigate(getIntent().getStringExtra(MagiskManager.INTENT_SECTION));
|
||||||
|
|
||||||
navigationView.setNavigationItemSelectedListener(this);
|
navigationView.setNavigationItemSelectedListener(this);
|
||||||
getApplicationContext().reloadMainActivity.register(this);
|
getApplicationContext().reloadMainActivity.register(this);
|
||||||
|
getApplicationContext().updateCheckDone.register(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,18 +94,19 @@ public class MainActivity extends Activity
|
|||||||
@Override
|
@Override
|
||||||
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
super.onRestoreInstanceState(savedInstanceState);
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
navigate(savedInstanceState.getInt(SECTION, R.id.status));
|
navigate(savedInstanceState.getInt(MagiskManager.INTENT_SECTION, R.id.status));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putInt(SECTION, mDrawerItem);
|
outState.putInt(MagiskManager.INTENT_SECTION, mDrawerItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
getApplicationContext().reloadMainActivity.unRegister(this);
|
getApplicationContext().reloadMainActivity.unRegister(this);
|
||||||
|
getApplicationContext().updateCheckDone.unRegister(this);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,19 +128,25 @@ public class MainActivity extends Activity
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTrigger(CallbackEvent<Void> event) {
|
public void onTrigger(CallbackEvent<Void> event) {
|
||||||
recreate();
|
if (event == getApplicationContext().reloadMainActivity) {
|
||||||
|
recreate();
|
||||||
|
} else if (event == getApplicationContext().updateCheckDone) {
|
||||||
|
checkHideSection();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkHideSection() {
|
private void checkHideSection() {
|
||||||
Menu menu = navigationView.getMenu();
|
Menu menu = navigationView.getMenu();
|
||||||
if (Shell.rootAccess()) {
|
menu.findItem(R.id.magiskhide).setVisible(
|
||||||
menu.findItem(R.id.magiskhide).setVisible(
|
Shell.rootAccess() && getApplicationContext().magiskVersion >= 8
|
||||||
getApplicationContext().magiskVersion >= 8 && prefs.getBoolean("magiskhide", false));
|
&& prefs.getBoolean("magiskhide", false));
|
||||||
menu.findItem(R.id.modules).setVisible(getApplicationContext().magiskVersion >= 4);
|
menu.findItem(R.id.modules).setVisible(
|
||||||
menu.findItem(R.id.downloads).setVisible(getApplicationContext().magiskVersion >= 4);
|
Shell.rootAccess() && getApplicationContext().magiskVersion >= 4);
|
||||||
menu.findItem(R.id.log).setVisible(true);
|
menu.findItem(R.id.downloads).setVisible(
|
||||||
menu.findItem(R.id.superuser).setVisible(getApplicationContext().isSuClient);
|
Shell.rootAccess() && getApplicationContext().magiskVersion >= 4);
|
||||||
}
|
menu.findItem(R.id.log).setVisible(Shell.rootAccess());
|
||||||
|
menu.findItem(R.id.superuser).setVisible(
|
||||||
|
Shell.rootAccess() && getApplicationContext().isSuClient);
|
||||||
menu.findItem(R.id.install).setVisible(getApplicationContext().remoteMagiskVersion > 0);
|
menu.findItem(R.id.install).setVisible(getApplicationContext().remoteMagiskVersion > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,6 +187,7 @@ public class MainActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void navigate(int itemId) {
|
public void navigate(int itemId) {
|
||||||
|
int bak = mDrawerItem;
|
||||||
mDrawerItem = itemId;
|
mDrawerItem = itemId;
|
||||||
navigationView.setCheckedItem(itemId);
|
navigationView.setCheckedItem(itemId);
|
||||||
switch (itemId) {
|
switch (itemId) {
|
||||||
@@ -207,9 +214,11 @@ public class MainActivity extends Activity
|
|||||||
break;
|
break;
|
||||||
case R.id.settings:
|
case R.id.settings:
|
||||||
startActivity(new Intent(this, SettingsActivity.class));
|
startActivity(new Intent(this, SettingsActivity.class));
|
||||||
|
mDrawerItem = bak;
|
||||||
break;
|
break;
|
||||||
case R.id.app_about:
|
case R.id.app_about:
|
||||||
startActivity(new Intent(this, AboutActivity.class));
|
startActivity(new Intent(this, AboutActivity.class));
|
||||||
|
mDrawerItem = bak;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -133,10 +133,11 @@ public class ReposFragment extends Fragment implements CallbackEvent.Listener<Vo
|
|||||||
for (Repo repo : getApplication().repoMap.values()) {
|
for (Repo repo : getApplication().repoMap.values()) {
|
||||||
Module module = getApplication().moduleMap.get(repo.getId());
|
Module module = getApplication().moduleMap.get(repo.getId());
|
||||||
if (module != null) {
|
if (module != null) {
|
||||||
if (repo.getVersionCode() > module.getVersionCode())
|
if (repo.getVersionCode() > module.getVersionCode()) {
|
||||||
mUpdateRepos.add(repo);
|
mUpdateRepos.add(repo);
|
||||||
else
|
} else {
|
||||||
mInstalledRepos.add(repo);
|
mInstalledRepos.add(repo);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mOthersRepos.add(repo);
|
mOthersRepos.add(repo);
|
||||||
}
|
}
|
||||||
|
@@ -89,10 +89,6 @@ public class SettingsActivity extends Activity {
|
|||||||
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||||
prefScreen = getPreferenceScreen();
|
prefScreen = getPreferenceScreen();
|
||||||
|
|
||||||
SwitchPreference busybox = (SwitchPreference) findPreference("busybox");
|
|
||||||
SwitchPreference magiskHide = (SwitchPreference) findPreference("magiskhide");
|
|
||||||
SwitchPreference hosts = (SwitchPreference) findPreference("hosts");
|
|
||||||
|
|
||||||
PreferenceCategory magiskCategory = (PreferenceCategory) findPreference("magisk");
|
PreferenceCategory magiskCategory = (PreferenceCategory) findPreference("magisk");
|
||||||
PreferenceCategory suCategory = (PreferenceCategory) findPreference("superuser");
|
PreferenceCategory suCategory = (PreferenceCategory) findPreference("superuser");
|
||||||
|
|
||||||
@@ -112,14 +108,11 @@ public class SettingsActivity extends Activity {
|
|||||||
prefScreen.removePreference(magiskCategory);
|
prefScreen.removePreference(magiskCategory);
|
||||||
prefScreen.removePreference(suCategory);
|
prefScreen.removePreference(suCategory);
|
||||||
} else {
|
} else {
|
||||||
if (!getApplication().isSuClient)
|
if (!getApplication().isSuClient) {
|
||||||
prefScreen.removePreference(suCategory);
|
prefScreen.removePreference(suCategory);
|
||||||
if (getApplication().magiskVersion < 11)
|
}
|
||||||
|
if (getApplication().magiskVersion < 11) {
|
||||||
prefScreen.removePreference(magiskCategory);
|
prefScreen.removePreference(magiskCategory);
|
||||||
if (getApplication().disabled) {
|
|
||||||
busybox.setEnabled(false);
|
|
||||||
magiskHide.setEnabled(false);
|
|
||||||
hosts.setEnabled(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,7 +140,6 @@ public class SettingsActivity extends Activity {
|
|||||||
if (getApplication().isDarkTheme != enabled) {
|
if (getApplication().isDarkTheme != enabled) {
|
||||||
getApplication().isDarkTheme = enabled;
|
getApplication().isDarkTheme = enabled;
|
||||||
getApplication().reloadMainActivity.trigger();
|
getApplication().reloadMainActivity.trigger();
|
||||||
getActivity().finish();
|
|
||||||
getActivity().recreate();
|
getActivity().recreate();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -196,9 +188,12 @@ public class SettingsActivity extends Activity {
|
|||||||
.setPositiveButton(R.string.understand, (dialog, which) -> new MagiskHide().enable())
|
.setPositiveButton(R.string.understand, (dialog, which) -> new MagiskHide().enable())
|
||||||
.setCancelable(false)
|
.setCancelable(false)
|
||||||
.show();
|
.show();
|
||||||
} else new MagiskHide().enable();
|
} else {
|
||||||
} else
|
new MagiskHide().enable();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
new MagiskHide().disable();
|
new MagiskHide().disable();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "hosts":
|
case "hosts":
|
||||||
enabled = prefs.getBoolean("hosts", false);
|
enabled = prefs.getBoolean("hosts", false);
|
||||||
|
@@ -31,7 +31,7 @@ public class SplashActivity extends Activity{
|
|||||||
magiskManager.init();
|
magiskManager.init();
|
||||||
|
|
||||||
// Initialize the update check service, notify every 3 hours
|
// Initialize the update check service, notify every 3 hours
|
||||||
if (!"install".equals(getIntent().getStringExtra(MainActivity.SECTION))) {
|
if (!"install".equals(getIntent().getStringExtra(MagiskManager.INTENT_SECTION))) {
|
||||||
ComponentName service = new ComponentName(magiskManager, UpdateCheckService.class);
|
ComponentName service = new ComponentName(magiskManager, UpdateCheckService.class);
|
||||||
JobInfo jobInfo = new JobInfo.Builder(UPDATE_SERVICE_ID, service)
|
JobInfo jobInfo = new JobInfo.Builder(UPDATE_SERVICE_ID, service)
|
||||||
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
|
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
|
||||||
@@ -44,8 +44,8 @@ public class SplashActivity extends Activity{
|
|||||||
|
|
||||||
// Now fire all async tasks
|
// Now fire all async tasks
|
||||||
new GetBootBlocks(this).exec();
|
new GetBootBlocks(this).exec();
|
||||||
if (magiskManager.magiskHide && !magiskManager.disabled &&
|
if (magiskManager.magiskHide && magiskManager.magiskVersion > 11 &&
|
||||||
magiskManager.magiskVersion > 11 && !magiskManager.magiskHideStarted) {
|
!magiskManager.magiskHideStarted) {
|
||||||
new MagiskHide().enable();
|
new MagiskHide().enable();
|
||||||
}
|
}
|
||||||
new LoadModules(this) {
|
new LoadModules(this) {
|
||||||
@@ -60,8 +60,11 @@ public class SplashActivity extends Activity{
|
|||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Void v) {
|
protected void onPostExecute(Void v) {
|
||||||
super.onPostExecute(v);
|
super.onPostExecute(v);
|
||||||
Intent intent = getIntent().setClass(magiskManager, MainActivity.class)
|
String section = getIntent().getStringExtra(MagiskManager.INTENT_SECTION);
|
||||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
Intent intent = new Intent(magiskManager, MainActivity.class);
|
||||||
|
if (section != null) {
|
||||||
|
intent.putExtra(MagiskManager.INTENT_SECTION, section);
|
||||||
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,6 @@ package com.topjohnwu.magisk;
|
|||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.support.v4.widget.SwipeRefreshLayout;
|
import android.support.v4.widget.SwipeRefreshLayout;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -22,6 +21,7 @@ import com.topjohnwu.magisk.utils.Utils;
|
|||||||
import butterknife.BindColor;
|
import butterknife.BindColor;
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
import butterknife.OnClick;
|
||||||
import butterknife.Unbinder;
|
import butterknife.Unbinder;
|
||||||
|
|
||||||
public class StatusFragment extends Fragment implements CallbackEvent.Listener<Void> {
|
public class StatusFragment extends Fragment implements CallbackEvent.Listener<Void> {
|
||||||
@@ -53,7 +53,24 @@ public class StatusFragment extends Fragment implements CallbackEvent.Listener<V
|
|||||||
@BindColor(R.color.grey500) int colorNeutral;
|
@BindColor(R.color.grey500) int colorNeutral;
|
||||||
@BindColor(R.color.blue500) int colorInfo;
|
@BindColor(R.color.blue500) int colorInfo;
|
||||||
@BindColor(android.R.color.transparent) int trans;
|
@BindColor(android.R.color.transparent) int trans;
|
||||||
int defaultColor;
|
|
||||||
|
@OnClick(R.id.safetyNet_container)
|
||||||
|
public void safetyNet() {
|
||||||
|
safetyNetProgress.setVisibility(View.VISIBLE);
|
||||||
|
safetyNetContainer.setBackgroundColor(trans);
|
||||||
|
safetyNetIcon.setImageResource(0);
|
||||||
|
safetyNetStatusText.setText(R.string.checking_safetyNet_status);
|
||||||
|
Utils.checkSafetyNet(getApplication());
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnClick(R.id.magisk_status_container)
|
||||||
|
public void gotoInstall() {
|
||||||
|
if (getApplication().remoteMagiskVersion > 0) {
|
||||||
|
((MainActivity) getActivity()).navigate(R.id.install);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int defaultColor;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
@@ -83,37 +100,13 @@ public class StatusFragment extends Fragment implements CallbackEvent.Listener<V
|
|||||||
new CheckUpdates(getActivity()).exec();
|
new CheckUpdates(getActivity()).exec();
|
||||||
});
|
});
|
||||||
|
|
||||||
safetyNetContainer.setOnClickListener(view -> {
|
|
||||||
safetyNetProgress.setVisibility(View.VISIBLE);
|
|
||||||
safetyNetContainer.setBackgroundColor(trans);
|
|
||||||
safetyNetIcon.setImageResource(0);
|
|
||||||
safetyNetStatusText.setText(R.string.checking_safetyNet_status);
|
|
||||||
Utils.checkSafetyNet(getApplication());
|
|
||||||
});
|
|
||||||
|
|
||||||
magiskStatusContainer.setOnClickListener(view -> {
|
|
||||||
((MainActivity) getActivity()).navigationView.setCheckedItem(R.id.install);
|
|
||||||
FragmentTransaction transaction = getFragmentManager().beginTransaction();
|
|
||||||
transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
|
|
||||||
try {
|
|
||||||
transaction.replace(R.id.content_frame, new InstallFragment(), "install").commit();
|
|
||||||
} catch (IllegalStateException ignored) {}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (getApplication().magiskVersion < 0 && Shell.rootAccess() && !noDialog) {
|
if (getApplication().magiskVersion < 0 && Shell.rootAccess() && !noDialog) {
|
||||||
noDialog = true;
|
noDialog = true;
|
||||||
new AlertDialogBuilder(getActivity())
|
new AlertDialogBuilder(getActivity())
|
||||||
.setTitle(R.string.no_magisk_title)
|
.setTitle(R.string.no_magisk_title)
|
||||||
.setMessage(R.string.no_magisk_msg)
|
.setMessage(R.string.no_magisk_msg)
|
||||||
.setCancelable(true)
|
.setCancelable(true)
|
||||||
.setPositiveButton(R.string.goto_install, (dialogInterface, i) -> {
|
.setPositiveButton(R.string.goto_install, (d, i) -> gotoInstall())
|
||||||
((MainActivity) getActivity()).navigationView.setCheckedItem(R.id.install);
|
|
||||||
FragmentTransaction transaction = getFragmentManager().beginTransaction();
|
|
||||||
transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
|
|
||||||
try {
|
|
||||||
transaction.replace(R.id.content_frame, new InstallFragment(), "install").commit();
|
|
||||||
} catch (IllegalStateException ignored) {}
|
|
||||||
})
|
|
||||||
.setNegativeButton(R.string.no_thanks, null)
|
.setNegativeButton(R.string.no_thanks, null)
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
@@ -168,7 +161,7 @@ public class StatusFragment extends Fragment implements CallbackEvent.Listener<V
|
|||||||
if (getApplication().magiskVersion < 0) {
|
if (getApplication().magiskVersion < 0) {
|
||||||
magiskVersionText.setText(R.string.magisk_version_error);
|
magiskVersionText.setText(R.string.magisk_version_error);
|
||||||
} else if (getApplication().disabled) {
|
} else if (getApplication().disabled) {
|
||||||
magiskVersionText.setText(getString(R.string.magisk_version_disable, getApplication().magiskVersionString));
|
magiskVersionText.setText(getString(R.string.magisk_version_core_only, getApplication().magiskVersionString));
|
||||||
} else {
|
} else {
|
||||||
magiskVersionText.setText(getString(R.string.magisk_version, getApplication().magiskVersionString));
|
magiskVersionText.setText(getString(R.string.magisk_version, getApplication().magiskVersionString));
|
||||||
}
|
}
|
||||||
@@ -221,9 +214,6 @@ public class StatusFragment extends Fragment implements CallbackEvent.Listener<V
|
|||||||
if (getApplication().magiskVersion < 0) {
|
if (getApplication().magiskVersion < 0) {
|
||||||
color = colorBad;
|
color = colorBad;
|
||||||
image = R.drawable.ic_cancel;
|
image = R.drawable.ic_cancel;
|
||||||
} else if (getApplication().disabled) {
|
|
||||||
color = colorNeutral;
|
|
||||||
image = R.drawable.ic_cancel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
magiskStatusContainer.setBackgroundColor(color);
|
magiskStatusContainer.setBackgroundColor(color);
|
||||||
|
@@ -109,7 +109,9 @@ public class SuLogAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public void onBindGroupViewHolder(LogGroupViewHolder holder, int flatPosition, ExpandableGroup group) {
|
public void onBindGroupViewHolder(LogGroupViewHolder holder, int flatPosition, ExpandableGroup group) {
|
||||||
holder.date.setText(group.getTitle());
|
holder.date.setText(group.getTitle());
|
||||||
if (isGroupExpanded(flatPosition)) holder.expand();
|
if (isGroupExpanded(flatPosition)) {
|
||||||
|
holder.expand();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7,7 +7,7 @@ import android.content.Intent;
|
|||||||
import android.support.v4.app.TaskStackBuilder;
|
import android.support.v4.app.TaskStackBuilder;
|
||||||
import android.support.v7.app.NotificationCompat;
|
import android.support.v7.app.NotificationCompat;
|
||||||
|
|
||||||
import com.topjohnwu.magisk.MainActivity;
|
import com.topjohnwu.magisk.MagiskManager;
|
||||||
import com.topjohnwu.magisk.R;
|
import com.topjohnwu.magisk.R;
|
||||||
import com.topjohnwu.magisk.SplashActivity;
|
import com.topjohnwu.magisk.SplashActivity;
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
@@ -48,7 +48,8 @@ public class CheckUpdates extends ParallelTask<Void, Void, Void> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Void v) {
|
protected void onPostExecute(Void v) {
|
||||||
if (magiskManager.magiskVersion < magiskManager.remoteMagiskVersion && showNotification) {
|
if (magiskManager.magiskVersion < magiskManager.remoteMagiskVersion
|
||||||
|
&& showNotification && magiskManager.updateNotification) {
|
||||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(magiskManager);
|
NotificationCompat.Builder builder = new NotificationCompat.Builder(magiskManager);
|
||||||
builder.setSmallIcon(R.drawable.ic_magisk)
|
builder.setSmallIcon(R.drawable.ic_magisk)
|
||||||
.setContentTitle(magiskManager.getString(R.string.magisk_update_title))
|
.setContentTitle(magiskManager.getString(R.string.magisk_update_title))
|
||||||
@@ -56,7 +57,7 @@ public class CheckUpdates extends ParallelTask<Void, Void, Void> {
|
|||||||
.setVibrate(new long[]{0, 100, 100, 100})
|
.setVibrate(new long[]{0, 100, 100, 100})
|
||||||
.setAutoCancel(true);
|
.setAutoCancel(true);
|
||||||
Intent intent = new Intent(magiskManager, SplashActivity.class);
|
Intent intent = new Intent(magiskManager, SplashActivity.class);
|
||||||
intent.putExtra(MainActivity.SECTION, "install");
|
intent.putExtra(MagiskManager.INTENT_SECTION, "install");
|
||||||
TaskStackBuilder stackBuilder = TaskStackBuilder.create(magiskManager);
|
TaskStackBuilder stackBuilder = TaskStackBuilder.create(magiskManager);
|
||||||
stackBuilder.addParentStack(SplashActivity.class);
|
stackBuilder.addParentStack(SplashActivity.class);
|
||||||
stackBuilder.addNextIntent(intent);
|
stackBuilder.addNextIntent(intent);
|
||||||
|
@@ -13,10 +13,9 @@ public class GetBootBlocks extends SerialTask<Void, Void, Void> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
if (Shell.rootAccess()) {
|
magiskManager.blockList = Shell.su("ls /dev/block | grep mmc");
|
||||||
magiskManager.blockList = Shell.su("ls /dev/block | grep mmc");
|
if (magiskManager.bootBlock == null) {
|
||||||
if (magiskManager.bootBlock == null)
|
magiskManager.bootBlock = Utils.detectBootImage();
|
||||||
magiskManager.bootBlock = Utils.detectBootImage();
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -22,8 +22,9 @@ public class LoadApps extends ParallelTask<Void, Void, Void> {
|
|||||||
List<ApplicationInfo> list = pm.getInstalledApplications(0);
|
List<ApplicationInfo> list = pm.getInstalledApplications(0);
|
||||||
for (Iterator<ApplicationInfo> i = list.iterator(); i.hasNext(); ) {
|
for (Iterator<ApplicationInfo> i = list.iterator(); i.hasNext(); ) {
|
||||||
ApplicationInfo info = i.next();
|
ApplicationInfo info = i.next();
|
||||||
if (ApplicationAdapter.BLACKLIST.contains(info.packageName) || !info.enabled)
|
if (ApplicationAdapter.BLACKLIST.contains(info.packageName) || !info.enabled) {
|
||||||
i.remove();
|
i.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Collections.sort(list, (a, b) -> a.loadLabel(pm).toString().toLowerCase()
|
Collections.sort(list, (a, b) -> a.loadLabel(pm).toString().toLowerCase()
|
||||||
.compareTo(b.loadLabel(pm).toString().toLowerCase()));
|
.compareTo(b.loadLabel(pm).toString().toLowerCase()));
|
||||||
|
@@ -57,12 +57,10 @@ public class LoadRepos extends ParallelTask<Void, Void, Void> {
|
|||||||
String etag = prefs.getString(ETAG_KEY, "");
|
String etag = prefs.getString(ETAG_KEY, "");
|
||||||
header.put("If-None-Match", etag);
|
header.put("If-None-Match", etag);
|
||||||
|
|
||||||
magiskManager.repoMap = new ValueSortedMap<>();
|
|
||||||
|
|
||||||
// Make a request to main URL for repo info
|
// Make a request to main URL for repo info
|
||||||
String jsonString = WebService.request(REPO_URL, WebService.GET, null, header, false);
|
String jsonString = WebService.request(REPO_URL, WebService.GET, null, header, false);
|
||||||
|
|
||||||
ValueSortedMap<String, Repo> cached = dbHelper.getRepoMap();
|
ValueSortedMap<String, Repo> cached = dbHelper.getRepoMap(false), fetched = new ValueSortedMap<>();
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(jsonString)) {
|
if (!TextUtils.isEmpty(jsonString)) {
|
||||||
try {
|
try {
|
||||||
@@ -96,27 +94,25 @@ public class LoadRepos extends ParallelTask<Void, Void, Void> {
|
|||||||
Logger.dev("LoadRepos: Update cached repo " + id);
|
Logger.dev("LoadRepos: Update cached repo " + id);
|
||||||
repo.update(updatedDate);
|
repo.update(updatedDate);
|
||||||
}
|
}
|
||||||
if (repo.getId() != null)
|
if (repo.getId() != null) {
|
||||||
magiskManager.repoMap.put(id, repo);
|
fetched.put(id, repo);
|
||||||
|
}
|
||||||
} catch (BaseModule.CacheModException ignored) {}
|
} catch (BaseModule.CacheModException ignored) {}
|
||||||
|
|
||||||
|
// Update the database
|
||||||
|
dbHelper.addRepoMap(fetched);
|
||||||
|
// The leftover cached are those removed remote, cleanup db
|
||||||
|
dbHelper.removeRepo(cached);
|
||||||
|
// Update ETag
|
||||||
|
prefs.edit().putString(ETAG_KEY, etag).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Use cached if no internet or no updates
|
|
||||||
Logger.dev("LoadRepos: No updates, use cached");
|
|
||||||
magiskManager.repoMap.putAll(cached);
|
|
||||||
cached.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the database
|
magiskManager.repoMap = dbHelper.getRepoMap();
|
||||||
dbHelper.addRepoMap(magiskManager.repoMap);
|
|
||||||
// The leftover cached are those removed remote, cleanup db
|
|
||||||
dbHelper.removeRepo(cached);
|
|
||||||
// Update ETag
|
|
||||||
prefs.edit().putString(ETAG_KEY, etag).apply();
|
|
||||||
|
|
||||||
Logger.dev("LoadRepos: Repo load done");
|
Logger.dev("LoadRepos: Repo load done");
|
||||||
return null;
|
return null;
|
||||||
|
@@ -21,15 +21,17 @@ public class MagiskHide extends SerialTask<Object, Void, Void> {
|
|||||||
protected Void doInBackground(Object... params) {
|
protected Void doInBackground(Object... params) {
|
||||||
String command = (String) params[0];
|
String command = (String) params[0];
|
||||||
List<String> ret = Shell.su(MagiskManager.MAGISK_HIDE_PATH + command);
|
List<String> ret = Shell.su(MagiskManager.MAGISK_HIDE_PATH + command);
|
||||||
if (isList)
|
if (isList) {
|
||||||
magiskManager.magiskHideList = ret;
|
magiskManager.magiskHideList = ret;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Void v) {
|
protected void onPostExecute(Void v) {
|
||||||
if (isList)
|
if (isList) {
|
||||||
magiskManager.magiskHideDone.trigger();
|
magiskManager.magiskHideDone.trigger();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(CharSequence packageName) {
|
public void add(CharSequence packageName) {
|
||||||
@@ -50,8 +52,7 @@ public class MagiskHide extends SerialTask<Object, Void, Void> {
|
|||||||
|
|
||||||
public void list() {
|
public void list() {
|
||||||
isList = true;
|
isList = true;
|
||||||
if (magiskManager == null)
|
if (magiskManager == null) return;
|
||||||
return;
|
|
||||||
exec("list");
|
exec("list");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,7 +45,8 @@ public class ProcessMagiskZip extends ParallelTask<Void, Void, Boolean> {
|
|||||||
ZipUtils.unzip(magiskManager.getContentResolver().openInputStream(mUri), tempdir);
|
ZipUtils.unzip(magiskManager.getContentResolver().openInputStream(mUri), tempdir);
|
||||||
// Running in parallel mode, open new shell
|
// Running in parallel mode, open new shell
|
||||||
Shell.su(true,
|
Shell.su(true,
|
||||||
"echo \"BOOTIMAGE=/dev/block/" + mBoot + "\" > /dev/.magisk",
|
"rm -f /dev/.magisk",
|
||||||
|
(mBoot != null) ? "echo \"BOOTIMAGE=/dev/block/" + mBoot + "\" >> /dev/.magisk" : "",
|
||||||
"echo \"KEEPFORCEENCRYPT=" + String.valueOf(mEnc) + "\" >> /dev/.magisk",
|
"echo \"KEEPFORCEENCRYPT=" + String.valueOf(mEnc) + "\" >> /dev/.magisk",
|
||||||
"echo \"KEEPVERITY=" + String.valueOf(mVerity) + "\" >> /dev/.magisk",
|
"echo \"KEEPVERITY=" + String.valueOf(mVerity) + "\" >> /dev/.magisk",
|
||||||
"mkdir -p " + MagiskManager.TMP_FOLDER_PATH,
|
"mkdir -p " + MagiskManager.TMP_FOLDER_PATH,
|
||||||
@@ -66,13 +67,14 @@ public class ProcessMagiskZip extends ParallelTask<Void, Void, Boolean> {
|
|||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Boolean result) {
|
protected void onPostExecute(Boolean result) {
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
if (result)
|
if (result) {
|
||||||
new FlashZip(activity, mUri) {
|
new FlashZip(activity, mUri) {
|
||||||
@Override
|
@Override
|
||||||
protected boolean unzipAndCheck() throws Exception {
|
protected boolean unzipAndCheck() throws Exception {
|
||||||
// Don't need to check, as it is downloaded in correct form
|
// Don't need to check, as it is downloaded in correct form
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSuccess() {
|
protected void onSuccess() {
|
||||||
new SerialTask<Void, Void, Void>(activity) {
|
new SerialTask<Void, Void, Void>(activity) {
|
||||||
@@ -87,7 +89,8 @@ public class ProcessMagiskZip extends ParallelTask<Void, Void, Boolean> {
|
|||||||
super.onSuccess();
|
super.onSuccess();
|
||||||
}
|
}
|
||||||
}.exec();
|
}.exec();
|
||||||
else
|
} else {
|
||||||
Utils.showUriSnack(activity, mUri);
|
Utils.showUriSnack(activity, mUri);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -103,10 +103,11 @@ public class ProcessRepoZip extends ParallelTask<Void, Void, Boolean> {
|
|||||||
protected void onPostExecute(Boolean result) {
|
protected void onPostExecute(Boolean result) {
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
if (result) {
|
if (result) {
|
||||||
if (Shell.rootAccess() && mInstall)
|
if (Shell.rootAccess() && mInstall) {
|
||||||
new FlashZip(activity, mUri).exec();
|
new FlashZip(activity, mUri).exec();
|
||||||
else
|
} else {
|
||||||
Utils.showUriSnack(activity, mUri);
|
Utils.showUriSnack(activity, mUri);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(activity, R.string.process_error, Toast.LENGTH_LONG).show();
|
Toast.makeText(activity, R.string.process_error, Toast.LENGTH_LONG).show();
|
||||||
|
@@ -8,6 +8,6 @@ public class Activity extends AppCompatActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MagiskManager getApplicationContext() {
|
public MagiskManager getApplicationContext() {
|
||||||
return (MagiskManager) getApplication();
|
return (MagiskManager) super.getApplicationContext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -93,8 +93,9 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
|
|||||||
positive.setText(text);
|
positive.setText(text);
|
||||||
positiveListener = listener;
|
positiveListener = listener;
|
||||||
positive.setOnClickListener((v) -> {
|
positive.setOnClickListener((v) -> {
|
||||||
if (positiveListener != null)
|
if (positiveListener != null) {
|
||||||
positiveListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
|
positiveListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
|
||||||
|
}
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
@@ -112,8 +113,9 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
|
|||||||
negative.setText(text);
|
negative.setText(text);
|
||||||
negativeListener = listener;
|
negativeListener = listener;
|
||||||
negative.setOnClickListener((v) -> {
|
negative.setOnClickListener((v) -> {
|
||||||
if (negativeListener != null)
|
if (negativeListener != null) {
|
||||||
negativeListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE);
|
negativeListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE);
|
||||||
|
}
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
@@ -131,8 +133,9 @@ public class AlertDialogBuilder extends AlertDialog.Builder {
|
|||||||
neutral.setText(text);
|
neutral.setText(text);
|
||||||
neutralListener = listener;
|
neutralListener = listener;
|
||||||
neutral.setOnClickListener((v) -> {
|
neutral.setOnClickListener((v) -> {
|
||||||
if (neutralListener != null)
|
if (neutralListener != null) {
|
||||||
neutralListener.onClick(dialog, DialogInterface.BUTTON_NEUTRAL);
|
neutralListener.onClick(dialog, DialogInterface.BUTTON_NEUTRAL);
|
||||||
|
}
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
|
@@ -3,7 +3,6 @@ package com.topjohnwu.magisk.components;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.StringRes;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@@ -34,8 +33,7 @@ public class SnackbarMaker {
|
|||||||
|
|
||||||
private static void setup(Snackbar snack) {
|
private static void setup(Snackbar snack) {
|
||||||
TextView text = ButterKnife.findById(snack.getView(), android.support.design.R.id.snackbar_text);
|
TextView text = ButterKnife.findById(snack.getView(), android.support.design.R.id.snackbar_text);
|
||||||
text.setMaxLines(2);
|
text.setMaxLines(Integer.MAX_VALUE);
|
||||||
text.setEllipsize(TextUtils.TruncateAt.START);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -13,7 +13,7 @@ import java.util.Collection;
|
|||||||
|
|
||||||
public class RepoDatabaseHelper extends SQLiteOpenHelper {
|
public class RepoDatabaseHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
private static final int DATABASE_VER = 1;
|
private static final int DATABASE_VER = 2;
|
||||||
private static final String TABLE_NAME = "repos";
|
private static final String TABLE_NAME = "repos";
|
||||||
|
|
||||||
public RepoDatabaseHelper(Context context) {
|
public RepoDatabaseHelper(Context context) {
|
||||||
@@ -33,15 +33,20 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
"(id TEXT, name TEXT, version TEXT, versionCode INT, " +
|
"(id TEXT, name TEXT, version TEXT, versionCode INT, " +
|
||||||
"author TEXT, description TEXT, repo_name TEXT, last_update INT, " +
|
"author TEXT, description TEXT, repo_name TEXT, last_update INT, " +
|
||||||
"PRIMARY KEY(id))");
|
"PRIMARY KEY(id))");
|
||||||
|
oldVersion++;
|
||||||
|
}
|
||||||
|
if (oldVersion == 1) {
|
||||||
|
db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD template INT");
|
||||||
|
oldVersion++;
|
||||||
}
|
}
|
||||||
// No upgrades yet
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addRepoMap(ValueSortedMap<String, Repo> map) {
|
public void addRepoMap(ValueSortedMap<String, Repo> map) {
|
||||||
SQLiteDatabase db = getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
Collection<Repo> list = map.values();
|
Collection<Repo> list = map.values();
|
||||||
for (Repo repo : list)
|
for (Repo repo : list) {
|
||||||
db.replace(TABLE_NAME, null, repo.getContentValues());
|
db.replace(TABLE_NAME, null, repo.getContentValues());
|
||||||
|
}
|
||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,12 +59,17 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
public void removeRepo(ValueSortedMap<String, Repo> map) {
|
public void removeRepo(ValueSortedMap<String, Repo> map) {
|
||||||
SQLiteDatabase db = getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
Collection<Repo> list = map.values();
|
Collection<Repo> list = map.values();
|
||||||
for (Repo repo : list)
|
for (Repo repo : list) {
|
||||||
db.delete(TABLE_NAME, "id=?", new String[] { repo.getId() });
|
db.delete(TABLE_NAME, "id=?", new String[] { repo.getId() });
|
||||||
|
}
|
||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ValueSortedMap<String, Repo> getRepoMap() {
|
public ValueSortedMap<String, Repo> getRepoMap() {
|
||||||
|
return getRepoMap(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValueSortedMap<String, Repo> getRepoMap(boolean filtered) {
|
||||||
ValueSortedMap<String, Repo> ret = new ValueSortedMap<>();
|
ValueSortedMap<String, Repo> ret = new ValueSortedMap<>();
|
||||||
SQLiteDatabase db = getReadableDatabase();
|
SQLiteDatabase db = getReadableDatabase();
|
||||||
Repo repo;
|
Repo repo;
|
||||||
@@ -67,6 +77,10 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
while (c.moveToNext()) {
|
while (c.moveToNext()) {
|
||||||
repo = new Repo(c);
|
repo = new Repo(c);
|
||||||
Logger.dev("Load from cache: " + repo.getId());
|
Logger.dev("Load from cache: " + repo.getId());
|
||||||
|
if (repo.getTemplateVersion() < 3 && filtered) {
|
||||||
|
Logger.dev("Outdated repo: " + repo.getId());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ret.put(repo.getId(), repo);
|
ret.put(repo.getId(), repo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,15 +22,18 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(SQLiteDatabase db) {
|
public void onCreate(SQLiteDatabase db) {
|
||||||
db.execSQL(
|
onUpgrade(db, 0, DATABASE_VER);
|
||||||
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " " +
|
|
||||||
"(uid INT, package_name TEXT, app_name TEXT, policy INT, " +
|
|
||||||
"until INT, logging INT, notification INT, " +
|
|
||||||
"PRIMARY KEY(uid))");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
if (oldVersion == 0) {
|
||||||
|
db.execSQL(
|
||||||
|
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " " +
|
||||||
|
"(uid INT, package_name TEXT, app_name TEXT, policy INT, " +
|
||||||
|
"until INT, logging INT, notification INT, " +
|
||||||
|
"PRIMARY KEY(uid))");
|
||||||
|
}
|
||||||
// Currently new database, no upgrading
|
// Currently new database, no upgrading
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,8 +48,9 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
Policy policy = null;
|
Policy policy = null;
|
||||||
SQLiteDatabase db = getReadableDatabase();
|
SQLiteDatabase db = getReadableDatabase();
|
||||||
try (Cursor c = db.query(TABLE_NAME, null, "uid=?", new String[] { String.valueOf(uid) }, null, null, null)) {
|
try (Cursor c = db.query(TABLE_NAME, null, "uid=?", new String[] { String.valueOf(uid) }, null, null, null)) {
|
||||||
if (c.moveToNext())
|
if (c.moveToNext()) {
|
||||||
policy = new Policy(c);
|
policy = new Policy(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
db.close();
|
db.close();
|
||||||
return policy;
|
return policy;
|
||||||
|
@@ -25,14 +25,17 @@ public class SuLogDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(SQLiteDatabase db) {
|
public void onCreate(SQLiteDatabase db) {
|
||||||
db.execSQL(
|
onUpgrade(db, 0, DATABASE_VER);
|
||||||
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
|
||||||
"from_uid INT, package_name TEXT, app_name TEXT, from_pid INT, " +
|
|
||||||
"to_uid INT, action INT, time INT, command TEXT)");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
if (oldVersion == 0) {
|
||||||
|
db.execSQL(
|
||||||
|
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||||
|
"from_uid INT, package_name TEXT, app_name TEXT, from_pid INT, " +
|
||||||
|
"to_uid INT, action INT, time INT, command TEXT)");
|
||||||
|
}
|
||||||
// Currently new database, no upgrading
|
// Currently new database, no upgrading
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,8 +66,9 @@ public class SuLogDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
db.delete(TABLE_NAME, "time < ?", new String[] { String.valueOf(
|
db.delete(TABLE_NAME, "time < ?", new String[] { String.valueOf(
|
||||||
System.currentTimeMillis() / 1000 - magiskManager.suLogTimeout * 86400) });
|
System.currentTimeMillis() / 1000 - magiskManager.suLogTimeout * 86400) });
|
||||||
try (Cursor c = db.query(TABLE_NAME, null, selection, null, null, null, "time DESC")) {
|
try (Cursor c = db.query(TABLE_NAME, null, selection, null, null, null, "time DESC")) {
|
||||||
while (c.moveToNext())
|
while (c.moveToNext()) {
|
||||||
ret.add(new SuLogEntry(c));
|
ret.add(new SuLogEntry(c));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
db.close();
|
db.close();
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -11,7 +11,7 @@ import java.util.List;
|
|||||||
public abstract class BaseModule implements Comparable<BaseModule> {
|
public abstract class BaseModule implements Comparable<BaseModule> {
|
||||||
|
|
||||||
private String mId, mName, mVersion, mAuthor, mDescription;
|
private String mId, mName, mVersion, mAuthor, mDescription;
|
||||||
private int mVersionCode = 0;
|
private int mVersionCode = 0, templateVersion = 0;
|
||||||
|
|
||||||
protected BaseModule() {}
|
protected BaseModule() {}
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@ public abstract class BaseModule implements Comparable<BaseModule> {
|
|||||||
mVersionCode = c.getInt(c.getColumnIndex("versionCode"));
|
mVersionCode = c.getInt(c.getColumnIndex("versionCode"));
|
||||||
mAuthor = c.getString(c.getColumnIndex("author"));
|
mAuthor = c.getString(c.getColumnIndex("author"));
|
||||||
mDescription = c.getString(c.getColumnIndex("description"));
|
mDescription = c.getString(c.getColumnIndex("description"));
|
||||||
|
templateVersion = c.getInt(c.getColumnIndex("template"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void parseProps(List<String> props) throws CacheModException { parseProps(props.toArray(new String[props.size()])); }
|
protected void parseProps(List<String> props) throws CacheModException { parseProps(props.toArray(new String[props.size()])); }
|
||||||
@@ -57,6 +58,10 @@ public abstract class BaseModule implements Comparable<BaseModule> {
|
|||||||
case "description":
|
case "description":
|
||||||
mDescription = prop[1];
|
mDescription = prop[1];
|
||||||
break;
|
break;
|
||||||
|
case "template":
|
||||||
|
try {
|
||||||
|
templateVersion = Integer.parseInt(prop[1]);
|
||||||
|
} catch (NumberFormatException ignored) {}
|
||||||
case "cacheModule":
|
case "cacheModule":
|
||||||
if (Boolean.parseBoolean(prop[1]))
|
if (Boolean.parseBoolean(prop[1]))
|
||||||
throw new CacheModException(mId);
|
throw new CacheModException(mId);
|
||||||
@@ -99,6 +104,10 @@ public abstract class BaseModule implements Comparable<BaseModule> {
|
|||||||
return mVersionCode;
|
return mVersionCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getTemplateVersion() {
|
||||||
|
return templateVersion;
|
||||||
|
}
|
||||||
|
|
||||||
public static class CacheModException extends Exception {
|
public static class CacheModException extends Exception {
|
||||||
public CacheModException(String id) {
|
public CacheModException(String id) {
|
||||||
Logger.error("Cache mods are no longer supported! id: " + id);
|
Logger.error("Cache mods are no longer supported! id: " + id);
|
||||||
|
@@ -21,8 +21,9 @@ public class Module extends BaseModule {
|
|||||||
setId(path.substring(sep + 1));
|
setId(path.substring(sep + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getName() == null)
|
if (getName() == null) {
|
||||||
setName(getId());
|
setName(getId());
|
||||||
|
}
|
||||||
|
|
||||||
Logger.dev("Creating Module, id: " + getId());
|
Logger.dev("Creating Module, id: " + getId());
|
||||||
|
|
||||||
|
@@ -53,6 +53,7 @@ public class Repo extends BaseModule {
|
|||||||
values.put("description", getDescription());
|
values.put("description", getDescription());
|
||||||
values.put("repo_name", repoName);
|
values.put("repo_name", repoName);
|
||||||
values.put("last_update", mLastUpdate.getTime());
|
values.put("last_update", mLastUpdate.getTime());
|
||||||
|
values.put("template", getTemplateVersion());
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,10 +61,6 @@ public class Repo extends BaseModule {
|
|||||||
return String.format(ZIP_URL, repoName);
|
return String.format(ZIP_URL, repoName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLogUrl() {
|
|
||||||
return String.format(FILE_URL, repoName, "changelog.txt");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getManifestUrl() {
|
public String getManifestUrl() {
|
||||||
return String.format(FILE_URL, repoName, "module.prop");
|
return String.format(FILE_URL, repoName, "module.prop");
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,7 @@ public class UpdateCheckService extends JobService {
|
|||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(Void... voids) {
|
protected Void doInBackground(Void... voids) {
|
||||||
magiskManager.updateMagiskInfo();
|
magiskManager.updateMagiskInfo();
|
||||||
|
magiskManager.updateNotification = magiskManager.prefs.getBoolean("notification", true);
|
||||||
return super.doInBackground(voids);
|
return super.doInBackground(voids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -38,10 +38,12 @@ public class SuReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
SuDatabaseHelper suDbHelper = new SuDatabaseHelper(context);
|
SuDatabaseHelper suDbHelper = new SuDatabaseHelper(context);
|
||||||
policy = suDbHelper.getPolicy(fromUid);
|
policy = suDbHelper.getPolicy(fromUid);
|
||||||
if (policy == null) try {
|
if (policy == null) {
|
||||||
policy = new Policy(fromUid, context.getPackageManager());
|
try {
|
||||||
} catch (Throwable throwable) {
|
policy = new Policy(fromUid, context.getPackageManager());
|
||||||
return;
|
} catch (Throwable throwable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
magiskManager.initSuConfigs();
|
magiskManager.initSuConfigs();
|
||||||
|
@@ -76,8 +76,9 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene
|
|||||||
@Override
|
@Override
|
||||||
public void onEvent(int fileEvent, String path) {
|
public void onEvent(int fileEvent, String path) {
|
||||||
if (fileEvent == FileObserver.DELETE_SELF) {
|
if (fileEvent == FileObserver.DELETE_SELF) {
|
||||||
if (event != null)
|
if (event != null) {
|
||||||
event.trigger();
|
event.trigger();
|
||||||
|
}
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,8 +148,9 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene
|
|||||||
public void onTrigger(CallbackEvent<Policy> event) {
|
public void onTrigger(CallbackEvent<Policy> event) {
|
||||||
Policy policy = event.getResult();
|
Policy policy = event.getResult();
|
||||||
String response = "socket:DENY";
|
String response = "socket:DENY";
|
||||||
if (policy != null &&policy.policy == Policy.ALLOW )
|
if (policy != null &&policy.policy == Policy.ALLOW ) {
|
||||||
response = "socket:ALLOW";
|
response = "socket:ALLOW";
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
socket.getOutputStream().write((response).getBytes());
|
socket.getOutputStream().write((response).getBytes());
|
||||||
} catch (Exception ignored) {}
|
} catch (Exception ignored) {}
|
||||||
@@ -176,7 +178,7 @@ public class SuRequestActivity extends Activity implements CallbackEvent.Listene
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Boolean doInBackground(Void... params) {
|
protected Boolean doInBackground(Void... params) {
|
||||||
try{
|
try {
|
||||||
socket = new LocalSocket();
|
socket = new LocalSocket();
|
||||||
socket.connect(new LocalSocketAddress(socketPath, LocalSocketAddress.Namespace.FILESYSTEM));
|
socket.connect(new LocalSocketAddress(socketPath, LocalSocketAddress.Namespace.FILESYSTEM));
|
||||||
|
|
||||||
|
@@ -10,8 +10,9 @@ public class CallbackEvent<Result> {
|
|||||||
private Set<Listener<Result>> listeners;
|
private Set<Listener<Result>> listeners;
|
||||||
|
|
||||||
public void register(Listener<Result> l) {
|
public void register(Listener<Result> l) {
|
||||||
if (listeners == null)
|
if (listeners == null) {
|
||||||
listeners = new HashSet<>();
|
listeners = new HashSet<>();
|
||||||
|
}
|
||||||
listeners.add(l);
|
listeners.add(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,8 +21,9 @@ public class CallbackEvent<Result> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void unRegister(Listener<Result> l) {
|
public void unRegister(Listener<Result> l) {
|
||||||
if (listeners != null)
|
if (listeners != null) {
|
||||||
listeners.remove(l);
|
listeners.remove(l);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void trigger() {
|
public void trigger() {
|
||||||
@@ -32,8 +34,9 @@ public class CallbackEvent<Result> {
|
|||||||
result = r;
|
result = r;
|
||||||
isTriggered = true;
|
isTriggered = true;
|
||||||
if (listeners != null) {
|
if (listeners != null) {
|
||||||
for (Listener<Result> listener : listeners)
|
for (Listener<Result> listener : listeners) {
|
||||||
listener.onTrigger(this);
|
listener.onTrigger(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -120,11 +120,13 @@ public class Shell {
|
|||||||
StreamGobbler STDOUT;
|
StreamGobbler STDOUT;
|
||||||
|
|
||||||
// Create the default shell if not init
|
// Create the default shell if not init
|
||||||
if (!newShell && !isInit)
|
if (!newShell && !isInit) {
|
||||||
init();
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
if (!newShell && !rootAccess())
|
if (!newShell && !rootAccess()) {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (newShell) {
|
if (newShell) {
|
||||||
res = Collections.synchronizedList(new ArrayList<String>());
|
res = Collections.synchronizedList(new ArrayList<String>());
|
||||||
|
@@ -91,10 +91,12 @@ public class Utils {
|
|||||||
isDownloading = true;
|
isDownloading = true;
|
||||||
|
|
||||||
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
|
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(link));
|
|
||||||
request.setDestinationUri(Uri.fromFile(file));
|
|
||||||
|
|
||||||
receiver.setDownloadID(downloadManager.enqueue(request));
|
if (link != null) {
|
||||||
|
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(link));
|
||||||
|
request.setDestinationUri(Uri.fromFile(file));
|
||||||
|
receiver.setDownloadID(downloadManager.enqueue(request));
|
||||||
|
}
|
||||||
receiver.setFilename(filename);
|
receiver.setFilename(filename);
|
||||||
context.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
|
context.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
|
||||||
}
|
}
|
||||||
@@ -114,8 +116,9 @@ public class Utils {
|
|||||||
"echo \"${BOOTIMAGE##*/}\""
|
"echo \"${BOOTIMAGE##*/}\""
|
||||||
};
|
};
|
||||||
List<String> ret = Shell.su(commands);
|
List<String> ret = Shell.su(commands);
|
||||||
if (isValidShellResponse(ret))
|
if (isValidShellResponse(ret)) {
|
||||||
return ret.get(0);
|
return ret.get(0);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -77,10 +77,11 @@ public class WebService {
|
|||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (Map.Entry<String, String> entry : params.entrySet()) {
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
if (first)
|
if (first) {
|
||||||
first = false;
|
first = false;
|
||||||
else
|
} else {
|
||||||
result.append("&");
|
result.append("&");
|
||||||
|
}
|
||||||
|
|
||||||
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
|
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
|
||||||
result.append("=");
|
result.append("=");
|
||||||
|
@@ -112,14 +112,17 @@ public class ZipUtils {
|
|||||||
// Remove the top directory from the path
|
// Remove the top directory from the path
|
||||||
path = entry.getName().substring(entry.getName().indexOf("/") + 1);
|
path = entry.getName().substring(entry.getName().indexOf("/") + 1);
|
||||||
// If it's the top folder, ignore it
|
// If it's the top folder, ignore it
|
||||||
if (path.isEmpty())
|
if (path.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
// Don't include placeholder
|
// Don't include placeholder
|
||||||
if (path.contains("system/placeholder"))
|
if (path.contains("system/placeholder")) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
dest.putNextEntry(new JarEntry(path));
|
dest.putNextEntry(new JarEntry(path));
|
||||||
while((size = source.read(buffer, 0, 2048)) != -1)
|
while((size = source.read(buffer, 0, 2048)) != -1) {
|
||||||
dest.write(buffer, 0, size);
|
dest.write(buffer, 0, size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
source.close();
|
source.close();
|
||||||
dest.close();
|
dest.close();
|
||||||
@@ -149,17 +152,20 @@ public class ZipUtils {
|
|||||||
Enumeration<JarEntry> e = zipfile.entries();
|
Enumeration<JarEntry> e = zipfile.entries();
|
||||||
while(e.hasMoreElements()) {
|
while(e.hasMoreElements()) {
|
||||||
entry = e.nextElement();
|
entry = e.nextElement();
|
||||||
if (!entry.getName().contains(path) || entry.isDirectory())
|
if (!entry.getName().contains(path) || entry.isDirectory()){
|
||||||
// Ignore directories, only create files
|
// Ignore directories, only create files
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
Logger.dev("ZipUtils: Extracting: " + entry);
|
Logger.dev("ZipUtils: Extracting: " + entry);
|
||||||
is = zipfile.getInputStream(entry);
|
is = zipfile.getInputStream(entry);
|
||||||
dest = new File(folder, entry.getName());
|
dest = new File(folder, entry.getName());
|
||||||
if (dest.getParentFile().mkdirs())
|
if (dest.getParentFile().mkdirs()) {
|
||||||
dest.createNewFile();
|
dest.createNewFile();
|
||||||
|
}
|
||||||
out = new FileOutputStream(dest);
|
out = new FileOutputStream(dest);
|
||||||
while ((count = is.read(data, 0, 4096)) != -1)
|
while ((count = is.read(data, 0, 4096)) != -1) {
|
||||||
out.write(data, 0, count);
|
out.write(data, 0, count);
|
||||||
|
}
|
||||||
out.flush();
|
out.flush();
|
||||||
out.close();
|
out.close();
|
||||||
is.close();
|
is.close();
|
||||||
@@ -178,16 +184,19 @@ public class ZipUtils {
|
|||||||
byte data[] = new byte[4096];
|
byte data[] = new byte[4096];
|
||||||
try (JarInputStream zipfile = new JarInputStream(file)) {
|
try (JarInputStream zipfile = new JarInputStream(file)) {
|
||||||
while((entry = zipfile.getNextJarEntry()) != null) {
|
while((entry = zipfile.getNextJarEntry()) != null) {
|
||||||
if (!entry.getName().contains(path) || entry.isDirectory())
|
if (!entry.getName().contains(path) || entry.isDirectory()) {
|
||||||
// Ignore directories, only create files
|
// Ignore directories, only create files
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
Logger.dev("ZipUtils: Extracting: " + entry);
|
Logger.dev("ZipUtils: Extracting: " + entry);
|
||||||
dest = new File(folder, entry.getName());
|
dest = new File(folder, entry.getName());
|
||||||
if (dest.getParentFile().mkdirs())
|
if (dest.getParentFile().mkdirs()) {
|
||||||
dest.createNewFile();
|
dest.createNewFile();
|
||||||
|
}
|
||||||
out = new FileOutputStream(dest);
|
out = new FileOutputStream(dest);
|
||||||
while ((count = zipfile.read(data, 0, 4096)) != -1)
|
while ((count = zipfile.read(data, 0, 4096)) != -1) {
|
||||||
out.write(data, 0, count);
|
out.write(data, 0, count);
|
||||||
|
}
|
||||||
out.flush();
|
out.flush();
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
|
@@ -159,7 +159,7 @@
|
|||||||
</android.support.v7.widget.CardView>
|
</android.support.v7.widget.CardView>
|
||||||
|
|
||||||
<android.support.v7.widget.CardView
|
<android.support.v7.widget.CardView
|
||||||
android:id="@+id/flash_button"
|
android:id="@+id/install_button"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_marginBottom="4dp"
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:text="@string/download_install"
|
android:id="@+id/install_text"
|
||||||
android:ems="10"
|
android:ems="10"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
195
app/src/main/res/values-cs/strings.xml
Normal file
195
app/src/main/res/values-cs/strings.xml
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
<resources>
|
||||||
|
<!--Universal-->
|
||||||
|
|
||||||
|
<!--Welcome Activity-->
|
||||||
|
<string name="navigation_drawer_open">Otevřít postranní panel</string>
|
||||||
|
<string name="navigation_drawer_close">Zavřít postranní panel</string>
|
||||||
|
<string name="modules">Moduly</string>
|
||||||
|
<string name="downloads">Stahování</string>
|
||||||
|
<string name="superuser">Superuser</string>
|
||||||
|
<string name="log">Log</string>
|
||||||
|
<string name="settings">Nastavení</string>
|
||||||
|
<string name="status">Stav</string>
|
||||||
|
<string name="install">Instalovat</string>
|
||||||
|
|
||||||
|
<!--Status Fragment-->
|
||||||
|
<string name="magisk_version">Nainstalován Magisk v%1$s</string>
|
||||||
|
<string name="magisk_version_error">Magisk není nainstalován</string>
|
||||||
|
|
||||||
|
<string name="checking_for_updates">Kontrola aktualizací…</string>
|
||||||
|
<string name="magisk_update_available">Magisk v%1$.1f je dostupný!</string>
|
||||||
|
<string name="cannot_check_updates">Nelze zkontrolovat aktualizace. Jste připojeni k Internetu?</string>
|
||||||
|
<string name="up_to_date">Poslední verze z %1$s nainstalovaných</string>
|
||||||
|
<string name="root_error">Zařízení s rootem ale chybí root povolení, máte jej zpřístupněno?</string>
|
||||||
|
<string name="not_rooted">Nemáte root</string>
|
||||||
|
<string name="proper_root">Správně provedený root</string>
|
||||||
|
<string name="safetyNet_check_text">Kliknutím zahájíte SafetyNet kontrolu</string>
|
||||||
|
<string name="checking_safetyNet_status">Kontrola stavu SafetyNet…</string>
|
||||||
|
<string name="safetyNet_connection_failed">Nelze se spojit s Google API</string>
|
||||||
|
<string name="safetyNet_connection_suspended">Spojení s Google API bylo přerušeno</string>
|
||||||
|
<string name="safetyNet_error">Nelze zkontrolovat SafetyNet. Jste připojeni k Internetu?</string>
|
||||||
|
<string name="safetyNet_fail">SafetyNet dopadl neúspěšně: CTS profile mismatch</string>
|
||||||
|
<string name="safetyNet_pass">SafetyNet Schváleno</string>
|
||||||
|
<string name="root_info_warning">Funkčnost omezena</string>
|
||||||
|
|
||||||
|
<!--Install Fragment-->
|
||||||
|
<string name="auto_detect">(Auto) %1$s</string>
|
||||||
|
<string name="cannot_auto_detect">(Nelze zjistit automaticky)</string>
|
||||||
|
<string name="boot_image_title">Umístění Boot Image</string>
|
||||||
|
<string name="detect_button">Zjistit</string>
|
||||||
|
<string name="advanced_settings_title">Pokročilá Nastavení</string>
|
||||||
|
<string name="keep_force_encryption">Udržet "force encryption"</string>
|
||||||
|
<string name="keep_dm_verity">Udržet dm-verity</string>
|
||||||
|
<string name="current_magisk_title">Nainstalovaná verze Magisk: %1$s</string>
|
||||||
|
<string name="install_magisk_title">Poslední verze Magisk: %1$s</string>
|
||||||
|
<string name="uninstall">Odinstalovat</string>
|
||||||
|
<string name="reboot_countdown">Restart za %1$d</string>
|
||||||
|
<string name="uninstall_magisk_title">Odinstalovat Magisk</string>
|
||||||
|
<string name="uninstall_magisk_msg">Tímto odstraníte veškeré moduly, MagiskSU a potencionálně zašifrujete svá data pokud ještě nejsou\nOpravdu chcete pokračovat?</string>
|
||||||
|
<string name="version_none">(Žádná)</string>
|
||||||
|
|
||||||
|
<!--Module Fragment-->
|
||||||
|
<string name="no_info_provided">(Žádné info)</string>
|
||||||
|
<string name="no_modules_found">Žádný modul nenalezen</string>
|
||||||
|
<string name="update_file_created">Modul bude aktualizován během příštího restartu</string>
|
||||||
|
<string name="remove_file_created">Modul bude smazán během příštího restartu</string>
|
||||||
|
<string name="remove_file_deleted">Modul nebude smazán během příštího restartu</string>
|
||||||
|
<string name="disable_file_created">Modul bude zakázán během příštího restartu</string>
|
||||||
|
<string name="disable_file_removed">Modul bude povolen během příštího restartu</string>
|
||||||
|
<string name="author">Vytvořeno %1$s</string>
|
||||||
|
<string name="fab_flash_zip">Flash Zip Modulu</string>
|
||||||
|
|
||||||
|
<!--Repo Fragment-->
|
||||||
|
<string name="update_available">Dostupná Aktualizace</string>
|
||||||
|
<string name="installed">Nainstalováno</string>
|
||||||
|
<string name="not_installed">Nenainstalováno</string>
|
||||||
|
|
||||||
|
<!--Log Fragment-->
|
||||||
|
<string name="menuSaveToSd">Uložit na SD</string>
|
||||||
|
<string name="menuReload">Aktualizovat</string>
|
||||||
|
<string name="menuClearLog">Smazat Log</string>
|
||||||
|
<string name="logs_cleared">Log byl smazán</string>
|
||||||
|
<string name="log_is_empty">Log je prázdný</string>
|
||||||
|
<string name="logs_save_failed">Nezdařilo se Log uložit na SD kartu:</string>
|
||||||
|
|
||||||
|
<!--About Activity-->
|
||||||
|
<string name="about">O aplikaci</string>
|
||||||
|
<string name="app_developers">Hlavní vývojáři</string>
|
||||||
|
<string name="app_developers_"><![CDATA[Aplikaci vytvořil <a href="https://github.com/topjohnwu">topjohnwu</a> ve spolupráci s <a href="https://github.com/d8ahazard">Digitalhigh</a> a <a href="https://github.com/dvdandroid">Dvdandroid</a>.]]></string>
|
||||||
|
<string name="app_changelog">Seznam změn</string>
|
||||||
|
<string name="translators" />
|
||||||
|
<string name="app_version">Verze aplikace</string>
|
||||||
|
<string name="app_source_code">Zdrojový kód</string>
|
||||||
|
<string name="donation">Příspěvek</string>
|
||||||
|
<string name="app_translators">Překladatelé aplikace</string>
|
||||||
|
<string name="support_thread">Vlákno podpory na fóru</string>
|
||||||
|
|
||||||
|
<!--Toasts, Dialogs-->
|
||||||
|
<string name="permissionNotGranted">Tato funkce nebude fungovat bez povolení k zápisu na externí úložiště.</string>
|
||||||
|
<string name="no_thanks">Ne, díky</string>
|
||||||
|
<string name="yes">Ano</string>
|
||||||
|
<string name="ok">OK</string>
|
||||||
|
<string name="close">Zavřít</string>
|
||||||
|
<string name="repo_install_title">Instalovat %1$s</string>
|
||||||
|
<string name="repo_install_msg">Chcete nainstalovat %1$s ?</string>
|
||||||
|
<string name="download_install">Stažení & Instalace</string>
|
||||||
|
<string name="download">Stáhnout</string>
|
||||||
|
<string name="goto_install">Jděte do sekce \"Instalovat\"</string>
|
||||||
|
<string name="download_file_error">Chyba při Stahování souboru</string>
|
||||||
|
<string name="install_error">Chyba při Instalaci!</string>
|
||||||
|
<string name="invalid_zip">Soubor zip není Magisk Modul!!</string>
|
||||||
|
<string name="reboot_title">Instalace proběhla úspěšně!</string>
|
||||||
|
<string name="reboot_msg">Chcete nyní restartovat vaše zařízení?</string>
|
||||||
|
<string name="reboot">Restart</string>
|
||||||
|
<string name="copying_msg">Kopírovat zip do temp adresáře</string>
|
||||||
|
<string name="zip_install_progress_title">Instalování</string>
|
||||||
|
<string name="zip_unzip_msg">Extrahování zip souboru …</string>
|
||||||
|
<string name="zip_process_msg">Zpracování zip souboru …</string>
|
||||||
|
<string name="zip_install_progress_msg">Instalování %1$s …</string>
|
||||||
|
<string name="no_magisk_title">Magisk není Nainstalován!</string>
|
||||||
|
<string name="no_magisk_msg">Chcete stáhnout a nainstalovat Magisk?</string>
|
||||||
|
<string name="downloading_toast">Stahování %1$s</string>
|
||||||
|
<string name="magisk_update_title">K dispozici je aktualizace Magisk!</string>
|
||||||
|
<string name="settings_reboot_toast">Restartovat pro použití nastavení</string>
|
||||||
|
<string name="release_notes">Poznámky k vydání</string>
|
||||||
|
<string name="repo_cache_cleared">Mezipaměť smazána</string>
|
||||||
|
<string name="safetyNet_hide_notice">Tato aplikace využívá SafetyNet\nVe výchozím nastavení již ovládaný skrze MagiskHide</string>
|
||||||
|
<string name="start_magiskhide">Spouštění MagiskHide …</string>
|
||||||
|
<string name="no_magisksu_title">Nepoužíváte MagiskSU!</string>
|
||||||
|
<string name="no_magisksu_msg">Nemáte root s MagiskSU, používání MagiskHide samotného nebude stačit!\nNení to oficiálně podporováno a potřebovali byste další nástroje (např. suhide) k prolomení Safety Net.</string>
|
||||||
|
<string name="understand">Rozumím</string>
|
||||||
|
<string name="process_error">Chyba při Zpracování</string>
|
||||||
|
<string name="internal_storage">Zip je uchován v:\n[Interním Úložišti]%1$s</string>
|
||||||
|
<string name="zip_process_title">Zpracování</string>
|
||||||
|
<string name="manual_boot_image">Ručně vyberte boot image!</string>
|
||||||
|
|
||||||
|
<!--Settings Activity -->
|
||||||
|
<string name="settings_general_category">Obecné</string>
|
||||||
|
<string name="settings_dark_theme_title">Tmavý Vzhled</string>
|
||||||
|
<string name="settings_dark_theme_summary">Povolit tmavý vzhled</string>
|
||||||
|
<string name="settings_notification_title">Oznámení o Aktualizaci</string>
|
||||||
|
<string name="settings_notification_summary">Zobrazí oznámení aktualizace, když je k dispozici nová verze</string>
|
||||||
|
<string name="settings_clear_cache_title">Smazat Uchovanou Mezipaměť</string>
|
||||||
|
<string name="settings_clear_cache_summary">Smaže informace online použití v Mezipaměti, donutí aplikaci obnovit informace online</string>
|
||||||
|
|
||||||
|
<string name="settings_magiskhide_summary">Skryje root (MagiskSU) před různými aplikacemi</string>
|
||||||
|
<string name="settings_busybox_title">Povolit BusyBox</string>
|
||||||
|
<string name="settings_busybox_summary">Nasadí vestavěný Magisk busybox do xbin</string>
|
||||||
|
<string name="settings_hosts_title">Nesystémová "hosts" data</string>
|
||||||
|
<string name="settings_hosts_summary">Podpora nesystémových dat "hosts" pro Adblock aplikace</string>
|
||||||
|
|
||||||
|
<string name="settings_su_app_adb">Aplikace i ADB</string>
|
||||||
|
<string name="settings_su_app">Pouze aplikace</string>
|
||||||
|
<string name="settings_su_adb">Pouze ADB</string>
|
||||||
|
<string name="settings_su_disable">Zakázáno</string>
|
||||||
|
<string name="settings_su_request_10">10 sekund</string>
|
||||||
|
<string name="settings_su_request_20">20 sekund</string>
|
||||||
|
<string name="settings_su_request_30">30 sekund</string>
|
||||||
|
<string name="settings_su_request_60">60 sekund</string>
|
||||||
|
<string name="superuser_access">Přístup Superuser</string>
|
||||||
|
<string name="auto_response">Automatická Reakce</string>
|
||||||
|
<string name="request_timeout">Časový limit Požadavku</string>
|
||||||
|
<string name="superuser_notification">Oznámení Superuser</string>
|
||||||
|
<string name="request_timeout_summary">%1$s sekund</string>
|
||||||
|
|
||||||
|
<string name="settings_development_category">Vývoj aplikace</string>
|
||||||
|
<string name="settings_developer_logging_title">Povolit pokročilé ladění logování</string>
|
||||||
|
<string name="settings_developer_logging_summary">Zkuste zapnout toto pro rozsáhlejší logování</string>
|
||||||
|
<string name="settings_shell_logging_title">Povolit logování pro příkazy shellu</string>
|
||||||
|
<string name="settings_shell_logging_summary">Logování všech příkazů shellu a jejich výstup</string>
|
||||||
|
|
||||||
|
<!--Superuser-->
|
||||||
|
<string name="su_request_title">Požadavek Superuser</string>
|
||||||
|
<string name="deny_with_str">Zamítnout%1$s</string>
|
||||||
|
<string name="deny">Zamítnout</string>
|
||||||
|
<string name="prompt">Dotaz</string>
|
||||||
|
<string name="grant">Povolit</string>
|
||||||
|
<string name="su_warning">Povolí plný přístup k vašemu zařízení.\nZamítněte pokud si nejste jisti!</string>
|
||||||
|
<string name="forever">Navždy</string>
|
||||||
|
<string name="once">Jednou</string>
|
||||||
|
<string name="tenmin">10 min</string>
|
||||||
|
<string name="twentymin">20 min</string>
|
||||||
|
<string name="thirtymin">30 min</string>
|
||||||
|
<string name="sixtymin">60 min</string>
|
||||||
|
<string name="su_allow_toast">Pro %1$s bylo oprávnění Superuser povoleno</string>
|
||||||
|
<string name="su_deny_toast">Pro %1$s bylo oprávnění Superuser zamítnuto</string>
|
||||||
|
<string name="no_apps_found">Zatím zde není žádná aplikace</string>
|
||||||
|
<string name="su_snack_grant">Superuser oprávnění pro %1$s je povoleno</string>
|
||||||
|
<string name="su_snack_deny">Superuser oprávnění pro %1$s je zamítnuto</string>
|
||||||
|
<string name="su_snack_notif_on">Oznámení pro %1$s je povoleno</string>
|
||||||
|
<string name="su_snack_notif_off">Oznámení pro %1$s je zakázáno</string>
|
||||||
|
<string name="su_snack_log_on">Logování %1$s je povoleno</string>
|
||||||
|
<string name="su_snack_log_off">Logování %1$s je zakázáno</string>
|
||||||
|
<string name="su_snack_revoke">Záznamy oprávnění %1$s jsou smazány</string>
|
||||||
|
<string name="su_revoke_title">Smazat?</string>
|
||||||
|
<string name="su_revoke_msg">Smazat záznam ohledně oprávnění pro %1$s?</string>
|
||||||
|
<string name="toast">Toast</string>
|
||||||
|
<string name="none">Žádné</string>
|
||||||
|
|
||||||
|
<!--Superuser logs-->
|
||||||
|
<string name="pid">PID:\u0020</string>
|
||||||
|
<string name="target_uid">Cílové UID:\u0020</string>
|
||||||
|
<string name="command">Příkaz:\u0020</string>
|
||||||
|
<string name="settings_core_only_summary"></string>
|
||||||
|
|
||||||
|
</resources>
|
@@ -3,11 +3,10 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--Welcome Activity-->
|
<!--Welcome Activity-->
|
||||||
<string name="navigation_drawer_open">Navigationsmenü öffnen</string>
|
<string name="navigation_drawer_open">Navigationsmenü öffnen</string>
|
||||||
<string name="navigation_drawer_close">Navigationsmenü schließen</string>
|
<string name="navigation_drawer_close">Navigationsmenü schließen</string>
|
||||||
|
|
||||||
<string name="modules">Module</string>
|
<string name="modules">Module</string>
|
||||||
<string name="downloads">Download</string>
|
<string name="downloads">Download</string>
|
||||||
<string name="superuser">Superuser</string>
|
<string name="superuser">Superuser</string>
|
||||||
@@ -18,7 +17,6 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">Magisk %1$s ist installiert</string>
|
<string name="magisk_version">Magisk %1$s ist installiert</string>
|
||||||
<string name="magisk_version_disable">Magisk %1$s ist deaktiviert</string>
|
|
||||||
<string name="magisk_version_error">Magisk ist nicht installiert</string>
|
<string name="magisk_version_error">Magisk ist nicht installiert</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">Suche nach Updates…</string>
|
<string name="checking_for_updates">Suche nach Updates…</string>
|
||||||
@@ -31,8 +29,7 @@
|
|||||||
<string name="safetyNet_check_text">SafetyNet-Status abfragen</string>
|
<string name="safetyNet_check_text">SafetyNet-Status abfragen</string>
|
||||||
<string name="checking_safetyNet_status">Prüfe SafetyNet-Status…</string>
|
<string name="checking_safetyNet_status">Prüfe SafetyNet-Status…</string>
|
||||||
<string name="safetyNet_connection_failed">Verbindung zur Google-API fehlgeschlagen</string>
|
<string name="safetyNet_connection_failed">Verbindung zur Google-API fehlgeschlagen</string>
|
||||||
<string name="safetyNet_connection_suspended">Verbindung zur Google-API wurde ausgesetzt</string>
|
<string name="safetyNet_connection_suspended">Verbindung zur Google-API wurde ausgesetzt</string>
|
||||||
|
|
||||||
<string name="safetyNet_error">SafetyNet-Status konnte nicht geprüft werden. Ist eine Internetverbindung verfügbar?</string>
|
<string name="safetyNet_error">SafetyNet-Status konnte nicht geprüft werden. Ist eine Internetverbindung verfügbar?</string>
|
||||||
<string name="safetyNet_fail">SafetyNet nicht bestanden: \"CTS profile mismatch\"</string>
|
<string name="safetyNet_fail">SafetyNet nicht bestanden: \"CTS profile mismatch\"</string>
|
||||||
<string name="safetyNet_pass">SafetyNet bestanden</string>
|
<string name="safetyNet_pass">SafetyNet bestanden</string>
|
||||||
@@ -40,6 +37,7 @@
|
|||||||
|
|
||||||
<!--Install Fragment-->
|
<!--Install Fragment-->
|
||||||
<string name="auto_detect">%1$s (autom.)</string>
|
<string name="auto_detect">%1$s (autom.)</string>
|
||||||
|
<string name="cannot_auto_detect">(Erkennung nicht möglich)</string>
|
||||||
<string name="boot_image_title">Boot-Image-Pfad</string>
|
<string name="boot_image_title">Boot-Image-Pfad</string>
|
||||||
<string name="detect_button">Automatisch</string>
|
<string name="detect_button">Automatisch</string>
|
||||||
<string name="advanced_settings_title">Erweiterte Optionen</string>
|
<string name="advanced_settings_title">Erweiterte Optionen</string>
|
||||||
@@ -47,11 +45,11 @@
|
|||||||
<string name="keep_dm_verity">\"dm-verity\"-Test beibehalten</string>
|
<string name="keep_dm_verity">\"dm-verity\"-Test beibehalten</string>
|
||||||
<string name="current_magisk_title">Installierte Magisk-Version: %1$s</string>
|
<string name="current_magisk_title">Installierte Magisk-Version: %1$s</string>
|
||||||
<string name="install_magisk_title">Neueste Magisk-Version: %1$s</string>
|
<string name="install_magisk_title">Neueste Magisk-Version: %1$s</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="uninstall">Deinstallieren</string>
|
<string name="uninstall">Deinstallieren</string>
|
||||||
<string name="reboot_countdown">Neustart in %1$d</string>
|
<string name="reboot_countdown">Neustart in %1$d</string>
|
||||||
|
<string name="uninstall_magisk_title">Magisk deinstallieren</string>
|
||||||
|
<string name="uninstall_magisk_msg">Dies entfernt alle Module, MagiskSU und verschlüsselt unter Umständen deine Daten, falls nicht bereits verschlüsselt.\nMöchtest du wirklich fortfahren?</string>
|
||||||
|
<string name="version_none">(keine)</string>
|
||||||
|
|
||||||
<!--Module Fragment-->
|
<!--Module Fragment-->
|
||||||
<string name="no_info_provided">(Nichts angegeben)</string>
|
<string name="no_info_provided">(Nichts angegeben)</string>
|
||||||
@@ -99,6 +97,7 @@
|
|||||||
<string name="repo_install_msg">Möchtest du %1$s installieren?</string>
|
<string name="repo_install_msg">Möchtest du %1$s installieren?</string>
|
||||||
<string name="download_install">Herunterladen & installieren</string>
|
<string name="download_install">Herunterladen & installieren</string>
|
||||||
<string name="download">Herunterladen</string>
|
<string name="download">Herunterladen</string>
|
||||||
|
<string name="goto_install">Zu \"Installieren\" wechseln</string>
|
||||||
<string name="download_file_error">Fehler beim Herunterladen der Datei</string>
|
<string name="download_file_error">Fehler beim Herunterladen der Datei</string>
|
||||||
<string name="install_error">Fehler bei der Installation!</string>
|
<string name="install_error">Fehler bei der Installation!</string>
|
||||||
<string name="invalid_zip">Die Zip-Datei ist kein Magisk-Modul!</string>
|
<string name="invalid_zip">Die Zip-Datei ist kein Magisk-Modul!</string>
|
||||||
@@ -119,27 +118,23 @@
|
|||||||
<string name="repo_cache_cleared">Repo-Cache gelöscht</string>
|
<string name="repo_cache_cleared">Repo-Cache gelöscht</string>
|
||||||
<string name="safetyNet_hide_notice">Diese App benutzt SafetyNet, welches standardmäßig von Magisk Hide gehandhabt</string>
|
<string name="safetyNet_hide_notice">Diese App benutzt SafetyNet, welches standardmäßig von Magisk Hide gehandhabt</string>
|
||||||
<string name="start_magiskhide">Starte Magisk Hide…</string>
|
<string name="start_magiskhide">Starte Magisk Hide…</string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<string name="no_magisksu_title">Du benutzt nicht MagiskSU!</string>
|
<string name="no_magisksu_title">Du benutzt nicht MagiskSU!</string>
|
||||||
<string name="no_magisksu_msg">Deine root-Lösung wird nicht offiziell unterstützt und Magisk Hide allein ist eventuell nicht ausreichend!\nEventuell benötigst du weitere Programme (z.B. \"suhide\"), um SafetyNet zu bestehen.</string>
|
<string name="no_magisksu_msg">Deine root-Lösung wird nicht offiziell unterstützt und Magisk Hide allein ist eventuell nicht ausreichend!\nEventuell benötigst du weitere Programme (z.B. \"suhide\"), um SafetyNet zu bestehen.</string>
|
||||||
<string name="understand">Ich verstehe</string>
|
<string name="understand">Ich verstehe</string>
|
||||||
<string name="process_error">Prozessfehler</string>
|
<string name="process_error">Prozessfehler</string>
|
||||||
<string name="internal_storage">Die zip-Datei ist gespeichert unter:\n[Interner Speicher]%1$s</string>
|
<string name="internal_storage">Die zip-Datei ist gespeichert unter:\n[Interner Speicher]%1$s</string>
|
||||||
<string name="zip_process_title">Verarbeite</string>
|
<string name="zip_process_title">Verarbeite</string>
|
||||||
|
<string name="manual_boot_image">Bitte Boot-Image auswählen!</string>
|
||||||
|
|
||||||
<!--Settings Activity -->
|
<!--Settings Activity -->
|
||||||
<string name="settings_general_category">Allgemein</string>
|
<string name="settings_general_category">Allgemein</string>
|
||||||
<string name="settings_dark_theme_title">Dunkles Theme</string>
|
<string name="settings_dark_theme_title">Dunkles Theme</string>
|
||||||
<string name="settings_dark_theme_summary">Dunkles Theme aktivieren</string>
|
<string name="settings_dark_theme_summary">Dunkles Theme aktivieren</string>
|
||||||
|
<string name="settings_notification_title">Update-Benachrichtigung</string>
|
||||||
|
<string name="settings_notification_summary">Benachrichtigung, wenn eine neue Version verfügbar ist</string>
|
||||||
<string name="settings_clear_cache_title">Repo-Cache löschen</string>
|
<string name="settings_clear_cache_title">Repo-Cache löschen</string>
|
||||||
<string name="settings_clear_cache_summary">Löscht die zwischengespeicherten Informationen der Online-Repos. Erzwingt eine Aktualisierung</string>
|
<string name="settings_clear_cache_summary">Löscht die zwischengespeicherten Informationen der Online-Repos. Erzwingt eine Aktualisierung</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">Magisk deaktivieren</string>
|
|
||||||
<string name="settings_disable_summary">Deaktiviert alles außer den root-Zugang (MagiskSU)</string>
|
|
||||||
<string name="settings_magiskhide_summary">Versteckt Magisk vor diversen Entdeckungsmethoden</string>
|
<string name="settings_magiskhide_summary">Versteckt Magisk vor diversen Entdeckungsmethoden</string>
|
||||||
<string name="settings_busybox_title">BusyBox aktivieren</string>
|
<string name="settings_busybox_title">BusyBox aktivieren</string>
|
||||||
<string name="settings_busybox_summary">Magisk\'s integriertes BusyBox nach xbin mounten</string>
|
<string name="settings_busybox_summary">Magisk\'s integriertes BusyBox nach xbin mounten</string>
|
||||||
@@ -172,7 +167,6 @@
|
|||||||
<string name="deny">Verweigern</string>
|
<string name="deny">Verweigern</string>
|
||||||
<string name="prompt">Nachfragen</string>
|
<string name="prompt">Nachfragen</string>
|
||||||
<string name="grant">Gewähren</string>
|
<string name="grant">Gewähren</string>
|
||||||
|
|
||||||
<string name="su_warning">Erlaubt den vollen Zugriff auf das Gerät.\nVerweigere, wenn du dir unsicher bist!</string>
|
<string name="su_warning">Erlaubt den vollen Zugriff auf das Gerät.\nVerweigere, wenn du dir unsicher bist!</string>
|
||||||
<string name="forever">Dauerhaft</string>
|
<string name="forever">Dauerhaft</string>
|
||||||
<string name="once">Nur diesmal</string>
|
<string name="once">Nur diesmal</string>
|
||||||
|
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
<!--Magisk Fragment-->
|
<!--Magisk Fragment-->
|
||||||
<string name="magisk_version">Instalado Magisk v%1$s</string>
|
<string name="magisk_version">Instalado Magisk v%1$s</string>
|
||||||
<string name="magisk_version_disable">Magisk v%1$s está deshabilitado</string>
|
|
||||||
<string name="magisk_version_error">Magisk no está instalado</string>
|
<string name="magisk_version_error">Magisk no está instalado</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">Comprobando actualizaciones…</string>
|
<string name="checking_for_updates">Comprobando actualizaciones…</string>
|
||||||
@@ -126,8 +125,6 @@
|
|||||||
<string name="settings_clear_cache_title">Limpiar caché del repositorio</string>
|
<string name="settings_clear_cache_title">Limpiar caché del repositorio</string>
|
||||||
<string name="settings_clear_cache_summary">Limpiar la información en caché para los repositorios en línea, fuerza a la aplicación a actualizar en línea</string>
|
<string name="settings_clear_cache_summary">Limpiar la información en caché para los repositorios en línea, fuerza a la aplicación a actualizar en línea</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">Deshabilitar Magisk</string>
|
|
||||||
<string name="settings_disable_summary">Todo será desactivado excepto el root (MagiskSU)</string>
|
|
||||||
<string name="settings_magiskhide_summary">Ocultar Magisk de varias detecciones</string>
|
<string name="settings_magiskhide_summary">Ocultar Magisk de varias detecciones</string>
|
||||||
<string name="settings_busybox_title">Habilitar BusyBox</string>
|
<string name="settings_busybox_title">Habilitar BusyBox</string>
|
||||||
<string name="settings_busybox_summary">Montar el busybox interno de Magisk en xbin</string>
|
<string name="settings_busybox_summary">Montar el busybox interno de Magisk en xbin</string>
|
||||||
|
181
app/src/main/res/values-fr/strings.xml
Normal file
181
app/src/main/res/values-fr/strings.xml
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
<resources>
|
||||||
|
<!--Universal-->
|
||||||
|
<!--Welcome Activity-->
|
||||||
|
<string name="navigation_drawer_open">Ouvrir le menu de navigation</string>
|
||||||
|
<string name="navigation_drawer_close">Fermer le menu de navigation</string>
|
||||||
|
<string name="modules">Modules</string>
|
||||||
|
<string name="downloads">Téléchargements</string>
|
||||||
|
<string name="superuser">Superuser</string>
|
||||||
|
<string name="log">Journal</string>
|
||||||
|
<string name="settings">Paramètres</string>
|
||||||
|
<string name="status">État</string>
|
||||||
|
<string name="install">Installer</string>
|
||||||
|
<!--Status Fragment-->
|
||||||
|
<string name="magisk_version">Magisk v%1$s installée</string>
|
||||||
|
<string name="magisk_version_core_only">Magisk v%1$s installée (Mode Core uniquement)</string>
|
||||||
|
<string name="magisk_version_error">Magisk non installé</string>
|
||||||
|
<string name="checking_for_updates">Vérification de mises à jour…</string>
|
||||||
|
<string name="magisk_update_available">Magisk v%1$.1f disponible !</string>
|
||||||
|
<string name="cannot_check_updates">Impossible de vérifier les mises à jour, pas d\'Internet ?</string>
|
||||||
|
<string name="up_to_date">Dernière version %1$s installée</string>
|
||||||
|
<string name="root_error">Rooté mais aucune permission root, non acceptée ?</string>
|
||||||
|
<string name="not_rooted">Non rooté</string>
|
||||||
|
<string name="proper_root">Correctement rooté</string>
|
||||||
|
<string name="safetyNet_check_text">Appuyer pour lancer le contrôle SafetyNet</string>
|
||||||
|
<string name="checking_safetyNet_status">Vérification de l\'état de SafetyNet…</string>
|
||||||
|
<string name="safetyNet_connection_failed">Impossible de se connecter à l\'API Google</string>
|
||||||
|
<string name="safetyNet_connection_suspended">La connexion à l\'API Google a été suspendue</string>
|
||||||
|
<string name="safetyNet_error">Impossible de contrôler SafetyNet, pas d\'Internet?</string>
|
||||||
|
<string name="safetyNet_fail">Échec SafetyNet: erreur de profil CTS</string>
|
||||||
|
<string name="safetyNet_pass">SafetyNet réussi</string>
|
||||||
|
<string name="root_info_warning">Fonctionnalités largement limitées</string>
|
||||||
|
<!--Install Fragment-->
|
||||||
|
<string name="auto_detect">(Auto) %1$s</string>
|
||||||
|
<string name="cannot_auto_detect">(Auto détection impossible)</string>
|
||||||
|
<string name="boot_image_title">Emplacement de l\'Image Boot</string>
|
||||||
|
<string name="detect_button">Détection</string>
|
||||||
|
<string name="advanced_settings_title">Paramètres avancés</string>
|
||||||
|
<string name="keep_force_encryption">Garder le chiffrement forcé</string>
|
||||||
|
<string name="keep_dm_verity">Garder dm-verity</string>
|
||||||
|
<string name="current_magisk_title">Version Magisk Installée : %1$s</string>
|
||||||
|
<string name="install_magisk_title">Dernière Version Magisk : %1$s</string>
|
||||||
|
<string name="uninstall">Désinstaller</string>
|
||||||
|
<string name="reboot_countdown">Redémarrage dans %1$d</string>
|
||||||
|
<string name="uninstall_magisk_title">Désinstaller Magisk</string>
|
||||||
|
<string name="uninstall_magisk_msg">Cela va supprimer tous les modules, MagiskSU et éventuellement chiffrer vos données si vous n\'êtes pas chiffré\nÊtes-vous sûr de vouloir continuer ?</string>
|
||||||
|
<string name="version_none">(Aucune)</string>
|
||||||
|
<!--Module Fragment-->
|
||||||
|
<string name="no_info_provided">(Aucune information transmise)</string>
|
||||||
|
<string name="no_modules_found">Aucun module trouvé</string>
|
||||||
|
<string name="update_file_created">Le module va être mis à jour au prochain redémarrage</string>
|
||||||
|
<string name="remove_file_created">Le module va être supprimé au prochain redémarrage</string>
|
||||||
|
<string name="remove_file_deleted">Le modufle ne va pas être supprimé au prochain redémarrage</string>
|
||||||
|
<string name="disable_file_created">Le module va être désactivé au prochain redémarrage</string>
|
||||||
|
<string name="disable_file_removed">Le module va être activé au prochain redémarrage</string>
|
||||||
|
<string name="author">Créé par %1$s</string>
|
||||||
|
<string name="fab_flash_zip">Flasher un Module Zip</string>
|
||||||
|
<!--Repo Fragment-->
|
||||||
|
<string name="update_available">Mise à jour disponible</string>
|
||||||
|
<string name="installed">Installé</string>
|
||||||
|
<string name="not_installed">Non installé</string>
|
||||||
|
<!--Log Fragment-->
|
||||||
|
<string name="menuSaveToSd">Enregistrer sur SD</string>
|
||||||
|
<string name="menuReload">Actualiser</string>
|
||||||
|
<string name="menuClearLog">Effacer le journal maintenant</string>
|
||||||
|
<string name="logs_cleared">Journal effacé avec succès</string>
|
||||||
|
<string name="log_is_empty">Journal vide</string>
|
||||||
|
<string name="logs_save_failed">Impossible d\'écrire le journal sur la SD card:</string>
|
||||||
|
<!--About Activity-->
|
||||||
|
<string name="about">À propos</string>
|
||||||
|
<string name="app_developers">Principaux développeurs</string>
|
||||||
|
<string name="app_developers_"><![CDATA[App created by <a href="https://github.com/topjohnwu">topjohnwu</a> in collaboration with <a href="https://github.com/d8ahazard">Digitalhigh</a> and <a href="https://github.com/dvdandroid">Dvdandroid</a>.]]></string>
|
||||||
|
<string name="app_changelog">Modifications de l\'application</string>
|
||||||
|
<string name="translators" />
|
||||||
|
<string name="app_version">Version de l\'application</string>
|
||||||
|
<string name="app_source_code">Code source</string>
|
||||||
|
<string name="donation">Dons</string>
|
||||||
|
<string name="app_translators">Traducteurs de l\'application</string>
|
||||||
|
<string name="support_thread">Sujet pour support</string>
|
||||||
|
<!--Toasts, Dialogs-->
|
||||||
|
<string name="permissionNotGranted">Cette fonctionnalité ne marchera pas sans la permission d\'écriture sur le stockage externe.</string>
|
||||||
|
<string name="no_thanks">Non merci</string>
|
||||||
|
<string name="yes">Oui</string>
|
||||||
|
<string name="ok">OK</string>
|
||||||
|
<string name="close">Fermer</string>
|
||||||
|
<string name="repo_install_title">Installer %1$s</string>
|
||||||
|
<string name="repo_install_msg">Voulez-vous installer %1$s ?</string>
|
||||||
|
<string name="download_install">Télécharger & Installer</string>
|
||||||
|
<string name="download">Télécharger</string>
|
||||||
|
<string name="goto_install">Aller à la section \"Installer\"</string>
|
||||||
|
<string name="download_file_error">Erreur de téléchargement du fichier</string>
|
||||||
|
<string name="install_error">Échec de l\'installation !</string>
|
||||||
|
<string name="invalid_zip">Ce zip n\'est pas un Module Magisk !!</string>
|
||||||
|
<string name="reboot_title">Installation réussie !</string>
|
||||||
|
<string name="reboot_msg">Voulez-vous redémarrer maintenant ?</string>
|
||||||
|
<string name="reboot">Redémarrer</string>
|
||||||
|
<string name="copying_msg">Copie du zip dans le répertoire temp</string>
|
||||||
|
<string name="zip_install_progress_title">Installation</string>
|
||||||
|
<string name="zip_unzip_msg">Décompression du fichier zip…</string>
|
||||||
|
<string name="zip_process_msg">Exécution du fichier zip…</string>
|
||||||
|
<string name="zip_install_progress_msg">Installation %1$s…</string>
|
||||||
|
<string name="no_magisk_title">Magisk non installé !</string>
|
||||||
|
<string name="no_magisk_msg">Voulez-vous télécharger et installer Magisk ?</string>
|
||||||
|
<string name="downloading_toast">Téléchargement %1$s</string>
|
||||||
|
<string name="magisk_update_title">Nouvelle mise à jour de Magisk disponible !</string>
|
||||||
|
<string name="settings_reboot_toast">Redémarrer pour appliquer les changements</string>
|
||||||
|
<string name="release_notes">Notes de version</string>
|
||||||
|
<string name="repo_cache_cleared">Cache du dépôt effacé</string>
|
||||||
|
<string name="safetyNet_hide_notice">Cette application utilise SafetyNet\nDéjà pris en charge par MagiskHide par défaut</string>
|
||||||
|
<string name="start_magiskhide">Lancement de MagiskHide …</string>
|
||||||
|
<string name="no_magisksu_title">MagiskSU non utilisé !</string>
|
||||||
|
<string name="no_magisksu_msg">Vous n\'êtes pas rooté avec MagiskSU, utiliser uniquement MagiskHide peut ne pas suffire !\nCeci n\'est officiellement pas supporté et vous devriez avoir besoin d\'autres outils (ex : suhide) pour passer SafetyNet.</string>
|
||||||
|
<string name="understand">Je comprends</string>
|
||||||
|
<string name="process_error">Erreur d\'exécution</string>
|
||||||
|
<string name="internal_storage">Le zip est stocké dans :\n[Internal Storage]%1$s</string>
|
||||||
|
<string name="zip_process_title">Exécution</string>
|
||||||
|
<string name="manual_boot_image">Veuillez sélectionner l\'image boot manuellement !</string>
|
||||||
|
<!--Settings Activity -->
|
||||||
|
<string name="settings_general_category">Général</string>
|
||||||
|
<string name="settings_dark_theme_title">Thème sombre</string>
|
||||||
|
<string name="settings_dark_theme_summary">Activer le thème sombre</string>
|
||||||
|
<string name="settings_notification_title">Notification de mise à jour</string>
|
||||||
|
<string name="settings_notification_summary">Afficher des notifications de mises à jour quand une nouvelle version est disponible</string>
|
||||||
|
<string name="settings_clear_cache_title">Effacer le cache du dépôt</string>
|
||||||
|
<string name="settings_clear_cache_summary">Effacer les informations en cache des dépôts en ligne, pour forcer une actualisation de l\'application</string>
|
||||||
|
<string name="settings_core_only_title">Mode Magisk Core uniquement</string>
|
||||||
|
<string name="settings_core_only_summary">Activer uniquement les fonctionnalités de base, tous les modules ne seront pas chargés. MagiskSU, MagiskHide, les hosts systemless et busybox restent activés</string>
|
||||||
|
<string name="settings_magiskhide_summary">Masquer Magisk de diverses détections</string>
|
||||||
|
<string name="settings_busybox_title">Activer BusyBox</string>
|
||||||
|
<string name="settings_busybox_summary">Relier le busybox de Magisk à xbin</string>
|
||||||
|
<string name="settings_hosts_title">Hosts systemless</string>
|
||||||
|
<string name="settings_hosts_summary">Support hosts systemless pour les applications type Adblock</string>
|
||||||
|
<string name="settings_su_app_adb">Applications et ADB</string>
|
||||||
|
<string name="settings_su_app">Applications uniquement</string>
|
||||||
|
<string name="settings_su_adb">ADB uniquement</string>
|
||||||
|
<string name="settings_su_disable">Désactivé</string>
|
||||||
|
<string name="settings_su_request_10">10 secondes</string>
|
||||||
|
<string name="settings_su_request_20">20 secondes</string>
|
||||||
|
<string name="settings_su_request_30">30 secondes</string>
|
||||||
|
<string name="settings_su_request_60">60 secondes</string>
|
||||||
|
<string name="superuser_access">Accès Superuser</string>
|
||||||
|
<string name="auto_response">Réponse automatique</string>
|
||||||
|
<string name="request_timeout">Délai de requête</string>
|
||||||
|
<string name="superuser_notification">Notification Superuser</string>
|
||||||
|
<string name="request_timeout_summary">%1$s secondes</string>
|
||||||
|
<string name="settings_development_category">Dévellopement de l\'application</string>
|
||||||
|
<string name="settings_developer_logging_title">Activer le journal de débogage avancé</string>
|
||||||
|
<string name="settings_developer_logging_summary">Cocher ceci pour activer la journalisation "verbose" (tout)</string>
|
||||||
|
<string name="settings_shell_logging_title">Activer la journalisation de débogage de commande shell</string>
|
||||||
|
<string name="settings_shell_logging_summary">Cocher ceci pour activer la journalisation de toutes les commandes shell et leurs données de sortie</string>
|
||||||
|
<!--Superuser-->
|
||||||
|
<string name="su_request_title">Requête Superuser</string>
|
||||||
|
<string name="deny_with_str">Refuser%1$s</string>
|
||||||
|
<string name="deny">Refuser</string>
|
||||||
|
<string name="prompt">Demander</string>
|
||||||
|
<string name="grant">Accepter</string>
|
||||||
|
<string name="su_warning">Accepter un accès complet à votre appareil.\nRefuser si vous n\'êtes pas sûr!</string>
|
||||||
|
<string name="forever">Toujours</string>
|
||||||
|
<string name="once">Une fois</string>
|
||||||
|
<string name="tenmin">10 min</string>
|
||||||
|
<string name="twentymin">20 min</string>
|
||||||
|
<string name="thirtymin">30 min</string>
|
||||||
|
<string name="sixtymin">60 min</string>
|
||||||
|
<string name="su_allow_toast">%1$s a obtenu les droits Superuser</string>
|
||||||
|
<string name="su_deny_toast">%1$s n\'a pas obtenu les droits Superuser</string>
|
||||||
|
<string name="no_apps_found">Aucun application trouvée</string>
|
||||||
|
<string name="su_snack_grant">Les droits Superuser de %1$s sont accordés</string>
|
||||||
|
<string name="su_snack_deny">Les droits Superuser de %1$s sont refusés</string>
|
||||||
|
<string name="su_snack_notif_on">Les notifications pour %1$s sont activées</string>
|
||||||
|
<string name="su_snack_notif_off">Les notifications pour %1$s sont désactivées</string>
|
||||||
|
<string name="su_snack_log_on">La journalisation pour %1$s est activée</string>
|
||||||
|
<string name="su_snack_log_off">La journalisation pour %1$s est désactivée</string>
|
||||||
|
<string name="su_snack_revoke">Les droits de %1$s sont annulés</string>
|
||||||
|
<string name="su_revoke_title">Annuler ?</string>
|
||||||
|
<string name="su_revoke_msg">Vous confirmez l\'annulation des droits pour %1$s ?</string>
|
||||||
|
<string name="toast">Toast</string>
|
||||||
|
<string name="none">Aucun</string>
|
||||||
|
<!--Superuser logs-->
|
||||||
|
<string name="pid">PID :\u0020</string>
|
||||||
|
<string name="target_uid">Cible UID:\u0020</string>
|
||||||
|
<string name="command">Commande :\u0020</string>
|
||||||
|
</resources>
|
@@ -35,14 +35,19 @@
|
|||||||
|
|
||||||
<!--Install Fragment-->
|
<!--Install Fragment-->
|
||||||
<string name="auto_detect">(Auto) %1$s</string>
|
<string name="auto_detect">(Auto) %1$s</string>
|
||||||
<string name="boot_image_title">Boot Image</string>
|
<string name="cannot_auto_detect">(Cannot auto detect)</string>
|
||||||
|
<string name="boot_image_title">Immagine Boot</string>
|
||||||
<string name="detect_button">Identifica</string>
|
<string name="detect_button">Identifica</string>
|
||||||
<string name="advanced_settings_title">Impostazioni Avanzate</string>
|
<string name="advanced_settings_title">Impostazioni Avanzate</string>
|
||||||
<string name="keep_force_encryption">Mantieni crittografia forzata</string>
|
<string name="keep_force_encryption">Mantieni crittografia forzata</string>
|
||||||
<string name="keep_dm_verity">Mantieni dm-verity</string>
|
<string name="keep_dm_verity">Mantieni dm-verity</string>
|
||||||
<string name="current_magisk_title">Versione Magisk installata: %1$s</string>
|
<string name="current_magisk_title">Versione Magisk installata: %1$s</string>
|
||||||
<string name="install_magisk_title">Ultima versione Magisk: %1$s</string>
|
<string name="install_magisk_title">Ultima versione Magisk: %1$s</string>
|
||||||
|
<string name="uninstall">Disinstalla</string>
|
||||||
|
<string name="reboot_countdown">Riavvio in %1$d</string>
|
||||||
|
<string name="uninstall_magisk_title">Disinstalla Magisk</string>
|
||||||
|
<string name="uninstall_magisk_msg">Questo rimuoverà tutti i moduli, MagiskSU, e potenzialmente crittografare i dati, se non crittografati/nVuoi continuare?</string>
|
||||||
|
<string name="version_none">(None)</string>
|
||||||
|
|
||||||
<!--Module Fragment-->
|
<!--Module Fragment-->
|
||||||
<string name="no_info_provided">(Nessuna informazione)</string>
|
<string name="no_info_provided">(Nessuna informazione)</string>
|
||||||
@@ -83,41 +88,109 @@
|
|||||||
<!--Toasts, Dialogs-->
|
<!--Toasts, Dialogs-->
|
||||||
<string name="permissionNotGranted">Questa funzione non funziona senza il permesso di scrivere sulla memoria di archiviazione esterna</string>
|
<string name="permissionNotGranted">Questa funzione non funziona senza il permesso di scrivere sulla memoria di archiviazione esterna</string>
|
||||||
<string name="no_thanks">No grazie</string>
|
<string name="no_thanks">No grazie</string>
|
||||||
|
<string name="yes">Sì</string>
|
||||||
|
<string name="ok">OK</string>
|
||||||
|
<string name="close">Chiuso</string>
|
||||||
<string name="repo_install_title">Installazione %1$s</string>
|
<string name="repo_install_title">Installazione %1$s</string>
|
||||||
<string name="repo_install_msg">Vuoi installare %1$s ?</string>
|
<string name="repo_install_msg">Vuoi installare %1$s ?</string>
|
||||||
<string name="download_install">Scarica e installa</string>
|
<string name="download_install">Scarica e installa</string>
|
||||||
|
<string name="download">Download</string>
|
||||||
|
<string name="goto_install">Valla alla sezione \"Install\"</string>
|
||||||
<string name="download_file_error">Errore nel download del file</string>
|
<string name="download_file_error">Errore nel download del file</string>
|
||||||
<string name="install_error">Errore di installazione!</string>
|
<string name="install_error">Errore di installazione!</string>
|
||||||
<string name="invalid_zip">Lo zip non è un Modulo Magisk!!</string>
|
<string name="invalid_zip">Lo zip non è un Modulo Magisk!!</string>
|
||||||
<string name="reboot_title">Installazione completata</string>
|
<string name="reboot_title">Installazione completata</string>
|
||||||
<string name="reboot_msg">Vuoi riavviare ora?</string>
|
<string name="reboot_msg">Vuoi riavviare ora?</string>
|
||||||
<string name="reboot">Riavvia</string>
|
<string name="reboot">Riavvia</string>
|
||||||
|
<string name="copying_msg">Copia Zip in una directory temporanea</string>
|
||||||
<string name="zip_install_progress_title">Installazione</string>
|
<string name="zip_install_progress_title">Installazione</string>
|
||||||
|
<string name="zip_unzip_msg">Unzip zip file …</string>
|
||||||
|
<string name="zip_process_msg">Elaborazione file Zip …</string>
|
||||||
<string name="zip_install_progress_msg">Installazione %1$s …</string>
|
<string name="zip_install_progress_msg">Installazione %1$s …</string>
|
||||||
<string name="no_magisk_title">Magisk non installato!</string>
|
<string name="no_magisk_title">Magisk non installato!</string>
|
||||||
<string name="no_magisk_msg">Vuoi scaricare ed installare Magisk?</string>
|
<string name="no_magisk_msg">Vuoi scaricare ed installare Magisk?</string>
|
||||||
|
<string name="downloading_toast">Download %1$s</string>
|
||||||
|
<string name="magisk_update_title">Nuovo aggiornamento Magisk disponibile!</string>
|
||||||
|
<string name="settings_reboot_toast">Riavvia per applicare</string>
|
||||||
|
<string name="release_notes">Note di Rilascio</string>
|
||||||
|
<string name="repo_cache_cleared">Cache Repo cancellata</string>
|
||||||
|
<string name="safetyNet_hide_notice">Quest\'app usa SafetyNet\nè già gestita da Magisk Hide</string>
|
||||||
|
<string name="start_magiskhide">Avvio MagiskHide …</string>
|
||||||
|
<string name="no_magisksu_title">MagiskSU non in uso!</string>
|
||||||
|
<string name="no_magisksu_msg">You are not rooted with MagiskSU, using MagiskHide itself might not be enough!\nIt\'s not officially supported, and you would need additional tools (e.g suhide) to pass Safety Net.</string>
|
||||||
|
<string name="understand">Capisco</string>
|
||||||
|
<string name="process_error">Errore di processo</string>
|
||||||
|
<string name="internal_storage">Lo zip si trova in:\n[Internal Storage]%1$s</string>
|
||||||
|
<string name="zip_process_title">Elaborazione</string>
|
||||||
|
<string name="manual_boot_image">Seleziona manualmente l\'immagine di Boot!</string>
|
||||||
|
|
||||||
<!--URL Templates-->
|
|
||||||
|
|
||||||
<!--Settings Fragment -->
|
<!--Settings Activity -->
|
||||||
<string name="settings_general_category">Generali</string>
|
<string name="settings_general_category">General</string>
|
||||||
<string name="settings_dark_theme_title">Tema</string>
|
<string name="settings_dark_theme_title">Tema Scuro</string>
|
||||||
<string name="settings_dark_theme_summary">Scegli un tema</string>
|
<string name="settings_dark_theme_summary">Abilita Tema Scuro</string>
|
||||||
|
<string name="settings_notification_title">Notifica Aggiornamento</string>
|
||||||
|
<string name="settings_notification_summary">Mostra notifiche quando sono diponibili nuovi aggiornamenti</string>
|
||||||
|
<string name="settings_clear_cache_title">Pulisci Cache Repo</string>
|
||||||
|
<string name="settings_clear_cache_summary">Clear the cached information for online repos, forces the app to refresh online</string>
|
||||||
|
|
||||||
|
<string name="settings_magiskhide_summary">Hide Magisk from various detections</string>
|
||||||
<string name="settings_busybox_title">Abilita BusyBox</string>
|
<string name="settings_busybox_title">Abilita BusyBox</string>
|
||||||
|
<string name="settings_busybox_summary">Bind mount Magisk\'s built-in busybox to xbin</string>
|
||||||
|
<string name="settings_hosts_title">Systemless hosts</string>
|
||||||
|
<string name="settings_hosts_summary">Systemless hosts support for Adblock apps</string>
|
||||||
|
|
||||||
<string name="settings_development_category">Development</string>
|
<string name="settings_su_app_adb">Apps e ADB</string>
|
||||||
<string name="settings_developer_logging_title">Abilita Debug log avanzato</string>
|
<string name="settings_su_app">Solo Apps</string>
|
||||||
<string name="settings_developer_logging_summary">Abilita questa funzione per avere un log più dettagliato.</string>
|
<string name="settings_su_adb">Solo ADB</string>
|
||||||
<string name="settings_shell_logging_title">Abilita shell di registrazione dei comandi di debug</string>
|
<string name="settings_su_disable">Disabilitato</string>
|
||||||
<string name="settings_shell_logging_summary">Abilita questa funzione per abilitare la registrazione tutti i comandi e l\'output della shell</string>
|
<string name="settings_su_request_10">10 secondi</string>
|
||||||
|
<string name="settings_su_request_20">20 secondi</string>
|
||||||
|
<string name="settings_su_request_30">30 secondi</string>
|
||||||
|
<string name="settings_su_request_60">60 secondi</string>
|
||||||
|
<string name="superuser_access">Accesso Superuser</string>
|
||||||
|
<string name="auto_response">Risposta Automatica</string>
|
||||||
|
<string name="request_timeout">Timeout richiesto</string>
|
||||||
|
<string name="superuser_notification">Notifica Superuser</string>
|
||||||
|
<string name="request_timeout_summary">%1$s secondi</string>
|
||||||
|
|
||||||
<!-- Strings related to Settings -->
|
<string name="settings_development_category">App Development</string>
|
||||||
|
<string name="settings_developer_logging_title">Abilita Debug Log Avanzato</string>
|
||||||
|
<string name="settings_developer_logging_summary">Check this to enable verbose logging</string>
|
||||||
|
<string name="settings_shell_logging_title">Abilita comandi shell debug log</string>
|
||||||
|
<string name="settings_shell_logging_summary">Check this to enable logging all shell commands and its output</string>
|
||||||
|
|
||||||
<!-- Example General settings -->
|
<!--Superuser-->
|
||||||
|
<string name="su_request_title">Richiesta Superuser</string>
|
||||||
|
<string name="deny_with_str">Nega%1$s</string>
|
||||||
|
<string name="deny">Nega</string>
|
||||||
|
<string name="prompt">Prompt</string>
|
||||||
|
<string name="grant">Concedi</string>
|
||||||
|
<string name="su_warning">Concede il pieno accesso al dispositivo.\nNega se non sei sicuro</string>
|
||||||
|
<string name="forever">Sempre</string>
|
||||||
|
<string name="once">Una volta</string>
|
||||||
|
<string name="tenmin">10 minuti</string>
|
||||||
|
<string name="twentymin">20 minuti</string>
|
||||||
|
<string name="thirtymin">30 minuti</string>
|
||||||
|
<string name="sixtymin">60 minuti</string>
|
||||||
|
<string name="su_allow_toast">%1$s ha ottenuto i permessi Superuser</string>
|
||||||
|
<string name="su_deny_toast">%1$s non ha ottenuto i permessi Superuser</string>
|
||||||
|
<string name="no_apps_found">Nessuna app trovata</string>
|
||||||
|
<string name="su_snack_grant">Permessi Superuser per %1$s ottenuti</string>
|
||||||
|
<string name="su_snack_deny">Permessi Superuser per %1$s non ottenuti</string>
|
||||||
|
<string name="su_snack_notif_on">Notifiche per %1$s abilitate</string>
|
||||||
|
<string name="su_snack_notif_off">Notifiche per %1$s disabilitate</string>
|
||||||
|
<string name="su_snack_log_on">Log per %1$s è abilitato</string>
|
||||||
|
<string name="su_snack_log_off">Log per %1$s è disabilitato</string>
|
||||||
|
<string name="su_snack_revoke">%1$s rights are revoked</string>
|
||||||
|
<string name="su_revoke_title">Revoke?</string>
|
||||||
|
<string name="su_revoke_msg">Confirm to revoke %1$s rights?</string>
|
||||||
|
<string name="toast">Toast</string>
|
||||||
|
<string name="none">Nessuno</string>
|
||||||
|
|
||||||
<!-- Example settings for Data & Sync -->
|
<!--Superuser logs-->
|
||||||
|
<string name="pid">PID:\u0020</string>
|
||||||
<!-- Example settings for Notifications -->
|
<string name="target_uid">Target UID:\u0020</string>
|
||||||
|
<string name="command">Command:\u0020</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">Magisk v%1$s 설치됨</string>
|
<string name="magisk_version">Magisk v%1$s 설치됨</string>
|
||||||
<string name="magisk_version_disable">Magisk v%1$s 비활성화됨</string>
|
|
||||||
<string name="magisk_version_error">Magisk가 설치되지 않음</string>
|
<string name="magisk_version_error">Magisk가 설치되지 않음</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">업데이트 확인 중…</string>
|
<string name="checking_for_updates">업데이트 확인 중…</string>
|
||||||
@@ -124,8 +123,6 @@
|
|||||||
<string name="settings_clear_cache_title">저장소 캐시 비우기</string>
|
<string name="settings_clear_cache_title">저장소 캐시 비우기</string>
|
||||||
<string name="settings_clear_cache_summary">온라인 저장소에 대해 캐시된 정보를 지우고, 온라인에서 정보를 강제로 새로 고칩니다.</string>
|
<string name="settings_clear_cache_summary">온라인 저장소에 대해 캐시된 정보를 지우고, 온라인에서 정보를 강제로 새로 고칩니다.</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">Magisk 비활성화</string>
|
|
||||||
<string name="settings_disable_summary">루팅(MagiskSU)을 제외한 모든 것이 비활성화됩니다.</string>
|
|
||||||
<string name="settings_magiskhide_summary">다양한 감지로부터 Magisk를 숨깁니다.</string>
|
<string name="settings_magiskhide_summary">다양한 감지로부터 Magisk를 숨깁니다.</string>
|
||||||
<string name="settings_busybox_title">BusyBox 사용</string>
|
<string name="settings_busybox_title">BusyBox 사용</string>
|
||||||
<string name="settings_busybox_summary">xbin 디렉터리에 Magisk의 빌트인 busybox를 바인드합니다.</string>
|
<string name="settings_busybox_summary">xbin 디렉터리에 Magisk의 빌트인 busybox를 바인드합니다.</string>
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
<!--Welcome Activity-->
|
<!--Welcome Activity-->
|
||||||
<string name="navigation_drawer_open">Otwórz szufladę nawigacji</string>
|
<string name="navigation_drawer_open">Otwórz szufladę nawigacji</string>
|
||||||
<string name="navigation_drawer_close">Zamknij szufladę nawigacji</string>
|
<string name="navigation_drawer_close">Zamknij szufladę nawigacji</string>
|
||||||
|
|
||||||
<string name="modules">Moduły</string>
|
<string name="modules">Moduły</string>
|
||||||
<string name="downloads">Pobieranie</string>
|
<string name="downloads">Pobieranie</string>
|
||||||
<string name="superuser">Superuser</string>
|
<string name="superuser">Superuser</string>
|
||||||
@@ -16,7 +17,6 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">Zainstalowany Magisk v%1$s</string>
|
<string name="magisk_version">Zainstalowany Magisk v%1$s</string>
|
||||||
<string name="magisk_version_disable">Magisk v%1$s wyłaczony</string>
|
|
||||||
<string name="magisk_version_error">Magisk nie jest zainstalowany</string>
|
<string name="magisk_version_error">Magisk nie jest zainstalowany</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">Sprawdzanie aktualizacji…</string>
|
<string name="checking_for_updates">Sprawdzanie aktualizacji…</string>
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
<!--Install Fragment-->
|
<!--Install Fragment-->
|
||||||
<string name="auto_detect">(Auto) %1$s</string>
|
<string name="auto_detect">(Auto) %1$s</string>
|
||||||
|
<string name="cannot_auto_detect">(Nie można automatycznie wykryć)</string>
|
||||||
<string name="boot_image_title">Lokalizacja Boot Image</string>
|
<string name="boot_image_title">Lokalizacja Boot Image</string>
|
||||||
<string name="detect_button">Wykryj</string>
|
<string name="detect_button">Wykryj</string>
|
||||||
<string name="advanced_settings_title">Zaawansowane Ustawienia</string>
|
<string name="advanced_settings_title">Zaawansowane Ustawienia</string>
|
||||||
@@ -44,9 +45,11 @@
|
|||||||
<string name="keep_dm_verity">Keep dm-verity</string>
|
<string name="keep_dm_verity">Keep dm-verity</string>
|
||||||
<string name="current_magisk_title">Zainstalowana Wersja Magisk: %1$s</string>
|
<string name="current_magisk_title">Zainstalowana Wersja Magisk: %1$s</string>
|
||||||
<string name="install_magisk_title">Ostatnia Wersja Magisk: %1$s</string>
|
<string name="install_magisk_title">Ostatnia Wersja Magisk: %1$s</string>
|
||||||
|
|
||||||
<string name="uninstall">Odinstaluj</string>
|
<string name="uninstall">Odinstaluj</string>
|
||||||
<string name="reboot_countdown">Restartuj do %1$d</string>
|
<string name="reboot_countdown">Restartuj do %1$d</string>
|
||||||
|
<string name="uninstall_magisk_title">Odinstaluj Magisk</string>
|
||||||
|
<string name="uninstall_magisk_msg">Spowoduje to usunięcie wszystkich modułów, MagiskSU i potencjalnie szyfrowanie danych jeśli nie były szyfrowane \ nCzy na pewno kontynuować?</string>
|
||||||
|
<string name="version_none">(Brak)</string>
|
||||||
|
|
||||||
<!--Module Fragment-->
|
<!--Module Fragment-->
|
||||||
<string name="no_info_provided">(Nie umieszczono informacji)</string>
|
<string name="no_info_provided">(Nie umieszczono informacji)</string>
|
||||||
@@ -121,16 +124,17 @@
|
|||||||
<string name="process_error">Błąd procesu</string>
|
<string name="process_error">Błąd procesu</string>
|
||||||
<string name="internal_storage">Zip jest przechowywany w:\n[Pamięć Wewnętrzna]%1$s</string>
|
<string name="internal_storage">Zip jest przechowywany w:\n[Pamięć Wewnętrzna]%1$s</string>
|
||||||
<string name="zip_process_title">Przetwarzanie</string>
|
<string name="zip_process_title">Przetwarzanie</string>
|
||||||
|
<string name="manual_boot_image">Proszę ręcznie wybrać boot image!</string>
|
||||||
|
|
||||||
<!--Settings Activity -->
|
<!--Settings Activity -->
|
||||||
<string name="settings_general_category">Ogólne</string>
|
<string name="settings_general_category">Ogólne</string>
|
||||||
<string name="settings_dark_theme_title">Ciemny Motyw</string>
|
<string name="settings_dark_theme_title">Ciemny Motyw</string>
|
||||||
<string name="settings_dark_theme_summary">Włącz ciemny motyw</string>
|
<string name="settings_dark_theme_summary">Włącz ciemny motyw</string>
|
||||||
|
<string name="settings_notification_title">Powiadomienie o Aktualizacji</string>
|
||||||
|
<string name="settings_notification_summary">Pokaż powiadomienie o aktualizacji kiedy będzie dostępna nowa wersja</string>
|
||||||
<string name="settings_clear_cache_title">Wyczyść Pamięć Repozytorium</string>
|
<string name="settings_clear_cache_title">Wyczyść Pamięć Repozytorium</string>
|
||||||
<string name="settings_clear_cache_summary">Wymusza na aplikacji odświeżenie online repozytorium</string>
|
<string name="settings_clear_cache_summary">Wymusza na aplikacji odświeżenie online repozytorium</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">Wyłącz Magisk</string>
|
|
||||||
<string name="settings_disable_summary">Wszystko zostanie wyłączone za wyjątkiem roota (MagiskSU)</string>
|
|
||||||
<string name="settings_magiskhide_summary">Włącz Hide Magisk dla wykrytych aplikacji</string>
|
<string name="settings_magiskhide_summary">Włącz Hide Magisk dla wykrytych aplikacji</string>
|
||||||
<string name="settings_busybox_title">Włącz BusyBox</string>
|
<string name="settings_busybox_title">Włącz BusyBox</string>
|
||||||
<string name="settings_busybox_summary">Zmień montowanie Magisk z wbudowanego busybox do xbin</string>
|
<string name="settings_busybox_summary">Zmień montowanie Magisk z wbudowanego busybox do xbin</string>
|
||||||
|
@@ -180,8 +180,6 @@
|
|||||||
<string name="pid">PID:\u0020</string>
|
<string name="pid">PID:\u0020</string>
|
||||||
<string name="target_uid">Alvo UID:\u0020</string>
|
<string name="target_uid">Alvo UID:\u0020</string>
|
||||||
<string name="command">Comando:\u0020</string>
|
<string name="command">Comando:\u0020</string>
|
||||||
<string name="settings_disable_title">Desativar Magic Mount</string>
|
|
||||||
<string name="settings_disable_summary">Desativa Magic Mount, Isso impedirá que todos os módulos funcionem</string>
|
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">Установлен Magisk v%1$s</string>
|
<string name="magisk_version">Установлен Magisk v%1$s</string>
|
||||||
<string name="magisk_version_disable">Magisk v%1$s выключен</string>
|
|
||||||
<string name="magisk_version_error">Magisk не установлен</string>
|
<string name="magisk_version_error">Magisk не установлен</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">Проверка обновлений…</string>
|
<string name="checking_for_updates">Проверка обновлений…</string>
|
||||||
@@ -119,8 +118,6 @@
|
|||||||
<string name="settings_clear_cache_title">Очистить кэш репозиториев</string>
|
<string name="settings_clear_cache_title">Очистить кэш репозиториев</string>
|
||||||
<string name="settings_clear_cache_summary">Удалить сохранённую информацию о сетевых репозиториях, чтобы приложение обновило информацию из сети</string>
|
<string name="settings_clear_cache_summary">Удалить сохранённую информацию о сетевых репозиториях, чтобы приложение обновило информацию из сети</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">Отключить Magisk</string>
|
|
||||||
<string name="settings_disable_summary">Будет выключено все, кроме рута (MagiskSU)</string>
|
|
||||||
<string name="settings_magiskhide_summary">Скрыть Magisk от различных проверок</string>
|
<string name="settings_magiskhide_summary">Скрыть Magisk от различных проверок</string>
|
||||||
<string name="settings_busybox_title">Включить BusyBox</string>
|
<string name="settings_busybox_title">Включить BusyBox</string>
|
||||||
<string name="settings_busybox_summary">Примонтировать встроенный busybox из Magisk в xbin</string>
|
<string name="settings_busybox_summary">Примонтировать встроенный busybox из Magisk в xbin</string>
|
||||||
|
192
app/src/main/res/values-tr/strings.xml
Normal file
192
app/src/main/res/values-tr/strings.xml
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
<resources>
|
||||||
|
<!--Welcome Activity-->
|
||||||
|
<string name="navigation_drawer_open">Gezinti çekmecesini aç</string>
|
||||||
|
<string name="navigation_drawer_close">Gezinti çekmecesini kapat</string>
|
||||||
|
<string name="modules">Modüller</string>
|
||||||
|
<string name="downloads">İndir</string>
|
||||||
|
<string name="superuser">Yetkili kullanıcı</string>
|
||||||
|
<string name="log">Günlük</string>
|
||||||
|
<string name="settings">Ayarlar</string>
|
||||||
|
<string name="status">Durum</string>
|
||||||
|
<string name="install">Yükle</string>
|
||||||
|
|
||||||
|
<!--Status Fragment-->
|
||||||
|
<string name="magisk_version">Magisk v%1$s yüklü</string>
|
||||||
|
<string name="magisk_version_error">Magisk yüklü değil</string>
|
||||||
|
|
||||||
|
<string name="checking_for_updates">Güncelleştirmeler denetleniyor…</string>
|
||||||
|
<string name="magisk_update_available">Magisk v%1$.1f mevcut!</string>
|
||||||
|
<string name="cannot_check_updates">Güncelleştirmeler denetlenemiyor, İnternet yok mu?</string>
|
||||||
|
<string name="up_to_date">%1$s\'in son sürümü yüklü</string>
|
||||||
|
<string name="root_error">Rootlu ama root izni yok, izin verilmedi mi?</string>
|
||||||
|
<string name="not_rooted">Rootlu değil</string>
|
||||||
|
<string name="proper_root">Düzgünce rootlandı</string>
|
||||||
|
<string name="safetyNet_check_text">SafetyNet kontrolünü başlatmak için dokunun</string>
|
||||||
|
<string name="checking_safetyNet_status">SafetyNet durumu kontrol ediliyor…</string>
|
||||||
|
<string name="safetyNet_connection_failed">"Google API'ye bağlanılamıyor"</string>
|
||||||
|
<string name="safetyNet_connection_suspended">Google API bağlantısı askıya alındı</string>
|
||||||
|
<string name="safetyNet_error">SafetyNet kontrol edilemiyor, İnternet yok mu?</string>
|
||||||
|
<string name="safetyNet_fail">SafetyNet başarısız: CTS profili uyumsuzluğu</string>
|
||||||
|
<string name="safetyNet_pass">SafetyNet Geçti</string>
|
||||||
|
<string name="root_info_warning">İşlevsellik çok sınırlıdır</string>
|
||||||
|
|
||||||
|
<!--Install Fragment-->
|
||||||
|
<string name="auto_detect">(Otomatik) %1$s</string>
|
||||||
|
<string name="cannot_auto_detect">(Otomatik algılanamıyor)</string>
|
||||||
|
<string name="boot_image_title">Boot İmajı Konumu</string>
|
||||||
|
<string name="detect_button">Algıla</string>
|
||||||
|
<string name="advanced_settings_title">Gelişmiş Ayarlar</string>
|
||||||
|
<string name="keep_force_encryption">Şifrelemeyi zorlamayı sürdür</string>
|
||||||
|
<string name="keep_dm_verity">"Dm-verity'yi koru"</string>
|
||||||
|
<string name="current_magisk_title">Yüklenmiş Magisk Sürümü: %1$s</string>
|
||||||
|
<string name="install_magisk_title">Son Magisk Sürümü: %1$s</string>
|
||||||
|
<string name="uninstall">Kaldır</string>
|
||||||
|
<string name="reboot_countdown">%1$d saniye içinde yeniden başlatılacak</string>
|
||||||
|
<string name="uninstall_magisk_title">"Magisk'i kaldır"</string>
|
||||||
|
<string name="uninstall_magisk_msg">"Bu, tüm modülleri, MagiskSU'yu kaldıracak ve şifrelenmemişse verilerinizi potansiyel olarak şifreleyecektir\nDevam etmek istediğinize emin misiniz?"</string>
|
||||||
|
<string name="version_none">(Hiçbiri)</string>
|
||||||
|
|
||||||
|
<!--Module Fragment-->
|
||||||
|
<string name="no_info_provided">(Hiçbir açıklama sağlanmadı)</string>
|
||||||
|
<string name="no_modules_found">Modül yok</string>
|
||||||
|
<string name="update_file_created">Modül sonraki yeniden başlatmada güncellenecek</string>
|
||||||
|
<string name="remove_file_created">Modül sonraki yeniden başlatmada kaldırılacak</string>
|
||||||
|
<string name="remove_file_deleted">Modül sonraki yeniden başlatmada kaldırılmayacak</string>
|
||||||
|
<string name="disable_file_created">Modül sonraki yeniden başlatmada devre dışı bırakılacak</string>
|
||||||
|
<string name="disable_file_removed">Modül sonraki yeniden başlatmada etkinleştirilecek</string>
|
||||||
|
<string name="author">Yapımcı: %1$s</string>
|
||||||
|
<string name="fab_flash_zip">"Modül Zip'ini Yükle"</string>
|
||||||
|
|
||||||
|
<!--Repo Fragment-->
|
||||||
|
<string name="update_available">Güncelleme Mevcut</string>
|
||||||
|
<string name="installed">Yüklenmiş</string>
|
||||||
|
<string name="not_installed">Yüklenmemiş</string>
|
||||||
|
|
||||||
|
<!--Log Fragment-->
|
||||||
|
<string name="menuSaveToSd">"SD'ye 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>
|
||||||
|
<string name="log_is_empty">Günlük boş</string>
|
||||||
|
<string name="logs_save_failed">Günlük SD karta yazılamadı:</string>
|
||||||
|
|
||||||
|
<!--About Activity-->
|
||||||
|
<string name="about">Hakkında</string>
|
||||||
|
<string name="app_developers">Ana geliştiriciler</string>
|
||||||
|
<string name="app_developers_">"<![CDATA[<a href="https://github.com/topjohnwu">topjohnwu</a> tarafından <a href="https://github.com/d8ahazard">Digitalhigh</a> ve <a href="https://github.com/dvdandroid">Dvdandroid</a>]]>'in katkılarıyla oluşturuldu"</string>
|
||||||
|
<string name="app_changelog">Uygulama değişiklikleri</string>
|
||||||
|
<string name="translators">Fatih Fırıncı</string>
|
||||||
|
<string name="app_version">Uygulama sürümü</string>
|
||||||
|
<string name="app_source_code">Kaynak kodu</string>
|
||||||
|
<string name="donation">Bağış</string>
|
||||||
|
<string name="app_translators">Çevirmen</string>
|
||||||
|
<string name="support_thread">Destek konusu</string>
|
||||||
|
|
||||||
|
<!--Toasts, Dialogs-->
|
||||||
|
<string name="permissionNotGranted">Bu özellik harici depolamaya yazma izni olmadan çalışmaz.</string>
|
||||||
|
<string name="no_thanks">Hayır teşekkürler</string>
|
||||||
|
<string name="yes">Evet</string>
|
||||||
|
<string name="ok">Tamam</string>
|
||||||
|
<string name="close">Kapat</string>
|
||||||
|
<string name="repo_install_title">%1$s yükle</string>
|
||||||
|
<string name="repo_install_msg">%1$s yüklensin mi?</string>
|
||||||
|
<string name="download_install">İndir & Yükle</string>
|
||||||
|
<string name="download">İndir</string>
|
||||||
|
<string name="goto_install">\"Yükleme\" bölümüne git</string>
|
||||||
|
<string name="download_file_error">Dosya indirme hatası</string>
|
||||||
|
<string name="install_error">Yükleme hatası!</string>
|
||||||
|
<string name="invalid_zip">Zip Magisk Modülü değil!!</string>
|
||||||
|
<string name="reboot_title">Yükleme başarılı!</string>
|
||||||
|
<string name="reboot_msg">Şimdi yeniden başlatmak istiyor musunuz?</string>
|
||||||
|
<string name="reboot">Yeniden başlat</string>
|
||||||
|
<string name="copying_msg">Zip geçici klasöre kopyalanıyor</string>
|
||||||
|
<string name="zip_install_progress_title">Yükleniyor</string>
|
||||||
|
<string name="zip_unzip_msg">Zip dosyası açılıyor …</string>
|
||||||
|
<string name="zip_process_msg">Zip dosyası işleniyor …</string>
|
||||||
|
<string name="zip_install_progress_msg">%1$s yükleniyor …</string>
|
||||||
|
<string name="no_magisk_title">Magisk Yüklü Değil!</string>
|
||||||
|
<string name="no_magisk_msg">"Magisk'i indirip yüklemek istiyor musunuz?"</string>
|
||||||
|
<string name="downloading_toast">%1$s indiriliyor</string>
|
||||||
|
<string name="magisk_update_title">Yeni Magisk Güncellemesi Mevcut!</string>
|
||||||
|
<string name="settings_reboot_toast">Ayarları uygulamak için yeniden başlatın</string>
|
||||||
|
<string name="release_notes">Sürüm notları</string>
|
||||||
|
<string name="repo_cache_cleared">Repo önbelleği temizlendi</string>
|
||||||
|
<string name="safetyNet_hide_notice">Bu uygulama, SafetyNet kullanıyor\nZaten MagiskHide tarafından varsayılan olarak ele alındı</string>
|
||||||
|
<string name="start_magiskhide">MagiskHide başlatılıyor …</string>
|
||||||
|
<string name="no_magisksu_title">MagiskSU kullanılmıyor!</string>
|
||||||
|
<string name="no_magisksu_msg">"MagiskSU ile rootlu değilsiniz, MagiskHide'ın kendisini kullanmak yeterli olmayabilir!\nResmi olarak desteklenmez ve SafetyNet'i geçmek için ek araçlar (ör. suhide) gerekir."</string>
|
||||||
|
<string name="understand">Anladım</string>
|
||||||
|
<string name="process_error">İşlem hatası</string>
|
||||||
|
<string name="internal_storage">Zip şuraya depolandı:\n[Dahili Hafıza]%1$s</string>
|
||||||
|
<string name="zip_process_title">İşleniyor</string>
|
||||||
|
<string name="manual_boot_image">Lütfen elle bir boot imajı seçin!</string>
|
||||||
|
|
||||||
|
<!--Settings Activity -->
|
||||||
|
<string name="settings_general_category">Genel</string>
|
||||||
|
<string name="settings_dark_theme_title">Karanlık Tema</string>
|
||||||
|
<string name="settings_dark_theme_summary">Karanlık temayı etkinleştir</string>
|
||||||
|
<string name="settings_notification_title">Güncelleme Bildirimi</string>
|
||||||
|
<string name="settings_notification_summary">Yeni sürüm kullanılabilir olduğunda güncelleme bildirimlerini göster</string>
|
||||||
|
<string name="settings_clear_cache_title">Repo Önbelleğini Temizle</string>
|
||||||
|
<string name="settings_clear_cache_summary">Çevrimiçi repolar için önbellek bilgilerini temizle, uygulamayı çevrimiçi yenilemeye zorla</string>
|
||||||
|
|
||||||
|
<string name="settings_magiskhide_summary">"Magisk'i çeşitli algılamalardan gizle"</string>
|
||||||
|
<string name="settings_busybox_title">"BusyBox'ı etkinleştir"</string>
|
||||||
|
<string name="settings_busybox_summary">"Magisk'in dahili busybox'ını xbin'e bağla"</string>
|
||||||
|
<string name="settings_hosts_title">Sistemsiz host</string>
|
||||||
|
<string name="settings_hosts_summary">Reklam engelleme uygulamaları için sistemsiz host desteği</string>
|
||||||
|
|
||||||
|
<string name="settings_su_app_adb">Uygulamalar ve ADB</string>
|
||||||
|
<string name="settings_su_app">Sadece uygulamalar</string>
|
||||||
|
<string name="settings_su_adb">Sadece ADB</string>
|
||||||
|
<string name="settings_su_disable">Devre dışı</string>
|
||||||
|
<string name="settings_su_request_10">10 saniye</string>
|
||||||
|
<string name="settings_su_request_20">20 saniye</string>
|
||||||
|
<string name="settings_su_request_30">30 saniye</string>
|
||||||
|
<string name="settings_su_request_60">60 saniye</string>
|
||||||
|
<string name="superuser_access">Yetkili Kullanıcı Erişimi</string>
|
||||||
|
<string name="auto_response">Otomatik Yanıt</string>
|
||||||
|
<string name="request_timeout">İstek Zaman Aşımı</string>
|
||||||
|
<string name="superuser_notification">Yetkili Kullanıcı Bildirimi</string>
|
||||||
|
<string name="request_timeout_summary">%1$s saniye</string>
|
||||||
|
|
||||||
|
<string name="settings_development_category">Uygulama Geliştirme</string>
|
||||||
|
<string name="settings_developer_logging_title">Gelişmiş hata ayıklama günlüğünü etkinleştir</string>
|
||||||
|
<string name="settings_developer_logging_summary">Ayrıntılı günlüğü etkinleştirmek için bunu işaretleyin</string>
|
||||||
|
<string name="settings_shell_logging_title">Kabuk komut hata ayıklama günlüğünü etkinleştir</string>
|
||||||
|
<string name="settings_shell_logging_summary">Tüm kabuk komutlarını ve çıktısını günlüğe kaydetmeyi etkinleştirmek için bunu işaretleyin</string>
|
||||||
|
|
||||||
|
<!--Superuser-->
|
||||||
|
<string name="su_request_title">Yetkili Kullanıcı İsteği</string>
|
||||||
|
<string name="deny_with_str">Reddet%1$s</string>
|
||||||
|
<string name="deny">Reddet</string>
|
||||||
|
<string name="prompt">Sor</string>
|
||||||
|
<string name="grant">İzin ver</string>
|
||||||
|
<string name="su_warning">Cihazınıza tam erişim izni verir.\nEmin değilseniz, reddedin!</string>
|
||||||
|
<string name="forever">Daima</string>
|
||||||
|
<string name="once">Bir kere</string>
|
||||||
|
<string name="tenmin">10 dak</string>
|
||||||
|
<string name="twentymin">20 dak</string>
|
||||||
|
<string name="thirtymin">30 dak</string>
|
||||||
|
<string name="sixtymin">60 dak</string>
|
||||||
|
<string name="su_allow_toast">%1$s için yetkili kullanıcı hakları verildi</string>
|
||||||
|
<string name="su_deny_toast">%1$s için yetkili kullanıcı hakları reddedildi</string>
|
||||||
|
<string name="no_apps_found">Hiçbir uygulama bulunamadı</string>
|
||||||
|
<string name="su_snack_grant">%1$s için yetkili kullanıcı hakları verildi</string>
|
||||||
|
<string name="su_snack_deny">%1$s için yetkili kullanıcı hakları reddedildi</string>
|
||||||
|
<string name="su_snack_notif_on">%1$s için bildirimler etkin</string>
|
||||||
|
<string name="su_snack_notif_off">%1$s için bildirimler devre dışı</string>
|
||||||
|
<string name="su_snack_log_on">%1$s için günlük etkin</string>
|
||||||
|
<string name="su_snack_log_off">%1$s için günlük devre dışı</string>
|
||||||
|
<string name="su_snack_revoke">%1$s hakları geri alındı</string>
|
||||||
|
<string name="su_revoke_title">Geri alınsın mı?</string>
|
||||||
|
<string name="su_revoke_msg">%1$s hakları geri alınsın mı?</string>
|
||||||
|
<string name="toast">Pencere</string>
|
||||||
|
<string name="none">Hiçbiri</string>
|
||||||
|
|
||||||
|
<!--Superuser logs-->
|
||||||
|
<string name="pid">PID:\u0020</string>
|
||||||
|
<string name="target_uid">Hedef UID:\u0020</string>
|
||||||
|
<string name="command">Komut:\u0020</string>
|
||||||
|
|
||||||
|
</resources>
|
194
app/src/main/res/values-vi/strings.xml
Normal file
194
app/src/main/res/values-vi/strings.xml
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
<resources>
|
||||||
|
<!--Universal-->
|
||||||
|
|
||||||
|
<!--Welcome Activity-->
|
||||||
|
<string name="navigation_drawer_open">Mở thanh điều hướng</string>
|
||||||
|
<string name="navigation_drawer_close">Đóng thanh điều hướng</string>
|
||||||
|
<string name="modules">Mô-đun</string>
|
||||||
|
<string name="downloads">Tải xuống</string>
|
||||||
|
<string name="superuser">Superuser</string>
|
||||||
|
<string name="log">Nhật ký</string>
|
||||||
|
<string name="settings">Thiết lập</string>
|
||||||
|
<string name="status">Trạng thái</string>
|
||||||
|
<string name="install">Cài đặt</string>
|
||||||
|
|
||||||
|
<!--Status Fragment-->
|
||||||
|
<string name="magisk_version">Đã cài Magisk v%1$s</string>
|
||||||
|
<string name="magisk_version_error">Magisk chưa được cài đặt</string>
|
||||||
|
|
||||||
|
<string name="checking_for_updates">Đang kiểm tra cập nhật…</string>
|
||||||
|
<string name="magisk_update_available">Magisk v%1$.1f available!</string>
|
||||||
|
<string name="cannot_check_updates">Không thể kiểm tra cập nhật, không có Internet?</string>
|
||||||
|
<string name="up_to_date">Đã cài đặt phiên bản mới nhất của %1$s</string>
|
||||||
|
<string name="root_error">Đã root nhưng không có quyền root, chưa được cho phép?</string>
|
||||||
|
<string name="not_rooted">Chưa root</string>
|
||||||
|
<string name="proper_root">Đã root thành công</string>
|
||||||
|
<string name="safetyNet_check_text">Chạm để bắt đầu kiểm tra SafetyNet</string>
|
||||||
|
<string name="checking_safetyNet_status">Đang kiểm tra trạng thái SafetyNet…</string>
|
||||||
|
<string name="safetyNet_connection_failed">Không thể kết nối với API của Google</string>
|
||||||
|
<string name="safetyNet_connection_suspended">Kết nối với API của Google đã dừng</string>
|
||||||
|
<string name="safetyNet_error">Không thể kiểm tra SafetyNet, không có Internet?</string>
|
||||||
|
<string name="safetyNet_fail">SafetyNet thất bại: cấu hình CTS không phù hợp</string>
|
||||||
|
<string name="safetyNet_pass">SafetyNet thành công</string>
|
||||||
|
<string name="root_info_warning">Tính năng bị hạn chế rất nhiều</string>
|
||||||
|
|
||||||
|
<!--Install Fragment-->
|
||||||
|
<string name="auto_detect">(Tự động) %1$s</string>
|
||||||
|
<string name="cannot_auto_detect">(Không thể tự phát hiện)</string>
|
||||||
|
<string name="boot_image_title">Vị trí ảnh khởi động</string>
|
||||||
|
<string name="detect_button">Tìm</string>
|
||||||
|
<string name="advanced_settings_title">Thiết lập nâng cao</string>
|
||||||
|
<string name="keep_force_encryption">Giữ bắt buộc mã hoá</string>
|
||||||
|
<string name="keep_dm_verity">Giữ dm-verity</string>
|
||||||
|
<string name="current_magisk_title">Đã cài đặt Magisk phiên bản: %1$s</string>
|
||||||
|
<string name="install_magisk_title">Phiên bản Magisk mới nhất: %1$s</string>
|
||||||
|
<string name="uninstall">Gỡ bỏ</string>
|
||||||
|
<string name="reboot_countdown">Khởi động lại trong %1$d</string>
|
||||||
|
<string name="uninstall_magisk_title">Gỡ bỏ Magisk</string>
|
||||||
|
<string name="uninstall_magisk_msg">Việc này sẽ xoá tất cả các mô-đun, MagiskSU và có khả năng sẽ mã hoá dữ liệu nếu chưa được mã hoá\nBạn chắc muốn tiếp tục?</string>
|
||||||
|
<string name="version_none">(Không có)</string>
|
||||||
|
|
||||||
|
<!--Module Fragment-->
|
||||||
|
<string name="no_info_provided">(Không có thông tin được cung cấp)</string>
|
||||||
|
<string name="no_modules_found">Không tìm thấy mô-đun</string>
|
||||||
|
<string name="update_file_created">Mô-đun sẽ được cập nhật ở lần khởi động lại kế tiếp</string>
|
||||||
|
<string name="remove_file_created">Mô-đun sẽ được xoá bỏ ở lần khởi động lại kế tiếp</string>
|
||||||
|
<string name="remove_file_deleted">Mô-đun sẽ không được xoá bỏ ở lần khởi động lại kế tiếp</string>
|
||||||
|
<string name="disable_file_created">Mô-đun sẽ bị vô hiệu ở lần khởi động lại kế tiếp</string>
|
||||||
|
<string name="disable_file_removed">Mô-đun sẽ được kích hoạt ở lần khởi động lại kế tiếp</string>
|
||||||
|
<string name="author">Tạo bởi %1$s</string>
|
||||||
|
<string name="fab_flash_zip">Cài file zip của Mô-đun</string>
|
||||||
|
|
||||||
|
<!--Repo Fragment-->
|
||||||
|
<string name="update_available">Có cập nhật mới</string>
|
||||||
|
<string name="installed">Đã được cài đặt</string>
|
||||||
|
<string name="not_installed">Chưa được cài đặt</string>
|
||||||
|
|
||||||
|
<!--Log Fragment-->
|
||||||
|
<string name="menuSaveToSd">Lưu vào thẻ nhớ</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>
|
||||||
|
<string name="log_is_empty">Nhật ký trống</string>
|
||||||
|
<string name="logs_save_failed">Không thể ghi nhật ký ra thẻ nhớ:</string>
|
||||||
|
|
||||||
|
<!--About Activity-->
|
||||||
|
<string name="about">Thông tin</string>
|
||||||
|
<string name="app_developers">Nhà phát triển chính</string>
|
||||||
|
<string name="app_developers_"><![CDATA[Ứng dụng do <a href="https://github.com/topjohnwu">topjohnwu</a> viết, phối hợp với <a href="https://github.com/d8ahazard">Digitalhigh</a> và <a href="https://github.com/dvdandroid">Dvdandroid</a>.]]></string>
|
||||||
|
<string name="app_changelog">Nhật ký thay đổi của ứng dụng</string>
|
||||||
|
<string name="translators"><![CDATA[<a href="https://github.com/thanhtai2009">thanhtai2009@tekcafe.vn</a>]]></string>
|
||||||
|
<string name="app_version">Phiên bản ứng dụng</string>
|
||||||
|
<string name="app_source_code">Mã nguồn</string>
|
||||||
|
<string name="donation">Ủng hộ</string>
|
||||||
|
<string name="app_translators">Người dịch ứng dụng</string>
|
||||||
|
<string name="support_thread">Chủ đề hỗ trợ</string>
|
||||||
|
|
||||||
|
<!--Toasts, Dialogs-->
|
||||||
|
<string name="permissionNotGranted">Tính năng này không hoạt động nếu thiếu quyền ghi vào bộ nhớ ngoài.</string>
|
||||||
|
<string name="no_thanks">Không, cảm ơn</string>
|
||||||
|
<string name="yes">Có</string>
|
||||||
|
<string name="ok">OK</string>
|
||||||
|
<string name="close">Đóng</string>
|
||||||
|
<string name="repo_install_title">Cài đặt %1$s</string>
|
||||||
|
<string name="repo_install_msg">Bạn muốn cài đặt %1$s ?</string>
|
||||||
|
<string name="download_install">Tải xuống & Cài đặt</string>
|
||||||
|
<string name="download">Tải xuống</string>
|
||||||
|
<string name="goto_install">Mở phần \"Cài đặt\"</string>
|
||||||
|
<string name="download_file_error">Lỗi tải tập tin</string>
|
||||||
|
<string name="install_error">Lỗi cài đặt!</string>
|
||||||
|
<string name="invalid_zip">Tập tin zip không phải mô-đun Magisk!!</string>
|
||||||
|
<string name="reboot_title">Cài đặt thành công!</string>
|
||||||
|
<string name="reboot_msg">Bạn muốn khởi động lại ngay chứ?</string>
|
||||||
|
<string name="reboot">Khởi động lại</string>
|
||||||
|
<string name="copying_msg">Đang chép zip vào thư mục tạm</string>
|
||||||
|
<string name="zip_install_progress_title">Đang cài đặt</string>
|
||||||
|
<string name="zip_unzip_msg">Đang giải nén tập tin …</string>
|
||||||
|
<string name="zip_process_msg">Đang xử lý tập tin zip …</string>
|
||||||
|
<string name="zip_install_progress_msg">Đang cài đặt %1$s …</string>
|
||||||
|
<string name="no_magisk_title">Chưa cài Magisk!</string>
|
||||||
|
<string name="no_magisk_msg">Bạn muốn tải xuống và cài đặt Magisk chứ?</string>
|
||||||
|
<string name="downloading_toast">Đang tải xuống %1$s</string>
|
||||||
|
<string name="magisk_update_title">Có cập nhật Magisk mới!</string>
|
||||||
|
<string name="settings_reboot_toast">Khởi động lại để áp dụng thiết lập</string>
|
||||||
|
<string name="release_notes">Ghi chú phát hành</string>
|
||||||
|
<string name="repo_cache_cleared">Đã xoá bộ đệm kho</string>
|
||||||
|
<string name="safetyNet_hide_notice">Ứng dụng này dùng SafetyNet\nĐã được MagiskHide xử lý theo mặc định</string>
|
||||||
|
<string name="start_magiskhide">Đang khởi động MagiskHide …</string>
|
||||||
|
<string name="no_magisksu_title">Không dùng MagiskSU!</string>
|
||||||
|
<string name="no_magisksu_msg">Bạn không root với MagiskSU, sử dụng mỗi MagiskHide có thể sẽ không đủ hiệu quả!\nViệc này không được hỗ trợ chính thức và có thể bạn cần thêm công cụ khác (suhide chẳng hạn) để vượt Safety Net.</string>
|
||||||
|
<string name="understand">Tôi hiểu</string>
|
||||||
|
<string name="process_error">Lỗi xử lý</string>
|
||||||
|
<string name="internal_storage">Tập tin zip được lưu vào:\n[Bộ nhớ trong]%1$s</string>
|
||||||
|
<string name="zip_process_title">Đang xử lý</string>
|
||||||
|
<string name="manual_boot_image">Hãy tự chọn một ảnh khởi động!</string>
|
||||||
|
|
||||||
|
<!--Settings Activity -->
|
||||||
|
<string name="settings_general_category">Chung</string>
|
||||||
|
<string name="settings_dark_theme_title">Chủ đề tối</string>
|
||||||
|
<string name="settings_dark_theme_summary">Dùng chủ đề tối</string>
|
||||||
|
<string name="settings_notification_title">Thông báo cập nhật</string>
|
||||||
|
<string name="settings_notification_summary">Hiện thông báo cập nhật khi có phiên bản mới</string>
|
||||||
|
<string name="settings_clear_cache_title">Xoá bộ đệm kho</string>
|
||||||
|
<string name="settings_clear_cache_summary">Xoá thông tin truy cập nhật về các kho mô-đun, buộc ứng dụng làm mới trực tuyến</string>
|
||||||
|
|
||||||
|
<string name="settings_magiskhide_summary">Ẩn Magisk khỏi nhiều phương thức phát hiện</string>
|
||||||
|
<string name="settings_busybox_title">Dùng BusyBox</string>
|
||||||
|
<string name="settings_busybox_summary">Gắn kết busy có sẵn của Magisk tới xbin</string>
|
||||||
|
<string name="settings_hosts_title">Systemless hosts</string>
|
||||||
|
<string name="settings_hosts_summary">Systemless hosts hỗ trợ các ứng dụng chặn quảng cáo</string>
|
||||||
|
|
||||||
|
<string name="settings_su_app_adb">Ứng dụng và ADB</string>
|
||||||
|
<string name="settings_su_app">Chỉ ứng dụng</string>
|
||||||
|
<string name="settings_su_adb">Chỉ ADB</string>
|
||||||
|
<string name="settings_su_disable">Đã vô hiệu</string>
|
||||||
|
<string name="settings_su_request_10">10 giây</string>
|
||||||
|
<string name="settings_su_request_20">20 giây</string>
|
||||||
|
<string name="settings_su_request_30">30 giây</string>
|
||||||
|
<string name="settings_su_request_60">60 giây</string>
|
||||||
|
<string name="superuser_access">Truy nhập Superuser</string>
|
||||||
|
<string name="auto_response">Tự phản hồi</string>
|
||||||
|
<string name="request_timeout">Thời gian chờ yêu cầu</string>
|
||||||
|
<string name="superuser_notification">Thông báo Superuser</string>
|
||||||
|
<string name="request_timeout_summary">%1$s giây</string>
|
||||||
|
|
||||||
|
<string name="settings_development_category">Phát triển ứng dụng</string>
|
||||||
|
<string name="settings_developer_logging_title">Kích hoạt ghi nhận gỡ rối nâng cao</string>
|
||||||
|
<string name="settings_developer_logging_summary">Chọn để kích hoạt ghi nhận chi tiết</string>
|
||||||
|
<string name="settings_shell_logging_title">Kích hoạt ghi nhận gỡ rối lệnh shell</string>
|
||||||
|
<string name="settings_shell_logging_summary">Chọn để kích hoạt ghi nhận tất cả các lệnh shell và kết quả xuất ra</string>
|
||||||
|
|
||||||
|
<!--Superuser-->
|
||||||
|
<string name="su_request_title">Yêu cầu Superuser</string>
|
||||||
|
<string name="deny_with_str">Từ chối%1$s</string>
|
||||||
|
<string name="deny">Từ chối</string>
|
||||||
|
<string name="prompt">Nhắc nhở</string>
|
||||||
|
<string name="grant">Cấp phép</string>
|
||||||
|
<string name="su_warning">Cấp toàn quyền truy cập thiết bị.\nTừ chối nếu bạn không chắc chắn!</string>
|
||||||
|
<string name="forever">Mãi mãi</string>
|
||||||
|
<string name="once">Một lần</string>
|
||||||
|
<string name="tenmin">10 phút</string>
|
||||||
|
<string name="twentymin">20 phút</string>
|
||||||
|
<string name="thirtymin">30 phút</string>
|
||||||
|
<string name="sixtymin">60 phút</string>
|
||||||
|
<string name="su_allow_toast">%1$s đã được cấp quyền Superuser</string>
|
||||||
|
<string name="su_deny_toast">Đã từ chối cấp quyền Superuser cho %1$s</string>
|
||||||
|
<string name="no_apps_found">Không tìm thấy ứng dụng</string>
|
||||||
|
<string name="su_snack_grant">Quyền Superuser của %1$s đã được cấp</string>
|
||||||
|
<string name="su_snack_deny">Quyền Superuser của %1$s đã bị từ chối</string>
|
||||||
|
<string name="su_snack_notif_on">Thông báo của %1$s đã được kích hoạt</string>
|
||||||
|
<string name="su_snack_notif_off">Thông báo của %1$s đã bị vô hiệu</string>
|
||||||
|
<string name="su_snack_log_on">Ghi nhận của %1$s đã được kích hoạt</string>
|
||||||
|
<string name="su_snack_log_off">Ghi nhận của %1$s đã bị vô hiệu</string>
|
||||||
|
<string name="su_snack_revoke">Quyền của %1$s đã được thu hồi</string>
|
||||||
|
<string name="su_revoke_title">Thu hồi?</string>
|
||||||
|
<string name="su_revoke_msg">Xác nhận thu hồi quyền của %1$s?</string>
|
||||||
|
<string name="toast">Thông báo ngắn</string>
|
||||||
|
<string name="none">Không có</string>
|
||||||
|
|
||||||
|
<!--Superuser logs-->
|
||||||
|
<string name="pid">PID:\u0020</string>
|
||||||
|
<string name="target_uid">Target UID:\u0020</string>
|
||||||
|
<string name="command">Command:\u0020</string>
|
||||||
|
|
||||||
|
</resources>
|
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">已安装 Magisk v%1$s</string>
|
<string name="magisk_version">已安装 Magisk v%1$s</string>
|
||||||
<string name="magisk_version_disable">已禁用 Magisk v%1$s</string>
|
<string name="magisk_version_core_only">已安装 Magisk v%1$s (仅核心功能)</string>
|
||||||
<string name="magisk_version_error">未安装 Magisk</string>
|
<string name="magisk_version_error">未安装 Magisk</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">正在检查更新…</string>
|
<string name="checking_for_updates">正在检查更新…</string>
|
||||||
@@ -128,8 +128,7 @@
|
|||||||
<string name="settings_clear_cache_title">清除资源库缓存</string>
|
<string name="settings_clear_cache_title">清除资源库缓存</string>
|
||||||
<string name="settings_clear_cache_summary">清除已缓存的在线资源库信息,强制刷新在线数据</string>
|
<string name="settings_clear_cache_summary">清除已缓存的在线资源库信息,强制刷新在线数据</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">禁用 Magisk</string>
|
<string name="settings_core_only_summary">仅启用核心功能,所有模组将不会被载入。MagiskSU丶MagiskHide丶systemless hosts丶和 busybox 仍会持续运作</string>
|
||||||
<string name="settings_disable_summary">除 ROOT (MagiskSU) 以外,其他都将被禁用</string>
|
|
||||||
<string name="settings_magiskhide_summary">隐藏 Magisk 使其不被多种方法检测到</string>
|
<string name="settings_magiskhide_summary">隐藏 Magisk 使其不被多种方法检测到</string>
|
||||||
<string name="settings_busybox_title">启用 BusyBox</string>
|
<string name="settings_busybox_title">启用 BusyBox</string>
|
||||||
<string name="settings_busybox_summary">将 Magisk 内置的 Busybox 挂载到 xbin</string>
|
<string name="settings_busybox_summary">将 Magisk 内置的 Busybox 挂载到 xbin</string>
|
||||||
@@ -188,5 +187,6 @@
|
|||||||
<string name="pid">PID:\u0020</string>
|
<string name="pid">PID:\u0020</string>
|
||||||
<string name="target_uid">目标 UID:\u0020</string>
|
<string name="target_uid">目标 UID:\u0020</string>
|
||||||
<string name="command">命令:\u0020</string>
|
<string name="command">命令:\u0020</string>
|
||||||
|
<string name="settings_core_only_title">Magisk 核心功能模式</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">已安裝 Magisk v%1$s</string>
|
<string name="magisk_version">已安裝 Magisk v%1$s</string>
|
||||||
<string name="magisk_version_disable">已禁用 Magisk v%1$s</string>
|
|
||||||
<string name="magisk_version_error">未安裝 Magisk</string>
|
<string name="magisk_version_error">未安裝 Magisk</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">正在檢查更新…</string>
|
<string name="checking_for_updates">正在檢查更新…</string>
|
||||||
@@ -35,7 +34,7 @@
|
|||||||
|
|
||||||
<!--Install Fragment-->
|
<!--Install Fragment-->
|
||||||
<string name="auto_detect">(自動) %1$s</string>
|
<string name="auto_detect">(自動) %1$s</string>
|
||||||
<string name="boot_image_title">Boot 鏡像位置</string>
|
<string name="boot_image_title">Boot 映像位置</string>
|
||||||
<string name="detect_button">偵測</string>
|
<string name="detect_button">偵測</string>
|
||||||
<string name="advanced_settings_title">高級設置</string>
|
<string name="advanced_settings_title">高級設置</string>
|
||||||
<string name="keep_force_encryption">保持強制加密</string>
|
<string name="keep_force_encryption">保持強制加密</string>
|
||||||
@@ -120,8 +119,7 @@
|
|||||||
<string name="settings_clear_cache_title">清除資源庫快取</string>
|
<string name="settings_clear_cache_title">清除資源庫快取</string>
|
||||||
<string name="settings_clear_cache_summary">清除已暫存的在線資源庫快取,強制刷新在線數據</string>
|
<string name="settings_clear_cache_summary">清除已暫存的在線資源庫快取,強制刷新在線數據</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">禁用 Magisk</string>
|
<string name="settings_core_only_title">Magisk 核心功能模式</string>
|
||||||
<string name="settings_disable_summary">除 ROOT (MagiskSU) 以外,其他都將被禁用</string>
|
|
||||||
<string name="settings_magiskhide_summary">隱藏 Magisk 使其不被多種方法檢測到</string>
|
<string name="settings_magiskhide_summary">隱藏 Magisk 使其不被多種方法檢測到</string>
|
||||||
<string name="settings_busybox_title">啟用 BusyBox</string>
|
<string name="settings_busybox_title">啟用 BusyBox</string>
|
||||||
<string name="settings_busybox_summary">將 Magisk 內置的 Busybox 掛載到 xbin</string>
|
<string name="settings_busybox_summary">將 Magisk 內置的 Busybox 掛載到 xbin</string>
|
||||||
@@ -181,13 +179,19 @@
|
|||||||
<string name="target_uid">目標 UID:\u0020</string>
|
<string name="target_uid">目標 UID:\u0020</string>
|
||||||
<string name="command">"指令: "</string>
|
<string name="command">"指令: "</string>
|
||||||
<string name="close">關閉</string>
|
<string name="close">關閉</string>
|
||||||
<string name="internal_storage">Zip 已被儲存到:[內部儲存空間]%1$s</string>
|
<string name="internal_storage">Zip 已被儲存到:\n[內部儲存空間]%1$s</string>
|
||||||
<string name="ok">好</string>
|
<string name="ok">好</string>
|
||||||
<string name="process_error">處裡失敗</string>
|
<string name="process_error">處裡失敗</string>
|
||||||
<string name="download">下載</string>
|
<string name="download">下載</string>
|
||||||
<string name="zip_process_title">處理中</string>
|
<string name="zip_process_title">處理中</string>
|
||||||
<string name="uninstall_magisk_title">解除安裝 Magisk</string>
|
<string name="uninstall_magisk_title">解除安裝 Magisk</string>
|
||||||
<string name="uninstall_magisk_msg">這將會刪除所有模組,MagiskSU,並有可能在目前未加密的情況下加密的的資料\n你確定要繼續嗎?</string>
|
<string name="uninstall_magisk_msg">這將會刪除所有模組,MagiskSU,並有可能在目前資料未加密的情況下進行加密\n你確定要繼續嗎?</string>
|
||||||
<string name="version_none">(無)</string>
|
<string name="version_none">(無)</string>
|
||||||
|
<string name="manual_boot_image">請手動選取 boot 映像位置</string>
|
||||||
|
<string name="cannot_auto_detect">(無法自動偵測)</string>
|
||||||
|
<string name="settings_notification_summary">有更新的時候顯示通知</string>
|
||||||
|
<string name="settings_notification_title">更新通知</string>
|
||||||
|
<string name="magisk_version_core_only">已安裝 Magisk v%1$s (僅核心功能)</string>
|
||||||
|
<string name="settings_core_only_summary">僅啟用核心功能,所有模組將不會被載入。MagiskSU、MagiskHide、systemless hosts、和 busybox 仍會持續運作</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -13,9 +13,6 @@
|
|||||||
<color name="blue500">#2196F3</color>
|
<color name="blue500">#2196F3</color>
|
||||||
<color name="yellow500">#FFC107</color>
|
<color name="yellow500">#FFC107</color>
|
||||||
|
|
||||||
<color name="dark_primary">#1a237e</color>
|
|
||||||
<color name="dark_primary_dark">#000000</color>
|
|
||||||
|
|
||||||
<color name="dark_secondary_text">#dedede</color>
|
<color name="dark_secondary_text">#dedede</color>
|
||||||
|
|
||||||
<color name="su_request_background">#e0e0e0</color>
|
<color name="su_request_background">#e0e0e0</color>
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<!--Status Fragment-->
|
<!--Status Fragment-->
|
||||||
<string name="magisk_version">Installed Magisk v%1$s</string>
|
<string name="magisk_version">Installed Magisk v%1$s</string>
|
||||||
<string name="magisk_version_disable">Magisk v%1$s disabled</string>
|
<string name="magisk_version_core_only">Installed Magisk v%1$s (Core Only Mode)</string>
|
||||||
<string name="magisk_version_error">Magisk not installed</string>
|
<string name="magisk_version_error">Magisk not installed</string>
|
||||||
|
|
||||||
<string name="checking_for_updates">Checking for updates…</string>
|
<string name="checking_for_updates">Checking for updates…</string>
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
<!--Install Fragment-->
|
<!--Install Fragment-->
|
||||||
<string name="auto_detect">(Auto) %1$s</string>
|
<string name="auto_detect">(Auto) %1$s</string>
|
||||||
|
<string name="cannot_auto_detect">(Cannot auto detect)</string>
|
||||||
<string name="boot_image_title">Boot Image Location</string>
|
<string name="boot_image_title">Boot Image Location</string>
|
||||||
<string name="detect_button">Detect</string>
|
<string name="detect_button">Detect</string>
|
||||||
<string name="advanced_settings_title">Advanced Settings</string>
|
<string name="advanced_settings_title">Advanced Settings</string>
|
||||||
@@ -124,16 +125,19 @@
|
|||||||
<string name="process_error">Process error</string>
|
<string name="process_error">Process error</string>
|
||||||
<string name="internal_storage">The zip is stored in:\n[Internal Storage]%1$s</string>
|
<string name="internal_storage">The zip is stored in:\n[Internal Storage]%1$s</string>
|
||||||
<string name="zip_process_title">Processing</string>
|
<string name="zip_process_title">Processing</string>
|
||||||
|
<string name="manual_boot_image">Please manually select a boot image!</string>
|
||||||
|
|
||||||
<!--Settings Activity -->
|
<!--Settings Activity -->
|
||||||
<string name="settings_general_category">General</string>
|
<string name="settings_general_category">General</string>
|
||||||
<string name="settings_dark_theme_title">Dark Theme</string>
|
<string name="settings_dark_theme_title">Dark Theme</string>
|
||||||
<string name="settings_dark_theme_summary">Enable dark theme</string>
|
<string name="settings_dark_theme_summary">Enable dark theme</string>
|
||||||
|
<string name="settings_notification_title">Update Notification</string>
|
||||||
|
<string name="settings_notification_summary">Show update notifications when new version is available</string>
|
||||||
<string name="settings_clear_cache_title">Clear Repo Cache</string>
|
<string name="settings_clear_cache_title">Clear Repo Cache</string>
|
||||||
<string name="settings_clear_cache_summary">Clear the cached information for online repos, forces the app to refresh online</string>
|
<string name="settings_clear_cache_summary">Clear the cached information for online repos, forces the app to refresh online</string>
|
||||||
|
|
||||||
<string name="settings_disable_title">Disable Magisk</string>
|
<string name="settings_core_only_title">Magisk Core Only Mode</string>
|
||||||
<string name="settings_disable_summary">Everything will be disabled except root (MagiskSU)</string>
|
<string name="settings_core_only_summary">Enable only core features, all modules will not be loaded. MagiskSU, MagiskHide, systemless hosts, and busybox will still be enabled</string>
|
||||||
<string name="settings_magiskhide_summary">Hide Magisk from various detections</string>
|
<string name="settings_magiskhide_summary">Hide Magisk from various detections</string>
|
||||||
<string name="settings_busybox_title">Enable BusyBox</string>
|
<string name="settings_busybox_title">Enable BusyBox</string>
|
||||||
<string name="settings_busybox_summary">Bind mount Magisk\'s built-in busybox to xbin</string>
|
<string name="settings_busybox_summary">Bind mount Magisk\'s built-in busybox to xbin</string>
|
||||||
|
@@ -15,8 +15,6 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.Dark" parent="Theme.AppCompat.NoActionBar">
|
<style name="AppTheme.Dark" parent="Theme.AppCompat.NoActionBar">
|
||||||
<item name="colorPrimary">@color/dark_primary</item>
|
|
||||||
<item name="colorPrimaryDark">@color/dark_primary_dark</item>
|
|
||||||
<item name="colorAccent">@color/accent</item>
|
<item name="colorAccent">@color/accent</item>
|
||||||
<item name="colorAccentFallback">@color/accentFallback</item>
|
<item name="colorAccentFallback">@color/accentFallback</item>
|
||||||
<item name="windowActionModeOverlay">true</item>
|
<item name="windowActionModeOverlay">true</item>
|
||||||
|
@@ -10,6 +10,11 @@
|
|||||||
android:summary="@string/settings_dark_theme_summary"
|
android:summary="@string/settings_dark_theme_summary"
|
||||||
android:key="dark_theme" />
|
android:key="dark_theme" />
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:title="@string/settings_notification_title"
|
||||||
|
android:summary="@string/settings_notification_summary"
|
||||||
|
android:key="notification" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="clear"
|
android:key="clear"
|
||||||
android:title="@string/settings_clear_cache_title"
|
android:title="@string/settings_clear_cache_title"
|
||||||
@@ -23,8 +28,8 @@
|
|||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="disable"
|
android:key="disable"
|
||||||
android:title="@string/settings_disable_title"
|
android:title="@string/settings_core_only_title"
|
||||||
android:summary="@string/settings_disable_summary" />
|
android:summary="@string/settings_core_only_summary" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:key="busybox"
|
android:key="busybox"
|
||||||
|
@@ -6,7 +6,7 @@ buildscript {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.3.0-beta4'
|
classpath 'com.android.tools.build:gradle:2.3.0'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
Reference in New Issue
Block a user