From d6b10d559f345eab2dd3dd89b07cfc3fd79c59bc Mon Sep 17 00:00:00 2001 From: wangqi Date: Thu, 12 Apr 2018 14:44:06 -0700 Subject: Add RTT transcript to call details. 1. Save RTT transcript when call is destroyed 2. Show RTT transcript link when it's available Bug: 67596257,77717594 Test: manual PiperOrigin-RevId: 192673172 Change-Id: If541ad9137c965166548d2fb449e835b95566727 --- .../android/dialer/rtt/RttTranscriptContract.java | 40 +++++++++ .../dialer/rtt/RttTranscriptDatabaseHelper.java | 56 +++++++++++++ java/com/android/dialer/rtt/RttTranscriptUtil.java | 97 ++++++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 java/com/android/dialer/rtt/RttTranscriptContract.java create mode 100644 java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java create mode 100644 java/com/android/dialer/rtt/RttTranscriptUtil.java (limited to 'java/com/android/dialer/rtt') diff --git a/java/com/android/dialer/rtt/RttTranscriptContract.java b/java/com/android/dialer/rtt/RttTranscriptContract.java new file mode 100644 index 000000000..ddc9c5345 --- /dev/null +++ b/java/com/android/dialer/rtt/RttTranscriptContract.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2018 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.dialer.rtt; + +/** Contract for the RTT transcript database. */ +public final class RttTranscriptContract { + + /** Columns for RTT transcript. */ + static final class RttTranscriptColumn { + + /** + * Unique key that should match {@link android.provider.CallLog.Calls#DATE} of the data row it + * is associated with. + * + *

TYPE: TEXT + */ + static final String TRANSCRIPT_ID = "rtt_transcript_id"; + + /** + * Transcript data, encoded as {@link RttTranscript} proto. + * + *

TYPE: BLOB + */ + static final String TRANSCRIPT_DATA = "transcript_data"; + } +} diff --git a/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java b/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java new file mode 100644 index 000000000..934eedb5d --- /dev/null +++ b/java/com/android/dialer/rtt/RttTranscriptDatabaseHelper.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2018 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.dialer.rtt; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.os.SystemClock; +import com.android.dialer.common.LogUtil; +import com.android.dialer.rtt.RttTranscriptContract.RttTranscriptColumn; + +/** Database helper class for RTT transcript. */ +final class RttTranscriptDatabaseHelper extends SQLiteOpenHelper { + + static final String TABLE = "rtt_transcript"; + + private static final String CREATE_TABLE_SQL = + "create table if not exists " + + TABLE + + " (" + + (RttTranscriptColumn.TRANSCRIPT_ID + " integer primary key, ") + + (RttTranscriptColumn.TRANSCRIPT_DATA + " blob not null") + + ");"; + + RttTranscriptDatabaseHelper(Context context) { + super(context, "rtt_transcript.db", null, 1); + } + + @Override + public void onCreate(SQLiteDatabase db) { + LogUtil.enterBlock("RttTranscriptDatabaseHelper.onCreate"); + long startTime = SystemClock.elapsedRealtime(); + db.execSQL(CREATE_TABLE_SQL); + LogUtil.i( + "RttTranscriptDatabaseHelper.onCreate", + "took: %dms", + SystemClock.elapsedRealtime() - startTime); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} +} diff --git a/java/com/android/dialer/rtt/RttTranscriptUtil.java b/java/com/android/dialer/rtt/RttTranscriptUtil.java new file mode 100644 index 000000000..e55d2ea55 --- /dev/null +++ b/java/com/android/dialer/rtt/RttTranscriptUtil.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2018 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.dialer.rtt; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.support.annotation.WorkerThread; +import com.android.dialer.common.Assert; +import com.android.dialer.rtt.RttTranscriptContract.RttTranscriptColumn; +import com.google.protobuf.InvalidProtocolBufferException; + +/** Util class to save and load RTT transcript. */ +public final class RttTranscriptUtil { + + private final RttTranscriptDatabaseHelper databaseHelper; + + public RttTranscriptUtil(Context context) { + databaseHelper = new RttTranscriptDatabaseHelper(context); + } + + /** @return true if there is RTT transcript available. */ + @WorkerThread + public boolean checkRttTranscriptAvailability(String transcriptId) { + Assert.isWorkerThread(); + try (Cursor cursor = + databaseHelper + .getReadableDatabase() + .query( + RttTranscriptDatabaseHelper.TABLE, + new String[] {RttTranscriptColumn.TRANSCRIPT_ID}, + RttTranscriptColumn.TRANSCRIPT_ID + " = ?", + new String[] {transcriptId}, + null, + null, + null)) { + if (cursor != null && cursor.moveToFirst()) { + return true; + } else { + return false; + } + } + } + + @WorkerThread + public RttTranscript getRttTranscript(String transcriptId) { + Assert.isWorkerThread(); + try (Cursor cursor = + databaseHelper + .getReadableDatabase() + .query( + RttTranscriptDatabaseHelper.TABLE, + new String[] {RttTranscriptColumn.TRANSCRIPT_DATA}, + RttTranscriptColumn.TRANSCRIPT_ID + " = ?", + new String[] {transcriptId}, + null, + null, + null)) { + if (cursor != null && cursor.moveToFirst()) { + try { + return RttTranscript.parseFrom(cursor.getBlob(0)); + } catch (InvalidProtocolBufferException e) { + throw new RuntimeException("Parse failed for RTT transcript", e); + } + } else { + return null; + } + } + } + + @WorkerThread + public void saveRttTranscript(RttTranscript rttTranscript) { + Assert.isWorkerThread(); + ContentValues value = new ContentValues(); + value.put(RttTranscriptColumn.TRANSCRIPT_ID, rttTranscript.getId()); + value.put(RttTranscriptColumn.TRANSCRIPT_DATA, rttTranscript.toByteArray()); + long id = + databaseHelper.getWritableDatabase().insert(RttTranscriptDatabaseHelper.TABLE, null, value); + if (id < 0) { + throw new RuntimeException("Failed to save RTT transcript"); + } + } +} -- cgit v1.2.3