ui: lock drawer in landscape on tablets

On tablets, the drawer is always displayed in landscape. It can not be
closed.

Change-Id: I3ed827813fcbfcb71a8ceff1536470b1313aaef6
Tuleap: #1419
diff --git a/ring-android/app/src/main/AndroidManifest.xml b/ring-android/app/src/main/AndroidManifest.xml
index dff19c7..bc969b8 100644
--- a/ring-android/app/src/main/AndroidManifest.xml
+++ b/ring-android/app/src/main/AndroidManifest.xml
@@ -73,7 +73,7 @@
         android:supportsRtl="true">
         <activity
             android:name=".client.HomeActivity"
-            android:configChanges="orientation|screenSize|screenLayout|smallestScreenSize"
+            android:configChanges="screenSize|screenLayout|smallestScreenSize"
             android:label="@string/title_activity_sflphone_home"
             android:launchMode="singleTask"
             android:screenOrientation="fullUser"
diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
index 01c5edd..62126b1 100644
--- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
@@ -34,6 +34,7 @@
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
+import android.graphics.Color;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
@@ -54,6 +55,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import java.io.File;
@@ -96,11 +98,12 @@
     public static final int REQUEST_PERMISSION_CAMERA = 113;
     public static final int REQUEST_PERMISSION_READ_STORAGE = 114;
 
-    private static final String HOME_TAG = "Home";
-    private static final String ACCOUNTS_TAG = "Accounts";
-    private static final String ABOUT_TAG = "About";
-    private static final String SETTINGS_TAG = "Prefs";
-    private static final String SHARE_TAG = "Share";
+    public static final String HOME_TAG = "Home";
+    public static final String ACCOUNTS_TAG = "Accounts";
+    public static final String ABOUT_TAG = "About";
+    public static final String SETTINGS_TAG = "Prefs";
+    public static final String SHARE_TAG = "Share";
+    private static final String NAVIGATION_TAG = "Navigation";
 
 
     private LocalService service;
@@ -109,6 +112,7 @@
     private boolean mIsMigrationDialogAlreadyShowed;
 
     private ActionBarDrawerToggle mDrawerToggle;
+    private Boolean isDrawerLocked = false;
 
     @BindView(R.id.left_drawer)
     NavigationView mNavigationView;
@@ -128,6 +132,9 @@
     @BindView(R.id.action_button)
     FloatingActionButton actionButton;
 
+    @BindView(R.id.content_frame)
+    RelativeLayout mFrameLayout;
+
     private float mToolbarSize;
     protected android.app.Fragment fContent;
     protected RingNavigationFragment fNavigation;
@@ -145,18 +152,19 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
 
+        super.onCreate(savedInstanceState);
+        Log.d(TAG, "onCreate");
         mToolbarSize = getResources().getDimension(R.dimen.abc_action_bar_default_height_material);
 
-        super.onCreate(savedInstanceState);
+        if (savedInstanceState != null) {
+            fNavigation = (RingNavigationFragment) getFragmentManager().findFragmentByTag(NAVIGATION_TAG);
+        }
         setContentView(R.layout.activity_home);
 
         ButterKnife.bind(this);
 
         setSupportActionBar(mToolbar);
 
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-        getSupportActionBar().setHomeButtonEnabled(true);
-
         mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
                 mNavigationDrawer, /* DrawerLayout object */
                 //  R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
@@ -180,7 +188,24 @@
             }
         };
 
-        mNavigationDrawer.addDrawerListener(mDrawerToggle);
+        if (mFrameLayout.getPaddingLeft() == (int) getResources().getDimension(R.dimen.drawer_size)) {
+            mNavigationDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
+            mNavigationDrawer.setScrimColor(Color.TRANSPARENT);
+            isDrawerLocked = true;
+        }
+
+        if (!isDrawerLocked) {
+            mNavigationDrawer.addDrawerListener(mDrawerToggle);
+            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+            getSupportActionBar().setHomeButtonEnabled(true);
+        }
+
+        if (fNavigation == null && savedInstanceState == null) {
+            fNavigation = new RingNavigationFragment();
+            getFragmentManager().beginTransaction()
+                    .replace(R.id.navigation_container, fNavigation, NAVIGATION_TAG)
+                    .commit();
+        }
 
         // Bind to LocalService
         String[] toRequest = LocalService.checkRequiredPermissions(this);
@@ -414,7 +439,7 @@
 
     @Override
     public void onBackPressed() {
-        if (mNavigationDrawer.isDrawerVisible(GravityCompat.START)) {
+        if (mNavigationDrawer.isDrawerVisible(GravityCompat.START) && !isDrawerLocked) {
             mNavigationDrawer.closeDrawer(GravityCompat.START);
             return;
         }
@@ -467,13 +492,6 @@
             registerReceiver(receiver, intentFilter);
             mBound = true;
 
-            if (fNavigation == null) {
-                fNavigation = new RingNavigationFragment();
-                getFragmentManager().beginTransaction()
-                        .replace(R.id.navigation_container, fNavigation, null)
-                        .commit();
-            }
-
             FragmentManager fragmentManager = getFragmentManager();
             fContent = fragmentManager.findFragmentById(R.id.main_frame);
             if (fContent == null) {
@@ -489,9 +507,6 @@
         @Override
         public void onServiceDisconnected(ComponentName className) {
             Log.d(TAG, "onServiceDisconnected " + className.getClassName());
-            if (fNavigation != null) {
-                fNavigation = null;
-            }
             mBound = false;
         }
     };
@@ -555,7 +570,9 @@
 
     @Override
     public void onNavigationSectionSelected(RingNavigationFragment.Section section) {
-        mNavigationDrawer.closeDrawers();
+        if (!isDrawerLocked) {
+            mNavigationDrawer.closeDrawers();
+        }
 
         switch (section) {
             case HOME:
@@ -601,12 +618,16 @@
     }
     
     public void onAccountSelected() {
-        mNavigationDrawer.closeDrawers();
+        if (!isDrawerLocked) {
+            mNavigationDrawer.closeDrawers();
+        }
     }
 
     @Override
     public void onAddSipAccountSelected() {
-        mNavigationDrawer.closeDrawers();
+        if (!isDrawerLocked) {
+            mNavigationDrawer.closeDrawers();
+        }
         Intent intent = new Intent(HomeActivity.this, AccountWizard.class);
         intent.setAction(AccountConfig.ACCOUNT_TYPE_SIP);
         startActivityForResult(intent, AccountsManagementFragment.ACCOUNT_CREATE_REQUEST);
@@ -614,7 +635,9 @@
 
     @Override
     public void onAddRingAccountSelected() {
-        mNavigationDrawer.closeDrawers();
+        if (!isDrawerLocked) {
+            mNavigationDrawer.closeDrawers();
+        }
         Intent intent = new Intent(HomeActivity.this, AccountWizard.class);
         intent.setAction(AccountConfig.ACCOUNT_TYPE_RING);
         startActivityForResult(intent, AccountsManagementFragment.ACCOUNT_CREATE_REQUEST);
@@ -633,7 +656,7 @@
     }
 
     public void goToSettings() {
-        if (mNavigationDrawer != null) {
+        if (mNavigationDrawer != null && !isDrawerLocked) {
             mNavigationDrawer.closeDrawers();
         }
         if (fContent instanceof SettingsFragment) {
diff --git a/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java b/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java
index 6cd6532..378fa71 100644
--- a/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java
@@ -263,6 +263,23 @@
 
         setupNavigationMenu();
         setupAccountList();
+        if (savedInstanceState != null) {
+            if (getFragmentManager().findFragmentByTag(HomeActivity.ACCOUNTS_TAG) != null &&
+                    getFragmentManager().findFragmentByTag(HomeActivity.ACCOUNTS_TAG).isAdded()) {
+                selectSection(RingNavigationFragment.Section.MANAGE);
+            } else if (getFragmentManager().findFragmentByTag(HomeActivity.SETTINGS_TAG) != null &&
+                    getFragmentManager().findFragmentByTag(HomeActivity.SETTINGS_TAG).isAdded()) {
+                selectSection(RingNavigationFragment.Section.SETTINGS);
+            } else if (getFragmentManager().findFragmentByTag(HomeActivity.SHARE_TAG) != null &&
+                    getFragmentManager().findFragmentByTag(HomeActivity.SHARE_TAG).isAdded()) {
+                selectSection(RingNavigationFragment.Section.SHARE);
+            } else if (getFragmentManager().findFragmentByTag(HomeActivity.ABOUT_TAG) != null &&
+                    getFragmentManager().findFragmentByTag(HomeActivity.ABOUT_TAG).isAdded()) {
+                selectSection(RingNavigationFragment.Section.ABOUT);
+            } else {
+                selectSection(RingNavigationFragment.Section.HOME);
+            }
+        }
 
         return inflatedView;
     }
@@ -473,6 +490,7 @@
         }
     }
 
+
     private void updateSelectedAccountView() {
         Account selectedAccount = mAccountService.getCurrentAccount();
         if (selectedAccount == null) {
diff --git a/ring-android/app/src/main/res/layout-w720dp-land/activity_home.xml b/ring-android/app/src/main/res/layout-w720dp-land/activity_home.xml
new file mode 100644
index 0000000..91ddc05
--- /dev/null
+++ b/ring-android/app/src/main/res/layout-w720dp-land/activity_home.xml
@@ -0,0 +1,106 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <android.support.v4.widget.DrawerLayout
+        android:id="@+id/drawer_layout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:saveEnabled="false"
+        tools:context=".client.HomeActivity">
+
+        <android.support.design.widget.NavigationView
+            android:id="@+id/left_drawer"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="start"
+            android:fitsSystemWindows="true"
+            android:theme="@style/AppThemeBase"
+            android:windowBackground="@color/white"
+            app:itemTextColor="?android:textColorPrimary">
+
+            <FrameLayout
+                android:id="@+id/navigation_container"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
+        </android.support.design.widget.NavigationView>
+
+    </android.support.v4.widget.DrawerLayout>
+
+    <RelativeLayout
+        android:id="@+id/content_frame"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:paddingLeft="@dimen/drawer_content_padding">
+
+        <android.support.v7.widget.Toolbar
+            android:id="@+id/main_toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:layout_alignParentTop="true"
+            android:background="@color/color_primary_light"
+            android:elevation="@dimen/toolbar_elevation"
+            android:minHeight="?attr/actionBarSize"
+            android:popupTheme="@style/Theme.AppCompat.Light.NoActionBar"
+            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+            android:titleTextAppearance="@style/ToolbarTitle"
+            app:contentInsetStart="@dimen/toolbar_content_inset"
+            app:elevation="@dimen/toolbar_elevation"
+            app:titleTextAppearance="@style/ToolbarTitle" />
+
+        <LinearLayout
+            android:id="@+id/toolbar_spacer"
+            android:layout_width="match_parent"
+            android:layout_height="72sp"
+            android:layout_below="@+id/main_toolbar"
+            android:background="@color/color_primary_light"
+            android:elevation="@dimen/toolbar_elevation"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:paddingLeft="@dimen/toolbar_content_inset"
+            android:visibility="gone">
+
+            <TextView
+                android:id="@+id/toolbar_spacer_title"
+                style="@style/ToolbarTitle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/menu_item_accounts"
+                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
+
+        </LinearLayout>
+
+        <FrameLayout
+            android:id="@+id/main_frame"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:layout_below="@+id/toolbar_spacer"
+            android:orientation="vertical" />
+
+        <android.support.design.widget.FloatingActionButton
+            android:id="@+id/action_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignBottom="@+id/toolbar_spacer"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentStart="true"
+            android:layout_marginBottom="@dimen/action_button_bpadding"
+            android:layout_marginLeft="@dimen/action_button_lpadding"
+            android:layout_marginStart="@dimen/action_button_lpadding"
+            android:adjustViewBounds="false"
+            android:baselineAlignBottom="false"
+            android:visibility="gone"
+            app:elevation="6dp"
+            app:fabSize="mini"
+            app:pressedTranslationZ="12dp"
+            app:rippleColor="@android:color/white" />
+
+    </RelativeLayout>
+</FrameLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/activity_home.xml b/ring-android/app/src/main/res/layout/activity_home.xml
index 6dc9c89..29013ff 100644
--- a/ring-android/app/src/main/res/layout/activity_home.xml
+++ b/ring-android/app/src/main/res/layout/activity_home.xml
@@ -26,11 +26,14 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fitsSystemWindows="true"
+    android:saveEnabled="false"
     tools:context=".client.HomeActivity">
 
     <RelativeLayout
+        android:id="@+id/content_frame"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"
+        android:paddingLeft="@dimen/drawer_content_padding">
 
         <android.support.v7.widget.Toolbar
             android:id="@+id/main_toolbar"
diff --git a/ring-android/app/src/main/res/values-w720dp-land/dimens.xml b/ring-android/app/src/main/res/values-w720dp-land/dimens.xml
new file mode 100644
index 0000000..3700c3f
--- /dev/null
+++ b/ring-android/app/src/main/res/values-w720dp-land/dimens.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="drawer_content_padding">320dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/values/dimens.xml b/ring-android/app/src/main/res/values/dimens.xml
index 47d2af6..985e0f1 100644
--- a/ring-android/app/src/main/res/values/dimens.xml
+++ b/ring-android/app/src/main/res/values/dimens.xml
@@ -40,4 +40,7 @@
     <dimen name="toolbar_content_inset">72dp</dimen>
     <dimen name="toolbar_elevation">4dp</dimen>
 
+    <dimen name="drawer_content_padding">0dp</dimen>
+    <dimen name="drawer_size">320dp</dimen>
+
 </resources>
\ No newline at end of file