Remove AboutBehavior and AboutModule

pull/596/head
Alinson S. Xavier 5 years ago
parent 923b923745
commit 8fd8c2802b

@ -37,7 +37,6 @@ class TestModule {
@ActivityScope @ActivityScope
@Component(modules = arrayOf( @Component(modules = arrayOf(
ActivityContextModule::class, ActivityContextModule::class,
AboutModule::class,
HabitsActivityModule::class, HabitsActivityModule::class,
ListHabitsModule::class, ListHabitsModule::class,
ShowHabitModule::class, ShowHabitModule::class,

@ -34,15 +34,12 @@ import org.isoron.uhabits.core.ui.screens.habits.list.*
@Component(modules = arrayOf( @Component(modules = arrayOf(
ActivityContextModule::class, ActivityContextModule::class,
BaseActivityModule::class, BaseActivityModule::class,
AboutModule::class,
HabitsActivityModule::class, HabitsActivityModule::class,
ListHabitsModule::class, ListHabitsModule::class,
ShowHabitModule::class, ShowHabitModule::class,
HabitModule::class HabitModule::class
), dependencies = arrayOf(HabitsApplicationComponent::class)) ), dependencies = arrayOf(HabitsApplicationComponent::class))
interface HabitsActivityComponent { interface HabitsActivityComponent {
val aboutRootView: AboutRootView
val aboutScreen: AboutScreen
val colorPickerDialogFactory: ColorPickerDialogFactory val colorPickerDialogFactory: ColorPickerDialogFactory
val habitCardListAdapter: HabitCardListAdapter val habitCardListAdapter: HabitCardListAdapter
val listHabitsBehavior: ListHabitsBehavior val listHabitsBehavior: ListHabitsBehavior

@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.about;
import android.os.*; import android.os.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.activities.*; import org.isoron.uhabits.activities.*;
/** /**
@ -33,8 +34,12 @@ public class AboutActivity extends HabitsActivity
protected void onCreate(Bundle savedInstanceState) protected void onCreate(Bundle savedInstanceState)
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
AboutScreen screen = getComponent().getAboutScreen(); HabitsApplication app = (HabitsApplication) getApplication();
screen.setRootView(getComponent().getAboutRootView()); AboutScreen screen = new AboutScreen(this,
app.getComponent().getIntentFactory(),
app.getComponent().getPreferences());
AboutRootView rootView = new AboutRootView(this, screen);
screen.setRootView(rootView);
setScreen(screen); setScreen(screen);
} }
} }

@ -1,30 +0,0 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.about;
import org.isoron.uhabits.core.ui.screens.about.*;
import dagger.*;
@Module
public abstract class AboutModule
{
@Binds
abstract AboutBehavior.Screen getScreen(AboutScreen screen);
}

@ -22,13 +22,12 @@ package org.isoron.uhabits.activities.about;
import android.content.*; import android.content.*;
import android.widget.*; import android.widget.*;
import androidx.annotation.NonNull; import androidx.annotation.*;
import org.isoron.androidbase.activities.*; import org.isoron.androidbase.activities.*;
import org.isoron.androidbase.utils.*; import org.isoron.androidbase.utils.*;
import org.isoron.uhabits.BuildConfig; import org.isoron.uhabits.BuildConfig;
import org.isoron.uhabits.R; import org.isoron.uhabits.R;
import org.isoron.uhabits.core.ui.screens.about.*;
import javax.inject.*; import javax.inject.*;
@ -40,14 +39,14 @@ public class AboutRootView extends BaseRootView
TextView tvVersion; TextView tvVersion;
@NonNull @NonNull
private final AboutBehavior behavior; private final AboutScreen screen;
@Inject @Inject
public AboutRootView(@NonNull @ActivityContext Context context, public AboutRootView(@NonNull @ActivityContext Context context,
@NonNull AboutBehavior behavior) @NonNull AboutScreen screen)
{ {
super(context); super(context);
this.behavior = behavior; this.screen = screen;
addView(inflate(getContext(), R.layout.about, null)); addView(inflate(getContext(), R.layout.about, null));
ButterKnife.bind(this); ButterKnife.bind(this);
@ -71,46 +70,45 @@ public class AboutRootView extends BaseRootView
@OnClick(R.id.tvFeedback) @OnClick(R.id.tvFeedback)
public void onClickFeedback() public void onClickFeedback()
{ {
behavior.onSendFeedback(); screen.showSendFeedbackScreen();
} }
@OnClick(R.id.tvVersion) @OnClick(R.id.tvVersion)
public void onClickIcon() public void onClickIcon()
{ {
behavior.onPressDeveloperCountdown(); screen.onPressDeveloperCountdown();
} }
@OnClick(R.id.tvRate) @OnClick(R.id.tvRate)
public void onClickRate() public void onClickRate()
{ {
behavior.onRateApp(); screen.showRateAppWebsite();
} }
@OnClick(R.id.tvSource) @OnClick(R.id.tvSource)
public void onClickSource() public void onClickSource()
{ {
behavior.onViewSourceCode(); screen.showSourceCodeWebsite();
} }
@OnClick(R.id.tvTranslate) @OnClick(R.id.tvTranslate)
public void onClickTranslate() public void onClickTranslate()
{ {
behavior.onTranslateApp(); screen.showTranslationWebsite();
} }
@OnClick(R.id.tvPrivacy) @OnClick(R.id.tvPrivacy)
public void onClickPrivacy() public void onClickPrivacy()
{ {
behavior.onClickPrivacy(); screen.showPrivacyPolicyWebsite();
} }
@OnClick(R.id.tvContributors) @OnClick(R.id.tvContributors)
public void onClickContributors() public void onClickContributors()
{ {
behavior.onClickCodeContributors(); screen.showCodeContributorsWebsite();
} }
@Override @Override
protected void initToolbar() protected void initToolbar()
{ {

@ -21,69 +21,67 @@ package org.isoron.uhabits.activities.about;
import android.widget.*; import android.widget.*;
import androidx.annotation.NonNull; import androidx.annotation.*;
import org.isoron.androidbase.activities.*; import org.isoron.androidbase.activities.*;
import org.isoron.uhabits.core.ui.screens.about.*; import org.isoron.uhabits.core.preferences.*;
import org.isoron.uhabits.intents.*; import org.isoron.uhabits.intents.*;
import javax.inject.*; public class AboutScreen extends BaseScreen
{
@NonNull
private final Preferences prefs;
import static org.isoron.uhabits.core.ui.screens.about.AboutBehavior.Message.*; private int developerCountdown = 5;
public class AboutScreen extends BaseScreen implements AboutBehavior.Screen
{
@NonNull @NonNull
private final IntentFactory intents; private final IntentFactory intents;
@Inject
public AboutScreen(@NonNull BaseActivity activity, public AboutScreen(@NonNull BaseActivity activity,
@NonNull IntentFactory intents) @NonNull IntentFactory intents,
@NonNull Preferences prefs)
{ {
super(activity); super(activity);
this.intents = intents; this.intents = intents;
this.prefs = prefs;
} }
@Override
public void showMessage(AboutBehavior.Message message)
{
if (message == YOU_ARE_NOW_A_DEVELOPER) Toast
.makeText(activity, "You are now a developer", Toast.LENGTH_LONG)
.show();
}
@Override
public void showRateAppWebsite() public void showRateAppWebsite()
{ {
activity.startActivity(intents.rateApp(activity)); activity.startActivity(intents.rateApp(activity));
} }
@Override
public void showSendFeedbackScreen() public void showSendFeedbackScreen()
{ {
activity.startActivity(intents.sendFeedback(activity)); activity.startActivity(intents.sendFeedback(activity));
} }
@Override
public void showSourceCodeWebsite() public void showSourceCodeWebsite()
{ {
activity.startActivity(intents.viewSourceCode(activity)); activity.startActivity(intents.viewSourceCode(activity));
} }
@Override
public void showTranslationWebsite() public void showTranslationWebsite()
{ {
activity.startActivity(intents.helpTranslate(activity)); activity.startActivity(intents.helpTranslate(activity));
} }
@Override
public void showPrivacyPolicyWebsite() public void showPrivacyPolicyWebsite()
{ {
activity.startActivity(intents.privacyPolicy(activity)); activity.startActivity(intents.privacyPolicy(activity));
} }
@Override public void showCodeContributorsWebsite()
public void showCodeContributorsWebsite() { {
activity.startActivity(intents.codeContributors(activity)); activity.startActivity(intents.codeContributors(activity));
} }
public void onPressDeveloperCountdown()
{
developerCountdown--;
if (developerCountdown == 0) {
prefs.setDeveloper(true);
Toast.makeText(activity, "You are now a developer", Toast.LENGTH_LONG).show();
}
}
} }

@ -1,105 +0,0 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.core.ui.screens.about;
import androidx.annotation.*;
import org.isoron.uhabits.core.preferences.*;
import javax.inject.*;
public class AboutBehavior
{
private int developerCountdown = 5;
@NonNull
private Preferences prefs;
@NonNull
private Screen screen;
@Inject
public AboutBehavior(@NonNull Preferences prefs, @NonNull Screen screen)
{
this.prefs = prefs;
this.screen = screen;
}
public void onPressDeveloperCountdown()
{
developerCountdown--;
if (developerCountdown == 0)
{
prefs.setDeveloper(true);
screen.showMessage(Message.YOU_ARE_NOW_A_DEVELOPER);
}
}
public void onRateApp()
{
screen.showRateAppWebsite();
}
public void onSendFeedback()
{
screen.showSendFeedbackScreen();
}
public void onTranslateApp()
{
screen.showTranslationWebsite();
}
public void onViewSourceCode()
{
screen.showSourceCodeWebsite();
}
public void onClickPrivacy() {
screen.showPrivacyPolicyWebsite();
}
public void onClickCodeContributors() {
screen.showCodeContributorsWebsite();
}
public enum Message
{
YOU_ARE_NOW_A_DEVELOPER
}
public interface Screen
{
void showMessage(Message message);
void showRateAppWebsite();
void showSendFeedbackScreen();
void showSourceCodeWebsite();
void showTranslationWebsite();
void showPrivacyPolicyWebsite();
void showCodeContributorsWebsite();
}
}

@ -1,95 +0,0 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.core.ui.screens.about;
import org.isoron.uhabits.core.*;
import org.isoron.uhabits.core.preferences.*;
import org.junit.*;
import org.mockito.*;
import static org.isoron.uhabits.core.ui.screens.about.AboutBehavior.Message.YOU_ARE_NOW_A_DEVELOPER;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
public class AboutBehaviorTest extends BaseUnitTest
{
private AboutBehavior behavior;
@Mock
private Preferences prefs;
@Mock
private AboutBehavior.Screen screen;
@Before
public void setUp() throws Exception
{
super.setUp();
behavior = new AboutBehavior(prefs, screen);
}
@Test
public void onPressDeveloperCountdown() throws Exception
{
behavior.onPressDeveloperCountdown();
behavior.onPressDeveloperCountdown();
behavior.onPressDeveloperCountdown();
behavior.onPressDeveloperCountdown();
verifyZeroInteractions(screen);
verifyZeroInteractions(prefs);
behavior.onPressDeveloperCountdown();
verify(screen).showMessage(YOU_ARE_NOW_A_DEVELOPER);
verify(prefs).setDeveloper(true);
behavior.onPressDeveloperCountdown();
verifyZeroInteractions(screen);
verifyZeroInteractions(prefs);
}
@Test
public void onRateApp() throws Exception
{
behavior.onRateApp();
verify(screen).showRateAppWebsite();
}
@Test
public void onSendFeedback() throws Exception
{
behavior.onSendFeedback();
verify(screen).showSendFeedbackScreen();
}
@Test
public void onTranslateApp() throws Exception
{
behavior.onTranslateApp();
verify(screen).showTranslationWebsite();
}
@Test
public void onViewSourceCode() throws Exception
{
behavior.onViewSourceCode();
verify(screen).showSourceCodeWebsite();
}
}
Loading…
Cancel
Save