summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml5
-rw-r--r--res/values/strings.xml7
-rw-r--r--res/xml/preference_headers.xml25
-rw-r--r--src/com/android/mail/preferences/MailPrefs.java14
-rw-r--r--src/com/android/mail/ui/settings/GeneralPrefsFragment.java28
-rw-r--r--src/com/android/mail/ui/settings/MailPreferenceActivity.java62
-rw-r--r--tests/src/com/android/mail/ui/settings/GeneralPrefsFragmentTest.java75
7 files changed, 152 insertions, 64 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a7b39e92a..f2b297620 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -122,6 +122,11 @@
</intent-filter>
</activity>
+ <activity android:name=".ui.settings.MailPreferenceActivity"
+ android:label="@string/activity_preferences"
+ android:exported="false">
+ </activity>
+
<provider
android:authorities="com.android.mail.accountcache"
android:label="@string/account_cache_provider"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4b990fda2..ab43555df 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1167,4 +1167,11 @@
<!-- Settings screen, preference item to launch into Settings [CHAR LIMIT=50] -->
<string name="manage_accounts_menu_item">Manage Accounts</string>
+ <!-- Settings screen, main title of the screen, big font [CHAR LIMIT=50]-->
+ <string name="general_preferences_title">General settings</string>
+
+ <!-- Settings screen title -->
+ <!-- Name of the Settings activity -->
+ <string name="activity_preferences">Settings</string>
+
</resources>
diff --git a/res/xml/preference_headers.xml b/res/xml/preference_headers.xml
new file mode 100644
index 000000000..b31c43303
--- /dev/null
+++ b/res/xml/preference_headers.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 Google Inc.
+ Licensed to The Android Open Source Project.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
+ xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <header android:fragment="com.android.mail.ui.settings.GeneralPrefsFragment"
+ android:title="@string/general_preferences_title" />
+
+</preference-headers>
diff --git a/src/com/android/mail/preferences/MailPrefs.java b/src/com/android/mail/preferences/MailPrefs.java
index 2eb786906..8e73ed3bc 100644
--- a/src/com/android/mail/preferences/MailPrefs.java
+++ b/src/com/android/mail/preferences/MailPrefs.java
@@ -25,6 +25,7 @@ import com.android.mail.providers.Account;
import com.android.mail.providers.UIProvider;
import com.android.mail.utils.LogUtils;
import com.android.mail.widget.BaseWidgetProvider;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
@@ -137,15 +138,16 @@ public final class MailPrefs extends VersionedPrefs {
public static final String ARCHIVE_AND_DELETE = "archive-and-delete";
}
- public static MailPrefs get(Context c) {
+ public static MailPrefs get(final Context c) {
if (sInstance == null) {
- sInstance = new MailPrefs(c);
+ sInstance = new MailPrefs(c, PREFS_NAME);
}
return sInstance;
}
- private MailPrefs(Context c) {
- super(c, PREFS_NAME);
+ @VisibleForTesting
+ public MailPrefs(final Context c, final String prefsName) {
+ super(c, prefsName);
mSnapHeaderDefault = c.getResources().getInteger(R.integer.prefDefault_snapHeader);
}
@@ -494,7 +496,7 @@ public final class MailPrefs extends VersionedPrefs {
}
public void setConversationOverviewMode(final boolean overviewMode) {
- getEditor().putBoolean(PreferenceKeys.CONVERSATION_OVERVIEW_MODE, overviewMode);
+ getEditor().putBoolean(PreferenceKeys.CONVERSATION_OVERVIEW_MODE, overviewMode).apply();
}
public boolean getConversationOverviewMode() {
@@ -507,7 +509,7 @@ public final class MailPrefs extends VersionedPrefs {
}
public void setSnapHeaderMode(final int snapHeaderMode) {
- getEditor().putInt(PreferenceKeys.SNAP_HEADER_MODE, snapHeaderMode);
+ getEditor().putInt(PreferenceKeys.SNAP_HEADER_MODE, snapHeaderMode).apply();
}
public int getSnapHeaderMode() {
diff --git a/src/com/android/mail/ui/settings/GeneralPrefsFragment.java b/src/com/android/mail/ui/settings/GeneralPrefsFragment.java
index e4b176bad..b3ed97373 100644
--- a/src/com/android/mail/ui/settings/GeneralPrefsFragment.java
+++ b/src/com/android/mail/ui/settings/GeneralPrefsFragment.java
@@ -41,6 +41,7 @@ import com.android.mail.providers.UIProvider.AutoAdvance;
import com.android.mail.providers.UIProvider.SnapHeaderValue;
import com.android.mail.utils.LogUtils;
import com.android.mail.R;
+import com.android.mail.utils.Utils;
import com.google.common.annotations.VisibleForTesting;
/**
@@ -53,6 +54,8 @@ public class GeneralPrefsFragment extends MailPreferenceFragment
static final String AUTO_ADVANCE_WIDGET = "auto-advance-widget";
static final String SNAP_HEADER_MODE_WIDGET = "snap-header-mode-widget";
+ static final String CALLED_FROM_TEST = "called-from-test";
+
// Category for removal actions
protected static final String REMOVAL_ACTIONS_GROUP = "removal-actions-group";
@@ -61,32 +64,18 @@ public class GeneralPrefsFragment extends MailPreferenceFragment
private AlertDialog mClearSearchHistoryDialog;
private ListPreference mAutoAdvance;
- @VisibleForTesting
- static final int[] AUTO_ADVANCE_VALUES = {
+ private static final int[] AUTO_ADVANCE_VALUES = {
AutoAdvance.NEWER,
AutoAdvance.OLDER,
AutoAdvance.LIST
};
private ListPreference mSnapHeader;
- @VisibleForTesting
- static final int[] SNAP_HEADER_VALUES = {
+ private static final int[] SNAP_HEADER_VALUES = {
SnapHeaderValue.ALWAYS,
SnapHeaderValue.PORTRAIT_ONLY,
SnapHeaderValue.NEVER
};
- private final boolean mCalledFromTest;
-
- public GeneralPrefsFragment() {
- super();
- mCalledFromTest = false;
- }
-
- @VisibleForTesting
- GeneralPrefsFragment(boolean fromTest) {
- mCalledFromTest = fromTest;
- }
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -103,9 +92,10 @@ public class GeneralPrefsFragment extends MailPreferenceFragment
addPreferencesFromResource(R.xml.general_preferences);
- // Disabling snap headers is just for phones
- if (!mCalledFromTest
- && com.android.mail.utils.Utils.useTabletUI(getActivity().getResources())) {
+ // Disabling snap headers is just for phones and unit tests
+ final Bundle args = getArguments();
+ final boolean calledFromTest = args != null && args.getBoolean(CALLED_FROM_TEST, false);
+ if (!calledFromTest && Utils.useTabletUI(getActivity().getResources())) {
final PreferenceScreen ps = getPreferenceScreen();
ps.removePreference(findPreference(SNAP_HEADER_MODE_WIDGET));
}
diff --git a/src/com/android/mail/ui/settings/MailPreferenceActivity.java b/src/com/android/mail/ui/settings/MailPreferenceActivity.java
new file mode 100644
index 000000000..925b16add
--- /dev/null
+++ b/src/com/android/mail/ui/settings/MailPreferenceActivity.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (C) 2014 Google Inc.
+ * Licensed to The Android Open Source Project.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *******************************************************************************/
+
+package com.android.mail.ui.settings;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+import com.android.mail.R;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.lang.ref.WeakReference;
+import java.util.List;
+
+public class MailPreferenceActivity extends PreferenceActivity {
+
+ private WeakReference<GeneralPrefsFragment> mGeneralPrefsFragmentRef;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @VisibleForTesting
+ GeneralPrefsFragment getGeneralPrefsFragment() {
+ return mGeneralPrefsFragmentRef != null ? mGeneralPrefsFragmentRef.get() : null;
+ }
+
+ @Override
+ public void onAttachFragment(Fragment fragment) {
+ super.onAttachFragment(fragment);
+ if (fragment instanceof GeneralPrefsFragment) {
+ mGeneralPrefsFragmentRef =
+ new WeakReference<GeneralPrefsFragment>((GeneralPrefsFragment) fragment);
+ }
+ }
+
+ @Override
+ protected boolean isValidFragment(String fragmentName) {
+ return GeneralPrefsFragment.class.getCanonicalName().equals(fragmentName);
+ }
+
+ @Override
+ public void onBuildHeaders(List<Header> target) {
+ loadHeadersFromResource(R.xml.preference_headers, target);
+ }
+}
diff --git a/tests/src/com/android/mail/ui/settings/GeneralPrefsFragmentTest.java b/tests/src/com/android/mail/ui/settings/GeneralPrefsFragmentTest.java
index c1a531123..cdb8ecafd 100644
--- a/tests/src/com/android/mail/ui/settings/GeneralPrefsFragmentTest.java
+++ b/tests/src/com/android/mail/ui/settings/GeneralPrefsFragmentTest.java
@@ -17,21 +17,26 @@
package com.android.mail.ui.settings;
-import android.app.Activity;
import android.content.Intent;
+import android.os.Bundle;
+import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-// TODO: Insert the unified prefs class here once it's written
-@Suppress
+import com.android.mail.preferences.MailPrefs;
+import com.android.mail.providers.UIProvider;
+import com.android.mail.providers.UIProvider.AutoAdvance;
+import com.android.mail.providers.UIProvider.SnapHeaderValue;
+
public class GeneralPrefsFragmentTest
- extends ActivityInstrumentationTestCase2<Activity> {
+ extends ActivityInstrumentationTestCase2<MailPreferenceActivity> {
+
+ private static final String PREFS_NAME_TEST = "UnifiedEmailTest";
public GeneralPrefsFragmentTest() {
- super(Activity.class);
+ super(MailPreferenceActivity.class);
}
@Override
@@ -39,62 +44,54 @@ public class GeneralPrefsFragmentTest
super.setUp();
final Intent i = new Intent();
- i.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, "com.android.mail.ui.settings.");
+ i.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT,
+ "com.android.mail.ui.settings.GeneralPrefsFragment");
+ final Bundle b = new Bundle(1);
+ b.putBoolean(GeneralPrefsFragment.CALLED_FROM_TEST, true);
+ i.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, b);
setActivityIntent(i);
- getActivity();
+ final MailPreferenceActivity activity = getActivity();
+ getInstrumentation().waitForIdleSync();
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ activity.getFragmentManager().executePendingTransactions();
+ }
+ });
+ final GeneralPrefsFragment fragment = activity.getGeneralPrefsFragment();
+ fragment.mMailPrefs = new MailPrefs(activity, PREFS_NAME_TEST);
}
@UiThreadTest
@MediumTest
public void testChangeAutoAdvance() throws Throwable {
- // A weak proxy test that a click on auto-advance will actually persist the proper value.
- // A better test would simulate a dialog, dialog click, and check that the value is
- // both displayed and persisted.
- /*
- final Activity activity = getActivity();
- final MailPrefs mailPrefs = MailPrefs.get(activity);
-
- activity.getFragmentManager().executePendingTransactions();
-
+ final MailPreferenceActivity activity = getActivity();
final GeneralPrefsFragment fragment = activity.getGeneralPrefsFragment();
+ final MailPrefs mailPrefs = fragment.mMailPrefs;
final ListPreference autoAdvancePref = (ListPreference) fragment
.findPreference(GeneralPrefsFragment.AUTO_ADVANCE_WIDGET);
fragment.onPreferenceChange(autoAdvancePref, UIProvider.AUTO_ADVANCE_MODE_OLDER);
-
- assertEquals(AutoAdvance.OLDER, mailPrefs.getAutoAdvanceMode());
+ assertEquals(mailPrefs.getAutoAdvanceMode(), AutoAdvance.OLDER);
fragment.onPreferenceChange(autoAdvancePref, UIProvider.AUTO_ADVANCE_MODE_NEWER);
-
- assertEquals(AutoAdvance.NEWER, mailPrefs.getAutoAdvanceMode());
- */
+ assertEquals(mailPrefs.getAutoAdvanceMode(), AutoAdvance.NEWER);
}
@UiThreadTest
@MediumTest
public void testChangeSnapHeader() throws Throwable {
- /*
- final Activity activity = getActivity();
- final MailPrefs mailPrefs = MailPrefs.get(activity);
-
- activity.getFragmentManager().executePendingTransactions();
-
+ final MailPreferenceActivity activity = getActivity();
final GeneralPrefsFragment fragment = activity.getGeneralPrefsFragment();
+ final MailPrefs mailPrefs = fragment.mMailPrefs;
final ListPreference snapPref = (ListPreference) fragment
.findPreference(GeneralPrefsFragment.SNAP_HEADER_MODE_WIDGET);
- final int neverValue = GeneralPrefsFragment.prefValueToWidgetIndex(
- GeneralPrefsFragment.SNAP_HEADER_VALUES, SnapHeaderValue.NEVER, -1);
- snapPref.setValueIndex(neverValue);
-
- assertEquals(SnapHeaderValue.NEVER, mailPrefs.getSnapHeaderMode());
-
- final int alwaysValue = GeneralPrefsFragment.prefValueToWidgetIndex(
- GeneralPrefsFragment.SNAP_HEADER_VALUES, SnapHeaderValue.ALWAYS, -1);
- snapPref.setValueIndex(alwaysValue);
+ fragment.onPreferenceChange(snapPref, "never");
+ assertEquals(mailPrefs.getSnapHeaderMode(), SnapHeaderValue.NEVER);
- assertEquals(SnapHeaderValue.ALWAYS, mailPrefs.getSnapHeaderMode());
- */
+ fragment.onPreferenceChange(snapPref, "always");
+ assertEquals(mailPrefs.getSnapHeaderMode(), SnapHeaderValue.ALWAYS);
}
}