Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c32a2998 authored by Aga Wronska's avatar Aga Wronska
Browse files

Applied Material design rules to calculate drawer width

Bug: 27437727
Change-Id: I2f634815d5e534053e0ed7a66631df9bddf32bd5
parent 952607ab
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20,4 +20,5 @@

    <dimen name="list_divider_inset">80dp</dimen>

    <dimen name="max_drawer_width">320dp</dimen>
</resources>
+1 −0
Original line number Diff line number Diff line
@@ -20,4 +20,5 @@

    <dimen name="list_item_padding">24dp</dimen>

    <dimen name="max_drawer_width">320dp</dimen>
</resources>
+1 −0
Original line number Diff line number Diff line
@@ -37,4 +37,5 @@
    <dimen name="dir_elevation">8dp</dimen>
    <dimen name="drag_shadow_size">120dp</dimen>
    <dimen name="grid_item_elevation">2dp</dimen>
    <dimen name="max_drawer_width">280dp</dimen>
</resources>
+56 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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.Activity;
import android.content.Context;
import android.graphics.Point;
import android.util.TypedValue;

/*
 * Convenience class for getting display related attributes
 */
public final class Display {
    /*
     * Returns the screen width in pixels.
     */
    public static float screenWidth(Activity activity) {
        Point size = new Point();
        activity.getWindowManager().getDefaultDisplay().getSize(size);
        return size.x;
    }

    /*
     * Returns logical density of the display.
     */
    public static float density(Context context) {
        return context.getResources().getDisplayMetrics().density;
    }

    /*
     * Returns action bar height in pixels.
     */
    public static float actionBarHeight(Context context) {
        int actionBarHeight = 0;
        TypedValue tv = new TypedValue();
        if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
            actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
                    context.getResources().getDisplayMetrics());
        }
        return actionBarHeight;
    }
}
+21 −0
Original line number Diff line number Diff line
@@ -16,10 +16,14 @@

package com.android.documentsui;

import static com.android.documentsui.Shared.DEBUG;

import android.app.Activity;
import android.content.Context;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.DrawerLayout.DrawerListener;
import android.util.Log;
import android.view.View;
import android.widget.Toolbar;

@@ -30,6 +34,8 @@ import android.widget.Toolbar;
 */
abstract class DrawerController implements DrawerListener {

    public static final String TAG = "DrawerController";

    abstract void setOpen(boolean open);
    abstract boolean isPresent();
    abstract boolean isOpen();
@@ -50,6 +56,8 @@ abstract class DrawerController implements DrawerListener {
        View drawer = activity.findViewById(R.id.drawer_roots);
        Toolbar toolbar = (Toolbar) activity.findViewById(R.id.roots_toolbar);

        drawer.getLayoutParams().width = calculateDrawerWidth(activity);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                activity,
                layout,
@@ -67,6 +75,19 @@ abstract class DrawerController implements DrawerListener {
        return new DummyDrawerController();
    }

    private static int calculateDrawerWidth(Activity activity) {
        // Material design specification for navigation drawer:
        // https://www.google.com/design/spec/patterns/navigation-drawer.html
        float width = Display.screenWidth(activity) - Display.actionBarHeight(activity);
        float maxWidth = activity.getResources().getDimension(R.dimen.max_drawer_width);
        int finalWidth = (int) ((width > maxWidth ? maxWidth : width));

        if (DEBUG)
            Log.d(TAG, "Calculated drawer width:" + (finalWidth / Display.density(activity)));

        return finalWidth;
    }

    /**
     * Runtime controller that manages a real drawer.
     */