summaryrefslogtreecommitdiff
path: root/services/voiceinteraction
diff options
context:
space:
mode:
authorNicholas Ambur <nambur@google.com>2020-01-14 00:47:20 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-01-14 00:47:20 +0000
commit9e3ec9af07364c7c4c4aa5602327a3ecbfd14cff (patch)
tree393f13cdf745ec431b947ddae303bf201a32a314 /services/voiceinteraction
parentdcc7e72474394e536ee2823f7bed5388766cdd4d (diff)
parentd3ec82fbc41be35e19ca4e62c9adec3456bdf33c (diff)
Merge "add version entry to soundtrigger model database"
Diffstat (limited to 'services/voiceinteraction')
-rw-r--r--services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerDbHelper.java70
-rw-r--r--services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java3
-rw-r--r--services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java65
-rw-r--r--services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java1
4 files changed, 127 insertions, 12 deletions
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerDbHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerDbHelper.java
index f7cd6a3d2245..99065854445a 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerDbHelper.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerDbHelper.java
@@ -21,12 +21,10 @@ import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
-import android.hardware.soundtrigger.SoundTrigger;
import android.hardware.soundtrigger.SoundTrigger.GenericSoundModel;
-import android.text.TextUtils;
import android.util.Slog;
-import java.util.Locale;
+import java.io.PrintWriter;
import java.util.UUID;
/**
@@ -39,7 +37,7 @@ public class SoundTriggerDbHelper extends SQLiteOpenHelper {
static final boolean DBG = false;
private static final String NAME = "st_sound_model.db";
- private static final int VERSION = 1;
+ private static final int VERSION = 2;
// Sound trigger-based sound models.
public static interface GenericSoundModelContract {
@@ -47,15 +45,16 @@ public class SoundTriggerDbHelper extends SQLiteOpenHelper {
public static final String KEY_MODEL_UUID = "model_uuid";
public static final String KEY_VENDOR_UUID = "vendor_uuid";
public static final String KEY_DATA = "data";
+ public static final String KEY_MODEL_VERSION = "model_version";
}
-
// Table Create Statement for the sound trigger table
private static final String CREATE_TABLE_ST_SOUND_MODEL = "CREATE TABLE "
+ GenericSoundModelContract.TABLE + "("
+ GenericSoundModelContract.KEY_MODEL_UUID + " TEXT PRIMARY KEY,"
+ GenericSoundModelContract.KEY_VENDOR_UUID + " TEXT,"
- + GenericSoundModelContract.KEY_DATA + " BLOB" + " )";
+ + GenericSoundModelContract.KEY_DATA + " BLOB,"
+ + GenericSoundModelContract.KEY_MODEL_VERSION + " INTEGER" + " )";
public SoundTriggerDbHelper(Context context) {
@@ -70,9 +69,13 @@ public class SoundTriggerDbHelper extends SQLiteOpenHelper {
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO: For now, drop older tables and recreate new ones.
- db.execSQL("DROP TABLE IF EXISTS " + GenericSoundModelContract.TABLE);
- onCreate(db);
+ if (oldVersion == 1) {
+ // In version 2, a model version number was added.
+ Slog.d(TAG, "Adding model version column");
+ db.execSQL("ALTER TABLE " + GenericSoundModelContract.TABLE + " ADD COLUMN "
+ + GenericSoundModelContract.KEY_MODEL_VERSION + " INTEGER DEFAULT -1");
+ oldVersion++;
+ }
}
/**
@@ -86,6 +89,7 @@ public class SoundTriggerDbHelper extends SQLiteOpenHelper {
values.put(GenericSoundModelContract.KEY_MODEL_UUID, soundModel.uuid.toString());
values.put(GenericSoundModelContract.KEY_VENDOR_UUID, soundModel.vendorUuid.toString());
values.put(GenericSoundModelContract.KEY_DATA, soundModel.data);
+ values.put(GenericSoundModelContract.KEY_MODEL_VERSION, soundModel.version);
try {
return db.insertWithOnConflict(GenericSoundModelContract.TABLE, null, values,
@@ -113,8 +117,10 @@ public class SoundTriggerDbHelper extends SQLiteOpenHelper {
GenericSoundModelContract.KEY_DATA));
String vendor_uuid = c.getString(
c.getColumnIndex(GenericSoundModelContract.KEY_VENDOR_UUID));
+ int version = c.getInt(
+ c.getColumnIndex(GenericSoundModelContract.KEY_MODEL_VERSION));
return new GenericSoundModel(model_uuid, UUID.fromString(vendor_uuid),
- data);
+ data, version);
} while (c.moveToNext());
}
} finally {
@@ -142,4 +148,48 @@ public class SoundTriggerDbHelper extends SQLiteOpenHelper {
}
}
}
+
+ public void dump(PrintWriter pw) {
+ synchronized(this) {
+ String selectQuery = "SELECT * FROM " + GenericSoundModelContract.TABLE;
+ SQLiteDatabase db = getReadableDatabase();
+ Cursor c = db.rawQuery(selectQuery, null);
+ try {
+ pw.println(" Enrolled GenericSoundModels:");
+ if (c.moveToFirst()) {
+ String[] columnNames = c.getColumnNames();
+ do {
+ for (String name : columnNames) {
+ int colNameIndex = c.getColumnIndex(name);
+ int type = c.getType(colNameIndex);
+ switch (type) {
+ case Cursor.FIELD_TYPE_STRING:
+ pw.printf(" %s: %s\n", name,
+ c.getString(colNameIndex));
+ break;
+ case Cursor.FIELD_TYPE_BLOB:
+ pw.printf(" %s: data blob\n", name);
+ break;
+ case Cursor.FIELD_TYPE_INTEGER:
+ pw.printf(" %s: %d\n", name,
+ c.getInt(colNameIndex));
+ break;
+ case Cursor.FIELD_TYPE_FLOAT:
+ pw.printf(" %s: %f\n", name,
+ c.getFloat(colNameIndex));
+ break;
+ case Cursor.FIELD_TYPE_NULL:
+ pw.printf(" %s: null\n", name);
+ break;
+ }
+ }
+ pw.println();
+ } while (c.moveToNext());
+ }
+ } finally {
+ c.close();
+ db.close();
+ }
+ }
+ }
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index e37755bddcaa..767010ae821a 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -1495,6 +1495,9 @@ public class SoundTriggerService extends SystemService {
// log
sEventLogger.dump(pw);
+ // enrolled models
+ mDbHelper.dump(pw);
+
// stats
mSoundModelStatTracker.dump(pw);
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java
index dd7b5a8752e5..c58b6da64baa 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/DatabaseHelper.java
@@ -27,6 +27,7 @@ import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
import android.text.TextUtils;
import android.util.Slog;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -43,7 +44,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
static final boolean DBG = false;
private static final String NAME = "sound_model.db";
- private static final int VERSION = 6;
+ private static final int VERSION = 7;
public static interface SoundModelContract {
public static final String TABLE = "sound_model";
@@ -56,6 +57,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
public static final String KEY_LOCALE = "locale";
public static final String KEY_HINT_TEXT = "hint_text";
public static final String KEY_USERS = "users";
+ public static final String KEY_MODEL_VERSION = "model_version";
}
// Table Create Statement
@@ -70,6 +72,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
+ SoundModelContract.KEY_LOCALE + " TEXT,"
+ SoundModelContract.KEY_HINT_TEXT + " TEXT,"
+ SoundModelContract.KEY_USERS + " TEXT,"
+ + SoundModelContract.KEY_MODEL_VERSION + " INTEGER,"
+ "PRIMARY KEY (" + SoundModelContract.KEY_KEYPHRASE_ID + ","
+ SoundModelContract.KEY_LOCALE + ","
+ SoundModelContract.KEY_USERS + ")"
@@ -138,6 +141,13 @@ public class DatabaseHelper extends SQLiteOpenHelper {
}
oldVersion++;
}
+ if (oldVersion == 6) {
+ // In version 7, a model version number was added.
+ Slog.d(TAG, "Adding model version column");
+ db.execSQL("ALTER TABLE " + SoundModelContract.TABLE + " ADD COLUMN "
+ + SoundModelContract.KEY_MODEL_VERSION + " INTEGER DEFAULT -1");
+ oldVersion++;
+ }
}
/**
@@ -155,6 +165,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
}
values.put(SoundModelContract.KEY_TYPE, SoundTrigger.SoundModel.TYPE_KEYPHRASE);
values.put(SoundModelContract.KEY_DATA, soundModel.data);
+ values.put(SoundModelContract.KEY_MODEL_VERSION, soundModel.version);
if (soundModel.keyphrases != null && soundModel.keyphrases.length == 1) {
values.put(SoundModelContract.KEY_KEYPHRASE_ID, soundModel.keyphrases[0].id);
@@ -250,6 +261,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
c.getColumnIndex(SoundModelContract.KEY_LOCALE));
String text = c.getString(
c.getColumnIndex(SoundModelContract.KEY_HINT_TEXT));
+ int version = c.getInt(
+ c.getColumnIndex(SoundModelContract.KEY_MODEL_VERSION));
// Only add keyphrases meant for the current user.
if (users == null) {
@@ -282,7 +295,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
vendorUuid = UUID.fromString(vendorUuidString);
}
KeyphraseSoundModel model = new KeyphraseSoundModel(
- UUID.fromString(modelUuid), vendorUuid, data, keyphrases);
+ UUID.fromString(modelUuid), vendorUuid, data, keyphrases, version);
if (DBG) {
Slog.d(TAG, "Found SoundModel for the given keyphrase/locale/user: "
+ model);
@@ -325,6 +338,10 @@ public class DatabaseHelper extends SQLiteOpenHelper {
return users;
}
+ /**
+ * SoundModelRecord is no longer used, and it should only be used on database migration.
+ * This class does not need to be modified when modifying the database scheme.
+ */
private static class SoundModelRecord {
public final String modelUuid;
public final String vendorUuid;
@@ -413,4 +430,48 @@ public class DatabaseHelper extends SQLiteOpenHelper {
return a == b;
}
}
+
+ public void dump(PrintWriter pw) {
+ synchronized(this) {
+ String selectQuery = "SELECT * FROM " + SoundModelContract.TABLE;
+ SQLiteDatabase db = getReadableDatabase();
+ Cursor c = db.rawQuery(selectQuery, null);
+ try {
+ pw.println(" Enrolled KeyphraseSoundModels:");
+ if (c.moveToFirst()) {
+ String[] columnNames = c.getColumnNames();
+ do {
+ for (String name : columnNames) {
+ int colNameIndex = c.getColumnIndex(name);
+ int type = c.getType(colNameIndex);
+ switch (type) {
+ case Cursor.FIELD_TYPE_STRING:
+ pw.printf(" %s: %s\n", name,
+ c.getString(colNameIndex));
+ break;
+ case Cursor.FIELD_TYPE_BLOB:
+ pw.printf(" %s: data blob\n", name);
+ break;
+ case Cursor.FIELD_TYPE_INTEGER:
+ pw.printf(" %s: %d\n", name,
+ c.getInt(colNameIndex));
+ break;
+ case Cursor.FIELD_TYPE_FLOAT:
+ pw.printf(" %s: %f\n", name,
+ c.getFloat(colNameIndex));
+ break;
+ case Cursor.FIELD_TYPE_NULL:
+ pw.printf(" %s: null\n", name);
+ break;
+ }
+ }
+ pw.println();
+ } while (c.moveToNext());
+ }
+ } finally {
+ c.close();
+ db.close();
+ }
+ }
+ }
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 6b95f0fe5350..506c67e12528 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -1347,6 +1347,7 @@ public class VoiceInteractionManagerService extends SystemService {
pw.println(" mCurUserUnlocked: " + mCurUserUnlocked);
pw.println(" mCurUserSupported: " + mCurUserSupported);
dumpSupportedUsers(pw, " ");
+ mDbHelper.dump(pw);
if (mImpl == null) {
pw.println(" (No active implementation)");
return;