package org.wordpress.android.ui.prefs;
import java.util.List;
import java.util.Locale;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.MenuItem;
import com.justsystems.hpb.pad.R;
import org.wordpress.android.WordPress;
import org.wordpress.android.models.Blog;
import org.wordpress.android.ui.DashboardActivity;
import org.wordpress.android.util.StringUtils;
/**
* Activity for configuring blog specific settings.
*/
public class BlogPreferencesActivity extends SherlockFragmentActivity {
private String originalUsername;
private boolean mIsViewingAdmin;
/** The blog this activity is managing settings for. */
private Blog blog;
private boolean mBlogDeleted;
private EditText mUsernameET;
private EditText mPasswordET;
private EditText mHttpUsernameET;
private EditText mHttpPasswordET;
private CheckBox mFullSizeCB;
private CheckBox mScaledCB;
private CheckBox mLocationCB;
private Spinner mImageWidthSpinner;
private EditText mScaledImageWidthET;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blog_preferences);
Integer id = getIntent().getIntExtra("id", -1);
blog = WordPress.getBlog(id);
if (blog == null) {
Toast.makeText(this, getString(R.string.blog_not_found),
Toast.LENGTH_SHORT).show();
finish();
return;
}
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(StringUtils.unescapeHTML(blog.getBlogName()));
actionBar.setDisplayHomeAsUpEnabled(true);
mUsernameET = (EditText) findViewById(R.id.username);
mPasswordET = (EditText) findViewById(R.id.password);
mHttpUsernameET = (EditText) findViewById(R.id.httpuser);
mHttpPasswordET = (EditText) findViewById(R.id.httppassword);
mScaledImageWidthET = (EditText) findViewById(R.id.scaledImageWidth);
mFullSizeCB = (CheckBox) findViewById(R.id.fullSizeImage);
mScaledCB = (CheckBox) findViewById(R.id.scaledImage);
mLocationCB = (CheckBox) findViewById(R.id.location);
mImageWidthSpinner = (Spinner) findViewById(R.id.maxImageWidth);
if (blog.isDotcomFlag()) {
// Hide credentials section
RelativeLayout credentialsRL = (RelativeLayout) findViewById(R.id.sectionContent);
credentialsRL.setVisibility(View.GONE);
}
loadSettingsForBlog();
}
@Override
protected void onResume() {
super.onResume();
mIsViewingAdmin = false;
}
@Override
protected void onPause() {
super.onPause();
if (mBlogDeleted || mIsViewingAdmin)
return;
blog.setUsername(mUsernameET.getText().toString());
blog.setPassword(mPasswordET.getText().toString());
blog.setHttpuser(mHttpUsernameET.getText().toString());
blog.setHttppassword(mHttpPasswordET.getText().toString());
blog.setFullSizeImage(mFullSizeCB.isChecked());
blog.setScaledImage(mScaledCB.isChecked());
if (blog.isScaledImage()) {
EditText scaledImgWidth = (EditText) findViewById(R.id.scaledImageWidth);
boolean error = false;
int width = 0;
try {
width = Integer.parseInt(scaledImgWidth.getText().toString()
.trim());
} catch (NumberFormatException e) {
error = true;
}
if (width == 0)
error = true;
if (error) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(
BlogPreferencesActivity.this);
dialogBuilder.setTitle(getResources().getText(R.string.error));
dialogBuilder.setMessage(getResources().getText(
R.string.scaled_image_error));
dialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
dialogBuilder.setCancelable(true);
dialogBuilder.create().show();
return;
} else {
blog.setScaledImageWidth(width);
}
}
blog.setMaxImageWidth(mImageWidthSpinner.getSelectedItem().toString());
long maxImageWidthId = mImageWidthSpinner.getSelectedItemId();
int maxImageWidthIdInt = (int) maxImageWidthId;
blog.setMaxImageWidthId(maxImageWidthIdInt);
blog.setLocation(mLocationCB.isChecked());
blog.save(originalUsername);
if (WordPress.getCurrentBlog().getId() == blog.getId())
WordPress.currentBlog = blog;
// exit settings screen
Bundle bundle = new Bundle();
bundle.putString("returnStatus", "SAVE");
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemID = item.getItemId();
if (itemID == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void loadSettingsForBlog() {
// Set header labels to upper case
((TextView) findViewById(R.id.l_section1)).setText(getResources()
.getString(R.string.account_details).toUpperCase(
Locale.getDefault()));
((TextView) findViewById(R.id.l_section2)).setText(getResources()
.getString(R.string.media).toUpperCase(Locale.getDefault()));
((TextView) findViewById(R.id.l_section3)).setText(getResources()
.getString(R.string.location).toUpperCase(Locale.getDefault()));
((TextView) findViewById(R.id.l_maxImageWidth)).setText(getResources()
.getString(R.string.max_thumbnail_px_width).toUpperCase(
Locale.getDefault()));
((TextView) findViewById(R.id.l_httpuser)).setText(getResources()
.getString(R.string.http_credentials).toUpperCase(
Locale.getDefault()));
ArrayAdapter<Object> spinnerArrayAdapter = new ArrayAdapter<Object>(
this, R.layout.spinner_textview, new String[] {
"Original Size", "100", "200", "300", "400", "500",
"600", "700", "800", "900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900",
"2000" });
spinnerArrayAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mImageWidthSpinner.setAdapter(spinnerArrayAdapter);
mImageWidthSpinner
.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int position, long id) {
CheckBox fullSizeImageCheckBox = (CheckBox) findViewById(R.id.fullSizeImage);
if (id == 0) //Original size selected. Do not show the link to full image.
fullSizeImageCheckBox.setVisibility(View.GONE);
else
fullSizeImageCheckBox.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
mUsernameET.setText(blog.getUsername());
originalUsername = blog.getUsername();
mPasswordET.setText(blog.getPassword());
mHttpUsernameET.setText(blog.getHttpuser());
mHttpPasswordET.setText(blog.getHttppassword());
TextView httpUserLabel = (TextView) findViewById(R.id.l_httpuser);
if (blog.isDotcomFlag()) {
mHttpUsernameET.setVisibility(View.GONE);
mHttpPasswordET.setVisibility(View.GONE);
httpUserLabel.setVisibility(View.GONE);
} else {
mHttpUsernameET.setVisibility(View.VISIBLE);
mHttpPasswordET.setVisibility(View.VISIBLE);
httpUserLabel.setVisibility(View.VISIBLE);
}
mFullSizeCB.setChecked(blog.isFullSizeImage());
mScaledCB.setChecked(blog.isScaledImage());
this.mScaledImageWidthET.setText("" + blog.getScaledImageWidth());
showScaledSetting(blog.isScaledImage());
CheckBox scaledImage = (CheckBox) findViewById(R.id.scaledImage);
scaledImage.setChecked(false);
scaledImage.setVisibility(View.GONE);
// sets up a state listener for the scaled image checkbox
/* ((CheckBox) findViewById(R.id.scaledImage)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox scaledImage = (CheckBox) findViewById(R.id.scaledImage);
showScaledSetting(scaledImage.isChecked());
if (scaledImage.isChecked()) {
CheckBox fullSize = (CheckBox) findViewById(R.id.fullSizeImage);
fullSize.setChecked(false);
}
}
});*/
// sets up a state listener for the fullsize checkbox
CheckBox fullSizeImageCheckBox = (CheckBox) findViewById(R.id.fullSizeImage);
fullSizeImageCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox fullSize = (CheckBox) findViewById(R.id.fullSizeImage);
if (fullSize.isChecked()) {
CheckBox scaledImage = (CheckBox) findViewById(R.id.scaledImage);
if (scaledImage.isChecked()) {
scaledImage.setChecked(false);
showScaledSetting(false);
}
}
}
});
// don't show location option for devices that have no location support.
boolean hasLocationProvider = false;
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
List<String> providers = locationManager.getProviders(true);
for (String providerName : providers) {
if (providerName.equals(LocationManager.GPS_PROVIDER)
|| providerName.equals(LocationManager.NETWORK_PROVIDER)) {
hasLocationProvider = true;
}
}
if (hasLocationProvider) {
mLocationCB.setChecked(blog.isLocation());
} else {
mLocationCB.setChecked(false);
RelativeLayout locationLayout = (RelativeLayout) findViewById(R.id.sectionLocation);
locationLayout.setVisibility(View.GONE);
}
mImageWidthSpinner.setSelection(blog.getMaxImageWidthId());
if (blog.getMaxImageWidthId() == 0) //Original size selected. Do not show the link to full image.
fullSizeImageCheckBox.setVisibility(View.GONE);
else
fullSizeImageCheckBox.setVisibility(View.VISIBLE);
}
/**
* Hides / shows the scaled image settings
*
* @param show
*/
private void showScaledSetting(boolean show) {
TextView tw = (TextView) findViewById(R.id.l_scaledImage);
EditText et = (EditText) findViewById(R.id.scaledImageWidth);
tw.setVisibility(show ? View.VISIBLE : View.GONE);
et.setVisibility(show ? View.VISIBLE : View.GONE);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation change
super.onConfigurationChanged(newConfig);
}
/**
* Remove the blog this activity is managing settings for.
*/
public void removeBlog(View view) {
final BlogPreferencesActivity activity = this;
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setTitle(getResources().getText(R.string.remove_account));
dialogBuilder.setMessage(getResources().getText(
R.string.sure_to_remove_account));
dialogBuilder.setPositiveButton(getResources().getText(R.string.yes),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
boolean deleteSuccess = WordPress.wpDB.deleteAccount(
BlogPreferencesActivity.this, blog.getId());
if (deleteSuccess) {
Toast.makeText(
activity,
getResources().getText(
R.string.blog_removed_successfully),
Toast.LENGTH_SHORT).show();
WordPress.wpDB
.deleteLastBlogId(BlogPreferencesActivity.this);
WordPress.currentBlog = null;
mBlogDeleted = true;
activity.finish();
} else {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(
activity);
dialogBuilder.setTitle(getResources().getText(
R.string.error));
dialogBuilder.setMessage(getResources().getText(
R.string.could_not_remove_account));
dialogBuilder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int whichButton) {
// just close the dialog
}
});
dialogBuilder.setCancelable(true);
dialogBuilder.create().show();
}
}
});
dialogBuilder.setNegativeButton(getResources().getText(R.string.no),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// just close the window
}
});
dialogBuilder.setCancelable(false);
dialogBuilder.create().show();
}
/**
* View the blog admin area in the web browser
*/
public void viewAdmin(View view) {
mIsViewingAdmin = true;
Intent i = new Intent(this, DashboardActivity.class);
i.putExtra("blogID", blog.getId());
startActivity(i);
}
}