package com.pinthecloud.athere.fragment;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import com.pinthecloud.athere.AhApplication;
import com.pinthecloud.athere.AhGlobalVariable;
import com.pinthecloud.athere.R;
import com.pinthecloud.athere.activity.AhActivity;
import com.pinthecloud.athere.analysis.GAHelper;
import com.pinthecloud.athere.database.MessageDBHelper;
import com.pinthecloud.athere.database.UserDBHelper;
import com.pinthecloud.athere.dialog.AhAlertDialog;
import com.pinthecloud.athere.exception.AhException;
import com.pinthecloud.athere.exception.ExceptionManager;
import com.pinthecloud.athere.helper.CachedBlobStorageHelper;
import com.pinthecloud.athere.helper.MessageHelper;
import com.pinthecloud.athere.helper.SquareHelper;
import com.pinthecloud.athere.helper.UserHelper;
import com.pinthecloud.athere.interfaces.AhDialogCallback;
/**
* Basic Fragment class for At here application
* Provides each instances that are needed in fragments
*
*/
public class AhFragment extends Fragment implements ExceptionManager.Handler{
protected AhFragment thisFragment;
protected AhApplication app;
protected Context context;
protected AhActivity activity;
protected MessageHelper messageHelper;
protected MessageDBHelper messageDBHelper;
protected UserHelper userHelper;
protected UserDBHelper userDBHelper;
protected SquareHelper squareHelper;
protected CachedBlobStorageHelper blobStorageHelper;
protected GAHelper gaHelper;
protected String simpleClassName;
public AhFragment(){
thisFragment = this;
app = AhApplication.getInstance();
messageHelper = app.getMessageHelper();
messageDBHelper = app.getMessageDBHelper();
userHelper = app.getUserHelper();
userDBHelper = app.getUserDBHelper();
squareHelper = app.getSquareHelper();
blobStorageHelper = app.getBlobStorageHelper();
gaHelper = app.getGAHelper();
simpleClassName = thisFragment.getClass().getSimpleName();
}
@Override
public void onCreate(Bundle savedInstanceState) {
context = getActivity();
activity = (AhActivity) context;
super.onCreate(savedInstanceState);
gaHelper.sendScreenGA(simpleClassName);
ExceptionManager.setHandler(thisFragment);
}
@Override
public void onStart() {
super.onStart();
gaHelper.reportActivityStart(activity);
}
@Override
public void onStop() {
super.onStop();
gaHelper.reportActivityStop(activity);
}
@Override
public void handleException(final AhException ex) {
AhAlertDialog exceptionDialog = null;
String title = ex.getType().toString();
String message = ex.toString();
if(ex.getType().equals(AhException.TYPE.INTERNET_NOT_CONNECTED)){
title = null;
message = getResources().getString(R.string.internet_not_connected_message);
}
exceptionDialog = new AhAlertDialog(title, message, false, new AhDialogCallback() {
@Override
public void doPositiveThing(Bundle bundle) {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
@Override
public void doNegativeThing(Bundle bundle) {
// Do nothing
}
});
exceptionDialog.show(getFragmentManager(), AhGlobalVariable.DIALOG_KEY);
}
public void Log(AhFragment fragment, Object... params){
if(AhGlobalVariable.DEBUG_MODE){
Log.e("ERROR", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
Log.e("ERROR", "[ "+fragment.getClass().getName() + " ]");
for(Object str : params) {
if (str == null) {
Log.e("ERROR", "null");
continue;
}
Log.e("ERROR", str.toString());
}
Log.e("ERROR", "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
}
}
/**
*
* NOT USING METHOD
* BUT NEED FOR REFERENCE!!
*
*/
// @ExceptionHandler(target = AhFragment.class)
// public void myhandleException(final AhException ex) {
//
// Method[] ms = pair.getClazz().getMethods();
// for(Method method : ms) {
// ExceptionHandler annos = method.getAnnotation(ExceptionHandler.class);
// if (annos != null) {
// try {
// Class<?> target = annos.target();
// Log(_thisFragment, "target : " + target.getName());
//
// method.invoke(pair.getFrag(), ex);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }
// }
//
// activity.runOnUiThread(new Runnable() {
//
// @Override
// public void run() {
// new AlertDialog.Builder(_thisFragment.getActivity())
// .setTitle(ex.getType().toString())
// .setMessage(ex.toString())
// .setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int whichButton) {
// //Your action here
// dialog.dismiss();
// }
// })
// .show();
// }
// });
// }
}