/*
* Copyright (C) 2012 Google Inc.
*
* 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.googlecode.eyesfree.braille.display;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Properties of a braille display such as dimensions and keyboard
* configuration.
*/
public class BrailleDisplayProperties implements Parcelable {
private final int mNumTextCells;
private final int mNumStatusCells;
private final BrailleKeyBinding[] mKeyBindings;
private final Map<String, String> mFriendlyKeyNames;
public BrailleDisplayProperties(int numTextCells, int numStatusCells,
BrailleKeyBinding[] keyBindings,
Map<String, String> friendlyKeyNames) {
mNumTextCells = numTextCells;
mNumStatusCells = numStatusCells;
mKeyBindings = keyBindings;
mFriendlyKeyNames = friendlyKeyNames;
}
/**
* Returns the number of cells on the main display intended for display of
* text or other content.
*/
public int getNumTextCells() {
return mNumTextCells;
}
/**
* Returns the number of status cells that are separated from the main
* display. This value will be {@code 0} for displays without any separate
* status cells.
*/
public int getNumStatusCells() {
return mNumStatusCells;
}
/**
* Returns the list of key bindings for this display.
*/
public BrailleKeyBinding[] getKeyBindings() {
return mKeyBindings;
}
/**
* Returns an unmodifiable map mapping key names in {@link BrailleKeyBinding}
* objects to localized user-friendly key names.
*/
public Map<String, String> getFriendlyKeyNames() {
return mFriendlyKeyNames;
}
@Override
public String toString() {
return String.format(
"BrailleDisplayProperties [numTextCells: %d, numStatusCells: %d, "
+ "keyBindings: %d]",
mNumTextCells, mNumStatusCells, mKeyBindings.length);
}
// For Parcelable support.
public static final Parcelable.Creator<BrailleDisplayProperties> CREATOR =
new Parcelable.Creator<BrailleDisplayProperties>() {
@Override
public BrailleDisplayProperties createFromParcel(Parcel in) {
return new BrailleDisplayProperties(in);
}
@Override
public BrailleDisplayProperties[] newArray(int size) {
return new BrailleDisplayProperties[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mNumTextCells);
out.writeInt(mNumStatusCells);
out.writeTypedArray(mKeyBindings, flags);
out.writeInt(mFriendlyKeyNames.size());
for (Map.Entry<String, String> entry : mFriendlyKeyNames.entrySet()) {
out.writeString(entry.getKey());
out.writeString(entry.getValue());
}
}
private BrailleDisplayProperties(Parcel in) {
mNumTextCells = in.readInt();
mNumStatusCells = in.readInt();
mKeyBindings = in.createTypedArray(BrailleKeyBinding.CREATOR);
int size = in.readInt();
Map<String, String> names = new HashMap<String, String>(size);
for (int i = 0; i < size; ++i) {
names.put(in.readString(), in.readString());
}
mFriendlyKeyNames = Collections.unmodifiableMap(names);
}
}