package im.actor.sdk.controllers.group;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
import com.rengwuxian.materialedittext.MaterialEditText;
import org.jetbrains.annotations.Nullable;
import im.actor.core.util.JavaUtil;
import im.actor.core.viewmodel.GroupVM;
import im.actor.runtime.actors.messages.Void;
import im.actor.runtime.promise.Promise;
import im.actor.sdk.R;
import im.actor.sdk.controllers.BaseFragment;
import im.actor.sdk.controllers.tools.MediaPickerCallback;
import im.actor.sdk.controllers.tools.MediaPickerFragment;
import im.actor.sdk.util.Screen;
import im.actor.sdk.view.avatar.AvatarView;
import static im.actor.sdk.util.ActorSDKMessenger.messenger;
public class GroupEditFragment extends BaseFragment implements MediaPickerCallback {
public static GroupEditFragment create(int groupId) {
Bundle bundle = new Bundle();
bundle.putInt("groupId", groupId);
GroupEditFragment editFragment = new GroupEditFragment();
editFragment.setArguments(bundle);
return editFragment;
}
private int groupId;
private GroupVM groupVM;
private AvatarView avatarView;
private MaterialEditText titleEditText;
private EditText descriptionEditText;
public GroupEditFragment() {
setTitle(R.string.group_title);
setHomeAsUp(true);
setShowHome(true);
setRootFragment(true);
}
@Override
public void onCreate(Bundle saveInstance) {
super.onCreate(saveInstance);
groupId = getArguments().getInt("groupId");
groupVM = messenger().getGroup(groupId);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View res = inflater.inflate(R.layout.fragment_edit_info, container, false);
res.findViewById(R.id.rootContainer).setBackgroundColor(style.getBackyardBackgroundColor());
res.findViewById(R.id.topContainer).setBackgroundColor(style.getMainBackgroundColor());
avatarView = (AvatarView) res.findViewById(R.id.avatar);
avatarView.init(Screen.dp(52), 24);
avatarView.bind(groupVM.getAvatar().get(), groupVM.getName().get(), groupId);
avatarView.setOnClickListener(v -> {
onAvatarClicked();
});
titleEditText = (MaterialEditText) res.findViewById(R.id.name);
titleEditText.setTextColor(style.getTextPrimaryColor());
titleEditText.setBaseColor(style.getAccentColor());
titleEditText.setMetHintTextColor(style.getTextHintColor());
titleEditText.setText(groupVM.getName().get());
titleEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
avatarView.updatePlaceholder(editable.toString(), groupId);
}
});
descriptionEditText = (EditText) res.findViewById(R.id.description);
descriptionEditText.setTextColor(style.getTextPrimaryColor());
descriptionEditText.setHintTextColor(style.getTextHintColor());
descriptionEditText.setText(groupVM.getAbout().get());
// Media Picker
getChildFragmentManager().beginTransaction()
.add(new MediaPickerFragment(), "picker")
.commitNow();
return res;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.next, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.next) {
Promise<Void> res = Promise.success(null);
boolean isPerformed = false;
if (titleEditText != null) {
String title = titleEditText.getText().toString().trim();
if (title.length() > 0) {
if (!title.equals(messenger().getGroup(groupId).getName().get())) {
res = res.chain(r -> messenger().editGroupTitle(groupId, title));
isPerformed = true;
}
} else {
return true;
}
}
if (descriptionEditText != null) {
String description = descriptionEditText.getText().toString().trim();
if (description.length() == 0) {
description = null;
}
if (!JavaUtil.equalsE(description, groupVM.getAbout().get())) {
final String finalDescription = description;
res = res.chain(r -> messenger().editGroupAbout(groupId, finalDescription));
isPerformed = true;
}
}
if (isPerformed) {
execute(res).then(r -> {
finishActivity();
}).failure(r -> {
Toast.makeText(getActivity(), R.string.toast_unable_change, Toast.LENGTH_SHORT).show();
});
} else {
finishActivity();
}
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
public void onAvatarClicked() {
CharSequence[] args;
if (groupVM.getAvatar().get() != null) {
args = new CharSequence[]{getString(R.string.pick_photo_camera),
getString(R.string.pick_photo_gallery),
getString(R.string.pick_photo_remove)};
} else {
args = new CharSequence[]{getString(R.string.pick_photo_camera),
getString(R.string.pick_photo_gallery)};
}
new AlertDialog.Builder(getActivity()).setItems(args, (d, which) -> {
if (which == 0) {
findPicker().requestPhoto(true);
} else if (which == 1) {
findPicker().requestGallery(true);
} else if (which == 2) {
messenger().removeGroupAvatar(groupId);
avatarView.bind(null, groupVM.getName().get(), groupId);
}
}).show();
}
@Override
public void onPhotoCropped(String path) {
messenger().changeGroupAvatar(groupId, path);
avatarView.bindRaw(path);
}
private MediaPickerFragment findPicker() {
return (MediaPickerFragment) getChildFragmentManager().findFragmentByTag("picker");
}
@Override
public void onDestroyView() {
super.onDestroyView();
titleEditText = null;
descriptionEditText = null;
if (avatarView != null) {
avatarView.unbind();
avatarView = null;
}
}
}