diff options
Diffstat (limited to 'src/de/gultsch/chat/ui/ConversationActivity.java')
-rw-r--r-- | src/de/gultsch/chat/ui/ConversationActivity.java | 484 |
1 files changed, 0 insertions, 484 deletions
diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java deleted file mode 100644 index 88d30bc5..00000000 --- a/src/de/gultsch/chat/ui/ConversationActivity.java +++ /dev/null @@ -1,484 +0,0 @@ -package de.gultsch.chat.ui; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.openintents.openpgp.OpenPgpSignatureResult; -import org.openintents.openpgp.util.OpenPgpConstants; - -import de.gultsch.chat.R; -import de.gultsch.chat.R.id; -import de.gultsch.chat.crypto.PgpEngine; -import de.gultsch.chat.crypto.PgpEngine.UserInputRequiredException; -import de.gultsch.chat.entities.Account; -import de.gultsch.chat.entities.Contact; -import de.gultsch.chat.entities.Conversation; -import de.gultsch.chat.entities.Message; -import de.gultsch.chat.utils.UIHelper; -import android.net.Uri; -import android.os.Bundle; -import android.app.AlertDialog; -import android.app.FragmentTransaction; -import android.app.NotificationManager; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentSender.SendIntentException; -import android.graphics.Typeface; -import android.support.v4.widget.SlidingPaneLayout; -import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener; -import android.util.Log; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.PopupMenu; -import android.widget.PopupMenu.OnMenuItemClickListener; -import android.widget.TextView; -import android.widget.ImageView; - -public class ConversationActivity extends XmppActivity { - - public static final String VIEW_CONVERSATION = "viewConversation"; - public static final String CONVERSATION = "conversationUuid"; - - public static final int REQUEST_SEND_MESSAGE = 0x75441; - public static final int REQUEST_DECRYPT_PGP = 0x76783; - - protected SlidingPaneLayout spl; - - private List<Conversation> conversationList = new ArrayList<Conversation>(); - private Conversation selectedConversation = null; - private ListView listView; - - private boolean paneShouldBeOpen = true; - private ArrayAdapter<Conversation> listAdapter; - - private OnConversationListChangedListener onConvChanged = new OnConversationListChangedListener() { - - @Override - public void onConversationListChanged() { - final Conversation currentConv = getSelectedConversation(); - conversationList.clear(); - conversationList.addAll(xmppConnectionService - .getConversations()); - runOnUiThread(new Runnable() { - - @Override - public void run() { - updateConversationList(); - if(paneShouldBeOpen) { - if (conversationList.size() >= 1) { - swapConversationFragment(); - } else { - startActivity(new Intent(getApplicationContext(), NewConversationActivity.class)); - finish(); - } - } - ConversationFragment selectedFragment = (ConversationFragment) getFragmentManager().findFragmentByTag("conversation"); - if (selectedFragment!=null) { - selectedFragment.updateMessages(); - } - } - }); - } - }; - - private DialogInterface.OnClickListener addToRoster = new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - String jid = getSelectedConversation().getContactJid(); - Account account = getSelectedConversation().getAccount(); - String name = jid.split("@")[0]; - Contact contact = new Contact(account, name, jid, null); - xmppConnectionService.createContact(contact); - } - }; - private boolean contactInserted = false; - - - public List<Conversation> getConversationList() { - return this.conversationList; - } - - public Conversation getSelectedConversation() { - return this.selectedConversation; - } - - public ListView getConversationListView() { - return this.listView; - } - - public SlidingPaneLayout getSlidingPaneLayout() { - return this.spl; - } - - public boolean shouldPaneBeOpen() { - return paneShouldBeOpen; - } - - public void updateConversationList() { - if (conversationList.size() >= 1) { - Collections.sort(this.conversationList, new Comparator<Conversation>() { - @Override - public int compare(Conversation lhs, Conversation rhs) { - return (int) (rhs.getLatestMessage().getTimeSent() - lhs.getLatestMessage().getTimeSent()); - } - }); - } - this.listView.invalidateViews(); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - setContentView(R.layout.fragment_conversations_overview); - - listView = (ListView) findViewById(R.id.list); - - this.listAdapter = new ArrayAdapter<Conversation>(this, - R.layout.conversation_list_row, conversationList) { - @Override - public View getView(int position, View view, ViewGroup parent) { - if (view == null) { - LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); - view = (View) inflater.inflate( - R.layout.conversation_list_row, null); - } - Conversation conv = getItem(position); - TextView convName = (TextView) view.findViewById(R.id.conversation_name); - convName.setText(conv.getName()); - TextView convLastMsg = (TextView) view.findViewById(R.id.conversation_lastmsg); - convLastMsg.setText(conv.getLatestMessage().getBody()); - - if(!conv.isRead()) { - convName.setTypeface(null,Typeface.BOLD); - convLastMsg.setTypeface(null,Typeface.BOLD); - } else { - convName.setTypeface(null,Typeface.NORMAL); - convLastMsg.setTypeface(null,Typeface.NORMAL); - } - - ((TextView) view.findViewById(R.id.conversation_lastupdate)) - .setText(UIHelper.readableTimeDifference(getItem(position).getLatestMessage().getTimeSent())); - - Uri profilePhoto = getItem(position).getProfilePhotoUri(); - ImageView imageView = (ImageView) view.findViewById(R.id.conversation_image); - if (profilePhoto!=null) { - imageView.setImageURI(profilePhoto); - } else { - imageView.setImageBitmap(UIHelper.getUnknownContactPicture(getItem(position).getName(),200)); - } - - - ((ImageView) view.findViewById(R.id.conversation_image)) - .setImageURI(getItem(position).getProfilePhotoUri()); - return view; - } - - }; - - listView.setAdapter(this.listAdapter); - - listView.setOnItemClickListener(new OnItemClickListener() { - - @Override - public void onItemClick(AdapterView<?> arg0, View clickedView, - int position, long arg3) { - paneShouldBeOpen = false; - if (selectedConversation != conversationList.get(position)) { - selectedConversation = conversationList.get(position); - swapConversationFragment(); //.onBackendConnected(conversationList.get(position)); - } else { - spl.closePane(); - } - } - }); - spl = (SlidingPaneLayout) findViewById(id.slidingpanelayout); - spl.setParallaxDistance(150); - spl.setShadowResource(R.drawable.es_slidingpane_shadow); - spl.setSliderFadeColor(0); - spl.setPanelSlideListener(new PanelSlideListener() { - - @Override - public void onPanelOpened(View arg0) { - paneShouldBeOpen = true; - getActionBar().setDisplayHomeAsUpEnabled(false); - getActionBar().setTitle(R.string.app_name); - invalidateOptionsMenu(); - - InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - - View focus = getCurrentFocus(); - - if (focus != null) { - - inputManager.hideSoftInputFromWindow( - focus.getWindowToken(), - InputMethodManager.HIDE_NOT_ALWAYS); - } - } - - @Override - public void onPanelClosed(View arg0) { - paneShouldBeOpen = false; - if (conversationList.size() > 0) { - getActionBar().setDisplayHomeAsUpEnabled(true); - getActionBar().setTitle(getSelectedConversation().getName()); - invalidateOptionsMenu(); - if (!getSelectedConversation().isRead()) { - getSelectedConversation().markRead(); - updateConversationList(); - } - } - } - - @Override - public void onPanelSlide(View arg0, float arg1) { - // TODO Auto-generated method stub - - } - }); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.conversations, menu); - MenuItem menuSecure = (MenuItem) menu.findItem(R.id.action_security); - - if (spl.isOpen()) { - ((MenuItem) menu.findItem(R.id.action_archive)).setVisible(false); - ((MenuItem) menu.findItem(R.id.action_details)).setVisible(false); - menuSecure.setVisible(false); - } else { - ((MenuItem) menu.findItem(R.id.action_add)).setVisible(false); - if (this.getSelectedConversation()!=null) { - if (this.getSelectedConversation().getMode() == Conversation.MODE_MULTI) { - ((MenuItem) menu.findItem(R.id.action_security)).setVisible(false); - menuSecure.setVisible(false); - ((MenuItem) menu.findItem(R.id.action_archive)).setTitle("Leave conference"); - } else { - if (this.getSelectedConversation().getLatestMessage().getEncryption() != Message.ENCRYPTION_NONE) { - menuSecure.setIcon(R.drawable.ic_action_secure); - } - } - } - } - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - spl.openPane(); - break; - case R.id.action_settings: - startActivity(new Intent(this, SettingsActivity.class)); - break; - case R.id.action_accounts: - startActivity(new Intent(this, ManageAccountActivity.class)); - break; - case R.id.action_add: - startActivity(new Intent(this, NewConversationActivity.class)); - break; - case R.id.action_archive: - Conversation conv = getSelectedConversation(); - conv.setStatus(Conversation.STATUS_ARCHIVED); - paneShouldBeOpen = true; - spl.openPane(); - xmppConnectionService.archiveConversation(conv); - selectedConversation = conversationList.get(0); - break; - case R.id.action_details: - DialogContactDetails details = new DialogContactDetails(); - Contact contact = this.getSelectedConversation().getContact(); - if (contact != null) { - contact.setAccount(this.selectedConversation.getAccount()); - details.setContact(contact); - details.show(getFragmentManager(), "details"); - } else { - String jid = getSelectedConversation().getContactJid(); - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(jid); - builder.setMessage("The contact is not in your roster. Would you like to add it."); - builder.setNegativeButton("Cancel", null); - builder.setPositiveButton("Add",addToRoster); - builder.create().show(); - } - break; - case R.id.action_security: - final Conversation selConv = getSelectedConversation(); - View menuItemView = findViewById(R.id.action_security); - PopupMenu popup = new PopupMenu(this, menuItemView); - final ConversationFragment fragment = (ConversationFragment) getFragmentManager().findFragmentByTag("conversation"); - if (fragment!=null) { - popup.setOnMenuItemClickListener(new OnMenuItemClickListener() { - - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.encryption_choice_none: - selConv.nextMessageEncryption = Message.ENCRYPTION_NONE; - item.setChecked(true); - break; - case R.id.encryption_choice_otr: - selConv.nextMessageEncryption = Message.ENCRYPTION_OTR; - item.setChecked(true); - break; - case R.id.encryption_choice_pgp: - selConv.nextMessageEncryption = Message.ENCRYPTION_PGP; - item.setChecked(true); - break; - default: - selConv.nextMessageEncryption = Message.ENCRYPTION_NONE; - break; - } - fragment.updateChatMsgHint(); - return true; - } - }); - popup.inflate(R.menu.encryption_choices); - switch (selConv.nextMessageEncryption) { - case Message.ENCRYPTION_NONE: - popup.getMenu().findItem(R.id.encryption_choice_none).setChecked(true); - break; - case Message.ENCRYPTION_OTR: - popup.getMenu().findItem(R.id.encryption_choice_otr).setChecked(true); - break; - case Message.ENCRYPTION_PGP: - popup.getMenu().findItem(R.id.encryption_choice_pgp).setChecked(true); - break; - case Message.ENCRYPTION_DECRYPTED: - popup.getMenu().findItem(R.id.encryption_choice_pgp).setChecked(true); - break; - default: - popup.getMenu().findItem(R.id.encryption_choice_none).setChecked(true); - break; - } - popup.show(); - } - - break; - default: - break; - } - return super.onOptionsItemSelected(item); - } - - protected ConversationFragment swapConversationFragment() { - ConversationFragment selectedFragment = new ConversationFragment(); - - FragmentTransaction transaction = getFragmentManager() - .beginTransaction(); - transaction.replace(R.id.selected_conversation, selectedFragment,"conversation"); - transaction.commit(); - return selectedFragment; - } - - @Override - public boolean onKeyDown(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) { - if (!spl.isOpen()) { - spl.openPane(); - return false; - } - } - return super.onKeyDown(keyCode, event); - } - - public void onStart() { - super.onStart(); - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancelAll(); - if (conversationList.size()>=1) { - onConvChanged.onConversationListChanged(); - } - } - - @Override - protected void onStop() { - Log.d("gultsch","called on stop in conversation activity"); - if (xmppConnectionServiceBound) { - xmppConnectionService.removeOnConversationListChangedListener(); - } - super.onStop(); - } - - @Override - void onBackendConnected() { - - xmppConnectionService.setOnConversationListChangedListener(this.onConvChanged); - - if (conversationList.size()==0) { - conversationList.clear(); - conversationList.addAll(xmppConnectionService - .getConversations()); - - this.updateConversationList(); - } - - if ((getIntent().getAction().equals(Intent.ACTION_VIEW) && (!handledViewIntent))) { - if (getIntent().getType().equals( - ConversationActivity.VIEW_CONVERSATION)) { - handledViewIntent = true; - - String convToView = (String) getIntent().getExtras().get(CONVERSATION); - - for(int i = 0; i < conversationList.size(); ++i) { - if (conversationList.get(i).getUuid().equals(convToView)) { - selectedConversation = conversationList.get(i); - } - } - paneShouldBeOpen = false; - swapConversationFragment(); - } - } else { - if (xmppConnectionService.getAccounts().size() == 0) { - startActivity(new Intent(this, ManageAccountActivity.class)); - finish(); - } else if (conversationList.size() <= 0) { - //add no history - startActivity(new Intent(this, NewConversationActivity.class)); - finish(); - } else { - spl.openPane(); - //find currently loaded fragment - ConversationFragment selectedFragment = (ConversationFragment) getFragmentManager().findFragmentByTag("conversation"); - if (selectedFragment!=null) { - Log.d("gultsch","ConversationActivity. found old fragment."); - selectedFragment.onBackendConnected(); - } else { - Log.d("gultsch","conversationactivity. no old fragment found. creating new one"); - selectedConversation = conversationList.get(0); - Log.d("gultsch","selected conversation is #"+selectedConversation); - swapConversationFragment(); - } - } - } - } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (resultCode == RESULT_OK) { - if (requestCode == REQUEST_DECRYPT_PGP) { - ConversationFragment selectedFragment = (ConversationFragment) getFragmentManager().findFragmentByTag("conversation"); - if (selectedFragment!=null) { - selectedFragment.hidePgpPassphraseBox(); - } - } - } - } -} |