package com.integreight.onesheeld.appFragments;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import com.google.android.gms.analytics.HitBuilders;
import com.integreight.onesheeld.MainActivity;
import com.integreight.onesheeld.R;
import com.integreight.onesheeld.adapters.SelectedShieldsListAdapter;
import com.integreight.onesheeld.enums.UIShield;
import com.integreight.onesheeld.model.Shield;
import com.integreight.onesheeld.shields.ShieldFragmentParent;
import com.integreight.onesheeld.shields.fragments.AccelerometerFragment;
import com.integreight.onesheeld.shields.fragments.BuzzerFragment;
import com.integreight.onesheeld.shields.fragments.CameraFragment;
import com.integreight.onesheeld.shields.fragments.ClockFragment;
import com.integreight.onesheeld.shields.fragments.ColorDetectionFragment;
import com.integreight.onesheeld.shields.fragments.DataLoggerFragment;
import com.integreight.onesheeld.shields.fragments.EmailFragment;
import com.integreight.onesheeld.shields.fragments.EmptyShieldFragment;
import com.integreight.onesheeld.shields.fragments.FacebookFragment;
import com.integreight.onesheeld.shields.fragments.FoursquareFragment;
import com.integreight.onesheeld.shields.fragments.GamepadFragment;
import com.integreight.onesheeld.shields.fragments.GlcdFragment;
import com.integreight.onesheeld.shields.fragments.GpsFragment;
import com.integreight.onesheeld.shields.fragments.GravityFragment;
import com.integreight.onesheeld.shields.fragments.GyroscopeFragment;
import com.integreight.onesheeld.shields.fragments.InternetFragment;
import com.integreight.onesheeld.shields.fragments.KeyboardFragment;
import com.integreight.onesheeld.shields.fragments.KeypadFragment;
import com.integreight.onesheeld.shields.fragments.LcdFragment;
import com.integreight.onesheeld.shields.fragments.LedFragment;
import com.integreight.onesheeld.shields.fragments.LightFragment;
import com.integreight.onesheeld.shields.fragments.MagnetometerFragment;
import com.integreight.onesheeld.shields.fragments.MicFragment;
import com.integreight.onesheeld.shields.fragments.MusicPlayerFragment;
import com.integreight.onesheeld.shields.fragments.NfcFragment;
import com.integreight.onesheeld.shields.fragments.NotificationFragment;
import com.integreight.onesheeld.shields.fragments.OrientationFragment;
import com.integreight.onesheeld.shields.fragments.PatternFragment;
import com.integreight.onesheeld.shields.fragments.PhoneFragment;
import com.integreight.onesheeld.shields.fragments.PressureFragment;
import com.integreight.onesheeld.shields.fragments.ProximityFragment;
import com.integreight.onesheeld.shields.fragments.PushButtonFragment;
import com.integreight.onesheeld.shields.fragments.SevenSegmentFragment;
import com.integreight.onesheeld.shields.fragments.SkypeFragment;
import com.integreight.onesheeld.shields.fragments.SliderFragment;
import com.integreight.onesheeld.shields.fragments.SmsFragment;
import com.integreight.onesheeld.shields.fragments.SpeechRecognitionFragment;
import com.integreight.onesheeld.shields.fragments.TemperatureFragment;
import com.integreight.onesheeld.shields.fragments.TerminalFragment;
import com.integreight.onesheeld.shields.fragments.TextToSpeechFragment;
import com.integreight.onesheeld.shields.fragments.ToggleButtonFragment;
import com.integreight.onesheeld.shields.fragments.TwitterFragment;
import com.integreight.onesheeld.shields.fragments.VibrationFragment;
import com.integreight.onesheeld.utils.CrashlyticsUtils;
import com.integreight.onesheeld.utils.customviews.AppSlidingLeftMenu;
import com.integreight.onesheeld.utils.customviews.OneSheeldTextView;
import java.util.HashMap;
import java.util.Map;
public class SelectedShieldsListFragment extends ListFragment {
private static SelectedShieldsListAdapter UIShieldAdapter;
Map<String, ShieldFragmentParent<?>> creadtedShields = new HashMap<>();
private MainActivity activity;
public int currentShield = 0;
public static SelectedShieldsListFragment newInstance(Activity activity) {
UIShieldAdapter = new SelectedShieldsListAdapter(activity);
return new SelectedShieldsListFragment();
}
public static void renewUiShieldAdapter(Activity activity) {
if (UIShieldAdapter != null)
UIShieldAdapter.setActivity(activity);
else {
UIShieldAdapter = new SelectedShieldsListAdapter(activity);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
activity = (MainActivity) getActivity();
if (UIShieldAdapter != null)
UIShieldAdapter.setActivity(activity);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof MainActivity) {
this.activity = (MainActivity) context;
renewUiShieldAdapter(activity);
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.selected_shields_list, null);
}
public ShieldFragmentParent<?> getShieldFragment(int position) {
Shield uiShield = UIShieldAdapter.getItem(position);
if (creadtedShields.containsKey(uiShield.tag))
return creadtedShields.get(uiShield.tag);
else {
try {
if (uiShield.shieldFragment != null)
return addToCreatedListAndReturn(uiShield, uiShield.shieldFragment.newInstance());
else {
if (activity != null)
activity.getThisApplication()
.getTracker()
.send(new HitBuilders.EventBuilder()
.setCategory("Extreme Cases")
.setAction(
"Initialize fragments without reflection")
.build());
return generateShieldFragment(uiShield);
}
} catch (java.lang.InstantiationException e) {
CrashlyticsUtils.logException(e);
return generateShieldFragment(uiShield);
} catch (IllegalAccessException e) {
CrashlyticsUtils.logException(e);
return generateShieldFragment(uiShield);
}
}
}
private ShieldFragmentParent<?> generateShieldFragment(Shield uiShield) {
if (uiShield.id == UIShield.VIBRATION_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new VibrationFragment());
if (uiShield.id == UIShield.LED_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new LedFragment());
if (uiShield.id == UIShield.ACCELEROMETER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new AccelerometerFragment());
if (uiShield.id == UIShield.FACEBOOK_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new FacebookFragment());
if (uiShield.id == UIShield.KEYPAD_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new KeypadFragment());
if (uiShield.id == UIShield.LCD_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new LcdFragment());
if (uiShield.id == UIShield.MAGNETOMETER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new MagnetometerFragment());
if (uiShield.id == UIShield.PUSHBUTTON_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new PushButtonFragment());
if (uiShield.id == UIShield.SEVENSEGMENT_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new SevenSegmentFragment());
if (uiShield.id == UIShield.SLIDER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new SliderFragment());
if (uiShield.id == UIShield.BUZZER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new BuzzerFragment());
if (uiShield.id == UIShield.TOGGLEBUTTON_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new ToggleButtonFragment());
if (uiShield.id == UIShield.TWITTER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new TwitterFragment());
if (uiShield.id == UIShield.NOTIFICATION_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new NotificationFragment());
if (uiShield.id == UIShield.GAMEDPAD_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new GamepadFragment());
if (uiShield.id == UIShield.FOURSQUARE_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new FoursquareFragment());
if (uiShield.id == UIShield.GPS_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new GpsFragment());
if (uiShield.id == UIShield.SMS_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new SmsFragment());
if (uiShield.id == UIShield.MUSICPLAYER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new MusicPlayerFragment());
if (uiShield.id == UIShield.GYROSCOPE_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new GyroscopeFragment());
if (uiShield.id == UIShield.MIC_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new MicFragment());
if (uiShield.id == UIShield.SKYPE_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new SkypeFragment());
if (uiShield.id == UIShield.PROXIMITY_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new ProximityFragment());
if (uiShield.id == UIShield.GRAVITY_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new GravityFragment());
if (uiShield.id == UIShield.ORIENTATION_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new OrientationFragment());
if (uiShield.id == UIShield.LIGHT_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new LightFragment());
if (uiShield.id == UIShield.PRESSURE_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new PressureFragment());
if (uiShield.id == UIShield.TEMPERATURE_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new TemperatureFragment());
if (uiShield.id == UIShield.CAMERA_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new CameraFragment());
if (uiShield.id == UIShield.PHONE_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new PhoneFragment());
if (uiShield.id == UIShield.EMAIL_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new EmailFragment());
if (uiShield.id == UIShield.CLOCK_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new ClockFragment());
if (uiShield.id == UIShield.KEYBOARD_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new KeyboardFragment());
if (uiShield.id == UIShield.SPEECH_RECOGNIZER_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new SpeechRecognitionFragment());
if (uiShield.id == UIShield.TEXT_TO_SPEECH_SHIELD.getId())
return addToCreatedListAndReturn(uiShield,
new TextToSpeechFragment());
if (uiShield.id == UIShield.DATA_LOGGER.getId())
return addToCreatedListAndReturn(uiShield, new DataLoggerFragment());
if (uiShield.id == UIShield.TERMINAL_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new TerminalFragment());
if (uiShield.id == UIShield.PATTERN_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new PatternFragment());
if (uiShield.id == UIShield.INTERNET_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new InternetFragment());
if (uiShield.id == UIShield.NFC_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new NfcFragment());
if (uiShield.id == UIShield.GLCD_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new GlcdFragment());
if (uiShield.id == UIShield.COLOR_DETECTION_SHIELD.getId())
return addToCreatedListAndReturn(uiShield, new ColorDetectionFragment());
else {
return new EmptyShieldFragment();
}
}
private ShieldFragmentParent<?> addToCreatedListAndReturn(Shield uiShield,
ShieldFragmentParent<?> fragment) {
fragment.setControllerTag(uiShield.tag);
Bundle b = new Bundle();
b.putString("tag", uiShield.tag);
fragment.setArguments(b);
fragment.shieldName = uiShield.name;
creadtedShields.put(uiShield.tag, fragment);
return fragment;
}
public Shield getUIShield(int position) {
return UIShieldAdapter.getItem(position);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.activity = (MainActivity) getActivity();
if (UIShieldAdapter != null)
UIShieldAdapter.setActivity(activity);
setListAdapter(UIShieldAdapter);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
getListView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return !((AppSlidingLeftMenu) activity
.findViewById(R.id.sliding_pane_layout)).isOpen();
}
});
setRetainInstance(true);
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onListItemClick(ListView lv, View v, int position, long id) {
ShieldFragmentParent<?> newContent = getShieldFragment(position);
if (newContent != null) {
currentShield = position;
switchFragment(newContent, UIShieldAdapter.getItem(position));
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt("position", currentShield);
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
currentShield = savedInstanceState == null || savedInstanceState.get("position") == null ? 0
: savedInstanceState.getInt("position");
this.activity = (MainActivity) getActivity();
if (UIShieldAdapter != null)
UIShieldAdapter.setActivity(activity);
super.onViewStateRestored(savedInstanceState);
}
TextView shieldName;
private void switchFragment(final ShieldFragmentParent<?> fragment,
final Shield uiShield) {
getListView().post(new Runnable() {
@Override
public void run() {
activity.replaceCurrentFragment(R.id.shieldsContainerFrame,
fragment, uiShield.tag, false, false);
try {
new Handler().post(new Runnable() {
@Override
public void run() {
shieldName = (OneSheeldTextView) activity
.findViewById(R.id.shieldName);
shieldName.setVisibility(fragment.shieldName
.equalsIgnoreCase(UIShield.SEVENSEGMENT_SHIELD
.getName()) ? View.GONE
: View.VISIBLE);
shieldName.setText(fragment.shieldName);
}
});
} catch (Exception e) {
CrashlyticsUtils.logException(e);
}
activity.closeMenu();
}
});
}
}