From f618f2cd446656794c92447526e701c7dfad23b0 Mon Sep 17 00:00:00 2001 From: serso Date: Fri, 29 Apr 2016 18:52:25 +0200 Subject: [PATCH] Fix font issues --- .../android/calculator/BaseActivity.java | 34 +++++++++---------- .../calculator/BaseDialogFragment.java | 4 +++ .../android/calculator/BaseFragment.java | 17 +++++----- .../floating/FloatingCalculatorView.java | 2 +- .../calculator/keyboard/BaseKeyboardUi.java | 4 --- .../wizard/ChooseModeWizardStep.java | 2 -- .../wizard/ChooseThemeWizardStep.java | 8 +++-- .../wizard/DragButtonWizardStep.java | 1 - .../calculator/wizard/WizardFragment.java | 10 ++++++ 9 files changed, 44 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java b/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java index b17fc27d..bf170efc 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java @@ -87,7 +87,13 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr public static void setFont(@Nonnull View view, @Nonnull Typeface newTypeface) { if (view instanceof TextView) { - setFont((TextView) view, newTypeface); + final TextView textView = (TextView) view; + final Typeface oldTypeface = textView.getTypeface(); + if (oldTypeface == newTypeface) { + return; + } + final int style = oldTypeface != null ? oldTypeface.getStyle() : Typeface.NORMAL; + textView.setTypeface(newTypeface, style); } else if (view instanceof DirectionDragImageButton) { ((DirectionDragImageButton) view).setTypeface(newTypeface); } @@ -98,15 +104,6 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr return mode; } - public static void setFont(@Nonnull TextView view, @Nonnull Typeface newTypeface) { - final Typeface oldTypeface = view.getTypeface(); - if (oldTypeface == newTypeface) { - return; - } - final int style = oldTypeface != null ? oldTypeface.getStyle() : Typeface.NORMAL; - view.setTypeface(newTypeface, style); - } - public boolean restartIfModeChanged() { final Preferences.Gui.Mode newMode = Preferences.Gui.mode.getPreference(preferences); if (newMode != mode) { @@ -162,7 +159,7 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr } ButterKnife.bind(this, this); - fixFonts(mainView); + fixFonts(mainView, typeface); initToolbar(); populateTabs(tabs); tabs.onCreate(); @@ -285,14 +282,15 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr fab.setOnClickListener(listener); } - protected void fixFonts(@Nonnull View root) { - // some devices ship own fonts which causes issues with rendering. Let's use our own font for all text views - App.processViewsOfType(root, TextView.class, new App.ViewProcessor() { - @Override - public void process(@Nonnull TextView view) { - setFont(view, typeface); + public static void fixFonts(@Nonnull View view, @Nonnull Typeface typeface) { + if (view instanceof ViewGroup) { + final ViewGroup group = (ViewGroup) view; + for (int index = 0; index < group.getChildCount(); index++) { + fixFonts(group.getChildAt(index), typeface); } - }); + } else { + setFont(view, typeface); + } } @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java b/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java index 93758196..afe8f280 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java @@ -3,6 +3,7 @@ package org.solovyev.android.calculator; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; +import android.graphics.Typeface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -29,6 +30,8 @@ public abstract class BaseDialogFragment extends DialogFragment implements View. protected SharedPreferences preferences; @Inject Ga ga; + @Inject + Typeface typeface; @Nullable private Button positiveButton; @Nullable @@ -57,6 +60,7 @@ public abstract class BaseDialogFragment extends DialogFragment implements View. if (view != null) { final int spacing = context.getResources().getDimensionPixelSize(R.dimen.cpp_dialog_spacing); b.setView(view, spacing, spacing, spacing, spacing); + BaseActivity.fixFonts(view, typeface); } onPrepareDialog(b); final AlertDialog dialog = b.create(); diff --git a/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java b/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java index 561cf449..81d93632 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java @@ -1,31 +1,29 @@ package org.solovyev.android.calculator; -import static android.view.Menu.NONE; -import static org.solovyev.android.calculator.App.cast; - +import android.graphics.Typeface; import android.os.Bundle; import android.os.Parcelable; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.v4.app.Fragment; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; - +import android.view.*; import org.solovyev.android.calculator.ads.AdUi; import org.solovyev.android.plotter.Check; import javax.annotation.Nonnull; import javax.inject.Inject; +import static android.view.Menu.NONE; +import static org.solovyev.android.calculator.App.cast; + public abstract class BaseFragment extends Fragment { private final int layout; @Inject AdUi adUi; + @Inject + Typeface typeface; protected BaseFragment(@LayoutRes int layout) { this.layout = layout; @@ -61,6 +59,7 @@ public abstract class BaseFragment extends Fragment { Bundle savedInstanceState) { final View view = inflater.inflate(layout, container, false); adUi.onCreateView(view); + BaseActivity.fixFonts(view, typeface); return view; } diff --git a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java index 85109d2e..90db8575 100644 --- a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java +++ b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java @@ -266,6 +266,7 @@ public class FloatingCalculatorView { final Preferences.SimpleTheme resolvedTheme = theme.resolveThemeFor(appTheme); this.context = new ContextThemeWrapper(context, resolvedTheme.light ? R.style.Cpp_Theme_Light : R.style.Cpp_Theme); this.root = View.inflate(this.context, theme.getOnscreenLayout(appTheme), null); + BaseActivity.fixFonts(this.root, typeface); final State persistedState = State.fromPrefs(myPreferences); if (persistedState != null) { this.state = persistedState; @@ -357,7 +358,6 @@ public class FloatingCalculatorView { } else { BaseKeyboardUi.adjustButton(button); } - BaseActivity.setFont(button, typeface); } final WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java index 9e71605d..f0bdf05b 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; -import android.graphics.Typeface; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; @@ -47,8 +46,6 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer @Inject SharedPreferences preferences; @Inject - Typeface typeface; - @Inject Keyboard keyboard; @Inject Editor editor; @@ -133,7 +130,6 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer // we call android.view.View.performHapticFeedback(int, int) from #onClick button.setHapticFeedbackEnabled(false); button.setOnClickListener(this); - BaseActivity.setFont(button, typeface); } protected final void prepareButton(@Nullable DirectionDragImageButton button) { diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseModeWizardStep.java b/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseModeWizardStep.java index eaa60c57..5db52c41 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseModeWizardStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseModeWizardStep.java @@ -28,7 +28,6 @@ import android.view.View; import android.widget.AdapterView; import android.widget.Spinner; import android.widget.TextView; -import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.keyboard.BaseKeyboardUi; @@ -73,7 +72,6 @@ public class ChooseModeWizardStep extends WizardFragment implements AdapterView. spinner.setOnItemSelectedListener(this); button = (DirectionDragButton) root.findViewById(R.id.wizard_mode_button); - BaseActivity.setFont(button, typeface); Adjuster.adjustText(button, BaseKeyboardUi.getTextScale(getActivity())); description = (TextView) root.findViewById(R.id.wizard_mode_description); updateDescription(mode); diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseThemeWizardStep.java b/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseThemeWizardStep.java index 78244e8b..cc3551d9 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseThemeWizardStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/ChooseThemeWizardStep.java @@ -30,6 +30,7 @@ import android.widget.AdapterView; import android.widget.FrameLayout; import android.widget.Spinner; import org.solovyev.android.calculator.App; +import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.keyboard.BaseKeyboardUi; @@ -69,7 +70,7 @@ public class ChooseThemeWizardStep extends WizardFragment implements AdapterView spinner.setOnItemSelectedListener(this); preview = (FrameLayout) root.findViewById(R.id.wizard_theme_preview); - updateImage(theme); + updatePreview(theme); } private int findPosition(@Nonnull Preferences.Gui.Theme theme) { @@ -82,7 +83,7 @@ public class ChooseThemeWizardStep extends WizardFragment implements AdapterView return 0; } - private void updateImage(@Nonnull Preferences.Gui.Theme theme) { + private void updatePreview(@Nonnull Preferences.Gui.Theme theme) { preview.removeAllViews(); final ContextThemeWrapper context = new ContextThemeWrapper(getActivity(), theme.theme); LayoutInflater.from(context).inflate(R.layout.cpp_wizard_step_choose_theme_preview, preview); @@ -90,6 +91,7 @@ public class ChooseThemeWizardStep extends WizardFragment implements AdapterView @Override public void process(@Nonnull View view) { BaseKeyboardUi.adjustButton(view); + BaseActivity.setFont(view, typeface); } }); } @@ -98,7 +100,7 @@ public class ChooseThemeWizardStep extends WizardFragment implements AdapterView public void onItemSelected(AdapterView parent, View view, int position, long id) { final ThemeUi theme = adapter.getItem(position); Preferences.Gui.theme.putPreference(preferences, theme.theme); - updateImage(theme.theme); + updatePreview(theme.theme); } @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java b/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java index cd50369f..9aae8364 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java @@ -83,7 +83,6 @@ public class DragButtonWizardStep extends WizardFragment { return false; } }); - BaseActivity.setFont(dragButton, typeface); Adjuster.adjustText(dragButton, BaseKeyboardUi.getTextScale(getActivity())); actionTextView = (TextView) root.findViewById(R.id.wizard_dragbutton_action_textview); if (savedInstanceState != null) { diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java index 72fcf175..9a810b2a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java @@ -1,6 +1,7 @@ package org.solovyev.android.calculator.wizard; import android.content.SharedPreferences; +import android.graphics.Typeface; import android.os.Bundle; import android.support.annotation.LayoutRes; import android.support.v4.app.Fragment; @@ -10,6 +11,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import org.solovyev.android.calculator.AppComponent; +import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.release.ChooseThemeReleaseNoteFragment; import org.solovyev.android.calculator.release.ChooseThemeReleaseNoteStep; @@ -35,6 +37,8 @@ public abstract class WizardFragment extends Fragment implements View.OnClickLis protected TextView prevButton; @Inject SharedPreferences preferences; + @Inject + Typeface typeface; private WizardStep step; @Override @@ -112,6 +116,12 @@ public abstract class WizardFragment extends Fragment implements View.OnClickLis return view; } + @Override + public void onViewCreated(View view, @android.support.annotation.Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + BaseActivity.fixFonts(view, typeface); + } + protected final void setupNextButton(int textResId) { assert nextButton != null; nextButton.setText(textResId);