Changeset View
Changeset View
Standalone View
Standalone View
src/it/reyboz/bustorino/ActivityPrincipal.java
Show All 28 Lines | |||||
import com.google.android.material.navigation.NavigationView; | import com.google.android.material.navigation.NavigationView; | ||||
import com.google.android.material.snackbar.Snackbar; | import com.google.android.material.snackbar.Snackbar; | ||||
import java.util.concurrent.TimeUnit; | import java.util.concurrent.TimeUnit; | ||||
import it.reyboz.bustorino.data.DBUpdateWorker; | import it.reyboz.bustorino.data.DBUpdateWorker; | ||||
import it.reyboz.bustorino.data.DatabaseUpdate; | import it.reyboz.bustorino.data.DatabaseUpdate; | ||||
import it.reyboz.bustorino.fragments.FavoritesFragment; | |||||
import it.reyboz.bustorino.fragments.FragmentKind; | import it.reyboz.bustorino.fragments.FragmentKind; | ||||
import it.reyboz.bustorino.fragments.FragmentListenerMain; | import it.reyboz.bustorino.fragments.FragmentListenerMain; | ||||
import it.reyboz.bustorino.fragments.MainScreenFragment; | import it.reyboz.bustorino.fragments.MainScreenFragment; | ||||
import it.reyboz.bustorino.middleware.GeneralActivity; | import it.reyboz.bustorino.middleware.GeneralActivity; | ||||
import static it.reyboz.bustorino.backend.utils.getBusStopIDFromUri; | import static it.reyboz.bustorino.backend.utils.getBusStopIDFromUri; | ||||
import static it.reyboz.bustorino.backend.utils.openIceweasel; | import static it.reyboz.bustorino.backend.utils.openIceweasel; | ||||
public class ActivityPrincipal extends GeneralActivity implements FragmentListenerMain { | public class ActivityPrincipal extends GeneralActivity implements FragmentListenerMain { | ||||
private DrawerLayout mDrawer; | private DrawerLayout mDrawer; | ||||
private NavigationView mNavView; | private NavigationView mNavView; | ||||
private ActionBarDrawerToggle drawerToggle; | private ActionBarDrawerToggle drawerToggle; | ||||
private final static String DEBUG_TAG="BusTO Act Principal"; | private final static String DEBUG_TAG="BusTO Act Principal"; | ||||
private final static String TAG_FAVORITES="favorites_frag"; | |||||
private Snackbar snackbar; | private Snackbar snackbar; | ||||
private boolean showingMainFragmentFromOther = false; | |||||
@Override | @Override | ||||
protected void onCreate(@Nullable Bundle savedInstanceState) { | protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setContentView(R.layout.activity_principal); | setContentView(R.layout.activity_principal); | ||||
final SharedPreferences theShPr = getMainSharedPreferences(); | final SharedPreferences theShPr = getMainSharedPreferences(); | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | public class ActivityPrincipal extends GeneralActivity implements FragmentListenerMain { | ||||
private void setupDrawerContent(NavigationView navigationView) { | private void setupDrawerContent(NavigationView navigationView) { | ||||
navigationView.setNavigationItemSelectedListener( | navigationView.setNavigationItemSelectedListener( | ||||
menuItem -> { | menuItem -> { | ||||
if (menuItem.getItemId() == R.id.drawer_action_settings) { | if (menuItem.getItemId() == R.id.drawer_action_settings) { | ||||
Log.d("MAINBusTO", "Pressed button preferences"); | Log.d("MAINBusTO", "Pressed button preferences"); | ||||
closeDrawerIfOpen(); | closeDrawerIfOpen(); | ||||
startActivity(new Intent(ActivityPrincipal.this, ActivitySettings.class)); | startActivity(new Intent(ActivityPrincipal.this, ActivitySettings.class)); | ||||
return true; | return true; | ||||
} else if(menuItem.getItemId() == R.id.nav_favorites_item){ | |||||
closeDrawerIfOpen(); | |||||
//get Fragment | |||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); | |||||
FavoritesFragment fragment = FavoritesFragment.newInstance(); | |||||
ft.replace(R.id.mainActContentFrame,fragment, TAG_FAVORITES); | |||||
ft.addToBackStack(null); | |||||
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); | |||||
ft.commit(); | |||||
return true; | |||||
} else if(menuItem.getItemId() == R.id.nav_arrivals){ | |||||
closeDrawerIfOpen(); | |||||
showMainFragment(); | |||||
return true; | |||||
} | } | ||||
//selectDrawerItem(menuItem); | //selectDrawerItem(menuItem); | ||||
Log.d(DEBUG_TAG, "pressed item "+menuItem.toString()); | Log.d(DEBUG_TAG, "pressed item "+menuItem.toString()); | ||||
return true; | return true; | ||||
}); | }); | ||||
Show All 32 Lines | public class ActivityPrincipal extends GeneralActivity implements FragmentListenerMain { | ||||
@Override | @Override | ||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) { | public boolean onOptionsItemSelected(@NonNull MenuItem item) { | ||||
int[] cases = {R.id.nav_arrivals, R.id.nav_favorites_item}; | int[] cases = {R.id.nav_arrivals, R.id.nav_favorites_item}; | ||||
Log.d(DEBUG_TAG, "Item pressed"); | Log.d(DEBUG_TAG, "Item pressed"); | ||||
switch (item.getItemId()){ | if (item.getItemId() == android.R.id.home) { | ||||
case android.R.id.home: | |||||
mDrawer.openDrawer(GravityCompat.START); | mDrawer.openDrawer(GravityCompat.START); | ||||
return true; | return true; | ||||
default: | |||||
} | } | ||||
if (drawerToggle.onOptionsItemSelected(item)) { | if (drawerToggle.onOptionsItemSelected(item)) { | ||||
return true; | return true; | ||||
} | } | ||||
return super.onOptionsItemSelected(item); | return super.onOptionsItemSelected(item); | ||||
} | } | ||||
@Override | @Override | ||||
public void onBackPressed() { | public void onBackPressed() { | ||||
boolean foundFragment = false; | boolean foundFragment = false; | ||||
Fragment shownFrag = getSupportFragmentManager().findFragmentById(R.id.mainActContentFrame); | Fragment shownFrag = getSupportFragmentManager().findFragmentById(R.id.mainActContentFrame); | ||||
if (mDrawer.isDrawerOpen(GravityCompat.START)) | if (mDrawer.isDrawerOpen(GravityCompat.START)) | ||||
mDrawer.closeDrawer(GravityCompat.START); | mDrawer.closeDrawer(GravityCompat.START); | ||||
else if(shownFrag != null && shownFrag.isVisible() && shownFrag.getChildFragmentManager().getBackStackEntryCount() > 0){ | else if(shownFrag != null && shownFrag.isVisible() && shownFrag.getChildFragmentManager().getBackStackEntryCount() > 0){ | ||||
shownFrag.getChildFragmentManager().popBackStack(); | //if we have been asked to show a stop from another fragment, we should go back even in the main | ||||
shownFrag.getChildFragmentManager().popBackStackImmediate(); | |||||
if(showingMainFragmentFromOther && getSupportFragmentManager().getBackStackEntryCount() > 0){ | |||||
getSupportFragmentManager().popBackStack(); | |||||
} | |||||
} | } | ||||
else if (getSupportFragmentManager().getBackStackEntryCount() > 0) { | else if (getSupportFragmentManager().getBackStackEntryCount() > 0) { | ||||
getSupportFragmentManager().popBackStack(); | getSupportFragmentManager().popBackStack(); | ||||
} | } | ||||
else | else | ||||
super.onBackPressed(); | super.onBackPressed(); | ||||
} | } | ||||
private void createDefaultSnackbar() { | private void createDefaultSnackbar() { | ||||
if (snackbar == null) { | if (snackbar == null) { | ||||
snackbar = Snackbar.make(findViewById(R.id.searchButton), R.string.database_update_message, Snackbar.LENGTH_INDEFINITE); | snackbar = Snackbar.make(findViewById(R.id.searchButton), R.string.database_update_message, Snackbar.LENGTH_INDEFINITE); | ||||
} | } | ||||
snackbar.show(); | snackbar.show(); | ||||
} | } | ||||
private MainScreenFragment showMainFragment(){ | private MainScreenFragment createAndShowMainFragment(){ | ||||
FragmentManager fraMan = getSupportFragmentManager(); | FragmentManager fraMan = getSupportFragmentManager(); | ||||
MainScreenFragment fragment = MainScreenFragment.newInstance(); | MainScreenFragment fragment = MainScreenFragment.newInstance(); | ||||
FragmentTransaction transaction = fraMan.beginTransaction(); | FragmentTransaction transaction = fraMan.beginTransaction(); | ||||
transaction.replace(R.id.mainActContentFrame, fragment, MainScreenFragment.FRAGMENT_TAG); | transaction.replace(R.id.mainActContentFrame, fragment, MainScreenFragment.FRAGMENT_TAG); | ||||
transaction.commit(); | transaction.commit(); | ||||
return fragment; | return fragment; | ||||
} | } | ||||
/** | |||||
* Show the fragment by adding it to the backstack | |||||
* @param fraMan the fragmentManager | |||||
* @param fragment the fragment | |||||
*/ | |||||
private static void showMainFragment(FragmentManager fraMan, MainScreenFragment fragment){ | |||||
fraMan.beginTransaction().replace(R.id.mainActContentFrame, fragment) | |||||
.setReorderingAllowed(true) | |||||
.addToBackStack(null) | |||||
/*.setCustomAnimations( | |||||
R.anim.slide_in, // enter | |||||
R.anim.fade_out, // exit | |||||
R.anim.fade_in, // popEnter | |||||
R.anim.slide_out // popExit | |||||
)*/ | |||||
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) | |||||
.commit(); | |||||
} | |||||
private MainScreenFragment showMainFragment(){ | |||||
FragmentManager fraMan = getSupportFragmentManager(); | |||||
Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG); | |||||
MainScreenFragment mainScreenFragment = null; | |||||
if (fragment==null | !(fragment instanceof MainScreenFragment)){ | |||||
mainScreenFragment = createAndShowMainFragment(); | |||||
} | |||||
else if(!fragment.isVisible()){ | |||||
mainScreenFragment = (MainScreenFragment) fragment; | |||||
showMainFragment(fraMan, mainScreenFragment); | |||||
Log.d(DEBUG_TAG, "Found the main fragment"); | |||||
} else{ | |||||
mainScreenFragment = (MainScreenFragment) fragment; | |||||
} | |||||
return mainScreenFragment; | |||||
} | |||||
@Nullable | @Nullable | ||||
private MainScreenFragment getMainFragmentIfVisible(){ | private MainScreenFragment getMainFragmentIfVisible(){ | ||||
FragmentManager fraMan = getSupportFragmentManager(); | FragmentManager fraMan = getSupportFragmentManager(); | ||||
Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG); | Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG); | ||||
if (fragment!= null && fragment.isVisible()) return (MainScreenFragment) fragment; | if (fragment!= null && fragment.isVisible()) return (MainScreenFragment) fragment; | ||||
else return null; | else return null; | ||||
} | } | ||||
@Override | @Override | ||||
public void showFloatingActionButton(boolean yes) { | public void showFloatingActionButton(boolean yes) { | ||||
//TODO | //TODO | ||||
} | } | ||||
@Override | @Override | ||||
public void readyGUIfor(FragmentKind fragmentType) { | public void readyGUIfor(FragmentKind fragmentType) { | ||||
MainScreenFragment probableFragment = getMainFragmentIfVisible(); | MainScreenFragment probableFragment = getMainFragmentIfVisible(); | ||||
if (probableFragment!=null){ | if (probableFragment!=null){ | ||||
probableFragment.readyGUIfor(fragmentType); | probableFragment.readyGUIfor(fragmentType); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void requestArrivalsForStopID(String ID) { | public void requestArrivalsForStopID(String ID) { | ||||
//register if the request came from the main fragment or not | |||||
MainScreenFragment probableFragment = getMainFragmentIfVisible(); | |||||
showingMainFragmentFromOther = (probableFragment==null); | |||||
if (showingMainFragmentFromOther){ | |||||
FragmentManager fraMan = getSupportFragmentManager(); | FragmentManager fraMan = getSupportFragmentManager(); | ||||
Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG); | Fragment fragment = fraMan.findFragmentByTag(MainScreenFragment.FRAGMENT_TAG); | ||||
MainScreenFragment mainScreenFragment = null; | if(fragment!=null){ | ||||
if (fragment==null | !(fragment instanceof MainScreenFragment)){ | //the fragment is there but not shown | ||||
mainScreenFragment = showMainFragment(); | probableFragment = (MainScreenFragment) fragment; | ||||
} | // set the flag | ||||
else if(!fragment.isVisible()){ | probableFragment.setSuppressArrivalsReload(true); | ||||
showMainFragment(fraMan, probableFragment); | |||||
fraMan.beginTransaction().replace(R.id.mainActContentFrame, fragment) | |||||
.addToBackStack(null) | |||||
.commit(); | |||||
mainScreenFragment = (MainScreenFragment) fragment; | |||||
Log.d(DEBUG_TAG, "Found the main fragment"); | |||||
} else{ | } else { | ||||
mainScreenFragment = (MainScreenFragment) fragment; | // we have no fragment | ||||
probableFragment = createAndShowMainFragment(); | |||||
} | } | ||||
} | |||||
mainScreenFragment.requestArrivalsForStopID(ID); | probableFragment.requestArrivalsForStopID(ID); | ||||
mNavView.setCheckedItem(R.id.nav_arrivals); | |||||
} | } | ||||
@Override | @Override | ||||
public void toggleSpinner(boolean state) { | public void toggleSpinner(boolean state) { | ||||
MainScreenFragment probableFragment = getMainFragmentIfVisible(); | MainScreenFragment probableFragment = getMainFragmentIfVisible(); | ||||
if (probableFragment!=null){ | if (probableFragment!=null){ | ||||
probableFragment.toggleSpinner(state); | probableFragment.toggleSpinner(state); | ||||
} | } | ||||
Show All 33 Lines |
Public contents are in Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA) or GNU Free Documentation License (at your option) unless otherwise noted. · Contact / Register