Merge "[4/4] OmniGears: Audio Themes Settings" 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-nl/custom_strings.xml b/res/values-nl/custom_strings.xml
index 48ee464..bbee20e 100644
--- a/res/values-nl/custom_strings.xml
+++ b/res/values-nl/custom_strings.xml
@@ -159,6 +159,8 @@
     <string name="button_volume_keys_title">Volume</string>
     <string name="button_volume_wake_title">Volumeknop ontwaken</string>
     <string name="button_volume_wake_summary">Maak je apparaat wakker door op de volumeknop te drukken</string>
+    <string name="button_volume_music_control_title">Muziek beheren</string>
+    <string name="button_volume_music_control_summary">Lang drukken op de volume knoppen wisselt van muziek wanneer het scherm uit is</string>
     <string name="button_headsethook_title">Koptelefoon</string>
     <string name="button_headsethook_launch_voice_title">Koptelefoon start microfoon</string>
     <string name="button_headsethook_launch_voice_summary">Drukken op de koptelefoonknop start de microfoon</string>
@@ -166,6 +168,8 @@
     <!-- Network speed -->
     <string name="show_network_speed">Netwerksnelheidsindicator</string>
     <string name="show_network_speed_summary">Toon de netwerksnelheid in de statusbalk</string>
+    <string name="show_network_speed_bits">Toon snelheid in bits per seconde</string>
+    <string name="show_network_speed_bytes">Toon snelheid in Bytes per seconde</string>
 
     <!-- Status Bar Activity Indicators -->
     <string name="show_activity_indicators_on_status_bar_title">Netwerk activiteiten indicator</string>
@@ -201,11 +205,14 @@
     <string name="keys_action_back">Back knop</string>
     <string name="keys_action_last_app">Terug naar laatste app</string>
     <string name="keys_action_kill_app">Sluit app</string>
+    <string name="keys_action_sleep">Ga in slaapstand</string>
     <string name="keys_action_normal">Normaal indrukken</string>
     <string name="keys_action_long">Ingedrukt houden</string>
     <string name="keys_action_double">Dubbele tik</string>
     <string name="dialog_no_home_key_title">Geen home actie</string>
     <string name="no_home_key">Je hebt geen knop toegewezen aan de \"Home"\ actie! Dit kan je apparaat onbruikbaar maken!</string>
+    <string name="virtual_key_haptic_feedback_title">Trillen bij aanraking</string>
+    <string name="virtual_key_haptic_feedback_summary">Inschakelen hangt af van \"Trillen bij aanraking\" bij geluidsinstellingen</string>
 
     <!-- Power Menu Options-->
     <string name="bars_and_menus_category_power_menu_title">Power-menu</string>
@@ -213,6 +220,12 @@
     <string name="power_menu_toggle_screenshot_summary">Toon schermafbeelding optie in power-menu</string>
     <string name="power_menu_toggle_screenrecord_title">Schermopname</string>
     <string name="power_menu_toggle_screenrecord_summary">Toon schermopname optie in power-menu</string>
+    <string name="power_menu_toggle_mobile_data_title">Mobiele data</string>
+    <string name="power_menu_toggle_mobile_data_summary">Toon mobiele data optie in power-menu</string>
+    <string name="power_menu_toggle_airplane_mode_title">Vliegmodus</string>
+    <string name="power_menu_toggle_airplane_mode_summary">Toon vliegmodus optie in power-menu</string>
+    <string name="power_menu_toggle_sound_toggles_title">Geluid beheren</string>
+    <string name="power_menu_toggle_sound_toggles_summary">Toon geluidsopties in het power-menu</string>
 
     <!-- Active Display Notifications -->
     <string name="ad_settings_title">Actieve weergave</string>
@@ -313,6 +326,7 @@
     <string name="navring_action_torch">Zaklamp aan/uit</string>
     <string name="navring_action_google_now">Google Now</string>
     <string name="navring_choose_action_title">Kies actie</string>
+    <string name="navring_action_last_app">Wissel naar laatste app</string>
 
     <!-- String for IconPicker -->
     <string name="icon_picker_title">Kies pictogram bron</string>
@@ -360,4 +374,35 @@
     <string name="icon_picker_sms">Berichten</string>
     <string name="icon_picker_twitter">Twitter</string>
 
+    <!-- QuickSettings: Dynamic Row -->
+    <string name="qs_configurable_title">Instelbare snelle instellingen</string>
+    <string name="qs_configurable_summary">In- of uitschakelen van dynamische rij wijzigingen</string>
+
+    <!-- QuickSettings: Quick Pulldown -->
+    <string name="title_quick_pulldown">Snel openen</string>
+    <string name="summary_quick_pulldown">Snelle instellingen openen met een vinger</string>
+    <string name="quick_pulldown_off">Uitgeschakeld</string>
+    <string name="quick_pulldown_centre">Midden</string>
+    <string name="quick_pulldown_left">Links</string>
+    <string name="quick_pulldown_right">Rechts</string>
+
+    <!-- QuickSettings: Smart Pulldown -->
+    <string name="smart_pulldown_title">Slim openen</string>
+    <string name="smart_pulldown_summary">Snelle instellingen openen als er geen notificaties zijn</string>
+    <string name="smart_pulldown_off">Uitgeschakeld</string>
+    <string name="smart_pulldown_dismissable">Openen als er geen verwijderbare notificaties zijn</string>
+    <string name="smart_pulldown_persistent">Openen als er geen notificaties zijn</string>
+
+    <!-- Cursor control -->
+    <string name="volume_key_cursor_control_title">Cursor met volumeknoppen</string>
+    <string name="volume_key_cursor_control_on">Links/rechts</string>
+    <string name="volume_key_cursor_control_on_reverse">Rechts/links</string>
+
+    <!-- Quick Swipe -->
+    <string name="quick_swipe_title">Snel vegen</string>
+    <string name="quick_swipe_summary">Snel vegen tussen snelle instellingen en het notificatie paneel</string>
+
+    <!-- navigation bar -->
+    <string name="soft_back_kill_app_title">Lang drukken op terug sluit app</string>
+    <string name="soft_back_kill_app_summary">Door lang op de terug knop te drukken sluit de app op de voorgrond</string>
 </resources>
\ No newline at end of file
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 7275598..f08a86a 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -217,15 +217,15 @@
     <!-- Power Menu Options-->
     <string name="bars_and_menus_category_power_menu_title">Power menu</string>
     <string name="power_menu_toggle_screenshot_title">Screenshot</string>
-    <string name="power_menu_toggle_screenshot_summary">Show screenshot option in Power Menu</string>
-    <string name="power_menu_toggle_screenrecord_title">Screen Record</string>
-    <string name="power_menu_toggle_screenrecord_summary">Show screen Record option in Power Menu</string>
-    <string name="power_menu_toggle_mobile_data_title">Mobile Data</string>
-    <string name="power_menu_toggle_mobile_data_summary">Show Mobile Data option in Power Menu</string>
+    <string name="power_menu_toggle_screenshot_summary">Show screenshot option in power menu</string>
+    <string name="power_menu_toggle_screenrecord_title">Screen record</string>
+    <string name="power_menu_toggle_screenrecord_summary">Show screen record option in power menu</string>
+    <string name="power_menu_toggle_mobile_data_title">Mobile data</string>
+    <string name="power_menu_toggle_mobile_data_summary">Show mobile data option in power menu</string>
     <string name="power_menu_toggle_airplane_mode_title">Airplane mode</string>
-    <string name="power_menu_toggle_airplane_mode_summary">Show Airplane option in Power Menu</string>
+    <string name="power_menu_toggle_airplane_mode_summary">Show airplane option in power menu</string>
     <string name="power_menu_toggle_sound_toggles_title">Sound toggles</string>
-    <string name="power_menu_toggle_sound_toggles_summary">Show sound toggles in Power Menu</string>
+    <string name="power_menu_toggle_sound_toggles_summary">Show sound toggles in power menu</string>
 
     <!-- Active Display Notifications -->
     <string name="ad_settings_title">Active display</string>
@@ -234,30 +234,30 @@
     <string name="ad_enable_summary_on">Active display enabled</string>
     <string name="ad_enable_summary_off">Active display disabled</string>
     <string name="ad_text_title">Notification text</string>
-    <string name="ad_text_summary">Show the notification text around the ring.</string>
+    <string name="ad_text_summary">Show the notification text around the ring</string>
     <string name="ad_all_notifications_title">All notifications</string>
-    <string name="ad_all_notifications_summary">Show all notifications including ongoing, non-clearable notifications.</string>
+    <string name="ad_all_notifications_summary">Show all notifications including ongoing, non-clearable notifications</string>
     <string name="ad_hide_low_priority_title">Hide low priority</string>
     <string name="ad_hide_low_priority_title">Hide low priority</string>
-    <string name="ad_hide_low_priority_summary">Hide low priority notifications such as those from Google Now.</string>
+    <string name="ad_hide_low_priority_summary">Hide low priority notifications such as those from Google Now</string>
     <string name="ad_pocket_mode_title">Pocket mode</string>
-    <string name="ad_pocket_mode_summary">Show active display notifications when you take the device out of your pocket.</string>
+    <string name="ad_pocket_mode_summary">Show active display notifications when you take the device out of your pocket</string>
     <string name="ad_redisplay_title">Redisplay notifications</string>
     <string name="ad_timeout_title">Display timeout</string>
     <string name="ad_threshold_title">Threshold to proximity</string>
     <string name="ad_brightness_title">Notification brightness</string>
     <string name="ad_customizations_title">Customizations</string>
     <string name="ad_excluded_apps_title">Excluded applications</string>
-    <string name="ad_excluded_apps_summary">Excluded applications will not show up in active display.</string>
+    <string name="ad_excluded_apps_summary">Excluded applications will not show up in active display</string>
     <string name="ad_show_date_title">Show date</string>
     <string name="ad_show_ampm_title">Show AM/PM</string>
     <string name="ad_sunlight_mode_title">Sunlight mode</string>
-    <string name="ad_brightness_summary">Brightness level for displaying notifications when automatic brightness is not enabled.</string>
+    <string name="ad_brightness_summary">Brightness level for displaying notifications when automatic brightness is not enabled</string>
     <string name="ad_show_date_summary">Show the date above the clock</string>
     <string name="ad_show_ampm_summary">Show AM/PM indicator next to time when using 12hour format</string>
-    <string name="ad_sunlight_mode_summary">Invert the colors when in areas with bright light such as direct sunlight.</string>
+    <string name="ad_sunlight_mode_summary">Invert the colors when in areas with bright light such as direct sunlight</string>
     <string name="ad_turnoff_mode_title">Turn off display</string>
-    <string name="ad_turnoff_mode_summary">Turn off display if the device gets pocketed again and was turned on by Active Display.</string>
+    <string name="ad_turnoff_mode_summary">Turn off display if the device gets pocketed again and was turned on by active display</string>
     <string name="ad_redisplay_never">Never</string>
     <string name="ad_redisplay_1m">1 minute</string>
     <string name="ad_redisplay_5m">5 minutes</string>
@@ -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);
+        }
+    }
+}