From ec3c982f3d6e8d8e537ca31c50d038c0ecdb12ee Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Mon, 8 Feb 2021 17:18:20 +0800 Subject: [PATCH] [app] Show snackbar for compiling result (#96) --- .../manager/adapters/ScopeAdapter.java | 2 +- .../manager/ui/activity/AppListActivity.java | 4 ++ .../ui/fragment/CompileDialogFragment.java | 60 ++++++++----------- .../lsposed/manager/util/Singleton.java | 17 ------ .../lsposed/manager/util/ToastUtil.java | 22 ------- .../res/layout/fragment_compile_dialog.xml | 3 +- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 7 +-- 8 files changed, 37 insertions(+), 79 deletions(-) delete mode 100644 app/src/main/java/io/github/lsposed/manager/util/Singleton.java delete mode 100644 app/src/main/java/io/github/lsposed/manager/util/ToastUtil.java diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java index 0cdc1024..3d9df9df 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java @@ -263,7 +263,7 @@ public class ScopeAdapter extends RecyclerView.Adapter activity.startActivity(launchIntent); } } else if (itemId == R.id.app_menu_compile_speed) { - CompileDialogFragment.speed(activity, activity.getSupportFragmentManager(), info); + CompileDialogFragment.speed(activity.getSupportFragmentManager(), info); } else if (itemId == R.id.app_menu_store) { Uri uri = Uri.parse("market://details?id=" + info.packageName); Intent intent = new Intent(Intent.ACTION_VIEW, uri); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java index 54d147bc..1313877b 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/AppListActivity.java @@ -187,6 +187,10 @@ public class AppListActivity extends BaseActivity { } } + public void makeSnackBar(String text, @Snackbar.Duration int duration) { + Snackbar.make(binding.snackbar, text, duration).show(); + } + public void makeSnackBar(@StringRes int text, @Snackbar.Duration int duration) { Snackbar.make(binding.snackbar, text, duration).show(); } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/fragment/CompileDialogFragment.java b/app/src/main/java/io/github/lsposed/manager/ui/fragment/CompileDialogFragment.java index 8967a3c6..2915cffc 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/fragment/CompileDialogFragment.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/fragment/CompileDialogFragment.java @@ -8,13 +8,15 @@ import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; +import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDialogFragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.android.material.snackbar.Snackbar; import java.io.BufferedReader; import java.io.InputStreamReader; @@ -23,25 +25,19 @@ import java.lang.ref.WeakReference; import io.github.lsposed.manager.App; import io.github.lsposed.manager.R; import io.github.lsposed.manager.databinding.FragmentCompileDialogBinding; -import io.github.lsposed.manager.util.ToastUtil; +import io.github.lsposed.manager.ui.activity.AppListActivity; @SuppressWarnings("deprecation") public class CompileDialogFragment extends AppCompatDialogFragment { - // TODO: private static final String[] COMPILE_RESET_COMMAND = new String[]{"cmd", "package", "compile", "-f", "-m", "speed", ""}; private static final String KEY_APP_INFO = "app_info"; - private static final String KEY_MSG = "msg"; private ApplicationInfo appInfo; - public CompileDialogFragment() { - } - - public static void speed(Context context, FragmentManager fragmentManager, ApplicationInfo info) { + public static void speed(FragmentManager fragmentManager, ApplicationInfo info) { Bundle arguments = new Bundle(); arguments.putParcelable(KEY_APP_INFO, info); - arguments.putString(KEY_MSG, context.getString(R.string.compile_speed_msg)); CompileDialogFragment fragment = new CompileDialogFragment(); fragment.setArguments(arguments); fragment.setCancelable(false); @@ -59,18 +55,15 @@ public class CompileDialogFragment extends AppCompatDialogFragment { if (appInfo == null) { throw new IllegalStateException("appInfo should not be null."); } - String msg = arguments.getString(KEY_MSG, getString(R.string.compile_speed_msg)); + + FragmentCompileDialogBinding binding = FragmentCompileDialogBinding.inflate(LayoutInflater.from(requireActivity()), null, false); final PackageManager pm = requireContext().getPackageManager(); - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext()) + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity()) .setIcon(appInfo.loadIcon(pm)) .setTitle(appInfo.loadLabel(pm)) - .setCancelable(false); - FragmentCompileDialogBinding binding = FragmentCompileDialogBinding.inflate(LayoutInflater.from(requireContext()), null, false); - builder.setView(binding.getRoot()); - binding.message.setText(msg); - AlertDialog alertDialog = builder.create(); - alertDialog.setCanceledOnTouchOutside(false); - return alertDialog; + .setView(binding.getRoot()); + + return builder.create(); } @Override @@ -83,11 +76,7 @@ public class CompileDialogFragment extends AppCompatDialogFragment { command[6] = appInfo.packageName; new CompileTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, command); } else { - try { - dismissAllowingStateLoss(); - } catch (Exception e) { - e.printStackTrace(); - } + dismissAllowingStateLoss(); } } @@ -101,9 +90,6 @@ public class CompileDialogFragment extends AppCompatDialogFragment { @Override protected String doInBackground(String... commands) { - if (outerRef.get() == null) { - return ""; - } try { Process process = Runtime.getRuntime().exec(commands); BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); @@ -138,19 +124,25 @@ public class CompileDialogFragment extends AppCompatDialogFragment { @Override protected void onPostExecute(String result) { - try { - outerRef.get().dismissAllowingStateLoss(); - } catch (Exception e) { - e.printStackTrace(); - } Context context = App.getInstance(); + String text; if (result.length() == 0) { - ToastUtil.showLongToast(context, R.string.compile_failed); + text = context.getString(R.string.compile_failed); } else if (result.length() >= 5 && "Error".equals(result.substring(0, 5))) { - ToastUtil.showLongToast(context, context.getString(R.string.compile_failed_with_info) + " " + result.substring(6)); + text = context.getString(R.string.compile_failed_with_info) + " " + result.substring(6); } else { - ToastUtil.showLongToast(context, R.string.done); + text = context.getString(R.string.compile_done); } + CompileDialogFragment fragment = outerRef.get(); + if (fragment != null) { + fragment.dismissAllowingStateLoss(); + AppListActivity activity = (AppListActivity) fragment.getActivity(); + if (activity != null && activity.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { + activity.makeSnackBar(text, Snackbar.LENGTH_LONG); + return; + } + } + Toast.makeText(context, text, Toast.LENGTH_LONG).show(); } } } diff --git a/app/src/main/java/io/github/lsposed/manager/util/Singleton.java b/app/src/main/java/io/github/lsposed/manager/util/Singleton.java deleted file mode 100644 index 530ac6cd..00000000 --- a/app/src/main/java/io/github/lsposed/manager/util/Singleton.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.github.lsposed.manager.util; - -public abstract class Singleton { - - private T mInstance; - - protected abstract T create(); - - public final T get() { - synchronized (this) { - if (mInstance == null) { - mInstance = create(); - } - return mInstance; - } - } -} \ No newline at end of file diff --git a/app/src/main/java/io/github/lsposed/manager/util/ToastUtil.java b/app/src/main/java/io/github/lsposed/manager/util/ToastUtil.java deleted file mode 100644 index 1e27b691..00000000 --- a/app/src/main/java/io/github/lsposed/manager/util/ToastUtil.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.github.lsposed.manager.util; - -import android.content.Context; -import android.widget.Toast; - -import androidx.annotation.StringRes; - -public class ToastUtil { - - public static void showShortToast(Context context, @StringRes int resId) { - Toast.makeText(context, resId, Toast.LENGTH_SHORT).show(); - } - - public static void showLongToast(Context context, @StringRes int resId) { - Toast.makeText(context, resId, Toast.LENGTH_LONG).show(); - } - - public static void showLongToast(Context context, String msg) { - Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); - } - -} diff --git a/app/src/main/res/layout/fragment_compile_dialog.xml b/app/src/main/res/layout/fragment_compile_dialog.xml index 5bf769c9..a0c32028 100644 --- a/app/src/main/res/layout/fragment_compile_dialog.xml +++ b/app/src/main/res/layout/fragment_compile_dialog.xml @@ -21,5 +21,6 @@ android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="center_vertical" /> + android:layout_gravity="center_vertical" + android:text="@string/compile_speed_msg" /> \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 81bb38ae..ee78107a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -139,4 +139,5 @@ 备份 恢复 %s 已更新 + 优化完成 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c5e0e067..804dd8e0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,10 +80,9 @@ Android %2$s (%1$s, API %3$d) This is the LSPosed Framework and modules log\nif you need a Android logcat, you can try our Log Catcher Magisk module - Done! - - Optimizing … + Optimizing… + Optimization complete. https://github.com/LSPosed/LSPosed/ @@ -92,7 +91,7 @@ Disable verbose logs Cannot read log: \n Launch it - Optimization failed or return value is empty + Optimization failed or return value is empty. Optimization failed: Not installed Use the pure black dark theme