aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/prefs/BlogPreferencesActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/prefs/BlogPreferencesActivity.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/prefs/BlogPreferencesActivity.java354
1 files changed, 354 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/prefs/BlogPreferencesActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/prefs/BlogPreferencesActivity.java
new file mode 100644
index 000000000..41a5417dc
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/prefs/BlogPreferencesActivity.java
@@ -0,0 +1,354 @@
+package org.wordpress.android.ui.prefs;
+
+import android.app.AlertDialog;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import org.wordpress.android.R;
+import org.wordpress.android.WordPress;
+import org.wordpress.android.models.AccountHelper;
+import org.wordpress.android.models.Blog;
+import org.wordpress.android.networking.ConnectionChangeReceiver;
+import org.wordpress.android.ui.stats.StatsWidgetProvider;
+import org.wordpress.android.ui.stats.datasets.StatsTable;
+import org.wordpress.android.util.AnalyticsUtils;
+import org.wordpress.android.util.CoreEvents.UserSignedOutCompletely;
+import org.wordpress.android.util.StringUtils;
+import org.wordpress.android.util.ToastUtils;
+
+import de.greenrobot.event.EventBus;
+
+/**
+ * Activity for configuring blog specific settings.
+ */
+public class BlogPreferencesActivity extends AppCompatActivity {
+ public static final String ARG_LOCAL_BLOG_ID = SiteSettingsFragment.ARG_LOCAL_BLOG_ID;
+ public static final int RESULT_BLOG_REMOVED = RESULT_FIRST_USER;
+
+ private static final String KEY_SETTINGS_FRAGMENT = "settings-fragment";
+
+ // 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 Spinner mImageWidthSpinner;
+ private EditText mScaledImageWidthET;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Integer id = getIntent().getIntExtra(ARG_LOCAL_BLOG_ID, -1);
+ blog = WordPress.getBlog(id);
+ if (WordPress.getBlog(id) == null) {
+ Toast.makeText(this, getString(R.string.blog_not_found), Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+
+ if (blog.isDotcomFlag()) {
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setHomeButtonEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+
+ FragmentManager fragmentManager = getFragmentManager();
+ Fragment siteSettingsFragment = fragmentManager.findFragmentByTag(KEY_SETTINGS_FRAGMENT);
+
+ if (siteSettingsFragment == null) {
+ siteSettingsFragment = new SiteSettingsFragment();
+ siteSettingsFragment.setArguments(getIntent().getExtras());
+ fragmentManager.beginTransaction()
+ .replace(android.R.id.content, siteSettingsFragment, KEY_SETTINGS_FRAGMENT)
+ .commit();
+ }
+ } else {
+ setContentView(R.layout.blog_preferences);
+
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setTitle(StringUtils.unescapeHTML(blog.getNameOrHostUrl()));
+ 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);
+ mImageWidthSpinner = (Spinner) findViewById(R.id.maxImageWidth);
+ Button removeBlogButton = (Button) findViewById(R.id.remove_account);
+
+ // remove blog & credentials apply only to dot org
+ if (blog.isDotcomFlag()) {
+ View credentialsRL = findViewById(R.id.sectionContent);
+ credentialsRL.setVisibility(View.GONE);
+ removeBlogButton.setVisibility(View.GONE);
+ } else {
+ removeBlogButton.setVisibility(View.VISIBLE);
+ removeBlogButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ removeBlogWithConfirmation();
+ }
+ });
+ }
+
+ loadSettingsForBlog();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ if (blog.isDotcomFlag() || mBlogDeleted) {
+ 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());
+
+ WordPress.wpDB.saveBlog(blog);
+
+ if (WordPress.getCurrentBlog().getLocalTableBlogId() == blog.getLocalTableBlogId()) {
+ WordPress.currentBlog = blog;
+ }
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
+ protected void onStop() {
+ EventBus.getDefault().unregister(this);
+ super.onStop();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int itemID = item.getItemId();
+ if (itemID == android.R.id.home) {
+ finish();
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ @SuppressWarnings("unused")
+ public void onEventMainThread(ConnectionChangeReceiver.ConnectionChangeEvent event) {
+ FragmentManager fragmentManager = getFragmentManager();
+ SiteSettingsFragment siteSettingsFragment =
+ (SiteSettingsFragment) fragmentManager.findFragmentByTag(KEY_SETTINGS_FRAGMENT);
+
+ if (siteSettingsFragment != null) {
+ if (!event.isConnected()) {
+ ToastUtils.showToast(this, getString(R.string.site_settings_disconnected_toast));
+ }
+ siteSettingsFragment.setEditingEnabled(event.isConnected());
+
+ // TODO: add this back when delete blog is back
+ //https://github.com/wordpress-mobile/WordPress-Android/commit/6a90e3fe46e24ee40abdc4a7f8f0db06f157900c
+ // Checks for stats widgets that were synched with a blog that could be gone now.
+// StatsWidgetProvider.updateWidgetsOnLogout(this);
+ }
+ }
+
+ private void loadSettingsForBlog() {
+ ArrayAdapter<Object> spinnerArrayAdapter = new ArrayAdapter<Object>(this,
+ R.layout.simple_spinner_item, 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);
+ // Original size selected. Do not show the link to full image.
+ if (id == 0) {
+ fullSizeImageCheckBox.setVisibility(View.GONE);
+ } else {
+ fullSizeImageCheckBox.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> arg0) {
+ }
+ });
+
+ mUsernameET.setText(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 full-size 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);
+ }
+ }
+ }
+ });
+
+ int imageWidthPosition = spinnerArrayAdapter.getPosition(blog.getMaxImageWidth());
+ mImageWidthSpinner.setSelection((imageWidthPosition >= 0) ? imageWidthPosition : 0);
+ if (mImageWidthSpinner.getSelectedItemPosition() ==
+ 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
+ */
+ 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);
+ }
+
+ /**
+ * Remove the blog this activity is managing settings for.
+ */
+ private void removeBlogWithConfirmation() {
+ 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) {
+ removeBlog();
+ }
+ });
+ dialogBuilder.setNegativeButton(getResources().getText(R.string.no), null);
+ dialogBuilder.setCancelable(false);
+ dialogBuilder.create().show();
+ }
+
+ private void removeBlog() {
+ if (WordPress.wpDB.deleteBlog(this, blog.getLocalTableBlogId())) {
+ StatsTable.deleteStatsForBlog(this,blog.getLocalTableBlogId()); // Remove stats data
+ AnalyticsUtils.refreshMetadata();
+ ToastUtils.showToast(this, R.string.blog_removed_successfully);
+ WordPress.wpDB.deleteLastBlogId();
+ WordPress.currentBlog = null;
+ mBlogDeleted = true;
+ setResult(RESULT_BLOG_REMOVED);
+
+ // If the last blog is removed and the user is not signed in wpcom, broadcast a UserSignedOut event
+ if (!AccountHelper.isSignedIn()) {
+ EventBus.getDefault().post(new UserSignedOutCompletely());
+ }
+
+ // Checks for stats widgets that were synched with a blog that could be gone now.
+ StatsWidgetProvider.updateWidgetsOnLogout(this);
+
+ finish();
+ } else {
+ AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
+ dialogBuilder.setTitle(getResources().getText(R.string.error));
+ dialogBuilder.setMessage(getResources().getText(R.string.could_not_remove_account));
+ dialogBuilder.setPositiveButton("OK", null);
+ dialogBuilder.setCancelable(true);
+ dialogBuilder.create().show();
+ }
+ }
+}