diff options
20 files changed, 520 insertions, 58 deletions
diff --git a/assets/quantum/res/drawable/quantum_ic_mic_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_mic_vd_theme_24.xml new file mode 100644 index 000000000..6220e39bd --- /dev/null +++ b/assets/quantum/res/drawable/quantum_ic_mic_vd_theme_24.xml @@ -0,0 +1,25 @@ +<!-- + ~ Copyright (C) 2018 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 + --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0" + android:tint="?attr/colorControlNormal"> + <path + android:fillColor="@android:color/white" + android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/> +</vector> diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java index f8d3a4cd8..5c9411180 100644 --- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java +++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java @@ -694,6 +694,7 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder .getBoolean("enable_call_log_duo_invite_button", false)) { inviteVideoButtonView.setTag(IntentProvider.getDuoInviteIntentProvider(number)); inviteVideoButtonView.setVisibility(View.VISIBLE); + Logger.get(context).logImpression(DialerImpression.Type.DUO_CALL_LOG_INVITE_SHOWN); } } else if (duo.isEnabled(context) && !identifiedSpamCall) { if (!duo.isInstalled(context)) { @@ -701,12 +702,16 @@ public final class CallLogListItemViewHolder extends RecyclerView.ViewHolder .getBoolean("enable_call_log_install_duo_button", false)) { setUpVideoButtonView.setTag(IntentProvider.getInstallDuoIntentProvider()); setUpVideoButtonView.setVisibility(View.VISIBLE); + Logger.get(context) + .logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_INSTALL_SHOWN); } } else { if (ConfigProviderBindings.get(context) .getBoolean("enable_call_log_activate_duo_button", false)) { setUpVideoButtonView.setTag(IntentProvider.getSetUpDuoIntentProvider()); setUpVideoButtonView.setVisibility(View.VISIBLE); + Logger.get(context) + .logImpression(DialerImpression.Type.DUO_CALL_LOG_SET_UP_ACTIVATE_SHOWN); } } } diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java index cdde638ee..508191cde 100644 --- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java +++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java @@ -403,6 +403,7 @@ public final class PhoneLookupDataSource return idsByNumber; } + /** Returned map must have same keys as {@code uniqueDialerPhoneNumbers} */ private ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> queryPhoneLookupHistoryForNumbers( Context appContext, Set<DialerPhoneNumber> uniqueDialerPhoneNumbers) { DialerPhoneNumberUtil dialerPhoneNumberUtil = @@ -431,13 +432,9 @@ public final class PhoneLookupDataSource selection, normalizedNumbers, null)) { - if (cursor == null) { LogUtil.e("PhoneLookupDataSource.queryPhoneLookupHistoryForNumbers", "null cursor"); - return ImmutableMap.of(); - } - - if (cursor.moveToFirst()) { + } else if (cursor.moveToFirst()) { int normalizedNumberColumn = cursor.getColumnIndexOrThrow(PhoneLookupHistory.NORMALIZED_NUMBER); int phoneLookupInfoColumn = diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto index 27135b35e..f839b1399 100644 --- a/java/com/android/dialer/logging/dialer_impression.proto +++ b/java/com/android/dialer/logging/dialer_impression.proto @@ -12,7 +12,7 @@ message DialerImpression { // Event enums to be used for Impression Logging in Dialer. // It's perfectly acceptable for this enum to be large // Values should be from 1000 to 100000. - // Next Tag: 1324 + // Next Tag: 1327 enum Type { UNKNOWN_AOSP_EVENT_TYPE = 1000; @@ -653,5 +653,9 @@ message DialerImpression { // Bubble appears BUBBLE_V2_SHOW = 1323; + + DUO_CALL_LOG_SET_UP_INSTALL_SHOWN = 1324; + DUO_CALL_LOG_SET_UP_ACTIVATE_SHOWN = 1325; + DUO_CALL_LOG_INVITE_SHOWN = 1326; } } diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java index 87bd8dd58..0884c117b 100644 --- a/java/com/android/dialer/main/impl/MainActivity.java +++ b/java/com/android/dialer/main/impl/MainActivity.java @@ -23,12 +23,8 @@ import android.os.Bundle; import android.provider.ContactsContract.QuickContact; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; import android.widget.ImageView; -import android.widget.Toast; import com.android.dialer.calllog.ui.NewCallLogFragment; import com.android.dialer.common.LogUtil; import com.android.dialer.contactsfragment.ContactsFragment; @@ -62,32 +58,10 @@ public final class MainActivity extends AppCompatActivity private void initLayout() { findViewById(R.id.fab).setOnClickListener(this); - + setSupportActionBar(findViewById(R.id.toolbar)); BottomNavBar navBar = findViewById(R.id.bottom_nav_bar); navBar.setOnTabSelectedListener(new MainBottomNavBarBottomNavTabListener()); navBar.selectTab(BottomNavBar.TabIndex.SPEED_DIAL); - - Toolbar toolbar = findViewById(R.id.toolbar); - toolbar.setPopupTheme(android.R.style.Theme_Material_Light); - setSupportActionBar(toolbar); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.main_menu, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - Toast.makeText(this, "Not yet implemented", Toast.LENGTH_SHORT).show(); - if (item.getItemId() == R.id.search) { - // open search - return true; - } else { - // TODO(calderwoodra) handle other menu items - return super.onOptionsItemSelected(item); - } } @Override diff --git a/java/com/android/dialer/main/impl/res/layout/main_activity.xml b/java/com/android/dialer/main/impl/res/layout/main_activity.xml index 969bbe413..31ff19dd3 100644 --- a/java/com/android/dialer/main/impl/res/layout/main_activity.xml +++ b/java/com/android/dialer/main/impl/res/layout/main_activity.xml @@ -21,14 +21,9 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <android.support.v7.widget.Toolbar + <include android:id="@+id/toolbar" - android:layout_height="wrap_content" - android:layout_width="match_parent" - android:minHeight="?attr/actionBarSize" - android:background="@color/dialer_theme_color" - app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" - app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> + layout="@layout/toolbar_layout"/> <FrameLayout android:id="@+id/fragment_container" diff --git a/java/com/android/dialer/main/impl/res/values/strings.xml b/java/com/android/dialer/main/impl/res/values/strings.xml index abf44ddae..ff136e877 100644 --- a/java/com/android/dialer/main/impl/res/values/strings.xml +++ b/java/com/android/dialer/main/impl/res/values/strings.xml @@ -43,9 +43,4 @@ <string name="tab_title_voicemail">Voicemail</string> <!-- Tab text to show users their contacts [CHAR LIMIT=10] --> <string name="tab_title_contacts">Contacts</string> - - <!-- Show users their settings [CHAR LIMIT=20] --> - <string name="settings">Settings</string> - <!-- Send feedback about the app [CHAR LIMIT=20] --> - <string name="main_send_feedback">Send feedback</string> </resources> diff --git a/java/com/android/dialer/main/impl/toolbar/AndroidManifest.xml b/java/com/android/dialer/main/impl/toolbar/AndroidManifest.xml new file mode 100644 index 000000000..a5f93830b --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/AndroidManifest.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2016 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 + --> +<manifest package="com.android.dialer.main.impl.toolbar"/>
\ No newline at end of file diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java new file mode 100644 index 000000000..19c763cf6 --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2018 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.main.impl.toolbar; + +import android.content.Context; +import android.support.v7.widget.PopupMenu.OnMenuItemClickListener; +import android.support.v7.widget.Toolbar; +import android.util.AttributeSet; +import android.view.MenuItem; +import android.widget.ImageButton; +import android.widget.Toast; + +/** Toolbar for {@link com.android.dialer.main.impl.MainActivity}. */ +public final class MainToolbar extends Toolbar implements OnMenuItemClickListener { + + public MainToolbar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + ImageButton optionsMenuButton = findViewById(R.id.main_options_menu_button); + MainToolbarMenu overflowMenu = new MainToolbarMenu(getContext(), optionsMenuButton); + overflowMenu.inflate(R.menu.main_menu); + overflowMenu.setOnMenuItemClickListener(this); + optionsMenuButton.setOnClickListener(v -> overflowMenu.show()); + optionsMenuButton.setOnTouchListener(overflowMenu.getDragToOpenListener()); + + findViewById(R.id.voice_search_button).setOnClickListener(v -> onVoiceIconClicked()); + findViewById(R.id.search_box_collapsed).setOnClickListener(v -> onSearchBarClicked()); + } + + @Override + public boolean onMenuItemClick(MenuItem menuItem) { + Toast.makeText(getContext(), "Not yet implemented", Toast.LENGTH_SHORT).show(); + // TODO(calderwoodra): implement menu item clicks + return false; + } + + private void onVoiceIconClicked() { + // TODO(calderwoodra): take voice input + } + + private void onSearchBarClicked() { + // TODO(calderwoodra): open search UI + } +} diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java b/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java new file mode 100644 index 000000000..f4dfeef23 --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2018 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.main.impl.toolbar; + +import android.content.Context; +import android.support.v7.widget.PopupMenu; +import android.view.Gravity; +import android.view.View; + +/** Popup menu accessible from the search bar */ +final class MainToolbarMenu extends PopupMenu { + + public MainToolbarMenu(Context context, View anchor) { + super(context, anchor, Gravity.TOP); + // TODO(calderwoodra): menu should open from the top, not the bottom + } + + @Override + public void show() { + super.show(); + // TODO(calderwoodra): show/hide clear frequents + // TODO(calderwoodra): only show call history item if we have phone permission + // TODO(calderwoodra): show simulator buttons + } +} diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java new file mode 100644 index 000000000..b3b27efc2 --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 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.main.impl.toolbar; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.widget.FrameLayout; + +/** */ +final class SearchBarView extends FrameLayout { + + public SearchBarView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } +} diff --git a/java/com/android/dialer/main/impl/toolbar/res/drawable/custom_cursor.xml b/java/com/android/dialer/main/impl/toolbar/res/drawable/custom_cursor.xml new file mode 100644 index 000000000..008b0a3cc --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/res/drawable/custom_cursor.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2018 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 + --> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <size android:width="2dp"/> + <solid android:color="@color/dialtacts_theme_color"/> +</shape>
\ No newline at end of file diff --git a/java/com/android/dialer/main/impl/toolbar/res/drawable/rounded_corner.xml b/java/com/android/dialer/main/impl/toolbar/res/drawable/rounded_corner.xml new file mode 100644 index 000000000..58cdabe8b --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/res/drawable/rounded_corner.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2018 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 + --> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/background_dialer_white"/> + <corners android:radius="2dp"/> +</shape> diff --git a/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml b/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml new file mode 100644 index 000000000..f814a766d --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 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. +--> +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/search_box_expanded" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone"> + + <ImageButton + android:id="@+id/search_back_button" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_marginStart="16dp" + android:layout_centerVertical="true" + android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/action_menu_back_from_search" + android:src="@drawable/quantum_ic_arrow_back_vd_theme_24" + android:tint="@color/dialer_theme_color"/> + + <EditText + android:id="@+id/search_view" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_toEndOf="@+id/search_back_button" + android:layout_toStartOf="@+id/search_close_button" + android:layout_centerVertical="true" + android:layout_marginStart="8dp" + android:background="@null" + android:imeOptions="flagNoExtractUi" + android:inputType="textFilter" + android:maxLines="1" + android:textColor="@color/dialer_secondary_text_color" + android:textColorHint="@color/dialer_edit_text_hint_color" + android:textCursorDrawable="@drawable/custom_cursor" + android:textSize="16sp"/> + + <ImageView + android:id="@+id/search_close_button" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:scaleType="center" + android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/description_clear_search" + android:src="@drawable/quantum_ic_close_vd_theme_24" + android:tint="@color/dialer_secondary_text_color"/> +</RelativeLayout>
\ No newline at end of file diff --git a/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml b/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml new file mode 100644 index 000000000..27b37e80f --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 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.dialer.main.impl.toolbar.MainToolbar + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/toolbar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="?attr/actionBarSize" + android:background="@color/dialer_theme_color" + app:contentInsetStart="0dp" + app:contentInsetEnd="0dp" + app:theme="@style/ThemeOverlay.AppCompat.Light"> + + <com.android.dialer.main.impl.toolbar.SearchBarView + android:id="@+id/search_view_container" + android:layout_width="match_parent" + android:layout_height="48dp" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:layout_marginEnd="8dp" + android:background="@drawable/rounded_corner" + android:elevation="4dp" + android:theme="@style/Theme.AppCompat.Light"> + + <RelativeLayout + android:id="@+id/search_box_collapsed" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="?android:selectableItemBackground" + android:gravity="center_vertical"> + + <ImageView + android:id="@+id/search_magnifying_glass" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_marginStart="8dp" + android:layout_centerVertical="true" + android:importantForAccessibility="no" + android:scaleType="center" + android:src="@drawable/quantum_ic_search_vd_theme_24" + android:tint="@color/dialer_secondary_text_color"/> + + <TextView + android:id="@+id/search_box_start_search" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_toEndOf="@+id/search_magnifying_glass" + android:layout_toStartOf="@+id/voice_search_button" + android:layout_marginStart="8dp" + android:fontFamily="sans-serif" + android:gravity="center_vertical" + android:hint="@string/dialer_hint_find_contact" + android:textColorHint="@color/dialer_secondary_text_color" + android:textSize="16dp"/> + + <ImageView + android:id="@+id/voice_search_button" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_toStartOf="@+id/main_options_menu_button" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/description_start_voice_search" + android:scaleType="center" + android:src="@drawable/quantum_ic_mic_vd_theme_24" + android:tint="@color/dialer_secondary_text_color"/> + + <ImageButton + android:id="@+id/main_options_menu_button" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_alignParentEnd="true" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/action_menu_overflow_description" + android:scaleType="center" + android:src="@drawable/quantum_ic_more_vert_vd_theme_24" + android:tint="@color/dialer_secondary_text_color"/> + </RelativeLayout> + + <include layout="@layout/expanded_search_bar"/> + </com.android.dialer.main.impl.toolbar.SearchBarView> +</com.android.dialer.main.impl.toolbar.MainToolbar>
\ No newline at end of file diff --git a/java/com/android/dialer/main/impl/res/menu/main_menu.xml b/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml index 08d711eb1..5b09fca8c 100644 --- a/java/com/android/dialer/main/impl/res/menu/main_menu.xml +++ b/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - ~ Copyright (C) 2017 The Android Open Source Project + ~ Copyright (C) 2018 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. @@ -17,18 +17,6 @@ <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item - android:id="@+id/search" - android:icon="@drawable/quantum_ic_search_white_24" - android:title="@string/search" - android:contentDescription="@string/description_search" - app:showAsAction="always"/> - - <item - android:id="@+id/call_history" - android:title="@string/tab_title_call_history" - app:showAsAction="collapseActionView"/> - - <item android:id="@+id/settings" android:title="@string/settings" app:showAsAction="collapseActionView"/> diff --git a/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml b/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml new file mode 100644 index 000000000..c1d153f1f --- /dev/null +++ b/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2018 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 + --> +<resources> + <!-- Content description for the fake action menu up button as used + inside search. [CHAR LIMIT=NONE] --> + <string name="action_menu_back_from_search">stop searching</string> + + <!-- String describing the icon used to clear the search field --> + <string name="description_clear_search">Clear search</string> + + <!-- Content description for the fake action menu overflow button. + This should be same as the description for the real action menu + overflow button available in ActionBar. + [CHAR LIMIT=NONE] --> + <string msgid="2295659037509008453" name="action_menu_overflow_description">More options</string> + + <!-- String describing the icon used to start a voice search --> + <string name="description_start_voice_search">Start voice search</string> + + <!-- Hint displayed in dialer search box when there is no query that is currently typed. + [CHAR LIMIT=30] --> + <string name="dialer_hint_find_contact">Search contacts</string> + + <!-- Show users their settings [CHAR LIMIT=20] --> + <string name="settings">Settings</string> + <!-- Send feedback about the app [CHAR LIMIT=20] --> + <string name="main_send_feedback">Send feedback</string> +</resources>
\ No newline at end of file diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java index ae25f4dc1..f0d3adc7a 100644 --- a/java/com/android/incallui/InCallPresenter.java +++ b/java/com/android/incallui/InCallPresenter.java @@ -260,6 +260,8 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud private VideoSurfaceTexture localVideoSurfaceTexture; private VideoSurfaceTexture remoteVideoSurfaceTexture; + private MotorolaInCallUiNotifier motorolaInCallUiNotifier; + /** Inaccessible constructor. Must use getRunningInstance() to get this singleton. */ @VisibleForTesting InCallPresenter() {} @@ -382,6 +384,15 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.Aud AudioModeProvider.getInstance().addListener(this); + if (motorolaInCallUiNotifier == null) { + // Add listener to notify Telephony process when the incoming call screen is started or + // finished. This is for hiding USSD dialog because the incoming call screen should have + // higher precedence over this dialog. + motorolaInCallUiNotifier = new MotorolaInCallUiNotifier(context); + addInCallUiListener(motorolaInCallUiNotifier); + addListener(motorolaInCallUiNotifier); + } + LogUtil.d("InCallPresenter.setUp", "Finished InCallPresenter.setUp"); Trace.endSection(); } diff --git a/java/com/android/incallui/MotorolaInCallUiNotifier.java b/java/com/android/incallui/MotorolaInCallUiNotifier.java new file mode 100644 index 000000000..c3c733939 --- /dev/null +++ b/java/com/android/incallui/MotorolaInCallUiNotifier.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * This file is derived in part from code issued under the following license. + * + * 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.incallui; + +import android.content.Context; +import android.content.Intent; +import android.support.annotation.VisibleForTesting; +import com.android.dialer.common.LogUtil; +import com.android.incallui.InCallPresenter.InCallState; +import com.android.incallui.InCallPresenter.InCallStateListener; +import com.android.incallui.InCallPresenter.InCallUiListener; +import com.android.incallui.call.CallList; + +/** + * Responsible for broadcasting the Intent INCOMING_CALL_VISIBILITY_CHANGED so other processes could + * know when the incoming call activity is started or finished. + */ +public class MotorolaInCallUiNotifier implements InCallUiListener, InCallStateListener { + + @VisibleForTesting static final String EXTRA_VISIBLE_KEY = "visible"; + + @VisibleForTesting + static final String ACTION_INCOMING_CALL_VISIBILITY_CHANGED = + "com.motorola.incallui.action.INCOMING_CALL_VISIBILITY_CHANGED"; + + @VisibleForTesting + static final String PERMISSION_INCOMING_CALL_VISIBILITY_CHANGED = + "com.motorola.incallui.permission.INCOMING_CALL_VISIBILITY_CHANGED"; + + private final Context context; + + MotorolaInCallUiNotifier(Context context) { + this.context = context; + } + + @Override + public void onUiShowing(boolean showing) { + if (showing && CallList.getInstance().getIncomingCall() != null) { + sendInCallUiBroadcast(true); + } + } + + @Override + public void onStateChange(InCallState oldState, InCallState newState, CallList callList) { + if (oldState != null + && oldState.isConnectingOrConnected() + && newState == InCallState.NO_CALLS) { + sendInCallUiBroadcast(false); + } + } + + private void sendInCallUiBroadcast(boolean visible) { + LogUtil.d( + "MotorolaInCallUiNotifier.sendInCallUiBroadcast", + "Send InCallUi Broadcast, visible: " + visible); + Intent intent = new Intent(); + intent.putExtra(EXTRA_VISIBLE_KEY, visible); + intent.setAction(ACTION_INCOMING_CALL_VISIBILITY_CHANGED); + context.sendBroadcast(intent, PERMISSION_INCOMING_CALL_VISIBILITY_CHANGED); + } +} diff --git a/packages.mk b/packages.mk index d01b3f15a..d06b02878 100644 --- a/packages.mk +++ b/packages.mk @@ -36,6 +36,7 @@ LOCAL_AAPT_FLAGS := \ com.android.dialer.lettertile \ com.android.dialer.location \ com.android.dialer.main.impl \ + com.android.dialer.main.impl.toolbar \ com.android.dialer.notification \ com.android.dialer.oem \ com.android.dialer.phonelookup.database \ |