summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangqi <wangqi@google.com>2018-04-19 11:44:38 -0700
committerCopybara-Service <copybara-piper@google.com>2018-04-19 12:24:45 -0700
commit455f0efd3c2c8ee682c5781fd4f13738f30d034e (patch)
tree6b2804eabb57f62b3cd4f9e34f8ee4a8f17cf7a3
parent168eecd46d139f52084bff66570f1b79cece0b9f (diff)
Change RttTransciptUtil methods to return ListenableFuture.
Bug: 70177426 Test: RttTranscriptUtilTest PiperOrigin-RevId: 193549902 Change-Id: Icb10e44edf32ef7913783628b38861465d0f6c93
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsActivityCommon.java39
-rw-r--r--java/com/android/dialer/rtt/RttTranscriptActivity.java9
-rw-r--r--java/com/android/dialer/rtt/RttTranscriptUtil.java70
-rw-r--r--java/com/android/incallui/call/DialerCall.java16
4 files changed, 68 insertions, 66 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
index dec1230bd..8f850ae25 100644
--- a/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
+++ b/java/com/android/dialer/calldetails/CallDetailsActivityCommon.java
@@ -30,7 +30,6 @@ import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresPermission;
-import android.support.annotation.WorkerThread;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -65,7 +64,7 @@ import com.android.dialer.precall.PreCall;
import com.android.dialer.rtt.RttTranscriptActivity;
import com.android.dialer.rtt.RttTranscriptUtil;
import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.collect.ImmutableSet;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
@@ -100,7 +99,7 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
private CallDetailsAdapterCommon adapter;
private CallDetailsEntries callDetailsEntries;
- private UiListener<CallDetailsEntries> checkRttTranscriptAvailabilityListener;
+ private UiListener<ImmutableSet<String>> checkRttTranscriptAvailabilityListener;
/**
* Handles the intent that launches {@link OldCallDetailsActivity} or {@link CallDetailsActivity},
@@ -160,40 +159,28 @@ abstract class CallDetailsActivityCommon extends AppCompatActivity {
}
protected void loadRttTranscriptAvailability() {
+ ImmutableSet.Builder<String> builder = ImmutableSet.builder();
+ for (CallDetailsEntry entry : callDetailsEntries.getEntriesList()) {
+ builder.add(entry.getCallMappingId());
+ }
checkRttTranscriptAvailabilityListener.listen(
this,
- checkRttTranscriptAvailability(),
- this::setCallDetailsEntries,
+ RttTranscriptUtil.getAvailableRttTranscriptIds(this, builder.build()),
+ this::updateCallDetailsEntriesWithRttTranscriptAvailability,
throwable -> {
throw new RuntimeException(throwable);
});
}
- private ListenableFuture<CallDetailsEntries> checkRttTranscriptAvailability() {
- return DialerExecutorComponent.get(this)
- .backgroundExecutor()
- .submit(() -> checkRttTranscriptAvailabilityInBackground(callDetailsEntries));
- }
-
- /**
- * Check RTT transcript availability.
- *
- * @param input the original {@link CallDetailsEntries}
- * @return {@link CallDetailsEntries} with updated RTT transcript availability.
- */
- @WorkerThread
- private CallDetailsEntries checkRttTranscriptAvailabilityInBackground(
- @Nullable CallDetailsEntries input) {
- RttTranscriptUtil rttTranscriptUtil = new RttTranscriptUtil(this);
-
+ private void updateCallDetailsEntriesWithRttTranscriptAvailability(
+ ImmutableSet<String> availableTranscripIds) {
CallDetailsEntries.Builder mutableCallDetailsEntries = CallDetailsEntries.newBuilder();
- for (CallDetailsEntry entry : input.getEntriesList()) {
+ for (CallDetailsEntry entry : callDetailsEntries.getEntriesList()) {
CallDetailsEntry.Builder newEntry = CallDetailsEntry.newBuilder().mergeFrom(entry);
- newEntry.setHasRttTranscript(
- rttTranscriptUtil.checkRttTranscriptAvailability(String.valueOf(entry.getDate())));
+ newEntry.setHasRttTranscript(availableTranscripIds.contains(entry.getCallMappingId()));
mutableCallDetailsEntries.addEntries(newEntry.build());
}
- return mutableCallDetailsEntries.build();
+ setCallDetailsEntries(mutableCallDetailsEntries.build());
}
@Override
diff --git a/java/com/android/dialer/rtt/RttTranscriptActivity.java b/java/com/android/dialer/rtt/RttTranscriptActivity.java
index a87852000..18ae20c08 100644
--- a/java/com/android/dialer/rtt/RttTranscriptActivity.java
+++ b/java/com/android/dialer/rtt/RttTranscriptActivity.java
@@ -30,7 +30,6 @@ import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.UiListener;
import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.protos.ProtoParsers;
-import com.google.common.util.concurrent.ListenableFuture;
/** Activity holds RTT transcript. */
public class RttTranscriptActivity extends AppCompatActivity {
@@ -80,7 +79,7 @@ public class RttTranscriptActivity extends AppCompatActivity {
String id = intent.getStringExtra(EXTRA_TRANSCRIPT_ID);
rttTranscriptUiListener.listen(
this,
- getRttTranscript(id),
+ RttTranscriptUtil.loadRttTranscript(this, id),
adapter::setRttTranscript,
throwable -> {
throw new RuntimeException(throwable);
@@ -112,10 +111,4 @@ public class RttTranscriptActivity extends AppCompatActivity {
}
return super.onOptionsItemSelected(item);
}
-
- private ListenableFuture<RttTranscript> getRttTranscript(String id) {
- return DialerExecutorComponent.get(this)
- .backgroundExecutor()
- .submit(() -> new RttTranscriptUtil(this).getRttTranscript(id));
- }
}
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");
}
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 2c1b5e74a..4966110f7 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -58,7 +58,6 @@ import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
-import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
import com.android.dialer.configprovider.ConfigProviderBindings;
import com.android.dialer.duo.DuoComponent;
@@ -91,7 +90,6 @@ import com.android.incallui.videotech.empty.EmptyVideoTech;
import com.android.incallui.videotech.ims.ImsVideoTech;
import com.android.incallui.videotech.utils.VideoUtils;
import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -550,16 +548,10 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa
public void onDestroy() {
LogUtil.enterBlock("DialerCall.onDestroy");
if (rttTranscript != null) {
- RttTranscript rttTranscriptToSave = rttTranscript;
- ListenableFuture<Void> future =
- DialerExecutorComponent.get(context)
- .backgroundExecutor()
- .submit(
- () -> {
- new RttTranscriptUtil(context).saveRttTranscript(rttTranscriptToSave);
- return null;
- });
- Futures.addCallback(future, new DefaultFutureCallback<>(), MoreExecutors.directExecutor());
+ Futures.addCallback(
+ RttTranscriptUtil.saveRttTranscript(context, rttTranscript),
+ new DefaultFutureCallback<>(),
+ MoreExecutors.directExecutor());
// Sets to null so it won't be saved again when called multiple times.
rttTranscript = null;
}