SetPresenceActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import android.os.Bundle;
  4import android.os.Handler;
  5import android.view.LayoutInflater;
  6import android.view.Menu;
  7import android.view.MenuItem;
  8import android.view.View;
  9import android.widget.ArrayAdapter;
 10import android.widget.Button;
 11import android.widget.CheckBox;
 12import android.widget.EditText;
 13import android.widget.ImageButton;
 14import android.widget.LinearLayout;
 15import android.widget.ScrollView;
 16import android.widget.Spinner;
 17import android.widget.TextView;
 18
 19import android.util.Log;
 20
 21import java.util.List;
 22import java.util.concurrent.RunnableFuture;
 23import java.util.concurrent.atomic.AtomicBoolean;
 24
 25import eu.siacs.conversations.Config;
 26import eu.siacs.conversations.R;
 27import eu.siacs.conversations.entities.Account;
 28import eu.siacs.conversations.entities.ListItem;
 29import eu.siacs.conversations.entities.Presence;
 30import eu.siacs.conversations.entities.PresenceTemplate;
 31import eu.siacs.conversations.utils.UIHelper;
 32
 33public class SetPresenceActivity extends XmppActivity implements View.OnClickListener {
 34
 35	//data
 36	protected Account mAccount;
 37	private List<PresenceTemplate> mTemplates;
 38
 39	//UI Elements
 40	protected ScrollView mScrollView;
 41	protected EditText mStatusMessage;
 42	protected Spinner mShowSpinner;
 43	protected CheckBox mAllAccounts;
 44	protected LinearLayout mTemplatesView;
 45
 46	protected void onCreate(final Bundle savedInstanceState) {
 47		super.onCreate(savedInstanceState);
 48		setContentView(R.layout.activity_set_presence);
 49		mScrollView = (ScrollView) findViewById(R.id.scroll_view);
 50		mShowSpinner = (Spinner) findViewById(R.id.presence_show);
 51		ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
 52				R.array.presence_show_options,
 53				R.layout.simple_list_item);
 54		mShowSpinner.setAdapter(adapter);
 55		mShowSpinner.setSelection(1);
 56		mStatusMessage = (EditText) findViewById(R.id.presence_status_message);
 57		mAllAccounts = (CheckBox) findViewById(R.id.all_accounts);
 58		mTemplatesView = (LinearLayout) findViewById(R.id.templates);
 59		final Button changePresence = (Button) findViewById(R.id.change_presence);
 60		changePresence.setOnClickListener(new View.OnClickListener() {
 61			@Override
 62			public void onClick(View v) {
 63				executeChangePresence();
 64			}
 65		});
 66	}
 67
 68	@Override
 69	public boolean onCreateOptionsMenu(Menu menu) {
 70		getMenuInflater().inflate(R.menu.change_presence, menu);
 71		return super.onCreateOptionsMenu(menu);
 72	}
 73
 74	@Override
 75	public boolean onOptionsItemSelected(final MenuItem item) {
 76		if (item.getItemId() == R.id.action_account_details) {
 77			if (mAccount != null) {
 78				switchToAccount(mAccount);
 79			}
 80			return true;
 81		} else {
 82			return super.onOptionsItemSelected(item);
 83		}
 84	}
 85
 86	private void executeChangePresence() {
 87		Presence.Status status = getStatusFromSpinner();
 88		boolean allAccounts = mAllAccounts.isChecked();
 89		String statusMessage = mStatusMessage.getText().toString().trim();
 90		if (allAccounts) {
 91			xmppConnectionService.changeStatus(status, statusMessage);
 92		} else if (mAccount != null) {
 93			xmppConnectionService.changeStatus(mAccount, status, statusMessage);
 94		}
 95		finish();
 96	}
 97
 98	private Presence.Status getStatusFromSpinner() {
 99		switch (mShowSpinner.getSelectedItemPosition()) {
100			case 0:
101				return Presence.Status.CHAT;
102			case 2:
103				return Presence.Status.AWAY;
104			case 3:
105				return Presence.Status.XA;
106			case 4:
107				return Presence.Status.DND;
108			default:
109				return Presence.Status.ONLINE;
110		}
111	}
112
113	private void setStatusInSpinner(Presence.Status status) {
114		switch(status) {
115			case AWAY:
116				mShowSpinner.setSelection(2);
117				break;
118			case XA:
119				mShowSpinner.setSelection(3);
120				break;
121			case CHAT:
122				mShowSpinner.setSelection(0);
123				break;
124			case DND:
125				mShowSpinner.setSelection(4);
126				break;
127			default:
128				mShowSpinner.setSelection(1);
129				break;
130		}
131	}
132
133	@Override
134	protected void refreshUiReal() {
135
136	}
137
138	@Override
139	void onBackendConnected() {
140		mAccount = extractAccount(getIntent());
141		if (mAccount != null) {
142			setStatusInSpinner(mAccount.getPresenceStatus());
143			String message = mAccount.getPresenceStatusMessage();
144			if (mStatusMessage.getText().length() == 0 && message != null) {
145				mStatusMessage.append(message);
146			}
147			mTemplates = xmppConnectionService.databaseBackend.getPresenceTemplates();
148		}
149		redrawTemplates();
150	}
151
152	private void redrawTemplates() {
153		if (mTemplates == null || mTemplates.size() == 0) {
154			mTemplatesView.setVisibility(View.GONE);
155		} else {
156			mTemplatesView.removeAllViews();
157			mTemplatesView.setVisibility(View.VISIBLE);
158			LayoutInflater inflater = getLayoutInflater();
159			for (PresenceTemplate template : mTemplates) {
160				View templateLayout = inflater.inflate(R.layout.presence_template, mTemplatesView, false);
161				templateLayout.setTag(template);
162				setListItemBackgroundOnView(templateLayout);
163				templateLayout.setOnClickListener(this);
164				TextView message = (TextView) templateLayout.findViewById(R.id.presence_status_message);
165				TextView status = (TextView) templateLayout.findViewById(R.id.status);
166				ImageButton button = (ImageButton) templateLayout.findViewById(R.id.delete_button);
167				button.setTag(template);
168				button.setOnClickListener(this);
169				ListItem.Tag tag = UIHelper.getTagForStatus(this, template.getStatus());
170				status.setText(tag.getName());
171				status.setBackgroundColor(tag.getColor());
172				message.setText(template.getStatusMessage());
173				mTemplatesView.addView(templateLayout);
174			}
175		}
176	}
177
178	@Override
179	public void onClick(View v) {
180		PresenceTemplate template = (PresenceTemplate) v.getTag();
181		if (template == null) {
182			return;
183		}
184		if (v.getId() == R.id.presence_template) {
185			setStatusInSpinner(template.getStatus());
186			mStatusMessage.getEditableText().clear();
187			mStatusMessage.getEditableText().append(template.getStatusMessage());
188			new Handler().post(new Runnable() {
189				@Override
190				public void run() {
191					mScrollView.smoothScrollTo(0,0);
192				}
193			});
194		} else if (v.getId() == R.id.delete_button) {
195			xmppConnectionService.databaseBackend.deletePresenceTemplate(template);
196			mTemplates.remove(template);
197			redrawTemplates();
198		}
199	}
200}