package net.coding.program.project.git;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.view.Menu;
import android.view.MenuItem;
import com.loopj.android.http.RequestParams;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.base.MyJsonResponse;
import net.coding.program.common.network.MyAsyncHttpClient;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.common.url.UrlCreate;
import net.coding.program.model.GitFileBlobObject;
import net.coding.program.model.GitFileInfoObject;
import net.coding.program.model.GitFileObject;
import net.coding.program.project.detail.ProjectGitFragment;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OptionsItem;
import org.json.JSONObject;
@EActivity(R.layout.activity_edit_code)
public class EditCodeActivity extends BackActivity {
@Extra
String mProjectPath;
@Extra
GitFileInfoObject mGitFileInfoObject;
@Extra
GitFileBlobObject mGitAll;
GitFileObject file;
@Extra
String mVersion = ProjectGitFragment.MASTER;;
private PreviewCodeFragment previewFragment;
private EditCodeFragment editFragment;
private MenuItem editMenu;
private MenuItem previewMenu;
@AfterViews
protected final void initGitViewActivity() {
setActionBarTitle(mGitFileInfoObject.name);
file = mGitAll.getGitFileObject();
previewFragment = PreviewCodeFragment_.builder().projectPath(mProjectPath).build();
editFragment = EditCodeFragment_.builder().build();
getSupportFragmentManager().beginTransaction()
.add(R.id.container, previewFragment)
.add(R.id.container, editFragment)
.commit();
}
public GitFileBlobObject getFile() {
return mGitAll;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.common_edit_preview, menu);
editMenu = menu.findItem(R.id.action_edit);
editMenu.setVisible(false);
previewMenu = menu.findItem(R.id.action_preview);
return super.onCreateOptionsMenu(menu);
}
@OptionsItem
void action_preview() {
file.data = editFragment.getInput();
previewFragment.loadData();
switchFragment(previewFragment, editFragment);
previewMenu.setVisible(false);
editMenu.setVisible(true);
}
@OptionsItem
void action_edit() {
switchFragment(editFragment, previewFragment);
previewMenu.setVisible(true);
editMenu.setVisible(false);
}
@OptionsItem
void action_save() {
String url = Global.HOST_API + mProjectPath + "/git/edit/" + mVersion + UrlCreate.pathEncode2(file.path);
RequestParams params = new RequestParams();
params.put("content", editFragment.getInput());
mGitAll.getGitFileObject().data = editFragment.getInput();
params.put("message", "update " + mGitFileInfoObject.name);
params.put("lastCommitSha", mGitAll.getCommitId());
MyAsyncHttpClient.post(this, url, params, new MyJsonResponse(EditCodeActivity.this) {
@Override
public void onMySuccess(JSONObject response) {
super.onMySuccess(response);
closeAndSave();
}
@Override
public void onFinish() {
super.onFinish();
showProgressBar(false);
}
});
showProgressBar(true);
}
private void switchFragment(Fragment show, Fragment hide) {
getSupportFragmentManager().beginTransaction()
.hide(hide)
.show(show)
.commit();
}
private void closeAndSave() {
Intent intent = new Intent();
intent.putExtra("resultData", mGitAll);
setResult(RESULT_OK, intent);
finish();
}
}