mirror of https://github.com/M66B/FairEmail.git
Limit conversation action duration
This commit is contained in:
parent
8c241598ca
commit
beaa70cd05
|
@ -24,12 +24,14 @@ import android.content.Context;
|
|||
import android.content.SharedPreferences;
|
||||
import android.icu.text.Transliterator;
|
||||
import android.os.Build;
|
||||
import android.os.SystemClock;
|
||||
import android.text.TextUtils;
|
||||
import android.view.textclassifier.ConversationAction;
|
||||
import android.view.textclassifier.ConversationActions;
|
||||
import android.view.textclassifier.TextClassificationManager;
|
||||
import android.view.textclassifier.TextClassifier;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import java.time.ZoneId;
|
||||
|
@ -42,12 +44,21 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
public class TextHelper {
|
||||
private static final int MAX_DETECT_SAMPLE_SIZE = 8192;
|
||||
private static final float MIN_DETECT_PROBABILITY = 0.80f;
|
||||
private static final String TRANSLITERATOR = "Any-Latin; Latin-ASCII";
|
||||
private static final int MAX_CONVERSATION_SAMPLE_SIZE = 8192;
|
||||
private static final long MAX_CONVERSATION_DURATION = 5000; // milliseconds
|
||||
|
||||
private static final ExecutorService executor =
|
||||
Helper.getBackgroundExecutor(0, "text");
|
||||
|
||||
static {
|
||||
System.loadLibrary("fairemail");
|
||||
|
@ -169,7 +180,31 @@ public class TextHelper {
|
|||
.setHints(hints)
|
||||
.build();
|
||||
|
||||
return tcm.getTextClassifier().suggestConversationActions(request);
|
||||
Future<ConversationActions> future = executor.submit(new Callable<ConversationActions>() {
|
||||
@Override
|
||||
@RequiresApi(api = Build.VERSION_CODES.Q)
|
||||
public ConversationActions call() throws Exception {
|
||||
long start = SystemClock.elapsedRealtime();
|
||||
try {
|
||||
return tcm.getTextClassifier().suggestConversationActions(request);
|
||||
} finally {
|
||||
long elapse = SystemClock.elapsedRealtime() - start;
|
||||
Log.i("Conversation actions=" + elapse + " ms");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
return future.get(MAX_CONVERSATION_DURATION, TimeUnit.MILLISECONDS);
|
||||
} catch (TimeoutException ex) {
|
||||
Log.e(ex);
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
prefs.edit().putBoolean("conversation_actions", false);
|
||||
return null;
|
||||
} catch (Throwable ex) {
|
||||
Log.e(ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DetectResult {
|
||||
|
|
Loading…
Reference in New Issue