am c3214d18: More DocumentsUI material iteration.

* commit 'c3214d183b7bc3e2addc6c08b138ce364a8b86b7':
  More DocumentsUI material iteration.
This commit is contained in:
Jeff Sharkey
2014-07-29 23:26:08 +00:00
committed by Android Git Automerger
27 changed files with 323 additions and 276 deletions

View File

@@ -11,7 +11,7 @@
<activity
android:name=".DocumentsActivity"
android:theme="@style/Theme"
android:theme="@style/DocumentsTheme"
android:icon="@drawable/ic_doc_text">
<intent-filter>
<action android:name="android.intent.action.OPEN_DOCUMENT" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 B

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 B

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

After

Width:  |  Height:  |  Size: 260 B

View File

@@ -15,7 +15,11 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_activated="true" android:drawable="@color/accent_item_activated" />
<item android:state_focused="false" android:state_activated="true" android:drawable="@color/accent_item_activated" />
<item android:state_focused="true" android:state_activated="true">
<color android:color="?android:attr/colorAccent" />
</item>
<item android:state_focused="false" android:state_activated="true">
<color android:color="?android:attr/colorAccent" />
</item>
<item android:drawable="@android:color/transparent" />
</selector>

View File

@@ -15,8 +15,11 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/item_root_pressed" />
<item android:state_activated="true" android:drawable="@color/item_root_focused" />
<item android:state_focused="true" android:drawable="@color/item_root_focused" />
<item android:state_focused="true" android:state_activated="true">
<color android:color="@color/accent_color_overlay" />
</item>
<item android:state_focused="false" android:state_activated="true">
<color android:color="@color/accent_color_overlay" />
</item>
<item android:drawable="@android:color/transparent" />
</selector>

View File

@@ -17,7 +17,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="@drawable/item_activated">
android:background="@drawable/item_activated">
<LinearLayout
android:layout_width="match_parent"

View File

@@ -17,44 +17,59 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:baselineAligned="false">
android:orientation="vertical">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/dialog_roots">
<Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"
android:elevation="8dp"
android:theme="?android:attr/actionBarTheme">
<Spinner
android:id="@+id/stack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:overlapAnchor="true" />
</Toolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/container_roots"
android:layout_width="250dp"
android:layout_height="match_parent" />
<ImageView
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:scaleType="fitXY"
android:src="@drawable/ic_drawer_shadow_tablet" />
android:layout_weight="1"
android:orientation="vertical"
android:elevation="8dp"
android:background="@*android:color/material_grey_50">
</FrameLayout>
<com.android.documentsui.DirectoryContainerView
android:id="@+id/container_directory"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<FrameLayout
android:id="@+id/container_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@*android:color/material_grey_50"
android:elevation="8dp" />
<com.android.documentsui.DirectoryContainerView
android:id="@+id/container_directory"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<FrameLayout
android:id="@+id/container_save"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>

View File

@@ -24,6 +24,23 @@
android:layout_height="match_parent"
android:orientation="vertical">
<Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"
android:elevation="8dp"
android:theme="?android:attr/actionBarTheme">
<Spinner
android:id="@+id/stack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:overlapAnchor="true" />
</Toolbar>
<com.android.documentsui.DirectoryContainerView
android:id="@+id/container_directory"
android:layout_width="match_parent"
@@ -33,15 +50,35 @@
<FrameLayout
android:id="@+id/container_save"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:background="@*android:color/material_grey_50"
android:elevation="8dp" />
</LinearLayout>
<FrameLayout
android:id="@+id/container_roots"
<LinearLayout
android:id="@+id/drawer_roots"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#fff" />
android:orientation="vertical"
android:elevation="16dp"
android:background="@*android:color/white">
<Toolbar
android:id="@+id/roots_toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"
android:elevation="8dp"
android:theme="?android:attr/actionBarTheme" />
<FrameLayout
android:id="@+id/container_roots"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>

View File

@@ -17,7 +17,7 @@
<com.android.documentsui.DirectoryView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ic_dir_shadow">
android:background="@*android:color/material_grey_50">
<TextView
android:id="@android:id/empty"

View File

@@ -17,32 +17,16 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:orientation="horizontal"
android:baselineAligned="false"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall">
<!-- Le sigh, this really should be an asset -->
<View
<Button
android:id="@android:id/button1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ccc" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false"
android:gravity="center_vertical"
android:background="#ddd"
android:minHeight="?android:attr/listPreferredItemHeightSmall">
<Button
android:id="@android:id/button1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/selectableItemBackground"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textAllCaps="false"
android:padding="8dp" />
</LinearLayout>
android:layout_height="match_parent"
android:textAllCaps="false"
style="?android:attr/buttonBarPositiveButtonStyle" />
</LinearLayout>

View File

@@ -18,4 +18,5 @@
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/ic_drawer_hairline_divider" />
android:paddingTop="8dp"
android:divider="@null" />

View File

@@ -17,66 +17,55 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:paddingStart="@dimen/list_item_padding"
android:orientation="horizontal"
android:baselineAligned="false"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall">
<!-- Le sigh, this really should be an asset -->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ccc" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false"
android:gravity="center_vertical"
android:background="#ddd"
android:minHeight="?android:attr/listPreferredItemHeightSmall">
<FrameLayout
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginEnd="16dp">
<ImageView
android:id="@android:id/icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_width="@dimen/root_icon_size"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:contentDescription="@null" />
<EditText
android:id="@android:id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:selectAllOnFocus="true" />
</FrameLayout>
<FrameLayout
<EditText
android:id="@android:id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:selectAllOnFocus="true" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<Button
android:id="@android:id/button1"
android:layout_width="wrap_content"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:text="@string/menu_save"
style="?android:attr/buttonBarPositiveButtonStyle" />
<Button
android:id="@android:id/button1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?android:attr/selectableItemBackground"
android:text="@string/menu_save"
android:textAllCaps="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:padding="8dp" />
<ProgressBar
android:id="@android:id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
android:indeterminate="true"
android:padding="8dp"
style="?android:attr/progressBarStyle" />
<ProgressBar
android:id="@android:id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
android:indeterminate="true"
android:padding="8dp"
style="?android:attr/progressBarStyle" />
</FrameLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View File

@@ -19,7 +19,7 @@
android:layout_height="@dimen/grid_item_height"
android:orientation="vertical"
android:background="@color/grid_item_background"
android:foreground="@drawable/item_activated">
android:foreground="@drawable/item_activated_overlay">
<ImageView
android:id="@+id/icon_thumb"

View File

@@ -17,7 +17,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="@drawable/item_activated">
android:background="@drawable/item_activated">
<LinearLayout
android:layout_width="match_parent"

View File

@@ -17,25 +17,33 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="48dp"
android:paddingStart="@dimen/list_item_padding"
android:paddingEnd="@dimen/list_item_padding"
android:gravity="center_vertical"
android:orientation="horizontal"
android:baselineAligned="false"
android:background="@drawable/item_root">
android:background="@drawable/item_activated">
<ImageView
android:id="@android:id/icon"
<FrameLayout
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginEnd="8dp"
android:scaleType="centerInside"
android:contentDescription="@null" />
android:layout_marginEnd="16dp">
<ImageView
android:id="@android:id/icon"
android:layout_width="@dimen/root_icon_size"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:contentDescription="@null" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:orientation="vertical">
<TextView
@@ -45,7 +53,8 @@
android:singleLine="true"
android:ellipsize="end"
android:textAlignment="viewStart"
style="@style/TextAppearance.Medium" />
android:textAppearance="@android:style/TextAppearance.Material.Body1"
android:textColor="?android:attr/textColorPrimary" />
<TextView
android:id="@android:id/summary"
@@ -54,7 +63,8 @@
android:singleLine="true"
android:ellipsize="end"
android:textAlignment="viewStart"
style="@style/TextAppearance.Small" />
android:textAppearance="@android:style/TextAppearance.Material.Body1"
android:textColor="?android:attr/textColorSecondary" />
</LinearLayout>

View File

@@ -14,7 +14,15 @@
limitations under the License.
-->
<View xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_drawer_tall_divider" />
android:paddingTop="8dp"
android:paddingBottom="8dp">
<View
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/listDivider" />
</FrameLayout>

View File

@@ -28,6 +28,7 @@
android:id="@+id/subdir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="8dp"
android:scaleType="centerInside"
android:visibility="gone"
android:src="@drawable/ic_subdirectory_arrow"
@@ -35,11 +36,13 @@
<TextView
android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:ellipsize="middle"
android:textAlignment="viewStart"
style="@style/TextAppearance.Medium" />
android:textAppearance="@android:style/TextAppearance.Material.Subhead"
android:textColor="?android:attr/textColorPrimary" />
</LinearLayout>

View File

@@ -14,12 +14,20 @@
limitations under the License.
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme" parent="@android:style/Theme.DeviceDefault.Light">
<item name="android:actionOverflowButtonStyle">@style/DarkerOverflow</item>
<item name="android:windowBackground">@*android:drawable/dialog_full_holo_light</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@*android:style/Animation.DeviceDefault.Dialog</item>
</style>
</resources>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="8dp"
android:orientation="horizontal"
android:baselineAligned="false">
<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="middle"
android:textAlignment="viewStart"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title" />
</LinearLayout>

View File

@@ -21,7 +21,7 @@
<item type="dimen" name="dialog_height">90%</item>
<dimen name="grid_padding_horiz">24dp</dimen>
<dimen name="grid_padding_vert">8dp</dimen>
<dimen name="grid_padding_vert">16dp</dimen>
<dimen name="grid_item_padding">8dp</dimen>

View File

@@ -15,12 +15,10 @@
-->
<resources>
<color name="chip">#ddd</color>
<color name="item_root_pressed">#33cccccc</color>
<color name="item_root_focused">#66cccccc</color>
<color name="grid_item_background">#ffe1e1e0</color>
<!-- Half-alpha of material_teal_500 -->
<color name="accent_color_overlay">#8800bcd4</color>
<color name="accent_item_activated">#88009587</color>
<color name="grid_item_background">@*android:color/material_grey_300</color>
</resources>

View File

@@ -37,4 +37,6 @@
<bool name="show_as_dialog">false</bool>
<bool name="always_show_summary">false</bool>
<dimen name="dir_elevation">8dp</dimen>
</resources>

View File

@@ -15,6 +15,29 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="DocumentsTheme" parent="@android:style/Theme.DeviceDefault.Light.DialogWhenLarge">
<item name="android:actionBarWidgetTheme">@null</item>
<item name="android:actionBarTheme">@*android:style/ThemeOverlay.Material.Dark.ActionBar</item>
<item name="android:actionBarPopupTheme">@*android:style/ThemeOverlay.Material.Light</item>
<item name="android:colorPrimaryDark">@*android:color/material_blue_grey_900</item>
<item name="android:colorPrimary">@*android:color/material_blue_grey_800</item>
<item name="android:colorAccent">@*android:color/material_teal_500</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="*android:windowFixedWidthMajor">@null</item>
<item name="*android:windowFixedWidthMinor">@null</item>
<item name="*android:windowMinWidthMajor">@null</item>
<item name="*android:windowMinWidthMinor">@null</item>
<item name="*android:windowFixedHeightMajor">80%</item>
<item name="*android:windowFixedHeightMinor">90%</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
</style>
<style name="TextAppearance" />
<style name="TextAppearance.Medium">
@@ -27,14 +50,4 @@
<item name="android:textColor">?android:attr/textColorTertiary</item>
</style>
<!-- Normally just a redirection, but this is used to make ourselves a
dialog on large tablets -->
<style name="Theme" parent="@android:style/Theme.DeviceDefault.Light">
<item name="android:actionOverflowButtonStyle">@style/DarkerOverflow</item>
</style>
<style name="DarkerOverflow" parent="@android:style/Widget.DeviceDefault.Light.ActionButton.Overflow">
<item name="android:src">@drawable/ic_menu_overflow</item>
</style>
</resources>

View File

@@ -35,14 +35,6 @@ public class DirectoryContainerView extends FrameLayout {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
setClipChildren(false);
setClipToOutline(false);
setClipToPadding(false);
}
@Override
protected void dispatchDraw(Canvas canvas) {
final ArrayList<View> disappearing = mDisappearingChildren;

View File

@@ -36,19 +36,6 @@ public class DirectoryView extends FrameLayout {
super(context, attrs);
}
@Override
public void setBackground(Drawable background) {
final Rect rect = new Rect();
background.getPadding(rect);
final boolean insetLeft = getResources().getBoolean(R.bool.list_divider_inset_left);
if (insetLeft) {
super.setBackground(new InsetDrawable(background, -rect.left, 0, -rect.right, 0));
} else {
super.setBackground(new InsetDrawable(background, -rect.right, 0, -rect.left, 0));
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
@@ -63,5 +50,11 @@ public class DirectoryView extends FrameLayout {
public void setPosition(float position) {
mPosition = position;
setX((mWidth > 0) ? (mPosition * mWidth) : 0);
if (mPosition != 0) {
setTranslationZ(getResources().getDimensionPixelSize(R.dimen.dir_elevation));
} else {
setTranslationZ(0);
}
}
}

View File

@@ -28,8 +28,6 @@ import static com.android.documentsui.DocumentsActivity.State.ACTION_OPEN_TREE;
import static com.android.documentsui.DocumentsActivity.State.MODE_GRID;
import static com.android.documentsui.DocumentsActivity.State.MODE_LIST;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
@@ -39,14 +37,12 @@ import android.content.ComponentName;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -55,7 +51,6 @@ import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.DrawerLayout.DrawerListener;
import android.util.Log;
@@ -64,17 +59,19 @@ import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toolbar;
import com.android.documentsui.RecentsProvider.RecentColumns;
import com.android.documentsui.RecentsProvider.ResumeColumns;
@@ -105,9 +102,14 @@ public class DocumentsActivity extends Activity {
private SearchView mSearchView;
private Toolbar mToolbar;
private Spinner mToolbarStack;
private Toolbar mRootsToolbar;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private View mRootsContainer;
private View mRootsDrawer;
private DirectoryContainerView mDirectoryContainer;
@@ -115,6 +117,8 @@ public class DocumentsActivity extends Activity {
private boolean mIgnoreNextClose;
private boolean mIgnoreNextCollapse;
private boolean mSearchExpanded;
private RootsCache mRoots;
private State mState;
@@ -127,59 +131,31 @@ public class DocumentsActivity extends Activity {
setResult(Activity.RESULT_CANCELED);
setContentView(R.layout.activity);
final Context context = this;
final Resources res = getResources();
mShowAsDialog = res.getBoolean(R.bool.show_as_dialog);
if (mShowAsDialog) {
// backgroundDimAmount from theme isn't applied; do it manually
// Strongly define our horizontal dimension; we leave vertical as
// WRAP_CONTENT so that system resizes us when IME is showing.
final WindowManager.LayoutParams a = getWindow().getAttributes();
a.dimAmount = 0.6f;
getWindow().setAttributes(a);
getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().setFlags(~0, WindowManager.LayoutParams.FLAG_DIM_BEHIND);
// Inset ourselves to look like a dialog
final Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
a.width = (int) res.getFraction(R.dimen.dialog_width, size.x, size.x);
final int width = (int) res.getFraction(R.dimen.dialog_width, size.x, size.x);
final int height = (int) res.getFraction(R.dimen.dialog_height, size.y, size.y);
final int insetX = (size.x - width) / 2;
final int insetY = (size.y - height) / 2;
final Drawable before = getWindow().getDecorView().getBackground();
final Drawable after = new InsetDrawable(before, insetX, insetY, insetX, insetY);
getWindow().getDecorView().setBackground(after);
// Dismiss when touch down in the dimmed inset area
getWindow().getDecorView().setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
final float x = event.getX();
final float y = event.getY();
if (x < insetX || x > v.getWidth() - insetX || y < insetY
|| y > v.getHeight() - insetY) {
finish();
return true;
}
}
return false;
}
});
getWindow().setAttributes(a);
} else {
// Non-dialog means we have a drawer
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer_glyph, R.string.drawer_open, R.string.drawer_close);
R.drawable.ic_hamburger, R.string.drawer_open, R.string.drawer_close);
mDrawerLayout.setDrawerListener(mDrawerListener);
mDrawerLayout.setDrawerShadow(R.drawable.ic_drawer_shadow, GravityCompat.START);
mRootsContainer = findViewById(R.id.container_roots);
mRootsDrawer = findViewById(R.id.drawer_roots);
}
mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
@@ -190,10 +166,23 @@ public class DocumentsActivity extends Activity {
buildDefaultState();
}
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitleTextAppearance(context,
android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title);
mToolbarStack = (Spinner) findViewById(R.id.stack);
mToolbarStack.setOnItemSelectedListener(mStackListener);
mRootsToolbar = (Toolbar) findViewById(R.id.roots_toolbar);
if (mRootsToolbar != null) {
mRootsToolbar.setTitleTextAppearance(context,
android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title);
}
// Hide roots when we're managing a specific root
if (mState.action == ACTION_MANAGE) {
if (mShowAsDialog) {
findViewById(R.id.dialog_roots).setVisibility(View.GONE);
findViewById(R.id.container_roots).setVisibility(View.GONE);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
@@ -382,15 +371,11 @@ public class DocumentsActivity extends Activity {
@Override
public void onDrawerOpened(View drawerView) {
mDrawerToggle.onDrawerOpened(drawerView);
updateActionBar();
invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
mDrawerToggle.onDrawerClosed(drawerView);
updateActionBar();
invalidateOptionsMenu();
}
@Override
@@ -410,9 +395,9 @@ public class DocumentsActivity extends Activity {
public void setRootsDrawerOpen(boolean open) {
if (!mShowAsDialog) {
if (open) {
mDrawerLayout.openDrawer(mRootsContainer);
mDrawerLayout.openDrawer(mRootsDrawer);
} else {
mDrawerLayout.closeDrawer(mRootsContainer);
mDrawerLayout.closeDrawer(mRootsDrawer);
}
}
}
@@ -421,44 +406,51 @@ public class DocumentsActivity extends Activity {
if (mShowAsDialog) {
return false;
} else {
return mDrawerLayout.isDrawerOpen(mRootsContainer);
return mDrawerLayout.isDrawerOpen(mRootsDrawer);
}
}
public void updateActionBar() {
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(true);
final boolean showIndicator = !mShowAsDialog && (mState.action != ACTION_MANAGE);
actionBar.setDisplayHomeAsUpEnabled(showIndicator);
if (mDrawerToggle != null) {
mDrawerToggle.setDrawerIndicatorEnabled(showIndicator);
}
if (isRootsDrawerOpen()) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setIcon(new ColorDrawable());
if (mRootsToolbar != null) {
if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT
|| mState.action == ACTION_OPEN_TREE) {
actionBar.setTitle(R.string.title_open);
mRootsToolbar.setTitle(R.string.title_open);
} else if (mState.action == ACTION_CREATE) {
actionBar.setTitle(R.string.title_save);
mRootsToolbar.setTitle(R.string.title_save);
}
} else {
final RootInfo root = getCurrentRoot();
actionBar.setIcon(root != null ? root.loadIcon(this) : null);
}
final RootInfo root = getCurrentRoot();
final boolean showRootIcon = mShowAsDialog || (mState.action == ACTION_MANAGE);
if (showRootIcon) {
mToolbar.setNavigationIcon(root != null ? root.loadIcon(this) : null);
mToolbar.setNavigationOnClickListener(null);
} else {
mToolbar.setNavigationIcon(R.drawable.ic_hamburger);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setRootsDrawerOpen(true);
}
});
}
if (mSearchExpanded) {
mToolbar.setTitle(null);
mToolbarStack.setVisibility(View.GONE);
mToolbarStack.setAdapter(null);
} else {
if (mState.stack.size() <= 1) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setTitle(root.title);
mToolbar.setTitle(root.title);
mToolbarStack.setVisibility(View.GONE);
mToolbarStack.setAdapter(null);
} else {
mToolbar.setTitle(null);
mToolbarStack.setVisibility(View.VISIBLE);
mToolbarStack.setAdapter(mStackAdapter);
mIgnoreNextNavigation = true;
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setTitle(null);
actionBar.setListNavigationCallbacks(mStackAdapter, mStackListener);
actionBar.setSelectedNavigationItem(mStackAdapter.getCount() - 1);
mToolbarStack.setSelection(mStackAdapter.getCount() - 1);
}
}
}
@@ -480,6 +472,7 @@ public class DocumentsActivity extends Activity {
mSearchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mSearchExpanded = true;
mState.currentSearch = query;
mSearchView.clearFocus();
onCurrentDirectoryChanged(ANIM_NONE);
@@ -495,11 +488,14 @@ public class DocumentsActivity extends Activity {
searchMenu.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
mSearchExpanded = true;
updateActionBar();
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
mSearchExpanded = false;
if (mIgnoreNextCollapse) {
mIgnoreNextCollapse = false;
return true;
@@ -514,6 +510,7 @@ public class DocumentsActivity extends Activity {
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
mSearchExpanded = false;
if (mIgnoreNextClose) {
mIgnoreNextClose = false;
return false;
@@ -545,18 +542,6 @@ public class DocumentsActivity extends Activity {
final MenuItem list = menu.findItem(R.id.menu_list);
final MenuItem settings = menu.findItem(R.id.menu_settings);
// Open drawer means we hide most actions
if (isRootsDrawerOpen()) {
createDir.setVisible(false);
search.setVisible(false);
sort.setVisible(false);
grid.setVisible(false);
list.setVisible(false);
mIgnoreNextCollapse = true;
search.collapseActionView();
return true;
}
sort.setVisible(cwd != null);
grid.setVisible(mState.derivedMode != MODE_GRID);
list.setVisible(mState.derivedMode != MODE_LIST);
@@ -730,7 +715,7 @@ public class DocumentsActivity extends Activity {
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_title, parent, false);
.inflate(R.layout.item_subdir_title, parent, false);
}
final TextView title = (TextView) convertView.findViewById(android.R.id.title);
@@ -743,8 +728,6 @@ public class DocumentsActivity extends Activity {
title.setText(doc.displayName);
}
// No padding when shown in actionbar
convertView.setPadding(0, 0, 0, 0);
return convertView;
}
@@ -752,7 +735,7 @@ public class DocumentsActivity extends Activity {
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_title, parent, false);
.inflate(R.layout.item_subdir, parent, false);
}
final ImageView subdir = (ImageView) convertView.findViewById(R.id.subdir);
@@ -772,20 +755,24 @@ public class DocumentsActivity extends Activity {
}
};
private OnNavigationListener mStackListener = new OnNavigationListener() {
private OnItemSelectedListener mStackListener = new OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (mIgnoreNextNavigation) {
mIgnoreNextNavigation = false;
return false;
return;
}
while (mState.stack.size() > itemPosition + 1) {
while (mState.stack.size() > position + 1) {
mState.stackTouched = true;
mState.stack.pop();
}
onCurrentDirectoryChanged(ANIM_UP);
return true;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Ignored
}
};