package com.ilm.sandwich.fragments; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; import com.ilm.sandwich.BuildConfig; import com.ilm.sandwich.R; import com.ilm.sandwich.sensors.Core; import com.ilm.sandwich.tools.AnalyticsApplication; import java.text.DecimalFormat; /** * Fragment to show TutorialFragment for first app start or if requested by user. */ public class TutorialFragment extends Fragment { static DecimalFormat df0 = new DecimalFormat("0"); private onTutorialFinishedListener mListener; private View tutorialOverlay; private View welcomeView; private boolean metricUnits = true; private View fragmentView; private Tracker mTracker; public TutorialFragment() { } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); fragmentView = view; SharedPreferences settings = this.getActivity().getSharedPreferences(this.getActivity().getPackageName() + "_preferences", Context.MODE_PRIVATE); boolean trackingAllowed = settings.getBoolean("nutzdaten", true); // Obtain the shared Tracker instance. AnalyticsApplication application = (AnalyticsApplication) this.getActivity().getApplication(); mTracker = application.getDefaultTracker(); mTracker.setScreenName("TutorialFragment"); mTracker.send(new HitBuilders.ScreenViewBuilder().build()); startTutorial(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_tutorial, container, false); } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof onTutorialFinishedListener) { mListener = (onTutorialFinishedListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } public void startTutorial() { welcomeView = fragmentView.findViewById(R.id.welcomeView); welcomeView.setVisibility(View.VISIBLE); Button welcomeButton = (Button) fragmentView.findViewById(R.id.welcomeButton); welcomeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mTracker.send(new HitBuilders.EventBuilder() .setCategory("Action") .setAction("Welcome_Button_pressed") .build()); welcomeView.setVisibility(View.INVISIBLE); tutorialOverlay = fragmentView.findViewById(R.id.tutorialOverlay); tutorialOverlay.setVisibility(View.VISIBLE); } }); SharedPreferences settings = this.getActivity().getSharedPreferences(this.getActivity().getPackageName() + "_preferences", Context.MODE_PRIVATE); String stepLengthString = settings.getString("step_length", null); Spinner spinner = (Spinner) fragmentView.findViewById(R.id.tutorialSpinner); // Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getActivity(), R.array.dimension, android.R.layout.simple_spinner_item); // Specify the layout to use when the list of choices appears adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Apply the adapter to the spinner spinner.setAdapter(adapter); if (stepLengthString != null) { try { stepLengthString = stepLengthString.replace(",", "."); int savedBodyHeight = Integer.parseInt(stepLengthString); if (savedBodyHeight < 241 && savedBodyHeight > 119) { EditText editText = (EditText) fragmentView.findViewById(R.id.tutorialEditText); editText.setText(savedBodyHeight); spinner.setSelection(0); } else if (savedBodyHeight < 95 && savedBodyHeight > 45) { EditText editText = (EditText) fragmentView.findViewById(R.id.tutorialEditText); editText.setText(savedBodyHeight); spinner.setSelection(1); } } catch (Exception e) { if (BuildConfig.debug) e.printStackTrace(); } } spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (arg2 == 0) { metricUnits = true; } else { metricUnits = false; } } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); Button startButton = (Button) fragmentView.findViewById(R.id.startbutton); startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTracker.send(new HitBuilders.EventBuilder() .setCategory("Action") .setAction("Tutorial_Start_Button_pressed") .build()); boolean tutorialDone = false; final EditText heightField = (EditText) fragmentView.findViewById(R.id.tutorialEditText); int op = heightField.length(); float number; if (op != 0) { try { number = Float.valueOf(heightField.getText().toString()); if (number < 241 && number > 119 && metricUnits) { String numberString = df0.format(number); fragmentView.getContext().getSharedPreferences(fragmentView.getContext().getPackageName() + "_preferences", Context.MODE_PRIVATE).edit().putString("step_length", numberString).commit(); Core.stepLength = (number / 222); tutorialDone = true; } else if (number < 95 && number > 45 && !metricUnits) { String numberString = df0.format(number); fragmentView.getContext().getSharedPreferences(TutorialFragment.this.getActivity().getPackageName() + "_preferences", Context.MODE_PRIVATE).edit().putString("step_length", numberString).apply(); Core.stepLength = (float) (number * 2.54 / 222); tutorialDone = true; } else { Toast.makeText(fragmentView.getContext(), fragmentView.getContext().getResources().getString(R.string.tx_10), Toast.LENGTH_LONG).show(); } } catch (NumberFormatException e) { if (BuildConfig.debug) Toast.makeText(fragmentView.getContext(), fragmentView.getContext().getResources().getString(R.string.tx_32), Toast.LENGTH_LONG).show(); } } else { Toast.makeText(fragmentView.getContext(), fragmentView.getContext().getResources().getString(R.string.tx_10), Toast.LENGTH_LONG).show(); } if (tutorialDone) { // TutorialFragment finished if (mListener != null) { mListener.onTutorialFinished(); } } } }); EditText bodyHeightField = (EditText) fragmentView.findViewById(R.id.tutorialEditText); bodyHeightField.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_SEND || actionId == EditorInfo.IME_ACTION_NEXT) { try { InputMethodManager inputManager = (InputMethodManager) fragmentView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); try { inputManager.hideSoftInputFromWindow(fragmentView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } catch (Exception e) { e.printStackTrace(); } EditText bodyHeightField = (EditText) fragmentView.findViewById(R.id.tutorialEditText); //Workaround Coursor out off textfield bodyHeightField.setFocusable(false); bodyHeightField.setFocusableInTouchMode(true); bodyHeightField.setFocusable(true); } catch (Exception e) { if (BuildConfig.debug) e.printStackTrace(); } } return false; } }); } public interface onTutorialFinishedListener { void onTutorialFinished(); } }