From 4e896d36317a22cb9f1eaecae4a1bb0dbe4b3ba4 Mon Sep 17 00:00:00 2001 From: terrakok Date: Mon, 21 Nov 2016 23:28:04 +0300 Subject: [PATCH 1/6] added the startup screen to show the transitions between Activities --- sample/src/main/AndroidManifest.xml | 8 +- .../ru/terrakok/cicerone/sample/Screens.java | 2 + .../mvp/start/StartActivityPresenter.java | 26 ++++ .../sample/mvp/start/StartActivityView.java | 9 ++ .../sample/ui/start/StartActivity.java | 113 ++++++++++++++++++ sample/src/main/res/layout/activity_start.xml | 32 +++++ sample/src/main/res/values/strings.xml | 2 + 7 files changed, 189 insertions(+), 3 deletions(-) create mode 100644 sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityPresenter.java create mode 100644 sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityView.java create mode 100644 sample/src/main/java/ru/terrakok/cicerone/sample/ui/start/StartActivity.java create mode 100644 sample/src/main/res/layout/activity_start.xml diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 223591c..5bd3ef2 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -7,15 +7,17 @@ android:name=".SampleApplication" android:allowBackup="false" android:icon="@mipmap/ic_launcher" - android:theme="@style/AppTheme" - android:label="@string/app_name"> + android:label="@string/app_name" + android:theme="@style/AppTheme"> + android:name=".ui.start.StartActivity"> + + diff --git a/sample/src/main/java/ru/terrakok/cicerone/sample/Screens.java b/sample/src/main/java/ru/terrakok/cicerone/sample/Screens.java index fb4ae0a..3c8c82f 100644 --- a/sample/src/main/java/ru/terrakok/cicerone/sample/Screens.java +++ b/sample/src/main/java/ru/terrakok/cicerone/sample/Screens.java @@ -7,4 +7,6 @@ public class Screens { public static final String SAMPLE_SCREEN = "sample_screen_"; + public static final String START_ACTIVITY_SCREEN = "start activity screen"; + public static final String MAIN_ACTIVITY_SCREEN = "main activity screen"; } diff --git a/sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityPresenter.java b/sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityPresenter.java new file mode 100644 index 0000000..7199a40 --- /dev/null +++ b/sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityPresenter.java @@ -0,0 +1,26 @@ +package ru.terrakok.cicerone.sample.mvp.start; + +import com.arellomobile.mvp.MvpPresenter; + +import ru.terrakok.cicerone.Router; +import ru.terrakok.cicerone.sample.SampleApplication; +import ru.terrakok.cicerone.sample.Screens; + +/** + * Created by terrakok 21.11.16 + */ +public class StartActivityPresenter extends MvpPresenter { + private Router router; + + public StartActivityPresenter() { + router = SampleApplication.INSTANCE.getRouter(); + } + + public void onNextPressed() { + router.replaceScreen(Screens.MAIN_ACTIVITY_SCREEN); + } + + public void onBackPressed() { + router.exit(); + } +} diff --git a/sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityView.java b/sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityView.java new file mode 100644 index 0000000..b3aa0b7 --- /dev/null +++ b/sample/src/main/java/ru/terrakok/cicerone/sample/mvp/start/StartActivityView.java @@ -0,0 +1,9 @@ +package ru.terrakok.cicerone.sample.mvp.start; + +import com.arellomobile.mvp.MvpView; + +/** + * Created by terrakok 21.11.16 + */ +public interface StartActivityView extends MvpView { +} diff --git a/sample/src/main/java/ru/terrakok/cicerone/sample/ui/start/StartActivity.java b/sample/src/main/java/ru/terrakok/cicerone/sample/ui/start/StartActivity.java new file mode 100644 index 0000000..d8181e0 --- /dev/null +++ b/sample/src/main/java/ru/terrakok/cicerone/sample/ui/start/StartActivity.java @@ -0,0 +1,113 @@ +package ru.terrakok.cicerone.sample.ui.start; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.arellomobile.mvp.MvpAppCompatActivity; +import com.arellomobile.mvp.presenter.InjectPresenter; + +import ru.terrakok.cicerone.Navigator; +import ru.terrakok.cicerone.commands.Back; +import ru.terrakok.cicerone.commands.Command; +import ru.terrakok.cicerone.commands.Forward; +import ru.terrakok.cicerone.commands.Replace; +import ru.terrakok.cicerone.commands.SystemMessage; +import ru.terrakok.cicerone.sample.R; +import ru.terrakok.cicerone.sample.SampleApplication; +import ru.terrakok.cicerone.sample.Screens; +import ru.terrakok.cicerone.sample.mvp.start.StartActivityPresenter; +import ru.terrakok.cicerone.sample.mvp.start.StartActivityView; +import ru.terrakok.cicerone.sample.ui.main.MainActivity; + +/** + * Created by terrakok 21.11.16 + */ +public class StartActivity extends MvpAppCompatActivity implements StartActivityView { + @InjectPresenter + StartActivityPresenter presenter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_start); + initViews(); + } + + private void initViews() { + findViewById(R.id.lets_go_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + presenter.onNextPressed(); + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + SampleApplication.INSTANCE.getNavigatorHolder().setNavigator(navigator); + } + + @Override + protected void onPause() { + SampleApplication.INSTANCE.getNavigatorHolder().removeNavigator(); + super.onPause(); + } + + @Override + public void onBackPressed() { + presenter.onBackPressed(); + } + + private Navigator navigator = new Navigator() { + @Override + public void applyCommand(Command command) { + if (command instanceof Forward) { + forward((Forward) command); + } else if (command instanceof Replace) { + replace((Replace) command); + } else if (command instanceof Back) { + back(); + } else if (command instanceof SystemMessage) { + Toast.makeText(StartActivity.this, ((SystemMessage) command).getMessage(), Toast.LENGTH_SHORT).show(); + } else { + Log.e("Cicerone", "Illegal command for this screen: " + command.getClass().getSimpleName()); + } + } + + private void forward(Forward command) { + switch (command.getScreenKey()) { + case Screens.START_ACTIVITY_SCREEN: + startActivity(new Intent(StartActivity.this, StartActivity.class)); + break; + case Screens.MAIN_ACTIVITY_SCREEN: + startActivity(new Intent(StartActivity.this, MainActivity.class)); + break; + default: + Log.e("Cicerone", "Unknown screen: " + command.getScreenKey()); + break; + } + } + + private void replace(Replace command) { + switch (command.getScreenKey()) { + case Screens.START_ACTIVITY_SCREEN: + case Screens.MAIN_ACTIVITY_SCREEN: + forward(new Forward(command.getScreenKey(), command.getTransitionData())); + finish(); + break; + default: + Log.e("Cicerone", "Unknown screen: " + command.getScreenKey()); + break; + } + } + + private void back() { + finish(); + } + }; +} diff --git a/sample/src/main/res/layout/activity_start.xml b/sample/src/main/res/layout/activity_start.xml new file mode 100644 index 0000000..19624e0 --- /dev/null +++ b/sample/src/main/res/layout/activity_start.xml @@ -0,0 +1,32 @@ + + + + + + + + + +