themes
This commit is contained in:
parent
06ff91c6bd
commit
8239365688
11
res/drawable/metro_button_dark.xml
Normal file
11
res/drawable/metro_button_dark.xml
Normal 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>
|
20
res/drawable/metro_button_dark_shape.xml
Normal file
20
res/drawable/metro_button_dark_shape.xml
Normal 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>
|
20
res/drawable/metro_button_focused.xml
Normal file
20
res/drawable/metro_button_focused.xml
Normal 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>
|
11
res/drawable/metro_button_light.xml
Normal file
11
res/drawable/metro_button_light.xml
Normal 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>
|
20
res/drawable/metro_button_light_shape.xml
Normal file
20
res/drawable/metro_button_light_shape.xml
Normal 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>
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
23
res/values/styles-metro-theme.xml
Normal file
23
res/values/styles-metro-theme.xml
Normal 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>
|
@ -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>
|
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user