diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-02-10 03:14:38 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-02-10 03:14:38 +0000 |
commit | bb6a02d26f2a6f8deb2807e26be05f2df6bc066b (patch) | |
tree | 4c0272b2e20a9d9bd5f90d22fa902888a1352df3 | |
parent | 02f601bbb9b0cd00d530e88a0b8c7ff6d810ff0d (diff) | |
parent | 33e19a9ce152a2123ab5e2ce39bc140ff92bfa3c (diff) |
Merge changes I43cc987c,I99ef5ccf,Icae34dd6,I161b5127,I4740c0f4, ...
* changes:
Update title of after call spam dialog.
Used VectorDrawable for Blocked Numbers
Finish AudioRouteSelectorActivity when all calls disconnect.
Add LookupUri to PeopApiPhoneLookupInfo
Implemented NUI menu items.
Implemented GoogleMainSearchController to customize menu to GoogleDialer.
Show reject hint text for all incoming calls
16 files changed, 113 insertions, 52 deletions
diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java index 20d379c48..c6d92057d 100644 --- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java +++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java @@ -65,6 +65,9 @@ public class GlidePhotoManagerImpl implements GlidePhotoManager { } private GlideRequest<Drawable> buildRequest(GlideRequests requestManager, PhotoInfo photoInfo) { + // Warning: Glide ignores extra attributes on BitmapDrawable such as tint and draw the bitmap + // directly so be sure not to set tint in the XML of any drawable referenced below. + // The spam status takes precedence over whether the number is blocked. if (photoInfo.isSpam()) { return requestManager.load(R.drawable.ic_report_red_48dp); diff --git a/java/com/android/dialer/glidephotomanager/impl/res/drawable-xxxhdpi/ic_block_black_48dp.png b/java/com/android/dialer/glidephotomanager/impl/res/drawable-xxxhdpi/ic_block_black_48dp.png Binary files differdeleted file mode 100644 index 1168bd8d5..000000000 --- a/java/com/android/dialer/glidephotomanager/impl/res/drawable-xxxhdpi/ic_block_black_48dp.png +++ /dev/null diff --git a/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml b/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml index 42cfa99bd..9d2fb368b 100644 --- a/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml +++ b/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml @@ -12,6 +12,13 @@ See the License for the specific language governing permissions and limitations under the License. --> -<bitmap xmlns:android="http://schemas.android.com/apk/res/android" - android:src="@drawable/ic_block_black_48dp" - android:tint="#757575" />
\ No newline at end of file +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path android:pathData="M0 0h24v24H0z"/> + <path + android:fillColor="#757575" + android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/> +</vector>
\ No newline at end of file diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java index 0296ec911..f1486ba96 100644 --- a/java/com/android/dialer/main/impl/MainSearchController.java +++ b/java/com/android/dialer/main/impl/MainSearchController.java @@ -25,10 +25,13 @@ import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; +import android.view.MenuItem; import android.view.View; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.widget.Toast; +import com.android.contacts.common.dialog.ClearFrequentsDialog; +import com.android.dialer.app.settings.DialerSettingsActivity; import com.android.dialer.callintent.CallInitiationType; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; @@ -36,6 +39,8 @@ import com.android.dialer.constants.ActivityRequestCodes; import com.android.dialer.dialpadview.DialpadFragment; import com.android.dialer.dialpadview.DialpadFragment.DialpadListener; import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener; +import com.android.dialer.logging.Logger; +import com.android.dialer.logging.ScreenEvent; import com.android.dialer.main.impl.bottomnav.BottomNavBar; import com.android.dialer.main.impl.toolbar.MainToolbar; import com.android.dialer.main.impl.toolbar.SearchBarListener; @@ -58,7 +63,7 @@ import java.util.ArrayList; * * @see #onBackPressed() */ -final class MainSearchController implements SearchBarListener { +public class MainSearchController implements SearchBarListener { private static final String KEY_IS_FAB_HIDDEN = "is_fab_hidden"; private static final String KEY_CURRENT_TAB = "current_tab"; @@ -74,7 +79,7 @@ final class MainSearchController implements SearchBarListener { private final FloatingActionButton fab; private final MainToolbar toolbar; - MainSearchController( + public MainSearchController( MainActivity mainActivity, BottomNavBar bottomNav, FloatingActionButton fab, @@ -324,6 +329,20 @@ final class MainSearchController implements SearchBarListener { } } + @Override + public boolean onMenuItemClicked(MenuItem menuItem) { + if (menuItem.getItemId() == R.id.settings) { + mainActivity.startActivity(new Intent(mainActivity, DialerSettingsActivity.class)); + Logger.get(mainActivity).logScreenView(ScreenEvent.Type.SETTINGS, mainActivity); + return true; + } else if (menuItem.getItemId() == R.id.clear_frequents) { + ClearFrequentsDialog.show(mainActivity.getFragmentManager()); + Logger.get(mainActivity).logScreenView(ScreenEvent.Type.CLEAR_FREQUENTS, mainActivity); + return true; + } + return false; + } + public void onVoiceResults(int resultCode, Intent data) { if (resultCode == AppCompatActivity.RESULT_OK) { ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); @@ -338,12 +357,6 @@ final class MainSearchController implements SearchBarListener { } } - @Override - public void openSettings() {} - - @Override - public void sendFeedback() {} - public void onSaveInstanceState(Bundle bundle) { bundle.putBoolean(KEY_IS_FAB_HIDDEN, !fab.isShown()); bundle.putInt(KEY_CURRENT_TAB, bottomNav.getSelectedTab()); diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java index a27bdd23a..c46e61bd0 100644 --- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java +++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java @@ -188,7 +188,7 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen mainActivity, mainActivity.getContentResolver(), bottomNav, toolbar); bottomNav.addOnTabSelectedListener(callLogFragmentListener); - searchController = new MainSearchController(mainActivity, bottomNav, fab, toolbar); + searchController = getNewMainSearchController(bottomNav, fab, toolbar); toolbar.setSearchBarListener(searchController); onDialpadQueryChangedListener = new MainOnDialpadQueryChangedListener(searchController); @@ -355,6 +355,11 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen } } + public MainSearchController getNewMainSearchController( + BottomNavBar bottomNavBar, FloatingActionButton fab, MainToolbar mainToolbar) { + return new MainSearchController(mainActivity, bottomNavBar, fab, mainToolbar); + } + /** @see OnContactSelectedListener */ private static final class MainOnContactSelectedListener implements OnContactSelectedListener { diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java index 1d7f7ce20..604422978 100644 --- a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java +++ b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java @@ -36,6 +36,7 @@ public final class MainToolbar extends Toolbar implements OnMenuItemClickListene private SearchBarView searchBar; private SearchBarListener listener; + private MainToolbarMenu overflowMenu; private boolean isSlideUp; public MainToolbar(Context context, AttributeSet attrs) { @@ -46,7 +47,7 @@ public final class MainToolbar extends Toolbar implements OnMenuItemClickListene protected void onFinishInflate() { super.onFinishInflate(); ImageButton optionsMenuButton = findViewById(R.id.main_options_menu_button); - MainToolbarMenu overflowMenu = new MainToolbarMenu(getContext(), optionsMenuButton); + overflowMenu = new MainToolbarMenu(getContext(), optionsMenuButton); overflowMenu.inflate(R.menu.main_menu); overflowMenu.setOnMenuItemClickListener(this); optionsMenuButton.setOnClickListener(v -> overflowMenu.show()); @@ -57,12 +58,7 @@ public final class MainToolbar extends Toolbar implements OnMenuItemClickListene @Override public boolean onMenuItemClick(MenuItem menuItem) { - if (menuItem.getItemId() == R.id.settings) { - listener.openSettings(); - } else if (menuItem.getItemId() == R.id.feedback) { - listener.sendFeedback(); - } - return false; + return listener.onMenuItemClicked(menuItem); } public void setSearchBarListener(SearchBarListener listener) { @@ -129,4 +125,8 @@ public final class MainToolbar extends Toolbar implements OnMenuItemClickListene public void showKeyboard() { searchBar.showKeyboard(); } + + public MainToolbarMenu getOverflowMenu() { + return overflowMenu; + } } diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java b/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java index f4dfeef23..3c6e3611d 100644 --- a/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java +++ b/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java @@ -22,18 +22,15 @@ import android.view.Gravity; import android.view.View; /** Popup menu accessible from the search bar */ -final class MainToolbarMenu extends PopupMenu { +public 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 + super(context, anchor, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0); } @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/SearchBarListener.java b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java index 2e31997e6..a074b5131 100644 --- a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java +++ b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java @@ -16,6 +16,8 @@ package com.android.dialer.main.impl.toolbar; +import android.view.MenuItem; + /** Useful callback for {@link SearchBarView} listeners. */ public interface SearchBarListener { @@ -31,11 +33,8 @@ public interface SearchBarListener { /** Called when the voice search button is clicked. */ void onVoiceButtonClicked(VoiceSearchResultCallback voiceSearchResultCallback); - /** Called when the settings option is selected from the search menu. */ - void openSettings(); - - /** Called when send feedback is selected from the search menu. */ - void sendFeedback(); + /** Called when a toolbar menu item is clicked. */ + boolean onMenuItemClicked(MenuItem menuItem); /** Interface for returning voice results to the search bar. */ interface VoiceSearchResultCallback { diff --git a/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml b/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml index 5b09fca8c..01309ddc4 100644 --- a/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml +++ b/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml @@ -22,7 +22,7 @@ app:showAsAction="collapseActionView"/> <item - android:id="@+id/feedback" - android:title="@string/main_send_feedback" + android:id="@+id/clear_frequents" + android:title="@string/main_menu_clear_frequents" app:showAsAction="collapseActionView"/> </menu>
\ No newline at end of file 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 index 6af235b81..66ccfb452 100644 --- a/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml +++ b/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml @@ -37,8 +37,8 @@ <!-- 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> + <!-- The menu item to clear frequents [CHAR LIMIT=30] --> + <string name="main_menu_clear_frequents">Clear frequents</string> <!-- Remove button that shows up when contact is long-pressed. [CHAR LIMIT=NONE] --> <string name="main_remove_contact">Remove</string> diff --git a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java index 874bdbc5b..ce4030d70 100644 --- a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java +++ b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java @@ -159,6 +159,7 @@ public final class PhoneLookupInfoConsolidator { case NameSource.CP2_REMOTE: return Assert.isNotNull(firstCp2RemoteContact).getLookupUri(); case NameSource.PEOPLE_API: + return Assert.isNotNull(phoneLookupInfo.getPeopleApiInfo().getLookupUri()); case NameSource.NONE: return ""; default: diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto index 57a61ac50..e9cb9f8ad 100644 --- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto +++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto @@ -117,6 +117,11 @@ message PhoneLookupInfo { // The type of the lookup result, for example, a saved contact or a nearby // business. optional InfoType info_type = 6; + + // A URI that contains encoded JSON about the number so contacts can + // populate the quick contact activity with name and numbers. This does not + // point to any real contact entry anywhere. + optional string lookup_uri = 7; } optional PeopleApiInfo people_api_info = 3; diff --git a/java/com/android/incallui/AudioRouteSelectorActivity.java b/java/com/android/incallui/AudioRouteSelectorActivity.java index a6fcc9c7d..7728cd5dc 100644 --- a/java/com/android/incallui/AudioRouteSelectorActivity.java +++ b/java/com/android/incallui/AudioRouteSelectorActivity.java @@ -17,6 +17,7 @@ package com.android.incallui; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; import android.telecom.CallAudioState; @@ -26,24 +27,21 @@ import com.android.incallui.audiomode.AudioModeProvider; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment; import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter; import com.android.incallui.call.CallList; +import com.android.incallui.call.CallList.Listener; import com.android.incallui.call.DialerCall; import com.android.incallui.call.TelecomAdapter; /** Simple activity that just shows the audio route selector fragment */ public class AudioRouteSelectorActivity extends FragmentActivity - implements AudioRouteSelectorPresenter { - - public static final String SHOULD_LOG_BUBBLE_V2_IMPRESSION_EXTRA = "shouldLogBubbleV2Impression"; - - private boolean shouldLogBubbleV2Impression; + implements AudioRouteSelectorPresenter, Listener { @Override protected void onCreate(@Nullable Bundle bundle) { super.onCreate(bundle); - shouldLogBubbleV2Impression = - getIntent().getBooleanExtra(SHOULD_LOG_BUBBLE_V2_IMPRESSION_EXTRA, false); AudioRouteSelectorDialogFragment.newInstance(AudioModeProvider.getInstance().getAudioState()) .show(getSupportFragmentManager(), AudioRouteSelectorDialogFragment.TAG); + + CallList.getInstance().addListener(this); } @Override @@ -51,10 +49,6 @@ public class AudioRouteSelectorActivity extends FragmentActivity TelecomAdapter.getInstance().setAudioRoute(audioRoute); finish(); - if (!shouldLogBubbleV2Impression) { - return; - } - // Log the select action with audio route and call DialerImpression.Type impressionType = null; if ((audioRoute & CallAudioState.ROUTE_WIRED_OR_EARPIECE) != 0) { @@ -68,10 +62,7 @@ public class AudioRouteSelectorActivity extends FragmentActivity return; } - DialerCall call = CallList.getInstance().getOutgoingCall(); - if (call == null) { - call = CallList.getInstance().getActiveOrBackgroundCall(); - } + DialerCall call = getCall(); if (call != null) { Logger.get(this) .logCallImpression(impressionType, call.getUniqueCallId(), call.getTimeAddedMs()); @@ -102,4 +93,46 @@ public class AudioRouteSelectorActivity extends FragmentActivity finish(); } } + + @Override + protected void onDestroy() { + CallList.getInstance().removeListener(this); + super.onDestroy(); + } + + private DialerCall getCall() { + DialerCall dialerCall = CallList.getInstance().getOutgoingCall(); + if (dialerCall == null) { + dialerCall = CallList.getInstance().getActiveOrBackgroundCall(); + } + return dialerCall; + } + + @Override + public void onDisconnect(DialerCall call) { + if (getCall() == null) { + finish(); + } + } + + @Override + public void onIncomingCall(DialerCall call) {} + + @Override + public void onUpgradeToVideo(DialerCall call) {} + + @Override + public void onSessionModificationStateChange(DialerCall call) {} + + @Override + public void onCallListChange(CallList callList) {} + + @Override + public void onWiFiToLteHandover(DialerCall call) {} + + @Override + public void onHandoverToWifiFailed(DialerCall call) {} + + @Override + public void onInternationalCallOnWifi(@NonNull DialerCall call) {} } diff --git a/java/com/android/incallui/NewReturnToCallActionReceiver.java b/java/com/android/incallui/NewReturnToCallActionReceiver.java index 23debe204..527a79b51 100644 --- a/java/com/android/incallui/NewReturnToCallActionReceiver.java +++ b/java/com/android/incallui/NewReturnToCallActionReceiver.java @@ -110,7 +110,6 @@ public class NewReturnToCallActionReceiver extends BroadcastReceiver { public void showAudioRouteSelector(Context context) { Intent intent = new Intent(context, AudioRouteSelectorActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - intent.putExtra(AudioRouteSelectorActivity.SHOULD_LOG_BUBBLE_V2_IMPRESSION_EXTRA, true); context.startActivity(intent); } diff --git a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java index ebbaef8e5..fe6bbbca5 100644 --- a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java +++ b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java @@ -370,11 +370,10 @@ public class FlingUpDownMethod extends AnswerMethod implements OnProgressChanged public void setHintText(@Nullable CharSequence hintText) { if (hintText == null) { swipeToAnswerText.setText(R.string.call_incoming_swipe_to_answer); - swipeToRejectText.setText(R.string.call_incoming_swipe_to_reject); } else { swipeToAnswerText.setText(hintText); - swipeToRejectText.setText(null); } + swipeToRejectText.setText(R.string.call_incoming_swipe_to_reject); } @Override diff --git a/java/com/android/incallui/spam/res/values/strings.xml b/java/com/android/incallui/spam/res/values/strings.xml index 3248c69ac..e893f2afc 100644 --- a/java/com/android/incallui/spam/res/values/strings.xml +++ b/java/com/android/incallui/spam/res/values/strings.xml @@ -20,7 +20,7 @@ <!-- Title for the notification to the user after a call from an unknown number ends. [CHAR LIMIT=100] --> <string name="non_spam_notification_title">Know <xliff:g id="number">%1$s</xliff:g>?</string> <!-- Title for the notification to the user after a call from an spammer ends. [CHAR LIMIT=100] --> - <string name="spam_notification_title">Was <xliff:g id="number">%1$s</xliff:g> a spam call?</string> + <string name="spam_notification_title">Was <xliff:g id="number">%1$s</xliff:g> a spam caller?</string> <!-- Text for the toast shown after the user presses block/report spam. [CHAR LIMIT=100] --> <string name="spam_notification_block_report_toast_text"><xliff:g id="number">%1$s</xliff:g> blocked and call was reported as spam.</string> <!-- Text for the toast shown after the user presses not spam. [CHAR LIMIT=100] --> |