From ba69cc7096e6b39d9c4872fef75e971565d4d5d2 Mon Sep 17 00:00:00 2001 From: serso Date: Thu, 3 Mar 2016 17:06:27 +0100 Subject: [PATCH] Clean up --- .../android/calculator/ActivityLauncher.java | 7 +- .../org/solovyev/android/calculator/App.java | 106 +--------------- .../android/calculator/AppComponent.java | 9 +- .../android/calculator/AppModule.java | 8 ++ .../android/calculator/BaseActivity.java | 13 +- .../calculator/CalculatorApplication.java | 11 +- .../solovyev/android/calculator/Editor.java | 5 +- .../solovyev/android/calculator/Keyboard.java | 5 +- .../android/calculator/StartupHelper.java | 3 +- .../entities/BaseEntitiesRegistry.java | 2 +- .../FloatingCalculatorBroadcastReceiver.java | 15 ++- .../floating/FloatingCalculatorService.java | 13 +- .../solovyev/android/calculator/ga/Ga.java | 33 +---- .../calculator/keyboard/BaseKeyboardUi.java | 18 +-- .../calculator/language/Languages.java | 9 +- .../preferences/PreferencesActivity.java | 4 +- .../preferences/PreferencesFragment.java | 23 ++-- .../preferences/PurchaseDialogActivity.java | 9 +- .../calculator/view/EditorTextProcessor.java | 10 +- .../calculator/view/ScreenMetrics.java | 120 ------------------ .../wizard/ChooseModeWizardStep.java | 5 +- .../wizard/ChooseThemeWizardStep.java | 4 +- .../wizard/OnScreenCalculatorWizardStep.java | 4 +- .../calculator/wizard/WizardActivity.java | 4 +- .../calculator/wizard/WizardFragment.java | 12 +- 25 files changed, 129 insertions(+), 323 deletions(-) delete mode 100644 app/src/main/java/org/solovyev/android/calculator/view/ScreenMetrics.java diff --git a/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java b/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java index d6b17f67..e66864be 100644 --- a/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java +++ b/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java @@ -88,15 +88,10 @@ public final class ActivityLauncher { context.startActivity(intent); } - @Nonnull - private static Notifier getNotifier() { - return ((CalculatorApplication) App.getApplication()).notifier; - } - public void plotDisplayedExpression() { final DisplayState state = display.get().getState(); if (!state.valid) { - getNotifier().showMessage(R.string.not_valid_result, MessageType.error); + notifier.showMessage(R.string.not_valid_result, MessageType.error); return; } plot(state.getResult()); diff --git a/app/src/main/java/org/solovyev/android/calculator/App.java b/app/src/main/java/org/solovyev/android/calculator/App.java index a1af5ae6..64477c1e 100644 --- a/app/src/main/java/org/solovyev/android/calculator/App.java +++ b/app/src/main/java/org/solovyev/android/calculator/App.java @@ -41,114 +41,51 @@ import android.support.v7.view.ContextThemeWrapper; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; -import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; import android.view.View; -import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; -import com.squareup.otto.Bus; import org.solovyev.android.Check; import org.solovyev.android.calculator.floating.FloatingCalculatorService; -import org.solovyev.android.calculator.ga.Ga; -import org.solovyev.android.calculator.language.Languages; -import org.solovyev.android.calculator.view.ScreenMetrics; -import org.solovyev.android.calculator.wizard.CalculatorWizards; -import org.solovyev.android.wizard.Wizards; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -/** - * This class aggregates several useful in any Android application interfaces and provides access to {@link android.app.Application} object from a static context. - * NOTE: use this class only if you don't use and dependency injection library (if you use any you can directly set interfaces through it).
- *

- * Before first usage this class must be initialized by calling {@link App#init(android.app.Application)} method (for example, from {@link android.app.Application#onCreate()}) - */ public final class App { public static final String TAG = "C++"; - @Nonnull - private static Languages languages; - @Nonnull - private static volatile Application application; + private static Application application; @Nonnull private static SharedPreferences preferences; - @Nonnull - private static volatile Ga ga; - @Nonnull - private static volatile ScreenMetrics screenMetrics; - @Nonnull - private static Wizards wizards; - @Nonnull - private static Editor editor; - @Nonnull - private static Bus bus; - @Nonnull - private static Display display; private App() { throw new AssertionError(); } - public static void init(@Nonnull CalculatorApplication application, - @Nonnull Languages languages) { + public static void init(@Nonnull CalculatorApplication application) { App.application = application; App.preferences = PreferenceManager.getDefaultSharedPreferences(application); - App.ga = new Ga(application, preferences); - App.screenMetrics = new ScreenMetrics(application); - App.languages = languages; - App.languages.init(); - App.wizards = new CalculatorWizards(application); - App.editor = application.editor; - App.display = application.display; - App.bus = application.bus; - } - - /** - * @param real type of application - * @return application instance which was provided in {@link App#init} method - */ - @SuppressWarnings("unchecked") - @Nonnull - public static A getApplication() { - return (A) application; - } - - @Nonnull - public static Wizards getWizards() { - return wizards; - } - - @Nonnull - public static Ga getGa() { - return ga; - } - - @Nonnull - public static SharedPreferences getPreferences() { - return preferences; } @Nonnull public static Preferences.Gui.Theme getTheme() { - return Preferences.Gui.getTheme(getPreferences()); + return Preferences.Gui.getTheme(preferences); } @Nonnull public static Preferences.SimpleTheme getWidgetTheme() { - return Preferences.Widget.getTheme(getPreferences()); + return Preferences.Widget.getTheme(preferences); } @Nonnull public static Preferences.Gui.Theme getThemeFor(@Nonnull Context context) { if (isFloatingCalculator(context)) { - final SharedPreferences p = getPreferences(); + final SharedPreferences p = preferences; final Preferences.SimpleTheme onscreenTheme = Preferences.Onscreen.getTheme(p); final Preferences.Gui.Theme appTheme = Preferences.Gui.getTheme(p); return onscreenTheme.resolveThemeFor(appTheme).getAppTheme(); @@ -165,16 +102,6 @@ public final class App { return context; } - @Nonnull - public static Languages getLanguages() { - return languages; - } - - @Nonnull - public static ScreenMetrics getScreenMetrics() { - return screenMetrics; - } - public static void showDialog(@Nonnull DialogFragment dialogFragment, @Nonnull String fragmentTag, @Nonnull FragmentManager fm) { @@ -201,21 +128,6 @@ public final class App { return spannable.toString(); } - @Nonnull - public static Editor getEditor() { - return editor; - } - - @Nonnull - public static Display getDisplay() { - return display; - } - - @Nonnull - public static Bus getBus() { - return bus; - } - private static final AtomicInteger sNextViewId = new AtomicInteger(1); public static int generateViewId() { @@ -391,14 +303,6 @@ public final class App { pm.setComponentEnabledSetting(new ComponentName(context, componentClass), componentState, PackageManager.DONT_KILL_APP); } - public static boolean isComponentEnabled(@Nonnull Context context, - @Nonnull Class componentClass) { - final PackageManager pm = context.getPackageManager(); - - int componentEnabledSetting = pm.getComponentEnabledSetting(new ComponentName(context, componentClass)); - return componentEnabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED || componentEnabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; - } - public static int toPixels(@Nonnull DisplayMetrics dm, float dps) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dps, dm); } diff --git a/app/src/main/java/org/solovyev/android/calculator/AppComponent.java b/app/src/main/java/org/solovyev/android/calculator/AppComponent.java index e4cb2a67..20d23489 100644 --- a/app/src/main/java/org/solovyev/android/calculator/AppComponent.java +++ b/app/src/main/java/org/solovyev/android/calculator/AppComponent.java @@ -1,8 +1,10 @@ package org.solovyev.android.calculator; +import dagger.Component; import org.solovyev.android.calculator.converter.ConverterFragment; import org.solovyev.android.calculator.errors.FixableErrorFragment; import org.solovyev.android.calculator.errors.FixableErrorsActivity; +import org.solovyev.android.calculator.floating.FloatingCalculatorBroadcastReceiver; import org.solovyev.android.calculator.floating.FloatingCalculatorService; import org.solovyev.android.calculator.floating.FloatingCalculatorView; import org.solovyev.android.calculator.functions.BaseFunctionFragment; @@ -17,6 +19,7 @@ import org.solovyev.android.calculator.plot.PlotDimensionsFragment; import org.solovyev.android.calculator.plot.PlotEditFunctionFragment; import org.solovyev.android.calculator.plot.PlotFunctionsFragment; import org.solovyev.android.calculator.preferences.PreferencesActivity; +import org.solovyev.android.calculator.preferences.PreferencesFragment; import org.solovyev.android.calculator.preferences.PurchaseDialogActivity; import org.solovyev.android.calculator.variables.EditVariableFragment; import org.solovyev.android.calculator.variables.VariablesFragment; @@ -24,11 +27,10 @@ import org.solovyev.android.calculator.view.Tabs; import org.solovyev.android.calculator.widget.CalculatorWidget; import org.solovyev.android.calculator.wizard.DragButtonWizardStep; import org.solovyev.android.calculator.wizard.WizardActivity; +import org.solovyev.android.calculator.wizard.WizardFragment; import javax.inject.Singleton; -import dagger.Component; - @Singleton @Component(modules = AppModule.class) public interface AppComponent { @@ -65,4 +67,7 @@ public interface AppComponent { void inject(CalculatorWidget widget); void inject(WizardActivity activity); void inject(BaseActivity activity); + void inject(PreferencesFragment fragment); + void inject(WizardFragment fragment); + void inject(FloatingCalculatorBroadcastReceiver receiver); } diff --git a/app/src/main/java/org/solovyev/android/calculator/AppModule.java b/app/src/main/java/org/solovyev/android/calculator/AppModule.java index d157cdfb..c65aeb9b 100644 --- a/app/src/main/java/org/solovyev/android/calculator/AppModule.java +++ b/app/src/main/java/org/solovyev/android/calculator/AppModule.java @@ -15,9 +15,11 @@ import dagger.Module; import dagger.Provides; import jscl.JsclMathEngine; import org.solovyev.android.calculator.language.Languages; +import org.solovyev.android.calculator.wizard.CalculatorWizards; import org.solovyev.android.checkout.*; import org.solovyev.android.plotter.Plot; import org.solovyev.android.plotter.Plotter; +import org.solovyev.android.wizard.Wizards; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -137,6 +139,12 @@ public class AppModule { return new AcraErrorReporter(); } + @Provides + @Singleton + Wizards provideWizards(@Nonnull Application application) { + return new CalculatorWizards(application); + } + @Provides @Singleton @Named(THREAD_UI) 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 c631cb9b..3ff1902a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java @@ -1,8 +1,6 @@ package org.solovyev.android.calculator; import android.app.Activity; -import android.app.KeyguardManager; -import android.content.Context; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; @@ -21,6 +19,7 @@ import android.widget.TextView; import butterknife.Bind; import butterknife.ButterKnife; import org.solovyev.android.Check; +import org.solovyev.android.calculator.ga.Ga; import org.solovyev.android.calculator.history.History; import org.solovyev.android.calculator.language.Language; import org.solovyev.android.calculator.language.Languages; @@ -51,6 +50,8 @@ public class BaseActivity extends AppCompatActivity { @Inject Calculator calculator; @Inject + Ga ga; + @Inject Typeface typeface; @Bind(R.id.main) ViewGroup mainView; @@ -77,12 +78,12 @@ public class BaseActivity extends AppCompatActivity { this.tabs = new Tabs(this); } - public static void reportActivityStop(@Nonnull Activity activity) { - App.getGa().getAnalytics().reportActivityStop(activity); + public void reportActivityStop(@Nonnull Activity activity) { + ga.getAnalytics().reportActivityStop(activity); } - public static void reportActivityStart(@Nonnull Activity activity) { - App.getGa().getAnalytics().reportActivityStart(activity); + public void reportActivityStart(@Nonnull Activity activity) { + ga.getAnalytics().reportActivityStart(activity); } public static void setFont(@Nonnull TextView view, @Nonnull Typeface newTypeface) { diff --git a/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java b/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java index 50ebc520..b4143908 100644 --- a/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java +++ b/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java @@ -34,6 +34,7 @@ import org.acra.ACRA; import org.acra.ACRAConfiguration; import org.acra.sender.HttpSender; import org.solovyev.android.calculator.floating.FloatingCalculatorActivity; +import org.solovyev.android.calculator.ga.Ga; import org.solovyev.android.calculator.history.History; import org.solovyev.android.calculator.language.Language; import org.solovyev.android.calculator.language.Languages; @@ -96,6 +97,9 @@ public class CalculatorApplication extends android.app.Application implements Sh @Inject ActivityLauncher launcher; + @Inject + Ga ga; + @Nonnull private final TimingLogger timer = new TimingLogger("App", "onCreate"); @@ -104,7 +108,7 @@ public class CalculatorApplication extends android.app.Application implements Sh timer.reset(); final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - final Languages languages = new Languages(preferences); + final Languages languages = new Languages(this, preferences); timer.addSplit("languages"); onPreCreate(preferences, languages); @@ -131,11 +135,12 @@ public class CalculatorApplication extends android.app.Application implements Sh } private void onPostCreate(@Nonnull SharedPreferences preferences, @Nonnull Languages languages) { - App.init(this, languages); + App.init(this); + languages.init(); preferences.registerOnSharedPreferenceChangeListener(this); languages.updateContextLocale(this, true); - App.getGa().reportInitially(preferences); + ga.reportInitially(preferences); calculator.init(initThread); diff --git a/app/src/main/java/org/solovyev/android/calculator/Editor.java b/app/src/main/java/org/solovyev/android/calculator/Editor.java index 6015d6e7..c24dc3c8 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Editor.java +++ b/app/src/main/java/org/solovyev/android/calculator/Editor.java @@ -22,6 +22,7 @@ package org.solovyev.android.calculator; +import android.app.Application; import android.content.SharedPreferences; import android.text.TextUtils; @@ -54,8 +55,8 @@ public class Editor { Bus bus; @Inject - public Editor(@Nonnull SharedPreferences preferences, @Nonnull Engine engine) { - textProcessor = new EditorTextProcessor(preferences, engine); + public Editor(@Nonnull Application application, @Nonnull SharedPreferences preferences, @Nonnull Engine engine) { + textProcessor = new EditorTextProcessor(application, preferences, engine); } public void init() { diff --git a/app/src/main/java/org/solovyev/android/calculator/Keyboard.java b/app/src/main/java/org/solovyev/android/calculator/Keyboard.java index 193c38a0..f4889ab8 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Keyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/Keyboard.java @@ -29,6 +29,7 @@ import com.squareup.otto.Bus; import dagger.Lazy; import org.solovyev.android.Check; import org.solovyev.android.calculator.buttons.CppSpecialButton; +import org.solovyev.android.calculator.ga.Ga; import org.solovyev.android.calculator.math.MathType; import javax.annotation.Nonnull; @@ -51,6 +52,8 @@ public class Keyboard implements SharedPreferences.OnSharedPreferenceChangeListe @Inject Engine engine; @Inject + Ga ga; + @Inject Lazy clipboard; @Inject Lazy bus; @@ -72,7 +75,7 @@ public class Keyboard implements SharedPreferences.OnSharedPreferenceChangeListe if (TextUtils.isEmpty(text)) { return false; } - App.getGa().onButtonPressed(text); + ga.onButtonPressed(text); if (!processSpecialAction(text)) { processText(prepareText(text)); } diff --git a/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java b/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java index 9a8d20fa..d66b8974 100644 --- a/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java +++ b/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java @@ -28,6 +28,8 @@ public class StartupHelper { SharedPreferences uiPreferences; @Inject SharedPreferences preferences; + @Inject + Wizards wizards; @Inject public StartupHelper() { @@ -44,7 +46,6 @@ public class StartupHelper { private void handleOnMainActivityOpened(@NonNull final AppCompatActivity activity, @NonNull SharedPreferences.Editor editor, int opened) { final int currentVersion = App.getAppVersionCode(activity); - final Wizards wizards = App.getWizards(); final Wizard wizard = wizards.getWizard(CalculatorWizards.FIRST_TIME_WIZARD); if (wizard.isStarted() && !wizard.isFinished()) { continueWizard(wizards, wizard.getName(), activity); diff --git a/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java b/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java index 8756fc6a..50566be2 100644 --- a/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java +++ b/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java @@ -107,7 +107,7 @@ public abstract class BaseEntitiesRegistry implements Enti stringName = prefix + substitute; } - return getDescription(App.getApplication(), stringName); + return getDescription(application, stringName); } @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorBroadcastReceiver.java b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorBroadcastReceiver.java index 99891c38..f1012594 100644 --- a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorBroadcastReceiver.java +++ b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorBroadcastReceiver.java @@ -27,14 +27,21 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; - -import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.Preferences; +import org.solovyev.android.calculator.ga.Ga; import javax.annotation.Nonnull; +import javax.inject.Inject; + +import static org.solovyev.android.calculator.App.cast; public final class FloatingCalculatorBroadcastReceiver extends BroadcastReceiver { + @Inject + SharedPreferences preferences; + @Inject + Ga ga; + public FloatingCalculatorBroadcastReceiver() { } @@ -42,10 +49,10 @@ public final class FloatingCalculatorBroadcastReceiver extends BroadcastReceiver public void onReceive(@Nonnull Context context, @Nonnull Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { - final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + cast(context).getComponent().inject(this); if (Preferences.Onscreen.startOnBoot.getPreferenceNoError(preferences)) { FloatingCalculatorService.showNotification(context); - App.getGa().onBootStart(); + ga.onBootStart(); } } else { final Intent newIntent = new Intent(intent); diff --git a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java index d19bd611..c0930a05 100644 --- a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java +++ b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java @@ -32,16 +32,11 @@ import android.os.IBinder; import android.support.v4.app.NotificationCompat; import android.util.DisplayMetrics; import android.view.WindowManager; - import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; - import org.solovyev.android.Check; -import org.solovyev.android.calculator.App; -import org.solovyev.android.calculator.Display; -import org.solovyev.android.calculator.Editor; -import org.solovyev.android.calculator.Preferences; -import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.*; +import org.solovyev.android.calculator.ga.Ga; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -64,6 +59,8 @@ public class FloatingCalculatorService extends Service implements FloatingViewLi @Inject Display display; @Inject + Ga ga; + @Inject SharedPreferences preferences; public static void showNotification(@Nonnull Context context) { @@ -148,7 +145,7 @@ public class FloatingCalculatorService extends Service implements FloatingViewLi if (isShowWindowIntent(intent)) { hideNotification(); createView(); - App.getGa().onFloatingCalculatorOpened(); + ga.onFloatingCalculatorOpened(); } else if (isShowNotificationIntent(intent)) { showNotification(); } diff --git a/app/src/main/java/org/solovyev/android/calculator/ga/Ga.java b/app/src/main/java/org/solovyev/android/calculator/ga/Ga.java index a37829c9..3d5671b1 100644 --- a/app/src/main/java/org/solovyev/android/calculator/ga/Ga.java +++ b/app/src/main/java/org/solovyev/android/calculator/ga/Ga.java @@ -1,23 +1,20 @@ package org.solovyev.android.calculator.ga; -import android.content.Context; +import android.app.Application; import android.content.SharedPreferences; import android.text.TextUtils; -import android.util.Log; - import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; - import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - import javax.annotation.Nonnull; import javax.annotation.Nullable; +import javax.inject.Inject; +import javax.inject.Singleton; +@Singleton public final class Ga implements SharedPreferences.OnSharedPreferenceChangeListener { private static final int LAYOUT = 1; @@ -29,24 +26,13 @@ public final class Ga implements SharedPreferences.OnSharedPreferenceChangeListe @Nonnull private final Tracker tracker; - public Ga(@Nonnull Context context, @Nonnull SharedPreferences preferences) { - analytics = GoogleAnalytics.getInstance(context); + @Inject + public Ga(@Nonnull Application application, @Nonnull SharedPreferences preferences) { + analytics = GoogleAnalytics.getInstance(application); tracker = analytics.newTracker(R.xml.ga); preferences.registerOnSharedPreferenceChangeListener(this); } - @Nonnull - private String getStackTrace(@Nonnull Exception e) { - try { - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - e.printStackTrace(new PrintStream(out)); - return new String(out.toByteArray()); - } catch (Exception e1) { - Log.e("Ga", e1.getMessage(), e1); - } - return ""; - } - private void reportLayout(@Nonnull Preferences.Gui.Layout layout) { tracker.send(new HitBuilders.EventBuilder().setCustomDimension(LAYOUT, layout.name()).build()); } @@ -60,11 +46,6 @@ public final class Ga implements SharedPreferences.OnSharedPreferenceChangeListe return analytics; } - @Nonnull - public Tracker getTracker() { - return tracker; - } - public void onButtonPressed(@Nullable String text) { if (TextUtils.isEmpty(text)) { return; 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 f8ea7496..024ecbd3 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,17 +4,16 @@ import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; -import android.content.res.Configuration; import android.graphics.Typeface; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import org.solovyev.android.calculator.*; import org.solovyev.android.calculator.buttons.CppSpecialButton; -import org.solovyev.android.calculator.view.ScreenMetrics; import org.solovyev.android.views.Adjuster; import org.solovyev.android.views.dragbutton.DirectionDragButton; import org.solovyev.android.views.dragbutton.DragButton; @@ -26,9 +25,9 @@ import javax.inject.Inject; import java.util.ArrayList; import java.util.List; +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.view.HapticFeedbackConstants.*; import static org.solovyev.android.calculator.App.cast; -import static org.solovyev.android.calculator.App.getScreenMetrics; import static org.solovyev.android.calculator.Preferences.Gui.Layout.simple; import static org.solovyev.android.calculator.Preferences.Gui.Layout.simple_mobile; @@ -59,7 +58,7 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer ActivityLauncher launcher; @Inject PreferredPreferences preferredPreferences; - protected int orientation = Configuration.ORIENTATION_PORTRAIT; + protected int orientation = ORIENTATION_PORTRAIT; private int textSize; private Preferences.Gui.Layout layout; private final float textScale; @@ -83,7 +82,7 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer orientation = App.getScreenOrientation(activity); layout = Preferences.Gui.layout.getPreferenceNoError(preferences); - textSize = calculateTextSize(); + textSize = calculateTextSize(activity); } protected final void prepareButton(@Nullable ImageView button) { @@ -141,12 +140,13 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer preferences.unregisterOnSharedPreferenceChangeListener(this); } - public static int calculateTextSize() { - final ScreenMetrics metrics = getScreenMetrics(); - final boolean portrait = metrics.isInPortraitMode(); + public static int calculateTextSize(@Nonnull Activity activity) { + final boolean portrait = App.getScreenOrientation(activity) == ORIENTATION_PORTRAIT; + final DisplayMetrics metrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); final int buttonsCount = portrait ? 5 : 4; final int buttonsWeight = portrait ? (2 + 1 + buttonsCount) : (2 + buttonsCount); - final int buttonSize = metrics.getHeightPxs() / buttonsWeight; + final int buttonSize = metrics.heightPixels / buttonsWeight; return 5 * buttonSize / 12; } diff --git a/app/src/main/java/org/solovyev/android/calculator/language/Languages.java b/app/src/main/java/org/solovyev/android/calculator/language/Languages.java index 8b9a240f..8fdb0389 100644 --- a/app/src/main/java/org/solovyev/android/calculator/language/Languages.java +++ b/app/src/main/java/org/solovyev/android/calculator/language/Languages.java @@ -1,5 +1,6 @@ package org.solovyev.android.calculator.language; +import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -8,7 +9,6 @@ import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import org.solovyev.android.Check; -import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.Preferences; import javax.annotation.Nonnull; @@ -26,9 +26,12 @@ public final class Languages implements SharedPreferences.OnSharedPreferenceChan @Nonnull private final List list = new ArrayList<>(); @Nonnull + private final Application application; + @Nonnull private final SharedPreferences preferences; - public Languages(@Nonnull SharedPreferences preferences) { + public Languages(@Nonnull Application application, @Nonnull SharedPreferences preferences) { + this.application = application; this.preferences = preferences; } @@ -160,7 +163,7 @@ public final class Languages implements SharedPreferences.OnSharedPreferenceChan @Override public void onSharedPreferenceChanged(@Nonnull SharedPreferences p, String key) { if (Preferences.Gui.language.isSameKey(key)) { - updateContextLocale(App.getApplication(), false); + updateContextLocale(application, false); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java index bb66b057..78f85c4b 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java @@ -88,7 +88,7 @@ public class PreferencesActivity extends BaseActivity implements SharedPreferenc @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - App.getPreferences().registerOnSharedPreferenceChangeListener(this); + preferences.registerOnSharedPreferenceChangeListener(this); final Intent intent = getIntent(); final int preferenceTitle = intent.getIntExtra(EXTRA_PREFERENCE_TITLE, 0); @@ -139,7 +139,7 @@ public class PreferencesActivity extends BaseActivity implements SharedPreferenc @Override protected void onDestroy() { checkout.stop(); - App.getPreferences().unregisterOnSharedPreferenceChangeListener(this); + preferences.unregisterOnSharedPreferenceChangeListener(this); super.onDestroy(); } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java index eba148ac..555d7ad5 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java @@ -10,9 +10,7 @@ import android.support.v4.app.FragmentActivity; import android.util.SparseArray; import android.view.View; import android.widget.ListView; - import org.solovyev.android.calculator.AdView; -import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.Engine; import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; @@ -22,12 +20,14 @@ import org.solovyev.android.checkout.BillingRequests; import org.solovyev.android.checkout.Checkout; import org.solovyev.android.checkout.ProductTypes; import org.solovyev.android.checkout.RequestListener; - -import java.util.List; +import org.solovyev.android.wizard.Wizards; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import javax.inject.Inject; +import java.util.List; +import static org.solovyev.android.calculator.App.cast; import static org.solovyev.android.calculator.wizard.CalculatorWizards.DEFAULT_WIZARD_FLOW; import static org.solovyev.android.wizard.WizardUi.startWizard; @@ -38,6 +38,12 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc private Preference buyPremiumPreference; @Nullable private AdView adView; + @Inject + SharedPreferences preferences; + @Inject + Languages languages; + @Inject + Wizards wizards; @Nonnull public static PreferencesFragment create(int preferencesResId, int layoutResId) { @@ -49,8 +55,9 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + cast(this).getComponent().inject(this); - App.getPreferences().registerOnSharedPreferenceChangeListener(this); + preferences.registerOnSharedPreferenceChangeListener(this); } private void setPreferenceIntent(int xml, @Nonnull PreferencesActivity.PrefDef def) { @@ -80,7 +87,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc restartWizardPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - startWizard(App.getWizards(), DEFAULT_WIZARD_FLOW, getActivity()); + startWizard(wizards, DEFAULT_WIZARD_FLOW, getActivity()); return true; } }); @@ -122,7 +129,6 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } }); - final SharedPreferences preferences = App.getPreferences(); onSharedPreferenceChanged(preferences, Engine.Preferences.Output.round.getKey()); } @@ -132,7 +138,6 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } final ListPreference language = (ListPreference) preferenceManager.findPreference(Preferences.Gui.language.getKey()); - final Languages languages = App.getLanguages(); final List languagesList = languages.getList(); final CharSequence[] entries = new CharSequence[languagesList.size()]; final CharSequence[] entryValues = new CharSequence[languagesList.size()]; @@ -195,7 +200,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc @Override public void onDestroy() { - App.getPreferences().unregisterOnSharedPreferenceChangeListener(this); + preferences.unregisterOnSharedPreferenceChangeListener(this); super.onDestroy(); } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java index bfe9ce65..801f5eab 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java @@ -30,11 +30,10 @@ import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; - import org.solovyev.android.calculator.App; -import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.BaseDialogFragment; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.ga.Ga; import org.solovyev.android.checkout.*; import javax.annotation.Nonnull; @@ -49,6 +48,8 @@ public class PurchaseDialogActivity extends AppCompatActivity implements Request Billing billing; @Inject Products products; + @Inject + Ga ga; ActivityCheckout checkout; @Override @@ -69,12 +70,12 @@ public class PurchaseDialogActivity extends AppCompatActivity implements Request @Override protected void onStart() { super.onStart(); - BaseActivity.reportActivityStart(this); + ga.getAnalytics().reportActivityStart(this); } @Override protected void onStop() { - BaseActivity.reportActivityStop(this); + ga.getAnalytics().reportActivityStop(this); super.onStop(); } diff --git a/app/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java b/app/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java index c2c47911..b863f05f 100644 --- a/app/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java +++ b/app/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java @@ -2,8 +2,6 @@ package org.solovyev.android.calculator.view; import android.app.Application; import android.content.SharedPreferences; - -import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.Engine; import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.text.TextProcessor; @@ -21,11 +19,14 @@ public final class EditorTextProcessor implements TextProcessor= 79.0 - || metrics.densityDpi - metrics.ydpi >= 79.0 - || Math.abs(metrics.ydpi - metrics.xdpi) > 40.0) { - xDpi = yDpi = metrics.densityDpi; - } else { - xDpi = metrics.xdpi; - yDpi = metrics.ydpi; - } - } - - private void initDimensions() { - final float w = getWidthPxs() / xDpi; - final float h = getHeightPxs() / yDpi; - diagonalIns = (float) Math.sqrt(w * w + h * h); - widthIns = w; - heightIns = h; - } - - public boolean isInPortraitMode() { - return getWidthPxs() < getHeightPxs(); - } - - @SuppressWarnings("deprecation") - public int getWidthPxs() { - return display.getWidth(); - } - - @SuppressWarnings("deprecation") - public int getHeightPxs() { - return display.getHeight(); - } - - public float getWidthIns() { - return widthIns; - } - - public float getHeightIns() { - return heightIns; - } - - public int getDensityDpi() { - return metrics.densityDpi; - } - - public float getDensity() { - return metrics.density; - } - - public float getXDpi() { - return xDpi; - } - - public float getYDpi() { - return yDpi; - } - - public float getDiagonalIns() { - return diagonalIns; - } - - public int getLayout() { - return layout; - } -} 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 56b1ba30..e8e506e6 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 @@ -27,7 +27,6 @@ import android.view.View; import android.widget.AdapterView; import android.widget.Spinner; import android.widget.TextView; -import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; import org.solovyev.android.views.dragbutton.DirectionDragButton; @@ -52,7 +51,7 @@ public class ChooseModeWizardStep extends WizardFragment implements AdapterView. public void onViewCreated(View root, Bundle savedInstanceState) { super.onViewCreated(root, savedInstanceState); - final CalculatorMode mode = CalculatorMode.fromGuiLayout(Preferences.Gui.layout.getPreference(App.getPreferences())); + final CalculatorMode mode = CalculatorMode.fromGuiLayout(Preferences.Gui.layout.getPreference(preferences)); final Spinner spinner = (Spinner) root.findViewById(R.id.wizard_mode_spinner); spinner.setAdapter(WizardArrayAdapter.create(getActivity(), R.array.cpp_modes)); spinner.setSelection(mode == simple ? 0 : 1); @@ -80,7 +79,7 @@ public class ChooseModeWizardStep extends WizardFragment implements AdapterView. @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { final CalculatorMode mode = position == 0 ? simple : engineer; - mode.apply(App.getPreferences()); + mode.apply(preferences); 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 6143739e..f29670a8 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 @@ -55,7 +55,7 @@ public class ChooseThemeWizardStep extends WizardFragment implements AdapterView public void onViewCreated(View root, Bundle savedInstanceState) { super.onViewCreated(root, savedInstanceState); - final Preferences.Gui.Theme theme = Preferences.Gui.getTheme(App.getPreferences()); + final Preferences.Gui.Theme theme = Preferences.Gui.getTheme(preferences); final Spinner spinner = (Spinner) root.findViewById(R.id.wizard_theme_spinner); themes.clear(); themes.add(new ThemeUi(Preferences.Gui.Theme.material_theme, R.string.cpp_theme_dark)); @@ -97,7 +97,7 @@ public class ChooseThemeWizardStep extends WizardFragment implements AdapterView @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { final ThemeUi theme = adapter.getItem(position); - Preferences.Gui.theme.putPreference(App.getPreferences(), theme.theme); + Preferences.Gui.theme.putPreference(preferences, theme.theme); updateImage(theme.theme); } diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/OnScreenCalculatorWizardStep.java b/app/src/main/java/org/solovyev/android/calculator/wizard/OnScreenCalculatorWizardStep.java index 264d873a..1b52329b 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/OnScreenCalculatorWizardStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/OnScreenCalculatorWizardStep.java @@ -49,7 +49,7 @@ public class OnScreenCalculatorWizardStep extends WizardFragment implements Comp public void onViewCreated(View root, Bundle savedInstanceState) { super.onViewCreated(root, savedInstanceState); - final Boolean enabled = Preferences.Onscreen.showAppIcon.getPreference(App.getPreferences()); + final Boolean enabled = Preferences.Onscreen.showAppIcon.getPreference(preferences); checkbox = (CheckBox) root.findViewById(R.id.wizard_onscreen_app_enabled_checkbox); checkbox.setChecked(enabled); checkbox.setOnCheckedChangeListener(this); @@ -67,7 +67,7 @@ public class OnScreenCalculatorWizardStep extends WizardFragment implements Comp @Override public void onCheckedChanged(CompoundButton buttonView, boolean checked) { - Preferences.Onscreen.showAppIcon.putPreference(App.getPreferences(), checked); + Preferences.Onscreen.showAppIcon.putPreference(preferences, checked); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java index cc40ee7c..b001532a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java @@ -38,8 +38,6 @@ public class WizardActivity extends BaseActivity implements WizardsAware, Shared private ViewPager pager; @Nonnull private WizardPagerAdapter pagerAdapter; - @Nonnull - private Wizards wizards = App.getWizards(); @Nullable private AlertDialog dialog; @@ -47,6 +45,8 @@ public class WizardActivity extends BaseActivity implements WizardsAware, Shared SharedPreferences preferences; @Inject Languages languages; + @Inject + Wizards wizards; public WizardActivity() { super(R.layout.cpp_activity_wizard, 0); 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 278b566b..bb9c32b4 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,5 +1,6 @@ package org.solovyev.android.calculator.wizard; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.LayoutRes; import android.support.v4.app.Fragment; @@ -8,6 +9,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.release.ChooseThemeReleaseNoteFragment; import org.solovyev.android.calculator.release.ChooseThemeReleaseNoteStep; @@ -20,7 +22,9 @@ import org.solovyev.android.wizard.WizardStep; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import javax.inject.Inject; +import static org.solovyev.android.calculator.App.cast; import static org.solovyev.android.calculator.App.toPixels; public abstract class WizardFragment extends Fragment implements View.OnClickListener { @@ -30,16 +34,22 @@ public abstract class WizardFragment extends Fragment implements View.OnClickLis @Nullable protected TextView prevButton; - + @Inject + SharedPreferences preferences; private WizardStep step; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + inject(cast(this).getComponent()); step = findStepByClassName(); } + protected void inject(@Nonnull AppComponent component) { + component.inject(this); + } + @Nonnull private WizardStep findStepByClassName() { if (this instanceof ReleaseNoteFragment) {