package com.ldimitrov.burnmessenger.activities;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ListView;
import com.ldimitrov.burnmessenger.adapters.MessageAdapter;
import com.ldimitrov.burnmessenger.util.ParseConstants;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseUser;
import java.util.ArrayList;
import java.util.List;
public class InboxFragment extends ListFragment {
protected List<ParseObject> mMessages;
protected SwipeRefreshLayout mSwipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_inbox, container, false);
mSwipeRefreshLayout = (SwipeRefreshLayout)rootView.findViewById(R.id.swipeRefreshLayout);
mSwipeRefreshLayout.setOnRefreshListener(mOnRefreshListener);
mSwipeRefreshLayout.setColorScheme(R.color.swipeRefresh1,
R.color.swipeRefresh2,
R.color.swipeRefresh3,
R.color.swipeRefresh4);
//disable screenshot ability
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
return rootView;
}
@Override
public void onResume() {
super.onResume();
getActivity().setProgressBarIndeterminateVisibility(true);
retrieveMessages();
}
private void retrieveMessages() {
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(ParseConstants.CLASS_MESSAGES);
query.whereEqualTo(ParseConstants.KEY_RECIPIENT_IDS, ParseUser.getCurrentUser().getObjectId());
query.addDescendingOrder(ParseConstants.KEY_CREATED_AT);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> messages, ParseException e) {
getActivity().setProgressBarIndeterminateVisibility(false);
if(mSwipeRefreshLayout.isRefreshing()){
mSwipeRefreshLayout.setRefreshing(false);
}
if (e == null) {
// We found messages!
mMessages = messages;
String[] msgs = new String[mMessages.size()];
int i = 0;
for (ParseObject message : mMessages) {
msgs[i] = message.getString(ParseConstants.KEY_SENDER_NAME);
i++;
}
//check if adapter is empty, if not created it
// this saves creating the adapter every time
if (getListView().getAdapter() == null) {
MessageAdapter adapter = new MessageAdapter(
getListView().getContext(),
mMessages);
setListAdapter(adapter);
} else {
//refill adapter
((MessageAdapter) getListView().getAdapter()).refill(mMessages);
}
}
}
});
}
@Override
public void onListItemClick(ListView list, View view, final int position, long id) {
super.onListItemClick(list, view, position, id);
//TODO - start timer once the image or video is downloaded
AlertDialog.Builder builder = new AlertDialog.Builder(getListView().getContext());
builder.setTitle(R.string.self_destruct_title);
builder.setMessage(R.string.message_destruct_label);
builder.setPositiveButton(R.string.button_proceed, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
ParseObject message = mMessages.get(position);
String messageType = message.getString(ParseConstants.KEY_FILE_TYPE);
ParseFile file = message.getParseFile(ParseConstants.KEY_FILE);
String senderName = message.getString(ParseConstants.KEY_SENDER_NAME);
String displayMessage = message.getString(ParseConstants.KEY_MESSAGE);
if (messageType.equals(ParseConstants.TYPE_IMAGE)) {
Uri fileUri = Uri.parse(file.getUrl());
Intent intent = new Intent(getActivity(), ViewImageActivity.class);
intent.setData(fileUri);
intent.putExtra(ParseConstants.KEY_SENDER_NAME, senderName);
startActivity(intent);
} else if (messageType.equals(ParseConstants.TYPE_VIDEO)) {
Uri fileUri = Uri.parse(file.getUrl());
Intent intent = new Intent(Intent.ACTION_VIEW, fileUri);
intent.setDataAndType(fileUri, "video/*");
startActivity(intent);
} else if (messageType.equals(ParseConstants.TYPE_TEXT)){
Intent messageIntent = new Intent(getActivity(), ViewMessageActivity.class);
messageIntent.putExtra(ParseConstants.KEY_MESSAGE, displayMessage);
messageIntent.putExtra(ParseConstants.KEY_SENDER_NAME, senderName);
startActivity(messageIntent);
/*AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Message from: " + senderName);
builder.setMessage(displayMessage);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
AlertDialog messageDialog = builder.create();
messageDialog.show();*/
}
// Delete message
List<String> ids = message.getList(ParseConstants.KEY_RECIPIENT_IDS);
// check count of recipients:
// - if there is only one - delete the whole message
// - if there is more than one - remove the recipient id only and save change - so other recipients can still view the message.
if (ids.size() == 1) {
// last recipient - delete the whole message!
message.deleteInBackground();
} else {
// remove the current recipient only and save
ids.remove(ParseUser.getCurrentUser().getObjectId());
ArrayList<String> idsToRemove = new ArrayList<String>();
idsToRemove.add(ParseUser.getCurrentUser().getObjectId());
message.removeAll(ParseConstants.KEY_RECIPIENT_IDS, idsToRemove);
//TODO - delete files from Parse
message.saveInBackground();
}
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
protected SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
retrieveMessages();
}
};
}