10cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/*
20cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Copyright (C) 2011 The Android Open Source Project
30cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
40cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); you may not
50cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * use this file except in compliance with the License. You may obtain a copy of
60cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License at
70cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
80cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * http://www.apache.org/licenses/LICENSE-2.0
90cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard *
100cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Unless required by applicable law or agreed to in writing, software
110cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
120cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
130cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * License for the specific language governing permissions and limitations under
140cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * the License.
150cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
160cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
170cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardpackage com.android.inputmethod.dictionarypack;
180cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
190cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport android.content.ContentValues;
200cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport android.content.Context;
210cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport android.database.sqlite.SQLiteDatabase;
220cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport android.database.sqlite.SQLiteOpenHelper;
230cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
240cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport java.text.SimpleDateFormat;
250cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardimport java.util.Date;
26f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalardimport java.util.Locale;
270cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
280cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard/**
290cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard * Class to keep long-term log. This is inactive in production, and is only for debug purposes.
300cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard */
310cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalardpublic class PrivateLog {
320cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
330cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public static final boolean DEBUG = DictionaryProvider.DEBUG;
340cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
350cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static final String LOG_DATABASE_NAME = "log";
360cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static final String LOG_TABLE_NAME = "log";
370cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static final int LOG_DATABASE_VERSION = 1;
380cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
390cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static final String COLUMN_DATE = "date";
400cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static final String COLUMN_EVENT = "event";
410cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
420cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static final String LOG_TABLE_CREATE = "CREATE TABLE " + LOG_TABLE_NAME + " ("
430cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            + COLUMN_DATE + " TEXT,"
440cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            + COLUMN_EVENT + " TEXT);";
450cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
465f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka    static final SimpleDateFormat sDateFormat = new SimpleDateFormat(
475f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka            "yyyy/MM/dd HH:mm:ss", Locale.ROOT);
480cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
490cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private static PrivateLog sInstance = new PrivateLog();
50f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalard    private static DebugHelper sDebugHelper = null;
510cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
520cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    private PrivateLog() {
530cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
540cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
550cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    public static synchronized PrivateLog getInstance(final Context context) {
560cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (!DEBUG) return sInstance;
570cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        synchronized(PrivateLog.class) {
58f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalard            if (sDebugHelper == null) {
59f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalard                sDebugHelper = new DebugHelper(context);
600cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            }
610cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            return sInstance;
620cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
630cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
640cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
655f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka    static class DebugHelper extends SQLiteOpenHelper {
660cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
675f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka        DebugHelper(final Context context) {
680cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            super(context, LOG_DATABASE_NAME, null, LOG_DATABASE_VERSION);
690cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
700cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
710cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        @Override
720cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        public void onCreate(SQLiteDatabase db) {
730cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            if (!DEBUG) return;
740cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            db.execSQL(LOG_TABLE_CREATE);
750cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            insert(db, "Created table");
760cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
770cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
780cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        @Override
790cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
800cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            if (!DEBUG) return;
810cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            // Remove all data.
820cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            db.execSQL("DROP TABLE IF EXISTS " + LOG_TABLE_NAME);
830cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            onCreate(db);
840cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            insert(db, "Upgrade finished");
850cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
860cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
875f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka        static void insert(SQLiteDatabase db, String event) {
880cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            if (!DEBUG) return;
890cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            final ContentValues c = new ContentValues(2);
900cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            c.put(COLUMN_DATE, sDateFormat.format(new Date(System.currentTimeMillis())));
910cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            c.put(COLUMN_EVENT, event);
920cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard            db.insert(LOG_TABLE_NAME, null, c);
930cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        }
940cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
950cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
960cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard
97f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalard    public static void log(String event) {
980cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard        if (!DEBUG) return;
99f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalard        final SQLiteDatabase l = sDebugHelper.getWritableDatabase();
100f8014eea341040f8d155e071e4e0c915a7ebd61dJean Chalard        DebugHelper.insert(l, event);
1010cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard    }
1020cc0544a2995c7eb54a830ae54db60af89d4073dJean Chalard}
103