package com.integreight.onesheeld.shields.fragments; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; import com.integreight.onesheeld.R; import com.integreight.onesheeld.shields.ShieldFragmentParent; import com.integreight.onesheeld.shields.controller.FacebookShield; import com.integreight.onesheeld.shields.controller.FacebookShield.FacebookEventHandler; import com.integreight.onesheeld.utils.ConnectionDetector; import com.integreight.onesheeld.utils.customviews.OneSheeldTextView; public class FacebookFragment extends ShieldFragmentParent<FacebookFragment> implements View.OnClickListener { LinearLayout lastPostTextCont; TextView userNameTextView; Button facebookLogin; Button facebookLogout; Bundle savedInstanceState; ProgressBar progress; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment setHasOptionsMenu(true); this.savedInstanceState = savedInstanceState; return inflater.inflate(R.layout.facebook_shield_fragment_layout, container, false); } @Override public void doOnStart() { initializeFirmata(); checkLogin(); facebookLogin.setOnClickListener(this); facebookLogout.setOnClickListener(this); } @Override public void doOnResume() { facebookLogin.setOnClickListener(this); facebookLogout.setOnClickListener(this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).getCallbackManager() != null) ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).getCallbackManager().onActivityResult(requestCode, resultCode, data); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override public void doOnViewCreated(View v, @Nullable Bundle savedInstanceState) { lastPostTextCont = (LinearLayout) v.findViewById(R.id.postsCont); userNameTextView = (TextView) v .findViewById(R.id.facebook_shield_username_textview); facebookLogin = (Button) v.findViewById(R.id.login); facebookLogout = (Button) v.findViewById(R.id.logout); progress = (ProgressBar) v.findViewById(R.id.progress); } private FacebookEventHandler facebookEventHandler = new FacebookEventHandler() { @Override public void onRecievePost(final String post) { // TODO Auto-generated method stub if (canChangeUI()) { uiHandler.removeCallbacksAndMessages(null); uiHandler.post(new Runnable() { @Override public void run() { OneSheeldTextView posty = (OneSheeldTextView) activity .getLayoutInflater().inflate( R.layout.facebook_post_item, lastPostTextCont, false); posty.setText(post); lastPostTextCont.addView(posty); ((ScrollView) lastPostTextCont.getParent()) .invalidate(); Toast.makeText(activity, R.string.facebook_posted_on_your_wall_toast, Toast.LENGTH_SHORT).show(); } }); } } @Override public void onFacebookLoggedIn() { // TODO Auto-generated method stub if (canChangeUI()) { activity.runOnUiThread(new Runnable() { @Override public void run() { buttonToLoggedIn(); } }); } } @Override public void onFacebookError(final String error) { // TODO Auto-generated method stub if (canChangeUI()) { activity.runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Toast.makeText(activity, error, Toast.LENGTH_SHORT) .show(); // buttonToLoggedIn(); // getAppActivity() // .setSupportProgressBarIndeterminateVisibility( // false); } }); } } @Override public void startProgress() { activity.runOnUiThread(new Runnable() { @Override public void run() { if (progress != null && canChangeUI()) { progress.setVisibility(View.VISIBLE); } } }); } @Override public void stopProgress() { activity.runOnUiThread(new Runnable() { @Override public void run() { if (progress != null && canChangeUI()) { progress.setVisibility(View.GONE); } } }); } }; private void initializeFirmata() { if ((getApplication().getRunningShields().get(getControllerTag())) == null) getApplication().getRunningShields().put( getControllerTag(), new FacebookShield(activity, getControllerTag(), this, savedInstanceState)); ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).setShieldFragment(this); ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())) .setFacebookEventHandler(facebookEventHandler); checkLogin(); } private void checkLogin() { if ((getApplication().getRunningShields().get(getControllerTag())) != null && ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).isFacebookLoggedInAlready()) { buttonToLoggedIn(); } else { buttonToLoggedOut(); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // TODO Auto-generated method stub super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub return super.onOptionsItemSelected(item); } private void logoutFromFacebook() { ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).logoutFromFacebook(); buttonToLoggedOut(); } private void loginToFacebook() { if (ConnectionDetector.isConnectingToInternet(activity)) ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).loginToFacebook(); else Toast.makeText(getApplication().getApplicationContext(), R.string.general_toasts_please_check_your_internet_connection_and_try_again_toast, Toast.LENGTH_SHORT).show(); // getAppActivity().setSupportProgressBarIndeterminateVisibility(true); } private void buttonToLoggedOut() { if (facebookLogout != null) facebookLogout.setVisibility(View.INVISIBLE); if (facebookLogin != null) facebookLogin.setVisibility(View.VISIBLE); if (userNameTextView != null) userNameTextView.setVisibility(View.INVISIBLE); if (lastPostTextCont != null) { lastPostTextCont.removeAllViews(); lastPostTextCont.setVisibility(View.INVISIBLE); } } private void buttonToLoggedIn() { if (facebookLogin != null) facebookLogin.setVisibility(View.INVISIBLE); if (facebookLogout != null) facebookLogout.setVisibility(View.VISIBLE); if (userNameTextView != null) userNameTextView.setVisibility(View.VISIBLE); if (lastPostTextCont != null) { lastPostTextCont.removeAllViews(); lastPostTextCont.setVisibility(View.VISIBLE); } userNameTextView.setText(activity.getString(R.string.facebook_logged_in_as)+": " + ((FacebookShield) getApplication().getRunningShields().get( getControllerTag())).getUsername()); } @Override public void doOnServiceConnected() { } @Override public void onClick(View view) { switch (view.getId()) { case R.id.login: loginToFacebook(); break; case R.id.logout: logoutFromFacebook(); break; default: break; } } }