mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 21:15:48 +00:00
Update actionbar strings to allow for pluralization.
This commit is contained in:
@@ -8,6 +8,6 @@ import androidx.annotation.StringRes
|
||||
*/
|
||||
data class ActionItem(
|
||||
@DrawableRes val iconRes: Int,
|
||||
@StringRes val titleRes: Int,
|
||||
val title: CharSequence,
|
||||
val action: Runnable
|
||||
)
|
||||
|
||||
@@ -69,7 +69,7 @@ class SignalBottomActionBar(context: Context, attributeSet: AttributeSet) : Line
|
||||
view,
|
||||
ActionItem(
|
||||
iconRes = R.drawable.ic_more_horiz_24,
|
||||
titleRes = R.string.SignalBottomActionBar_more,
|
||||
title = context.getString(R.string.SignalBottomActionBar_more),
|
||||
action = {
|
||||
SignalContextMenu.Builder(view, parent as ViewGroup)
|
||||
.preferredHorizontalPosition(SignalContextMenu.HorizontalPosition.END)
|
||||
@@ -86,7 +86,7 @@ class SignalBottomActionBar(context: Context, attributeSet: AttributeSet) : Line
|
||||
val title: TextView = view.findViewById(R.id.signal_bottom_action_bar_item_title)
|
||||
|
||||
icon.setImageResource(item.iconRes)
|
||||
title.setText(item.titleRes)
|
||||
title.text = item.title
|
||||
view.setOnClickListener { item.action.run() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ class SignalContextMenu private constructor(
|
||||
|
||||
override fun bind(model: DisplayItem) {
|
||||
icon.setImageResource(model.item.iconRes)
|
||||
title.setText(model.item.titleRes)
|
||||
title.text = model.item.title
|
||||
itemView.setOnClickListener {
|
||||
model.item.action.run()
|
||||
dismiss()
|
||||
|
||||
@@ -150,7 +150,6 @@ import org.whispersystems.libsignal.util.guava.Optional;
|
||||
import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
@@ -1079,37 +1078,37 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
||||
|
||||
if (!conversation.getThreadRecord().isArchived()) {
|
||||
if (conversation.getThreadRecord().isRead()) {
|
||||
items.add(new ActionItem(R.drawable.ic_unread_24, R.string.ConversationListFragment_unread, () -> handleMarkAsUnread(id)));
|
||||
items.add(new ActionItem(R.drawable.ic_unread_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unread, 1), () -> handleMarkAsUnread(id)));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_read_24, R.string.ConversationListFragment_read, () -> handleMarkAsRead(id)));
|
||||
items.add(new ActionItem(R.drawable.ic_read_24, getResources().getQuantityString(R.plurals.ConversationListFragment_read, 1), () -> handleMarkAsRead(id)));
|
||||
}
|
||||
|
||||
if (conversation.getThreadRecord().isPinned()) {
|
||||
items.add(new ActionItem(R.drawable.ic_unpin_24, R.string.ConversationListFragment_unpin, () -> handleUnpin(id)));
|
||||
items.add(new ActionItem(R.drawable.ic_unpin_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unpin, 1), () -> handleUnpin(id)));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_pin_24, R.string.ConversationListFragment_pin, () -> handlePin(Collections.singleton(conversation))));
|
||||
items.add(new ActionItem(R.drawable.ic_pin_24, getResources().getQuantityString(R.plurals.ConversationListFragment_pin, 1), () -> handlePin(Collections.singleton(conversation))));
|
||||
}
|
||||
|
||||
if (conversation.getThreadRecord().getRecipient().live().get().isMuted()) {
|
||||
items.add(new ActionItem(R.drawable.ic_unmute_24, R.string.ConversationListFragment_unmute, () -> handleUnmute(Collections.singleton(conversation))));
|
||||
items.add(new ActionItem(R.drawable.ic_unmute_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unmute, 1), () -> handleUnmute(Collections.singleton(conversation))));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_mute_24, R.string.ConversationListFragment_mute, () -> handleMute(Collections.singleton(conversation))));
|
||||
items.add(new ActionItem(R.drawable.ic_mute_24, getResources().getQuantityString(R.plurals.ConversationListFragment_mute, 1), () -> handleMute(Collections.singleton(conversation))));
|
||||
}
|
||||
}
|
||||
|
||||
items.add(new ActionItem(R.drawable.ic_select_24, R.string.ConversationListFragment_select, () -> {
|
||||
items.add(new ActionItem(R.drawable.ic_select_24, getString(R.string.ConversationListFragment_select), () -> {
|
||||
defaultAdapter.initializeBatchMode(true);
|
||||
defaultAdapter.toggleConversationInBatchSet(conversation);
|
||||
startActionMode();
|
||||
}));
|
||||
|
||||
if (conversation.getThreadRecord().isArchived()) {
|
||||
items.add(new ActionItem(R.drawable.ic_unarchive_24, R.string.ConversationListFragment_unarchive, () -> handleArchive(id, false)));
|
||||
items.add(new ActionItem(R.drawable.ic_unarchive_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unarchive, 1), () -> handleArchive(id, false)));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_archive_24, R.string.ConversationListFragment_archive, () -> handleArchive(id, false)));
|
||||
items.add(new ActionItem(R.drawable.ic_archive_24, getResources().getQuantityString(R.plurals.ConversationListFragment_archive, 1), () -> handleArchive(id, false)));
|
||||
}
|
||||
|
||||
items.add(new ActionItem(R.drawable.ic_delete_24, R.string.ConversationListFragment_delete, () -> handleDelete(id)));
|
||||
items.add(new ActionItem(R.drawable.ic_delete_24, getResources().getQuantityString(R.plurals.ConversationListFragment_delete, 1), () -> handleDelete(id)));
|
||||
|
||||
new SignalContextMenu.Builder(view, list)
|
||||
.offsetX(ViewUtil.dpToPx(12))
|
||||
@@ -1186,33 +1185,33 @@ public class ConversationListFragment extends MainFragment implements ActionMode
|
||||
List<ActionItem> items = new ArrayList<>();
|
||||
|
||||
if (hasUnread) {
|
||||
items.add(new ActionItem(R.drawable.ic_read_24, R.string.ConversationListFragment_read, () -> handleMarkAsRead(defaultAdapter.getBatchSelectionIds())));
|
||||
items.add(new ActionItem(R.drawable.ic_read_24, getResources().getQuantityString(R.plurals.ConversationListFragment_read, count), () -> handleMarkAsRead(defaultAdapter.getBatchSelectionIds())));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_unread_24, R.string.ConversationListFragment_unread, () -> handleMarkAsUnread(defaultAdapter.getBatchSelectionIds())));
|
||||
items.add(new ActionItem(R.drawable.ic_unread_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unread, count), () -> handleMarkAsUnread(defaultAdapter.getBatchSelectionIds())));
|
||||
}
|
||||
|
||||
if (!isArchived() && hasUnpinned && canPin) {
|
||||
items.add(new ActionItem(R.drawable.ic_pin_24, R.string.ConversationListFragment_pin, () -> handlePin(defaultAdapter.getBatchSelection())));
|
||||
items.add(new ActionItem(R.drawable.ic_pin_24, getResources().getQuantityString(R.plurals.ConversationListFragment_pin, count), () -> handlePin(defaultAdapter.getBatchSelection())));
|
||||
} else if (!isArchived() && !hasUnpinned) {
|
||||
items.add(new ActionItem(R.drawable.ic_unpin_24, R.string.ConversationListFragment_unpin, () -> handleUnpin(defaultAdapter.getBatchSelectionIds())));
|
||||
items.add(new ActionItem(R.drawable.ic_unpin_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unpin, count), () -> handleUnpin(defaultAdapter.getBatchSelectionIds())));
|
||||
}
|
||||
|
||||
if (isArchived()) {
|
||||
items.add(new ActionItem(R.drawable.ic_unarchive_24, R.string.ConversationListFragment_unarchive, () -> handleArchive(defaultAdapter.getBatchSelectionIds(), true)));
|
||||
items.add(new ActionItem(R.drawable.ic_unarchive_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unarchive, count), () -> handleArchive(defaultAdapter.getBatchSelectionIds(), true)));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_archive_24, R.string.ConversationListFragment_archive, () -> handleArchive(defaultAdapter.getBatchSelectionIds(), true)));
|
||||
items.add(new ActionItem(R.drawable.ic_archive_24, getResources().getQuantityString(R.plurals.ConversationListFragment_archive, count), () -> handleArchive(defaultAdapter.getBatchSelectionIds(), true)));
|
||||
}
|
||||
|
||||
items.add(new ActionItem(R.drawable.ic_delete_24, R.string.ConversationListFragment_delete, () -> handleDelete(defaultAdapter.getBatchSelectionIds())));
|
||||
items.add(new ActionItem(R.drawable.ic_delete_24, getResources().getQuantityString(R.plurals.ConversationListFragment_delete, count), () -> handleDelete(defaultAdapter.getBatchSelectionIds())));
|
||||
|
||||
|
||||
if (hasUnmuted) {
|
||||
items.add(new ActionItem(R.drawable.ic_mute_24, R.string.ConversationListFragment_mute, () -> handleMute(defaultAdapter.getBatchSelection())));
|
||||
items.add(new ActionItem(R.drawable.ic_mute_24, getResources().getQuantityString(R.plurals.ConversationListFragment_mute, count), () -> handleMute(defaultAdapter.getBatchSelection())));
|
||||
} else {
|
||||
items.add(new ActionItem(R.drawable.ic_unmute_24, R.string.ConversationListFragment_unmute, () -> handleUnmute(defaultAdapter.getBatchSelection())));
|
||||
items.add(new ActionItem(R.drawable.ic_unmute_24, getResources().getQuantityString(R.plurals.ConversationListFragment_unmute, count), () -> handleUnmute(defaultAdapter.getBatchSelection())));
|
||||
}
|
||||
|
||||
items.add(new ActionItem(R.drawable.ic_select_24, R.string.ConversationListFragment_select_all, this::handleSelectAllThreads));
|
||||
items.add(new ActionItem(R.drawable.ic_select_24, getString(R.string.ConversationListFragment_select_all), this::handleSelectAllThreads));
|
||||
|
||||
bottomActionBar.setItems(items);
|
||||
}
|
||||
|
||||
@@ -304,19 +304,7 @@ public final class MediaOverviewPageFragment extends Fragment
|
||||
actionMode = ((AppCompatActivity) activity).startSupportActionMode(actionModeCallback);
|
||||
((MediaOverviewActivity) activity).onEnterMultiSelect();
|
||||
ViewUtil.fadeIn(bottomActionBar, 250);
|
||||
|
||||
bottomActionBar.setItems(Arrays.asList(
|
||||
new ActionItem(R.drawable.ic_save_24, R.string.MediaOverviewActivity_save, () -> {
|
||||
MediaActions.handleSaveMedia(MediaOverviewPageFragment.this,
|
||||
getListAdapter().getSelectedMedia(),
|
||||
this::exitMultiSelect);
|
||||
}),
|
||||
new ActionItem(R.drawable.ic_select_24, R.string.MediaOverviewActivity_select_all, this::handleSelectAllMedia),
|
||||
new ActionItem(R.drawable.ic_delete_24, R.string.MediaOverviewActivity_delete, () -> {
|
||||
MediaActions.handleDeleteMedia(requireContext(), getListAdapter().getSelectedMedia());
|
||||
exitMultiSelect();
|
||||
})
|
||||
));
|
||||
updateMultiSelect();
|
||||
}
|
||||
|
||||
private void exitMultiSelect() {
|
||||
@@ -328,6 +316,21 @@ public final class MediaOverviewPageFragment extends Fragment
|
||||
private void updateMultiSelect() {
|
||||
if (actionMode != null) {
|
||||
actionMode.setTitle(getActionModeTitle());
|
||||
|
||||
int selectionCount = getListAdapter().getSectionCount();
|
||||
|
||||
bottomActionBar.setItems(Arrays.asList(
|
||||
new ActionItem(R.drawable.ic_save_24, getResources().getQuantityString(R.plurals.MediaOverviewActivity_save, selectionCount), () -> {
|
||||
MediaActions.handleSaveMedia(MediaOverviewPageFragment.this,
|
||||
getListAdapter().getSelectedMedia(),
|
||||
this::exitMultiSelect);
|
||||
}),
|
||||
new ActionItem(R.drawable.ic_select_24, getString(R.string.MediaOverviewActivity_select_all), this::handleSelectAllMedia),
|
||||
new ActionItem(R.drawable.ic_delete_24, getResources().getQuantityString(R.plurals.MediaOverviewActivity_delete, selectionCount), () -> {
|
||||
MediaActions.handleDeleteMedia(requireContext(), getListAdapter().getSelectedMedia());
|
||||
exitMultiSelect();
|
||||
})
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -365,15 +365,43 @@
|
||||
<item quantity="other">Moved %d conversations to inbox</item>
|
||||
</plurals>
|
||||
<string name="ConversationListFragment_read">Read</string>
|
||||
<string name="ConversationListFragment_unread">Unread</string>
|
||||
<string name="ConversationListFragment_pin">Pin</string>
|
||||
<string name="ConversationListFragment_unpin">Unpin</string>
|
||||
<string name="ConversationListFragment_mute">Mute</string>
|
||||
<string name="ConversationListFragment_unmute">Unmute</string>
|
||||
<plurals name="ConversationListFragment_read">
|
||||
<item quantity="one">Read</item>
|
||||
<item quantity="other">Read</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_unread">
|
||||
<item quantity="one">Unread</item>
|
||||
<item quantity="other">Unread</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_pin">
|
||||
<item quantity="one">Pin</item>
|
||||
<item quantity="other">Pin</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_unpin">
|
||||
<item quantity="one">Unpin</item>
|
||||
<item quantity="other">Unpin</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_mute">
|
||||
<item quantity="one">Mute</item>
|
||||
<item quantity="other">Mute</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_unmute">
|
||||
<item quantity="one">Unmute</item>
|
||||
<item quantity="other">Unmute</item>
|
||||
</plurals>
|
||||
<string name="ConversationListFragment_select">Select</string>
|
||||
<string name="ConversationListFragment_archive">Archive</string>
|
||||
<string name="ConversationListFragment_unarchive">Unarchive</string>
|
||||
<string name="ConversationListFragment_delete">Delete</string>
|
||||
<plurals name="ConversationListFragment_archive">
|
||||
<item quantity="one">Archive</item>
|
||||
<item quantity="other">Archive</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_unarchive">
|
||||
<item quantity="one">Unarchive</item>
|
||||
<item quantity="other">Unarchive</item>
|
||||
</plurals>
|
||||
<plurals name="ConversationListFragment_delete">
|
||||
<item quantity="one">Delete</item>
|
||||
<item quantity="other">Delete</item>
|
||||
</plurals>
|
||||
<string name="ConversationListFragment_select_all">Select all</string>
|
||||
<plurals name="ConversationListFragment_s_selected">
|
||||
<item quantity="one">%d selected</item>
|
||||
@@ -944,9 +972,15 @@
|
||||
<string name="MediaOverviewActivity_Grid_view_description">Grid view</string>
|
||||
<string name="MediaOverviewActivity_List_view_description">List view</string>
|
||||
<string name="MediaOverviewActivity_Selected_description">Selected</string>
|
||||
<string name="MediaOverviewActivity_save">Save</string>
|
||||
<string name="MediaOverviewActivity_select_all">Select all</string>
|
||||
<string name="MediaOverviewActivity_delete">Delete</string>
|
||||
<plurals name="MediaOverviewActivity_save">
|
||||
<item quantity="one">Save</item>
|
||||
<item quantity="other">Save</item>
|
||||
</plurals>
|
||||
<plurals name="MediaOverviewActivity_delete">
|
||||
<item quantity="one">Delete</item>
|
||||
<item quantity="other">Delete</item>
|
||||
</plurals>
|
||||
|
||||
<plurals name="MediaOverviewActivity_d_selected_s">
|
||||
<item quantity="one">%1$d selected (%2$s)</item>
|
||||
|
||||
Reference in New Issue
Block a user