Move DocumentsUI settings into overflow menu.

Also use different strings based on device type to make clearer.

Bug: 13437894
Change-Id: I4053780de2c7197fb45cc53aee7659e9d0d75c0a
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index 0a7eedc..caa07ab 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -351,6 +351,10 @@
         updateDisplayState();
     }
 
+    public void onDisplayStateChanged() {
+        updateDisplayState();
+    }
+
     public void onUserSortOrderChanged() {
         // Sort order change always triggers reload; we'll trigger state change
         // on the flip side.
diff --git a/src/com/android/documentsui/DocumentsActivity.java b/src/com/android/documentsui/DocumentsActivity.java
index 29f8b9d..0ed82d9 100644
--- a/src/com/android/documentsui/DocumentsActivity.java
+++ b/src/com/android/documentsui/DocumentsActivity.java
@@ -254,7 +254,13 @@
         mState.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false);
         mState.forceAdvanced = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
         mState.showAdvanced = mState.forceAdvanced
-                | SettingsActivity.getDisplayAdvancedDevices(this);
+                | LocalPreferences.getDisplayAdvancedDevices(this);
+
+        if (mState.action == ACTION_MANAGE) {
+            mState.showSize = true;
+        } else {
+            mState.showSize = LocalPreferences.getDisplayFileSize(this);
+        }
     }
 
     private class RestoreRootTask extends AsyncTask<Void, Void, RootInfo> {
@@ -352,18 +358,6 @@
         }
     }
 
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        if (mState.action == ACTION_MANAGE) {
-            mState.showSize = true;
-        } else {
-            mState.showSize = SettingsActivity.getDisplayFileSize(this);
-            invalidateOptionsMenu();
-        }
-    }
-
     private DrawerListener mDrawerListener = new DrawerListener() {
         @Override
         public void onDrawerSlide(View drawerView, float slideOffset) {
@@ -463,10 +457,17 @@
         super.onCreateOptionsMenu(menu);
         getMenuInflater().inflate(R.menu.activity, menu);
 
-        // Actions are always visible when showing as dialog
+        // Most actions are visible when showing as dialog
         if (mShowAsDialog) {
             for (int i = 0; i < menu.size(); i++) {
-                menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+                final MenuItem item = menu.getItem(i);
+                switch (item.getItemId()) {
+                    case R.id.menu_advanced:
+                    case R.id.menu_file_size:
+                        break;
+                    default:
+                        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+                }
             }
         }
 
@@ -543,7 +544,8 @@
         final MenuItem sortSize = menu.findItem(R.id.menu_sort_size);
         final MenuItem grid = menu.findItem(R.id.menu_grid);
         final MenuItem list = menu.findItem(R.id.menu_list);
-        final MenuItem settings = menu.findItem(R.id.menu_settings);
+        final MenuItem advanced = menu.findItem(R.id.menu_advanced);
+        final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
 
         sort.setVisible(cwd != null);
         grid.setVisible(mState.derivedMode != MODE_GRID);
@@ -594,7 +596,13 @@
         // TODO: close any search in-progress when hiding
         search.setVisible(searchVisible);
 
-        settings.setVisible(mState.action != ACTION_MANAGE);
+        advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
+                ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
+        fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
+                ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
+
+        advanced.setVisible(mState.action != ACTION_MANAGE);
+        fileSize.setVisible(mState.action != ACTION_MANAGE);
 
         return true;
     }
@@ -629,14 +637,31 @@
         } else if (id == R.id.menu_list) {
             setUserMode(State.MODE_LIST);
             return true;
-        } else if (id == R.id.menu_settings) {
-            startActivity(new Intent(this, SettingsActivity.class));
+        } else if (id == R.id.menu_advanced) {
+            setDisplayAdvancedDevices(!LocalPreferences.getDisplayAdvancedDevices(this));
+            return true;
+        } else if (id == R.id.menu_file_size) {
+            setDisplayFileSize(!LocalPreferences.getDisplayFileSize(this));
             return true;
         } else {
             return super.onOptionsItemSelected(item);
         }
     }
 
+    private void setDisplayAdvancedDevices(boolean display) {
+        LocalPreferences.setDisplayAdvancedDevices(this, display);
+        mState.showAdvanced = mState.forceAdvanced | display;
+        RootsFragment.get(getFragmentManager()).onDisplayStateChanged();
+        invalidateOptionsMenu();
+    }
+
+    private void setDisplayFileSize(boolean display) {
+        LocalPreferences.setDisplayFileSize(this, display);
+        mState.showSize = display;
+        DirectoryFragment.get(getFragmentManager()).onDisplayStateChanged();
+        invalidateOptionsMenu();
+    }
+
     /**
      * Update UI to reflect internal state changes not from user.
      */
diff --git a/src/com/android/documentsui/LocalPreferences.java b/src/com/android/documentsui/LocalPreferences.java
new file mode 100644
index 0000000..e6c5ae2
--- /dev/null
+++ b/src/com/android/documentsui/LocalPreferences.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2013 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.documentsui;
+
+import android.content.Context;
+import android.preference.PreferenceManager;
+
+public class LocalPreferences {
+    private static final String KEY_ADVANCED_DEVICES = "advancedDevices";
+    private static final String KEY_FILE_SIZE = "fileSize";
+
+    public static boolean getDisplayAdvancedDevices(Context context) {
+        return PreferenceManager.getDefaultSharedPreferences(context)
+                .getBoolean(KEY_ADVANCED_DEVICES, false);
+    }
+
+    public static boolean getDisplayFileSize(Context context) {
+        return PreferenceManager.getDefaultSharedPreferences(context)
+                .getBoolean(KEY_FILE_SIZE, false);
+    }
+
+    public static void setDisplayAdvancedDevices(Context context, boolean display) {
+        PreferenceManager.getDefaultSharedPreferences(context).edit()
+                .putBoolean(KEY_ADVANCED_DEVICES, display).apply();
+    }
+
+    public static void setDisplayFileSize(Context context, boolean display) {
+        PreferenceManager.getDefaultSharedPreferences(context).edit()
+                .putBoolean(KEY_FILE_SIZE, display).apply();
+    }
+}
diff --git a/src/com/android/documentsui/RootsFragment.java b/src/com/android/documentsui/RootsFragment.java
index 923c79c..b19e028 100644
--- a/src/com/android/documentsui/RootsFragment.java
+++ b/src/com/android/documentsui/RootsFragment.java
@@ -133,11 +133,12 @@
     @Override
     public void onResume() {
         super.onResume();
+        onDisplayStateChanged();
+    }
 
+    public void onDisplayStateChanged() {
         final Context context = getActivity();
         final State state = ((DocumentsActivity) context).getDisplayState();
-        state.showAdvanced = state.forceAdvanced
-                | SettingsActivity.getDisplayAdvancedDevices(context);
 
         if (state.action == ACTION_GET_CONTENT) {
             mList.setOnItemLongClickListener(mItemLongClickListener);
diff --git a/src/com/android/documentsui/SettingsActivity.java b/src/com/android/documentsui/SettingsActivity.java
deleted file mode 100644
index d423e3f..0000000
--- a/src/com/android/documentsui/SettingsActivity.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2013 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.documentsui;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.content.Context;
-import android.os.Bundle;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceManager;
-import android.view.MenuItem;
-
-public class SettingsActivity extends Activity {
-    private static final String KEY_ADVANCED_DEVICES = "advancedDevices";
-    private static final String KEY_FILE_SIZE = "fileSize";
-
-    public static boolean getDisplayAdvancedDevices(Context context) {
-        return PreferenceManager.getDefaultSharedPreferences(context)
-                .getBoolean(KEY_ADVANCED_DEVICES, false);
-    }
-
-    public static boolean getDisplayFileSize(Context context) {
-        return PreferenceManager.getDefaultSharedPreferences(context)
-                .getBoolean(KEY_FILE_SIZE, false);
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getFragmentManager()
-                .beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
-
-        final ActionBar bar = getActionBar();
-        if (bar != null) {
-            bar.setDisplayShowHomeEnabled(false);
-            bar.setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
-            finish();
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    public static class SettingsFragment extends PreferenceFragment {
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            addPreferencesFromResource(R.xml.preferences);
-        }
-    }
-}