From f081899a952abd8887ad59a1282edc562f976869 Mon Sep 17 00:00:00 2001 From: Abdullah Radwan Date: Sat, 12 Oct 2019 10:11:52 +0200 Subject: [PATCH 1/2] Locale improved and Arabic support --- .../groupchannel/GroupChannelListAdapter.java | 2 +- .../GroupChannelListFragment.java | 23 +++-- .../groupchannel/GroupChatFragment.java | 31 +++--- .../groupchannel/MemberListActivity.java | 2 +- .../sample/main/BaseApplication.java | 2 +- .../sample/main/LoginActivity.java | 4 +- .../sample/main/SettingsActivity.java | 16 +-- .../layout/activity_blocked_members_list.xml | 4 +- .../layout/activity_create_group_channel.xml | 4 +- .../res/layout/activity_invite_member.xml | 2 +- .../app/src/main/res/layout/activity_main.xml | 4 +- .../main/res/layout/activity_member_info.xml | 4 +- .../src/main/res/layout/activity_settings.xml | 20 ++-- .../main/res/layout/fragment_group_chat.xml | 6 +- .../res/layout/fragment_select_distinct.xml | 2 +- .../res/layout/list_item_group_chat_admin.xml | 2 +- .../layout/list_item_group_chat_user_me.xml | 2 +- .../list_item_group_chat_user_other.xml | 2 +- .../src/main/res/layout/list_item_user.xml | 2 +- .../app/src/main/res/menu/context_delete.xml | 2 +- .../res/menu/menu_create_group_channel.xml | 2 +- .../app/src/main/res/menu/menu_group_chat.xml | 4 +- .../app/src/main/res/menu/menu_main.xml | 2 +- .../app/src/main/res/menu/nav_view.xml | 4 +- .../app/src/main/res/values-ar/strings.xml | 97 +++++++++++++++++++ .../app/src/main/res/values/strings.xml | 54 ++++++++++- 26 files changed, 227 insertions(+), 72 deletions(-) create mode 100644 syncmanager/app/src/main/res/values-ar/strings.xml diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListAdapter.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListAdapter.java index 9022447d..22b4ac5b 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListAdapter.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListAdapter.java @@ -280,7 +280,7 @@ void bind(final Context context, int position, final GroupChannel channel, // If someone in the channel is typing, display the typing indicator. if (channel.isTyping()) { typingIndicatorContainer.setVisibility(View.VISIBLE); - lastMessageText.setText(("Someone is typing")); + lastMessageText.setText(R.string.typing_indicator); } else { // Display typing indicator only when someone is typing typingIndicatorContainer.setVisibility(View.GONE); diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListFragment.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListFragment.java index 2ff11879..c219abab 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListFragment.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChannelListFragment.java @@ -238,25 +238,27 @@ private void showChannelOptionsDialog(final GroupChannel channel) { final boolean pushCurrentlyEnabled = channel.isPushEnabled(); options = pushCurrentlyEnabled - ? new String[]{"Leave channel", "Turn push notifications OFF"} - : new String[]{"Leave channel", "Turn push notifications ON"}; + ? new String[]{getResources().getString(R.string.leave_channel), + getResources().getString(R.string.set_notification_off)} + : new String[]{getResources().getString(R.string.leave_channel), + getResources().getString(R.string.set_notification_on)}; AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle("Channel options") + builder.setTitle(R.string.channel_options) .setItems(options, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { // Show a dialog to confirm that the user wants to leave the channel. new AlertDialog.Builder(getActivity()) - .setTitle("Leave channel " + channel.getName() + "?") - .setPositiveButton("Leave", new DialogInterface.OnClickListener() { + .setTitle(String.format(getResources().getString(R.string.leave_channel_question) + " ", channel.getName())) + .setPositiveButton(R.string.all_leave, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { leaveChannel(channel); } }) - .setNegativeButton("Cancel", null) + .setNegativeButton(R.string.cancel, null) .create().show(); } else if (which == 1) { setChannelPushPreferences(channel, !pushCurrentlyEnabled); @@ -278,14 +280,15 @@ private void setChannelPushPreferences(final GroupChannel channel, final boolean public void onResult(SendBirdException e) { if (e != null) { e.printStackTrace(); - Toast.makeText(getActivity(), "Error: " + e.getMessage(), Toast.LENGTH_SHORT) + Toast.makeText(getActivity(), getResources().getString(R.string.error)+ " " + + e.getMessage(), Toast.LENGTH_SHORT) .show(); return; } - String toast = on - ? "Push notifications have been turned ON" - : "Push notifications have been turned OFF"; + int toast = on + ? R.string.notification_on + : R.string.notification_off; Toast.makeText(getActivity(), toast, Toast.LENGTH_SHORT) .show(); diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChatFragment.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChatFragment.java index 2ee0234e..a4b12eb5 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChatFragment.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/GroupChatFragment.java @@ -466,9 +466,10 @@ private void showMessageOptionsDialog(final BaseMessage message, final int posit String[] options; if (message.getMessageId() == 0) { - options = new String[] { "Delete message" }; + options = new String[] { getResources().getString(R.string.delete_message) }; } else { - options = new String[] { "Edit message", "Delete message" }; + options = new String[] { getResources().getString(R.string.edit_message), + getResources().getString(R.string.delete_message) }; } AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); @@ -558,7 +559,7 @@ public void run() { fetchInitialMessages(); } } else { - Toast.makeText(getContext(), "Failed to get channel.", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), R.string.get_channel_failed, Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { @@ -663,7 +664,7 @@ public void onSent(UserMessage userMessage, SendBirdException e) { } } }) - .setNegativeButton(R.string.delete_message, new DialogInterface.OnClickListener() { + .setNegativeButton(R.string.delete, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_NEGATIVE) { @@ -690,11 +691,12 @@ private void displayTyping(List typingUsers) { String string; if (typingUsers.size() == 1) { - string = typingUsers.get(0).getNickname() + " is typing"; + string = typingUsers.get(0).getNickname() + " " + getResources().getString(R.string.typing); } else if (typingUsers.size() == 2) { - string = typingUsers.get(0).getNickname() + " " + typingUsers.get(1).getNickname() + " is typing"; + string = typingUsers.get(0).getNickname() + " " + typingUsers.get(1).getNickname() + " " + + getResources().getString(R.string.typing); } else { - string = "Multiple users are typing"; + string = getResources().getString(R.string.multiple_typing); } mCurrentEventText.setText(string); } else { @@ -737,9 +739,9 @@ private void requestStoragePermissions() { // Provide an additional rationale to the user if the permission was not granted // and the user would benefit from additional context for the use of the permission. // For example if the user has previously denied the permission. - Snackbar.make(mRootLayout, "Storage access permissions are required to upload/download files.", + Snackbar.make(mRootLayout, R.string.storage_access, Snackbar.LENGTH_LONG) - .setAction("Okay", new View.OnClickListener() { + .setAction(R.string.okay, new View.OnClickListener() { @Override public void onClick(View view) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, @@ -778,7 +780,7 @@ private void showDownloadConfirmDialog(final FileMessage message) { requestStoragePermissions(); } else { new AlertDialog.Builder(getActivity()) - .setMessage("Download file?") + .setMessage(R.string.download_file) .setPositiveButton(R.string.download, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -797,6 +799,7 @@ private void updateActionBarTitle() { if(mChannel != null) { title = TextUtils.getGroupChannelTitle(mChannel); + if(title.equals("No Members")) title = getResources().getString(R.string.no_members); } // Set action bar title to name of channel @@ -827,7 +830,7 @@ public void onSent(UserMessage userMessage, SendBirdException e) { Log.e(LOG_TAG, e.toString()); Toast.makeText( getActivity(), - "Send failed with error " + e.getCode() + ": " + e.getMessage(), Toast.LENGTH_SHORT) + getResources().getString(R.string.send_failed) + e.getCode() + ": " + e.getMessage(), Toast.LENGTH_SHORT) .show(); } @@ -871,7 +874,7 @@ public void onSent(UserMessage userMessage, SendBirdException e) { if (e != null) { // Error! Log.e(LOG_TAG, e.toString()); - Toast.makeText(getActivity(),"Send failed with error " + e.getCode() + ": " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(),getResources().getString(R.string.send_failed) + e.getCode() + ": " + e.getMessage(), Toast.LENGTH_SHORT).show(); return; } } @@ -918,7 +921,7 @@ private void sendFileWithThumbnail(Uri uri) { Hashtable info = FileUtils.getFileInfo(getActivity(), uri); if (info == null) { - Toast.makeText(getActivity(), "Extracting file information failed.", Toast.LENGTH_LONG).show(); + Toast.makeText(getActivity(), R.string.extracting_info_failed, Toast.LENGTH_LONG).show(); return; } @@ -929,7 +932,7 @@ private void sendFileWithThumbnail(Uri uri) { final int size = (Integer) info.get("size"); if (path.equals("")) { - Toast.makeText(getActivity(), "File must be located in local storage.", Toast.LENGTH_LONG).show(); + Toast.makeText(getActivity(), R.string.local_storage, Toast.LENGTH_LONG).show(); } else { BaseChannel.SendFileMessageWithProgressHandler progressHandler = new BaseChannel.SendFileMessageWithProgressHandler() { @Override diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/MemberListActivity.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/MemberListActivity.java index 57a5154c..6b4d76ec 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/MemberListActivity.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/groupchannel/MemberListActivity.java @@ -48,7 +48,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } if (mChannel == null) { - Toast.makeText(this, "Channel doesn't exists", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.channel_not_exists, Toast.LENGTH_SHORT).show(); onBackPressed(); finish(); } diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/BaseApplication.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/BaseApplication.java index ee1e5216..2685dd6a 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/BaseApplication.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/BaseApplication.java @@ -9,7 +9,7 @@ public class BaseApplication extends Application { - private static final String APP_ID = "9DA1B1F4-0BE6-4DA8-82C5-2E81DAB56F23"; // US-1 Demo + private static final String APP_ID = "24CF77F2-1083-4A23-8FD1-4C63C108EE8E"; public static final String VERSION = "3.0.40"; private boolean mIsSyncManagerSetup = false; diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/LoginActivity.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/LoginActivity.java index d57da30a..71ef65bd 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/LoginActivity.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/LoginActivity.java @@ -104,7 +104,7 @@ public void onConnected(User user, SendBirdException e) { .show(); // Show login failure snackbar - showSnackbar("Login to SendBird failed"); + showSnackbar(getResources().getString(R.string.login_failed)); mConnectButton.setEnabled(true); PreferenceUtils.setConnected(false); return; @@ -147,7 +147,7 @@ public void onUpdated(SendBirdException e) { .show(); // Show update failed snackbar - showSnackbar("Update user nickname failed"); + showSnackbar(getResources().getString(R.string.update_nickname_failed)); return; } diff --git a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/SettingsActivity.java b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/SettingsActivity.java index 7437246b..a74fd8a1 100644 --- a/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/SettingsActivity.java +++ b/syncmanager/app/src/main/java/com/sendbird/syncmanager/sample/main/SettingsActivity.java @@ -193,12 +193,12 @@ public void onClick(View v) { updateCurrentUserInfo(mEditTextNickname.getText().toString()); } - mButtonSaveNickName.setText("EDIT"); + mButtonSaveNickName.setText(R.string.edit); mEditTextNickname.setEnabled(false); mEditTextNickname.setFocusable(false); mEditTextNickname.setFocusableInTouchMode(false); } else { - mButtonSaveNickName.setText("SAVE"); + mButtonSaveNickName.setText(R.string.save); mEditTextNickname.setEnabled(true); mEditTextNickname.setFocusable(true); mEditTextNickname.setFocusableInTouchMode(true); @@ -442,10 +442,11 @@ public boolean onOptionsItemSelected(MenuItem item) { } private void showSetProfileOptionsDialog() { - String[] options = new String[] { "Upload a photo", "Take a photo" }; + String[] options = new String[] { getResources().getString(R.string.upload_photo), + getResources().getString(R.string.take_photo) }; AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this); - builder.setTitle("Set profile image") + builder.setTitle(R.string.set_profile_image) .setItems(options, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -561,7 +562,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } private void permissionDenied() { - Snackbar.make(mSettingsLayout, "Permission denied.", Snackbar.LENGTH_LONG).show(); + Snackbar.make(mSettingsLayout, R.string.permission_denied, Snackbar.LENGTH_LONG).show(); } private void requestMedia() { @@ -570,7 +571,8 @@ private void requestMedia() { intent.setType("image/*"); intent.setAction(Intent.ACTION_PICK); // Always show the chooser (if there are multiple options available) - startActivityForResult(Intent.createChooser(intent, "Select Image"), INTENT_REQUEST_CHOOSE_MEDIA); + startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_image)), + INTENT_REQUEST_CHOOSE_MEDIA); // Set this as false to maintain connection // even when an external Activity is started. @@ -647,7 +649,7 @@ public void onUpdated(SendBirdException e) { Toast.makeText(SettingsActivity.this, "" + e.getCode() + ":" + e.getMessage(), Toast.LENGTH_SHORT).show(); // Show update failed snackbar - showSnackbar("Update user info failed"); + showSnackbar(getResources().getString(R.string.update_info_failed)); return; } diff --git a/syncmanager/app/src/main/res/layout/activity_blocked_members_list.xml b/syncmanager/app/src/main/res/layout/activity_blocked_members_list.xml index 99c2ab37..2fd2dd4a 100644 --- a/syncmanager/app/src/main/res/layout/activity_blocked_members_list.xml +++ b/syncmanager/app/src/main/res/layout/activity_blocked_members_list.xml @@ -22,7 +22,7 @@