field public static final android.print.PrintAttributes.MediaSize OM_PA_KAI;
field public static final android.print.PrintAttributes.MediaSize PRC_1;
field public static final android.print.PrintAttributes.MediaSize PRC_10;
- field public static final android.print.PrintAttributes.MediaSize PRC_16k;
+ field public static final android.print.PrintAttributes.MediaSize PRC_16K;
field public static final android.print.PrintAttributes.MediaSize PRC_2;
field public static final android.print.PrintAttributes.MediaSize PRC_3;
field public static final android.print.PrintAttributes.MediaSize PRC_4;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
+import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.R;
+import java.util.Map;
+
/**
* This class represents the attributes of a print job.
*/
public static final class MediaSize {
private static final String LOG_TAG = "MediaSize";
+ private static final Map<String, MediaSize> sIdToMediaSizeMap =
+ new ArrayMap<String, MediaSize>();
+
/**
* Unknown media size in portrait mode.
* <p>
R.string.mediasize_chinese_prc_10, 12756, 18032);
/** Chinese PRC 16k media size: 146mm x 215mm (5.749" x 8.465") */
- public static final MediaSize PRC_16k =
- new MediaSize("PRC_16k", "android",
+ public static final MediaSize PRC_16K =
+ new MediaSize("PRC_16K", "android",
R.string.mediasize_chinese_prc_16k, 5749, 8465);
/** Chinese Pa Kai media size: 267mm x 389mm (10.512" x 15.315") */
public static final MediaSize OM_PA_KAI =
mWidthMils = widthMils;
mHeightMils = heightMils;
mLabel = null;
+
+ // Build this mapping only for predefined media sizes.
+ sIdToMediaSizeMap.put(mId, this);
}
/**
builder.append("}");
return builder.toString();
}
+
+ /**
+ * Gets a standard media size given its id.
+ *
+ * @param id The media size id.
+ * @return The media size for the given id or null.
+ *
+ * @hide
+ */
+ public static MediaSize getStandardMediaSizeById(String id) {
+ return sIdToMediaSizeMap.get(id);
+ }
}
/**
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>NA_LETTER</item>
+ <item>NA_GOVT_LETTER</item>
+ <item>NA_LEGAL</item>
+ <item>NA_JUNIOR_LEGAL</item>
+ <item>NA_LEDGER</item>
+ <item>NA_TABLOID</item>
+ <item>NA_INDEX_3X5</item>
+ <item>NA_INDEX_4X6</item>
+ <item>NA_INDEX_5X8</item>
+ <item>NA_MONARCH</item>
+ <item>NA_QUARTO</item>
+ <item>NA_FOOLSCAP</item>
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+
+<resources>
+
+ <string name="mediasize_default">NA_LETTER</string>
+ <string name="mediasize_standard">@string/mediasize_standard_north_america</string>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>NA_LETTER</item>
+ <item>NA_GOVT_LETTER</item>
+ <item>NA_LEGAL</item>
+ <item>NA_JUNIOR_LEGAL</item>
+ <item>NA_LEDGER</item>
+ <item>NA_TABLOID</item>
+ <item>NA_INDEX_3X5</item>
+ <item>NA_INDEX_4X6</item>
+ <item>NA_INDEX_5X8</item>
+ <item>NA_MONARCH</item>
+ <item>NA_QUARTO</item>
+ <item>NA_FOOLSCAP</item>
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <string name="mediasize_default">NA_LETTER</string>
+ <string name="mediasize_standard">@string/mediasize_standard_north_america</string>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>NA_LETTER</item>
+ <item>NA_GOVT_LETTER</item>
+ <item>NA_LEGAL</item>
+ <item>NA_JUNIOR_LEGAL</item>
+ <item>NA_LEDGER</item>
+ <item>NA_TABLOID</item>
+ <item>NA_INDEX_3X5</item>
+ <item>NA_INDEX_4X6</item>
+ <item>NA_INDEX_5X8</item>
+ <item>NA_MONARCH</item>
+ <item>NA_QUARTO</item>
+ <item>NA_FOOLSCAP</item>
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <string name="mediasize_default">NA_LETTER</string>
+ <string name="mediasize_standard">@string/mediasize_standard_north_america</string>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>NA_LETTER</item>
+ <item>NA_GOVT_LETTER</item>
+ <item>NA_LEGAL</item>
+ <item>NA_JUNIOR_LEGAL</item>
+ <item>NA_LEDGER</item>
+ <item>NA_TABLOID</item>
+ <item>NA_INDEX_3X5</item>
+ <item>NA_INDEX_4X6</item>
+ <item>NA_INDEX_5X8</item>
+ <item>NA_MONARCH</item>
+ <item>NA_QUARTO</item>
+ <item>NA_FOOLSCAP</item>
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <string name="mediasize_default">NA_LETTER</string>
+ <string name="mediasize_standard">@string/mediasize_standard_north_america</string>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>JIS_B10</item>
+ <item>JIS_B9</item>
+ <item>JIS_B8</item>
+ <item>JIS_B7</item>
+ <item>JIS_b6</item>
+ <item>JIS_b5</item>
+ <item>JIS_b4</item>
+ <item>JIS_b3</item>
+ <item>JIS_b2</item>
+ <item>JIS_b1</item>
+ <item>JIS_b0</item>
+ <item>JIS_EXEC</item>
+ <item>JPN_CHOU4</item>
+ <item>JPN_CHOU3</item>
+ <item>JPN_CHOU2</item>
+ <item>JPN_HAGAKI</item>
+ <item>JPN_OUFUKU</item>
+ <item>JPN_KAHU</item>
+ <item>JPN_KAKU2</item>
+ <item>JPN_YOU4</item>
+
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+
+<resources>
+
+ <string name="mediasize_default">JIS_B5</string>
+ <string name="mediasize_standard">@string/mediasize_standard_japan</string>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>ROC_8K</item>
+ <item>ROC_16K</item>
+ <item>PRC_1</item>
+ <item>PRC_2</item>
+ <item>PRC_3</item>
+ <item>PRC_4</item>
+ <item>PRC_5</item>
+ <item>PRC_6</item>
+ <item>PRC_7</item>
+ <item>PRC_8</item>
+ <item>PRC_9</item>
+ <item>PRC_10</item>
+ <item>PRC_16K</item>
+ <item>OM_PA_KAI</item>
+ <item>OM_DAI_PA_KAI</item>
+ <item>OM_JUURO_KU_KAI</item>
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <string name="mediasize_default">PRC_9</string>
+ <string name="mediasize_standard">@string/mediasize_standard_china</string>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <string-array name="mediasize_to_standard_map" translatable="false">
+ <!-- North America -->
+ <item>NA_LETTER</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_GOVT_LETTER</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_LEGAL</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_JUNIOR_LEGAL</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_LEDGER</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_TABLOID</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_INDEX_3X5</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_INDEX_4X6</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_INDEX_5X8</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_MONARCH</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_QUARTO</item>
+ <item>@string/mediasize_standard_north_america</item>
+ <item>NA_FOOLSCAP</item>
+ <item>@string/mediasize_standard_north_america</item>
+
+ <!-- China -->
+ <item>ROC_8K</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>ROC_16K</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_1</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_2</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_3</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_4</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_5</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_6</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_7</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_8</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_9</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_10</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>PRC_16K</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>OM_PA_KAI</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>OM_DAI_PA_KAI</item>
+ <item>@string/mediasize_standard_china</item>
+ <item>OM_JUURO_KU_KAI</item>
+ <item>@string/mediasize_standard_china</item>
+
+ <!-- Japan -->
+ <item>JIS_B10</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B9</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B8</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B7</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B6</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B5</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B4</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B3</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B2</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B1</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_B0</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JIS_EXEC</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_CHOU4</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_CHOU3</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_CHOU2</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_HAGAKI</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_OUFUKU</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_KAHU</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_KAKU2</item>
+ <item>@string/mediasize_standard_japan</item>
+ <item>JPN_YOU4</item>
+ <item>@string/mediasize_standard_japan</item>
+
+ <!-- Everything else is ISO -->
+ </string-array>
+
+ <string-array name="pdf_printer_media_sizes" translatable="false">
+ <item>ISO_A0</item>
+ <item>ISO_A1</item>
+ <item>ISO_A2</item>
+ <item>ISO_A3</item>
+ <item>ISO_A4</item>
+ <item>ISO_A5</item>
+ <item>ISO_A6</item>
+ <item>ISO_A7</item>
+ <item>ISO_A8</item>
+ <item>ISO_A9</item>
+ <item>ISO_A10</item>
+ <item>ISO_B1</item>
+ <item>ISO_B2</item>
+ <item>ISO_B3</item>
+ <item>ISO_B4</item>
+ <item>ISO_B5</item>
+ <item>ISO_B6</item>
+ <item>ISO_B7</item>
+ <item>ISO_B8</item>
+ <item>ISO_B9</item>
+ <item>ISO_B10</item>
+ <item>ISO_C1</item>
+ <item>ISO_C2</item>
+ <item>ISO_C3</item>
+ <item>ISO_C4</item>
+ <item>ISO_C5</item>
+ <item>ISO_C6</item>
+ <item>ISO_C7</item>
+ <item>ISO_C8</item>
+ <item>ISO_C9</item>
+ <item>ISO_C10</item>
+ </string-array>
+
+</resources>
--- /dev/null
+<?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.
+-->
+<resources>
+
+ <!-- Media size standards -->
+ <string name="mediasize_standard_iso">0</string>
+ <string name="mediasize_standard_north_america">1</string>
+ <string name="mediasize_standard_japan">2</string>
+ <string name="mediasize_standard_china">3</string>
+
+ <!-- Locale specific values -->
+ <string name="mediasize_default">ISO_A4</string>
+ <string name="mediasize_standard">@string/mediasize_standard_iso</string>
+
+</resources>
--- /dev/null
+/*
+ * 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.
+ */
+
+package com.android.printspooler;
+
+import android.content.Context;
+import android.print.PrintAttributes.MediaSize;
+import android.util.ArrayMap;
+
+import java.util.Comparator;
+import java.util.Map;
+
+/**
+ * Utility functions and classes for dealing with media sizes.
+ */
+public class MediaSizeUtils {
+
+ private static Map<MediaSize, String> sMediaSizeToStandardMap;
+
+ /**
+ * Gets the default media size for the current locale.
+ *
+ * @param context Context for accessing resources.
+ * @return The default media size.
+ */
+ public static MediaSize getDefault(Context context) {
+ String mediaSizeId = context.getString(R.string.mediasize_default);
+ return MediaSize.getStandardMediaSizeById(mediaSizeId);
+ }
+
+ private static String getStandardForMediaSize(Context context, MediaSize mediaSize) {
+ if (sMediaSizeToStandardMap == null) {
+ sMediaSizeToStandardMap = new ArrayMap<MediaSize, String>();
+ String[] mediaSizeToStandardMapValues = context.getResources()
+ .getStringArray(R.array.mediasize_to_standard_map);
+ final int mediaSizeToStandardCount = mediaSizeToStandardMapValues.length;
+ for (int i = 0; i < mediaSizeToStandardCount; i += 2) {
+ String mediaSizeId = mediaSizeToStandardMapValues[i];
+ MediaSize key = MediaSize.getStandardMediaSizeById(mediaSizeId);
+ String value = mediaSizeToStandardMapValues[i + 1];
+ sMediaSizeToStandardMap.put(key, value);
+ }
+ }
+ String standard = sMediaSizeToStandardMap.get(mediaSize);
+ return (standard != null) ? standard : context.getString(
+ R.string.mediasize_standard_iso);
+ }
+
+ /**
+ * Comparator for ordering standard media sizes. The ones for the current
+ * standard go to the top and the ones for the other standards follow grouped
+ * by standard. Media sizes of the same standard are ordered alphabetically.
+ */
+ public static final class MediaSizeComparator implements Comparator<MediaSize> {
+ private final Context mContext;
+
+ public MediaSizeComparator(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public int compare(MediaSize lhs, MediaSize rhs) {
+ String currentStandard = mContext.getString(R.string.mediasize_standard);
+ String lhsStandard = getStandardForMediaSize(mContext, lhs);
+ String rhsStandard = getStandardForMediaSize(mContext, rhs);
+
+ // The current standard always wins.
+ if (lhsStandard.equals(currentStandard)) {
+ if (!rhsStandard.equals(currentStandard)) {
+ return -1;
+ }
+ } else if (rhsStandard.equals(currentStandard)) {
+ return 1;
+ }
+
+ if (!lhsStandard.equals(rhsStandard)) {
+ // Different standards - use the standard ordering.
+ return lhsStandard.compareTo(rhsStandard);
+ } else {
+ // Same standard - sort alphabetically by label.
+ return lhs.getLabel(mContext.getPackageManager()).
+ compareTo(rhs.getLabel(mContext.getPackageManager()));
+ }
+ }
+ }
+}
import android.text.TextUtils.SimpleStringSplitter;
import android.text.TextWatcher;
import android.util.ArrayMap;
-import android.util.ArraySet;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.Spinner;
import android.widget.TextView;
+import com.android.printspooler.MediaSizeUtils.MediaSizeComparator;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
"[\\s]*[0-9]*[\\s]*[\\-]?[\\s]*[0-9]*[\\s]*?(([,])"
+ "[\\s]*[0-9]*[\\s]*[\\-]?[\\s]*[0-9]*[\\s]*|[\\s]*)+");
- // The list of countries where Letter is the default paper size. Culled from
- // the OpenOffice wiki at http://wiki.openoffice.org/wiki/DefaultPaperSize.
- private static final Set<String> sLetterDefaultCountries = new ArraySet<String>();
- static {
- sLetterDefaultCountries.add("US");
- sLetterDefaultCountries.add("CA");
- sLetterDefaultCountries.add("BZ");
- sLetterDefaultCountries.add("CL");
- sLetterDefaultCountries.add("CR");
- sLetterDefaultCountries.add("GT");
- sLetterDefaultCountries.add("NI");
- sLetterDefaultCountries.add("PA");
- sLetterDefaultCountries.add("PR");
- sLetterDefaultCountries.add("SV");
- sLetterDefaultCountries.add("VE");
- sLetterDefaultCountries.add("MX");
- sLetterDefaultCountries.add("CO");
- sLetterDefaultCountries.add("PH");
- }
-
public static final PageRange[] ALL_PAGES_ARRAY = new PageRange[] {PageRange.ALL_PAGES};
private final PrintAttributes mOldPrintAttributes = new PrintAttributes.Builder().build();
private PrinterInfo mCurrentPrinter;
+ private final MediaSizeComparator mMediaSizeComparator;
+
private final OnItemSelectedListener mOnItemSelectedListener =
new AdapterView.OnItemSelectedListener() {
@Override
return;
}
SpinnerItem<MediaSize> mediaItem = mMediaSizeSpinnerAdapter.getItem(position);
- mCurrPrintAttributes.setMediaSize(mediaItem.value);
+ if (mOrientationSpinner.getSelectedItemPosition() == 0) {
+ mCurrPrintAttributes.setMediaSize(mediaItem.value.asPortrait());
+ } else {
+ mCurrPrintAttributes.setMediaSize(mediaItem.value.asLandscape());
+ }
if (!hasErrors()) {
mController.update();
}
private void updatePrintAttributes(PrinterCapabilitiesInfo capabilities) {
PrintAttributes defaults = capabilities.getDefaults();
+ // Sort the media sizes based on the current locale.
+ List<MediaSize> sortedMediaSizes = new ArrayList<MediaSize>(
+ capabilities.getMediaSizes());
+ Collections.sort(sortedMediaSizes, mMediaSizeComparator);
+
// Media size.
MediaSize currMediaSize = mCurrPrintAttributes.getMediaSize();
if (currMediaSize == null) {
mCurrPrintAttributes.setMediaSize(defaults.getMediaSize());
} else {
MediaSize currMediaSizePortrait = currMediaSize.asPortrait();
- List<MediaSize> mediaSizes = capabilities.getMediaSizes();
- final int mediaSizeCount = mediaSizes.size();
+ final int mediaSizeCount = sortedMediaSizes.size();
for (int i = 0; i < mediaSizeCount; i++) {
- MediaSize mediaSize = mediaSizes.get(i);
+ MediaSize mediaSize = sortedMediaSizes.get(i);
if (currMediaSizePortrait.equals(mediaSize.asPortrait())) {
- mCurrPrintAttributes.setMediaSize(mediaSize);
+ mCurrPrintAttributes.setMediaSize(currMediaSize);
break;
}
}
public Editor() {
// Destination.
+ mMediaSizeComparator = new MediaSizeComparator(PrintJobConfigActivity.this);
mDestinationSpinnerAdapter = new DestinationAdapter();
mDestinationSpinnerAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
}
if (!allOptionsEnabled) {
- String minCopiesString = String.valueOf(MIN_COPIES);
- if (!TextUtils.equals(mCopiesEditText.getText(), minCopiesString)) {
- mIgnoreNextCopiesChange = true;
- mCopiesEditText.setText(minCopiesString);
- }
mCopiesEditText.setEnabled(false);
-
- // Media size
- if (mMediaSizeSpinner.getSelectedItemPosition() != AdapterView.INVALID_POSITION) {
- mOldMediaSizeSelectionIndex = AdapterView.INVALID_POSITION;
- mMediaSizeSpinner.setSelection(AdapterView.INVALID_POSITION);
- }
mMediaSizeSpinner.setEnabled(false);
-
- // Color mode
- if (mColorModeSpinner.getSelectedItemPosition() != AdapterView.INVALID_POSITION) {
- mOldColorModeSelectionIndex = AdapterView.INVALID_POSITION;
- mColorModeSpinner.setSelection(AdapterView.INVALID_POSITION);
- }
mColorModeSpinner.setEnabled(false);
-
- // Orientation
- if (mOrientationSpinner.getSelectedItemPosition() != 0) {
- mIgnoreNextOrientationChange = true;
- mOrientationSpinner.setSelection(0);
- }
mOrientationSpinner.setEnabled(false);
-
- // Range
- if (mRangeOptionsSpinner.getSelectedItemPosition() != 0) {
- mIgnoreNextRangeOptionChange = true;
- mRangeOptionsSpinner.setSelection(0);
- }
mRangeOptionsSpinner.setEnabled(false);
- mRangeOptionsTitle.setText(getString(R.string.label_pages,
- getString(R.string.page_count_unknown)));
- if (!TextUtils.equals(mPageRangeEditText.getText(), "")) {
- mIgnoreNextRangeChange = true;
- mPageRangeEditText.setText("");
- }
-
mPageRangeEditText.setEnabled(false);
- mPageRangeEditText.setVisibility(View.INVISIBLE);
- mPageRangeTitle.setVisibility(View.INVISIBLE);
-
- // Print
mPrintButton.setEnabled(false);
-
return false;
} else {
boolean someAttributeSelectionChanged = false;
PrintAttributes defaultAttributes = printer.getCapabilities().getDefaults();
// Media size.
- List<MediaSize> mediaSizes = capabilities.getMediaSizes();
+ // Sort the media sizes based on the current locale.
+ List<MediaSize> mediaSizes = new ArrayList<MediaSize>(capabilities.getMediaSizes());
+ Collections.sort(mediaSizes, mMediaSizeComparator);
// If the media sizes changed, we update the adapter and the spinner.
boolean mediaSizesChanged = false;
mMediaSizeSpinnerAdapter.clear();
for (int i = 0; i < mediaSizeCount; i++) {
MediaSize mediaSize = mediaSizes.get(i);
- if (mediaSize.equals(oldMediaSize)) {
+ if (mediaSize.asPortrait().equals(oldMediaSize.asPortrait())) {
// Update the index of the old selection.
oldMediaSizeNewIndex = i;
}
final int mediaSizeIndex = Math.max(mediaSizes.indexOf(
defaultAttributes.getMediaSize()), 0);
setMediaSizeSpinnerSelectionNoCallback(mediaSizeIndex);
- mCurrPrintAttributes.setMediaSize(mMediaSizeSpinnerAdapter
- .getItem(mediaSizeIndex).value);
+ if (oldMediaSize.isPortrait()) {
+ mCurrPrintAttributes.setMediaSize(mMediaSizeSpinnerAdapter
+ .getItem(mediaSizeIndex).value.asPortrait());
+ } else {
+ mCurrPrintAttributes.setMediaSize(mMediaSizeSpinnerAdapter
+ .getItem(mediaSizeIndex).value.asLandscape());
+ }
someAttributeSelectionChanged = true;
}
}
notifyDataSetInvalidated();
}
+
private PrinterInfo createFakePdfPrinter() {
- final MediaSize defaultMediaSize;
- String currentCountry = getResources().getConfiguration().locale.getCountry();
- if (sLetterDefaultCountries.contains(currentCountry)) {
- defaultMediaSize = MediaSize.NA_LETTER;
- } else {
- defaultMediaSize = MediaSize.ISO_A4;
- }
+ MediaSize defaultMediaSize = MediaSizeUtils.getDefault(PrintJobConfigActivity.this);
PrinterId printerId = new PrinterId(getComponentName(), "PDF printer");
- PrinterCapabilitiesInfo capabilities =
- new PrinterCapabilitiesInfo.Builder(printerId)
- .addMediaSize(MediaSize.ISO_A4, MediaSize.ISO_A4 == defaultMediaSize)
- .addMediaSize(MediaSize.NA_LETTER, MediaSize.NA_LETTER == defaultMediaSize)
- .addResolution(new Resolution("PDF resolution", "PDF resolution",
- 300, 300), true)
- .setColorModes(PrintAttributes.COLOR_MODE_COLOR
- | PrintAttributes.COLOR_MODE_MONOCHROME,
- PrintAttributes.COLOR_MODE_COLOR)
- .build();
+ PrinterCapabilitiesInfo.Builder builder =
+ new PrinterCapabilitiesInfo.Builder(printerId);
+
+ String[] mediaSizeIds = getResources().getStringArray(
+ R.array.pdf_printer_media_sizes);
+ final int mediaSizeIdCount = mediaSizeIds.length;
+ for (int i = 0; i < mediaSizeIdCount; i++) {
+ String id = mediaSizeIds[i];
+ MediaSize mediaSize = MediaSize.getStandardMediaSizeById(id);
+ builder.addMediaSize(mediaSize, mediaSize.equals(defaultMediaSize));
+ }
+
+ builder.addResolution(new Resolution("PDF resolution", "PDF resolution",
+ 300, 300), true);
+ builder.setColorModes(PrintAttributes.COLOR_MODE_COLOR
+ | PrintAttributes.COLOR_MODE_MONOCHROME,
+ PrintAttributes.COLOR_MODE_COLOR);
return new PrinterInfo.Builder(printerId, getString(R.string.save_as_pdf),
PrinterInfo.STATUS_IDLE)
- .setCapabilities(capabilities)
+ .setCapabilities(builder.build())
.build();
}
}