package com.mehmetakiftutuncu.eshotroid.fragment; import java.util.ArrayList; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import com.mehmetakiftutuncu.eshotroid.R; import com.mehmetakiftutuncu.eshotroid.database.KentKartDatabase; import com.mehmetakiftutuncu.eshotroid.model.KentKart; import com.mehmetakiftutuncu.eshotroid.model.KentKartBalanceQueryResult; import com.mehmetakiftutuncu.eshotroid.task.QueryKentKartBalanceTask; import com.mehmetakiftutuncu.eshotroid.utility.Messages; /** Fragment of the Kent Kart balance page * * @author mehmetakiftutuncu */ public class KentKartBalanceFragment extends Fragment { private TextView info; private LinearLayout existingQueryLayout; private Spinner selectedKentKart; private ImageButton deleteKentKart; private TextView deleteKentKartInfo; private Button newQuery; private LinearLayout newQueryLayout; private EditText aliasNo1; private EditText aliasNo2; private EditText aliasNo3; private CheckBox saveStatus; private EditText saveName; private Button existingQuery; private Button query; private LinearLayout resultLayout; private TextView balance; private TextView lastLoad; private TextView lastUse; private Button goBack; private ArrayList<KentKart> kentKarts; private boolean isExistingQueryMode; private boolean isQuerying = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_kent_kart_balance, container, false); initialize(view); return view; } public void showQueryResult(KentKartBalanceQueryResult result) { // Clear focus of alias input to hide keyboard aliasNo1.clearFocus(); // Show result and go back button showOrHideView(resultLayout, true); showOrHideView(goBack, true); // Hide existing and new query layouts showOrHideView(existingQueryLayout, false); showOrHideView(newQueryLayout, false); // Hide info and query button showOrHideView(info, false); showOrHideView(query, false); // Set result texts if(result.getBalance() != null) balance.setText(getString(R.string.kentKartBalance_balance, result.getBalance())); else balance.setText(getString(R.string.kentKartBalance_unknown)); if(result.getLastLoadTime() != null) { if(result.getLastLoadAmount() != null) lastLoad.setText(getString(R.string.kentKartBalance_lastLoad, result.getLastLoadTime(), result.getLastLoadAmount())); else lastLoad.setText(getString(R.string.kentKartBalance_lastLoad_onlyTime, result.getLastLoadTime())); } else { if(result.getLastLoadAmount() != null) lastLoad.setText(getString(R.string.kentKartBalance_lastLoad_onlyAmount, result.getLastLoadAmount())); else lastLoad.setText(getString(R.string.kentKartBalance_unknown)); } if(result.getLastUseTime() != null) { if(result.getLastUseAmount() != null) lastUse.setText(getString(R.string.kentKartBalance_lastUse, result.getLastUseTime(), result.getLastUseAmount())); else lastUse.setText(getString(R.string.kentKartBalance_lastUse_onlyTime, result.getLastUseTime())); } else { if(result.getLastUseAmount() != null) lastUse.setText(getString(R.string.kentKartBalance_lastUse_onlyAmount, result.getLastUseAmount())); else lastUse.setText(getString(R.string.kentKartBalance_unknown)); } } public void setQuerying(boolean isQuerying) { this.isQuerying = isQuerying; if(query != null) { query.setEnabled(!isQuerying); } if(newQuery != null) { newQuery.setEnabled(!isQuerying); } } public boolean isQuerying() { return isQuerying; } /** Initializes UI components */ private void initialize(View view) { info = (TextView) view.findViewById(R.id.textView_kentKartBalance_info); existingQueryLayout = (LinearLayout) view.findViewById(R.id.linearLayout_kentKartBalance_existingQuery); selectedKentKart = (Spinner) view.findViewById(R.id.spinner_kentKartBalance_selectedKentKart); deleteKentKart = (ImageButton) view.findViewById(R.id.imageButton_kentKartBalance_deleteKentKart); deleteKentKartInfo = (TextView) view.findViewById(R.id.textView_kentKartBalance_deleteKentKartInfo); newQuery = (Button) view.findViewById(R.id.button_kentKartBalance_newQuery); newQueryLayout = (LinearLayout) view.findViewById(R.id.linearLayout_kentKartBalance_newQuery); aliasNo1 = (EditText) view.findViewById(R.id.editText_kentKartBalance_aliasNo1); aliasNo2 = (EditText) view.findViewById(R.id.editText_kentKartBalance_aliasNo2); aliasNo3 = (EditText) view.findViewById(R.id.editText_kentKartBalance_aliasNo3); saveStatus = (CheckBox) view.findViewById(R.id.checkBox_kentKartBalance_saveKentKart_saveStatus); saveName = (EditText) view.findViewById(R.id.editText_kentKartBalance_saveKentKart_saveName); existingQuery = (Button) view.findViewById(R.id.button_kentKartBalance_existingQuery); query = (Button) view.findViewById(R.id.button_kentKartBalance_query); resultLayout = (LinearLayout) view.findViewById(R.id.linearLayout_kentKartBalance_result); balance = (TextView) view.findViewById(R.id.textView_kentKartBalance_balance); lastLoad = (TextView) view.findViewById(R.id.textView_kentKartBalance_lastLoad); lastUse = (TextView) view.findViewById(R.id.textView_kentKartBalance_lastUse); goBack = (Button) view.findViewById(R.id.button_kentKartBalance_goBack); // Click listener for new query button newQuery.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Set mode to new query setExistingQueryMode(false); // Hide info text showOrHideView(info, false); } }); // Text change listener for aliasNo1 to select next field when filled aliasNo1.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) { if(s.length() == 5) { aliasNo2.requestFocus(); } checkFields(); } }); // Text change listener for aliasNo2 to select next field when filled aliasNo2.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) { if(s.length() == 5) { aliasNo3.requestFocus(); } checkFields(); } }); // Text change listener for aliasNo3 to enable query button when filled aliasNo3.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) { checkFields(); } }); // Checked change listener for save status saveStatus.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // Show or hide save name showOrHideView(saveName, isChecked); checkFields(); } }); // Text change listener for save name to enable query button when filled saveName.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) { checkFields(); } }); // Click listener for new query button existingQuery.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Load Kent Kart list again initializeKentKarts(); // Set mode to existing query setExistingQueryMode(true); // Show info text showOrHideView(info, true); } }); // Click listener for query button query.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { KentKart kentKart = null; if(isExistingQueryMode) { // Get selected Kent Kart kentKart = getSelectedKentKart(); } else { if(saveStatus.isChecked()) { // Save Kent Kart kentKart = saveKentKart(); } else { // Just create a Kent Kart kentKart = createKentKart(); } } // Query new QueryKentKartBalanceTask(KentKartBalanceFragment.this, kentKart).execute(); } }); // Click listener for delete Kent Kart button deleteKentKart.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { deleteKentKart(); // Load Kent Kart list again initializeKentKarts(); } }); // Click listener for go back button goBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Reload Kent Karts initializeKentKarts(); } }); initializeKentKarts(); } private void initializeKentKarts() { // Show existing and new query layouts (One of them will be hidden later) showOrHideView(existingQuery, true); showOrHideView(newQuery, true); // Show info and query button showOrHideView(info, true); showOrHideView(query, true); // Hide result layout showOrHideView(resultLayout, false); // Show or hide save name showOrHideView(saveName, false); // Get saved Kent Karts loadKentKarts(); // Set adapter selectedKentKart.setAdapter(new ArrayAdapter<KentKart>(getActivity(), android.R.layout.simple_spinner_dropdown_item, kentKarts)); // If there are saved Kent Karts if(kentKarts != null && kentKarts.size() > 0) { // Set mode to existing query setExistingQueryMode(true); // Show delete Kent Kart button and info showOrHideView(deleteKentKart, true); showOrHideView(deleteKentKartInfo, true); // Show new query button showOrHideView(newQuery, true); // Set info info.setText(getString(R.string.kentKartBalance_info_selectKentKart)); } else { // Set mode to new query setExistingQueryMode(false); // Hide existing query button showOrHideView(existingQuery, false); // Set info info.setText(getString(R.string.kentKartBalance_info_noSavedKentKart)); } } /** Checks input fields and enables or disables query button accordingly */ private void checkFields() { // If all fields are filled if(aliasNo1.getText().toString().length() == 5 && aliasNo2.getText().toString().length() == 5 && aliasNo3.getText().toString().length() == 1 && (saveStatus.isChecked() ? saveName.getText().toString().length() > 0 : true)) { // Enable query button query.setEnabled(true); } else { // Disable query button query.setEnabled(false); } } /** Sets query mode to existing or new * * @param isExistingQuery If true, mode will be existing query mode */ private void setExistingQueryMode(boolean isExistingQuery) { // Set flag isExistingQueryMode = isExistingQuery; // Show or hide new query layout showOrHideView(newQueryLayout, !isExistingQuery); // Show or hide existing query layout showOrHideView(existingQueryLayout, isExistingQuery); if(isExistingQuery) { // Set query button enabled state query.setEnabled(selectedKentKart.getSelectedItemPosition() != Spinner.INVALID_POSITION); } else { // Clear alias numbers aliasNo1.setText(""); aliasNo2.setText(""); aliasNo3.setText(""); // Reset save status and name saveStatus.setChecked(false); saveName.setText(""); query.setEnabled(false); } } private KentKart createKentKart() { return new KentKart(saveName.getText().toString(), aliasNo1.getText().toString(), aliasNo2.getText().toString(), aliasNo3.getText().toString()); } private KentKart getSelectedKentKart() { KentKart kentKart = null; KentKartDatabase db = KentKartDatabase.getDatabase(getActivity()); ArrayList<KentKart> kentKarts = db.get(); db.closeDatabase(); if(kentKarts != null && kentKarts.size() > 0) { kentKart = kentKarts.get(selectedKentKart.getSelectedItemPosition()); } return kentKart; } private void loadKentKarts() { KentKartDatabase db = KentKartDatabase.getDatabase(getActivity()); kentKarts = db.get(); db.closeDatabase(); } private KentKart saveKentKart() { KentKart kentKart = createKentKart(); KentKartDatabase db = KentKartDatabase.getDatabase(getActivity()); db.addOrUpdate(kentKart); db.closeDatabase(); Messages.getInstance().showPositive(getActivity(), getString(R.string.info_kentKart_saved, kentKart.toString())); return kentKart; } private void deleteKentKart() { // Get selected Kent Kart KentKart kentKart = getSelectedKentKart(); // Delete selected Kent Kart KentKartDatabase db = KentKartDatabase.getDatabase(getActivity()); db.delete(kentKart.getId()); db.closeDatabase(); Messages.getInstance().showPositive(getActivity(), getString(R.string.info_kentKart_deleted, kentKart.toString())); } /** Sets the visibility of the given view * * @param view View whose visibility will be changed * @param show If true, view will be visible. If false, view will be gone */ private void showOrHideView(View view, boolean show) { if(show) { view.setVisibility(View.VISIBLE); } else { view.setVisibility(View.GONE); } } }