210 lines · 7.3 KB · Java
RawDownload
package io.highfidelity.hifiinterface;  import android.app.Fragment;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import io.highfidelity.hifiinterface.fragment.LoginFragment;import io.highfidelity.hifiinterface.fragment.OnBackPressedListener;import io.highfidelity.hifiinterface.fragment.SignupFragment;import io.highfidelity.hifiinterface.fragment.StartMenuFragment; public class LoginMenuActivity extends AppCompatActivity                                implements StartMenuFragment.StartMenuInteractionListener,                                                LoginFragment.OnLoginInteractionListener,                                                SignupFragment.OnSignupInteractionListener {     /**     * Set EXTRA_FINISH_ON_BACK to finish the app when back button is pressed     */    public static final String EXTRA_FINISH_ON_BACK = "finishOnBack";     /**     * Set EXTRA_BACK_TO_SCENE to back to the scene     */    public static final String EXTRA_BACK_TO_SCENE = "backToScene";     /**     * Set EXTRA_BACK_ON_SKIP to finish this activity when skip button is pressed     */    public static final String EXTRA_BACK_ON_SKIP = "backOnSkip";     public static final String EXTRA_DOMAIN_URL = "url";     private boolean finishOnBack;    private boolean backToScene;    private boolean backOnSkip;    private String domainUrlToBack;      @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_encourage_login);         finishOnBack = getIntent().getBooleanExtra(EXTRA_FINISH_ON_BACK, false);        backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false);        domainUrlToBack =  getIntent().getStringExtra(EXTRA_DOMAIN_URL);        backOnSkip = getIntent().getBooleanExtra(EXTRA_BACK_ON_SKIP, false);         if (savedInstanceState != null) {            finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false);            backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false);            backOnSkip = savedInstanceState.getBoolean(EXTRA_BACK_ON_SKIP, false);            domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL);        }         loadMenuFragment();    }     @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putBoolean(EXTRA_FINISH_ON_BACK, finishOnBack);        outState.putBoolean(EXTRA_BACK_TO_SCENE, backToScene);        outState.putString(EXTRA_DOMAIN_URL, domainUrlToBack);    }     @Override    protected void onRestoreInstanceState(Bundle savedInstanceState) {        super.onRestoreInstanceState(savedInstanceState);        finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false);        backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false);        backOnSkip = savedInstanceState.getBoolean(EXTRA_BACK_ON_SKIP, false);        domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL);    }     private void loadMenuFragment() {        FragmentManager fragmentManager = getFragmentManager();        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();        Fragment fragment = StartMenuFragment.newInstance();        fragmentTransaction.replace(R.id.content_frame, fragment);        fragmentTransaction.addToBackStack(fragment.toString());        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);        fragmentTransaction.commit();        hideStatusBar();    }     @Override    protected void onResume() {        super.onResume();        hideStatusBar();    }     private void hideStatusBar() {        View decorView = getWindow().getDecorView();        // Hide the status bar.        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;        decorView.setSystemUiVisibility(uiOptions);    }     @Override    public void onSignupButtonClicked() {        loadSignupFragment();    }     @Override    public void onLoginButtonClicked() {        loadLoginFragment(false);    }     @Override    public void onSkipLoginClicked() {        if (backOnSkip) {            onBackPressed();        } else {            loadMainActivity();        }    }     @Override    public void onSteamLoginButtonClicked() {        loadLoginFragment(true);    }     private void loadSignupFragment() {        FragmentManager fragmentManager = getFragmentManager();        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();        Fragment fragment = SignupFragment.newInstance();        String tag = getString(R.string.tagFragmentSignup);        fragmentTransaction.replace(R.id.content_frame, fragment, tag);        fragmentTransaction.addToBackStack(tag);        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);        fragmentTransaction.commit();        hideStatusBar();    }     private void loadLoginFragment(boolean useOauth) {        FragmentManager fragmentManager = getFragmentManager();        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();        Fragment fragment = LoginFragment.newInstance(useOauth);        String tag = getString(R.string.tagFragmentLogin);        fragmentTransaction.replace(R.id.content_frame, fragment, tag);        fragmentTransaction.addToBackStack(tag);        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);        fragmentTransaction.commit();        hideStatusBar();    }     @Override    public void onLoginCompleted() {        loadMainActivity();    }     @Override    public void onCancelLogin() {        getFragmentManager().popBackStack();    }     @Override    public void onCancelSignup() {        getFragmentManager().popBackStack();    }     private void loadMainActivity() {        finish();        if (backToScene) {            backToScene = false;            goToDomain(domainUrlToBack != null? domainUrlToBack : "");        } else {            startActivity(new Intent(this, MainActivity.class));        }    }     private void goToDomain(String domainUrl) {        Intent intent = new Intent(this, InterfaceActivity.class);        intent.putExtra(InterfaceActivity.DOMAIN_URL, domainUrl);        finish();        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);        startActivity(intent);    }      @Override    public void onSignupCompleted() {        loadMainActivity();    }     @Override    public void onBackPressed() {        FragmentManager fm = getFragmentManager();        int index = fm.getBackStackEntryCount() - 1;        if (index > 0) {            FragmentManager.BackStackEntry backEntry = fm.getBackStackEntryAt(index);            String tag = backEntry.getName();            Fragment topFragment = getFragmentManager().findFragmentByTag(tag);            if (!(topFragment instanceof OnBackPressedListener) ||                    !((OnBackPressedListener) topFragment).doBack()) {                super.onBackPressed();            }        } else if (finishOnBack){            finishAffinity();        } else {            finish();        }    }}