summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2018-05-04 19:28:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-05-04 19:28:30 +0000
commit4a0bf0749203eaa4509bedc55efbcc9a191a0b42 (patch)
tree6b417757830b1c4603ba28250c111693cb4d0b7c /java
parentdd18cb13307866ec723992b327d1f6061b326313 (diff)
parent2cc1bfc10ab390d44c2fe7280cae787655ca8fcc (diff)
Merge changes I481fbbc7,I57e48b5d,Ieb52489b,I2763ddd9
* changes: Translation tweaks. Migrated context menu to be a PopupMenu instead. Add column for call mapping id to AnnotatedCallLog database. Don't force open keyboard when RTT is active.
Diffstat (limited to 'java')
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsCursorLoader.java8
-rw-r--r--java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java26
-rw-r--r--java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java11
-rw-r--r--java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java3
-rw-r--r--java/com/android/dialer/calllogutils/res/values/strings.xml8
-rw-r--r--java/com/android/dialer/common/UiUtil.java9
-rw-r--r--java/com/android/dialer/main/impl/toolbar/SearchBarView.java2
-rw-r--r--java/com/android/dialer/speeddial/ContextMenu.java156
-rw-r--r--java/com/android/dialer/speeddial/SpeedDialFragment.java61
-rw-r--r--java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java21
-rw-r--r--java/com/android/dialer/speeddial/res/layout/context_menu_layout.xml93
-rw-r--r--java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml12
-rw-r--r--java/com/android/dialer/speeddial/res/menu/add_favorite_menu.xml24
-rw-r--r--java/com/android/dialer/speeddial/res/menu/starred_contact_context_menu.xml52
-rw-r--r--java/com/android/dialer/theme/res/values/strings.xml2
-rw-r--r--java/com/android/incallui/rtt/impl/RttChatFragment.java2
16 files changed, 221 insertions, 269 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
index 0e6eb76f5..9d55b9fda 100644
--- a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
+++ b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
@@ -42,7 +42,8 @@ public final class CallDetailsCursorLoader extends CursorLoader {
AnnotatedCallLog.TIMESTAMP,
AnnotatedCallLog.DURATION,
AnnotatedCallLog.DATA_USAGE,
- AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME
+ AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME,
+ AnnotatedCallLog.CALL_MAPPING_ID
};
// Indexes for COLUMNS_FOR_CALL_DETAILS
@@ -53,6 +54,7 @@ public final class CallDetailsCursorLoader extends CursorLoader {
private static final int DURATION = 4;
private static final int DATA_USAGE = 5;
private static final int PHONE_ACCOUNT_COMPONENT_NAME = 6;
+ private static final int CALL_MAPPING_ID = 7;
CallDetailsCursorLoader(Context context, CoalescedIds coalescedIds) {
super(
@@ -140,9 +142,7 @@ public final class CallDetailsCursorLoader extends CursorLoader {
.setDate(cursor.getLong(TIMESTAMP))
.setDuration(cursor.getLong(DURATION))
.setDataUsage(cursor.getLong(DATA_USAGE))
-
- .setCallMappingId(String.valueOf(cursor.getLong(TIMESTAMP)));
-
+ .setCallMappingId(cursor.getString(CALL_MAPPING_ID));
String phoneAccountComponentName = cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME);
entry.setIsDuoCall(DuoComponent.get(context).getDuo().isDuoAccount(phoneAccountComponentName));
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index 61f7debf7..32f303fb4 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -45,7 +45,7 @@ public class AnnotatedCallLogDatabaseHelper extends SQLiteOpenHelper {
@ApplicationContext Context appContext,
@AnnotatedCallLogMaxRows int maxRows,
@BackgroundExecutor ListeningExecutorService backgroundExecutor) {
- super(appContext, FILENAME, null, 1);
+ super(appContext, FILENAME, null, 2);
this.appContext = appContext;
this.maxRows = maxRows;
@@ -75,9 +75,24 @@ public class AnnotatedCallLogDatabaseHelper extends SQLiteOpenHelper {
+ (AnnotatedCallLog.NUMBER_ATTRIBUTES + " blob, ")
+ (AnnotatedCallLog.IS_VOICEMAIL_CALL + " integer, ")
+ (AnnotatedCallLog.VOICEMAIL_CALL_TAG + " text, ")
- + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer")
+ + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer, ")
+ + (AnnotatedCallLog.CALL_MAPPING_ID + " text")
+ ");";
+ private static final String ALTER_TABLE_SQL_ADD_CALL_MAPPING_ID_COLUMN =
+ "alter table "
+ + AnnotatedCallLog.TABLE
+ + " add column "
+ + AnnotatedCallLog.CALL_MAPPING_ID
+ + " text;";
+ private static final String UPDATE_CALL_MAPPING_ID_COLUMN =
+ "update "
+ + AnnotatedCallLog.TABLE
+ + " set "
+ + AnnotatedCallLog.CALL_MAPPING_ID
+ + " = "
+ + AnnotatedCallLog.TIMESTAMP;
+
/**
* Deletes all but the first maxRows rows (by timestamp, excluding voicemails) to keep the table a
* manageable size.
@@ -143,7 +158,12 @@ public class AnnotatedCallLogDatabaseHelper extends SQLiteOpenHelper {
}
@Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ if (oldVersion == 1 && newVersion == 2) {
+ db.execSQL(ALTER_TABLE_SQL_ADD_CALL_MAPPING_ID_COLUMN);
+ db.execSQL(UPDATE_CALL_MAPPING_ID_COLUMN);
+ }
+ }
/** Closes the database and deletes it. */
public ListenableFuture<Void> delete() {
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index 5e4e4afd3..ee888d196 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -221,6 +221,17 @@ public class AnnotatedCallLogContract {
* <p>TYPE: TEXT
*/
public static final String VOICEMAIL_URI = "voicemail_uri";
+
+ /**
+ * An unique id to associate this call log row to a {@link android.telecom.Call}.
+ *
+ * <p>For pre-Q device, this is same as {@link TIMESTAMP}.
+ *
+ * <p>For Q+ device, this will be copied from {@link android.provider.CallLog.Calls}.
+ *
+ * <p>Type: TEXT
+ */
+ public static final String CALL_MAPPING_ID = "call_mapping_id";
}
/**
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 588e64c5c..b5067daac 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -370,6 +370,9 @@ public class SystemCallLogDataSource implements CallLogDataSource {
contentValues.put(AnnotatedCallLog.DATA_USAGE, dataUsage);
contentValues.put(AnnotatedCallLog.TRANSCRIPTION, transcription);
contentValues.put(AnnotatedCallLog.VOICEMAIL_URI, voicemailUri);
+
+ contentValues.put(AnnotatedCallLog.CALL_MAPPING_ID, String.valueOf(date));
+
setTranscriptionState(cursor, contentValues);
if (existingAnnotatedCallLogIds.contains(id)) {
diff --git a/java/com/android/dialer/calllogutils/res/values/strings.xml b/java/com/android/dialer/calllogutils/res/values/strings.xml
index 1c1f31446..e476bdd6c 100644
--- a/java/com/android/dialer/calllogutils/res/values/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values/strings.xml
@@ -66,28 +66,28 @@
This translation may require the variables to be rearranged for grammars different than
english. [CHAR LIMIT=NONE] -->
<string name="a11y_call_duration_format">
- <xliff:g id="minutes">%d</xliff:g> <xliff:g id="minutes_translation">%s</xliff:g> <xliff:g id="seconds">%d</xliff:g> <xliff:g id="seconds_translation">%s</xliff:g>
+ <xliff:g id="minutes">%1$d</xliff:g> <xliff:g id="minutes_translation">%2$s</xliff:g> <xliff:g id="seconds">%3$d</xliff:g> <xliff:g id="seconds_translation">%4$s</xliff:g>
</string>
<!-- A string to announce a call duration. For example, in english might say 15 seconds.
This translation may require the variables to be rearranged for grammars different than
english. [CHAR LIMIT=NONE] -->
<string name="a11y_call_duration_short_format">
- <xliff:g id="seconds">%d</xliff:g> <xliff:g id="seconds_translation">%s</xliff:g>
+ <xliff:g id="seconds">%1$d</xliff:g> <xliff:g id="seconds_translation">%2$s</xliff:g>
</string>
<!-- A pattern to define the layout of a call duration string. for example, in english might
say 2m 15s. Translation should only rearrange the inputs. minutes_translation and
seconds_translation should remain in \'quotes\'. [CHAR LIMIT=NONE] -->
<string name="call_duration_format_pattern">
- <xliff:g id="minutes_special_character">%s</xliff:g>\'<xliff:g id="minutes_translation">%s</xliff:g>\' <xliff:g id="seconds_special_character">%s</xliff:g>\'<xliff:g id="seconds_translation">%s</xliff:g>\'
+ <xliff:g id="minutes_special_character">%1$s</xliff:g>\'<xliff:g id="minutes_translation">%2$s</xliff:g>\' <xliff:g id="seconds_special_character">%3$s</xliff:g>\'<xliff:g id="seconds_translation">%4$s</xliff:g>\'
</string>
<!-- A pattern to define the layout of a call duration string. for example, in english might
say 2m 15s. Translation should only rearrange the inputs. seconds_translation should
remain in \'quotes\'. [CHAR LIMIT=NONE] -->
<string name="call_duration_short_format_pattern">
- <xliff:g id="seconds_special_character">%s</xliff:g>\'<xliff:g id="seconds_translation">%s</xliff:g>\'
+ <xliff:g id="seconds_special_character">%1$s</xliff:g>\'<xliff:g id="seconds_translation">%2$s</xliff:g>\'
</string>
<!-- A full string for seconds (time). [CHAR LIMIT=NONE] -->
diff --git a/java/com/android/dialer/common/UiUtil.java b/java/com/android/dialer/common/UiUtil.java
index 4c4ebea11..20c93e190 100644
--- a/java/com/android/dialer/common/UiUtil.java
+++ b/java/com/android/dialer/common/UiUtil.java
@@ -32,7 +32,14 @@ public class UiUtil {
}
/** Opens the android keyboard. */
- public static void openKeyboardFrom(Context context, View view) {
+ public static void showKeyboardFrom(Context context, View view) {
+ InputMethodManager inputMethodManager =
+ (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.showSoftInput(view, 0);
+ }
+
+ /** Force open the android keyboard. */
+ public static void forceOpenKeyboardFrom(Context context, View view) {
InputMethodManager inputMethodManager =
(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(
diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java
index 8ea94299e..60b067379 100644
--- a/java/com/android/dialer/main/impl/toolbar/SearchBarView.java
+++ b/java/com/android/dialer/main/impl/toolbar/SearchBarView.java
@@ -219,7 +219,7 @@ final class SearchBarView extends FrameLayout {
}
public void showKeyboard() {
- UiUtil.openKeyboardFrom(getContext(), searchBox);
+ UiUtil.forceOpenKeyboardFrom(getContext(), searchBox);
}
public void setHint(@StringRes int hint) {
diff --git a/java/com/android/dialer/speeddial/ContextMenu.java b/java/com/android/dialer/speeddial/ContextMenu.java
index 09505ab99..e0a4551db 100644
--- a/java/com/android/dialer/speeddial/ContextMenu.java
+++ b/java/com/android/dialer/speeddial/ContextMenu.java
@@ -17,101 +17,107 @@
package com.android.dialer.speeddial;
import android.content.Context;
-import android.support.annotation.Nullable;
+import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
-import android.util.AttributeSet;
+import android.support.v7.widget.PopupMenu;
+import android.support.v7.widget.PopupMenu.OnMenuItemClickListener;
+import android.text.TextUtils;
+import android.view.Gravity;
+import android.view.MenuItem;
import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
import com.android.dialer.common.Assert;
import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
import com.android.dialer.speeddial.loader.SpeedDialUiItem;
-/** Floating menu which presents contact options available to the contact. */
-public class ContextMenu extends LinearLayout {
-
- private ContextMenuItemListener listener;
-
- private TextView voiceView;
- private TextView videoView;
- private TextView smsView;
-
- private SpeedDialUiItem speedDialUiItem;
- private Channel voiceChannel;
- private Channel videoChannel;
-
- public ContextMenu(Context context, @Nullable AttributeSet attrs) {
- super(context, attrs);
+/** {@link PopupMenu} which presents contact options for starred contacts. */
+public class ContextMenu extends PopupMenu implements OnMenuItemClickListener {
+
+ private final ContextMenuItemListener listener;
+
+ private final SpeedDialUiItem speedDialUiItem;
+ private final Channel voiceChannel;
+ private final Channel videoChannel;
+
+ private boolean visible;
+
+ /**
+ * Creates a new context menu and displays it.
+ *
+ * @see #show()
+ */
+ public static ContextMenu show(
+ Context context,
+ View anchor,
+ ContextMenuItemListener contextMenuListener,
+ SpeedDialUiItem speedDialUiItem) {
+ ContextMenu menu = new ContextMenu(context, anchor, contextMenuListener, speedDialUiItem);
+ menu.show();
+ menu.visible = true;
+ return menu;
}
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- videoView = findViewById(R.id.video_call_container);
- videoView.setOnClickListener(v -> placeVideoCall());
-
- smsView = findViewById(R.id.send_message_container);
- smsView.setOnClickListener(v -> listener.openSmsConversation(voiceChannel.number()));
-
- voiceView = findViewById(R.id.voice_call_container);
- voiceView.setOnClickListener(v -> placeVoiceCall());
-
- findViewById(R.id.remove_container)
- .setOnClickListener(v -> listener.removeFavoriteContact(speedDialUiItem));
- findViewById(R.id.contact_info_container)
- .setOnClickListener(v -> listener.openContactInfo(speedDialUiItem));
+ /**
+ * Hides the context menu.
+ *
+ * @see #dismiss()
+ */
+ public void hide() {
+ dismiss();
+ visible = false;
}
- /** Shows the menu and updates the menu's position w.r.t. the view it's related to. */
- public void showMenu(
- View parentLayout,
- View childLayout,
- SpeedDialUiItem speedDialUiItem,
- ContextMenuItemListener listener) {
- this.speedDialUiItem = speedDialUiItem;
+ private ContextMenu(
+ @NonNull Context context,
+ @NonNull View anchor,
+ ContextMenuItemListener listener,
+ SpeedDialUiItem speedDialUiItem) {
+ super(context, anchor, Gravity.CENTER);
this.listener = listener;
-
- int[] childLocation = new int[2];
- int[] parentLocation = new int[2];
- childLayout.getLocationOnScreen(childLocation);
- parentLayout.getLocationOnScreen(parentLocation);
-
- setX((float) (childLocation[0] + .5 * childLayout.getWidth() - .5 * getWidth()));
- setY(childLocation[1] - parentLocation[1] + childLayout.getHeight());
-
+ this.speedDialUiItem = speedDialUiItem;
voiceChannel = speedDialUiItem.getDefaultVoiceChannel();
videoChannel = speedDialUiItem.getDefaultVideoChannel();
- voiceView.setVisibility(videoChannel == null ? View.GONE : View.VISIBLE);
- videoView.setVisibility(videoChannel == null ? View.GONE : View.VISIBLE);
- smsView.setVisibility(voiceChannel == null ? View.GONE : View.VISIBLE);
-
- // TODO(calderwoodra): a11y
- // TODO(calderwoodra): animate this similar to the bubble menu
- setVisibility(View.VISIBLE);
- }
- /** Returns true if the view was hidden. */
- public void hideMenu() {
- this.speedDialUiItem = null;
- this.listener = null;
- if (getVisibility() == View.VISIBLE) {
- // TODO(calderwoodra): a11y
- // TODO(calderwoodra): animate this similar to the bubble menu
- setVisibility(View.INVISIBLE);
+ setOnMenuItemClickListener(this);
+ getMenuInflater().inflate(R.menu.starred_contact_context_menu, getMenu());
+ getMenu().findItem(R.id.voice_call_container).setVisible(voiceChannel != null);
+ getMenu().findItem(R.id.video_call_container).setVisible(videoChannel != null);
+ getMenu().findItem(R.id.send_message_container).setVisible(voiceChannel != null);
+ if (voiceChannel != null) {
+ String secondaryInfo =
+ TextUtils.isEmpty(voiceChannel.label())
+ ? voiceChannel.number()
+ : context.getString(
+ R.string.call_subject_type_and_number,
+ voiceChannel.label(),
+ voiceChannel.number());
+ getMenu().findItem(R.id.starred_contact_context_menu_title).setTitle(secondaryInfo);
+ getMenu().findItem(R.id.starred_contact_context_menu_title).setVisible(true);
+ } else {
+ getMenu().findItem(R.id.starred_contact_context_menu_title).setVisible(false);
}
}
- private void placeVoiceCall() {
- listener.placeCall(Assert.isNotNull(voiceChannel));
- }
-
- private void placeVideoCall() {
- listener.placeCall(Assert.isNotNull(videoChannel));
+ @Override
+ public boolean onMenuItemClick(MenuItem menuItem) {
+ if (menuItem.getItemId() == R.id.voice_call_container) {
+ listener.placeCall(Assert.isNotNull(voiceChannel));
+ } else if (menuItem.getItemId() == R.id.video_call_container) {
+ listener.placeCall(Assert.isNotNull(videoChannel));
+ } else if (menuItem.getItemId() == R.id.send_message_container) {
+ listener.openSmsConversation(voiceChannel.number());
+ } else if (menuItem.getItemId() == R.id.remove_container) {
+ listener.removeFavoriteContact(speedDialUiItem);
+ } else if (menuItem.getItemId() == R.id.contact_info_container) {
+ listener.openContactInfo(speedDialUiItem);
+ } else {
+ throw Assert.createIllegalStateFailException("Menu option click not handled");
+ }
+ return true;
}
+ @VisibleForTesting(otherwise = VisibleForTesting.NONE)
public boolean isVisible() {
- return getVisibility() == View.VISIBLE;
+ return visible;
}
/** Listener to report user clicks on menu items. */
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index 526db09e3..db4c0245e 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -32,7 +32,6 @@ import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.FrameLayout;
import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.FragmentUtils;
@@ -82,11 +81,9 @@ public class SpeedDialFragment extends Fragment {
private final SpeedDialHeaderListener headerListener = new SpeedDialFragmentHeaderListener();
private final SpeedDialSuggestedListener suggestedListener = new SpeedDialSuggestedListener();
- private ContextMenu contextMenu;
- private FrameLayout contextMenuBackground;
-
private SpeedDialAdapter adapter;
private SupportUiListener<ImmutableList<SpeedDialUiItem>> speedDialLoaderListener;
+ private SpeedDialFavoritesListener favoritesListener;
/**
* We update the UI every time the fragment is resumed. This boolean suppresses that functionality
@@ -109,25 +106,13 @@ public class SpeedDialFragment extends Fragment {
DialerExecutorComponent.get(getContext())
.createUiListener(getChildFragmentManager(), "speed_dial_loader_listener");
- // Setup favorite contact context menu
- contextMenu = rootLayout.findViewById(R.id.favorite_contact_context_menu);
- contextMenuBackground = rootLayout.findViewById(R.id.context_menu_background);
- contextMenuBackground.setOnClickListener(
- v -> {
- contextMenu.hideMenu();
- contextMenuBackground.setVisibility(View.GONE);
- });
-
// Setup our RecyclerView
SpeedDialLayoutManager layoutManager =
new SpeedDialLayoutManager(getContext(), 3 /* spanCount */);
- FavoriteContactsListener favoritesListener =
+ favoritesListener =
new SpeedDialFavoritesListener(
getActivity(),
getChildFragmentManager(),
- rootLayout,
- contextMenu,
- contextMenuBackground,
new SpeedDialContextMenuItemListener(
getActivity(), new UpdateSpeedDialAdapterListener(), speedDialLoaderListener),
layoutManager);
@@ -198,8 +183,7 @@ public class SpeedDialFragment extends Fragment {
@Override
public void onPause() {
super.onPause();
- contextMenu.hideMenu();
- contextMenuBackground.setVisibility(View.GONE);
+ favoritesListener.hideMenu();
Futures.addCallback(
DialerExecutorComponent.get(getContext())
.backgroundExecutor()
@@ -215,15 +199,6 @@ public class SpeedDialFragment extends Fragment {
suggestedListener.onPause();
}
- @Override
- public void onHiddenChanged(boolean hidden) {
- super.onHiddenChanged(hidden);
- if (hidden) {
- contextMenu.hideMenu();
- contextMenuBackground.setVisibility(View.GONE);
- }
- }
-
private class SpeedDialFragmentHeaderListener implements SpeedDialHeaderListener {
@Override
@@ -237,25 +212,18 @@ public class SpeedDialFragment extends Fragment {
private final FragmentActivity activity;
private final FragmentManager childFragmentManager;
- private final View rootLayout;
- private final ContextMenu contextMenu;
- private final View contextMenuBackground;
private final ContextMenuItemListener contextMenuListener;
private final SpeedDialLayoutManager layoutManager;
+ private ContextMenu contextMenu;
+
SpeedDialFavoritesListener(
FragmentActivity activity,
FragmentManager childFragmentManager,
- View rootLayout,
- ContextMenu contextMenu,
- View contextMenuBackground,
ContextMenuItemListener contextMenuListener,
SpeedDialLayoutManager layoutManager) {
this.activity = activity;
this.childFragmentManager = childFragmentManager;
- this.rootLayout = rootLayout;
- this.contextMenu = contextMenu;
- this.contextMenuBackground = contextMenuBackground;
this.contextMenuListener = contextMenuListener;
this.layoutManager = layoutManager;
}
@@ -291,7 +259,7 @@ public class SpeedDialFragment extends Fragment {
@Override
public void showContextMenu(View view, SpeedDialUiItem speedDialUiItem) {
layoutManager.setScrollEnabled(false);
- contextMenu.showMenu(rootLayout, view, speedDialUiItem, contextMenuListener);
+ contextMenu = ContextMenu.show(activity, view, contextMenuListener, speedDialUiItem);
}
@Override
@@ -299,14 +267,15 @@ public class SpeedDialFragment extends Fragment {
layoutManager.setScrollEnabled(true);
if (closeContextMenu) {
- contextMenu.hideMenu();
- } else if (contextMenu.isVisible()) {
- // If we're showing the context menu, show this background surface so that we can intercept
- // touch events to close the menu
- // Note: We call this in onTouchFinished because if we show the background before the user
- // is done, they might try to drag the view and but won't be able to because this view would
- // intercept all of the touch events.
- contextMenuBackground.setVisibility(View.VISIBLE);
+ contextMenu.hide();
+ contextMenu = null;
+ }
+ }
+
+ public void hideMenu() {
+ if (contextMenu != null) {
+ contextMenu.hide();
+ contextMenu = null;
}
}
}
diff --git a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
index 731c8c641..365b88f8c 100644
--- a/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
+++ b/java/com/android/dialer/speeddial/loader/SpeedDialUiItem.java
@@ -234,16 +234,29 @@ public abstract class SpeedDialUiItem {
*/
@Nullable
public Channel getDefaultVoiceChannel() {
- if (defaultChannel() != null && !defaultChannel().isVideoTechnology()) {
- return defaultChannel();
- }
-
if (channels().size() == 1) {
// If there is only a single channel, it must be a voice channel as per our defined
// assumptions (detailed in comments on method channels()).
return channels().get(0);
}
+ if (defaultChannel() == null) {
+ return null;
+ }
+
+ if (!defaultChannel().isVideoTechnology()) {
+ return defaultChannel();
+ }
+
+ // Default channel is a video channel, so find it's corresponding voice channel
+ Channel prevChannel = channels().get(0);
+ for (int i = 1; i < channels().size(); i++) {
+ Channel currentChannel = channels().get(i);
+ if (currentChannel.equals(defaultChannel())) {
+ return prevChannel;
+ }
+ prevChannel = currentChannel;
+ }
return null;
}
diff --git a/java/com/android/dialer/speeddial/res/layout/context_menu_layout.xml b/java/com/android/dialer/speeddial/res/layout/context_menu_layout.xml
deleted file mode 100644
index a59fa07c7..000000000
--- a/java/com/android/dialer/speeddial/res/layout/context_menu_layout.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?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.speeddial.ContextMenu
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/contact_menu_container"
- android:orientation="vertical"
- android:layout_width="160dp"
- android:layout_height="wrap_content"
- android:clipChildren="true"
- android:clipToPadding="false">
-
- <FrameLayout
- android:layout_width="12dp"
- android:layout_height="12dp"
- android:layout_marginTop="7dp"
- android:layout_marginBottom="-6dp"
- android:layout_gravity="center_horizontal"
- android:background="@color/background_dialer_white"
- android:rotation="45"
- android:clipChildren="false"
- android:clipToPadding="false"/>
-
- <LinearLayout
- android:id="@+id/context_menu_items_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:background="@drawable/context_menu_background">
-
-
- <TextView
- android:id="@+id/voice_call_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/contact_menu_voice_call"
- android:drawableStart="@drawable/quantum_ic_phone_vd_theme_24"
- style="@style/SpeedDialContextMenuItem"/>
-
- <TextView
- android:id="@+id/video_call_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/contact_menu_video_call"
- android:drawableStart="@drawable/quantum_ic_videocam_vd_theme_24"
- style="@style/SpeedDialContextMenuItem"/>
-
- <TextView
- android:id="@+id/send_message_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="4dp"
- android:text="@string/contact_menu_message"
- android:drawableStart="@drawable/quantum_ic_message_vd_theme_24"
- style="@style/SpeedDialContextMenuItem"/>
-
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:background="@color/divider_line_color"/>
-
- <TextView
- android:id="@+id/remove_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="4dp"
- android:text="@string/contact_menu_remove"
- android:drawableStart="@drawable/quantum_ic_close_vd_theme_24"
- style="@style/SpeedDialContextMenuItem"/>
-
- <TextView
- android:id="@+id/contact_info_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:drawableStart="@drawable/context_menu_contact_icon"
- android:text="@string/contact_menu_contact_info"
- style="@style/SpeedDialContextMenuItem.NoDrawableTint"/>
- </LinearLayout>
-</com.android.dialer.speeddial.ContextMenu> \ No newline at end of file
diff --git a/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml b/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml
index 080fba5d3..9a42377be 100644
--- a/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml
+++ b/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml
@@ -26,17 +26,5 @@
android:clipToPadding="false"
android:background="@color/background_dialer_light"
android:paddingBottom="@dimen/floating_action_button_list_bottom_padding"/>
-
- <FrameLayout
- android:id="@+id/context_menu_background"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:visibility="invisible"/>
-
- <!-- This menu is visible when you long click on a favorite contact. -->
- <include
- android:id="@+id/favorite_contact_context_menu"
- layout="@layout/context_menu_layout"
- android:visibility="invisible"/>
</FrameLayout>
diff --git a/java/com/android/dialer/speeddial/res/menu/add_favorite_menu.xml b/java/com/android/dialer/speeddial/res/menu/add_favorite_menu.xml
deleted file mode 100644
index b11c7f5d6..000000000
--- a/java/com/android/dialer/speeddial/res/menu/add_favorite_menu.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2017 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
- -->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto">
- <item
- android:id="@+id/action_search"
- android:title="@android:string/search_go"
- app:showAsAction="always"
- app:actionViewClass="android.support.v7.widget.SearchView"/>
-</menu> \ No newline at end of file
diff --git a/java/com/android/dialer/speeddial/res/menu/starred_contact_context_menu.xml b/java/com/android/dialer/speeddial/res/menu/starred_contact_context_menu.xml
new file mode 100644
index 000000000..0143498e1
--- /dev/null
+++ b/java/com/android/dialer/speeddial/res/menu/starred_contact_context_menu.xml
@@ -0,0 +1,52 @@
+<?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
+ -->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/starred_contact_context_menu_title"
+ android:enabled="false"
+ android:title=""/>
+
+ <item
+ android:id="@+id/voice_call_container"
+ android:title="@string/contact_menu_voice_call"
+ android:icon="@drawable/quantum_ic_phone_vd_theme_24"
+ android:iconTint="@color/secondary_text_color"/>
+
+ <item
+ android:id="@+id/video_call_container"
+ android:title="@string/contact_menu_video_call"
+ android:icon="@drawable/quantum_ic_videocam_vd_theme_24"
+ android:iconTint="@color/secondary_text_color"/>
+
+ <item
+ android:id="@+id/send_message_container"
+ android:title="@string/contact_menu_message"
+ android:icon="@drawable/quantum_ic_message_vd_theme_24"
+ android:iconTint="@color/secondary_text_color"/>
+
+ <item
+ android:id="@+id/remove_container"
+ android:title="@string/contact_menu_remove"
+ android:icon="@drawable/quantum_ic_close_vd_theme_24"
+ android:iconTint="@color/secondary_text_color"/>
+
+ <item
+ android:id="@+id/contact_info_container"
+ android:title="@string/contact_menu_contact_info"
+ android:icon="@drawable/context_menu_contact_icon"
+ android:iconTint="#FFFFFF"/>
+</menu> \ No newline at end of file
diff --git a/java/com/android/dialer/theme/res/values/strings.xml b/java/com/android/dialer/theme/res/values/strings.xml
index 36ff9413a..7d7209207 100644
--- a/java/com/android/dialer/theme/res/values/strings.xml
+++ b/java/com/android/dialer/theme/res/values/strings.xml
@@ -20,7 +20,7 @@
<!-- String to identify an unknown/restricted callers. ex. "Unknown 1", "Restricted 2", ect. -->
<string name="unknown_counter">
- <xliff:g id="unknown">%s</xliff:g> <xliff:g id="id">%d</xliff:g>
+ <xliff:g id="unknown">%1$s</xliff:g> <xliff:g id="id">%2$d</xliff:g>
</string>
<!-- String used to display calls from pay phone in the call log -->
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index 1c43f512d..e56715981 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -465,7 +465,7 @@ public class RttChatFragment extends Fragment
submitButton.setVisibility(View.VISIBLE);
editText.setFocusableInTouchMode(true);
if (editText.requestFocus()) {
- UiUtil.openKeyboardFrom(getContext(), editText);
+ UiUtil.showKeyboardFrom(getContext(), editText);
}
adapter.showAdvisory();
}