Skip to content

Commit 1560288

Browse files
committed
refactor(core,ime,jni,ui,util): shrink the native stuffs
- Establish a class named Rime to help organize the methods we used on C++ side - Remove some methods duplicated or that we really don't need - Remove the parameters that not required anymore by some methods - Remove some fields of the data class in Rime.java that never be used actually
1 parent 5a14112 commit 1560288

File tree

11 files changed

+136
-284
lines changed

11 files changed

+136
-284
lines changed

app/src/main/java/com/osfans/trime/core/Rime.java

Lines changed: 13 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
package com.osfans.trime.core;
2020

21-
import android.content.Context;
2221
import android.text.TextUtils;
2322
import androidx.annotation.NonNull;
2423
import androidx.annotation.Nullable;
@@ -116,7 +115,6 @@ public static class RimeCommit {
116115

117116
/** Rime環境,包括 {@link RimeComposition 編碼區} 、{@link RimeMenu 候選區} */
118117
public static class RimeContext {
119-
int data_size;
120118
// v0.9
121119
RimeComposition composition;
122120
RimeMenu menu;
@@ -137,7 +135,6 @@ public RimeCandidate[] getCandidates() {
137135

138136
/** Rime狀態 */
139137
public static class RimeStatus {
140-
int data_size;
141138
// v0.9
142139
String schema_id;
143140
String schema_name;
@@ -366,39 +363,17 @@ private static boolean getStatus() {
366363
}
367364

368365
private static void init(boolean full_check) {
369-
String methodName =
370-
"\t<TrimeInit>\t" + Thread.currentThread().getStackTrace()[2].getMethodName() + "\t";
371-
Timber.d(methodName);
372366
isHandlingRimeNotification = false;
373367
final String sharedDataDir = getAppPrefs().getProfile().getSharedDataDir();
374368
final String userDataDir = getAppPrefs().getProfile().getUserDataDir();
375369

376-
Timber.d(methodName + "setup");
377-
// Initialize librime APIs
378-
setup(sharedDataDir, userDataDir);
379-
Timber.d(methodName + "initlialize");
380-
initialize(sharedDataDir, userDataDir);
381-
382-
Timber.d(methodName + "check");
383-
check(full_check);
384-
Timber.d(methodName + "set_notification_handler");
385-
set_notification_handler();
386-
if (!find_session()) {
387-
if (create_session() == 0) {
388-
Timber.wtf("Error creating rime session");
389-
return;
390-
}
391-
}
392-
Timber.d(methodName + "initSchema");
393-
initSchema();
370+
Timber.i("Starting up Rime APIs ...");
371+
startupRime(sharedDataDir, userDataDir, full_check);
394372

395-
Timber.d(methodName + "finish");
396-
}
373+
Timber.i("Initializing schema stuffs ...");
374+
initSchema();
397375

398-
public static void destroy() {
399-
destroy_session();
400-
finalize1();
401-
self = null;
376+
Timber.i("Finishing startup");
402377
}
403378

404379
public static String getCommitText() {
@@ -535,16 +510,12 @@ public static String getProperty(String prop) {
535510
return get_property(prop);
536511
}
537512

538-
public static String getSchemaId() {
539-
return getCurrentRimeSchema();
540-
}
541-
542513
private static boolean isEmpty(@NonNull String s) {
543514
return s.contentEquals(".default"); // 無方案
544515
}
545516

546517
public static boolean isEmpty() {
547-
return isEmpty(getSchemaId());
518+
return isEmpty(getCurrentRimeSchema());
548519
}
549520

550521
public static String getSchemaName() {
@@ -561,7 +532,7 @@ public static boolean selectSchema(String schemaId) {
561532

562533
// 刷新当前输入方案
563534
public static void applySchemaChange() {
564-
String schema_id = getSchemaId();
535+
String schema_id = getCurrentRimeSchema();
565536
// 实测直接select_schema(schema_id)方案没有重新载入,切换到不存在的方案,再切回去(会产生1秒的额外耗时).需要找到更好的方法
566537
// 不发生覆盖则不生效
567538
if (overWriteSchema(schema_id)) {
@@ -585,7 +556,7 @@ private static boolean overWriteSchema(String schema_id) {
585556
}
586557

587558
private static boolean overWriteSchema(String schema_id, Map<String, String> map) {
588-
if (schema_id == null) schema_id = getSchemaId();
559+
if (schema_id == null) schema_id = getCurrentRimeSchema();
589560
File file =
590561
new File(Rime.getRimeUserDataDir() + File.separator + "build", schema_id + ".schema.yaml");
591562
try {
@@ -663,79 +634,31 @@ public static String openccConvert(String line, String name) {
663634
return line;
664635
}
665636

666-
public static void check(boolean full_check) {
667-
if (start_maintenance(full_check) && is_maintenance_mode()) {
668-
join_maintenance_thread();
669-
}
670-
}
671-
672-
public static boolean syncUserData(Context context) {
637+
public static boolean syncUserData() {
673638
boolean b = sync_user_data();
674-
destroy();
675-
get(true);
639+
deployRime();
676640
return b;
677641
}
678642

679643
// init
680-
public static native void setup(String shared_data_dir, String user_data_dir);
681-
682-
public static native void set_notification_handler();
683-
684-
// entry and exit
685-
public static native void initialize(String shared_data_dir, String user_data_dir);
686-
687-
public static native void finalize1();
688-
689-
public static native boolean start_maintenance(boolean full_check);
690-
691-
public static native boolean is_maintenance_mode();
692-
693-
public static native void join_maintenance_thread();
644+
public static native void startupRime(
645+
@NonNull String sharedDir, @NonNull String userDir, boolean fullCheck);
694646

695647
// deployment
696648
public static native void deployer_initialize(String shared_data_dir, String user_data_dir);
697649

698650
public static native boolean prebuild();
699651

700-
public static native boolean deploy();
652+
public static native void deployRime();
701653

702654
public static native boolean deploy_schema(String schema_file);
703655

704656
public static native boolean deployRimeConfigFile(
705657
@NonNull String fileName, @NonNull String versionKey);
706658

707-
/**
708-
* 部署config文件到build目录
709-
*
710-
* @param name 配置名称,不含yaml后缀
711-
* @param skipIfExists 启用此模式时,如build目录已经存在对应名称的文件,且大小超过10k,则不重新部署,从而节约时间
712-
* @return
713-
*/
714-
public static boolean deploy_config_file(String name, boolean skipIfExists) {
715-
String file_name = name + ".yaml";
716-
if (skipIfExists) {
717-
File f = new File(Rime.getRimeUserDataDir() + File.separator + "build", file_name);
718-
if (f.exists()) {
719-
if (f.length() > 10000) {
720-
Timber.d("deploy_config_file() skip");
721-
return true;
722-
}
723-
} else {
724-
return Rime.deployRimeConfigFile(file_name, "config_version");
725-
}
726-
}
727-
return Rime.deployRimeConfigFile(file_name, "config_version");
728-
}
729-
730659
public static native boolean sync_user_data();
731660

732661
// session management
733-
public static native int create_session();
734-
735-
public static native boolean find_session();
736-
737-
public static native boolean destroy_session();
738-
739662
public static native void cleanup_stale_sessions();
740663

741664
public static native void cleanup_all_sessions();
@@ -817,8 +740,6 @@ public static native Map<String, Object> getRimeConfigMap(
817740

818741
public static native boolean delete_candidate_on_current_page(int index);
819742

820-
public static native String get_version();
821-
822743
public static native String get_librime_version();
823744

824745
// module
@@ -858,9 +779,4 @@ public static native Map<String, Object> getRimeConfigMap(
858779
public static native String get_opencc_version();
859780

860781
public static native String opencc_convert(String line, String name);
861-
862-
public static native void opencc_convert_dictionary(
863-
String inputFileName, String outputFileName, String formatFrom, String formatTo);
864-
865-
public static native String get_trime_version();
866782
}

app/src/main/java/com/osfans/trime/ime/broadcast/IntentReceiver.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ import android.content.BroadcastReceiver
2121
import android.content.Context
2222
import android.content.Intent
2323
import android.content.IntentFilter
24+
import com.blankj.utilcode.util.ToastUtils
25+
import com.osfans.trime.R
2426
import com.osfans.trime.core.Rime
25-
import com.osfans.trime.util.RimeUtils.deploy
26-
import com.osfans.trime.util.RimeUtils.sync
2727
import kotlinx.coroutines.CoroutineScope
28+
import kotlinx.coroutines.Dispatchers
2829
import kotlinx.coroutines.MainScope
2930
import kotlinx.coroutines.async
3031
import kotlinx.coroutines.launch
32+
import kotlinx.coroutines.withContext
3133
import timber.log.Timber
3234

3335
/** 接收 Intent 廣播事件 */
@@ -37,12 +39,15 @@ class IntentReceiver : BroadcastReceiver(), CoroutineScope by MainScope() {
3739
Timber.d("Received Command = %s", command)
3840
when (command) {
3941
COMMAND_DEPLOY -> launch {
40-
deploy()
42+
withContext(Dispatchers.Default) {
43+
Rime.deployRime()
44+
}
45+
ToastUtils.showLong(R.string.deploy_finish)
4146
}
4247
COMMAND_SYNC -> async {
43-
sync()
48+
Rime.sync_user_data()
49+
Rime.deployRime()
4450
}
45-
Intent.ACTION_SHUTDOWN -> Rime.destroy()
4651
else -> return
4752
}
4853
}

app/src/main/java/com/osfans/trime/ime/core/Trime.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public static Trime getServiceOrNull() {
235235
new Handler(
236236
msg -> {
237237
if (!((Trime) msg.obj).isShowInputRequested()) { // 若当前没有输入面板,则后台同步。防止面板关闭后5秒内再次打开
238-
ShortcutUtils.INSTANCE.syncInBackground((Trime) msg.obj);
238+
ShortcutUtils.INSTANCE.syncInBackground();
239239
((Trime) msg.obj).loadConfig();
240240
}
241241
return false;
@@ -597,11 +597,6 @@ public void onDestroy() {
597597
inputFeedbackManager = null;
598598
inputRootBinding = null;
599599

600-
if (getPrefs().getOther().getDestroyOnQuit()) {
601-
Rime.destroy();
602-
getImeConfig().destroy();
603-
System.exit(0); // 清理內存
604-
}
605600
for (EventListener listener : eventListeners) {
606601
if (listener != null) listener.onDestroy();
607602
}

app/src/main/java/com/osfans/trime/ui/fragments/ProfileFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ class ProfileFragment : PaddingPreferenceFragment() {
5757
lifecycleScope.withLoadingDialog(context, 200L, R.string.sync_progress) {
5858
withContext(Dispatchers.IO) {
5959
Rime.sync_user_data()
60-
Rime.destroy()
61-
Rime.get(true)
60+
Rime.deployRime()
6261
}
6362
}
6463
true

app/src/main/java/com/osfans/trime/ui/main/Pickers.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ suspend fun Context.schemaPicker(
9090
checkedItems[index]
9191
}.map { it.toString() }.toTypedArray()
9292
)
93-
Rime.destroy()
94-
Rime.get(true)
93+
Rime.deployRime()
9594
}
9695
}.create()
9796
}

app/src/main/java/com/osfans/trime/ui/main/PrefMainActivity.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,7 @@ class PrefMainActivity : AppCompatActivity() {
121121
Runtime.getRuntime().exec(arrayOf("logcat", "-c"))
122122
}
123123
withContext(Dispatchers.Default) {
124-
Rime.destroy()
125-
Rime.get(true)
124+
Rime.deployRime()
126125
}
127126
briefResultLogDialog("rime.trime", "W", 1)
128127
}

app/src/main/java/com/osfans/trime/util/RimeUtils.kt

Lines changed: 0 additions & 35 deletions
This file was deleted.

app/src/main/java/com/osfans/trime/util/ShortcutUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@ object ShortcutUtils {
120120
return clipboardManager.primaryClip?.getItemAt(0)?.coerceToText(context)
121121
}
122122

123-
fun syncInBackground(context: Context) {
123+
fun syncInBackground() {
124124
val prefs = AppPrefs.defaultInstance()
125125
prefs.profile.lastBackgroundSync = Date().time.toString()
126-
prefs.profile.lastSyncStatus = Rime.syncUserData(context)
126+
prefs.profile.lastSyncStatus = Rime.syncUserData()
127127
}
128128

129129
fun openCategory(keyCode: Int): Boolean {

app/src/main/jni/librime_jni/jni-utils.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,9 @@ class GlobalRefSingleton {
135135
jfieldID RimeCandidateComment;
136136

137137
jclass RimeCommit;
138-
jfieldID RimeCommitDataSize;
139138
jfieldID RimeCommitText;
140139

141140
jclass RimeContext;
142-
jfieldID RimeContextDataSize;
143141
jfieldID RimeContextComposition;
144142
jfieldID RimeContextMenu;
145143
jfieldID RimeContextCommitTextPreview;
@@ -155,7 +153,6 @@ class GlobalRefSingleton {
155153
jfieldID RimeMenuSelectKeys;
156154

157155
jclass RimeStatus;
158-
jfieldID RimeStatusDataSize;
159156
jfieldID RimeStatusSchemaId;
160157
jfieldID RimeStatusSchemaName;
161158
jfieldID RimeStatusDisable;
@@ -206,11 +203,9 @@ class GlobalRefSingleton {
206203
RimeCandidateComment = env->GetFieldID(RimeCandidate, "comment", "Ljava/lang/String;");
207204

208205
RimeCommit = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("com/osfans/trime/core/Rime$RimeCommit")));
209-
RimeCommitDataSize = env->GetFieldID(RimeCommit, "data_size", "I");
210206
RimeCommitText = env->GetFieldID(RimeCommit, "text", "Ljava/lang/String;");
211207

212208
RimeContext = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("com/osfans/trime/core/Rime$RimeContext")));
213-
RimeContextDataSize = env->GetFieldID(RimeContext, "data_size", "I");
214209
RimeContextComposition = env->GetFieldID(RimeContext, "composition", "Lcom/osfans/trime/core/Rime$RimeComposition;");
215210
RimeContextMenu = env->GetFieldID(RimeContext, "menu", "Lcom/osfans/trime/core/Rime$RimeMenu;");
216211
RimeContextCommitTextPreview = env->GetFieldID(RimeContext, "commit_text_preview", "Ljava/lang/String;");
@@ -226,7 +221,6 @@ class GlobalRefSingleton {
226221
RimeMenuSelectKeys = env->GetFieldID(RimeMenu, "select_keys", "Ljava/lang/String;");
227222

228223
RimeStatus = reinterpret_cast<jclass>(env->NewGlobalRef(env->FindClass("com/osfans/trime/core/Rime$RimeStatus")));
229-
RimeStatusDataSize = env->GetFieldID(RimeStatus, "data_size", "I");
230224
RimeStatusSchemaId = env->GetFieldID(RimeStatus, "schema_id", "Ljava/lang/String;");
231225
RimeStatusSchemaName = env->GetFieldID(RimeStatus, "schema_name", "Ljava/lang/String;");
232226
RimeStatusDisable = env->GetFieldID(RimeStatus, "is_disabled", "Z");

0 commit comments

Comments
 (0)