1344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com/*
2344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * Copyright (C) 2012 Google Inc.
3344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com *
4344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * use this file except in compliance with the License. You may obtain a copy of
6344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * the License at
7344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com *
8344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * http://www.apache.org/licenses/LICENSE-2.0
9344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com *
10344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * Unless required by applicable law or agreed to in writing, software
11344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * License for the specific language governing permissions and limitations under
14344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * the License.
15344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com */
16344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
17344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.compackage com.googlecode.eyesfree.braille.display;
18344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
19344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.comimport android.os.Parcel;
20344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.comimport android.os.Parcelable;
21344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
224facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.comimport java.util.Collections;
234facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.comimport java.util.HashMap;
244facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.comimport java.util.Map;
254facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com
26344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com/**
27344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * Properties of a braille display such as dimensions and keyboard
28344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com * configuration.
29344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com */
30344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.compublic class BrailleDisplayProperties implements Parcelable {
31344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    private final int mNumTextCells;
32344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    private final int mNumStatusCells;
33344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    private final BrailleKeyBinding[] mKeyBindings;
344facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com    private final Map<String, String> mFriendlyKeyNames;
35344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
36344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public BrailleDisplayProperties(int numTextCells, int numStatusCells,
374facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com            BrailleKeyBinding[] keyBindings,
384facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com            Map<String, String> friendlyKeyNames) {
39344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        mNumTextCells = numTextCells;
40344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        mNumStatusCells = numStatusCells;
41344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        mKeyBindings = keyBindings;
424facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        mFriendlyKeyNames = friendlyKeyNames;
43344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
44344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
45344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    /**
46344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     * Returns the number of cells on the main display intended for display of
47344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     * text or other content.
48344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     */
49344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public int getNumTextCells() {
50344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        return mNumTextCells;
51344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
52344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
53344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    /**
54344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     * Returns the number of status cells that are separated from the main
55344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     * display.  This value will be {@code 0} for displays without any separate
56344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     * status cells.
57344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     */
58344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public int getNumStatusCells() {
59344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        return mNumStatusCells;
60344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
61344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
62344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    /**
63344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     * Returns the list of key bindings for this display.
64344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com     */
65344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public BrailleKeyBinding[] getKeyBindings() {
66344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        return mKeyBindings;
67344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
68344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
694facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com    /**
704facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com     * Returns an unmodifiable map mapping key names in {@link BrailleKeyBinding}
714facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com     * objects to localized user-friendly key names.
724facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com     */
734facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com    public Map<String, String> getFriendlyKeyNames() {
744facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        return mFriendlyKeyNames;
754facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com    }
764facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com
77344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    @Override
78344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public String toString() {
79344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        return String.format(
80344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            "BrailleDisplayProperties [numTextCells: %d, numStatusCells: %d, "
81344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            + "keyBindings: %d]",
82344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            mNumTextCells, mNumStatusCells, mKeyBindings.length);
83344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
84344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
85344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    // For Parcelable support.
86344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
87344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public static final Parcelable.Creator<BrailleDisplayProperties> CREATOR =
88344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        new Parcelable.Creator<BrailleDisplayProperties>() {
89344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            @Override
90344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            public BrailleDisplayProperties createFromParcel(Parcel in) {
91344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com                return new BrailleDisplayProperties(in);
92344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            }
93344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
94344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            @Override
95344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            public BrailleDisplayProperties[] newArray(int size) {
96344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com                return new BrailleDisplayProperties[size];
97344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com            }
98344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        };
99344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
100344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    @Override
101344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public int describeContents() {
102344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        return 0;
103344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
104344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
105344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    @Override
106344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    public void writeToParcel(Parcel out, int flags) {
107344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        out.writeInt(mNumTextCells);
108344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        out.writeInt(mNumStatusCells);
109344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        out.writeTypedArray(mKeyBindings, flags);
1104facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        out.writeInt(mFriendlyKeyNames.size());
1114facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        for (Map.Entry<String, String> entry : mFriendlyKeyNames.entrySet()) {
1124facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com            out.writeString(entry.getKey());
1134facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com            out.writeString(entry.getValue());
1144facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        }
115344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
116344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com
117344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    private BrailleDisplayProperties(Parcel in) {
118344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        mNumTextCells = in.readInt();
119344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        mNumStatusCells = in.readInt();
120344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com        mKeyBindings = in.createTypedArray(BrailleKeyBinding.CREATOR);
1214facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        int size = in.readInt();
1224facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        Map<String, String> names = new HashMap<String, String>(size);
1234facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        for (int i = 0; i < size; ++i) {
1244facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com            names.put(in.readString(), in.readString());
1254facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        }
1264facfd4e7cac6623d53909b14d6694c6751e3254plundblad@google.com        mFriendlyKeyNames = Collections.unmodifiableMap(names);
127344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com    }
128344caf0bfb20161349dbf2f658a7f096a08ea76plundblad@google.com}
129