diff options
Diffstat (limited to 'java/com/android/dialer/rtt/RttTranscriptUtil.java')
-rw-r--r-- | java/com/android/dialer/rtt/RttTranscriptUtil.java | 70 |
1 files changed, 50 insertions, 20 deletions
diff --git a/java/com/android/dialer/rtt/RttTranscriptUtil.java b/java/com/android/dialer/rtt/RttTranscriptUtil.java index 19b46b01a..967a1232e 100644 --- a/java/com/android/dialer/rtt/RttTranscriptUtil.java +++ b/java/com/android/dialer/rtt/RttTranscriptUtil.java @@ -21,50 +21,65 @@ import android.content.Context; import android.database.Cursor; import android.support.annotation.WorkerThread; import com.android.dialer.common.Assert; +import com.android.dialer.common.concurrent.DialerExecutorComponent; +import com.android.dialer.common.database.Selection; import com.android.dialer.rtt.RttTranscriptContract.RttTranscriptColumn; +import com.google.common.collect.ImmutableSet; +import com.google.common.util.concurrent.ListenableFuture; 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.getApplicationContext()); - } - - @Override - protected void finalize() throws Throwable { - databaseHelper.close(); - super.finalize(); + public static ListenableFuture<ImmutableSet<String>> getAvailableRttTranscriptIds( + Context context, ImmutableSet<String> transcriptIds) { + return DialerExecutorComponent.get(context) + .backgroundExecutor() + .submit(() -> checkRttTranscriptAvailability(context, transcriptIds)); } - /** @return true if there is RTT transcript available. */ @WorkerThread - public boolean checkRttTranscriptAvailability(String transcriptId) { + private static ImmutableSet<String> checkRttTranscriptAvailability( + Context context, ImmutableSet<String> transcriptIds) { Assert.isWorkerThread(); + RttTranscriptDatabaseHelper databaseHelper = new RttTranscriptDatabaseHelper(context); + ImmutableSet.Builder<String> builder = ImmutableSet.builder(); + Selection selection = + Selection.builder() + .and(Selection.column(RttTranscriptColumn.TRANSCRIPT_ID).in(transcriptIds)) + .build(); + try (Cursor cursor = databaseHelper .getReadableDatabase() .query( RttTranscriptDatabaseHelper.TABLE, new String[] {RttTranscriptColumn.TRANSCRIPT_ID}, - RttTranscriptColumn.TRANSCRIPT_ID + " = ?", - new String[] {transcriptId}, + selection.getSelection(), + selection.getSelectionArgs(), null, null, null)) { - if (cursor != null && cursor.moveToFirst()) { - return true; - } else { - return false; + if (cursor != null) { + while (cursor.moveToNext()) { + builder.add(cursor.getString(0)); + } } } + databaseHelper.close(); + return builder.build(); + } + + static ListenableFuture<RttTranscript> loadRttTranscript(Context context, String transcriptId) { + return DialerExecutorComponent.get(context) + .lightweightExecutor() + .submit(() -> getRttTranscript(context, transcriptId)); } @WorkerThread - public RttTranscript getRttTranscript(String transcriptId) { + private static RttTranscript getRttTranscript(Context context, String transcriptId) { Assert.isWorkerThread(); + RttTranscriptDatabaseHelper databaseHelper = new RttTranscriptDatabaseHelper(context); try (Cursor cursor = databaseHelper .getReadableDatabase() @@ -85,17 +100,32 @@ public final class RttTranscriptUtil { } else { return null; } + } finally { + databaseHelper.close(); } } + public static ListenableFuture<Void> saveRttTranscript( + Context context, RttTranscript rttTranscript) { + return DialerExecutorComponent.get(context) + .backgroundExecutor() + .submit( + () -> { + save(context, rttTranscript); + return null; + }); + } + @WorkerThread - public void saveRttTranscript(RttTranscript rttTranscript) { + private static void save(Context context, RttTranscript rttTranscript) { Assert.isWorkerThread(); + RttTranscriptDatabaseHelper databaseHelper = new RttTranscriptDatabaseHelper(context); 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); + databaseHelper.close(); if (id < 0) { throw new RuntimeException("Failed to save RTT transcript"); } |