This repository was archived by the owner on Aug 4, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 413
Expand file tree
/
Copy pathScreenController.java
More file actions
95 lines (82 loc) · 2.72 KB
/
ScreenController.java
File metadata and controls
95 lines (82 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.snatik.matches.engine;
import java.util.ArrayList;
import java.util.List;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.snatik.matches.R;
import com.snatik.matches.common.Shared;
import com.snatik.matches.events.ui.ResetBackgroundEvent;
import com.snatik.matches.fragments.DifficultySelectFragment;
import com.snatik.matches.fragments.GameFragment;
import com.snatik.matches.fragments.MenuFragment;
import com.snatik.matches.fragments.ThemeSelectFragment;
public class ScreenController {
private static ScreenController mInstance = null;
private static List<Screen> openedScreens = new ArrayList<Screen>();
private FragmentManager mFragmentManager;
private ScreenController() {
}
public static ScreenController getInstance() {
if (mInstance == null) {
mInstance = new ScreenController();
}
return mInstance;
}
public static enum Screen {
MENU,
GAME,
DIFFICULTY,
THEME_SELECT
}
public static Screen getLastScreen() {
return openedScreens.get(openedScreens.size() - 1);
}
public void openScreen(Screen screen) {
mFragmentManager = Shared.activity.getSupportFragmentManager();
if (screen == Screen.GAME && openedScreens.get(openedScreens.size() - 1) == Screen.GAME) {
openedScreens.remove(openedScreens.size() - 1);
} else if (screen == Screen.DIFFICULTY && openedScreens.get(openedScreens.size() - 1) == Screen.GAME) {
openedScreens.remove(openedScreens.size() - 1);
openedScreens.remove(openedScreens.size() - 1);
}
Fragment fragment = getFragment(screen);
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
openedScreens.add(screen);
}
public boolean onBack() {
if (openedScreens.size() > 0) {
Screen screenToRemove = openedScreens.get(openedScreens.size() - 1);
openedScreens.remove(openedScreens.size() - 1);
if (openedScreens.size() == 0) {
return true;
}
Screen screen = openedScreens.get(openedScreens.size() - 1);
openedScreens.remove(openedScreens.size() - 1);
openScreen(screen);
if ((screen == Screen.THEME_SELECT || screen == Screen.MENU) &&
(screenToRemove == Screen.DIFFICULTY || screenToRemove == Screen.GAME)) {
Shared.eventBus.notify(new ResetBackgroundEvent());
}
return false;
}
return true;
}
private Fragment getFragment(Screen screen) {
switch (screen) {
case MENU:
return new MenuFragment();
case DIFFICULTY:
return new DifficultySelectFragment();
case GAME:
return new GameFragment();
case THEME_SELECT:
return new ThemeSelectFragment();
default:
break;
}
return null;
}
}