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

Commit 58804418 authored by Aga Wronska's avatar Aga Wronska Committed by Android (Google) Code Review
Browse files

Merge "Applied Material design rules to calculate drawer width" into nyc-dev

parents 36623485 c32a2998
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.
     */