Commit e21131d6 authored by topjohnwu's avatar topjohnwu

Zip Autoflash; Massive refactor

parent 1f02d0f6
...@@ -16,8 +16,6 @@ android { ...@@ -16,8 +16,6 @@ android {
} }
buildTypes { buildTypes {
release { release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
} }
......
...@@ -48,12 +48,7 @@ public class AboutActivity extends AppCompatActivity { ...@@ -48,12 +48,7 @@ public class AboutActivity extends AppCompatActivity {
ButterKnife.bind(this); ButterKnife.bind(this);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() { toolbar.setNavigationOnClickListener(view -> finish());
@Override
public void onClick(View view) {
finish();
}
});
ActionBar ab = getSupportActionBar(); ActionBar ab = getSupportActionBar();
if (ab != null) { if (ab != null) {
...@@ -81,9 +76,7 @@ public class AboutActivity extends AppCompatActivity { ...@@ -81,9 +76,7 @@ public class AboutActivity extends AppCompatActivity {
appChangelog.setVisibility(View.GONE); appChangelog.setVisibility(View.GONE);
} else { } else {
final String finalChanges = changes; final String finalChanges = changes;
appChangelog.setOnClickListener(new View.OnClickListener() { appChangelog.setOnClickListener(v -> {
@Override
public void onClick(View v) {
AlertDialog d = new AlertDialog.Builder(AboutActivity.this) AlertDialog d = new AlertDialog.Builder(AboutActivity.this)
.setTitle(R.string.app_changelog) .setTitle(R.string.app_changelog)
.setMessage(Html.fromHtml(finalChanges)) .setMessage(Html.fromHtml(finalChanges))
...@@ -94,14 +87,11 @@ public class AboutActivity extends AppCompatActivity { ...@@ -94,14 +87,11 @@ public class AboutActivity extends AppCompatActivity {
//noinspection ConstantConditions //noinspection ConstantConditions
((TextView) d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); ((TextView) d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
}
}); });
} }
appDevelopers.removeSummary(); appDevelopers.removeSummary();
appDevelopers.setOnClickListener(new View.OnClickListener() { appDevelopers.setOnClickListener(view -> {
@Override
public void onClick(View view) {
AlertDialog d = new AlertDialog.Builder(AboutActivity.this) AlertDialog d = new AlertDialog.Builder(AboutActivity.this)
.setTitle(R.string.app_developers) .setTitle(R.string.app_developers)
.setMessage(Html.fromHtml(getString(R.string.app_developers_))) .setMessage(Html.fromHtml(getString(R.string.app_developers_)))
...@@ -111,7 +101,6 @@ public class AboutActivity extends AppCompatActivity { ...@@ -111,7 +101,6 @@ public class AboutActivity extends AppCompatActivity {
d.show(); d.show();
//noinspection ConstantConditions //noinspection ConstantConditions
((TextView) d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); ((TextView) d.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
}
}); });
String translators = getString(R.string.translators); String translators = getString(R.string.translators);
...@@ -122,20 +111,10 @@ public class AboutActivity extends AppCompatActivity { ...@@ -122,20 +111,10 @@ public class AboutActivity extends AppCompatActivity {
} }
appSourceCode.removeSummary(); appSourceCode.removeSummary();
appSourceCode.setOnClickListener(new View.OnClickListener() { appSourceCode.setOnClickListener(view -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(SOURCE_CODE_URL))));
@Override
public void onClick(View view) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(SOURCE_CODE_URL)));
}
});
supportThread.removeSummary(); supportThread.removeSummary();
supportThread.setOnClickListener(new View.OnClickListener() { supportThread.setOnClickListener(view -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(XDA_THREAD))));
@Override
public void onClick(View view) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(XDA_THREAD)));
}
});
setFloating(); setFloating();
} }
......
...@@ -12,8 +12,7 @@ import android.widget.CheckBox; ...@@ -12,8 +12,7 @@ import android.widget.CheckBox;
import android.widget.TextView; import android.widget.TextView;
import com.topjohnwu.magisk.module.Module; import com.topjohnwu.magisk.module.Module;
import com.topjohnwu.magisk.rv.ItemClickListener; import com.topjohnwu.magisk.utils.Utils;
import com.topjohnwu.magisk.rv.ModulesAdapter;
import java.util.List; import java.util.List;
...@@ -38,36 +37,27 @@ public abstract class BaseModuleFragment extends Fragment { ...@@ -38,36 +37,27 @@ public abstract class BaseModuleFragment extends Fragment {
return view; return view;
} }
recyclerView.setAdapter(new ModulesAdapter(listModules(), new ItemClickListener() { recyclerView.setAdapter(new ModulesAdapter(listModules(), (chk, position) -> {
@Override
public void onItemClick(View view, int position) {
// On Checkbox change listener // On Checkbox change listener
CheckBox chbox = (CheckBox) view; CheckBox chbox = (CheckBox) chk;
if (!chbox.isChecked()) { if (!chbox.isChecked()) {
listModules().get(position).createDisableFile(); listModules().get(position).createDisableFile();
Snackbar.make(view, R.string.disable_file_created, Snackbar.LENGTH_SHORT).show(); Snackbar.make(chk, R.string.disable_file_created, Snackbar.LENGTH_SHORT).show();
} else { } else {
listModules().get(position).removeDisableFile(); listModules().get(position).removeDisableFile();
Snackbar.make(view, R.string.disable_file_removed, Snackbar.LENGTH_SHORT).show(); Snackbar.make(chk, R.string.disable_file_removed, Snackbar.LENGTH_SHORT).show();
}
} }
}, new ItemClickListener() { }, (deleteBtn, position) -> {
@Override
public void onItemClick(View view, int position) {
// On delete button click listener // On delete button click listener
listModules().get(position).createRemoveFile(); listModules().get(position).createRemoveFile();
Snackbar.make(view, R.string.remove_file_created, Snackbar.LENGTH_SHORT).show(); Snackbar.make(deleteBtn, R.string.remove_file_created, Snackbar.LENGTH_SHORT).show();
} }, (undeleteBtn, position) -> {
}, new ItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// On undelete button click listener // On undelete button click listener
listModules().get(position).deleteRemoveFile(); listModules().get(position).deleteRemoveFile();
Snackbar.make(view, R.string.remove_file_deleted, Snackbar.LENGTH_SHORT).show(); Snackbar.make(undeleteBtn, R.string.remove_file_deleted, Snackbar.LENGTH_SHORT).show();
}
})); }));
return view; return view;
} }
......
...@@ -101,18 +101,8 @@ public class LogFragment extends Fragment { ...@@ -101,18 +101,8 @@ public class LogFragment extends Fragment {
private void reloadErrorLog() { private void reloadErrorLog() {
new LogsManager(true).execute(); new LogsManager(true).execute();
svLog.post(new Runnable() { svLog.post(() -> svLog.scrollTo(0, txtLog.getHeight()));
@Override hsvLog.post(() -> hsvLog.scrollTo(0, 0));
public void run() {
svLog.scrollTo(0, txtLog.getHeight());
}
});
hsvLog.post(new Runnable() {
@Override
public void run() {
hsvLog.scrollTo(0, 0);
}
});
} }
private void clear() { private void clear() {
...@@ -134,12 +124,7 @@ public class LogFragment extends Fragment { ...@@ -134,12 +124,7 @@ public class LogFragment extends Fragment {
if (requestCode == 0) { if (requestCode == 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (mClickedMenuItem != null) { if (mClickedMenuItem != null) {
new Handler().postDelayed(new Runnable() { new Handler().postDelayed(() -> onOptionsItemSelected(mClickedMenuItem), 500);
@Override
public void run() {
onOptionsItemSelected(mClickedMenuItem);
}
}, 500);
} }
} else { } else {
Snackbar.make(txtLog, R.string.permissionNotGranted, Snackbar.LENGTH_LONG).show(); Snackbar.make(txtLog, R.string.permissionNotGranted, Snackbar.LENGTH_LONG).show();
......
package com.topjohnwu.magisk.rv; package com.topjohnwu.magisk;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
...@@ -9,7 +9,6 @@ import android.widget.CompoundButton; ...@@ -9,7 +9,6 @@ import android.widget.CompoundButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.module.Module; import com.topjohnwu.magisk.module.Module;
import com.topjohnwu.magisk.utils.Shell; import com.topjohnwu.magisk.utils.Shell;
import com.topjohnwu.magisk.utils.Utils; import com.topjohnwu.magisk.utils.Utils;
...@@ -22,11 +21,11 @@ import butterknife.ButterKnife; ...@@ -22,11 +21,11 @@ import butterknife.ButterKnife;
public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHolder> { public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHolder> {
private final List<Module> mList; private final List<Module> mList;
private final ItemClickListener chboxListener; private final Utils.ItemClickListener chboxListener;
private final ItemClickListener deleteBtnListener; private final Utils.ItemClickListener deleteBtnListener;
private final ItemClickListener unDeleteBtnListener; private final Utils.ItemClickListener unDeleteBtnListener;
public ModulesAdapter(List<Module> list, ItemClickListener chboxListener, ItemClickListener deleteBtnListener, ItemClickListener undeleteBtnListener) { public ModulesAdapter(List<Module> list, Utils.ItemClickListener chboxListener, Utils.ItemClickListener deleteBtnListener, Utils.ItemClickListener undeleteBtnListener) {
this.mList = list; this.mList = list;
this.chboxListener = chboxListener; this.chboxListener = chboxListener;
this.deleteBtnListener = deleteBtnListener; this.deleteBtnListener = deleteBtnListener;
...@@ -49,16 +48,9 @@ public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHold ...@@ -49,16 +48,9 @@ public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHold
holder.description.setText(module.getDescription()); holder.description.setText(module.getDescription());
holder.checkBox.setChecked(module.isEnabled()); holder.checkBox.setChecked(module.isEnabled());
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { holder.checkBox.setOnCheckedChangeListener((compoundButton, b) -> chboxListener.onItemClick(compoundButton, holder.getAdapterPosition()));
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
chboxListener.onItemClick(compoundButton, holder.getAdapterPosition());
}
});
holder.delete.setOnClickListener(new View.OnClickListener() { holder.delete.setOnClickListener(view -> {
@Override
public void onClick(View view) {
if (module.willBeRemoved()) { if (module.willBeRemoved()) {
unDeleteBtnListener.onItemClick(holder.delete, holder.getAdapterPosition()); unDeleteBtnListener.onItemClick(holder.delete, holder.getAdapterPosition());
} else { } else {
...@@ -66,7 +58,6 @@ public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHold ...@@ -66,7 +58,6 @@ public class ModulesAdapter extends RecyclerView.Adapter<ModulesAdapter.ViewHold
} }
updateDeleteButton(holder, module); updateDeleteButton(holder, module);
}
}); });
updateDeleteButton(holder, module); updateDeleteButton(holder, module);
......
...@@ -28,13 +28,8 @@ import butterknife.ButterKnife; ...@@ -28,13 +28,8 @@ import butterknife.ButterKnife;
public class ModulesFragment extends Fragment { public class ModulesFragment extends Fragment {
private static final String MAGISK_PATH = "/magisk"; public static List<Module> listModules = new ArrayList<>();
private static final String MAGISK_CACHE_PATH = "/cache/magisk"; public static List<Module> listModulesCache = new ArrayList<>();
private static List<Module> listModules = new ArrayList<>();
private static List<Module> listModulesCache = new ArrayList<>();
public static loadModules loadMod;
@BindView(R.id.progressBar) ProgressBar progressBar; @BindView(R.id.progressBar) ProgressBar progressBar;
@BindView(R.id.pager) ViewPager viewPager; @BindView(R.id.pager) ViewPager viewPager;
...@@ -67,8 +62,7 @@ public class ModulesFragment extends Fragment { ...@@ -67,8 +62,7 @@ public class ModulesFragment extends Fragment {
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
viewPager.setAdapter(new TabsAdapter(getChildFragmentManager())); viewPager.setAdapter(new TabsAdapter(getChildFragmentManager()));
tabLayout.setupWithViewPager(viewPager); tabLayout.setupWithViewPager(viewPager);
loadMod = new loadModules(); new Utils.LoadModules(getContext()).execute();
loadMod.execute();
new updateUI().execute(); new updateUI().execute();
break; break;
} }
...@@ -94,40 +88,10 @@ public class ModulesFragment extends Fragment { ...@@ -94,40 +88,10 @@ public class ModulesFragment extends Fragment {
} }
public static class loadModules extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
listModules.clear();
listModulesCache.clear();
List<String> magisk = Utils.getModList(MAGISK_PATH);
List<String> magiskCache = Utils.getModList(MAGISK_CACHE_PATH);
if (!magisk.isEmpty()) {
for (String mod : magisk) {
listModules.add(new Module(mod));
}
}
if (!magiskCache.isEmpty()) {
for (String mod : magiskCache) {
listModulesCache.add(new Module(mod));
}
}
return null;
}
}
private class updateUI extends AsyncTask<Void, Void, Void> { private class updateUI extends AsyncTask<Void, Void, Void> {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
// Ensure loadMod is done
try {
loadMod.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return null; return null;
} }
......
...@@ -3,14 +3,12 @@ package com.topjohnwu.magisk; ...@@ -3,14 +3,12 @@ package com.topjohnwu.magisk;
import android.Manifest; import android.Manifest;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.IdRes; import android.support.annotation.IdRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView; import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
...@@ -22,7 +20,7 @@ import android.support.v7.widget.Toolbar; ...@@ -22,7 +20,7 @@ import android.support.v7.widget.Toolbar;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import com.topjohnwu.magisk.utils.Shell; import com.topjohnwu.magisk.utils.Utils;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
...@@ -50,10 +48,14 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView ...@@ -50,10 +48,14 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} }
// Load mods in the background, as it is time consuming // Startups
ModulesFragment.loadMod = new ModulesFragment.loadModules(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
ModulesFragment.loadMod.execute(); && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
new Popups().execute(); requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}
new Utils.Initialize(this).execute();
new Utils.CheckUpdates(this).execute();
new Utils.LoadModules(this).execute();
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
...@@ -84,10 +86,6 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView ...@@ -84,10 +86,6 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView
navigationView.setNavigationItemSelectedListener(this); navigationView.setNavigationItemSelectedListener(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}
} }
@Override @Override
...@@ -156,20 +154,4 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView ...@@ -156,20 +154,4 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView
} }
} }
} }
private class Popups extends AsyncTask <Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... voids) {
return Shell.rootAccess();
}
@Override
protected void onPostExecute(Boolean rootAccess) {
super.onPostExecute(rootAccess);
if (!rootAccess) {
Snackbar.make(findViewById(android.R.id.content), R.string.no_root_access, Snackbar.LENGTH_LONG).show();
}
}
}
} }
...@@ -2,6 +2,7 @@ package com.topjohnwu.magisk.module; ...@@ -2,6 +2,7 @@ package com.topjohnwu.magisk.module;
import android.util.Log; import android.util.Log;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Utils; import com.topjohnwu.magisk.utils.Utils;
import java.io.BufferedReader; import java.io.BufferedReader;
...@@ -13,13 +14,16 @@ public class Module { ...@@ -13,13 +14,16 @@ public class Module {
private String mRemoveFile; private String mRemoveFile;
private String mDisableFile; private String mDisableFile;
private String mName; private String mName = null;
private String mVersion; private String mVersion = "(No version provided)";
private String mDescription; private String mDescription = "(No description provided)";
private boolean mEnable; private boolean mEnable;
private boolean mRemove; private boolean mRemove;
private String mId;
private int mVersionCode;
public Module(String path) { public Module(String path) {
mRemoveFile = path + "/remove"; mRemoveFile = path + "/remove";
...@@ -46,7 +50,23 @@ public class Module { ...@@ -46,7 +50,23 @@ public class Module {
case "description": case "description":
mDescription = value; mDescription = value;
break; break;
case "id":
mId = value;
break;
case "versionCode":
try {
mVersionCode = Integer.parseInt(value);
} catch (NumberFormatException e) {
mVersionCode = 0;
}
break;
}
} }
if (mName == null) {
int sep = path.lastIndexOf('/');
mName = path.substring(sep + 1);
mId = mName;
} }
mEnable = !Utils.fileExist(mDisableFile); mEnable = !Utils.fileExist(mDisableFile);
......
package com.topjohnwu.magisk.receivers;
import android.content.Intent;
import android.support.v4.content.FileProvider;
import java.io.File;
public class ApkReceiver extends DownloadReceiver {
@Override
public void task(File file) {
Intent install = new Intent(Intent.ACTION_INSTALL_PACKAGE);
install.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
install.setData(FileProvider.getUriForFile(mContext, "com.topjohnwu.magisk.provider", file));
mContext.startActivity(install);
}
}
package com.topjohnwu.magisk.receivers;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.content.FileProvider;
import android.widget.Toast;
import com.topjohnwu.magisk.R;
import java.io.File;
/**
* Created by topjohnwu
*/
public abstract class DownloadReceiver extends BroadcastReceiver {
public Context mContext;
long downloadID;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
String action = intent.getAction();
if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)){
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadID);
Cursor c = downloadManager.query(query);
if (c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = c.getInt(columnIndex);
switch (status) {
case DownloadManager.STATUS_SUCCESSFUL:
File file = new File(Uri.parse(c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))).getPath());
task(file);
break;
default:
Toast.makeText(context, R.string.error_download_file, Toast.LENGTH_LONG).show();
break;
}
context.unregisterReceiver(this);
}
}
}
public void setDownloadID(long id) { downloadID = id;}
public abstract void task(File file);
}
\ No newline at end of file
package com.topjohnwu.magisk.receivers;
import android.support.v7.app.AlertDialog;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Utils;
import java.io.File;
public class ZipReceiver extends DownloadReceiver {
@Override
public void task(File file) {
new AlertDialog.Builder(mContext)
.setTitle("Installation")
.setMessage("Do you want to install now?")
.setCancelable(false)
.setPositiveButton("Yes, flash now", (dialogInterface, i) -> {
new Utils.flashZIP(file.getPath(), mContext).execute();
})
.setNegativeButton(R.string.no_thanks, null)
.show();
}
}
package com.topjohnwu.magisk.rv;
import android.view.View;
public interface ItemClickListener {
void onItemClick(View view, int position);
}
...@@ -17,7 +17,6 @@ public class Shell { ...@@ -17,7 +17,6 @@ public class Shell {
// -1 = problematic/unknown issue; 0 = not rooted; 1 = properly rooted; 2 = improperly rooted; // -1 = problematic/unknown issue; 0 = not rooted; 1 = properly rooted; 2 = improperly rooted;
public static int rootStatus; public static int rootStatus;
public static int magiskVersion;
private static Process rootShell; private static Process rootShell;
private static DataOutputStream rootSTDIN; private static DataOutputStream rootSTDIN;
...@@ -30,13 +29,6 @@ public class Shell { ...@@ -30,13 +29,6 @@ public class Shell {
private static void init() { private static void init() {
List<String> ret = sh("getprop magisk.version");
if (ret.get(0).replaceAll("\\s", "").isEmpty()) {
magiskVersion = -1;
} else {
magiskVersion = Integer.parseInt(ret.get(0));
}
try { try {
rootShell = Runtime.getRuntime().exec(sh("getprop magisk.supath").get(0) + "/su"); rootShell = Runtime.getRuntime().exec(sh("getprop magisk.supath").get(0) + "/su");
rootStatus = 1; rootStatus = 1;
...@@ -56,7 +48,7 @@ public class Shell { ...@@ -56,7 +48,7 @@ public class Shell {
rootSTDOUT = new StreamGobbler(rootShell.getInputStream(), rootOutList); rootSTDOUT = new StreamGobbler(rootShell.getInputStream(), rootOutList);
rootSTDOUT.start(); rootSTDOUT.start();
ret = su("echo -BOC-", "id"); List<String> ret = su("echo -BOC-", "id");
if (ret == null) { if (ret == null) {
// Something wrong with root, not allowed? // Something wrong with root, not allowed?
rootStatus = -1; rootStatus = -1;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<item <item
android:id="@+id/force_reload" android:id="@+id/force_reload"
android:icon="@drawable/ic_refresh" android:icon="@drawable/ic_refresh"
android:title="@string/force_reload" android:title="@string/menuReload"
app:showAsAction="always"/> app:showAsAction="always"/>
</menu> </menu>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">Magisk Manager</string>
<string name="about">Info su…</string> <string name="about">Info su…</string>
<string name="app_changelog">Changelog dell\'app</string> <string name="app_changelog">Changelog dell\'app</string>
<string name="app_developers">Sviluppatori principali</string> <string name="app_developers">Sviluppatori principali</string>
...@@ -11,8 +10,6 @@ ...@@ -11,8 +10,6 @@
<string name="cache_modules">Moduli in cache</string> <string name="cache_modules">Moduli in cache</string>
<string name="disable_file_created">Il modulo verrà disabilitato al prossimo riavvio</string> <string name="disable_file_created">Il modulo verrà disabilitato al prossimo riavvio</string>
<string name="disable_file_removed">Il modulo verrà abilitato al prossimo riavvio</string> <string name="disable_file_removed">Il modulo verrà abilitato al prossimo riavvio</string>
<string name="force_reload">Aggiorna</string>
<string name="loading">Caricamento…</string>
<string name="log">Log</string> <string name="log">Log</string>
<string name="log_is_empty">Il log è vuoto</string> <string name="log_is_empty">Il log è vuoto</string>
<string name="logs_clear_failed">Non è possibile leggere il log:</string> <string name="logs_clear_failed">Non è possibile leggere il log:</string>
......
<resources> <resources>
<string name="app_name">Magisk Manager</string> <!--Universal-->
<string name="app_name" translatable="false">Magisk Manager</string>
<string name="magisk" translatable="false">Magisk</string> <string name="magisk" translatable="false">Magisk</string>
<!--Welcome Activity-->
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="root">Root</string>
<string name="modules">Modules</string>
<string name="log">Log</string>
<!--Magisk 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_error">Have you installed Magisk?</string> <string name="magisk_version_error">Have you installed Magisk?</string>
<string name="app_update_available">Magisk Manager App v%1$s update!</string>
<string name="magisk_update_available">Magisk v%1$s update!</string>
<string name="cannot_check_updates">Cannot check for updates</string>
<string name="up_to_date">Latest version of %1$s installed</string>
<!--Root Fragment-->
<string name="root_toggle">Root Toggle</string>
<string name="selinux_toggle">SELinux Toggle</string>
<string name="root_error">Root Error</string> <string name="root_error">Root Error</string>
<string name="root_error_info">Safety Net Status Unknown</string> <string name="root_error_info">Safety Net Status Unknown</string>
<string name="root_none">Not Rooted</string> <string name="root_none">Not Rooted</string>
...@@ -13,7 +31,7 @@ ...@@ -13,7 +31,7 @@
<string name="root_mounted_info">Root mounted and enabled. Safety Net (Android Pay) will NOT work</string> <string name="root_mounted_info">Root mounted and enabled. Safety Net (Android Pay) will NOT work</string>
<string name="root_unmounted">Root not mounted</string> <string name="root_unmounted">Root not mounted</string>
<string name="root_unmounted_info">Safety Net (Android Pay) should work, but no root temporarily\nYou might need to manually add a card in Android Pay app to refresh the root status of AP</string> <string name="root_unmounted_info">Safety Net (Android Pay) should work, but no root temporarily\nYou might need to manually add a card in Android Pay app to refresh the root status of AP</string>
<string name="root_system">Improperly Installed</string> <string name="root_system">Magisk Incompatible Root Detected</string>
<string name="root_system_info">Root improperly installed. Safety Net (Android Pay) will NOT work, and impossible to toggle</string> <string name="root_system_info">Root improperly installed. Safety Net (Android Pay) will NOT work, and impossible to toggle</string>
<string name="selinux_error_info">SELinux Status Unknown</string> <string name="selinux_error_info">SELinux Status Unknown</string>
...@@ -21,17 +39,15 @@ ...@@ -21,17 +39,15 @@
<string name="selinux_permissive_info">SELinux is permissive\nOnly turn off SELinux if necessary!</string> <string name="selinux_permissive_info">SELinux is permissive\nOnly turn off SELinux if necessary!</string>
<string name="selinux_samsung_info">Samsung need custom kernel for switching SELinux status!</string> <string name="selinux_samsung_info">Samsung need custom kernel for switching SELinux status!</string>
<string name="root_toggle">Root Toggle</string> <!--Module Fragment-->
<string name="selinux_toggle">SELinux Toggle</string> <string name="cache_modules">Cache modules</string>
<string name="no_modules_found">No modules found</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="modules">Modules</string>
<string name="log">Log</string>
<string name="no_root_access">No root access, functionality limited</string>
<string name="remove_file_created">Module will be removed at next reboot</string> <string name="remove_file_created">Module will be removed at next reboot</string>
<string name="remove_file_deleted">Module will not be removed at next reboot</string>
<string name="disable_file_created">Module will be disabled at next reboot</string> <string name="disable_file_created">Module will be disabled at next reboot</string>
<string name="disable_file_removed">Module will be enabled at next reboot</string>
<!--Log Fragment-->
<string name="menuSaveToSd">Save to SD</string> <string name="menuSaveToSd">Save to SD</string>
<string name="menuSend">Send</string> <string name="menuSend">Send</string>
<string name="menuReload">Reload</string> <string name="menuReload">Reload</string>
...@@ -41,10 +57,8 @@ ...@@ -41,10 +57,8 @@
<string name="logs_clear_failed">Could not clear the log:</string> <string name="logs_clear_failed">Could not clear the log:</string>
<string name="log_is_empty">Log is empty</string> <string name="log_is_empty">Log is empty</string>
<string name="logs_save_failed">Could not write log to SD card:</string> <string name="logs_save_failed">Could not write log to SD card:</string>
<string name="permissionNotGranted">This feature will not work without permission to write external storage.</string>
<string name="disable_file_removed">Module will be enabled at next reboot</string> <!--About Activity-->
<string name="remove_file_deleted">Module will not be removed at next reboot</string>
<string name="cache_modules">Cache modules</string>
<string name="about">About</string> <string name="about">About</string>
<string name="app_developers">Main developers</string> <string name="app_developers">Main developers</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/dvdandroid">dvdandroid</a>]]></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/dvdandroid">dvdandroid</a>]]></string>
...@@ -54,20 +68,25 @@ ...@@ -54,20 +68,25 @@
<string name="app_source_code">Source code</string> <string name="app_source_code">Source code</string>
<string name="app_translators">App\'s translators</string> <string name="app_translators">App\'s translators</string>
<string name="support_thread">Support thread</string> <string name="support_thread">Support thread</string>
<string name="force_reload">Refresh</string>
<string name="no_modules_found">No modules found</string>
<string name="loading">Loading…</string>
<string name="update_available">Update available!</string>
<string name="download">Download</string>
<string name="update_available_message"><![CDATA[A new version of %1$s is available!<br>Version: v%2$s<br>Changelog:<br>%3$s]]></string>
<string name="no_thanks">No, thanks</string>
<string name="never_show_again">Don\'t show again</string>
<string name="error_download_file">Error downloading file</string>
<string name="flash_recovery">File downloaded in Magisk directory, you can flash it in recovery</string>
<string name="root">Root</string>
<string name="app_update_available">Magisk Manager App v%1$s update!</string>
<string name="magisk_update_available">Magisk v%1$s update!</string>
<string name="cannot_check_updates">Cannot check for updates</string>
<string name="up_to_date">Latest version of %1$s installed</string>
<!--Toasts, Dialogs-->
<string name="permissionNotGranted">This feature will not work without permission to write external storage.</string>
<string name="no_root_access">No root access, functionality limited</string>
<string name="no_thanks">No thanks</string>
<string name="update_title">%1$s Update!</string>
<string name="update_msg"><![CDATA[New version v%2$s of %1$s is available!<br>Changelog:<br>%3$s]]></string>
<string name="download_install">Download and install</string>
<string name="download_file_error">Error downloading file</string>
<string name="manual_install">File downloaded in %1$s\nFlash it in recovery manually</string>
<string name="reboot_title">Installation succeeded!</string>
<string name="reboot_msg">Do you want to reboot now?</string>
<string name="reboot">Reboot</string>
<string name="zip_install_progress_title">Installing</string>
<string name="zip_install_progress_msg">"Installing %1$s …"</string>
<string name="no_magisk_title">No Magisk Installed!</string>
<string name="no_magisk_msg">Do you want to download and install Magisk?</string>
<string name="root_method_title">Choose a root method</string>
<string name="phh">phh\'s superuser</string>
<string name="supersu">SuperSU</string>
<string name="root_system_msg">It seems that you have incompatible root installed\nDo you want to install Magisk compatible root now?</string>
</resources> </resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment