package org.superdry.sample.tasker.activity;
import java.util.NoSuchElementException;
import org.superdry.sample.tasker.R;
import org.superdry.sample.tasker.bundle.PluginBundleManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public final class EditStateActivity extends AbstractPluginActivity {
private ListView mList = null;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_state_activity);
final Bundle localeBundle = getIntent().getBundleExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE);
mList = ((ListView) findViewById(R.id.list));
mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, android.R.id.text1, getResources().getStringArray(R.array.display_states)));
if (null == savedInstanceState) {
if (PluginBundleManager.isStateBundleValid(localeBundle)) {
final boolean isDisplayOn = localeBundle.getBoolean(PluginBundleManager.BUNDLE_EXTRA_BOOLEAN_STATE);
final int position = getPositionForIdInArray(getApplicationContext(), R.array.display_states, isDisplayOn ? R.string.list_on : R.string.list_off);
mList.setItemChecked(position, true);
}
}
}
@Override
public void finish() {
if (!isCanceled()) {
if (AdapterView.INVALID_POSITION != mList.getCheckedItemPosition()) {
final int selectedResourceId = getResourceIdForPositionInArray(getApplicationContext(), R.array.display_states, mList.getCheckedItemPosition());
final boolean isDisplayOn = setDisplaySetting(selectedResourceId);
final Intent resultIntent = new Intent();
final Bundle resultBundle = PluginBundleManager.generateBundle(getApplicationContext(), isDisplayOn);
resultIntent.putExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE, resultBundle);
resultIntent.putExtra(com.twofortyfouram.locale.Intent.EXTRA_STRING_BLURB, generateBlurb(getApplicationContext(), isDisplayOn));
setResult(RESULT_OK, resultIntent);
}
}
super.finish();
}
static boolean setDisplaySetting(int selectedResourceId) {
if (R.string.list_on == selectedResourceId) {
return true;
} else if (R.string.list_off == selectedResourceId) {
return false;
} else {
throw new AssertionError();
}
}
static String generateBlurb(final Context context, final boolean isDisplayOn) {
if (isDisplayOn)
return context.getString(R.string.blurb_on);
return context.getString(R.string.blurb_off);
}
static int getPositionForIdInArray(final Context context, final int arrayId, final int elementId) {
TypedArray array = null;
try {
array = context.getResources().obtainTypedArray(arrayId);
for (int x = 0; x < array.length(); x++) {
if (array.getResourceId(x, 0) == elementId)
return x;
}
} finally {
if (null != array) {
array.recycle();
array = null;
}
}
throw new NoSuchElementException();
}
static int getResourceIdForPositionInArray(final Context context, final int arrayId, final int position) {
TypedArray stateArray = null;
try {
stateArray = context.getResources().obtainTypedArray(arrayId);
final int selectedResourceId = stateArray.getResourceId(position, 0);
if (0 == selectedResourceId)
throw new IndexOutOfBoundsException();
return selectedResourceId;
} finally {
if (null != stateArray) {
stateArray.recycle();
stateArray = null;
}
}
}
}