package com.secupwn.aimsicd.ui.fragments;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import com.secupwn.aimsicd.R;
import com.secupwn.aimsicd.data.model.BaseTransceiverStation;
import com.secupwn.aimsicd.utils.RealmHelper;
import com.secupwn.aimsicd.adapters.DbViewerSpinnerAdapter;
import com.secupwn.aimsicd.data.adapter.MeasureAdapter;
import com.secupwn.aimsicd.adapters.MeasuredCellStrengthAdapter;
import com.secupwn.aimsicd.data.adapter.BaseStationAdapter;
import com.secupwn.aimsicd.data.adapter.DefaultLocationAdapter;
import com.secupwn.aimsicd.data.adapter.DetectionStringAdapter;
import com.secupwn.aimsicd.data.adapter.EventAdapter;
import com.secupwn.aimsicd.data.adapter.ImportAdapter;
import com.secupwn.aimsicd.data.adapter.SmsDataAdapter;
import com.secupwn.aimsicd.data.model.DefaultLocation;
import com.secupwn.aimsicd.data.model.Event;
import com.secupwn.aimsicd.data.model.Import;
import com.secupwn.aimsicd.data.model.Measure;
import com.secupwn.aimsicd.data.model.SmsData;
import com.secupwn.aimsicd.data.model.SmsDetectionString;
import com.secupwn.aimsicd.enums.StatesDbViewer;
import io.freefair.android.injection.annotation.InjectView;
import io.freefair.android.injection.annotation.XmlLayout;
import io.freefair.android.injection.app.InjectionFragment;
import io.realm.Realm;
/**
* Description: Class that handles the display of the items in the 'Database Viewer' (DBV)
* <p/>
* Issues:
* <p/>
* Notes: See issue #234 for details on how to format the UI
*/
@XmlLayout(R.layout.fragment_db_viewer)
public final class DbViewerFragment extends InjectionFragment {
private RealmHelper mDb;
private StatesDbViewer mTableSelected;
@InjectView(R.id.table_spinner)
private Spinner tblSpinner;
@InjectView(R.id.list_view)
private ListView lv;
@InjectView(R.id.db_list_empty)
private View emptyView;
private Realm realm;
public DbViewerFragment() {
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mDb = new RealmHelper(activity.getBaseContext());
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
DbViewerSpinnerAdapter mSpinnerAdapter = new DbViewerSpinnerAdapter(getActivity(), R.layout.item_spinner_db_viewer);
tblSpinner.setAdapter(mSpinnerAdapter);
tblSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, final int position, long id) {
Object selectedItem = tblSpinner.getSelectedItem();
if (!(selectedItem instanceof StatesDbViewer)) {
return;
}
mTableSelected = (StatesDbViewer) selectedItem;
realm.refresh();
switch (position) {
case 0:
setListAdapter(new BaseStationAdapter(getActivity(), realm.allObjects(BaseTransceiverStation.class), true));
break;
case 1:
setListAdapter(new MeasureAdapter(getActivity(), realm.allObjects(Measure.class), true));
break;
case 2:
setListAdapter(new ImportAdapter(getActivity(), realm.allObjects(Import.class), true));
break;
case 3:
setListAdapter(new DefaultLocationAdapter(getActivity(), realm.allObjects(DefaultLocation.class), true));
break;
case 4: //Silent SMS
setListAdapter(new SmsDataAdapter(getActivity(), realm.allObjects(SmsData.class), true));
break;
case 5:
setListAdapter(new MeasuredCellStrengthAdapter(getActivity(), realm.allObjects(Measure.class), true));
break;
case 6:
setListAdapter(new EventAdapter(getActivity(), realm.allObjects(Event.class), true));
break;
case 7:
setListAdapter(new DetectionStringAdapter(getActivity(), realm.allObjects(SmsDetectionString.class), true));
break;
default:
throw new IllegalArgumentException("Unknown type of table");
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
}
});
}
private void setListAdapter(ListAdapter adapter) {
if (getActivity() == null) {
return; // fragment detached
}
lv.setEmptyView(emptyView);
if (adapter != null) {
lv.setAdapter(adapter);
lv.setVisibility(View.VISIBLE);
} else {
lv.setVisibility(View.GONE);
emptyView.setVisibility(View.VISIBLE);
}
getActivity().setProgressBarIndeterminateVisibility(false);
}
@Override
public void onStart() {
super.onStart();
realm = Realm.getDefaultInstance();
}
@Override
public void onStop() {
super.onStop();
realm.close();
}
}