Skip to content

Commit 3b3a87f

Browse files
authored
Developer mode (#242)
* Developer mode, logger, Local Diffusion partial log coverage * Implement cancel LD test flag * Update translations * Extend logs * Implement dev mode in Drawer navigation graph * Logs auto scroll after load * LD Scheduler thread setting * Update localization * Update test * Update test
1 parent 7d527de commit 3b3a87f

File tree

54 files changed

+1096
-155
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1096
-155
lines changed

core/common/src/main/java/com/shifthackz/aisdv1/core/common/extensions/AppExtensions.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import android.content.Intent
77
import android.net.Uri
88
import android.provider.Settings
99
import android.widget.Toast
10-
10+
import androidx.annotation.StringRes
1111

1212
fun Context.isAppInForeground(): Boolean {
1313
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
@@ -18,6 +18,10 @@ fun Context.isAppInForeground(): Boolean {
1818
}
1919
}
2020

21+
fun Context.showToast(@StringRes resId: Int) {
22+
resources.getString(resId).let(::showToast)
23+
}
24+
2125
fun Context.showToast(text: String) {
2226
Toast.makeText(this, text, Toast.LENGTH_LONG).show()
2327
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package com.shifthackz.aisdv1.core.common.schedulers
22

33
import io.reactivex.rxjava3.core.Scheduler
4+
import io.reactivex.rxjava3.schedulers.Schedulers
45
import java.util.concurrent.Executor
56

67
interface SchedulersProvider {
78
val io: Scheduler
89
val ui: Scheduler
910
val computation: Scheduler
1011
val singleThread: Executor
12+
13+
fun byToken(token: SchedulersToken): Scheduler = when (token) {
14+
SchedulersToken.MAIN_THREAD -> ui
15+
SchedulersToken.IO_THREAD -> io
16+
SchedulersToken.COMPUTATION -> computation
17+
SchedulersToken.SINGLE_THREAD -> Schedulers.from(singleThread)
18+
}
1119
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.shifthackz.aisdv1.core.common.schedulers
2+
3+
enum class SchedulersToken(val type: String) {
4+
MAIN_THREAD("Main thread"),
5+
IO_THREAD("IO thread"),
6+
COMPUTATION("Computation"),
7+
SINGLE_THREAD("Single thread"),
8+
}

core/localization/src/main/res/values-ru/strings.xml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<string name="apply">Применить</string>
1717
<string name="close">Закрыть</string>
1818
<string name="next">Далее</string>
19+
<string name="success">✅ Успешно</string>
20+
<string name="failure">❌ Ошибка</string>
1921

2022
<string name="two">Два</string>
2123
<string name="three">Три</string>
@@ -153,7 +155,8 @@
153155
<string name="title_server_setup">Конфигурация</string>
154156
<string name="title_select_sd_model">Выберите SD ML модель</string>
155157
<string name="title_clear_app_cache">Очистить кэш приложения</string>
156-
<string name="title_debug_menu">Дебаг Меню</string>
158+
<string name="title_debug_menu">Режим разработчика</string>
159+
<string name="title_debug_logger">Логи</string>
157160
<string name="title_lora">ЛоРА</string>
158161
<string name="title_txt_inversion">Инверсия текста</string>
159162
<string name="title_txt_inversion_short">Инверсия</string>
@@ -298,8 +301,19 @@
298301
<string name="model_local_custom_title">Чтобы использовать локальную пользовательскую модель, поместите ее в локальную папку в памяти телефона: Download/SDAi/model</string>
299302
<string name="model_local_custom_sub_title">Окончательная структура папок должна быть такой:</string>
300303

304+
<string name="debug_section_main">Отладка</string>
301305
<string name="debug_section_qa">QA тест-кейсы</string>
306+
<string name="debug_section_work_manager">Work Manager API</string>
307+
<string name="debug_action_unlock">Режим разработчика разблокирован!</string>
308+
<string name="debug_action_logger">Посмотреть логи</string>
309+
<string name="debug_action_logger_clear">Очистить все логи</string>
310+
<string name="debug_action_work_restart_txt2img">Перезапустить последнюю txt2img задачу</string>
311+
<string name="debug_action_work_restart_img2img">Перезапустить последнюю img2img задачу</string>
312+
<string name="debug_action_work_cancel_all">Отменить все задачи</string>
313+
<string name="debug_action_ld_allow_cancel">Разрешить прерывание генерации</string>
314+
<string name="debug_action_ld_scheduler">Поток</string>
302315
<string name="debug_action_bad_base64">Внести битый Base64 в БД</string>
316+
<string name="debug_logger_empty">Лог файл пуст.</string>
303317

304318
<string name="extras_empty_title">Здесь пусто…</string>
305319
<string name="extras_empty_sub_title_lora">Добавьте что-нибуть на %1$s сервере в: \n\n%2$s</string>
@@ -330,4 +344,9 @@
330344

331345
<string name="premission_rationale_title">Отсутствует разрешение.</string>
332346
<string name="premission_rationale_sub_title">Разрешите права на %1$s в настройках.</string>
347+
348+
<string name="scheduler_main">UI поток</string>
349+
<string name="scheduler_io">I/O Поток</string>
350+
<string name="scheduler_computation">Вычислительный</string>
351+
<string name="scheduler_single_thread">Однопоточность</string>
333352
</resources>

core/localization/src/main/res/values-tr/strings.xml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<string name="apply">Uygula</string>
1717
<string name="close">Kapalı</string>
1818
<string name="next">Sonraki</string>
19+
<string name="success">✅ Başarılı</string>
20+
<string name="failure">❌ Başarısızlık</string>
1921

2022
<string name="two">İki</string>
2123
<string name="three">Üç</string>
@@ -153,7 +155,8 @@
153155
<string name="title_server_setup">Sunucu Kurulumu</string>
154156
<string name="title_select_sd_model">SD Modeli seçin</string>
155157
<string name="title_clear_app_cache">Uygulama önbelleğini temizle</string>
156-
<string name="title_debug_menu">Hata Ayıklama Menüsü</string>
158+
<string name="title_debug_menu">Geliştirici modu</string>
159+
<string name="title_debug_logger">Günlükler</string>
157160
<string name="title_lora">LoRA</string>
158161
<string name="title_txt_inversion">Metin İnversiyon</string>
159162
<string name="title_txt_inversion_short">İnversiyon</string>
@@ -298,8 +301,19 @@
298301
<string name="model_local_custom_title">Yerel özel modeli kullanmak için telefonunuzun depolama alanındaki yerel klasöre yerleştirin: Download/SDAi/model</string>
299302
<string name="model_local_custom_sub_title">Son klasör yapısı şu şekilde olmalıdır::</string>
300303

304+
<string name="debug_section_main">Hata ayıklama</string>
305+
<string name="debug_section_work_manager">Work Manager API</string>
301306
<string name="debug_section_qa">QA işlemleri</string>
307+
<string name="debug_action_unlock">Geliştirici modu kilidi açıldı!</string>
308+
<string name="debug_action_logger">Günlükleri görüntüle</string>
309+
<string name="debug_action_logger_clear">Tüm günlükleri temizle</string>
310+
<string name="debug_action_work_restart_txt2img">Son txt2img görevini yeniden başlat</string>
311+
<string name="debug_action_work_restart_img2img">Son img2img görevini yeniden başlat</string>
312+
<string name="debug_action_work_cancel_all">Tüm çalışanları iptal et</string>
313+
<string name="debug_action_ld_allow_cancel">Oluşturmayı kesmeye izin ver</string>
314+
<string name="debug_action_ld_scheduler">İşlem zamanlayıcısı</string>
302315
<string name="debug_action_bad_base64">Kötü Base64\'ü DB\'ye yerleştirin</string>
316+
<string name="debug_logger_empty">Herhangi bir günlük bulunamadı.</string>
303317

304318
<string name="extras_empty_title">Burada hiçbir şey…</string>
305319
<string name="extras_empty_sub_title_lora">%1$s sunucusuna biraz içerik ekleyin: \n\n%2$s</string>
@@ -330,4 +344,9 @@
330344

331345
<string name="premission_rationale_title">Eksik izinler.</string>
332346
<string name="premission_rationale_sub_title">Lütfen uygulama ayarlarında %1$s iznini verin.</string>
347+
348+
<string name="scheduler_main">Ana İş Parçacığı</string>
349+
<string name="scheduler_io">G/Ç İş Parçacığı</string>
350+
<string name="scheduler_computation">Hesaplama</string>
351+
<string name="scheduler_single_thread">Tek İş Parçacığı</string>
333352
</resources>

core/localization/src/main/res/values-uk/strings.xml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
<string name="apply">Застосувати</string>
1717
<string name="close">Закрити</string>
1818
<string name="next">Далі</string>
19+
<string name="success">✅ Успіх</string>
20+
<string name="failure">❌ Помилка</string>
1921

2022
<string name="two">Два</string>
2123
<string name="three">Три</string>
@@ -153,7 +155,8 @@
153155
<string name="title_server_setup">Конфігурація</string>
154156
<string name="title_select_sd_model">Оберіть SD ML модель</string>
155157
<string name="title_clear_app_cache">Очистити кеш додатку</string>
156-
<string name="title_debug_menu">Дебаг Меню</string>
158+
<string name="title_debug_menu">Меню розробника</string>
159+
<string name="title_debug_logger">Логи</string>
157160
<string name="title_lora">ЛоРА</string>
158161
<string name="title_txt_inversion">Інверсія тексту</string>
159162
<string name="title_txt_inversion_short">Інверсія</string>
@@ -298,8 +301,19 @@
298301
<string name="model_local_custom_title">Щоб використовувати локальну спеціальну модель, помістіть її в локальну папку в пам’яті телефону: Download/SDAi/model</string>
299302
<string name="model_local_custom_sub_title">Остаточна структура папок має бути такою:</string>
300303

304+
<string name="debug_section_main">Відладка</string>
305+
<string name="debug_section_work_manager">Work Manager API</string>
301306
<string name="debug_section_qa">QA тест-кейси</string>
307+
<string name="debug_action_unlock">Режим розробника розблоковано!</string>
308+
<string name="debug_action_logger">Дивитися логи</string>
309+
<string name="debug_action_logger_clear">Видалити всі логи</string>
310+
<string name="debug_action_work_restart_txt2img">Перезапуск останнього txt2img завдання</string>
311+
<string name="debug_action_work_restart_img2img">Перезапуск останнього img2img завдання</string>
312+
<string name="debug_action_work_cancel_all">Скасувати всі завдання</string>
313+
<string name="debug_action_ld_allow_cancel">Дозволити переривання генерації</string>
314+
<string name="debug_action_ld_scheduler">Потік</string>
302315
<string name="debug_action_bad_base64">Внести битий Base64 в БД</string>
316+
<string name="debug_logger_empty">Лог файл пустий.</string>
303317

304318
<string name="extras_empty_title">Тут порожньо…</string>
305319
<string name="extras_empty_sub_title_lora">Додайте щось на %1$s сервері до: \n\n%2$s</string>
@@ -330,4 +344,9 @@
330344

331345
<string name="premission_rationale_title">Додаток не має дозволів.</string>
332346
<string name="premission_rationale_sub_title">Довольте права на %1$s в налаштуваннях.</string>
347+
348+
<string name="scheduler_main">UI Потік</string>
349+
<string name="scheduler_io">I/O Потік</string>
350+
<string name="scheduler_computation">Обчислення</string>
351+
<string name="scheduler_single_thread">Один потік</string>
333352
</resources>

core/localization/src/main/res/values-zh/strings.xml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
<string name="apply">应用</string>
2222
<string name="close">关闭</string>
2323
<string name="next">下一步</string>
24+
<string name="success">✅ 成功</string>
25+
<string name="failure">❌ 失败</string>
2426

2527
<string name="two">二</string>
2628
<string name="three">三</string>
@@ -191,7 +193,8 @@
191193
<string name="title_server_setup">配置</string>
192194
<string name="title_select_sd_model">选择SD ML模型</string>
193195
<string name="title_clear_app_cache">清除应用缓存</string>
194-
<string name="title_debug_menu">调试菜单</string>
196+
<string name="title_debug_menu">开发者模式</string>
197+
<string name="title_debug_logger">日志</string>
195198
<string name="title_lora">LoRA</string>
196199
<string name="title_hyper_net" translatable="false">超网络</string>
197200
<string name="title_hyper_net_short" translatable="false">H-Net</string>
@@ -360,8 +363,19 @@
360363
<string name="model_local_custom_sub_title">最终的文件夹结构应该是:</string>
361364

362365
<!-- 调试菜单 -->
366+
<string name="debug_section_main">调试</string>
367+
<string name="debug_section_work_manager">工作管理器 API</string>
363368
<string name="debug_section_qa">QA操作</string>
369+
<string name="debug_action_unlock">开发者模式已解锁!</string>
370+
<string name="debug_action_logger">查看日志</string>
371+
<string name="debug_action_logger_clear">清除所有日志</string>
372+
<string name="debug_action_work_restart_txt2img">重新启动最后一个 txt2img 任务</string>
373+
<string name="debug_action_work_restart_img2img">重新启动最后一个 img2img 任务</string>
374+
<string name="debug_action_work_cancel_all">取消所有工作程序</string>
375+
<string name="debug_action_ld_allow_cancel">允许中断生成</string>
376+
<string name="debug_action_ld_scheduler">进程调度程序</string>
364377
<string name="debug_action_bad_base64">在数据库中插入错误的Base64</string>
378+
<string name="debug_logger_empty">未找到日志。</string>
365379

366380
<!-- 附加内容提示 -->
367381
<string name="extras_empty_title">这里什么都没有…</string>
@@ -396,4 +410,9 @@
396410

397411
<string name="premission_rationale_title">缺少权限。</string>
398412
<string name="premission_rationale_sub_title">请在应用程序设置中允许 %1$s 权限。</string>
413+
414+
<string name="scheduler_main">主线程</string>
415+
<string name="scheduler_io">I/O 线程</string>
416+
<string name="scheduler_computation">计算</string>
417+
<string name="scheduler_single_thread">单线程</string>
399418
</resources>

core/localization/src/main/res/values/strings.xml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
<string name="apply">Apply</string>
2121
<string name="close">Close</string>
2222
<string name="next">Next</string>
23+
<string name="success">✅ Success</string>
24+
<string name="failure">❌ Failure</string>
2325

2426
<string name="two">Two</string>
2527
<string name="three">Three</string>
@@ -171,7 +173,8 @@
171173
<string name="title_server_setup">Configuration</string>
172174
<string name="title_select_sd_model">Select SD ML Model</string>
173175
<string name="title_clear_app_cache">Clear app cache</string>
174-
<string name="title_debug_menu">Debug Menu</string>
176+
<string name="title_debug_menu">Developer mode</string>
177+
<string name="title_debug_logger">Logs</string>
175178
<string name="title_lora">LoRA</string>
176179
<string name="title_hyper_net" translatable="false">Hypernetworks</string>
177180
<string name="title_hyper_net_short" translatable="false">H-Net</string>
@@ -320,8 +323,20 @@
320323
<string name="model_local_custom_title">To use local custom model, place it to local folder in your phone storage: Download/SDAi/model</string>
321324
<string name="model_local_custom_sub_title">The final folder structure should be:</string>
322325

326+
<string name="debug_section_main">Debugging</string>
327+
<string name="debug_section_ld" translatable="false">Local Diffusion</string>
328+
<string name="debug_section_work_manager">Work Manager API</string>
323329
<string name="debug_section_qa">QA actions</string>
330+
<string name="debug_action_unlock">Developer mode unlocked!</string>
331+
<string name="debug_action_logger">View logs</string>
332+
<string name="debug_action_logger_clear">Clear all logs</string>
333+
<string name="debug_action_work_restart_txt2img">Restart last txt2img task</string>
334+
<string name="debug_action_work_restart_img2img">Restart last img2img task</string>
335+
<string name="debug_action_work_cancel_all">Cancel all workers</string>
336+
<string name="debug_action_ld_allow_cancel">Allow to interrupt generation</string>
337+
<string name="debug_action_ld_scheduler">Process scheduler</string>
324338
<string name="debug_action_bad_base64">Insert bad Base64 in DB</string>
339+
<string name="debug_logger_empty">No logs found.</string>
325340

326341
<string name="extras_empty_title">Nothing here…</string>
327342
<string name="extras_empty_sub_title_lora">Add some content on %1$s server to: \n\n%2$s</string>
@@ -353,4 +368,9 @@
353368

354369
<string name="premission_rationale_title">Missing permissions.</string>
355370
<string name="premission_rationale_sub_title">Please allow %1$s permission in application settings.</string>
371+
372+
<string name="scheduler_main">Main Thread</string>
373+
<string name="scheduler_io">I/O Thread</string>
374+
<string name="scheduler_computation">Computation</string>
375+
<string name="scheduler_single_thread">Single Thread</string>
356376
</resources>

data/src/main/java/com/shifthackz/aisdv1/data/preference/PreferenceManagerImpl.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.shifthackz.aisdv1.data.preference
33
import android.content.SharedPreferences
44
import com.shifthackz.aisdv1.core.common.extensions.fixUrlSlashes
55
import com.shifthackz.aisdv1.core.common.extensions.shouldUseNewMediaStore
6+
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersToken
67
import com.shifthackz.aisdv1.domain.entity.ColorToken
78
import com.shifthackz.aisdv1.domain.entity.DarkThemeToken
89
import com.shifthackz.aisdv1.domain.entity.FeatureTag
@@ -51,6 +52,29 @@ class PreferenceManagerImpl(
5152
.apply()
5253
.also { onPreferencesChanged() }
5354

55+
override var developerMode: Boolean
56+
get() = preferences.getBoolean(KEY_DEVELOPER_MODE, false)
57+
set(value) = preferences.edit()
58+
.putBoolean(KEY_DEVELOPER_MODE, value)
59+
.apply()
60+
.also { onPreferencesChanged() }
61+
62+
override var localDiffusionAllowCancel: Boolean
63+
get() = preferences.getBoolean(KEY_ALLOW_LOCAL_DIFFUSION_CANCEL, false)
64+
set(value) = preferences.edit()
65+
.putBoolean(KEY_ALLOW_LOCAL_DIFFUSION_CANCEL, value)
66+
.apply()
67+
.also { onPreferencesChanged() }
68+
69+
override var localDiffusionSchedulerThread: SchedulersToken
70+
get() = preferences
71+
.getInt(KEY_LOCAL_DIFFUSION_SCHEDULER_THREAD, SchedulersToken.COMPUTATION.ordinal)
72+
.let { SchedulersToken.entries[it] }
73+
set(value) = preferences.edit()
74+
.putInt(KEY_LOCAL_DIFFUSION_SCHEDULER_THREAD, value.ordinal)
75+
.apply()
76+
.also { onPreferencesChanged() }
77+
5478
override var monitorConnectivity: Boolean
5579
get() = if (!source.featureTags.contains(FeatureTag.OwnServer)) false
5680
else preferences.getBoolean(KEY_MONITOR_CONNECTIVITY, true)
@@ -232,6 +256,9 @@ class PreferenceManagerImpl(
232256
serverUrl = automatic1111ServerUrl,
233257
sdModel = sdModel,
234258
demoMode = demoMode,
259+
developerMode = developerMode,
260+
localDiffusionAllowCancel = localDiffusionAllowCancel,
261+
localDiffusionSchedulerThread = localDiffusionSchedulerThread,
235262
monitorConnectivity = monitorConnectivity,
236263
backgroundGeneration = backgroundGeneration,
237264
autoSaveAiResults = autoSaveAiResults,
@@ -257,6 +284,9 @@ class PreferenceManagerImpl(
257284
const val KEY_SWARM_SERVER_URL = "key_swarm_server_url"
258285
const val KEY_SWARM_MODEL = "key_swarm_model"
259286
const val KEY_DEMO_MODE = "key_demo_mode"
287+
const val KEY_DEVELOPER_MODE = "key_developer_mode"
288+
const val KEY_ALLOW_LOCAL_DIFFUSION_CANCEL = "key_allow_local_diffusion_cancel"
289+
const val KEY_LOCAL_DIFFUSION_SCHEDULER_THREAD = "key_local_diffusion_scheduler_thread"
260290
const val KEY_MONITOR_CONNECTIVITY = "key_monitor_connectivity"
261291
const val KEY_AI_AUTO_SAVE = "key_ai_auto_save"
262292
const val KEY_SAVE_TO_MEDIA_STORE = "key_save_to_media_store"

0 commit comments

Comments
 (0)