[app] Allow automatic line feed of log text (#1333)

This commit is contained in:
Howard Wu 2021-10-27 23:52:20 +08:00 committed by GitHub
parent 67fd7ca054
commit b4a37ab4da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 59 additions and 39 deletions

View File

@ -24,6 +24,7 @@ import static org.lsposed.manager.App.TAG;
import static java.lang.Math.max; import static java.lang.Math.max;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.SharedPreferences;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
@ -31,6 +32,7 @@ import android.os.Looper;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -80,6 +82,7 @@ public class LogsFragment extends BaseFragment {
private final Handler handler = new Handler(Looper.getMainLooper()); private final Handler handler = new Handler(Looper.getMainLooper());
private FragmentLogsBinding binding; private FragmentLogsBinding binding;
private LinearLayoutManager layoutManager; private LinearLayoutManager layoutManager;
private final SharedPreferences preferences = App.getPreferences();
private final ActivityResultLauncher<String> saveLogsLauncher = registerForActivityResult( private final ActivityResultLauncher<String> saveLogsLauncher = registerForActivityResult(
new ActivityResultContracts.CreateDocument(), new ActivityResultContracts.CreateDocument(),
uri -> { uri -> {
@ -163,10 +166,21 @@ public class LogsFragment extends BaseFragment {
} else if (itemId == R.id.menu_clear) { } else if (itemId == R.id.menu_clear) {
clear(); clear();
return true; return true;
} else if (itemId == R.id.item_word_wrap) {
item.setChecked(!item.isChecked());
preferences.edit().putBoolean("enable_word_wrap", item.isChecked()).apply();
reloadLogs();
return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.item_word_wrap).setChecked(preferences.getBoolean("enable_word_wrap", false));
}
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
@ -299,7 +313,7 @@ public class LogsFragment extends BaseFragment {
TextView view = holder.textView; TextView view = holder.textView;
view.setText(logs.get(position)); view.setText(logs.get(position));
view.measure(0, 0); view.measure(0, 0);
int desiredWidth = view.getMeasuredWidth(); int desiredWidth = (preferences.getBoolean("enable_word_wrap", false)) ? binding.getRoot().getWidth() : view.getMeasuredWidth();
ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = desiredWidth; layoutParams.width = desiredWidth;
if (binding.recyclerView.getWidth() < desiredWidth) { if (binding.recyclerView.getWidth() < desiredWidth) {

View File

@ -18,33 +18,37 @@
~ Copyright (C) 2021 LSPosed Contributors ~ Copyright (C) 2021 LSPosed Contributors
--> -->
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/menu_save" android:id="@+id/menu_save"
android:icon="@drawable/ic_save" android:icon="@drawable/ic_save"
android:title="@string/menuSaveToSd" android:showAsAction="ifRoom"
app:showAsAction="ifRoom" /> android:title="@string/menuSaveToSd" />
<item <item
android:id="@+id/menu_refresh" android:id="@+id/menu_refresh"
android:icon="@drawable/ic_refresh" android:icon="@drawable/ic_refresh"
android:title="@string/menuReload" android:showAsAction="ifRoom"
app:showAsAction="ifRoom" /> android:title="@string/menuReload" />
<item <item
android:id="@+id/menu_scroll_top" android:id="@+id/menu_scroll_top"
android:title="@string/scroll_top" android:showAsAction="never"
app:showAsAction="never" /> android:title="@string/scroll_top" />
<item <item
android:id="@+id/menu_scroll_down" android:id="@+id/menu_scroll_down"
android:title="@string/scroll_bottom" android:showAsAction="never"
app:showAsAction="never" /> android:title="@string/scroll_bottom" />
<item <item
android:id="@+id/menu_clear" android:id="@+id/menu_clear"
android:title="@string/menuClearLog" android:showAsAction="never"
app:showAsAction="never" /> android:title="@string/menuClearLog" />
<item
android:id="@+id/item_word_wrap"
android:checkable="true"
android:checked="false"
android:title="@string/menu_enable_word_wrap" />
</menu> </menu>

View File

@ -75,6 +75,7 @@
<string name="logs_cannot_read">无法读取日志: \n</string> <string name="logs_cannot_read">无法读取日志: \n</string>
<string name="menuReload">重新加载</string> <string name="menuReload">重新加载</string>
<string name="logs_clear_failed_2">日志清除失败</string> <string name="logs_clear_failed_2">日志清除失败</string>
<string name="menu_enable_word_wrap">自动换行</string>
<!-- Notification --> <!-- Notification -->
<string name="module_is_not_activated_yet">Xposed 模块尚未激活</string> <string name="module_is_not_activated_yet">Xposed 模块尚未激活</string>
<string name="module_is_not_activated_yet_detailed">%s 已安装, 但尚未激活</string> <string name="module_is_not_activated_yet_detailed">%s 已安装, 但尚未激活</string>

View File

@ -78,6 +78,7 @@
<string name="logs_cannot_read">Cannot read log: \n</string> <string name="logs_cannot_read">Cannot read log: \n</string>
<string name="menuReload">Reload</string> <string name="menuReload">Reload</string>
<string name="logs_clear_failed_2">Failed to clear the log</string> <string name="logs_clear_failed_2">Failed to clear the log</string>
<string name="menu_enable_word_wrap">Word Wrap</string>
<!-- Notification --> <!-- Notification -->
<string name="module_is_not_activated_yet">Xposed module is not activated yet</string> <string name="module_is_not_activated_yet">Xposed module is not activated yet</string>

View File

@ -19,7 +19,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.preference.PreferenceCategory android:title="@string/group_network"> <PreferenceCategory android:title="@string/group_network">
<SwitchPreference <SwitchPreference
android:defaultValue="false" android:defaultValue="false"
@ -27,9 +27,9 @@
android:key="doh" android:key="doh"
android:summary="@string/dns_over_http_summary" android:summary="@string/dns_over_http_summary"
android:title="@string/dns_over_http" /> android:title="@string/dns_over_http" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_language"> <PreferenceCategory android:title="@string/settings_language">
<rikka.preference.SimpleMenuPreference <rikka.preference.SimpleMenuPreference
android:defaultValue="SYSTEM" android:defaultValue="SYSTEM"
@ -47,9 +47,9 @@
<Preference <Preference
android:key="translation" android:key="translation"
android:title="@string/settings_translation" /> android:title="@string/settings_translation" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_group_theme"> <PreferenceCategory android:title="@string/settings_group_theme">
<SwitchPreference <SwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="follow_system_accent" android:key="follow_system_accent"
@ -75,9 +75,9 @@
android:key="black_dark_theme" android:key="black_dark_theme"
android:summary="@string/pure_black_dark_theme_summary" android:summary="@string/pure_black_dark_theme_summary"
android:title="@string/pure_black_dark_theme" /> android:title="@string/pure_black_dark_theme" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_group_framework"> <PreferenceCategory android:title="@string/settings_group_framework">
<SwitchPreference <SwitchPreference
android:defaultValue="false" android:defaultValue="false"
@ -99,9 +99,9 @@
android:persistent="false" android:persistent="false"
android:summary="@string/settings_enable_auto_add_shortcut_summary" android:summary="@string/settings_enable_auto_add_shortcut_summary"
android:title="@string/pref_title_enable_auto_add_shortcut" /> android:title="@string/pref_title_enable_auto_add_shortcut" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_group_repo"> <PreferenceCategory android:title="@string/settings_group_repo">
<rikka.preference.SimpleMenuPreference <rikka.preference.SimpleMenuPreference
android:defaultValue="CHANNEL_STABLE" android:defaultValue="CHANNEL_STABLE"
android:entries="@array/update_channel_texts" android:entries="@array/update_channel_texts"
@ -109,9 +109,9 @@
android:key="update_channel" android:key="update_channel"
android:summary="%s" android:summary="%s"
android:title="@string/settings_update_channel" /> android:title="@string/settings_update_channel" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory <PreferenceCategory
android:icon="@drawable/ic_baseline_settings_backup_restore_24" android:icon="@drawable/ic_baseline_settings_backup_restore_24"
android:summary="@string/settings_backup_and_restore_summery" android:summary="@string/settings_backup_and_restore_summery"
android:title="@string/settings_backup_and_restore"> android:title="@string/settings_backup_and_restore">
@ -121,9 +121,9 @@
<Preference <Preference
android:key="restore" android:key="restore"
android:title="@string/settings_restore" /> android:title="@string/settings_restore" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory <PreferenceCategory
android:key="settings_group_system" android:key="settings_group_system"
android:title="@string/settings_group_system"> android:title="@string/settings_group_system">
<SwitchPreference <SwitchPreference
@ -133,5 +133,5 @@
android:persistent="false" android:persistent="false"
android:summary="@string/settings_show_hidden_icon_apps_enabled_summary" android:summary="@string/settings_show_hidden_icon_apps_enabled_summary"
android:title="@string/settings_show_hidden_icon_apps_enabled" /> android:title="@string/settings_show_hidden_icon_apps_enabled" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@ -20,7 +20,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.preference.PreferenceCategory android:title="@string/group_network"> <PreferenceCategory android:title="@string/group_network">
<SwitchPreference <SwitchPreference
android:defaultValue="false" android:defaultValue="false"
@ -28,9 +28,9 @@
android:key="doh" android:key="doh"
android:summary="@string/dns_over_http_summary" android:summary="@string/dns_over_http_summary"
android:title="@string/dns_over_http" /> android:title="@string/dns_over_http" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_language"> <PreferenceCategory android:title="@string/settings_language">
<rikka.preference.SimpleMenuPreference <rikka.preference.SimpleMenuPreference
android:defaultValue="SYSTEM" android:defaultValue="SYSTEM"
@ -48,9 +48,9 @@
<Preference <Preference
android:key="translation" android:key="translation"
android:title="@string/settings_translation" /> android:title="@string/settings_translation" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_group_theme"> <PreferenceCategory android:title="@string/settings_group_theme">
<SwitchPreference <SwitchPreference
android:defaultValue="true" android:defaultValue="true"
android:key="follow_system_accent" android:key="follow_system_accent"
@ -76,9 +76,9 @@
android:key="black_dark_theme" android:key="black_dark_theme"
android:summary="@string/pure_black_dark_theme_summary" android:summary="@string/pure_black_dark_theme_summary"
android:title="@string/pure_black_dark_theme" /> android:title="@string/pure_black_dark_theme" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_group_framework"> <PreferenceCategory android:title="@string/settings_group_framework">
<SwitchPreference <SwitchPreference
android:defaultValue="false" android:defaultValue="false"
@ -100,9 +100,9 @@
android:persistent="false" android:persistent="false"
android:summary="@string/settings_enable_auto_add_shortcut_summary" android:summary="@string/settings_enable_auto_add_shortcut_summary"
android:title="@string/pref_title_enable_auto_add_shortcut" /> android:title="@string/pref_title_enable_auto_add_shortcut" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory android:title="@string/settings_group_repo"> <PreferenceCategory android:title="@string/settings_group_repo">
<rikka.preference.SimpleMenuPreference <rikka.preference.SimpleMenuPreference
android:defaultValue="CHANNEL_STABLE" android:defaultValue="CHANNEL_STABLE"
android:entries="@array/update_channel_texts" android:entries="@array/update_channel_texts"
@ -110,9 +110,9 @@
android:key="update_channel" android:key="update_channel"
android:summary="%s" android:summary="%s"
android:title="@string/settings_update_channel" /> android:title="@string/settings_update_channel" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
<androidx.preference.PreferenceCategory <PreferenceCategory
android:icon="@drawable/ic_baseline_settings_backup_restore_24" android:icon="@drawable/ic_baseline_settings_backup_restore_24"
android:summary="@string/settings_backup_and_restore_summery" android:summary="@string/settings_backup_and_restore_summery"
android:title="@string/settings_backup_and_restore"> android:title="@string/settings_backup_and_restore">
@ -122,5 +122,5 @@
<Preference <Preference
android:key="restore" android:key="restore"
android:title="@string/settings_restore" /> android:title="@string/settings_restore" />
</androidx.preference.PreferenceCategory> </PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>