From e6b951c62af7840c8ef12600b9e85faedbff8137 Mon Sep 17 00:00:00 2001 From: dvdandroid Date: Sun, 21 Aug 2016 17:21:37 +0200 Subject: [PATCH] Log fragment completed --- app/src/main/AndroidManifest.xml | 12 +- .../com/topjohnwu/magisk/WelcomeActivity.java | 24 +- .../topjohnwu/magisk/rv/ModulesAdapter.java | 2 +- .../com/topjohnwu/magisk/ui/LogFragment.java | 274 +++++++++++++++++- .../topjohnwu/magisk/ui/ModulesFragment.java | 2 +- .../com/topjohnwu/magisk/ui/RootFragment.java | 4 +- app/src/main/res/drawable/ic_delete.xml | 4 +- app/src/main/res/drawable/ic_delete_black.xml | 9 + app/src/main/res/drawable/ic_refresh.xml | 9 + app/src/main/res/drawable/ic_save.xml | 9 + app/src/main/res/drawable/ic_send.xml | 9 + app/src/main/res/layout/activity_modules.xml | 14 - .../layout/{row.xml => list_item_module.xml} | 5 +- app/src/main/res/layout/log_fragment.xml | 43 +++ app/src/main/res/menu/menu_log.xml | 30 ++ app/src/main/res/values/strings.xml | 15 +- app/src/main/res/values/styles.xml | 2 +- 17 files changed, 432 insertions(+), 35 deletions(-) create mode 100644 app/src/main/res/drawable/ic_delete_black.xml create mode 100644 app/src/main/res/drawable/ic_refresh.xml create mode 100644 app/src/main/res/drawable/ic_save.xml create mode 100644 app/src/main/res/drawable/ic_send.xml delete mode 100644 app/src/main/res/layout/activity_modules.xml rename app/src/main/res/layout/{row.xml => list_item_module.xml} (94%) create mode 100644 app/src/main/res/layout/log_fragment.xml create mode 100644 app/src/main/res/menu/menu_log.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5d0b66b3..0344417bc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,13 +1,17 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools"> + + + android:theme="@style/AppTheme" + tools:ignore="AllowBackup,GoogleAppIndexingWarning"> @@ -15,7 +19,9 @@ - + diff --git a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java index 5036696ad..26997a56b 100644 --- a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java +++ b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java @@ -2,6 +2,7 @@ package com.topjohnwu.magisk; import android.os.Bundle; import android.os.Handler; +import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; @@ -30,6 +31,9 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView @BindView(R.id.drawer_layout) DrawerLayout drawer; @BindView(R.id.nav_view) NavigationView navigationView; + @IdRes + private int mSelectedId = R.id.modules;// for now + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -51,21 +55,31 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView } }; - drawer.setDrawerListener(toggle); + drawer.addDrawerListener(toggle); toggle.syncState(); - navigationView.setNavigationItemSelectedListener(this); + //noinspection ResourceType + mSelectedId = savedInstanceState == null ? mSelectedId : savedInstanceState.getInt(SELECTED_ITEM_ID); + navigationView.setCheckedItem(mSelectedId); - if (savedInstanceState != null) { + if (savedInstanceState == null) { mDrawerHandler.removeCallbacksAndMessages(null); mDrawerHandler.postDelayed(new Runnable() { @Override public void run() { - navigate(savedInstanceState.getInt(SELECTED_ITEM_ID)); + navigate(mSelectedId); } }, 250); } + navigationView.setNavigationItemSelectedListener(this); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putInt(SELECTED_ITEM_ID, mSelectedId); } @Override @@ -79,7 +93,7 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView @Override public boolean onNavigationItemSelected(@NonNull final MenuItem menuItem) { - menuItem.setChecked(true); + mSelectedId = menuItem.getItemId(); mDrawerHandler.removeCallbacksAndMessages(null); mDrawerHandler.postDelayed(new Runnable() { @Override diff --git a/app/src/main/java/com/topjohnwu/magisk/rv/ModulesAdapter.java b/app/src/main/java/com/topjohnwu/magisk/rv/ModulesAdapter.java index 9446f146a..7245c5c54 100644 --- a/app/src/main/java/com/topjohnwu/magisk/rv/ModulesAdapter.java +++ b/app/src/main/java/com/topjohnwu/magisk/rv/ModulesAdapter.java @@ -27,7 +27,7 @@ public class ModulesAdapter extends RecyclerView.Adapter 0) { + out.write(buffer, 0, len); + } + in.close(); + out.close(); + + Toast.makeText(getActivity(), targetFile.toString(), Toast.LENGTH_LONG).show(); + return targetFile; + } catch (IOException e) { + Toast.makeText(getActivity(), getResources().getString(R.string.logs_save_failed) + "\n" + e.getMessage(), Toast.LENGTH_LONG).show(); + return null; + } + } + + private class LogsReader extends AsyncTask { + + private static final int MAX_LOG_SIZE = 1000 * 1024; // 1000 KB + + private long skipLargeFile(BufferedReader is, long length) throws IOException { + if (length < MAX_LOG_SIZE) + return 0; + + long skipped = length - MAX_LOG_SIZE; + long yetToSkip = skipped; + do { + yetToSkip -= is.skip(yetToSkip); + } while (yetToSkip > 0); + + int c; + do { + c = is.read(); + if (c == -1) + break; + skipped++; + } while (c != '\n'); + + return skipped; + + } + + @Override + protected void onPreExecute() { + Utils.executeCommand("chmod 777 /cache"); + Utils.executeCommand("chmod 777 /cache/magisk.log"); + txtLog.setText(""); + } + + @Override + protected String doInBackground(File... log) { + Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 2); + + StringBuilder llog = new StringBuilder(15 * 10 * 1024); + try { + File logfile = log[0]; + BufferedReader br; + br = new BufferedReader(new FileReader(logfile)); + long skipped = skipLargeFile(br, logfile.length()); + if (skipped > 0) { + llog.append("-----------------\n"); + llog.append("Log too long"); + llog.append("\n-----------------\n\n"); + } + + char[] temp = new char[1024]; + int read; + while ((read = br.read(temp)) > 0) { + llog.append(temp, 0, read); + } + br.close(); + } catch (IOException e) { + llog.append("Cannot read log:\n"); + llog.append(e.getMessage()); + } + + return llog.toString(); + } + + @Override + protected void onPostExecute(String llog) { + progressBar.setVisibility(View.GONE); + txtLog.setText(llog); + + if (llog.length() == 0) + txtLog.setText(R.string.log_is_empty); + } + + } + } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java b/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java index a17b970bf..b065db2d2 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java @@ -25,7 +25,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class ModulesFragment extends android.support.v4.app.Fragment { +public class ModulesFragment extends Fragment { private static final String MAGISK_PATH = "/magisk"; private static final String MAGISK_CACHE_PATH = "/cache/magisk"; diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/RootFragment.java b/app/src/main/java/com/topjohnwu/magisk/ui/RootFragment.java index 14608b94a..b609325ce 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/RootFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/ui/RootFragment.java @@ -1,4 +1,6 @@ package com.topjohnwu.magisk.ui; -public class RootFragment extends android.support.v4.app.Fragment { +import android.support.v4.app.Fragment; + +public class RootFragment extends Fragment { } diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index a8d8089bf..830a171b1 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -1,8 +1,8 @@ + android:viewportHeight="24.0" + android:viewportWidth="24.0"> diff --git a/app/src/main/res/drawable/ic_delete_black.xml b/app/src/main/res/drawable/ic_delete_black.xml new file mode 100644 index 000000000..7de27c6a9 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_black.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 000000000..47859659e --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_save.xml b/app/src/main/res/drawable/ic_save.xml new file mode 100644 index 000000000..485fe9fcc --- /dev/null +++ b/app/src/main/res/drawable/ic_save.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_send.xml b/app/src/main/res/drawable/ic_send.xml new file mode 100644 index 000000000..a55465776 --- /dev/null +++ b/app/src/main/res/drawable/ic_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_modules.xml b/app/src/main/res/layout/activity_modules.xml deleted file mode 100644 index c844df6d2..000000000 --- a/app/src/main/res/layout/activity_modules.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/app/src/main/res/layout/row.xml b/app/src/main/res/layout/list_item_module.xml similarity index 94% rename from app/src/main/res/layout/row.xml rename to app/src/main/res/layout/list_item_module.xml index a8b7e07f3..284bf2044 100644 --- a/app/src/main/res/layout/row.xml +++ b/app/src/main/res/layout/list_item_module.xml @@ -1,6 +1,7 @@ - + android:src="@drawable/ic_menu_overflow_material" + tools:ignore="ContentDescription"/> diff --git a/app/src/main/res/layout/log_fragment.xml b/app/src/main/res/layout/log_fragment.xml new file mode 100644 index 000000000..6ca9092d5 --- /dev/null +++ b/app/src/main/res/layout/log_fragment.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_log.xml b/app/src/main/res/menu/menu_log.xml new file mode 100644 index 000000000..1b5c0ea5b --- /dev/null +++ b/app/src/main/res/menu/menu_log.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e376e260d..4c066fc5a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,13 +18,11 @@ Safety Net (Android Pay) should work Magisk v%1$s Samsung do not support switching SELinux status! - Loading... - WelcomeActivity + Loading… Open navigation drawer Close navigation drawer - Settings Root Modules Log @@ -32,4 +30,15 @@ Disable Module will be removed at next reboot Module will be disabled at next reboot + Save to SD + Send + Reload + SD card not found or not writable + Clear log now + Log successfully cleared + Could not clear the log: + Log is empty + Could not write log to SD card: + This feature will not work without permission to write external storage. + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a639011f3..9e0353ff7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -17,7 +17,7 @@ @color/primary 4dp @color/primary_text - @color/secondary_text + @color/primary_text @color/icons