package com.csound.wizard.fragment;
import java.io.File;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.csound.wizard.App;
import com.csound.wizard.Player;
import com.csound.wizard.Utils;
import com.csound.wizard.layout.Layout;
import com.csound.wizard.model.TrackState;
import com.example.proglayout.R;
public class UiCsdFragment extends UiWatcherFragment {
private String mUiText;
private TrackState trackState;
private boolean
useCache = true,
uiIsEmpty,
isPlay;
private String trackPath;
public static UiCsdFragment newInstance(String trackPath, boolean useCache, boolean isPlay) {
UiCsdFragment res = new UiCsdFragment();
res.trackPath = trackPath;
res.useCache = useCache;
res.isPlay = isPlay;
String uiText;
try {
InputStream is = FileUtils.openInputStream(new File(trackPath));
uiText = Utils.getUi(is);
is.close();
} catch (Exception e) {
uiText = "";
}
if (uiText.isEmpty()) {
res.uiIsEmpty = true;
} else {
res.uiIsEmpty = false;
res.mUiText = uiText;
}
return res;
}
public String getTrackPath() {
return trackPath;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View res;
App app = (App) getActivity().getApplication();
if (savedInstanceState != null) {
uiIsEmpty = savedInstanceState.getBoolean("uiIsEmpty");
trackPath = savedInstanceState.getString("trackPath");
mUiText = savedInstanceState.getString("uiText");
}
if (uiIsEmpty) {
res = noUiView(inflater, container);
} else {
res = setupUi(inflater, container, savedInstanceState);
}
if (savedInstanceState == null) {
if (isPlay) {
app.play(trackPath);
} else {
app.stop();
}
}
return res;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
}
@Override
public void onDetach() {
App app = (App) getActivity().getApplication();
app.clearPlayerTrack();
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
super.onDetach();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("uiIsEmpty", uiIsEmpty);
outState.putString("trackPath", trackPath);
outState.putString("uiText", mUiText);
}
private View setupUi(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Activity ctx = getActivity();
App app = (App) ctx.getApplication();
if (useCache) {
trackState = app.loadCurrentState(trackPath);
} else {
trackState = TrackState.readDefaultState(trackPath);
}
View res = inflater.inflate(R.layout.fragment_ui_csd, container, false);
View body = res.findViewById(R.id.ui_container);
ViewGroup parent = (ViewGroup) body.getParent();
int index = parent.indexOfChild(body);
parent.removeView(body);
View ui;
Player player = app.getPlayer();
if (mUiText.isEmpty()) {
TextView tv = new TextView(getActivity());
tv.setText(R.string.no_ui_csd);
Layout.setTextProperties(tv, app.getModel().getSettings().getParam().getText());
ui = tv;
} else {
ui = Layout.init(ctx, mUiText, player, trackState);
}
parent.addView(ui, index);
res.setBackgroundColor(app.getModel().getSettings().getParam().getColor().getBkgColor());
return res;
}
private View noUiView(LayoutInflater inflater, ViewGroup container) {
App app = (App) getActivity().getApplication();
View res = inflater.inflate(R.layout.fragment_no_ui_csd, container, false);
res.setBackgroundColor(app.getModel().getSettings().getParam().getColor().getBkgColor());
return res;
}
public static void set(FragmentManager fm, UiCsdFragment x) {
fm.beginTransaction().replace(R.id.container, x).commit();
}
}