diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-07-16 07:36:54 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-07-16 07:36:54 +0000 |
commit | 4896ac87608bc93b78243c5dd63912499ce9ef05 (patch) | |
tree | 69b531d3abf6cd5c13cd70a0679aba67a0d39a40 | |
parent | ece8175822d0f80656ef9b0252be3a62bb83a1af (diff) | |
parent | a110c3f4e050fa1f994cbe75faf4d1679e582456 (diff) | |
download | android_packages_apps_Dialer-4896ac87608bc93b78243c5dd63912499ce9ef05.tar.gz android_packages_apps_Dialer-4896ac87608bc93b78243c5dd63912499ce9ef05.tar.bz2 android_packages_apps_Dialer-4896ac87608bc93b78243c5dd63912499ce9ef05.zip |
release-request-05263112-375a-4b1f-a657-a14bb2a5c5a3-for-git_oc-mr1-release-4185249 snap-temp-L63000000082739046
Change-Id: Ibe8fb2284880105220bdcd6f0c75450eb4999268
22 files changed, 173 insertions, 62 deletions
diff --git a/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java b/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java index d5e61354a..5d10720b5 100644 --- a/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java +++ b/java/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java @@ -20,6 +20,9 @@ import android.content.AsyncQueryHandler; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import java.util.concurrent.atomic.AtomicInteger; /** * An {@AsyncQueryHandler} that will never return a null cursor. @@ -27,6 +30,8 @@ import android.net.Uri; * <p>Instead, will return a {@link Cursor} with 0 records. */ public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler { + private static final AtomicInteger pendingQueryCount = new AtomicInteger(); + @Nullable private static PendingQueryCountChangedListener pendingQueryCountChangedListener; public NoNullCursorAsyncQueryHandler(ContentResolver cr) { super(cr); @@ -41,6 +46,11 @@ public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler { String selection, String[] selectionArgs, String orderBy) { + pendingQueryCount.getAndIncrement(); + if (pendingQueryCountChangedListener != null) { + pendingQueryCountChangedListener.onPendingQueryCountChanged(); + } + final CookieWithProjection projectionCookie = new CookieWithProjection(cookie, projection); super.startQuery(token, projectionCookie, uri, projection, selection, selectionArgs, orderBy); } @@ -55,10 +65,31 @@ public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler { cursor = new EmptyCursor(projectionCookie.projection); } onNotNullableQueryComplete(token, projectionCookie.originalCookie, cursor); + + pendingQueryCount.getAndDecrement(); + if (pendingQueryCountChangedListener != null) { + pendingQueryCountChangedListener.onPendingQueryCountChanged(); + } } protected abstract void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor); + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static void setPendingQueryCountChangedListener( + @Nullable PendingQueryCountChangedListener listener) { + pendingQueryCountChangedListener = listener; + } + + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public static int getPendingQueryCount() { + return pendingQueryCount.get(); + } + + /** Callback to listen for changes in the number of queries that have not completed. */ + public interface PendingQueryCountChangedListener { + void onPendingQueryCountChanged(); + } + /** Class to add projection to an existing cookie. */ private static class CookieWithProjection { diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java index 4942184a2..41c9d6003 100644 --- a/java/com/android/dialer/app/calllog/CallLogAdapter.java +++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java @@ -967,7 +967,7 @@ public class CallLogAdapter extends GroupingListAdapter } @MainThread - private static CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) { + private CallDetailsEntries createCallDetailsEntries(Cursor cursor, int count) { Assert.isMainThread(); int position = cursor.getPosition(); CallDetailsEntries.Builder entries = CallDetailsEntries.newBuilder(); @@ -980,6 +980,16 @@ public class CallLogAdapter extends GroupingListAdapter .setDate(cursor.getLong(CallLogQuery.DATE)) .setDuration(cursor.getLong(CallLogQuery.DURATION)) .setFeatures(cursor.getInt(CallLogQuery.FEATURES)); + + String phoneAccountComponentName = cursor.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME); + if (getLightbringer().getPhoneAccountComponentName() != null + && getLightbringer() + .getPhoneAccountComponentName() + .flattenToString() + .equals(phoneAccountComponentName)) { + entry.setIsLightbringerCall(true); + } + entries.addEntries(entry.build()); cursor.moveToNext(); } diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index 884d07d50..6b97bd694 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -581,12 +581,16 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder return; } + TextView callTypeOrLocationView = + ((TextView) callButtonView.findViewById(R.id.call_type_or_location_text)); + if (canPlaceCallToNumber) { // Set up the call button but hide it by default (the primary action is to call so it is // redundant). We then set it to be visible when appropriate below. This saves us having to // remember to set it to GONE in multiple places. callButtonView.setTag(IntentProvider.getReturnCallIntentProvider(number)); callButtonView.setVisibility(View.GONE); + callTypeOrLocationView.setVisibility(View.GONE); } if (!TextUtils.isEmpty(voicemailUri) && canPlaceCallToNumber) { @@ -595,13 +599,10 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder TextUtils.expandTemplate( mContext.getString(R.string.call_log_action_call), nameOrNumber == null ? "" : nameOrNumber)); - TextView callTypeOrLocationView = - ((TextView) callButtonView.findViewById(R.id.call_type_or_location_text)); + if (callType == Calls.VOICEMAIL_TYPE && !TextUtils.isEmpty(callTypeOrLocation)) { callTypeOrLocationView.setText(callTypeOrLocation); callTypeOrLocationView.setVisibility(View.VISIBLE); - } else { - callTypeOrLocationView.setVisibility(View.GONE); } callButtonView.setVisibility(View.VISIBLE); } diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml index 504638348..ec9e5a00e 100644 --- a/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml +++ b/java/com/android/dialer/app/res/layout/call_log_list_item_actions.xml @@ -35,8 +35,7 @@ <LinearLayout android:id="@+id/call_action" - style="@style/CallLogActionStyle" - android:paddingTop="@dimen/call_log_actions_top_padding"> + style="@style/CallLogActionStyle"> <ImageView style="@style/CallLogActionIconStyle" diff --git a/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml b/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml index 15562476a..39c2d0d47 100644 --- a/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml +++ b/java/com/android/dialer/callcomposer/res/layout/fragment_message_composer.xml @@ -51,7 +51,6 @@ android:background="@color/call_composer_divider"/> <RelativeLayout - android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> diff --git a/java/com/android/dialer/callcomposer/res/values/dimens.xml b/java/com/android/dialer/callcomposer/res/values/dimens.xml index 083bd0ab5..798c46f8e 100644 --- a/java/com/android/dialer/callcomposer/res/values/dimens.xml +++ b/java/com/android/dialer/callcomposer/res/values/dimens.xml @@ -15,15 +15,15 @@ ~ limitations under the License --> <resources> - <dimen name="call_composer_view_pager_height">306dp</dimen> + <dimen name="call_composer_view_pager_height">292dp</dimen> <!-- Contact bar --> <dimen name="call_composer_contact_photo_border_thickness">2dp</dimen> - <dimen name="call_composer_contact_photo_size">116dp</dimen> - <dimen name="call_composer_contact_container_margin_top">58dp</dimen> - <dimen name="call_composer_contact_container_padding_top">58dp</dimen> - <dimen name="call_composer_contact_container_padding_bottom">18dp</dimen> - <dimen name="call_composer_name_text_size">32sp</dimen> + <dimen name="call_composer_contact_photo_size">112dp</dimen> + <dimen name="call_composer_contact_container_margin_top">56dp</dimen> + <dimen name="call_composer_contact_container_padding_top">56dp</dimen> + <dimen name="call_composer_contact_container_padding_bottom">16dp</dimen> + <dimen name="call_composer_name_text_size">28sp</dimen> <dimen name="call_composer_number_text_size">16sp</dimen> <dimen name="call_composer_contact_container_elevation">2dp</dimen> diff --git a/java/com/android/dialer/callcomposer/res/values/styles.xml b/java/com/android/dialer/callcomposer/res/values/styles.xml index 16e7fb622..a03ee4894 100644 --- a/java/com/android/dialer/callcomposer/res/values/styles.xml +++ b/java/com/android/dialer/callcomposer/res/values/styles.xml @@ -34,7 +34,8 @@ <style name="message_composer_textview"> <item name="android:textSize">@dimen/message_compose_item_text_size</item> <item name="android:textColor">@color/dialer_primary_text_color</item> - <item name="android:padding">@dimen/message_composer_item_padding</item> + <item name="android:paddingStart">@dimen/message_composer_item_padding</item> + <item name="android:paddingEnd">@dimen/message_composer_item_padding</item> <item name="android:background">@drawable/item_background_material_light</item> <item name="android:gravity">center_vertical</item> </style> diff --git a/java/com/android/dialer/calldetails/AndroidManifest.xml b/java/com/android/dialer/calldetails/AndroidManifest.xml index fd887c4b5..9cf656e42 100644 --- a/java/com/android/dialer/calldetails/AndroidManifest.xml +++ b/java/com/android/dialer/calldetails/AndroidManifest.xml @@ -19,13 +19,9 @@ <application android:theme="@style/Theme.AppCompat"> <activity android:label="@string/call_details" + android:exported="false" android:name="com.android.dialer.calldetails.CallDetailsActivity" android:theme="@style/DialerThemeBase.NoActionBar"> - <intent-filter> - <action android:name="android.intent.action.VIEW"/> - <category android:name="android.intent.category.DEFAULT"/> - <data android:mimeType="vnd.android.cursor.item/calls"/> - </intent-filter> </activity> </application> </manifest> diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java index 48e9b6998..66a736c8d 100644 --- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java +++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java @@ -26,6 +26,7 @@ import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry; import com.android.dialer.calllogutils.CallTypeHelper; import com.android.dialer.common.Assert; import com.android.dialer.dialercontact.DialerContact; +import com.android.dialer.lightbringer.LightbringerComponent; import java.util.List; /** Adapter for RecyclerView in {@link CallDetailsActivity}. */ @@ -48,7 +49,9 @@ final class CallDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol this.contact = Assert.isNotNull(contact); this.callDetailsEntries = callDetailsEntries; this.listener = listener; - callTypeHelper = new CallTypeHelper(context.getResources()); + callTypeHelper = + new CallTypeHelper( + context.getResources(), LightbringerComponent.get(context).getLightbringer()); } @Override diff --git a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java index 6ad158e8c..9c592fc5f 100644 --- a/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java +++ b/java/com/android/dialer/calldetails/CallDetailsEntryViewHolder.java @@ -91,6 +91,7 @@ public class CallDetailsEntryViewHolder extends ViewHolder { boolean isPulledCall = (entry.getFeatures() & Calls.FEATURES_PULLED_EXTERNALLY) == Calls.FEATURES_PULLED_EXTERNALLY; + boolean isLightbringerCall = entry.getIsLightbringerCall(); callTime.setTextColor(getColorForCallType(context, callType)); callTypeIcon.clear(); @@ -100,7 +101,8 @@ public class CallDetailsEntryViewHolder extends ViewHolder { callTypeIcon.setShowWifi( MotorolaUtils.shouldShowWifiIconInCallLog(context, entry.getFeatures())); - callTypeText.setText(callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall)); + callTypeText.setText( + callTypeHelper.getCallTypeText(callType, isVideoCall, isPulledCall, isLightbringerCall)); callTime.setText(CallEntryFormatter.formatDate(context, entry.getDate())); if (CallTypeHelper.isMissedCallType(callType)) { callDuration.setVisibility(View.GONE); diff --git a/java/com/android/dialer/calldetails/proto/call_details_entries.proto b/java/com/android/dialer/calldetails/proto/call_details_entries.proto index 18bc931cb..587fd35bd 100644 --- a/java/com/android/dialer/calldetails/proto/call_details_entries.proto +++ b/java/com/android/dialer/calldetails/proto/call_details_entries.proto @@ -18,6 +18,7 @@ message CallDetailsEntries { optional int64 duration = 5; optional int64 data_usage = 6; repeated enrichedcall.historyquery.proto.HistoryResult history_results = 7; + optional bool is_lightbringer_call = 8; } repeated CallDetailsEntry entries = 1; diff --git a/java/com/android/dialer/calllogutils/CallTypeHelper.java b/java/com/android/dialer/calllogutils/CallTypeHelper.java index d3b5b67d7..783f799f3 100644 --- a/java/com/android/dialer/calllogutils/CallTypeHelper.java +++ b/java/com/android/dialer/calllogutils/CallTypeHelper.java @@ -18,6 +18,7 @@ package com.android.dialer.calllogutils; import android.content.res.Resources; import com.android.dialer.compat.AppCompatConstants; +import com.android.dialer.lightbringer.Lightbringer; /** Helper class to perform operations related to call types. */ public class CallTypeHelper { @@ -50,8 +51,12 @@ public class CallTypeHelper { private final CharSequence mBlockedName; /** Name used to identify calls which were answered on another device. */ private final CharSequence mAnsweredElsewhereName; + /** Name used to identify incoming lightbringer calls. */ + private final CharSequence mIncomingLightbringerCall; + /** Name used to identify outgoing lightbringer calls. */ + private final CharSequence mOutgoingLightbringerCall; - public CallTypeHelper(Resources resources) { + public CallTypeHelper(Resources resources, Lightbringer lightbringer) { // Cache these values so that we do not need to look them up each time. mIncomingName = resources.getString(R.string.type_incoming); mIncomingPulledName = resources.getString(R.string.type_incoming_pulled); @@ -67,6 +72,18 @@ public class CallTypeHelper { mRejectedName = resources.getString(R.string.type_rejected); mBlockedName = resources.getString(R.string.type_blocked); mAnsweredElsewhereName = resources.getString(R.string.type_answered_elsewhere); + + if (lightbringer.getIncomingCallTypeText() != -1) { + mIncomingLightbringerCall = resources.getString(lightbringer.getIncomingCallTypeText()); + } else { + mIncomingLightbringerCall = mIncomingVideoName; + } + + if (lightbringer.getOutgoingCallTypeText() != -1) { + mOutgoingLightbringerCall = resources.getString(lightbringer.getOutgoingCallTypeText()); + } else { + mOutgoingLightbringerCall = mOutgoingVideoName; + } } public static boolean isMissedCallType(int callType) { @@ -77,13 +94,17 @@ public class CallTypeHelper { } /** Returns the text used to represent the given call type. */ - public CharSequence getCallTypeText(int callType, boolean isVideoCall, boolean isPulledCall) { + public CharSequence getCallTypeText( + int callType, boolean isVideoCall, boolean isPulledCall, boolean isLightbringerCall) { switch (callType) { case AppCompatConstants.CALLS_INCOMING_TYPE: if (isVideoCall) { if (isPulledCall) { return mIncomingVideoPulledName; } else { + if (isLightbringerCall) { + return mIncomingLightbringerCall; + } return mIncomingVideoName; } } else { @@ -99,6 +120,9 @@ public class CallTypeHelper { if (isPulledCall) { return mOutgoingVideoPulledName; } else { + if (isLightbringerCall) { + return mOutgoingLightbringerCall; + } return mOutgoingVideoName; } } else { diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java index e62771837..41fa8f9c5 100644 --- a/java/com/android/dialer/contactsfragment/ContactsFragment.java +++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java @@ -170,6 +170,10 @@ public class ContactsFragment extends Fragment fastScroller.updateContainerAndScrollBarPosition(recyclerView); int firstVisibleItem = manager.findFirstVisibleItemPosition(); int firstCompletelyVisible = manager.findFirstCompletelyVisibleItemPosition(); + if (firstCompletelyVisible == RecyclerView.NO_POSITION) { + // No items are visible, so there are no headers to update. + return; + } String anchoredHeaderString = adapter.getHeaderString(firstCompletelyVisible); // If the user swipes to the top of the list very quickly, there is some strange behavior diff --git a/java/com/android/dialer/contactsfragment/FastScroller.java b/java/com/android/dialer/contactsfragment/FastScroller.java index 0223c5f1f..2a86a3bb6 100644 --- a/java/com/android/dialer/contactsfragment/FastScroller.java +++ b/java/com/android/dialer/contactsfragment/FastScroller.java @@ -91,6 +91,7 @@ public class FastScroller extends RelativeLayout { int targetPos = getValueInRange(0, itemCount - 1, (int) scrolledPosition); layoutManager.scrollToPositionWithOffset(targetPos, 0); container.setText(adapter.getHeaderString(targetPos)); + adapter.refreshHeaders(); } // Returns a float in range [0, 1] which represents the position of the scroller. diff --git a/java/com/android/dialer/lightbringer/Lightbringer.java b/java/com/android/dialer/lightbringer/Lightbringer.java index 669e571a0..9b8a18061 100644 --- a/java/com/android/dialer/lightbringer/Lightbringer.java +++ b/java/com/android/dialer/lightbringer/Lightbringer.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; import android.telecom.Call; import android.telecom.PhoneAccountHandle; @@ -56,4 +57,12 @@ public interface Lightbringer { @Nullable @MainThread String getPackageName(); + + @StringRes + @MainThread + int getOutgoingCallTypeText(); + + @StringRes + @MainThread + int getIncomingCallTypeText(); } diff --git a/java/com/android/dialer/lightbringer/stub/LightbringerStub.java b/java/com/android/dialer/lightbringer/stub/LightbringerStub.java index 1cb3c1ff0..92230a49e 100644 --- a/java/com/android/dialer/lightbringer/stub/LightbringerStub.java +++ b/java/com/android/dialer/lightbringer/stub/LightbringerStub.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.support.annotation.MainThread; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.StringRes; import android.telecom.Call; import android.telecom.PhoneAccountHandle; import com.android.dialer.common.Assert; @@ -97,4 +98,16 @@ public class LightbringerStub implements Lightbringer { public String getPackageName() { return null; } + + @StringRes + @Override + public int getOutgoingCallTypeText() { + return -1; + } + + @StringRes + @Override + public int getIncomingCallTypeText() { + return -1; + } } diff --git a/java/com/android/dialer/postcall/AndroidManifest.xml b/java/com/android/dialer/postcall/AndroidManifest.xml index 22c77dd93..7e69d3368 100644 --- a/java/com/android/dialer/postcall/AndroidManifest.xml +++ b/java/com/android/dialer/postcall/AndroidManifest.xml @@ -22,7 +22,6 @@ android:name="com.android.dialer.postcall.PostCallActivity" android:exported="false" android:theme="@style/DialerThemeBase.NoActionBar" - android:windowSoftInputMode="adjustResize" - android:screenOrientation="portrait"/> + android:windowSoftInputMode="adjustResize"/> </application> </manifest> diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java index b17a9b66d..6d9ad01a8 100644 --- a/java/com/android/dialer/postcall/PostCall.java +++ b/java/com/android/dialer/postcall/PostCall.java @@ -26,6 +26,7 @@ import android.support.design.widget.Snackbar; import android.telephony.TelephonyManager; import android.view.View; import android.view.View.OnClickListener; +import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.configprovider.ConfigProvider; import com.android.dialer.configprovider.ConfigProviderBindings; @@ -84,12 +85,12 @@ public class PostCall { ? activity.getString(R.string.post_call_add_message) : activity.getString(R.string.post_call_send_message); + String number = Assert.isNotNull(getPhoneNumber(activity)); OnClickListener onClickListener = v -> { Logger.get(activity) .logImpression(DialerImpression.Type.POST_CALL_PROMPT_USER_TO_SEND_MESSAGE_CLICKED); - activity.startActivity( - PostCallActivity.newIntent(activity, getPhoneNumber(activity), isRcsPostCall)); + activity.startActivity(PostCallActivity.newIntent(activity, number, isRcsPostCall)); }; int durationMs = @@ -113,12 +114,13 @@ public class PostCall { "returned from sending a post call message, message sent."); String message = activity.getString(R.string.post_call_message_sent); String addMessage = activity.getString(R.string.view); + String number = Assert.isNotNull(getPhoneNumber(activity)); OnClickListener onClickListener = v -> { Logger.get(activity) .logImpression( DialerImpression.Type.POST_CALL_PROMPT_USER_TO_VIEW_SENT_MESSAGE_CLICKED); - Intent intent = IntentUtil.getSendSmsIntent(getPhoneNumber(activity)); + Intent intent = IntentUtil.getSendSmsIntent(number); DialerUtils.startActivityWithErrorToast(activity, intent); }; diff --git a/java/com/android/dialer/postcall/res/layout/post_call_activity.xml b/java/com/android/dialer/postcall/res/layout/post_call_activity.xml index 256c110b9..c42764e5b 100644 --- a/java/com/android/dialer/postcall/res/layout/post_call_activity.xml +++ b/java/com/android/dialer/postcall/res/layout/post_call_activity.xml @@ -14,20 +14,21 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:background="@color/background_dialer_white" +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"> - - <FrameLayout - android:id="@+id/message_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_alignParentBottom="true" - android:background="@color/background_dialer_white"/> + android:layout_height="match_parent" + android:background="@color/background_dialer_white"> <com.android.dialer.widget.DialerToolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> -</RelativeLayout>
\ No newline at end of file + + <FrameLayout + android:id="@+id/message_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/background_dialer_white"/> +</LinearLayout>
\ No newline at end of file diff --git a/java/com/android/dialer/widget/res/layout/fragment_message.xml b/java/com/android/dialer/widget/res/layout/fragment_message.xml index 5b0bab536..bdb85fa81 100644 --- a/java/com/android/dialer/widget/res/layout/fragment_message.xml +++ b/java/com/android/dialer/widget/res/layout/fragment_message.xml @@ -14,28 +14,36 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> -<LinearLayout +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:gravity="bottom" android:background="@color/background_dialer_white"> - <LinearLayout - android:id="@+id/message_container" - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content"/> + <ScrollView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_above="@+id/divider"> + + <LinearLayout + android:id="@+id/message_container" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + </ScrollView> <View + android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="@dimen/message_divider_height" - android:background="#12000000"/> + android:background="#12000000" + android:layout_above="@+id/edittext_container"/> <RelativeLayout + android:id="@+id/edittext_container" android:layout_width="wrap_content" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:layout_alignParentBottom="true"> <EditText android:id="@+id/custom_message" @@ -50,7 +58,7 @@ android:textCursorDrawable="@drawable/searchedittext_custom_cursor" android:layout_toStartOf="@+id/count_and_send_container" android:inputType="textShortMessage|textCapSentences" - android:imeOptions="actionSend"/> + android:imeOptions="flagNoExtractUi|actionSend"/> <LinearLayout android:id="@+id/count_and_send_container" @@ -80,4 +88,4 @@ android:textColor="@color/dialer_edit_text_hint_color"/> </LinearLayout> </RelativeLayout> -</LinearLayout>
\ No newline at end of file +</RelativeLayout>
\ No newline at end of file diff --git a/java/com/android/incallui/CallButtonPresenter.java b/java/com/android/incallui/CallButtonPresenter.java index e36d9cf9e..dbb6a1c18 100644 --- a/java/com/android/incallui/CallButtonPresenter.java +++ b/java/com/android/incallui/CallButtonPresenter.java @@ -365,7 +365,7 @@ public class CallButtonPresenter } private void updateUi(InCallState state, DialerCall call) { - LogUtil.v("CallButtonPresenter", "updating call UI for call: ", call); + LogUtil.v("CallButtonPresenter", "updating call UI for call: %s", call); if (mInCallButtonUi == null) { return; diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java index 88e0dbb5e..2e15264a5 100644 --- a/java/com/android/incallui/call/DialerCall.java +++ b/java/com/android/incallui/call/DialerCall.java @@ -152,6 +152,7 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa // Times when a second call is received but AnswerAndRelease button is not shown // since it's not supported. private int secondCallWithoutAnswerAndReleasedButtonTimes = 0; + private VideoTech videoTech; public static String getNumberFromHandle(Uri handle) { return handle == null ? "" : handle.getSchemeSpecificPart(); @@ -194,14 +195,15 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa @Override public void onDetailsChanged(Call call, Call.Details details) { - LogUtil.v("TelecomCallCallback.onStateChanged", " call=" + call + " details=" + details); + LogUtil.v( + "TelecomCallCallback.onDetailsChanged", " call=" + call + " details=" + details); update(); } @Override public void onCannedTextResponsesLoaded(Call call, List<String> cannedTextResponses) { LogUtil.v( - "TelecomCallCallback.onStateChanged", + "TelecomCallCallback.onCannedTextResponsesLoaded", "call=" + call + " cannedTextResponses=" + cannedTextResponses); for (CannedTextResponsesLoadedListener listener : mCannedTextResponsesLoadedListeners) { listener.onCannedTextResponsesLoaded(DialerCall.this); @@ -211,7 +213,7 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa @Override public void onPostDialWait(Call call, String remainingPostDialSequence) { LogUtil.v( - "TelecomCallCallback.onStateChanged", + "TelecomCallCallback.onPostDialWait", "call=" + call + " remainingPostDialSequence=" + remainingPostDialSequence); update(); } @@ -219,20 +221,20 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa @Override public void onVideoCallChanged(Call call, VideoCall videoCall) { LogUtil.v( - "TelecomCallCallback.onStateChanged", "call=" + call + " videoCall=" + videoCall); + "TelecomCallCallback.onVideoCallChanged", "call=" + call + " videoCall=" + videoCall); update(); } @Override public void onCallDestroyed(Call call) { - LogUtil.v("TelecomCallCallback.onStateChanged", "call=" + call); + LogUtil.v("TelecomCallCallback.onCallDestroyed", "call=" + call); unregisterCallback(); } @Override public void onConferenceableCallsChanged(Call call, List<Call> conferenceableCalls) { LogUtil.v( - "DialerCall.onConferenceableCallsChanged", + "TelecomCallCallback.onConferenceableCallsChanged", "call %s, conferenceable calls: %d", call, conferenceableCalls.size()); @@ -242,7 +244,7 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa @Override public void onConnectionEvent(android.telecom.Call call, String event, Bundle extras) { LogUtil.v( - "DialerCall.onConnectionEvent", + "TelecomCallCallback.onConnectionEvent", "Call: " + call + ", Event: " + event + ", Extras: " + extras); switch (event) { // The Previous attempt to Merge two calls together has failed in Telecom. We must @@ -430,6 +432,8 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa private void update() { Trace.beginSection("Update"); int oldState = getState(); + // Clear any cache here that could potentially change on update. + videoTech = null; // We want to potentially register a video call callback here. updateFromTelecomCall(); if (oldState != getState() && getState() == DialerCall.State.DISCONNECTED) { @@ -441,7 +445,7 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa .unregisterCapabilitiesListener(this); EnrichedCallComponent.get(mContext) .getEnrichedCallManager() - .unregisterCapabilitiesListener(this); + .unregisterStateChangedListener(this); } else { for (DialerCallListener listener : mListeners) { listener.onDialerCallUpdate(); @@ -1114,7 +1118,10 @@ public class DialerCall implements VideoTechListener, StateChangedListener, Capa } public VideoTech getVideoTech() { - return mVideoTechManager.getVideoTech(); + if (videoTech == null) { + videoTech = mVideoTechManager.getVideoTech(); + } + return videoTech; } public String getCallbackNumber() { |