package org.droidplanner.android.activities;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.view.ViewGroup;
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
import org.droidplanner.android.R;
import org.droidplanner.android.dialogs.DialogMaterialFragment;
import org.droidplanner.android.fragments.FlightDataFragment;
import org.droidplanner.android.fragments.WidgetsListFragment;
import org.droidplanner.android.fragments.actionbar.ActionBarTelemFragment;
import org.droidplanner.android.utils.Utils;
public class FlightActivity extends DrawerNavigationUI implements SlidingUpPanelLayout.PanelSlideListener {
private static final String EXTRA_IS_ACTION_DRAWER_OPENED = "extra_is_action_drawer_opened";
private static final boolean DEFAULT_IS_ACTION_DRAWER_OPENED = true;
private FlightDataFragment flightData;
@Override
public void onDrawerClosed() {
super.onDrawerClosed();
if (flightData != null)
flightData.onDrawerClosed();
}
@Override
public void onDrawerOpened() {
super.onDrawerOpened();
if (flightData != null)
flightData.onDrawerOpened();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flight);
final FragmentManager fm = getSupportFragmentManager();
//Add the flight data fragment
flightData = (FlightDataFragment) fm.findFragmentById(R.id.flight_data_container);
if(flightData == null){
Bundle args = new Bundle();
args.putBoolean(FlightDataFragment.EXTRA_SHOW_ACTION_DRAWER_TOGGLE, true);
flightData = new FlightDataFragment();
flightData.setArguments(args);
fm.beginTransaction().add(R.id.flight_data_container, flightData).commit();
}
// Add the telemetry fragment
final int actionDrawerId = getActionDrawerId();
WidgetsListFragment widgetsListFragment = (WidgetsListFragment) fm.findFragmentById(actionDrawerId);
if (widgetsListFragment == null) {
widgetsListFragment = new WidgetsListFragment();
fm.beginTransaction()
.add(actionDrawerId, widgetsListFragment)
.commit();
}
boolean isActionDrawerOpened = DEFAULT_IS_ACTION_DRAWER_OPENED;
if (savedInstanceState != null) {
isActionDrawerOpened = savedInstanceState.getBoolean(EXTRA_IS_ACTION_DRAWER_OPENED, isActionDrawerOpened);
}
if (isActionDrawerOpened)
openActionDrawer();
}
@Override
protected void onToolbarLayoutChange(int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom){
if(flightData != null)
flightData.updateActionbarShadow(bottom);
}
@Override
protected void addToolbarFragment() {
final int toolbarId = getToolbarId();
final FragmentManager fm = getSupportFragmentManager();
Fragment actionBarTelem = fm.findFragmentById(toolbarId);
if (actionBarTelem == null) {
actionBarTelem = new ActionBarTelemFragment();
fm.beginTransaction().add(toolbarId, actionBarTelem).commit();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(EXTRA_IS_ACTION_DRAWER_OPENED, isActionDrawerOpened());
}
@Override
public void onStart(){
super.onStart();
final Context context = getApplicationContext();
//Show the changelog if this is the first time the app is launched since update/install
if(Utils.getAppVersionCode(context) > mAppPrefs.getSavedAppVersionCode()) {
DialogMaterialFragment changelog = new DialogMaterialFragment();
changelog.show(getSupportFragmentManager(), "Changelog Dialog");
mAppPrefs.updateSavedAppVersionCode(context);
}
}
@Override
protected int getToolbarId() {
return R.id.actionbar_toolbar;
}
@Override
protected int getNavigationDrawerMenuItemId() {
return R.id.navigation_flight_data;
}
@Override
protected boolean enableMissionMenus() {
return true;
}
@Override
public void onPanelSlide(View view, float v) {
final int bottomMargin = (int) getResources().getDimension(R.dimen.action_drawer_margin_bottom);
//Update the bottom margin for the action drawer
final View flightActionBar = ((ViewGroup)view).getChildAt(0);
final int[] viewLocs = new int[2];
flightActionBar.getLocationInWindow(viewLocs);
updateActionDrawerBottomMargin(viewLocs[0] + flightActionBar.getWidth(), Math.max((int) (view.getHeight() * v), bottomMargin));
}
@Override
public void onPanelStateChanged(View panel, SlidingUpPanelLayout.PanelState previousState, SlidingUpPanelLayout.PanelState newState) {
switch(newState){
case COLLAPSED:
case HIDDEN:
resetActionDrawerBottomMargin();
break;
case EXPANDED:
//Update the bottom margin for the action drawer
ViewGroup slidingPanel = (ViewGroup) ((ViewGroup)panel).getChildAt(1);
final View flightActionBar = slidingPanel.getChildAt(0);
final int[] viewLocs = new int[2];
flightActionBar.getLocationInWindow(viewLocs);
updateActionDrawerBottomMargin(viewLocs[0] + flightActionBar.getWidth(), slidingPanel.getHeight());
break;
}
}
private void updateActionDrawerBottomMargin(int rightEdge, int bottomMargin){
final ViewGroup actionDrawerParent = (ViewGroup) getActionDrawer();
final View actionDrawer = ((ViewGroup)actionDrawerParent.getChildAt(1)).getChildAt(0);
final int[] actionDrawerLocs = new int[2];
actionDrawer.getLocationInWindow(actionDrawerLocs);
if(actionDrawerLocs[0] <= rightEdge) {
updateActionDrawerBottomMargin(bottomMargin);
}
}
private int getActionDrawerBottomMargin(){
final ViewGroup actionDrawerParent = (ViewGroup) getActionDrawer();
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) actionDrawerParent.getLayoutParams();
return lp.bottomMargin;
}
private void updateActionDrawerBottomMargin(int newBottomMargin){
final ViewGroup actionDrawerParent = (ViewGroup) getActionDrawer();
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) actionDrawerParent.getLayoutParams();
lp.bottomMargin = newBottomMargin;
actionDrawerParent.requestLayout();
}
private void resetActionDrawerBottomMargin(){
updateActionDrawerBottomMargin((int) getResources().getDimension(R.dimen.action_drawer_margin_bottom));
}
}