From 97d0b5e504a52a83e87f7dc7eec571a44b846b33 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Fri, 26 Jan 2018 12:11:26 -0800 Subject: Pressing dial with an empty dialpad now queries the last number in NUI. Bug: 72526019 Test: manual PiperOrigin-RevId: 183425741 Change-Id: Ied1b369d00baefe02db04ade26bee9faac4f829c --- java/com/android/dialer/app/DialtactsActivity.java | 12 ++- .../android/dialer/app/calllog/CallLogAsync.java | 96 ---------------------- .../com/android/dialer/main/impl/MainActivity.java | 10 ++- 3 files changed, 17 insertions(+), 101 deletions(-) delete mode 100644 java/com/android/dialer/app/calllog/CallLogAsync.java (limited to 'java/com/android/dialer') diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java index 7592c6669..4b0384ea5 100644 --- a/java/com/android/dialer/app/DialtactsActivity.java +++ b/java/com/android/dialer/app/DialtactsActivity.java @@ -73,7 +73,6 @@ import com.android.dialer.animation.AnimUtils; import com.android.dialer.animation.AnimationListenerAdapter; import com.android.dialer.app.calllog.CallLogActivity; import com.android.dialer.app.calllog.CallLogAdapter; -import com.android.dialer.app.calllog.CallLogAsync; import com.android.dialer.app.calllog.CallLogFragment; import com.android.dialer.app.calllog.CallLogNotificationsService; import com.android.dialer.app.calllog.IntentProvider; @@ -99,6 +98,7 @@ import com.android.dialer.callintent.CallSpecificAppData; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.UiUtil; +import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.compat.CompatUtils; import com.android.dialer.configprovider.ConfigProviderBindings; @@ -912,9 +912,13 @@ public class DialtactsActivity extends TransactionSafeActivity @Override public void getLastOutgoingCall(LastOutgoingCallCallback callback) { - new CallLogAsync() - .getLastOutgoingCall( - new CallLogAsync.GetLastOutgoingCallArgs(this, callback::lastOutgoingCall)); + DialerExecutorComponent.get(this) + .dialerExecutorFactory() + .createUiTaskBuilder( + getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall) + .onSuccess(output -> callback.lastOutgoingCall(output)) + .build() + .executeParallel(this); } /** Callback from child DialpadFragment when the dialpad is shown. */ diff --git a/java/com/android/dialer/app/calllog/CallLogAsync.java b/java/com/android/dialer/app/calllog/CallLogAsync.java deleted file mode 100644 index 26435f311..000000000 --- a/java/com/android/dialer/app/calllog/CallLogAsync.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2010 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.app.calllog; - -import android.content.Context; -import android.os.AsyncTask; -import android.provider.CallLog.Calls; -import com.android.dialer.common.Assert; - -/** - * Class to access the call log asynchronously to avoid carrying out database operations on the UI - * thread, using an {@link AsyncTask}. - * - *
 Typical usage: ==============
- *
- * // From an activity... String mLastNumber = "";
- *
- * CallLogAsync log = new CallLogAsync();
- *
- * CallLogAsync.GetLastOutgoingCallArgs lastCallArgs = new CallLogAsync.GetLastOutgoingCallArgs(
- * this, new CallLogAsync.OnLastOutgoingCallComplete() { public void lastOutgoingCall(String number)
- * { mLastNumber = number; } }); log.getLastOutgoingCall(lastCallArgs); 
- */ -public class CallLogAsync { - - /** CallLog.getLastOutgoingCall(...) */ - public AsyncTask getLastOutgoingCall(GetLastOutgoingCallArgs args) { - Assert.isMainThread(); - return new GetLastOutgoingCallTask(args.callback).execute(args); - } - - /** Interface to retrieve the last dialed number asynchronously. */ - public interface OnLastOutgoingCallComplete { - - /** @param number The last dialed number or an empty string if none exists yet. */ - void lastOutgoingCall(String number); - } - - /** Parameter object to hold the args to get the last outgoing call from the call log DB. */ - public static class GetLastOutgoingCallArgs { - - public final Context context; - public final OnLastOutgoingCallComplete callback; - - public GetLastOutgoingCallArgs(Context context, OnLastOutgoingCallComplete callback) { - this.context = context; - this.callback = callback; - } - } - - /** AsyncTask to get the last outgoing call from the DB. */ - private class GetLastOutgoingCallTask extends AsyncTask { - - private final OnLastOutgoingCallComplete callback; - - public GetLastOutgoingCallTask(OnLastOutgoingCallComplete callback) { - this.callback = callback; - } - - // Happens on a background thread. We cannot run the callback - // here because only the UI thread can modify the view - // hierarchy (e.g enable/disable the dial button). The - // callback is ran rom the post execute method. - @Override - protected String doInBackground(GetLastOutgoingCallArgs... list) { - String number = ""; - for (GetLastOutgoingCallArgs args : list) { - // May block. Select only the last one. - number = Calls.getLastOutgoingCall(args.context); - } - return number; // passed to the onPostExecute method. - } - - // Happens on the UI thread, it is safe to run the callback - // that may do some work on the views. - @Override - protected void onPostExecute(String number) { - Assert.isMainThread(); - callback.lastOutgoingCall(number); - } - } -} diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java index 242bf2d48..3edf6c6af 100644 --- a/java/com/android/dialer/main/impl/MainActivity.java +++ b/java/com/android/dialer/main/impl/MainActivity.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.provider.CallLog.Calls; import android.provider.ContactsContract.QuickContact; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.FragmentTransaction; @@ -27,6 +28,7 @@ import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import com.android.dialer.calllog.ui.NewCallLogFragment; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.compat.CompatUtils; import com.android.dialer.constants.ActivityRequestCodes; import com.android.dialer.contactsfragment.ContactsFragment; @@ -141,7 +143,13 @@ public final class MainActivity extends AppCompatActivity @Override // DialpadListener public void getLastOutgoingCall(LastOutgoingCallCallback callback) { - // TODO(calderwoodra): migrate CallLogAsync class outside of dialer/app and call it here. + DialerExecutorComponent.get(this) + .dialerExecutorFactory() + .createUiTaskBuilder( + getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall) + .onSuccess(output -> callback.lastOutgoingCall(output)) + .build() + .executeParallel(this); } @Override // DialpadListener -- cgit v1.2.3