diff options
author | 2010-06-16 08:50:40 +0900 | |
---|---|---|
committer | 2010-06-17 05:53:49 +0900 | |
commit | 9512706adfa16d7e56660185c0a2a7f0cb5b0d0e (patch) | |
tree | 53eeed2fa3b44e4606ff7448e320438763ac98ab /java/src | |
parent | b373d460c7f768561587368e6383594ae0c93929 (diff) | |
download | latinime-9512706adfa16d7e56660185c0a2a7f0cb5b0d0e.tar.gz latinime-9512706adfa16d7e56660185c0a2a7f0cb5b0d0e.tar.xz latinime-9512706adfa16d7e56660185c0a2a7f0cb5b0d0e.zip |
Make DropBox.addText AsyncTask in IMELogger
Change-Id: I84d5915a3197a67cda6bec8b0ef3343df2e510be
Diffstat (limited to 'java/src')
3 files changed, 66 insertions, 17 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 18e5b4106..8186154a5 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -373,6 +373,7 @@ public class LatinIME extends InputMethodService mVoiceInput.destroy(); } LatinImeLogger.commit(); + LatinImeLogger.onDestroy(); super.onDestroy(); } diff --git a/java/src/com/android/inputmethod/latin/LatinIMEUtil.java b/java/src/com/android/inputmethod/latin/LatinIMEUtil.java index 962af47db..838b4fe10 100644 --- a/java/src/com/android/inputmethod/latin/LatinIMEUtil.java +++ b/java/src/com/android/inputmethod/latin/LatinIMEUtil.java @@ -16,10 +16,25 @@ package com.android.inputmethod.latin; +import android.os.AsyncTask; import android.text.format.DateUtils; import android.util.Log; public class LatinIMEUtil { + + /** + * Cancel an {@link AsyncTask}. + * + * @param mayInterruptIfRunning <tt>true</tt> if the thread executing this + * task should be interrupted; otherwise, in-progress tasks are allowed + * to complete. + */ + public static void cancelTask(AsyncTask<?, ?, ?> task, boolean mayInterruptIfRunning) { + if (task != null && task.getStatus() != AsyncTask.Status.FINISHED) { + task.cancel(mayInterruptIfRunning); + } + } + public static class GCUtils { private static final String TAG = "GCUtils"; public static final int GC_TRY_COUNT = 2; diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java index 55e859869..1e467d9a6 100644 --- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java +++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; +import android.os.AsyncTask; import android.os.DropBoxManager; import android.preference.PreferenceManager; import android.text.TextUtils; @@ -88,6 +89,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang private Context mContext = null; private DropBoxManager mDropBox = null; + private AddTextToDropBoxTask mAddTextToDropBoxTask; private long mLastTimeActive; private long mLastTimeSend; private long mLastTimeCountEntry; @@ -126,6 +128,29 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang } } + private class AddTextToDropBoxTask extends AsyncTask<Void, Void, Void> { + private final DropBoxManager mDropBox; + private final long mTime; + private final String mData; + public AddTextToDropBoxTask(DropBoxManager db, long time, String data) { + mDropBox = db; + mTime = time; + mData = data; + } + @Override + protected Void doInBackground(Void... params) { + if (sLOGPRINT) { + Log.d(TAG, "Commit log: " + mData); + } + mDropBox.addText(TAG, mData); + return null; + } + @Override + protected void onPostExecute(Void v) { + mLastTimeSend = mTime; + } + } + private void initInternal(Context context) { mContext = context; mDropBox = (DropBoxManager) mContext.getSystemService(Context.DROPBOX_SERVICE); @@ -169,6 +194,10 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang mRingCharBuffer.reset(); } + public void destroy() { + LatinIMEUtil.cancelTask(mAddTextToDropBoxTask, false); + } + /** * Check if the input string is safe as an entry or not. */ @@ -374,26 +403,25 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang } private void commitInternal() { - if (sLOGPRINT) { - Log.d(TAG, "Commit (" + mLogBuffer.size() + ")"); - } - flushPrivacyLogSafely(); - long now = System.currentTimeMillis(); - addCountEntry(now); - addThemeIdEntry(now); - addLanguagesEntry(now); - addSettingsEntry(now); - addVersionNameEntry(now); - addSuggestionCountEntry(now); - String s = LogSerializer.createStringFromEntries(mLogBuffer); - if (!TextUtils.isEmpty(s)) { + // if there is no log entry in mLogBuffer, will not send logs to DropBox. + if (!mLogBuffer.isEmpty() && (mAddTextToDropBoxTask == null + || mAddTextToDropBoxTask.getStatus() == AsyncTask.Status.FINISHED)) { if (sLOGPRINT) { - Log.d(TAG, "Commit log: " + s); + Log.d(TAG, "Commit (" + mLogBuffer.size() + ")"); } - mDropBox.addText(TAG, s); + flushPrivacyLogSafely(); + long now = System.currentTimeMillis(); + addCountEntry(now); + addThemeIdEntry(now); + addLanguagesEntry(now); + addSettingsEntry(now); + addVersionNameEntry(now); + addSuggestionCountEntry(now); + String s = LogSerializer.createStringFromEntries(mLogBuffer); + reset(); + mAddTextToDropBoxTask = (AddTextToDropBoxTask) new AddTextToDropBoxTask( + mDropBox, now, s).execute(); } - reset(); - mLastTimeSend = now; } private void commitInternalAndStopSelf() { @@ -473,6 +501,11 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang } } + public static void onDestroy() { + sLatinImeLogger.commitInternal(); + sLatinImeLogger.destroy(); + } + // TODO: Handle CharSequence instead of String public static void logOnManualSuggestion(String before, String after, int position , List<CharSequence> suggestions) { |