summaryrefslogtreecommitdiffstats
path: root/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java')
-rw-r--r--src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java219
1 files changed, 0 insertions, 219 deletions
diff --git a/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java b/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java
deleted file mode 100644
index bfeec51..0000000
--- a/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2015 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.messaging.ui.conversationlist;
-
-import android.support.v4.util.ArrayMap;
-import android.text.TextUtils;
-import android.view.ActionMode;
-import android.view.ActionMode.Callback;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.util.Assert;
-
-import java.util.Collection;
-import java.util.HashSet;
-
-public class MultiSelectActionModeCallback implements Callback {
- private HashSet<String> mBlockedSet;
-
- public interface Listener {
- void onActionBarDelete(Collection<SelectedConversation> conversations);
- void onActionBarArchive(Iterable<SelectedConversation> conversations,
- boolean isToArchive);
- void onActionBarNotification(Iterable<SelectedConversation> conversations,
- boolean isNotificationOn);
- void onActionBarAddContact(final SelectedConversation conversation);
- void onActionBarBlock(final SelectedConversation conversation);
- void onActionBarHome();
- }
-
- static class SelectedConversation {
- public final String conversationId;
- public final long timestamp;
- public final String icon;
- public final String otherParticipantNormalizedDestination;
- public final CharSequence participantLookupKey;
- public final boolean isGroup;
- public final boolean isArchived;
- public final boolean notificationEnabled;
- public SelectedConversation(ConversationListItemData data) {
- conversationId = data.getConversationId();
- timestamp = data.getTimestamp();
- icon = data.getIcon();
- otherParticipantNormalizedDestination = data.getOtherParticipantNormalizedDestination();
- participantLookupKey = data.getParticipantLookupKey();
- isGroup = data.getIsGroup();
- isArchived = data.getIsArchived();
- notificationEnabled = data.getNotificationEnabled();
- }
- }
-
- private final ArrayMap<String, SelectedConversation> mSelectedConversations;
-
- private Listener mListener;
- private MenuItem mArchiveMenuItem;
- private MenuItem mUnarchiveMenuItem;
- private MenuItem mAddContactMenuItem;
- private MenuItem mBlockMenuItem;
- private MenuItem mNotificationOnMenuItem;
- private MenuItem mNotificationOffMenuItem;
- private boolean mHasInflated;
-
- public MultiSelectActionModeCallback(final Listener listener) {
- mListener = listener;
- mSelectedConversations = new ArrayMap<>();
-
- }
-
- @Override
- public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
- actionMode.getMenuInflater().inflate(R.menu.conversation_list_fragment_select_menu, menu);
- mArchiveMenuItem = menu.findItem(R.id.action_archive);
- mUnarchiveMenuItem = menu.findItem(R.id.action_unarchive);
- mAddContactMenuItem = menu.findItem(R.id.action_add_contact);
- mBlockMenuItem = menu.findItem(R.id.action_block);
- mNotificationOffMenuItem = menu.findItem(R.id.action_notification_off);
- mNotificationOnMenuItem = menu.findItem(R.id.action_notification_on);
- mHasInflated = true;
- updateActionIconsVisiblity();
- return true;
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
- return true;
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
- switch(menuItem.getItemId()) {
- case R.id.action_delete:
- mListener.onActionBarDelete(mSelectedConversations.values());
- return true;
- case R.id.action_archive:
- mListener.onActionBarArchive(mSelectedConversations.values(), true);
- return true;
- case R.id.action_unarchive:
- mListener.onActionBarArchive(mSelectedConversations.values(), false);
- return true;
- case R.id.action_notification_off:
- mListener.onActionBarNotification(mSelectedConversations.values(), false);
- return true;
- case R.id.action_notification_on:
- mListener.onActionBarNotification(mSelectedConversations.values(), true);
- return true;
- case R.id.action_add_contact:
- Assert.isTrue(mSelectedConversations.size() == 1);
- mListener.onActionBarAddContact(mSelectedConversations.valueAt(0));
- return true;
- case R.id.action_block:
- Assert.isTrue(mSelectedConversations.size() == 1);
- mListener.onActionBarBlock(mSelectedConversations.valueAt(0));
- return true;
- case android.R.id.home:
- mListener.onActionBarHome();
- return true;
- default:
- return false;
- }
- }
-
- @Override
- public void onDestroyActionMode(ActionMode actionMode) {
- mListener = null;
- mSelectedConversations.clear();
- mHasInflated = false;
- }
-
- public void toggleSelect(final ConversationListData listData,
- final ConversationListItemData conversationListItemData) {
- Assert.notNull(conversationListItemData);
- mBlockedSet = listData.getBlockedParticipants();
- final String id = conversationListItemData.getConversationId();
- if (mSelectedConversations.containsKey(id)) {
- mSelectedConversations.remove(id);
- } else {
- mSelectedConversations.put(id, new SelectedConversation(conversationListItemData));
- }
-
- if (mSelectedConversations.isEmpty()) {
- mListener.onActionBarHome();
- } else {
- updateActionIconsVisiblity();
- }
- }
-
- public boolean isSelected(final String selectedId) {
- return mSelectedConversations.containsKey(selectedId);
- }
-
- private void updateActionIconsVisiblity() {
- if (!mHasInflated) {
- return;
- }
-
- if (mSelectedConversations.size() == 1) {
- final SelectedConversation conversation = mSelectedConversations.valueAt(0);
- // The look up key is a key given to us by contacts app, so if we have a look up key,
- // we know that the participant is already in contacts.
- final boolean isInContacts = !TextUtils.isEmpty(conversation.participantLookupKey);
- mAddContactMenuItem.setVisible(!conversation.isGroup && !isInContacts);
- // ParticipantNormalizedDestination is always null for group conversations.
- final String otherParticipant = conversation.otherParticipantNormalizedDestination;
- mBlockMenuItem.setVisible(otherParticipant != null
- && !mBlockedSet.contains(otherParticipant));
- } else {
- mBlockMenuItem.setVisible(false);
- mAddContactMenuItem.setVisible(false);
- }
-
- boolean hasCurrentlyArchived = false;
- boolean hasCurrentlyUnarchived = false;
- boolean hasCurrentlyOnNotification = false;
- boolean hasCurrentlyOffNotification = false;
- final Iterable<SelectedConversation> conversations = mSelectedConversations.values();
- for (final SelectedConversation conversation : conversations) {
- if (conversation.notificationEnabled) {
- hasCurrentlyOnNotification = true;
- } else {
- hasCurrentlyOffNotification = true;
- }
-
- if (conversation.isArchived) {
- hasCurrentlyArchived = true;
- } else {
- hasCurrentlyUnarchived = true;
- }
-
- // If we found at least one of each example we don't need to keep looping.
- if (hasCurrentlyOffNotification && hasCurrentlyOnNotification &&
- hasCurrentlyArchived && hasCurrentlyUnarchived) {
- break;
- }
- }
- // If we have notification off conversations we show on button, if we have notification on
- // conversation we show off button. We can show both if we have a mixture.
- mNotificationOffMenuItem.setVisible(hasCurrentlyOnNotification);
- mNotificationOnMenuItem.setVisible(hasCurrentlyOffNotification);
-
- mArchiveMenuItem.setVisible(hasCurrentlyUnarchived);
- mUnarchiveMenuItem.setVisible(hasCurrentlyArchived);
- }
-}