package bg.mentormate.academy.radarapp.activities;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.Toast;
import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.SaveCallback;
import java.util.ArrayList;
import java.util.List;
import bg.mentormate.academy.radarapp.R;
import bg.mentormate.academy.radarapp.adapters.EditRoomUserAdapter;
import bg.mentormate.academy.radarapp.data.LocalDb;
import bg.mentormate.academy.radarapp.models.Room;
import bg.mentormate.academy.radarapp.models.User;
public class EditRoomActivity extends ActionBarActivity implements View.OnClickListener,
AdapterView.OnItemLongClickListener,
SwipeRefreshLayout.OnRefreshListener {
private Menu mMenu;
private Button mBtnApplyChanges;
private EditText mEtChangePassword;
private EditText mEtChangeRoomName;
private GridView mGvUsers;
private SwipeRefreshLayout mSrlRefresh;
private LocalDb mLocalDb;
private User mCurrentUser;
private Room mRoom;
private EditRoomUserAdapter mEditRoomUserAdapter;
private List<User> mUsers;
private ArrayList<User> mSelectedUsers;
private boolean mUsersDeleted;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_room);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
init();
}
private void init() {
mLocalDb = LocalDb.getInstance();
mCurrentUser = mLocalDb.getCurrentUser();
mRoom = mCurrentUser.getRoom();
mUsers = mRoom.getUsers();
mSelectedUsers = new ArrayList<>();
mUsersDeleted = false;
mEtChangePassword = (EditText) findViewById(R.id.etChangePass);
mEtChangeRoomName = (EditText) findViewById(R.id.etChangeRoomName);
mBtnApplyChanges = (Button) findViewById(R.id.btnApplyChanges);
mGvUsers = (GridView) findViewById(R.id.usersList);
mSrlRefresh = (SwipeRefreshLayout) findViewById(R.id.srlRefresh);
mRoom.fetchIfNeededInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, ParseException e) {
mEtChangeRoomName.setHint(mRoom.getName());
}
});
mEditRoomUserAdapter = new EditRoomUserAdapter(this, mUsers);
mGvUsers.setAdapter(mEditRoomUserAdapter);
mSrlRefresh.setColorSchemeColors(
getResources().getColor(R.color.br_dark_background));
mBtnApplyChanges.setOnClickListener(this);
mGvUsers.setOnItemLongClickListener(this);
mSrlRefresh.setOnRefreshListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_edit_room, menu);
this.mMenu = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
this.finish();
return true;
case R.id.action_delete_users:
deleteSelectedUsers();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void deleteSelectedUsers() {
if(!mSelectedUsers.isEmpty()){
try {
for (int i = 0; i < mSelectedUsers.size(); i++) {
mEditRoomUserAdapter.getView(i, null, null).setBackgroundColor(Color.WHITE);
mUsers.remove(mSelectedUsers.get(i));
}
} catch (Exception e) {
Log.d(EditRoomActivity.class.getSimpleName(),
"deleteSelectedUsers() : " + e.getMessage());
}
mEditRoomUserAdapter = new EditRoomUserAdapter(this, mUsers);
mGvUsers.setAdapter(mEditRoomUserAdapter);
mSelectedUsers.clear();
mMenu.findItem(R.id.action_delete_users).setVisible(false);
mUsersDeleted = true;
}
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnApplyChanges:
applyChanges();
break;
}
}
private void applyChanges() {
String newRoomName = mEtChangeRoomName.getText().toString();
String passkey = mEtChangePassword.getText().toString();
boolean changesApplied = false;
if (!newRoomName.trim().isEmpty() && !newRoomName.equals(mRoom.getName())) {
mRoom.setName(newRoomName.trim());
changesApplied = true;
}
if(!passkey.trim().isEmpty()) {
mRoom.setPassKey(passkey.trim());
changesApplied = true;
}
if(mUsersDeleted) {
changesApplied = true;
}
if (changesApplied) {
mRoom.setUsers(mUsers);
mRoom.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e != null) {
Log.d(EditRoomActivity.class.getSimpleName(),
"applyChanges() : " + e.getMessage());
}
}
});
} else {
Toast.makeText(this,
getString(R.string.nothing_changed_text),
Toast.LENGTH_SHORT).show();
}
finish();
}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
User selectedMember = mUsers.get(position);
if (selectedMember.equals(mCurrentUser)) {
Toast.makeText(this,
getString(R.string.cant_select_yourself_warning),
Toast.LENGTH_SHORT).show();
return false;
}
if (!mSelectedUsers.contains(selectedMember)) {
mSelectedUsers.add(selectedMember);
view.setBackgroundColor(getResources().getColor(R.color.br_toggle_on));
} else {
mSelectedUsers.remove(selectedMember);
view.setBackgroundColor(Color.WHITE);
}
setDeleteIconVisibility();
return true;
}
private void setDeleteIconVisibility() {
if (mSelectedUsers.size() > 0) {
mMenu.findItem(R.id.action_delete_users).setVisible(true);
} else {
mMenu.findItem(R.id.action_delete_users).setVisible(false);
}
}
@Override
public void onRefresh() {
mRoom.fetchInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, ParseException e) {
mUsers.clear();
mUsers.addAll(mRoom.getUsers());
mEditRoomUserAdapter.notifyDataSetChanged();
mSrlRefresh.setRefreshing(false);
}
});
}
}