/* * Copyright (C) 2014 Maigret Aurelien / Colin Julien * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.dewep.intranetepitech.ui.landing; import java.util.List; import org.apache.http.HttpStatus; import org.json.JSONObject; import fr.qinder.Q; import fr.qinder.api.APIResponse; import fr.qinder.tools.JSON; import net.dewep.intranetepitech.EpitechAccount; import net.dewep.intranetepitech.R; import net.dewep.intranetepitech.animation.DepthPageTransformer; import net.dewep.intranetepitech.api.request.LoginAPI; import net.dewep.intranetepitech.ui.UiActivity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; /** * TODO: Comments this class * * @author Maigret Aurelien * @author Colin Julien */ public class LandingActivity extends FragmentActivity implements OnClickListener, OnPageChangeListener { private static final int NB_PAGES_IN_LANDING = 3; // ViewPager variables private ViewPager mPager; // View of this activity private LinearLayout mLandingLogo; private ProgressBar mLandingConnectionProgressbar; private ImageView mLandingConnectionError; // Methods variables private String mError = null; private String mState = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ui_landing_view_pager); // ViewPager variables PagerAdapter pagerAdapter; // View of this activity LinearLayout landingConnection; LinearLayout landingAbout; // Initial ViewPager mPager = (ViewPager) findViewById(R.id.landing_fragment); pagerAdapter = new LandingSlidePagerAdapter(getSupportFragmentManager()); mPager.setAdapter(pagerAdapter); mPager.setOnPageChangeListener(this); // Set Animation mPager.setPageTransformer(true, new DepthPageTransformer()); // Get views mLandingLogo = (LinearLayout) findViewById(R.id.landing_logo); landingConnection = (LinearLayout) findViewById(R.id.landing_connection); mLandingConnectionProgressbar = (ProgressBar) findViewById(R.id.landing_connection_progressbar); mLandingConnectionError = (ImageView) findViewById(R.id.landing_connection_error); landingAbout = (LinearLayout) findViewById(R.id.landing_about); // SetOnClickListener of the links in the menu mLandingLogo.setOnClickListener(this); landingConnection.setOnClickListener(this); landingAbout.setOnClickListener(this); // Initial Activity mLandingLogo.setVisibility(View.GONE); mLandingConnectionError.setVisibility(View.GONE); mLandingConnectionProgressbar.setVisibility(View.GONE); this.testConnection(false); } @Override public void onClick(View v) { // Switch page in function of the click in the menu if (v.getId() == R.id.landing_logo) { mPager.setCurrentItem(0, true); } else if (v.getId() == R.id.landing_connection) { mPager.setCurrentItem(1, true); } else if (v.getId() == R.id.landing_about) { mPager.setCurrentItem(2, true); } } private void setConnectionInProgress() { this.setMessageState(Q.getString(R.string.landing_connection_in_progress)); mLandingConnectionError.setVisibility(View.GONE); mLandingConnectionProgressbar.setVisibility(View.VISIBLE); mPager.setCurrentItem(0, true); } private void setConnectionError() { setConnectionError(true); } private void setConnectionError(boolean isStrict) { if (isStrict) { this.setMessageState(Q.getString(R.string.landing_connection_impossible)); mLandingConnectionError.setVisibility(View.VISIBLE); mLandingConnectionProgressbar.setVisibility(View.GONE); mPager.setCurrentItem(1, true); } else { this.setMessageConnectError(null); this.setMessageState(Q.getString(R.string.landing_identity_required)); mLandingConnectionError.setVisibility(View.GONE); mLandingConnectionProgressbar.setVisibility(View.GONE); mPager.setCurrentItem(0, true); } } private void updateFragmentData() { List<Fragment> allFragments = getSupportFragmentManager().getFragments(); if (allFragments != null) { for (Fragment fragment : allFragments) { if (fragment instanceof LandingFragment) { LandingFragment listener = (LandingFragment) fragment; listener.updateFragmentData(); } } } } private void setMessageConnectError(String value) { mError = value; this.updateFragmentData(); } public String getMessageConnectError() { return mError != null ? mError : ""; } private void setMessageState(String value) { mState = value; this.updateFragmentData(); } public String getMessageState() { return mState != null ? mState : ""; } public void testConnection() { testConnection(true); } private void onSuccessLogin(JSONObject jsonObject) { EpitechAccount.setTitle(JSON.parse(jsonObject, "infos>title", EpitechAccount.getLogin())); EpitechAccount.setLastname(JSON.parse(jsonObject, "infos>lastname", "")); EpitechAccount.setFirstname(JSON.parse(jsonObject, "infos>firstname", "")); EpitechAccount.setLocation(JSON.parse(jsonObject, "infos>location", "")); EpitechAccount.setPromo(JSON.parse(jsonObject, "infos>firstname", 0)); Intent intent = new Intent(LandingActivity.this, UiActivity.class); startActivity(intent); finish(); } private void onErrorLogin(APIResponse response) { if (response.getCode() == HttpStatus.SC_FORBIDDEN) { setMessageConnectError(Q.getString(R.string.landing_bad_identity)); setConnectionError(); } else { setMessageConnectError(Q.getString(R.string.landing_connection_impossible)); setConnectionError(); } } public void testConnection(boolean isStrict) { String login = EpitechAccount.getLogin(); String password = EpitechAccount.getPassword(); if (login.equals("") || login.length() == 0) { this.setMessageConnectError(Q.getString(R.string.landing_provide_login)); this.setConnectionError(isStrict); } else if (password.equals("") || password.length() == 0) { this.setMessageConnectError(Q.getString(R.string.landing_provide_password)); this.setConnectionError(isStrict); } else { this.setMessageConnectError(null); this.setConnectionInProgress(); new LoginAPI(login, password) { @Override public void onSuccess() { LandingActivity.this.onSuccessLogin(getJSONObject()); } @Override public void onError() { LandingActivity.this.onErrorLogin(response); } }; } } @Override public void onBackPressed() { if (mPager.getCurrentItem() == 0) { // If in the page 0, go back by the system super.onBackPressed(); } else { // Else return in the previous page in the ViewPager mPager.setCurrentItem(mPager.getCurrentItem() - 1, true); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position == 0) { mLandingLogo.setVisibility(View.GONE); } else { mLandingLogo.setVisibility(View.VISIBLE); } if (this.getCurrentFocus() != null) { InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0); } this.getWindow().getDecorView().clearFocus(); } @Override public void onPageScrollStateChanged(int state) { } // Adapter for the ViewPager private class LandingSlidePagerAdapter extends FragmentStatePagerAdapter { public LandingSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // Return the good fragment in function of the numero of page if (position == 1) { return new LandingLoginFragment(); } else if (position == 2) { return new LandingAboutFragment(); } return new LandingHomeFragment(); } @Override public int getCount() { // Return the number of pages return NB_PAGES_IN_LANDING; } } }