Create email preference dialog
Description
The following code shows how to create preference dialog for email value.
Example
res/xml/prefs.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2012 Manning
See the file license.txt for copying permission.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="pref_first_preferencescreen_key"
android:title="Preferences">
<PreferenceCategory
android:title="User">
<EditTextPreference
android:key="pref_username"
android:summary="Username:"
android:title="Username"/>
</PreferenceCategory>
<PreferenceCategory
android:title="Application">
<Preference
android:key="pref_rate"
android:summary="Rate the app in the store!"
android:title="Rate the app"/>
<Preference
android:key="pref_share"
android:summary="Share the app with your friends"
android:title="Share it"/>
<com.manning.androidhacks.hack004.preference.EmailDialog
android:dialogIcon="@drawable/ic_launcher"
android:dialogTitle="Send Feedback"
android:dialogMessage="Do you want to send an email with feedback?"
android:key="pref_sendemail_key"
android:negativeButtonText="Cancel"
android:positiveButtonText="OK"
android:summary="Send your feedback by e-mail"
android:title="Send Feedback"/>
<com.manning.androidhacks.hack004.preference.AboutDialog
android:dialogIcon="@drawable/ic_launcher"
android:dialogTitle="About"
android:key="pref_about_key"
android:negativeButtonText="@null"
android:title="About"/>
</PreferenceCategory>
</PreferenceScreen>
Main activity Java code
/*******************************************************************************
* Copyright (c) 2012 Manning//from w w w . j a v a2 s . co m
* See the file license.txt for copying permission.
******************************************************************************/
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.net.Uri;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
public class MainActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
Preference sharePref = findPreference("pref_share");
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Check this app!");
shareIntent.putExtra(Intent.EXTRA_TEXT,
"Check this awesome app at: ...");
sharePref.setIntent(shareIntent);
Preference ratePref = findPreference("pref_rate");
Uri uri = Uri.parse("market://details?id=" + getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
ratePref.setIntent(goToMarket);
updateUserText();
}
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
if (key.equals("pref_username")) {
updateUserText();
}
}
private void updateUserText() {
EditTextPreference pref;
pref = (EditTextPreference) findPreference("pref_username");
String user = pref.getText();
if (user == null) {
user = "?";
}
pref.setSummary(String.format("Username: %s", user));
}
}
Launch Email Util Java code
/*******************************************************************************
* Copyright (c) 2012 Manning/* ww w . java 2 s . c o m*/
* See the file license.txt for copying permission.
******************************************************************************/
package com.manning.androidhacks.hack004.util;
import android.content.Context;
import android.content.Intent;
public class LaunchEmailUtil {
public static void launchEmailToIntent(Context context) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL,
new String[] { "feed@back.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "[50AH] Feedback");
intent.putExtra(Intent.EXTRA_TEXT, "Feedback:\n");
context
.startActivity(Intent.createChooser(intent, "Send feedback"));
}
}
AboutDialog Java file
/*******************************************************************************
* Copyright (c) 2012 Manning//w w w . ja v a2 s .c om
* See the file license.txt for copying permission.
******************************************************************************/
import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.preference.DialogPreference;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class AboutDialog extends DialogPreference {
private Context mContext;
private String mVersionNumber;
public AboutDialog(Context context) {
this(context, null);
}
public AboutDialog(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AboutDialog(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
}
@Override
protected View onCreateDialogView() {
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
TextView splashText = new TextView(mContext);
String fmt = "Version %s<br />"
+ "<a href=\"http://manning.com/sessa\">MoreInfo</a>";
try {
String pkg = mContext.getPackageName();
mVersionNumber = mContext.getPackageManager().getPackageInfo(pkg,
0).versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (mVersionNumber != null) {
String aboutMsg = String.format(fmt, mVersionNumber);
splashText.setText(Html.fromHtml(aboutMsg));
splashText.setMovementMethod(LinkMovementMethod.getInstance());
}
layout.addView(splashText);
return layout;
}
}
EmailDialog Java code
/*******************************************************************************
* Copyright (c) 2012 Manning// w w w .j a va2 s. co m
* See the file license.txt for copying permission.
******************************************************************************/
import android.content.Context;
import android.content.DialogInterface;
import android.preference.DialogPreference;
import android.util.AttributeSet;
public class EmailDialog extends DialogPreference {
Context mContext;
public EmailDialog(Context context) {
this(context, null);
}
public EmailDialog(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public EmailDialog(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
}
@Override
public void onClick(DialogInterface dialog, int which) {
super.onClick(dialog, which);
if (DialogInterface.BUTTON_POSITIVE == which) {
LaunchEmailUtil.launchEmailToIntent(mContext);
}
}
}