org.transdroid.core.seedbox.XirvikSharedSettingsActivity.java Source code

Java tutorial

Introduction

Here is the source code for org.transdroid.core.seedbox.XirvikSharedSettingsActivity.java

Source

/* 
 * Copyright 2010-2013 Eric Kok et al.
 * 
 * Transdroid is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Transdroid is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Transdroid.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.transdroid.core.seedbox;

import java.io.InputStream;

import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.transdroid.core.R;
import org.transdroid.core.gui.log.Log;
import org.transdroid.core.gui.navigation.NavigationHelper;
import org.transdroid.core.gui.settings.KeyBoundPreferencesActivity;
import org.transdroid.core.gui.settings.*;
import org.transdroid.daemon.util.HttpHelper;

import android.annotation.TargetApi;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceManager;
import de.keyboardsurfer.android.widget.crouton.Crouton;

/**
 * Activity that allows for the configuration of a Xirvik shared seedbox. The key can be supplied to update an existing
 * server setting instead of creating a new one.
 * @author Eric Kok
 */
@EActivity
@OptionsMenu(resName = "activity_deleteableprefs")
public class XirvikSharedSettingsActivity extends KeyBoundPreferencesActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getActionBar().setDisplayHomeAsUpEnabled(true);

        // Load the raw preferences to show in this screen
        init(R.xml.pref_seedbox_xirvikshared, SeedboxProvider.XirvikShared.getSettings()
                .getMaxSeedboxOrder(PreferenceManager.getDefaultSharedPreferences(this)));
        initTextPreference("seedbox_xirvikshared_name");
        initTextPreference("seedbox_xirvikshared_server");
        initTextPreference("seedbox_xirvikshared_user");
        initTextPreference("seedbox_xirvikshared_pass");
        initTextPreference("seedbox_xirvikshared_rpc");

    }

    @Override
    protected void onPreferencesChanged() {

        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                try {

                    // When the shared server settings change, we also have to update the RPC mount point to use
                    SharedPreferences prefs = PreferenceManager
                            .getDefaultSharedPreferences(XirvikSharedSettingsActivity.this);
                    String server = prefs.getString("seedbox_xirvikshared_server_" + key, null);
                    String user = prefs.getString("seedbox_xirvikshared_user_" + key, null);
                    String pass = prefs.getString("seedbox_xirvikshared_pass_" + key, null);

                    // Retrieve the RPC mount point setting from the server itself
                    DefaultHttpClient httpclient = HttpHelper.createStandardHttpClient(true, user, pass, true, null,
                            HttpHelper.DEFAULT_CONNECTION_TIMEOUT, server, 443);
                    String url = "https://" + server + ":443/browsers_addons/transdroid_autoconf.txt";
                    HttpResponse request = httpclient.execute(new HttpGet(url));
                    InputStream stream = request.getEntity().getContent();
                    String folder = HttpHelper.convertStreamToString(stream).trim();
                    if (folder.startsWith("<?xml")) {
                        folder = null;
                    }
                    stream.close();
                    return folder;

                } catch (Exception e) {

                    Log.d(XirvikSharedSettingsActivity.this,
                            "Could not retrieve the Xirvik shared seedbox RPC mount point setting: "
                                    + e.toString());
                    return null;

                }
            }

            @Override
            protected void onPostExecute(String result) {
                storeScgiMountFolder(result);
            }
        }.execute();

    }

    @SuppressWarnings("deprecation")
    protected void storeScgiMountFolder(String result) {
        Editor edit = PreferenceManager.getDefaultSharedPreferences(XirvikSharedSettingsActivity.this).edit();
        EditTextPreference pref = (EditTextPreference) findPreference("seedbox_xirvikshared_rpc_" + key);
        if (result == null) {
            Crouton.showText(this, R.string.pref_seedbox_xirviknofolder, NavigationHelper.CROUTON_ERROR_STYLE);
            edit.remove("seedbox_xirvikshared_rpc_" + key);
            pref.setSummary("");
        } else {
            edit.putString("seedbox_xirvikshared_rpc_" + key, result);
            pref.setSummary(result);
        }
        edit.commit();
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @OptionsItem(android.R.id.home)
    protected void navigateUp() {
        MainSettingsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
    }

    @OptionsItem(resName = "action_removesettings")
    protected void removeSettings() {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        SeedboxProvider.XirvikShared.getSettings().removeServerSetting(prefs, key);
        finish();
    }

}