Merge "Print UI polish." into lmp-dev

This commit is contained in:
Svetoslav
2014-08-29 01:17:59 +00:00
committed by Android (Google) Code Review
12 changed files with 47 additions and 166 deletions

View File

@@ -27,6 +27,7 @@
android:id="@+id/static_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingStart="8dip"
android:elevation="@dimen/preview_controls_elevation"
android:background="?android:attr/colorPrimary">

View File

@@ -55,8 +55,7 @@
android:text="@string/label_copies">
</TextView>
<view
class="com.android.printspooler.widget.FirstFocusableEditText"
<EditText
android:id="@+id/copies_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@@ -64,7 +63,7 @@
android:singleLine="true"
android:ellipsize="end"
android:inputType="numberDecimal">
</view>
</EditText>
</LinearLayout>
@@ -198,8 +197,7 @@
android:visibility="visible">
</TextView>
<view
class="com.android.printspooler.widget.FirstFocusableEditText"
<EditText
android:id="@+id/page_range_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@@ -208,7 +206,7 @@
android:ellipsize="end"
android:visibility="visible"
android:inputType="textNoSuggestions">
</view>
</EditText>
</LinearLayout>

View File

@@ -17,8 +17,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingStart="16dip"
android:paddingEnd="16dip"
android:paddingStart="8dip"
android:paddingEnd="8dip"
android:minHeight="56dip"
android:orientation="horizontal"
android:gravity="start|center_vertical">

View File

@@ -23,8 +23,6 @@
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingStart="@dimen/printer_list_view_padding_start"
android:paddingEnd="@dimen/printer_list_view_padding_end"
android:scrollbarStyle="outsideOverlay"
android:cacheColorHint="@android:color/transparent"
android:scrollbarAlwaysDrawVerticalTrack="true" >

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 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.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:orientation="vertical"
android:gravity="start|center_vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/spinnerDropDownItemStyle"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorPrimary"
android:singleLine="true"
android:ellipsize="end"
android:textIsSelectable="false"
android:gravity="top|left"
android:duplicateParentState="true">
</TextView>
<TextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="?android:attr/spinnerDropDownItemStyle"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:singleLine="true"
android:ellipsize="end"
android:textIsSelectable="false"
android:visibility="gone"
android:duplicateParentState="true">
</TextView>
</LinearLayout>

View File

@@ -16,10 +16,6 @@
<resources>
<dimen name="printer_list_view_padding_start">48dip</dimen>
<dimen name="printer_list_view_padding_end">48dip</dimen>
<integer name="preview_page_per_row_count">2</integer>
<integer name="print_option_column_count">3</integer>

View File

@@ -28,9 +28,6 @@
<dimen name="print_dialog_frame_max_width_dip">400dip</dimen>
<dimen name="printer_list_view_padding_start">16dip</dimen>
<dimen name="printer_list_view_padding_end">16dip</dimen>
<dimen name="selected_page_elevation">6dip</dimen>
<dimen name="unselected_page_elevation">2dip</dimen>
@@ -46,6 +43,6 @@
<fraction name="page_unselected_alpha">50%</fraction>
<dimen name="preview_page_footer_height">32dip</dimen>
<dimen name="preview_page_min_width">130dip</dimen>
<dimen name="preview_page_min_width">128dip</dimen>
</resources>

View File

@@ -16,7 +16,10 @@
<resources>
<style name="PrintActivity" parent="@android:style/Theme.Material.Settings">
<style name="PrintActivity" parent="@android:style/Theme.Material">
<item name="android:colorPrimary">@*android:color/material_blue_grey_900</item>
<item name="android:colorPrimaryDark">@*android:color/material_blue_grey_950</item>
<item name="android:colorAccent">@*android:color/material_deep_teal_500</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>

View File

@@ -289,15 +289,11 @@ public final class PageAdapter extends Adapter implements
+ " for position: " + position);
}
final int pageCount = getItemCount();
MyViewHolder myHolder = (MyViewHolder) holder;
View page = holder.itemView;
if (pageCount > 1) {
page.setOnClickListener(mPageClickListener);
} else {
page.setOnClickListener(null);
}
page.setOnClickListener(mPageClickListener);
page.setTag(holder);
myHolder.mPageInAdapter = position;
@@ -339,16 +335,9 @@ public final class PageAdapter extends Adapter implements
}
content.init(provider, mMediaSize, mMinMargins);
View pageSelector = page.findViewById(R.id.page_selector);
pageSelector.setTag(myHolder);
if (pageCount > 1) {
pageSelector.setOnClickListener(mPageClickListener);
pageSelector.setVisibility(View.VISIBLE);
} else {
pageSelector.setOnClickListener(null);
pageSelector.setVisibility(View.GONE);
}
pageSelector.setOnClickListener(mPageClickListener);
if (mConfirmedPagesInDocument.indexOfKey(pageInDocument) >= 0) {
pageSelector.setSelected(true);
@@ -449,8 +438,9 @@ public final class PageAdapter extends Adapter implements
final int verticalPadding;
if (mPageContentHeight + mFooterHeight + mPreviewListPadding > availableHeight) {
verticalPadding = Math.max(mPreviewPageMargin,
(availableHeight - totalContentHeight) / 2);
verticalPadding = Math.max(0,
(availableHeight - mPageContentHeight - mFooterHeight) / 2
- mPreviewPageMargin);
} else {
verticalPadding = Math.max(mPreviewListPadding,
(availableHeight - totalContentHeight) / 2);
@@ -791,6 +781,9 @@ public final class PageAdapter extends Adapter implements
page.animate().translationZ(mSelectedPageElevation)
.alpha(mSelectedPageAlpha);
} else {
if (mConfirmedPagesInDocument.size() <= 1) {
return;
}
mConfirmedPagesInDocument.remove(pageInDocument);
pageSelector.setSelected(false);
page.animate().translationZ(mUnselectedPageElevation)

View File

@@ -982,21 +982,21 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
// Media size.
mMediaSizeSpinnerAdapter = new ArrayAdapter<>(
this, R.layout.spinner_dropdown_item, R.id.title);
this, android.R.layout.simple_spinner_dropdown_item, android.R.id.text1);
mMediaSizeSpinner = (Spinner) findViewById(R.id.paper_size_spinner);
mMediaSizeSpinner.setAdapter(mMediaSizeSpinnerAdapter);
mMediaSizeSpinner.setOnItemSelectedListener(itemSelectedListener);
// Color mode.
mColorModeSpinnerAdapter = new ArrayAdapter<>(
this, R.layout.spinner_dropdown_item, R.id.title);
this, android.R.layout.simple_spinner_dropdown_item, android.R.id.text1);
mColorModeSpinner = (Spinner) findViewById(R.id.color_spinner);
mColorModeSpinner.setAdapter(mColorModeSpinnerAdapter);
mColorModeSpinner.setOnItemSelectedListener(itemSelectedListener);
// Orientation
mOrientationSpinnerAdapter = new ArrayAdapter<>(
this, R.layout.spinner_dropdown_item, R.id.title);
this, android.R.layout.simple_spinner_dropdown_item, android.R.id.text1);
String[] orientationLabels = getResources().getStringArray(
R.array.orientation_labels);
mOrientationSpinnerAdapter.add(new SpinnerItem<>(
@@ -1008,8 +1008,8 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
mOrientationSpinner.setOnItemSelectedListener(itemSelectedListener);
// Range options
ArrayAdapter<SpinnerItem<Integer>> rangeOptionsSpinnerAdapter =
new ArrayAdapter<>(this, R.layout.spinner_dropdown_item, R.id.title);
ArrayAdapter<SpinnerItem<Integer>> rangeOptionsSpinnerAdapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_dropdown_item, android.R.id.text1);
mRangeOptionsSpinner = (Spinner) findViewById(R.id.range_options_spinner);
mRangeOptionsSpinner.setAdapter(rangeOptionsSpinnerAdapter);
mRangeOptionsSpinner.setOnItemSelectedListener(itemSelectedListener);
@@ -1075,6 +1075,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
mDestinationSpinner.setEnabled(false);
}
mCopiesEditText.setEnabled(false);
mCopiesEditText.setFocusable(false);
mMediaSizeSpinner.setEnabled(false);
mColorModeSpinner.setEnabled(false);
mOrientationSpinner.setEnabled(false);
@@ -1089,6 +1090,7 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
// available, we disable all print options except the destination.
if (mCurrentPrinter == null || !canPrint(mCurrentPrinter)) {
mCopiesEditText.setEnabled(false);
mCopiesEditText.setFocusable(false);
mMediaSizeSpinner.setEnabled(false);
mColorModeSpinner.setEnabled(false);
mOrientationSpinner.setEnabled(false);
@@ -1316,8 +1318,10 @@ public class PrintActivity extends Activity implements RemotePrintDocument.Updat
// Copies
if (mDestinationSpinnerAdapter.getPdfPrinter() != mCurrentPrinter) {
mCopiesEditText.setEnabled(true);
mCopiesEditText.setFocusableInTouchMode(true);
} else {
mCopiesEditText.setEnabled(false);
mCopiesEditText.setFocusable(false);
}
if (mCopiesEditText.getError() == null
&& TextUtils.isEmpty(mCopiesEditText.getText())) {

View File

@@ -1,69 +0,0 @@
/*
* Copyright (C) 2014 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.printspooler.widget;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.EditText;
/**
* An instance of this class class is intended to be the first focusable
* in a layout to which the system automatically gives focus. It performs
* some voodoo to avoid the first tap on it to start an edit mode, rather
* to bring up the IME, i.e. to get the behavior as if the view was not
* focused.
*/
public final class FirstFocusableEditText extends EditText {
private boolean mClickedBeforeFocus;
private CharSequence mError;
public FirstFocusableEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean performClick() {
super.performClick();
if (isFocused() && !mClickedBeforeFocus) {
clearFocus();
requestFocus();
}
mClickedBeforeFocus = true;
return true;
}
@Override
public CharSequence getError() {
return mError;
}
@Override
public void setError(CharSequence error, Drawable icon) {
setCompoundDrawables(null, null, icon, null);
mError = error;
}
protected void onFocusChanged(boolean gainFocus, int direction,
Rect previouslyFocusedRect) {
if (!gainFocus) {
mClickedBeforeFocus = false;
}
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
}
}

View File

@@ -152,6 +152,17 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
// Make sure we start in a closed options state.
onDragProgress(1.0f);
// The framework gives focus to the frist focusable and we
// do not want that, hence we will take focus instead.
setFocusableInTouchMode(true);
}
@Override
public void focusableViewAvailable(View v) {
// The framework gives focus to the frist focusable and we
// do not want that, hence do not announce new focusables.
return;
}
@Override
@@ -309,6 +320,7 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
mSummaryContent.setLayerType(View.LAYER_TYPE_NONE, null);
mDraggableContent.setLayerType(View.LAYER_TYPE_NONE, null);
mMoreOptionsButton.setLayerType(View.LAYER_TYPE_NONE, null);
mMoreOptionsButton.setLayerType(View.LAYER_TYPE_NONE, null);
}
mDragProgress = progress;
@@ -320,7 +332,6 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
mMoreOptionsButton.setAlpha(inverseAlpha);
mEmbeddedContentScrim.setBackgroundColor(computeScrimColor());
if (progress == 0) {
if (mOptionsStateChangeListener != null) {
mOptionsStateChangeListener.onOptionsOpened();
@@ -354,14 +365,15 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis
}
private void ensureImeClosedAndInputFocusCleared() {
View focus = findFocus();
if (focus != null) {
View focused = findFocus();
if (focused != null && focused.isFocused()) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive(focus)) {
if (imm.isActive(focused)) {
imm.hideSoftInputFromWindow(getWindowToken(), 0);
}
focus.clearFocus();
focused.clearFocus();
}
}