package com.aero.control.fragments;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Point;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.aero.control.AeroActivity;
import com.aero.control.R;
import com.aero.control.adapter.AppDataAdapter;
import com.aero.control.helpers.PerApp.AppMonitor.AppLogger;
import com.aero.control.helpers.PerApp.AppMonitor.JobManager;
import com.aero.control.helpers.PerApp.AppMonitor.model.AppElement;
import com.aero.control.helpers.PerApp.AppMonitor.model.AppElementDetail;
import com.aero.control.helpers.Util;
import com.github.amlcurran.showcaseview.ShowcaseView;
import com.github.amlcurran.showcaseview.targets.Target;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
/**
* Created by Alexander Christ on 03.05.15.
*/
public class AppMonitorFragment extends Fragment {
private static final String FILENAME = "firstrun_appmonitor";
private ViewGroup mRoot;
private ListView mListView;
private Context mContext;
private final String mClassName = getClass().getName();
private ProgressDialog mProgressDialog;
private AppMonitorDetailFragment mAppMonitorDetailFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mRoot = (ViewGroup) inflater.inflate(R.layout.appmonitor_fragment, null);
this.mContext = getActivity();
loadUI();
return mRoot;
}
@Override
public void onResume() {
super.onResume();
clearUI();
loadUI();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Set up our file;
int output = 0;
if (AeroActivity.genHelper.doesExist(getActivity().getFilesDir().getAbsolutePath() + "/" + FILENAME)) {
output = 1;
}
// Only show showcase once;
if (output == 0)
DrawFirstStart(R.string.showcase_appmonitor_fragment, R.string.showcase_appmonitor_fragment_sum);
}
private void DrawFirstStart(int header, int content) {
try {
final FileOutputStream fos = getActivity().openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write("1".getBytes());
fos.close();
}
catch (IOException e) {
Log.e("Aero", "Could not save file. ", e);
}
Target homeTarget = new Target() {
@Override
public Point getPoint() {
return new Point(150, 125);
}
};
new ShowcaseView.Builder(getActivity())
.setContentTitle(header)
.setContentText(content)
.setTarget(homeTarget)
.build();
}
private void clearUI() {
this.mListView = null;
mRoot.invalidate();
}
private void loadUI() {
if (AeroActivity.mJobManager == null) {
// Generate a new instance;
AeroActivity.mJobManager = JobManager.instance(mContext);
}
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(mContext);
mProgressDialog.setMessage(Util.getRandomLoadingText(getActivity()));
mProgressDialog.setIndeterminate(true);
mProgressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.spinner_animation));
}
mProgressDialog.show();
// Reset the back button coutner in our activity
// TODO: put this logic somewhere else
AeroActivity.resetBackCounter();
// Run the main operation in its own thread;
final Runnable runnable = new Runnable() {
@Override
public void run() {
final List<AppElement> appData = AeroActivity.mJobManager.getParentChildData(mContext);
// Be sure that the activity is running
if (getActivity() == null) {
return;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tmp = (TextView) mRoot.findViewById(R.id.noData);
ImageView iv = (ImageView) mRoot.findViewById(R.id.empty_image);
mProgressDialog.dismiss();
mProgressDialog.cancel();
// Do we have data to display?
if (appData.size() > 0) {
tmp.setVisibility(View.GONE);
iv.setVisibility(View.GONE);
} else {
tmp.setText(getText(R.string.pref_no_appmonitor_data));
tmp.setVisibility(View.VISIBLE);
iv.setVisibility(View.VISIBLE);
}
// Is it even enabled?
if (!AeroActivity.mJobManager.getJobManagerState()) {
tmp.setText(getText(R.string.pref_appmonitor_disabled));
tmp.setVisibility(View.VISIBLE);
iv.setVisibility(View.VISIBLE);
clearUI();
return;
}
// For debugging purposes;
if (AppLogger.getLogLevel() >= 1) {
for (AppElement a : appData) {
AppLogger.print(mClassName, a.getName(), 1);
for (AppElementDetail acd : a.getChildData()) {
AppLogger.print(mClassName, " -------> " + acd.getTitle() + " \n" + acd.getContent(), 1);
}
}
}
mListView = (ListView) mRoot.findViewById(R.id.apppstatistics);
final AppDataAdapter adapter = new AppDataAdapter(getActivity(),
R.layout.perapp_stat_row, appData);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Pass our data to the sub-fragment;
Intent intent = getActivity().getIntent();
intent.putExtra("aero_data", appData.get(position));
if (mAppMonitorDetailFragment == null)
mAppMonitorDetailFragment = new AppMonitorDetailFragment();
AeroActivity.mHandler.postDelayed(new Runnable() {
@Override
public void run() {
getFragmentManager()
.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
.replace(R.id.content_frame, mAppMonitorDetailFragment)
.addToBackStack("AppDetail")
.commit();
}
}, AeroActivity.genHelper.getDefaultDelay());
}
});
}
});
}
};
new Thread(runnable).start();
}
}