com.tinfoil.sms.settings.QuickPrefsActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.tinfoil.sms.settings.QuickPrefsActivity.java

Source

/** 
 * Copyright (C) 2013 Jonathan Gillett, Joseph Heron
 * 
 * This program 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.
 *
 * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.tinfoil.sms.settings;

import android.annotation.TargetApi;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;

import com.tinfoil.sms.R;
import com.tinfoil.sms.utility.SMSUtility;
import com.tinfoil.sms.utility.Walkthrough;

public class QuickPrefsActivity extends PreferenceActivity {

    public static final String ENABLE_SETTING_KEY = "enable";
    public static final String ENABLE_WALKTHROUGH_SETTING_KEY = "enable_walkthrough";
    public static final String NATIVE_SAVE_SETTING_KEY = "native_save";
    public static final String MESSAGE_LIMIT_SETTING_KEY = "message_limit";
    public static final String IMPORT_CONTACT_SETTING_KEY = "import_contacts";
    public static final String MANAGE_CONTACTS_SETTING_KEY = "manage_contacts";
    public static final String SHOW_ENCRYPT_SETTING_KEY = "show_encrypt";
    public static final String PUBLIC_KEY_SETTING_KEY = "public_key";
    public static final String NOTIFICATION_BAR_SETTING_KEY = "notification_bar";
    public static final String VIBRATE_SETTING_KEY = "vibrate";
    public static final String VIBRATE_LENGTH_SETTING_KEY = "vibrate_length_settings";
    public static final String RINGTONE_SETTING_KEY = "ringtone_settings";
    public static final String BUGSENSE_ENABLE_SETTING_KEY = "bugsense_enable";
    public static final String SOURCE_CODE_SETTING_KEY = "source_code";
    public static final String REVERSE_MESSAGE_ORDERING_KEY = "list_order";
    //public static final String messageLimitKey = 

    /**
     * Things done when the preference menu is created  
     * Left as default
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setupActionBar();
        /*
         * Add preferences from the options.xml file.
         */
        addPreferencesFromResource(R.xml.options);

        setKitKatPref();

        PreferenceScreen sourceCode = (PreferenceScreen) findPreference(SOURCE_CODE_SETTING_KEY);
        sourceCode.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference) {
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(QuickPrefsActivity.this.getString(R.string.tinfoil_sms_github)));
                QuickPrefsActivity.this.startActivity(i);

                return true;
            }

        });

        EditTextPreference vibrateLength = (EditTextPreference) findPreference(VIBRATE_LENGTH_SETTING_KEY);
        vibrateLength.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                boolean ret = false;

                try {
                    if (SMSUtility.isASmallNumber(newValue.toString())
                            && Integer.valueOf(newValue.toString()) > 0) {
                        ret = true;
                    }
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
                return ret;
            }

        });

        //TODO implement the OnPreferenceChangeListener for the other preferences that use numbers only
        EditTextPreference messageLimit = (EditTextPreference) findPreference(MESSAGE_LIMIT_SETTING_KEY);
        messageLimit.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                boolean ret = false;

                try {
                    if (SMSUtility.isASmallNumber(newValue.toString())
                            && Integer.valueOf(newValue.toString()) > 0) {
                        ret = true;
                    }
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
                return ret;
            }
        });

        findPreference("enable_walkthrough").setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                // If walkthrough enabled, reset all the steps so they are displayed again
                if (Boolean.valueOf(newValue.toString())) {
                    Walkthrough.enableWalkthrough(QuickPrefsActivity.this);
                } else {
                    Walkthrough.disableWalkthrough(QuickPrefsActivity.this);
                }
                return true;
            }
        });

        /* Set an onclick listener for contact developers */
        findPreference("contact").setOnPreferenceClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                /**
                 * Create the Intent
                 */
                final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

                /**
                 * Fill it with Data
                 */
                emailIntent.setType("plain/text");
                emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
                        QuickPrefsActivity.this.getResources().getStringArray(R.array.dev_emails));
                emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                        getResources().getString(R.string.email_subject));
                emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "");

                /**
                 * Send it off to the Activity-Chooser
                 */
                QuickPrefsActivity.this.startActivity(Intent.createChooser(emailIntent,
                        QuickPrefsActivity.this.getResources().getString(R.string.email_chooser)));
                return true;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, 0, 0, "Show current settings");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            // This ID represents the Home or Up button. In the case of this
            // activity, the Up button is shown. Use NavUtils to allow users
            // to navigate up one level in the application structure. For
            // more details, see the Navigation pattern on Android Design:
            //
            // http://developer.android.com/design/patterns/navigation.html#up-vs-back
            //
            NavUtils.navigateUpFromSameTask(this);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    /**
    * Set up the {@link android.app.ActionBar}, if the API is available.
    */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    private void setKitKatPref() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            CheckBoxPreference p = (CheckBoxPreference) findPreference(NATIVE_SAVE_SETTING_KEY);
            p.setChecked(false);
            p.setEnabled(false);
        }
    }
}