package com.loopeer.codereader.ui.activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import com.loopeer.codereader.Navigator;
import com.loopeer.codereader.R;
import com.loopeer.codereader.coreader.db.CoReaderDbHelper;
import com.loopeer.codereader.model.DirectoryNode;
import com.loopeer.codereader.model.Repo;
import com.loopeer.codereader.ui.fragment.CodeReadFragment;
import com.loopeer.codereader.ui.view.DirectoryNavDelegate;
import com.loopeer.codereader.ui.view.DrawerLayout;
import com.loopeer.codereader.utils.DeviceUtils;
import butterknife.BindView;
public class CodeReadActivity extends BaseActivity implements DirectoryNavDelegate.FileClickListener, DirectoryNavDelegate.LoadFileCallback {
@BindView(R.id.directory_view)
RecyclerView mDirectoryRecyclerView;
@BindView(R.id.left_sheet)
View mLeftSheet;
@BindView(R.id.container_code_read)
FrameLayout mContainer;
@BindView(R.id.drawer_layout)
DrawerLayout mDrawerLayout;
private CodeReadFragment mFragment;
private DirectoryNode mDirectoryNode;
private DirectoryNode mSelectedNode;
private DirectoryNavDelegate mDirectoryNavDelegate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_code_read);
setupStatusBar();
mDirectoryNavDelegate = new DirectoryNavDelegate(mDirectoryRecyclerView, this);
mDirectoryNavDelegate.setLoadFileCallback(this);
createFragment(null);
parseIntent(savedInstanceState);
}
private void setupStatusBar() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
return;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
mDirectoryRecyclerView.setPadding(0, DeviceUtils.getStatusBarHeight(), 0, 0);
mDirectoryRecyclerView.setClipToPadding(true);
}
private void parseIntent(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mDirectoryNode = (DirectoryNode) savedInstanceState.getSerializable(Navigator.EXTRA_DIRETORY_ROOT);
mSelectedNode = (DirectoryNode) savedInstanceState.getSerializable(Navigator.EXTRA_DIRETORY_SELECTING);
DirectoryNode rootNodeInstance = (DirectoryNode) savedInstanceState.getSerializable(Navigator.EXTRA_DIRETORY_ROOT_NODE_INSTANCE);
mFragment.updateRootNode(mDirectoryNode);
mDirectoryNavDelegate.resumeDirectoryState(rootNodeInstance);
doOpenFile(mSelectedNode);
return;
}
Intent intent = getIntent();
Repo repo = (Repo) intent.getSerializableExtra(Navigator.EXTRA_REPO);
if (repo == null) {
String openFilePath = intent.getData().getPath();
String[] mids = openFilePath.split("/");
String name = mids[mids.length - 1];
repo = new Repo(name, openFilePath, false);
repo.id = String.valueOf(CoReaderDbHelper.getInstance(this).insertRepo(repo));
}
CoReaderDbHelper.getInstance(this).updateRepoLastModify(Long.valueOf(repo.id)
, System.currentTimeMillis());
mDirectoryNode = repo.toDirectoryNode();
mFragment.updateRootNode(mDirectoryNode);
mDirectoryNavDelegate.updateData(mDirectoryNode);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable(Navigator.EXTRA_DIRETORY_ROOT, mDirectoryNode);
outState.putSerializable(Navigator.EXTRA_DIRETORY_SELECTING, mSelectedNode);
outState.putSerializable(Navigator.EXTRA_DIRETORY_ROOT_NODE_INSTANCE, mDirectoryNavDelegate.getDirectoryNodeInstance());
}
@Override
public void onBackPressed() {
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_code_read_go_out, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_go_out) {
finish();
return true;
}
if (id == android.R.id.home) {
if (!mDrawerLayout.isDrawerOpen(GravityCompat.START))
mDrawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
mDirectoryNavDelegate.clearSubscription();
mDirectoryNavDelegate = null;
}
@Override
public void doOpenFile(DirectoryNode node) {
setTitle(node == null ? mDirectoryNode.name : node.name);
mSelectedNode = node;
loadCodeData(node);
}
private void loadCodeData(DirectoryNode node) {
mDrawerLayout.closeDrawer(GravityCompat.START);
mFragment.openFile(node);
}
private void createFragment(DirectoryNode node) {
mFragment = CodeReadFragment.newInstance(node, mDirectoryNode);
mFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction()
.add(R.id.container_code_read, mFragment).commit();
}
@Override
public void onFileOpenStart() {
if (mFragment != null && mFragment.isVisible())
mFragment.getCodeContentLoader().showProgress();
}
@Override
public void onFileOpenEnd() {
}
}