package org.witness.informacam.ui.screens;
import java.util.List;
import org.witness.informacam.InformaCam;
import org.witness.informacam.R;
import org.witness.informacam.ui.WizardActivity;
import org.witness.informacam.utils.Constants.App;
import org.witness.informacam.utils.Constants.Codes;
import org.witness.informacam.utils.Constants.InformaCamEventListener;
import org.witness.informacam.utils.Constants.WizardListener;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
public class WizardStepThree extends Fragment implements OnClickListener, InformaCamEventListener {
View rootView;
FrameLayout subFragmentRoot;
LinearLayout subFragmentProgress, keyGenProgressHolder, keyGenSuccessHolder;
ImageButton subFragmentNext;
Button saveAndContinue;
ProgressBar keyGenProgress;
Activity a;
Handler handler = new Handler();
List<Fragment> subFragments;
int idx = 0;
private final static String LOG = App.LOG;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((InformaCam)getActivity().getApplication()).setEventListener(this);
}
@Override
public View onCreateView(LayoutInflater li, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(li, container, savedInstanceState);
this.setRetainInstance(true);
rootView = li.inflate(R.layout.fragment_wizard_step_three, null);
keyGenProgress = (ProgressBar) rootView.findViewById(R.id.wizard_keygen_progress);
keyGenProgressHolder = (LinearLayout) rootView.findViewById(R.id.key_gen_progress_holder);
keyGenSuccessHolder = (LinearLayout) rootView.findViewById(R.id.key_gen_success_holder);
saveAndContinue = (Button) rootView.findViewById(R.id.wizard_save_and_continue);
saveAndContinue.setOnClickListener(this);
return rootView;
}
@Override
public void onAttach(Activity a) {
super.onAttach(a);
this.a = a;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(LOG, "fyi activity created called");
initLayout();
}
private void initLayout() {
subFragments = ((WizardActivity) a).subFragments;
if(subFragments != null) {
initSubFragmentProgress();
} else {
FrameLayout noSubFragmentsHolder = (FrameLayout) rootView.findViewById(R.id.wizard_no_sub_fragments_root);
noSubFragmentsHolder.setVisibility(View.VISIBLE);
FragmentTransaction ft = ((WizardListener) a).returnFragmentManager().beginTransaction();
ft.replace(R.id.wizard_no_sub_fragments_root, new WizardSubFragmentFinish());
ft.addToBackStack(null);
ft.commit();
}
}
@SuppressWarnings("unused")
private void initSubFragmentProgress() {
RelativeLayout subFragmentHolder = (RelativeLayout) rootView.findViewById(R.id.wizard_sub_fragments_holder);
subFragmentHolder.setVisibility(View.VISIBLE);
subFragmentProgress = (LinearLayout) rootView.findViewById(R.id.wizard_sub_fragments_progress);
for(int i=0; i<subFragmentProgress.getChildCount(); i++) {
try {
View v = subFragmentProgress.getChildAt(i);
((LinearLayout) v.getParent()).removeView(v);
} catch(NullPointerException e) {}
}
for(Fragment f : subFragments) {
ImageView p = new ImageView(a);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 0, 5, 0);
p.setLayoutParams(lp);
subFragmentProgress.addView(p);
}
subFragmentNext = (ImageButton) rootView.findViewById(R.id.wizard_sub_fragment_next);
subFragmentNext.setOnClickListener(this);
advanceWizardSubFragment(subFragments.get(0));
}
private void advanceWizardSubFragment(Fragment fragment) {
idx=0;
for(Fragment f : subFragments) {
if(fragment.getClass().getSimpleName().equals(f.getClass().getSimpleName())) {
((WizardListener) subFragments.get(0)).onSubFragmentInitialized();
break;
}
idx++;
}
Log.d(LOG, "subfragments size: " + subFragments.size());
if(idx == 0) {
subFragmentNext.setClickable(true);
} else if(idx == subFragments.size() - 1) {
subFragmentNext.setClickable(false);
}
try {
((WizardListener) subFragments.get(idx - 1)).onSubFragmentCompleted();
} catch(ArrayIndexOutOfBoundsException e) {}
FragmentTransaction ft = ((WizardListener) a).returnFragmentManager().beginTransaction();
ft.replace(R.id.wizard_sub_fragments_root, fragment);
ft.addToBackStack(null);
ft.commit();
for(int i=0; i<subFragmentProgress.getChildCount(); i++) {
int dot = R.drawable.progress_inactive;
if(i == idx) {
dot = R.drawable.progress_active;
}
((ImageView) subFragmentProgress.getChildAt(i)).setImageDrawable(getResources().getDrawable(dot));
}
}
@Override
public void onClick(View v) {
if(v == subFragmentNext) {
idx++;
advanceWizardSubFragment(subFragments.get(idx));
} else if(v == saveAndContinue) {
((WizardListener) a).wizardCompleted();
}
}
@Override
public void onUpdate(Message message) {
Log.d(LOG, message.getData().toString());
int code = message.getData().getInt(Codes.Extras.MESSAGE_CODE);
switch(code) {
case Codes.Messages.UI.UPDATE:
Log.d(LOG, "updating progress bar");
keyGenProgress.setProgress((Integer) message.getData().get(Codes.Keys.UI.PROGRESS));
break;
case Codes.Messages.UI.REPLACE:
handler.post(new Runnable() {
@Override
public void run() {
keyGenProgressHolder.setVisibility(View.GONE);
keyGenSuccessHolder.setVisibility(View.VISIBLE);
}
});
break;
}
}
}