From ca9334b2dfc43630a4ace5ff43da68fbe088de39 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Fri, 27 Jan 2017 03:38:53 +0800 Subject: [PATCH] Add tabs to log fragment --- app/build.gradle | 4 +- .../java/com/topjohnwu/magisk/Global.java | 7 + .../com/topjohnwu/magisk/LogFragment.java | 251 +++-------------- .../topjohnwu/magisk/MagiskLogFragment.java | 258 ++++++++++++++++++ .../com/topjohnwu/magisk/MainActivity.java | 16 +- .../com/topjohnwu/magisk/StatusFragment.java | 5 +- .../com/topjohnwu/magisk/SuLogFragment.java | 20 ++ app/src/main/res/layout/fragment_log.xml | 53 ++-- .../main/res/layout/fragment_magisk_log.xml | 36 +++ app/src/main/res/layout/fragment_su_log.xml | 28 ++ app/src/main/res/menu/drawer.xml | 2 +- app/src/main/res/values-pl/strings.xml | 5 - app/src/main/res/values/strings.xml | 3 + 13 files changed, 430 insertions(+), 258 deletions(-) create mode 100644 app/src/main/java/com/topjohnwu/magisk/MagiskLogFragment.java create mode 100644 app/src/main/java/com/topjohnwu/magisk/SuLogFragment.java create mode 100644 app/src/main/res/layout/fragment_magisk_log.xml create mode 100644 app/src/main/res/layout/fragment_su_log.xml diff --git a/app/build.gradle b/app/build.gradle index 2f67c5c96..76d32e2ca 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,9 +49,12 @@ repositories { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') + compile 'com.android.support:recyclerview-v7:25.1.0' compile 'com.android.support:cardview-v7:25.1.0' compile 'com.android.support:design:25.1.0' + compile 'com.android.support:support-v4:25.1.0' + compile 'com.android.support:support-v13:25.1.0' compile 'com.jakewharton:butterknife:8.4.0' compile 'com.google.code.gson:gson:2.8.0' compile 'com.github.clans:fab:1.6.4' @@ -60,6 +63,5 @@ dependencies { compile 'com.madgag.spongycastle:pkix:1.54.0.0' compile 'com.madgag.spongycastle:pg:1.54.0.0' compile 'com.google.android.gms:play-services-safetynet:9.0.1' - compile 'com.android.support:support-v4:25.1.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } diff --git a/app/src/main/java/com/topjohnwu/magisk/Global.java b/app/src/main/java/com/topjohnwu/magisk/Global.java index 2ee4a46b4..6440f5251 100644 --- a/app/src/main/java/com/topjohnwu/magisk/Global.java +++ b/app/src/main/java/com/topjohnwu/magisk/Global.java @@ -27,6 +27,8 @@ public class Global { public static String releaseNoteLink; public static int SNCheckResult = -1; public static String bootBlock = null; + public static boolean isSuClient = false; + public static String suVersion = null; } public static class Data { public static ValueSortedMap repoMap = new ValueSortedMap<>(); @@ -56,6 +58,11 @@ public class Global { Configs.isDarkTheme = prefs.getBoolean("dark_theme", false); Configs.devLogging = prefs.getBoolean("developer_logging", false); Configs.shellLogging = prefs.getBoolean("shell_logging", false); + List ret = Shell.sh("su -v"); + if (Utils.isValidShellResponse(ret)) { + Info.suVersion = ret.get(0); + Info.isSuClient = Info.suVersion.toUpperCase().contains("MAGISK"); + } updateMagiskInfo(); } diff --git a/app/src/main/java/com/topjohnwu/magisk/LogFragment.java b/app/src/main/java/com/topjohnwu/magisk/LogFragment.java index eeb4d083e..1aac9c53d 100644 --- a/app/src/main/java/com/topjohnwu/magisk/LogFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/LogFragment.java @@ -1,40 +1,17 @@ package com.topjohnwu.magisk; -import android.Manifest; -import android.annotation.SuppressLint; + import android.app.Fragment; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Build; +import android.app.FragmentManager; import android.os.Bundle; -import android.os.Environment; -import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.Snackbar; -import android.support.v4.app.ActivityCompat; -import android.text.TextUtils; +import android.support.design.widget.TabLayout; +import android.support.v13.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.HorizontalScrollView; -import android.widget.ProgressBar; -import android.widget.ScrollView; -import android.widget.TextView; -import android.widget.Toast; -import com.topjohnwu.magisk.utils.Async; -import com.topjohnwu.magisk.utils.Shell; -import com.topjohnwu.magisk.utils.Utils; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Calendar; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; @@ -43,46 +20,32 @@ import butterknife.Unbinder; public class LogFragment extends Fragment { - private static final String MAGISK_LOG = "/cache/magisk.log"; - private Unbinder unbinder; - @BindView(R.id.txtLog) TextView txtLog; - @BindView(R.id.svLog) ScrollView svLog; - @BindView(R.id.hsvLog) HorizontalScrollView hsvLog; - @BindView(R.id.progressBar) ProgressBar progressBar; + @BindView(R.id.container) ViewPager viewPager; + @BindView(R.id.tab) TabLayout tab; - private MenuItem mClickedMenuItem; @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); - } + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View v = inflater.inflate(R.layout.fragment_log, container, false); + unbinder = ButterKnife.bind(this, v); - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_log, container, false); - unbinder = ButterKnife.bind(this, view); + ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); - txtLog.setTextIsSelectable(true); + adapter.addTab(new MagiskLogFragment(), getString(R.string.magisk)); - new LogManager().read(); + if (Global.Info.isSuClient) { + adapter.addTab(new SuLogFragment(), getString(R.string.superuser)); + tab.setupWithViewPager(viewPager); + tab.setVisibility(View.VISIBLE); + } - return view; - } + viewPager.setAdapter(adapter); - @Override - public void onStart() { - super.onStart(); - getActivity().setTitle(R.string.log); - } - - @Override - public void onResume() { - super.onResume(); - new LogManager().read(); + return v; } @Override @@ -91,168 +54,38 @@ public class LogFragment extends Fragment { unbinder.unbind(); } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_log, menu); - } + private class ViewPagerAdapter extends FragmentPagerAdapter { - @Override - public boolean onOptionsItemSelected(MenuItem item) { - mClickedMenuItem = item; - switch (item.getItemId()) { - case R.id.menu_refresh: - new LogManager().read(); - return true; - case R.id.menu_send: - new LogManager().send(); - return true; - case R.id.menu_save: - new LogManager().save(); - return true; - case R.id.menu_clear: - new LogManager().clear(); - return true; - default: - return true; - } - } + List fragmentList; + List titleList; - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == 0) { - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - if (mClickedMenuItem != null) { - new Handler().postDelayed(() -> onOptionsItemSelected(mClickedMenuItem), 500); - } - } else { - Snackbar.make(txtLog, R.string.permissionNotGranted, Snackbar.LENGTH_LONG).show(); - } - } - } - - public class LogManager extends Async.RootTask { - - int mode; - File targetFile; - - @SuppressLint("DefaultLocale") - @Override - protected Object doInBackground(Object... params) { - mode = (int) params[0]; - switch (mode) { - case 0: - List logList = Utils.readFile(MAGISK_LOG); - - if (Utils.isValidShellResponse(logList)) { - StringBuilder llog = new StringBuilder(15 * 10 * 1024); - for (String s : logList) { - llog.append(s).append("\n"); - } - return llog.toString(); - } - return ""; - - case 1: - Shell.su("echo > " + MAGISK_LOG); - Snackbar.make(txtLog, R.string.logs_cleared, Snackbar.LENGTH_SHORT).show(); - return ""; - - case 2: - case 3: - if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); - } - return false; - } - - if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) - return false; - - Calendar now = Calendar.getInstance(); - String filename = String.format( - "magisk_%s_%04d%02d%02d_%02d%02d%02d.log", "error", - now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, - now.get(Calendar.DAY_OF_MONTH), now.get(Calendar.HOUR_OF_DAY), - now.get(Calendar.MINUTE), now.get(Calendar.SECOND)); - - targetFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MagiskManager/" + filename); - - if ((!targetFile.getParentFile().exists() && !targetFile.getParentFile().mkdirs()) - || (targetFile.exists() && !targetFile.delete())) - return false; - - List in = Utils.readFile(MAGISK_LOG); - - if (Utils.isValidShellResponse(in)) { - try (FileWriter out = new FileWriter(targetFile)) { - for (String line : in) - out.write(line + "\n"); - return true; - } catch (IOException e) { - e.printStackTrace(); - return false; - } - } - return false; - } - return null; + public ViewPagerAdapter(FragmentManager fm) { + super(fm); + fragmentList = new ArrayList<>(); + titleList = new ArrayList<>(); } @Override - protected void onPostExecute(Object o) { - if (o == null) return; - boolean bool; - String llog; - switch (mode) { - case 0: - case 1: - llog = (String) o; - progressBar.setVisibility(View.GONE); - if (TextUtils.isEmpty(llog)) - txtLog.setText(R.string.log_is_empty); - else - txtLog.setText(llog); - svLog.post(() -> svLog.scrollTo(0, txtLog.getHeight())); - hsvLog.post(() -> hsvLog.scrollTo(0, 0)); - break; - case 2: - bool = (boolean) o; - if (bool) - Toast.makeText(getActivity(), targetFile.toString(), Toast.LENGTH_LONG).show(); - else - Toast.makeText(getActivity(), getString(R.string.logs_save_failed), Toast.LENGTH_LONG).show(); - break; - case 3: - bool = (boolean) o; - if (bool) { - Intent sendIntent = new Intent(); - sendIntent.setAction(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(targetFile)); - sendIntent.setType("application/html"); - startActivity(Intent.createChooser(sendIntent, getResources().getString(R.string.menuSend))); - } else { - Toast.makeText(getActivity(), getString(R.string.logs_save_failed), Toast.LENGTH_LONG).show(); - } - } + public Fragment getItem(int position) { + return fragmentList.get(position); } - public void read() { - exec(0); + @Override + public int getCount() { + return fragmentList.size(); } - public void clear() { - exec(1); + @Override + public CharSequence getPageTitle(int position) { + return titleList.get(position); } - public void save() { - exec(2); - } - - public void send() { - exec(3); + public void addTab(Fragment fragment, String title) { + fragmentList.add(fragment); + titleList.add(title); } } + + } diff --git a/app/src/main/java/com/topjohnwu/magisk/MagiskLogFragment.java b/app/src/main/java/com/topjohnwu/magisk/MagiskLogFragment.java new file mode 100644 index 000000000..ad69ab15e --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/MagiskLogFragment.java @@ -0,0 +1,258 @@ +package com.topjohnwu.magisk; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Fragment; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; +import android.support.v4.app.ActivityCompat; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.HorizontalScrollView; +import android.widget.ProgressBar; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import com.topjohnwu.magisk.utils.Async; +import com.topjohnwu.magisk.utils.Shell; +import com.topjohnwu.magisk.utils.Utils; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Calendar; +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; + +public class MagiskLogFragment extends Fragment { + + private static final String MAGISK_LOG = "/cache/magisk.log"; + + private Unbinder unbinder; + @BindView(R.id.txtLog) TextView txtLog; + @BindView(R.id.svLog) ScrollView svLog; + @BindView(R.id.hsvLog) HorizontalScrollView hsvLog; + + @BindView(R.id.progressBar) ProgressBar progressBar; + + private MenuItem mClickedMenuItem; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_magisk_log, container, false); + unbinder = ButterKnife.bind(this, view); + + txtLog.setTextIsSelectable(true); + + new LogManager().read(); + + return view; + } + + @Override + public void onStart() { + super.onStart(); + getActivity().setTitle(R.string.log); + } + + @Override + public void onResume() { + super.onResume(); + new LogManager().read(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.menu_log, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + mClickedMenuItem = item; + switch (item.getItemId()) { + case R.id.menu_refresh: + new LogManager().read(); + return true; + case R.id.menu_send: + new LogManager().send(); + return true; + case R.id.menu_save: + new LogManager().save(); + return true; + case R.id.menu_clear: + new LogManager().clear(); + return true; + default: + return true; + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == 0) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (mClickedMenuItem != null) { + new Handler().postDelayed(() -> onOptionsItemSelected(mClickedMenuItem), 500); + } + } else { + Snackbar.make(txtLog, R.string.permissionNotGranted, Snackbar.LENGTH_LONG).show(); + } + } + } + + public class LogManager extends Async.RootTask { + + int mode; + File targetFile; + + @SuppressLint("DefaultLocale") + @Override + protected Object doInBackground(Object... params) { + mode = (int) params[0]; + switch (mode) { + case 0: + List logList = Utils.readFile(MAGISK_LOG); + + if (Utils.isValidShellResponse(logList)) { + StringBuilder llog = new StringBuilder(15 * 10 * 1024); + for (String s : logList) { + llog.append(s).append("\n"); + } + return llog.toString(); + } + return ""; + + case 1: + Shell.su("echo > " + MAGISK_LOG); + Snackbar.make(txtLog, R.string.logs_cleared, Snackbar.LENGTH_SHORT).show(); + return ""; + + case 2: + case 3: + if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); + } + return false; + } + + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) + return false; + + Calendar now = Calendar.getInstance(); + String filename = String.format( + "magisk_%s_%04d%02d%02d_%02d%02d%02d.log", "error", + now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, + now.get(Calendar.DAY_OF_MONTH), now.get(Calendar.HOUR_OF_DAY), + now.get(Calendar.MINUTE), now.get(Calendar.SECOND)); + + targetFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MagiskManager/" + filename); + + if ((!targetFile.getParentFile().exists() && !targetFile.getParentFile().mkdirs()) + || (targetFile.exists() && !targetFile.delete())) + return false; + + List in = Utils.readFile(MAGISK_LOG); + + if (Utils.isValidShellResponse(in)) { + try (FileWriter out = new FileWriter(targetFile)) { + for (String line : in) + out.write(line + "\n"); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + return false; + } + return null; + } + + @Override + protected void onPostExecute(Object o) { + if (o == null) return; + boolean bool; + String llog; + switch (mode) { + case 0: + case 1: + llog = (String) o; + progressBar.setVisibility(View.GONE); + if (TextUtils.isEmpty(llog)) + txtLog.setText(R.string.log_is_empty); + else + txtLog.setText(llog); + svLog.post(() -> svLog.scrollTo(0, txtLog.getHeight())); + hsvLog.post(() -> hsvLog.scrollTo(0, 0)); + break; + case 2: + bool = (boolean) o; + if (bool) + Toast.makeText(getActivity(), targetFile.toString(), Toast.LENGTH_LONG).show(); + else + Toast.makeText(getActivity(), getString(R.string.logs_save_failed), Toast.LENGTH_LONG).show(); + break; + case 3: + bool = (boolean) o; + if (bool) { + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(targetFile)); + sendIntent.setType("application/html"); + startActivity(Intent.createChooser(sendIntent, getResources().getString(R.string.menuSend))); + } else { + Toast.makeText(getActivity(), getString(R.string.logs_save_failed), Toast.LENGTH_LONG).show(); + } + } + } + + public void read() { + exec(0); + } + + public void clear() { + exec(1); + } + + public void save() { + exec(2); + } + + public void send() { + exec(3); + } + } + +} diff --git a/app/src/main/java/com/topjohnwu/magisk/MainActivity.java b/app/src/main/java/com/topjohnwu/magisk/MainActivity.java index 30efebc0d..b0cf4e9dd 100644 --- a/app/src/main/java/com/topjohnwu/magisk/MainActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/MainActivity.java @@ -147,14 +147,14 @@ public class MainActivity extends AppCompatActivity private void checkHideSection() { Menu menu = navigationView.getMenu(); - menu.findItem(R.id.magiskhide).setVisible(Global.Info.magiskVersion >= 8 && - prefs.getBoolean("magiskhide", false) && Shell.rootAccess()); - menu.findItem(R.id.modules).setVisible(Global.Info.magiskVersion >= 4 && - Shell.rootAccess()); - menu.findItem(R.id.downloads).setVisible(Global.Info.magiskVersion >= 4 && - Shell.rootAccess()); - menu.findItem(R.id.log).setVisible(Shell.rootAccess()); - menu.findItem(R.id.install).setVisible(Shell.rootAccess()); + if (Shell.rootAccess()) { + menu.findItem(R.id.magiskhide).setVisible( + Global.Info.magiskVersion >= 8 && prefs.getBoolean("magiskhide", false)); + menu.findItem(R.id.modules).setVisible(Global.Info.magiskVersion >= 4); + menu.findItem(R.id.downloads).setVisible(Global.Info.magiskVersion >= 4); + menu.findItem(R.id.log).setVisible(true); + menu.findItem(R.id.superuser).setVisible(Global.Info.isSuClient); + } } public void navigate(int itemId, boolean now) { diff --git a/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java b/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java index ecda1fc7c..d4cdfdf9c 100644 --- a/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/StatusFragment.java @@ -176,12 +176,11 @@ public class StatusFragment extends Fragment implements CallbackHandler.EventLis rootStatusText.setText(R.string.not_rooted); break; case 1: - List stats = Shell.sh("su -v"); - if (Utils.isValidShellResponse(stats)) { + if (Global.Info.suVersion != null) { color = colorOK; image = R.drawable.ic_check_circle; rootStatusText.setText(R.string.proper_root); - rootInfoText.setText(stats.get(0)); + rootInfoText.setText(Global.Info.suVersion); break; } case -1: diff --git a/app/src/main/java/com/topjohnwu/magisk/SuLogFragment.java b/app/src/main/java/com/topjohnwu/magisk/SuLogFragment.java new file mode 100644 index 000000000..4eec98e1b --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/SuLogFragment.java @@ -0,0 +1,20 @@ +package com.topjohnwu.magisk; + + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public class SuLogFragment extends Fragment { + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_su_log, container, false); + } + +} diff --git a/app/src/main/res/layout/fragment_log.xml b/app/src/main/res/layout/fragment_log.xml index 7513fff3a..76b375b44 100644 --- a/app/src/main/res/layout/fragment_log.xml +++ b/app/src/main/res/layout/fragment_log.xml @@ -1,36 +1,27 @@ - - + - + android:layout_height="wrap_content" + android:background="?attr/colorPrimary" + android:id="@+id/tab" + app:tabPaddingEnd="20dp" + app:tabPaddingStart="20dp" + android:visibility="gone"> - + - - - - - - - - \ No newline at end of file + + diff --git a/app/src/main/res/layout/fragment_magisk_log.xml b/app/src/main/res/layout/fragment_magisk_log.xml new file mode 100644 index 000000000..7513fff3a --- /dev/null +++ b/app/src/main/res/layout/fragment_magisk_log.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_su_log.xml b/app/src/main/res/layout/fragment_su_log.xml new file mode 100644 index 000000000..05c52db77 --- /dev/null +++ b/app/src/main/res/layout/fragment_su_log.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/app/src/main/res/menu/drawer.xml b/app/src/main/res/menu/drawer.xml index c67365d6f..e0ce9ec41 100644 --- a/app/src/main/res/menu/drawer.xml +++ b/app/src/main/res/menu/drawer.xml @@ -20,7 +20,7 @@ android:id="@+id/superuser" android:icon="@drawable/ic_superuser" android:title="@string/superuser" - android:visible="true"/> + android:visible="false"/> diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 31c819409..166199a56 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1,7 +1,5 @@ - Magisk Manager - Magisk Otwórz szufladę nawigacji @@ -43,7 +41,6 @@ Keep dm-verity Zainstalowana Wersja Magisk: v%1$s Ostatnia Wersja Magisk: v%1$.1f - Magiskify (Nie umieszczono informacji) @@ -114,8 +111,6 @@ Ogólne - Motyw - Wybierz motyw Domyślny Ciemny Wyczyść Cache Repozytorium diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed84bb702..0422d6a25 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -169,4 +169,7 @@ Revoke? Confirm to revoke %1$s rights? + + Hello blank fragment +