Merge "OmniGears: Update NL translation" into android-4.4
diff --git a/res/drawable-hdpi/stat_navbar_edit_off.png b/res/drawable-hdpi/stat_navbar_edit_off.png
new file mode 100644
index 0000000..d796bde
--- /dev/null
+++ b/res/drawable-hdpi/stat_navbar_edit_off.png
Binary files differ
diff --git a/res/drawable-hdpi/stat_navbar_edit_on.png b/res/drawable-hdpi/stat_navbar_edit_on.png
new file mode 100644
index 0000000..263c0ed
--- /dev/null
+++ b/res/drawable-hdpi/stat_navbar_edit_on.png
Binary files differ
diff --git a/res/drawable-mdpi/stat_navbar_edit_off.png b/res/drawable-mdpi/stat_navbar_edit_off.png
new file mode 100644
index 0000000..0520768
--- /dev/null
+++ b/res/drawable-mdpi/stat_navbar_edit_off.png
Binary files differ
diff --git a/res/drawable-mdpi/stat_navbar_edit_on.png b/res/drawable-mdpi/stat_navbar_edit_on.png
new file mode 100644
index 0000000..8c93091
--- /dev/null
+++ b/res/drawable-mdpi/stat_navbar_edit_on.png
Binary files differ
diff --git a/res/drawable-xhdpi/stat_navbar_edit_off.png b/res/drawable-xhdpi/stat_navbar_edit_off.png
new file mode 100644
index 0000000..d0c63a0
--- /dev/null
+++ b/res/drawable-xhdpi/stat_navbar_edit_off.png
Binary files differ
diff --git a/res/drawable-xhdpi/stat_navbar_edit_on.png b/res/drawable-xhdpi/stat_navbar_edit_on.png
new file mode 100644
index 0000000..1bfee82
--- /dev/null
+++ b/res/drawable-xhdpi/stat_navbar_edit_on.png
Binary files differ
diff --git a/res/drawable/navbar_tut.png b/res/drawable/navbar_tut.png
new file mode 100644
index 0000000..44578f5
--- /dev/null
+++ b/res/drawable/navbar_tut.png
Binary files differ
diff --git a/res/layout/nav_bar.xml b/res/layout/nav_bar.xml
new file mode 100644
index 0000000..e2a93c1
--- /dev/null
+++ b/res/layout/nav_bar.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dip"
+        android:padding="4dip"
+        android:layout_weight="1"
+        android:text="@string/navigation_bar_help_text"
+        android:textSize="13sp" />
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:layout_margin="8dip"
+        android:padding="4dip"
+        android:src="@drawable/navbar_tut" />
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@android:color/holo_blue_light"
+        android:gravity="center_horizontal"
+        android:layout_marginLeft="8dip"
+        android:layout_marginRight="8dip"
+        android:padding="4dip"
+        android:textColor="#FFFFFF"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:text="@string/navigation_bar_tips_title" />
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="8dip"
+        android:padding="4dip"
+        android:textSize="13sp"
+        android:text="@string/navigation_bar_tips" />
+</LinearLayout>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 97005a8..4d8b168 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -311,6 +311,17 @@
     <string name="button_volume_default_title">Volume default</string>
     <string name="button_volume_default_summary">Choose which volume gets changed by default</string>
 
+    <!-- Navigation Bar customization-->
+    <string name="navigation_bar_title">Buttons and layout</string>
+    <string name="navigation_bar_help_text">1 - To begin editing, tap the lock icon\n\n2 - Tap any button to assign or change functionality\n\n3 - Long press any button to rearrange the order\n\n4 - To save, tap the lock icon again\n\n5 - To restore system default, tap the reset button\n\n</string>
+    <string name="navigation_bar_tips">\u2022 Actions can only be assigned to one button at a time\n\n\u2022 The home button cannot be re-assigned\n\n\u2022 Side buttons cannot be rearranged</string>
+    <string name="navigation_bar_tips_title">Quick tips</string>
+    <string name="navigation_bar_reset_message">Delete current settings and restore to default?</string>
+    <string name="navigation_bar_save_message">Navigation bar settings saved</string>
+    <string name="navigation_bar_reset_toast">Navigation bar reset to default</string>
+    <string name="navigation_bar_menu_editable">Editable</string>
+    <string name="navigation_bar_menu_locked">Locked</string>
+
     <!-- Navigation ring shortcuts -->
     <string name="navigation_ring_title">Quick launch shortcuts</string>
     <string name="navring_target_reset_message">Delete all user created navigation bar shortcuts and restore to default?</string>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 9bd2a18..2b19990 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -79,6 +79,10 @@
             android:title="@string/bars_and_menus_category_navigation_bar_title">
 
         <PreferenceScreen
+            android:key="navigation_bar"
+            android:fragment="org.omnirom.omnigears.interfacesettings.NavBar"
+            android:title="@string/navigation_bar_title" />
+        <PreferenceScreen
             android:key="navigation_ring"
             android:fragment="org.omnirom.omnigears.interfacesettings.NavRing"
             android:title="@string/navigation_ring_title" />
@@ -88,6 +92,5 @@
             android:title="@string/soft_back_kill_app_title"
             android:summary="@string/soft_back_kill_app_summary"
             android:persistent="false"/>
-
     </PreferenceCategory>
 </PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/interfacesettings/NavBar.java b/src/org/omnirom/omnigears/interfacesettings/NavBar.java
new file mode 100644
index 0000000..db5c125
--- /dev/null
+++ b/src/org/omnirom/omnigears/interfacesettings/NavBar.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2011 The CyanogenMod 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 org.omnirom.omnigears.interfacesettings;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Fragment;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+
+public class NavBar extends Fragment {
+
+    private boolean mEditMode;
+    private ViewGroup mContainer;
+    private Activity mActivity;
+    private MenuItem mEditMenu;
+    private boolean mWasInExpandedState;
+    private final static Intent mIntent = new Intent("android.intent.action.NAVBAR_EDIT");
+    private static final int MENU_RESET = Menu.FIRST;
+    private static final int MENU_EDIT = Menu.FIRST + 1;
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        mActivity = activity;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        View view = inflater.inflate(R.layout.nav_bar, container, false);
+
+        mContainer = container;
+        setHasOptionsMenu(true);
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_SHOW_NAVIGATION_IN_EXPANDED_DESKTOP);
+
+        // If running on a phone, remove padding around container
+        if (Utils.isPhone(mActivity)) {
+            mContainer.setPadding(0, 0, 0, 0);
+        }
+    }
+
+    @Override
+    public void onDetach() {
+        mActivity = null;
+        super.onDetach();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        toggleEditMode(false, false);
+    }
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        menu.add(0, MENU_RESET, 0, R.string.reset)
+        .setIcon(R.drawable.ic_settings_backup)
+        .setAlphabeticShortcut('r')
+        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
+                MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+        mEditMenu = menu.add(0, MENU_EDIT, 0, R.string.navigation_bar_menu_locked);
+        mEditMenu.setIcon(R.drawable.stat_navbar_edit_off)
+        .setAlphabeticShortcut('s')
+        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
+                MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+        case MENU_RESET:
+            new AlertDialog.Builder(mActivity)
+            .setTitle(R.string.reset)
+            .setIcon(android.R.drawable.ic_dialog_alert)
+            .setMessage(R.string.navigation_bar_reset_message)
+            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog, int id) {
+                    if (mEditMode) {
+                        toggleEditMode(false, false);
+                    }
+                    Settings.System.putString(getActivity().getContentResolver(),
+                            Settings.System.NAV_BUTTONS, null);
+                    toggleEditMode(true, false);
+                    toggleEditMode(false, false);
+                    mEditMode = false;
+                    Toast.makeText(mActivity, R.string.navigation_bar_reset_toast, Toast.LENGTH_LONG).show();
+                }
+            }).setNegativeButton(R.string.cancel, null)
+            .create().show();
+            return true;
+        case MENU_EDIT:
+            mEditMode = !mEditMode;
+            toggleEditMode(mEditMode, true);
+            if (!mEditMode) {
+                Toast.makeText(mActivity, R.string.navigation_bar_save_message, Toast.LENGTH_LONG).show();
+            }
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    /**
+     * Toggles navbar edit mode
+     * @param on True to enter edit mode / false to exit
+     * @param save True to save changes / false to discard them
+     */
+    private void toggleEditMode(boolean on, boolean save) {
+        mIntent.putExtra("edit", on);
+        mIntent.putExtra("save", save);
+        mActivity.sendBroadcast(mIntent);
+        if (mEditMenu != null) {
+            mEditMenu.setTitle(on ? R.string.navigation_bar_menu_editable :  R.string.navigation_bar_menu_locked)
+            .setIcon(on ? R.drawable.stat_navbar_edit_on : R.drawable.stat_navbar_edit_off);
+        }
+        if (on) {
+            Utils.lockCurrentOrientation(mActivity);
+        } else {
+            mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+        }
+    }
+}