This commit is contained in:
Sergey Solovyev 2012-02-08 02:04:38 +04:00
parent 06ff91c6bd
commit 8239365688
12 changed files with 172 additions and 46 deletions

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:a="http://schemas.android.com/apk/res/android">
<item a:state_focused="true"
a:drawable="@drawable/metro_button_focused"/>
<item a:state_pressed="true"
a:drawable="@drawable/metro_button_focused"/>
<item a:drawable="@drawable/metro_button_dark_shape"/>
</selector>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#1f1f1f" android:endColor="#1f1f1f"/>
<corners android:radius="1dp" />
</shape>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#959595" android:endColor="#959595"/>
<corners android:radius="1dp" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:a="http://schemas.android.com/apk/res/android">
<item a:state_focused="true"
a:drawable="@drawable/metro_button_focused"/>
<item a:state_pressed="true"
a:drawable="@drawable/metro_button_focused"/>
<item a:drawable="@drawable/metro_button_light_shape"/>
</selector>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#393939" android:endColor="#393939"/>
<corners android:radius="1dp" />
</shape>

View File

@ -24,13 +24,13 @@
<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_weight="1"
a:layout_width="0dp"
a:layout_height="fill_parent"/>
<include layout="@layout/calc_display"
a:layout_weight="1"
a:layout_width="fill_parent"
a:layout_weight="4"
a:layout_width="0dp"
a:layout_height="fill_parent"/>
</LinearLayout>

View File

@ -90,6 +90,7 @@
<string name="p_default_theme">По умолчанию</string>
<string name="p_violet_theme">Фиолетовая</string>
<string name="p_light_blue_theme">Голубая</string>
<string name="p_metro_theme">Метро</string>
<string name="c_calc_result_precision_summary">Точность результата(все вычисления производятся максимально точно)</string>
<string name="c_calc_color_display_summary">Включает/выключает подсветку синтаксиса в поле редактирования калькулятора</string>
<string name="c_calc_theme_summary">Устанавливает тему оформления приложения</string>

View File

@ -9,13 +9,13 @@
<item>@string/p_default_theme</item>
<item>@string/p_violet_theme</item>
<item>@string/p_light_blue_theme</item>
<item>@string/p_windows_theme</item>
<item>@string/p_metro_theme</item>
</string-array>
<string-array name="p_theme_values">
<item>default_theme</item>
<item>violet_theme</item>
<item>light_blue_theme</item>
<item>windows_theme</item>
<item>metro_theme</item>
</string-array>
<string-array name="p_grouping_separator_names">

View File

@ -0,0 +1,23 @@
<resources>
<style name="metro_digit_button_style" parent="button_style">
<item name="android:background">@drawable/metro_button_dark</item>
<item name="android:layout_marginLeft">2dp</item>
<item name="android:layout_marginBottom">2dp</item>
</style>
<style name="metro_control_button_style" parent="metro_digit_button_style">
<item name="android:background">@drawable/metro_button_light</item>
</style>
<style name="metro_control_image_button_style" parent="metro_control_button_style">
<item name="android:padding">6dp</item>
</style>
<style name="metro_theme">
<item name="digitButtonStyle">@style/metro_digit_button_style</item>
<item name="controlButtonStyle">@style/metro_control_button_style</item>
<item name="controlImageButtonStyle">@style/metro_control_image_button_style</item>
</style>
</resources>

View File

@ -1,23 +0,0 @@
<resources>
<style name="windows_digit_button_style" parent="button_style">
<item name="android:background">@drawable/windows_button_dark</item>
<item name="android:layout_marginLeft">2dp</item>
<item name="android:layout_marginBottom">2dp</item>
</style>
<style name="windows_control_button_style" parent="windows_digit_button_style">
<item name="android:background">@drawable/windows_button_light</item>
</style>
<style name="windows_control_image_button_style" parent="windows_control_button_style">
<item name="android:padding">6dp</item>
</style>
<style name="windows_theme">
<item name="digitButtonStyle">@style/windows_digit_button_style</item>
<item name="controlButtonStyle">@style/windows_control_button_style</item>
<item name="controlImageButtonStyle">@style/windows_control_image_button_style</item>
</style>
</resources>

View File

@ -90,7 +90,7 @@
<string name="p_default_theme">Default</string>
<string name="p_violet_theme">Violet</string>
<string name="p_light_blue_theme">Light Blue</string>
<string name="p_windows_theme">Windows Metro</string>
<string name="p_metro_theme">Metro</string>
<string name="c_calc_result_precision_summary">Precision of result value (all calculations are done with maximum precision regardless of the value of this option)</string>
<string name="c_calc_color_display_summary">Toggles colouring and styling in calculator editor</string>
<string name="c_calc_theme_summary">Sets the theme for calculator</string>

View File

@ -41,6 +41,8 @@ import org.solovyev.android.history.HistoryDragProcessor;
import org.solovyev.android.prefs.BooleanPreference;
import org.solovyev.android.prefs.IntegerPreference;
import org.solovyev.android.prefs.Preference;
import org.solovyev.android.prefs.StringPreference;
import org.solovyev.android.view.ColorButton;
import org.solovyev.android.view.VibratorContainer;
import org.solovyev.android.view.drag.*;
import org.solovyev.common.utils.Announcer;
@ -59,6 +61,40 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
@Nullable
private IBillingObserver billingObserver;
public static enum Theme {
default_theme(ThemeType.other, R.style.default_theme),
violet_theme(ThemeType.other, R.style.violet_theme),
light_blue_theme(ThemeType.other, R.style.light_blue_theme),
metro_theme(ThemeType.metro, R.style.metro_theme);
@NotNull
private final ThemeType themeType;
@NotNull
private final Integer themeId;
Theme(@NotNull ThemeType themeType, Integer themeId) {
this.themeType = themeType;
this.themeId = themeId;
}
@NotNull
public ThemeType getThemeType() {
return themeType;
}
@NotNull
public Integer getThemeId() {
return themeId;
}
}
public static enum ThemeType {
metro,
other
}
public static class Preferences {
@NotNull
private static final String APP_VERSION_P_KEY = "application.version";
@ -67,15 +103,17 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
private static final Preference<Integer> appOpenedCounter = new IntegerPreference(APP_OPENED_COUNTER_P_KEY, APP_OPENED_COUNTER_P_DEFAULT);
private static final Preference<Boolean> feedbackWindowShown = new BooleanPreference(FEEDBACK_WINDOW_SHOWN_P_KEY, FEEDBACK_WINDOW_SHOWN_P_DEFAULT);
private static final Preference<Theme> theme = StringPreference.newInstance(THEME_P_KEY, THEME_P_DEFAULT, Theme.class);
}
@NotNull
private static final String THEME_P_KEY = "org.solovyev.android.calculator.CalculatorActivity_calc_theme";
private static final Theme THEME_P_DEFAULT = Theme.default_theme;
@NotNull
private static final String APP_OPENED_COUNTER_P_KEY = "app_opened_counter";
private static final Integer APP_OPENED_COUNTER_P_DEFAULT = 0;
@NotNull
public static final String FEEDBACK_WINDOW_SHOWN_P_KEY = "feedback_window_shown";
public static final boolean FEEDBACK_WINDOW_SHOWN_P_DEFAULT = false;
@ -97,7 +135,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
private volatile boolean initialized;
@NotNull
private String themeName;
private Theme theme;
@NotNull
private String layoutName;
@ -210,6 +248,16 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
initMultiplicationButton();
if (theme.getThemeType() == ThemeType.metro) {
// for metro themes we should turn off magic flames
AndroidUtils.processViewsOfType(this.getWindow().getDecorView(), ColorButton.class, new AndroidUtils.ViewProcessor<ColorButton>() {
@Override
public void process(@NotNull ColorButton colorButton) {
colorButton.setDrawMagicFlame(false);
}
});
}
preferences.registerOnSharedPreferenceChangeListener(this);
}
@ -386,19 +434,14 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
}
private synchronized void setTheme(@NotNull SharedPreferences preferences) {
final Map<String, Integer> styles = ResourceCache.instance.getNameToIdCache(R.style.class);
themeName = preferences.getString(getString(R.string.p_calc_theme_key), getString(R.string.p_calc_theme));
Integer styleId = styles.get(themeName);
if (styleId == null) {
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 theme found: " + styleId);
try {
theme = Preferences.theme.getPreference(preferences);
} catch (IllegalArgumentException e) {
theme = Theme.default_theme;
}
setTheme(styleId);
setTheme(theme.getThemeId());
}
private synchronized void firstTimeInit(@NotNull SharedPreferences preferences) {
@ -630,8 +673,8 @@ 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 (!themeName.equals(newThemeName) || !layoutName.equals(newLayoutName)) {
final Theme newTheme = Preferences.theme.getPreference(preferences);
if (!theme.equals(newTheme) || !layoutName.equals(newLayoutName)) {
AndroidUtils.restartActivity(this);
}