Loading res/values/arrays.xml +11 −0 Original line number Diff line number Diff line Loading @@ -713,4 +713,15 @@ <item name="3">ALWAYS</item> </string-array> <string-array name="global_settings_splitview_mode_entries"> <item>@string/global_settings_splitview_always</item> <item>@string/global_settings_splitview_never</item> <item>@string/global_settings_splitview_when_in_landscape</item> </string-array> <string-array name="global_settings_splitview_mode_values"> <item>ALWAYS</item> <item>NEVER</item> <item>WHEN_IN_LANDSCAPE</item> </string-array> </resources> res/values/strings.xml +6 −1 Original line number Diff line number Diff line Loading @@ -1129,4 +1129,9 @@ Please submit bug reports, contribute new features and ask questions at <string name="upgrade_database_format">Upgrading database of account \"<xliff:g id="account">%s</xliff:g>\"</string> <string name="message_list_loading">Loading…</string> <string name="global_settings_splitview_mode_label">Show split-screen</string> <string name="global_settings_splitview_always">Always</string> <string name="global_settings_splitview_never">Never</string> <string name="global_settings_splitview_when_in_landscape">When in Landscape orientation</string> </resources> res/xml/global_preferences.xml +8 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,14 @@ android:title="@string/global_settings_threaded_view_label" android:summary="@string/global_settings_threaded_view_summary" /> <ListPreference android:persistent="false" android:key="splitview_mode" android:title="@string/global_settings_splitview_mode_label" android:entries="@array/global_settings_splitview_mode_entries" android:entryValues="@array/global_settings_splitview_mode_values" android:dialogTitle="@string/global_settings_splitview_mode_label" /> </PreferenceCategory> <PreferenceCategory Loading src/com/fsck/k9/K9.java +26 −2 Original line number Diff line number Diff line Loading @@ -210,6 +210,15 @@ public class K9 extends Application { NEVER } /** * Controls when to use the message list split view. */ public enum SplitViewMode { ALWAYS, NEVER, WHEN_IN_LANDSCAPE } private static boolean mMessageListCheckboxes = false; private static int mMessageListPreviewLines = 2; Loading Loading @@ -251,6 +260,7 @@ public class K9 extends Application { private static boolean sUseBackgroundAsUnreadIndicator = true; private static boolean sThreadedViewEnabled = true; private static SplitViewMode sSplitViewMode = SplitViewMode.WHEN_IN_LANDSCAPE; /** * @see #areDatabasesUpToDate() Loading Loading @@ -530,6 +540,7 @@ public class K9 extends Application { editor.putString("attachmentdefaultpath", mAttachmentDefaultPath); editor.putBoolean("useBackgroundAsUnreadIndicator", sUseBackgroundAsUnreadIndicator); editor.putBoolean("threadedView", sThreadedViewEnabled); editor.putString("splitViewMode", sSplitViewMode.name()); fontSizes.save(editor); } Loading Loading @@ -737,6 +748,11 @@ public class K9 extends Application { sNotificationQuickDelete = NotificationQuickDelete.valueOf(notificationQuickDelete); } String splitViewMode = sprefs.getString("splitViewMode", null); if (splitViewMode != null) { sSplitViewMode = SplitViewMode.valueOf(splitViewMode); } mAttachmentDefaultPath = sprefs.getString("attachmentdefaultpath", Environment.getExternalStorageDirectory().toString()); sUseBackgroundAsUnreadIndicator = sprefs.getBoolean("useBackgroundAsUnreadIndicator", true); sThreadedViewEnabled = sprefs.getBoolean("threadedView", true); Loading Loading @@ -1267,6 +1283,14 @@ public class K9 extends Application { sThreadedViewEnabled = enable; } public static synchronized SplitViewMode getSplitViewMode() { return sSplitViewMode; } public static synchronized void setSplitViewMode(SplitViewMode mode) { sSplitViewMode = mode; } /** * Check if we already know whether all databases are using the current database schema. * Loading src/com/fsck/k9/activity/MessageList.java +109 −13 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package com.fsck.k9.activity; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentManager; Loading Loading @@ -66,6 +67,8 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme public static final String EXTRA_SEARCH_ACCOUNT = "com.fsck.k9.search_account"; private static final String EXTRA_SEARCH_FOLDER = "com.fsck.k9.search_folder"; private static final String STATE_DISPLAY_MODE = "displayMode"; public static void actionDisplaySearch(Context context, SearchSpecification search, boolean noThreading, boolean newTask) { actionDisplaySearch(context, search, noThreading, newTask, true); Loading Loading @@ -103,6 +106,12 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme return intent; } private enum DisplayMode { MESSAGE_LIST, MESSAGE_VIEW, SPLIT_VIEW } private StorageManager.StorageListener mStorageListener = new StorageListenerImplementation(); Loading @@ -112,6 +121,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme private TextView mActionBarUnread; private Menu mMenu; private ViewGroup mMessageListContainer; private ViewGroup mMessageViewContainer; private View mMessageViewPlaceHolder; Loading @@ -134,6 +144,9 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme */ private boolean mNoThreading; private DisplayMode mDisplayMode; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Loading @@ -152,6 +165,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme decodeExtras(getIntent()); initializeFragments(); initializeDisplayMode(savedInstanceState); initializeLayout(); ChangeLog cl = new ChangeLog(this); Loading @@ -176,13 +190,57 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme } } private void initializeDisplayMode(Bundle savedInstanceState) { if (savedInstanceState != null) { mDisplayMode = (DisplayMode) savedInstanceState.getSerializable(STATE_DISPLAY_MODE); } else { mDisplayMode = DisplayMode.MESSAGE_LIST; } switch (K9.getSplitViewMode()) { case ALWAYS: { mDisplayMode = DisplayMode.SPLIT_VIEW; break; } case NEVER: { // Either use the restored setting or DisplayMode.MESSAGE_LIST set above break; } case WHEN_IN_LANDSCAPE: { int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { mDisplayMode = DisplayMode.SPLIT_VIEW; } else if (mMessageViewFragment != null) { mDisplayMode = DisplayMode.MESSAGE_VIEW; } else { mDisplayMode = DisplayMode.MESSAGE_LIST; } break; } } } private void initializeLayout() { mMessageListContainer = (ViewGroup) findViewById(R.id.message_list_container); mMessageViewContainer = (ViewGroup) findViewById(R.id.message_view_container); mMessageViewPlaceHolder = getLayoutInflater().inflate(R.layout.empty_message_view, null); switch (mDisplayMode) { case MESSAGE_LIST: { showMessageList(); break; } case MESSAGE_VIEW: { showMessageView(); break; } case SPLIT_VIEW: { if (mMessageViewFragment == null) { showMessageViewPlaceHolder(); } break; } } } private void decodeExtras(Intent intent) { Loading Loading @@ -272,6 +330,13 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme StorageManager.getInstance(getApplication()).addListener(mStorageListener); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable(STATE_DISPLAY_MODE, mDisplayMode); } private void initializeActionBar() { mActionBar = getSupportActionBar(); Loading Loading @@ -628,7 +693,11 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme mMessageViewFragment = fragment; ft.commit(); if (mDisplayMode == DisplayMode.SPLIT_VIEW) { mMessageListFragment.setActiveMessage(messageReference); } else { showMessageView(); } } } Loading Loading @@ -673,8 +742,12 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme FragmentManager fragmentManager = getSupportFragmentManager(); mMessageListFragment = (MessageListFragment) fragmentManager.findFragmentById( R.id.message_list_container); mMessageViewFragment = (MessageViewFragment) fragmentManager.findFragmentById( R.id.message_view_container); if (mDisplayMode == DisplayMode.SPLIT_VIEW) { showMessageViewPlaceHolder(); } configureMenu(mMenu); } Loading Loading @@ -753,13 +826,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme } private void showMessageViewPlaceHolder() { // Remove MessageViewFragment if necessary if (mMessageViewFragment != null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.remove(mMessageViewFragment); mMessageViewFragment = null; ft.commit(); } removeMessageViewFragment(); // Add placeholder view if necessary if (mMessageViewPlaceHolder.getParent() == null) { Loading @@ -769,6 +836,18 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme mMessageListFragment.setActiveMessage(null); } /** * Remove MessageViewFragment if necessary. */ private void removeMessageViewFragment() { if (mMessageViewFragment != null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.remove(mMessageViewFragment); mMessageViewFragment = null; ft.commit(); } } @Override public void remoteSearchStarted() { // Remove action button for remote search Loading @@ -778,9 +857,10 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme @Override public void goBack() { FragmentManager fragmentManager = getSupportFragmentManager(); if (fragmentManager.getBackStackEntryCount() > 0) { if (mDisplayMode == DisplayMode.MESSAGE_VIEW) { showMessageList(); } else if (fragmentManager.getBackStackEntryCount() > 0) { fragmentManager.popBackStack(); showMessageViewPlaceHolder(); } else if (mMessageListFragment.isManualSearch()) { onBackPressed(); } else if (!mSingleFolderMode) { Loading Loading @@ -871,4 +951,20 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme private void showNextMessage() { //TODO: implement } private void showMessageList() { mDisplayMode = DisplayMode.MESSAGE_LIST; mMessageViewContainer.setVisibility(View.GONE); mMessageListContainer.setVisibility(View.VISIBLE); removeMessageViewFragment(); mMessageListFragment.setActiveMessage(null); } private void showMessageView() { mDisplayMode = DisplayMode.MESSAGE_VIEW; mMessageListContainer.setVisibility(View.GONE); mMessageViewContainer.setVisibility(View.VISIBLE); } } Loading
res/values/arrays.xml +11 −0 Original line number Diff line number Diff line Loading @@ -713,4 +713,15 @@ <item name="3">ALWAYS</item> </string-array> <string-array name="global_settings_splitview_mode_entries"> <item>@string/global_settings_splitview_always</item> <item>@string/global_settings_splitview_never</item> <item>@string/global_settings_splitview_when_in_landscape</item> </string-array> <string-array name="global_settings_splitview_mode_values"> <item>ALWAYS</item> <item>NEVER</item> <item>WHEN_IN_LANDSCAPE</item> </string-array> </resources>
res/values/strings.xml +6 −1 Original line number Diff line number Diff line Loading @@ -1129,4 +1129,9 @@ Please submit bug reports, contribute new features and ask questions at <string name="upgrade_database_format">Upgrading database of account \"<xliff:g id="account">%s</xliff:g>\"</string> <string name="message_list_loading">Loading…</string> <string name="global_settings_splitview_mode_label">Show split-screen</string> <string name="global_settings_splitview_always">Always</string> <string name="global_settings_splitview_never">Never</string> <string name="global_settings_splitview_when_in_landscape">When in Landscape orientation</string> </resources>
res/xml/global_preferences.xml +8 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,14 @@ android:title="@string/global_settings_threaded_view_label" android:summary="@string/global_settings_threaded_view_summary" /> <ListPreference android:persistent="false" android:key="splitview_mode" android:title="@string/global_settings_splitview_mode_label" android:entries="@array/global_settings_splitview_mode_entries" android:entryValues="@array/global_settings_splitview_mode_values" android:dialogTitle="@string/global_settings_splitview_mode_label" /> </PreferenceCategory> <PreferenceCategory Loading
src/com/fsck/k9/K9.java +26 −2 Original line number Diff line number Diff line Loading @@ -210,6 +210,15 @@ public class K9 extends Application { NEVER } /** * Controls when to use the message list split view. */ public enum SplitViewMode { ALWAYS, NEVER, WHEN_IN_LANDSCAPE } private static boolean mMessageListCheckboxes = false; private static int mMessageListPreviewLines = 2; Loading Loading @@ -251,6 +260,7 @@ public class K9 extends Application { private static boolean sUseBackgroundAsUnreadIndicator = true; private static boolean sThreadedViewEnabled = true; private static SplitViewMode sSplitViewMode = SplitViewMode.WHEN_IN_LANDSCAPE; /** * @see #areDatabasesUpToDate() Loading Loading @@ -530,6 +540,7 @@ public class K9 extends Application { editor.putString("attachmentdefaultpath", mAttachmentDefaultPath); editor.putBoolean("useBackgroundAsUnreadIndicator", sUseBackgroundAsUnreadIndicator); editor.putBoolean("threadedView", sThreadedViewEnabled); editor.putString("splitViewMode", sSplitViewMode.name()); fontSizes.save(editor); } Loading Loading @@ -737,6 +748,11 @@ public class K9 extends Application { sNotificationQuickDelete = NotificationQuickDelete.valueOf(notificationQuickDelete); } String splitViewMode = sprefs.getString("splitViewMode", null); if (splitViewMode != null) { sSplitViewMode = SplitViewMode.valueOf(splitViewMode); } mAttachmentDefaultPath = sprefs.getString("attachmentdefaultpath", Environment.getExternalStorageDirectory().toString()); sUseBackgroundAsUnreadIndicator = sprefs.getBoolean("useBackgroundAsUnreadIndicator", true); sThreadedViewEnabled = sprefs.getBoolean("threadedView", true); Loading Loading @@ -1267,6 +1283,14 @@ public class K9 extends Application { sThreadedViewEnabled = enable; } public static synchronized SplitViewMode getSplitViewMode() { return sSplitViewMode; } public static synchronized void setSplitViewMode(SplitViewMode mode) { sSplitViewMode = mode; } /** * Check if we already know whether all databases are using the current database schema. * Loading
src/com/fsck/k9/activity/MessageList.java +109 −13 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package com.fsck.k9.activity; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentManager; Loading Loading @@ -66,6 +67,8 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme public static final String EXTRA_SEARCH_ACCOUNT = "com.fsck.k9.search_account"; private static final String EXTRA_SEARCH_FOLDER = "com.fsck.k9.search_folder"; private static final String STATE_DISPLAY_MODE = "displayMode"; public static void actionDisplaySearch(Context context, SearchSpecification search, boolean noThreading, boolean newTask) { actionDisplaySearch(context, search, noThreading, newTask, true); Loading Loading @@ -103,6 +106,12 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme return intent; } private enum DisplayMode { MESSAGE_LIST, MESSAGE_VIEW, SPLIT_VIEW } private StorageManager.StorageListener mStorageListener = new StorageListenerImplementation(); Loading @@ -112,6 +121,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme private TextView mActionBarUnread; private Menu mMenu; private ViewGroup mMessageListContainer; private ViewGroup mMessageViewContainer; private View mMessageViewPlaceHolder; Loading @@ -134,6 +144,9 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme */ private boolean mNoThreading; private DisplayMode mDisplayMode; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Loading @@ -152,6 +165,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme decodeExtras(getIntent()); initializeFragments(); initializeDisplayMode(savedInstanceState); initializeLayout(); ChangeLog cl = new ChangeLog(this); Loading @@ -176,13 +190,57 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme } } private void initializeDisplayMode(Bundle savedInstanceState) { if (savedInstanceState != null) { mDisplayMode = (DisplayMode) savedInstanceState.getSerializable(STATE_DISPLAY_MODE); } else { mDisplayMode = DisplayMode.MESSAGE_LIST; } switch (K9.getSplitViewMode()) { case ALWAYS: { mDisplayMode = DisplayMode.SPLIT_VIEW; break; } case NEVER: { // Either use the restored setting or DisplayMode.MESSAGE_LIST set above break; } case WHEN_IN_LANDSCAPE: { int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { mDisplayMode = DisplayMode.SPLIT_VIEW; } else if (mMessageViewFragment != null) { mDisplayMode = DisplayMode.MESSAGE_VIEW; } else { mDisplayMode = DisplayMode.MESSAGE_LIST; } break; } } } private void initializeLayout() { mMessageListContainer = (ViewGroup) findViewById(R.id.message_list_container); mMessageViewContainer = (ViewGroup) findViewById(R.id.message_view_container); mMessageViewPlaceHolder = getLayoutInflater().inflate(R.layout.empty_message_view, null); switch (mDisplayMode) { case MESSAGE_LIST: { showMessageList(); break; } case MESSAGE_VIEW: { showMessageView(); break; } case SPLIT_VIEW: { if (mMessageViewFragment == null) { showMessageViewPlaceHolder(); } break; } } } private void decodeExtras(Intent intent) { Loading Loading @@ -272,6 +330,13 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme StorageManager.getInstance(getApplication()).addListener(mStorageListener); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable(STATE_DISPLAY_MODE, mDisplayMode); } private void initializeActionBar() { mActionBar = getSupportActionBar(); Loading Loading @@ -628,7 +693,11 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme mMessageViewFragment = fragment; ft.commit(); if (mDisplayMode == DisplayMode.SPLIT_VIEW) { mMessageListFragment.setActiveMessage(messageReference); } else { showMessageView(); } } } Loading Loading @@ -673,8 +742,12 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme FragmentManager fragmentManager = getSupportFragmentManager(); mMessageListFragment = (MessageListFragment) fragmentManager.findFragmentById( R.id.message_list_container); mMessageViewFragment = (MessageViewFragment) fragmentManager.findFragmentById( R.id.message_view_container); if (mDisplayMode == DisplayMode.SPLIT_VIEW) { showMessageViewPlaceHolder(); } configureMenu(mMenu); } Loading Loading @@ -753,13 +826,7 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme } private void showMessageViewPlaceHolder() { // Remove MessageViewFragment if necessary if (mMessageViewFragment != null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.remove(mMessageViewFragment); mMessageViewFragment = null; ft.commit(); } removeMessageViewFragment(); // Add placeholder view if necessary if (mMessageViewPlaceHolder.getParent() == null) { Loading @@ -769,6 +836,18 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme mMessageListFragment.setActiveMessage(null); } /** * Remove MessageViewFragment if necessary. */ private void removeMessageViewFragment() { if (mMessageViewFragment != null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.remove(mMessageViewFragment); mMessageViewFragment = null; ft.commit(); } } @Override public void remoteSearchStarted() { // Remove action button for remote search Loading @@ -778,9 +857,10 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme @Override public void goBack() { FragmentManager fragmentManager = getSupportFragmentManager(); if (fragmentManager.getBackStackEntryCount() > 0) { if (mDisplayMode == DisplayMode.MESSAGE_VIEW) { showMessageList(); } else if (fragmentManager.getBackStackEntryCount() > 0) { fragmentManager.popBackStack(); showMessageViewPlaceHolder(); } else if (mMessageListFragment.isManualSearch()) { onBackPressed(); } else if (!mSingleFolderMode) { Loading Loading @@ -871,4 +951,20 @@ public class MessageList extends K9FragmentActivity implements MessageListFragme private void showNextMessage() { //TODO: implement } private void showMessageList() { mDisplayMode = DisplayMode.MESSAGE_LIST; mMessageViewContainer.setVisibility(View.GONE); mMessageListContainer.setVisibility(View.VISIBLE); removeMessageViewFragment(); mMessageListFragment.setActiveMessage(null); } private void showMessageView() { mDisplayMode = DisplayMode.MESSAGE_VIEW; mMessageListContainer.setVisibility(View.GONE); mMessageViewContainer.setVisibility(View.VISIBLE); } }