package com.magnet.demo.mmx.soapbox;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.magnet.mmx.client.api.MMXChannel;
import com.magnet.mmx.client.common.TopicExistsException;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicBoolean;
public class AddChannelActivity extends Activity {
private static final String TAG = AddChannelActivity.class.getSimpleName();
private EditText mChannelName = null;
private ListView mTagList = null;
private String[] mTagArray = null;
private AtomicBoolean mSaving = new AtomicBoolean(false);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_channel_add);
mTagArray = getResources().getStringArray(R.array.channel_tags);
mChannelName = (EditText) findViewById(R.id.channelName);
mTagList = (ListView) findViewById(R.id.tagList);
mTagList.setAdapter(
new ArrayAdapter<String>(this, R.layout.simple_list_item_checked, mTagArray));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_channel_add, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void doCancel(View view) {
finish();
}
public void updateView() {
runOnUiThread(new Runnable() {
public void run() {
boolean disableViews = mSaving.get();
mChannelName.setEnabled(!disableViews);
mTagList.setEnabled(!disableViews);
}
});
}
public void doSave(View view) {
if (mSaving.compareAndSet(false, true)) {
final String channelName = mChannelName.getText().toString();
if (channelName.isEmpty()) {
mChannelName.setError(getString(R.string.error_channel_name_required));
return;
}
MMXChannel.create(channelName, channelName, true, MMXChannel.PublishPermission.ANYONE,
new MMXChannel.OnFinishedListener<MMXChannel>() {
public void onSuccess(MMXChannel mmxChannel) {
//add tags
SparseBooleanArray checkedPositions = mTagList.getCheckedItemPositions();
final HashSet<String> tags = new HashSet<String>();
for (int i = 0; i < checkedPositions.size(); i++) {
int position = checkedPositions.keyAt(i);
boolean checked = checkedPositions.valueAt(i);
if (checked) {
Log.d(TAG, "create(): adding tag: " + mTagArray[position]);
tags.add(mTagArray[position]);
}
}
if (tags.size() > 0) {
mmxChannel.setTags(tags, new MMXChannel.OnFinishedListener<Void>() {
public void onSuccess(Void aVoid) {
mSaving.set(false);
AddChannelActivity.this.finish();
}
public void onFailure(MMXChannel.FailureCode failureCode, Throwable throwable) {
Toast.makeText(AddChannelActivity.this, "Channel '" + channelName +
"' created, but unable to add tags: " + throwable.getMessage(),
Toast.LENGTH_LONG).show();
mSaving.set(false);
AddChannelActivity.this.finish();
}
});
updateView();
} else {
mSaving.set(false);
AddChannelActivity.this.finish();
}
}
public void onFailure(MMXChannel.FailureCode failureCode, final Throwable throwable) {
if (throwable instanceof TopicExistsException) {
mChannelName.setError(getString(R.string.error_channel_already_exists));
} else if (throwable.getCause() instanceof TopicExistsException) {
mChannelName.setError(throwable.getMessage());
}
updateView();
mSaving.set(false);
}
});
updateView();
}
}
}