diff options
author | 2013-03-22 04:59:59 +0000 | |
---|---|---|
committer | 2013-03-22 04:59:59 +0000 | |
commit | 74089a0946fa804e13497931a1c15e94a445f6ad (patch) | |
tree | ad575c85d0b3ddc9d40ade0e5b72af0f1e5c964b /java/src/com/android/inputmethod/research/ResearchLogDirectory.java | |
parent | 0849a4b9b7dc4e37993ca59cab1db8b43f0d456c (diff) | |
parent | ba0e497a0c53ae2a64c070544f6a6f0495442343 (diff) | |
download | latinime-74089a0946fa804e13497931a1c15e94a445f6ad.tar.gz latinime-74089a0946fa804e13497931a1c15e94a445f6ad.tar.xz latinime-74089a0946fa804e13497931a1c15e94a445f6ad.zip |
am ba0e497a: Merge commit \'525bbec9eccbf5bd4581c2b9908e46f61c4431ad\' into jb-mr2-dev
* commit 'ba0e497a0c53ae2a64c070544f6a6f0495442343': (126 commits)
am 9da7fa0f: am 559616fb: Prevent keyboard A11y proxy from referencing a null keyboard view.
Support feedback
Import translations. DO NOT MERGE
Import translations. DO NOT MERGE
Import translations. DO NOT MERGE
[FileEncap9] Extract ResearchLogDirectory class
[Lazy2] Pass a runnable to abort
[Lazy1] Switch to blocking log closures
Import translations. DO NOT MERGE
Import translations. DO NOT MERGE
Import translations. DO NOT MERGE
[Lazy4] Remove useless debug code
[FileEncap8] Remove useless "success" variable
[FileEncap7] Extract uploadContents method
[FileEncap6] Extract Uploader class
Import translations. DO NOT MERGE
Import translations. DO NOT MERGE
[FileEncap5] Move conditional logic to caller
[FileEncap4] Simplify logic
[FileEncap3] Extract isUploadingUnconditionally method
...
Diffstat (limited to 'java/src/com/android/inputmethod/research/ResearchLogDirectory.java')
-rw-r--r-- | java/src/com/android/inputmethod/research/ResearchLogDirectory.java | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java b/java/src/com/android/inputmethod/research/ResearchLogDirectory.java new file mode 100644 index 000000000..291dea5d0 --- /dev/null +++ b/java/src/com/android/inputmethod/research/ResearchLogDirectory.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.research; + +import android.content.Context; +import android.util.Log; + +import java.io.File; +import java.io.FileFilter; + +/** + * Manages log files. + * + * This class handles all aspects where and how research log data is stored. This includes + * generating log filenames in the correct place with the correct names, and cleaning up log files + * under this directory. + */ +public class ResearchLogDirectory { + public static final String TAG = ResearchLogDirectory.class.getSimpleName(); + /* package */ static final String LOG_FILENAME_PREFIX = "researchLog"; + private static final String FILENAME_SUFFIX = ".txt"; + private static final String USER_RECORDING_FILENAME_PREFIX = "recording"; + + private static final ReadOnlyLogFileFilter sUploadableLogFileFilter = + new ReadOnlyLogFileFilter(); + + private final File mFilesDir; + + static class ReadOnlyLogFileFilter implements FileFilter { + @Override + public boolean accept(final File pathname) { + return pathname.getName().startsWith(ResearchLogDirectory.LOG_FILENAME_PREFIX) + && !pathname.canWrite(); + } + } + + /** + * Creates a new ResearchLogDirectory, creating the storage directory if it does not exist. + */ + public ResearchLogDirectory(final Context context) { + mFilesDir = getLoggingDirectory(context); + if (mFilesDir == null) { + throw new NullPointerException("No files directory specified"); + } + if (!mFilesDir.exists()) { + mFilesDir.mkdirs(); + } + } + + private File getLoggingDirectory(final Context context) { + // TODO: Switch to using a subdirectory of getFilesDir(). + return context.getFilesDir(); + } + + /** + * Get an array of log files that are ready for uploading. + * + * A file is ready for uploading if it is marked as read-only. + * + * @return the array of uploadable files + */ + public File[] getUploadableLogFiles() { + try { + return mFilesDir.listFiles(sUploadableLogFileFilter); + } catch (final SecurityException e) { + Log.e(TAG, "Could not cleanup log directory, permission denied", e); + return new File[0]; + } + } + + public void cleanupLogFilesOlderThan(final long time) { + try { + for (final File file : mFilesDir.listFiles()) { + final String filename = file.getName(); + if ((filename.startsWith(LOG_FILENAME_PREFIX) + || filename.startsWith(USER_RECORDING_FILENAME_PREFIX)) + && (file.lastModified() < time)) { + file.delete(); + } + } + } catch (final SecurityException e) { + Log.e(TAG, "Could not cleanup log directory, permission denied", e); + } + } + + public File getLogFilePath(final long time) { + return new File(mFilesDir, getUniqueFilename(LOG_FILENAME_PREFIX, time)); + } + + public File getUserRecordingFilePath(final long time) { + return new File(mFilesDir, getUniqueFilename(USER_RECORDING_FILENAME_PREFIX, time)); + } + + private static String getUniqueFilename(final String prefix, final long time) { + return prefix + "-" + time + FILENAME_SUFFIX; + } +} |