cellphone/calculator layouts

This commit is contained in:
serso 2011-10-26 21:32:43 +04:00
parent 6d4d2aed78
commit 76c0ef8397
10 changed files with 288 additions and 21 deletions

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
~ For more information, please, contact se.solovyev@gmail.com
~ or visit http://se.solovyev.org
-->
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
a:orientation="vertical"
a:layout_width="fill_parent"
a:layout_height="fill_parent"
a:background="#ff000000">
<LinearLayout
a:layout_width="fill_parent"
a:layout_height="fill_parent"
a:orientation="vertical"
a:layout_gravity="center">
<include layout="@layout/calc_editor"/>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<org.solovyev.android.view.widgets.DirectionDragButton xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
a:id="@+id/leftButton"
calc:textUp="◀◀"
a:text="◀"
calc:directionTextScale="0.5"
style="?controlButtonStyle"
a:onClick="moveLeftButtonClickHandler"
a:layout_width="0dp"
a:layout_height="fill_parent"
a:layout_weight="1"/>
<org.solovyev.android.view.widgets.ColorButton xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
a:id="@+id/eraseButton"
a:drawableTop="@drawable/sym_keyboard_delete"
style="?controlImageButtonStyle"
a:onClick="eraseButtonClickHandler"
a:layout_width="0dp"
a:layout_height="fill_parent"
a:layout_weight="1"/>
<include layout="@layout/calc_display"
a:layout_width="0dp"
a:layout_height="fill_parent"
a:layout_weight="4"/>
<org.solovyev.android.view.widgets.ColorButton xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
a:id="@+id/clearButton"
a:text="@string/c_clear"
a:textStyle="bold"
style="?controlImageButtonStyle"
a:onClick="clearButtonClickHandler"
a:layout_width="0dp"
a:layout_height="fill_parent"
a:layout_weight="1"/>
<org.solovyev.android.view.widgets.DirectionDragButton xmlns:a="http://schemas.android.com/apk/res/android"
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
a:id="@+id/rightButton"
calc:textUp="▶▶"
a:text="▶"
calc:directionTextScale="0.5"
style="?controlButtonStyle"
a:onClick="moveRightButtonClickHandler"
a:layout_width="0dp"
a:layout_height="fill_parent"
a:layout_weight="1"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_history_button"/>
<include layout="@layout/calc_copy_button"/>
<include layout="@layout/calc_seven_digit_button"/>
<include layout="@layout/calc_eight_digit_button"/>
<include layout="@layout/calc_nine_digit_button"/>
<include layout="@layout/calc_multiplication_button"/>
<include layout="@layout/calc_division_button"/>
<include layout="@layout/calc_equals_button"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_vars_button"/>
<include layout="@layout/calc_paste_button"/>
<include layout="@layout/calc_four_digit_button"/>
<include layout="@layout/calc_five_digit_button"/>
<include layout="@layout/calc_six_digit_button"/>
<include layout="@layout/calc_plus_button"/>
<include layout="@layout/calc_subtraction_button"/>
<include layout="@layout/calc_empty_button"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_donate_button"/>
<include layout="@layout/calc_empty_button"/>
<include layout="@layout/calc_one_digit_button"/>
<include layout="@layout/calc_two_digit_button"/>
<include layout="@layout/calc_three_digit_button"/>
<include layout="@layout/calc_zero_digit_button"/>
<include layout="@layout/calc_round_brackets_button"/>
<include layout="@layout/calc_square_brackets_button"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
~ For more information, please, contact se.solovyev@gmail.com
~ or visit http://se.solovyev.org
-->
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:orientation="vertical"
a:layout_width="fill_parent"
a:layout_height="fill_parent"
a:background="#ff000000">
<LinearLayout
a:layout_width="fill_parent"
a:layout_height="fill_parent"
a:orientation="vertical"
a:layout_gravity="center">
<include layout="@layout/calc_editor"/>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_equals_button"
a:layout_weight="4"
a:layout_width="fill_parent"
a:layout_height="fill_parent"/>
<include layout="@layout/calc_display"
a:layout_weight="1"
a:layout_width="fill_parent"
a:layout_height="fill_parent"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_seven_digit_button"/>
<include layout="@layout/calc_eight_digit_button"/>
<include layout="@layout/calc_nine_digit_button"/>
<include layout="@layout/calc_multiplication_button"/>
<include layout="@layout/calc_clear_button"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_four_digit_button"/>
<include layout="@layout/calc_five_digit_button"/>
<include layout="@layout/calc_six_digit_button"/>
<include layout="@layout/calc_division_button"/>
<include layout="@layout/calc_erase_button"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_one_digit_button"/>
<include layout="@layout/calc_two_digit_button"/>
<include layout="@layout/calc_three_digit_button"/>
<include layout="@layout/calc_plus_button"/>
<include layout="@layout/calc_copy_button"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_round_brackets_button"/>
<include layout="@layout/calc_zero_digit_button"/>
<include layout="@layout/calc_square_brackets_button"/>
<include layout="@layout/calc_subtraction_button"/>
<include layout="@layout/calc_paste_button"/>
</LinearLayout>
<LinearLayout a:layout_weight="1" a:layout_width="fill_parent" a:layout_height="0dp">
<include layout="@layout/calc_left_button"/>
<include layout="@layout/calc_right_button"/>
<include layout="@layout/calc_vars_button"/>
<include layout="@layout/calc_history_button"/>
<include layout="@layout/calc_donate_button"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -92,4 +92,9 @@
<string name="c_calc_grouping_separator">Разделитель разрядов</string>
<string name="c_calc_grouping_separator_summary">Устанавливает разделитель разрядов числа</string>
<string name="c_calc_layout">Раскладка</string>
<string name="p_layout_cellphone">Телефон</string>
<string name="p_layout_calculator">Калькулятор</string>
<string name="c_calc_layout_summary">Устанавливает раскладку кнопок</string>
</resources>

View File

@ -27,4 +27,13 @@
<item>" "</item>
</string-array>
<string-array name="p_layout_names">
<item>@string/p_layout_cellphone</item>
<item>@string/p_layout_calculator</item>
</string-array>
<string-array name="p_layout_values">
<item>main_cellphone</item>
<item>main_calculator</item>
</string-array>
</resources>

View File

@ -24,6 +24,9 @@
<string name="p_calc_theme_key">org.solovyev.android.calculator.CalculatorActivity_calc_theme</string>
<string name="p_calc_theme">default_theme</string>
<string name="p_calc_layout_key">org.solovyev.android.calculator.CalculatorActivity_calc_layout</string>
<string name="p_calc_layout">main_cellphone</string>
<string name="p_calc_grouping_separator_key">org.solovyev.android.calculator.CalculatorActivity_calc_grouping_separator</string>
<string name="p_calc_grouping_separator"> </string>

View File

@ -91,4 +91,10 @@
<string name="p_grouping_separator_space">Space ( )</string>
<string name="c_calc_grouping_separator">Grouping separator</string>
<string name="c_calc_grouping_separator_summary">Sets grouping separator</string>
<string name="c_calc_layout">Layout</string>
<string name="p_layout_cellphone">Cellphone</string>
<string name="p_layout_calculator">Calculator</string>
<string name="c_calc_layout_summary">Sets layout of buttons</string>
</resources>

View File

@ -29,6 +29,12 @@
a:summary="@string/c_calc_theme_summary"
a:entryValues="@array/p_theme_values"/>
<ListPreference a:key="@string/p_calc_layout_key"
a:title="@string/c_calc_layout"
a:entries="@array/p_layout_names"
a:summary="@string/c_calc_layout_summary"
a:entryValues="@array/p_layout_values"/>
<!-- <org.solovyev.android.view.prefs.FloatRangeSeekBarPreference
a:key="@string/p_drag_distance_key"

View File

@ -44,6 +44,9 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
@NotNull
private final Announcer<DragPreferencesChangeListener> dpclRegister = new Announcer<DragPreferencesChangeListener>(DragPreferencesChangeListener.class);
@NotNull
private final static Map<Class<?>, Map<String, Integer>> caches = new HashMap<Class<?>, Map<String, Integer>>(3);
@NotNull
private CalculatorModel calculatorModel;
@ -52,8 +55,8 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
@NotNull
private String themeName;
// key: style name, value: id of style in R.class
private Map<String, Integer> styles = null;
@NotNull
private String layoutName;
// ids of drag buttons in R.class
private List<Integer> dragButtonIds = null;
@ -71,7 +74,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
setTheme(preferences);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setLayout(preferences);
firstTimeInit(preferences);
@ -151,23 +154,25 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
}
}
private synchronized void setLayout(@NotNull SharedPreferences preferences) {
final Map<String, Integer> layouts = getCache(R.layout.class);
layoutName = preferences.getString(getString(R.string.p_calc_layout_key), getString(R.string.p_calc_layout));
Integer layoutId = layouts.get(layoutName);
if (layoutId == null) {
Log.d(this.getClass().getName(), "No saved layout found => applying default layout: " + R.layout.main_cellphone);
layoutId = R.layout.main_cellphone;
} else {
Log.d(this.getClass().getName(), "Saved layout found: " + layoutId);
}
setContentView(layoutId);
}
private synchronized void setTheme(@NotNull SharedPreferences preferences) {
if (styles == null) {
styles = new HashMap<String, Integer>();
for (Field themeField : R.style.class.getDeclaredFields()) {
int modifiers = themeField.getModifiers();
if (Modifier.isFinal(modifiers) && Modifier.isStatic(modifiers)) {
try {
Log.d(this.getClass().getName(), "Style found: " + themeField.getName());
int styleId = themeField.getInt(R.style.class);
Log.d(this.getClass().getName(), "Style id: " + styleId);
styles.put(themeField.getName(), styleId);
} catch (IllegalAccessException e) {
Log.e(CalculatorActivity.class.getName(), e.getMessage());
}
}
}
}
final Map<String, Integer> styles = getCache(R.style.class);
themeName = preferences.getString(getString(R.string.p_calc_theme_key), getString(R.string.p_calc_theme));
@ -176,12 +181,36 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
Log.d(this.getClass().getName(), "No saved theme found => applying default theme: " + R.style.default_theme);
styleId = R.style.default_theme;
} else {
Log.d(this.getClass().getName(), "Saved them found: " + styleId);
Log.d(this.getClass().getName(), "Saved theme found: " + styleId);
}
setTheme(styleId);
}
@NotNull
private static Map<String, Integer> getCache(@NotNull Class<?> clazz) {
Map<String, Integer> result = caches.get(clazz);
if (result == null) {
result = new HashMap<String, Integer>();
for (Field field : clazz.getDeclaredFields()) {
int modifiers = field.getModifiers();
if (Modifier.isFinal(modifiers) && Modifier.isStatic(modifiers)) {
try {
result.put(field.getName(), field.getInt(R.style.class));
} catch (IllegalAccessException e) {
Log.e(CalculatorActivity.class.getName(), e.getMessage());
}
}
}
caches.put(clazz, result);
}
return result;
}
private synchronized void firstTimeInit(@NotNull SharedPreferences preferences) {
if (!initialized) {
try {
@ -390,8 +419,9 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
final String newLayoutName = preferences.getString(getString(R.string.p_calc_layout_key), getString(R.string.p_calc_layout));
final String newThemeName = preferences.getString(getString(R.string.p_calc_theme_key), getString(R.string.p_calc_theme));
if (!newThemeName.equals(themeName)) {
if (!themeName.equals(newThemeName) || !layoutName.equals(newLayoutName)) {
restart();
}