CallStyle now supports contextual actions (e.g. smart replies)

* This required that call style also has a collapsed state which has no actions.  Removing actions from the collapsed state resolves a bunch of bugs that were being introduced.  There's just too much of SystemUI that assumes collapsed notifications don't have actions to fix this right now.
* To make the collapsed state match stylistically, I also had to remove the progress bar from that state for vertical space reasons.

Bug: 179178086
Test: atest NotificationTemplateTests
Test: visual inspection ; expand/collapse
Change-Id: I6bc865d5fca8459ffaa6031d220d8bfa08545d89
This commit is contained in:
Jeff DeCew
2021-03-08 16:22:52 -05:00
parent 1f8c257d6b
commit 12fa627bfb
6 changed files with 150 additions and 59 deletions

View File

@@ -6583,10 +6583,6 @@ public class Notification implements Parcelable
return R.layout.notification_template_material_conversation;
}
private int getCallLayoutResource() {
return R.layout.notification_template_material_call;
}
private int getActionLayoutResource() {
return R.layout.notification_material_action;
}
@@ -9329,7 +9325,7 @@ public class Notification implements Parcelable
*/
@Override
public RemoteViews makeContentView(boolean increasedHeight) {
return makeCallLayout();
return makeCallLayout(StandardTemplateParams.VIEW_TYPE_NORMAL);
}
/**
@@ -9337,14 +9333,14 @@ public class Notification implements Parcelable
*/
@Override
public RemoteViews makeHeadsUpContentView(boolean increasedHeight) {
return makeCallLayout();
return makeCallLayout(StandardTemplateParams.VIEW_TYPE_HEADS_UP);
}
/**
* @hide
*/
public RemoteViews makeBigContentView() {
return makeCallLayout();
return makeCallLayout(StandardTemplateParams.VIEW_TYPE_BIG);
}
@NonNull
@@ -9443,7 +9439,7 @@ public class Notification implements Parcelable
return resultActions;
}
private RemoteViews makeCallLayout() {
private RemoteViews makeCallLayout(int viewType) {
Bundle extras = mBuilder.mN.extras;
CharSequence text = mBuilder.processLegacyText(extras.getCharSequence(EXTRA_TEXT));
if (text == null) {
@@ -9452,15 +9448,21 @@ public class Notification implements Parcelable
// Bind standard template
StandardTemplateParams p = mBuilder.mParams.reset()
.viewType(StandardTemplateParams.VIEW_TYPE_BIG)
.viewType(viewType)
.callStyleActions(true)
.allowTextWithProgress(true)
.hideLargeIcon(true)
.text(text)
.summaryText(mBuilder.processLegacyText(mVerificationText));
mBuilder.mActions = getActionsListWithSystemActions();
RemoteViews contentView = mBuilder.applyStandardTemplateWithActions(
mBuilder.getCallLayoutResource(), p, null /* result */);
final RemoteViews contentView;
if (p.mViewType != StandardTemplateParams.VIEW_TYPE_NORMAL) {
contentView = mBuilder.applyStandardTemplateWithActions(
R.layout.notification_template_material_big_call, p, null /* result */);
} else {
contentView = mBuilder.applyStandardTemplate(
R.layout.notification_template_material_call, p, null /* result */);
}
// Bind some extra conversation-specific header fields.
mBuilder.setTextViewColorPrimary(contentView, R.id.conversation_text, p);

View File

@@ -27,7 +27,7 @@
android:id="@+id/notification_action_list_margin_target"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/notification_action_list_height"
android:layout_marginBottom="@dimen/notification_content_margin"
android:orientation="vertical"
>

View File

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2021 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
-->
<com.android.internal.widget.CallLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status_bar_latest_event_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:tag="call"
android:theme="@style/Theme.DeviceDefault.Notification"
>
<!-- CallLayout shares visual appearance with ConversationLayout, so shares layouts -->
<include layout="@layout/notification_template_conversation_icon_container" />
<LinearLayout
android:id="@+id/notification_action_list_margin_target"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/notification_content_margin"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
>
<LinearLayout
android:id="@+id/notification_main_column"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="@dimen/conversation_content_start"
android:orientation="vertical"
android:minHeight="68dp"
>
<include
layout="@layout/notification_template_conversation_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include layout="@layout/notification_template_text_multiline" />
<include
android:layout_width="match_parent"
android:layout_height="@dimen/notification_progress_bar_height"
android:layout_marginTop="@dimen/notification_progress_margin_top"
layout="@layout/notification_template_progress"
/>
</LinearLayout>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="@dimen/notification_content_margin_end"
>
<include
layout="@layout/notification_expand_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
</LinearLayout>
<ViewStub
android:layout="@layout/notification_material_reply_text"
android:id="@+id/notification_material_reply_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<include
layout="@layout/notification_template_smart_reply_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/notification_content_margin_start"
android:layout_marginEnd="@dimen/notification_content_margin_end"
android:layout_marginTop="@dimen/notification_content_margin"
/>
<include layout="@layout/notification_material_action_list" />
</LinearLayout>
</com.android.internal.widget.CallLayout>

View File

@@ -31,7 +31,7 @@
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginTop="@dimen/notification_content_margin_top"
android:layout_marginBottom="@dimen/notification_action_list_height"
android:layout_marginBottom="@dimen/notification_content_margin"
android:clipToPadding="false"
android:orientation="vertical"
>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2021 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +18,6 @@
android:id="@+id/status_bar_latest_event_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:clipChildren="false"
android:tag="call"
android:theme="@style/Theme.DeviceDefault.Notification"
@@ -29,63 +27,46 @@
<include layout="@layout/notification_template_conversation_icon_container" />
<LinearLayout
android:id="@+id/notification_action_list_margin_target"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/notification_action_list_height"
android:orientation="vertical"
android:layout_height="80dp"
android:orientation="horizontal"
>
<LinearLayout
android:id="@+id/notification_main_column"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="top"
android:orientation="horizontal"
android:layout_marginStart="@dimen/conversation_content_start"
android:orientation="vertical"
android:minHeight="68dp"
>
<LinearLayout
android:id="@+id/notification_main_column"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="@dimen/conversation_content_start"
android:orientation="vertical"
android:minHeight="68dp"
>
<include
layout="@layout/notification_template_conversation_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<include layout="@layout/notification_template_text" />
<include
android:layout_width="match_parent"
android:layout_height="@dimen/notification_progress_bar_height"
android:layout_marginTop="@dimen/notification_progress_margin_top"
layout="@layout/notification_template_progress"
/>
</LinearLayout>
<FrameLayout
<include
layout="@layout/notification_template_conversation_header"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="@dimen/notification_content_margin_end"
>
android:layout_height="wrap_content"
/>
<include layout="@layout/notification_expand_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
<include layout="@layout/notification_template_text" />
</LinearLayout>
<include layout="@layout/notification_material_action_list" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:minWidth="@dimen/notification_content_margin_end"
>
<include
layout="@layout/notification_expand_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
</FrameLayout>
</LinearLayout>

View File

@@ -3116,6 +3116,7 @@
<!-- Notifications: CallStyle -->
<java-symbol type="layout" name="notification_template_material_call" />
<java-symbol type="layout" name="notification_template_material_big_call" />
<java-symbol type="string" name="call_notification_answer_action" />
<java-symbol type="string" name="call_notification_decline_action" />
<java-symbol type="string" name="call_notification_hang_up_action" />