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