package com.lq.activity;
import java.io.File;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedList;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.analytics.tracking.android.EasyTracker;
import com.lq.fragment.EditTextDialogFragment;
import com.lq.fragment.EditTextDialogFragment.OnMyDialogInputListener;
import com.lq.fragment.SettingFragment;
import com.lq.util.Constant;
import com.lq.xpressmusic.R;
import com.umeng.analytics.MobclickAgent;
/**
* @author lq 2013-6-1 lq2625304@gmail.com
* */
public class FolderChooseActivity extends FragmentActivity {
private final String TAG = FolderChooseActivity.class.getSimpleName();
private ImageView mView_Close = null;
private TextView mView_Title = null;
private ListView mView_ListView = null;
private Button mView_Confirm = null;
private Button mView_CreateFolder = null;
private ImageButton mView_BackToPrev = null;
private TextView mView_CurrentPath = null;
private ArrayAdapter<String> mAdapter = null;
private ArrayList<String> mCurFolderList = new ArrayList<String>();
private EditTextDialogFragment mCreateNewFolderDialogFragment = null;
/** 路径栈 */
private LinkedList<String> mPathStack = new LinkedList<String>();
/** 当前路径 */
private String mCurPath = Constant.SDCARD_ROOT_PATH;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.folder_choose);
findViews();
initViewsSetting();
updateFolderList();
}
@Override
protected void onStart() {
super.onStart();
EasyTracker.getInstance(this).activityStart(this);
}
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
@Override
protected void onStop() {
super.onStop();
EasyTracker.getInstance(this).activityStop(this);
}
OnMyDialogInputListener mCreateNewFolderListener = new OnMyDialogInputListener() {
@Override
public void onEditTextInputCompleted(String newListName) {
// TODO 在当前目录下新建目录
String newFolerPath = mCurPath + newListName + File.separator;
Log.i(TAG, "onEditTextInputCompleted--->newFolerPath:"
+ newFolerPath);
File file = new File(newFolerPath);
if (file.exists()) {
Log.i(TAG, "onEditTextInputCompleted--->exists");
// 有同名目录,还请重新输入
mCreateNewFolderDialogFragment.setDialogStayShown();
Toast.makeText(getApplicationContext(),
R.string.there_is_a_duplicated_folder,
Toast.LENGTH_SHORT).show();
} else {
Log.i(TAG, "onEditTextInputCompleted--->not exists");
// 木有同名目录才新建
file.mkdir();
updateFolderList();
mCreateNewFolderDialogFragment.setDialogDismiss();
mAdapter.notifyDataSetChanged();
}
}
};
@Override
public void onBackPressed() {
if (mPathStack.size() > 0) {
backToPrevFolder();
} else {
super.onBackPressed();
}
}
/** 返回上级目录 */
private void backToPrevFolder() {
mCurPath = mPathStack.pop();
mView_CurrentPath.setText(mCurPath);
updateFolderList();
if (mPathStack.size() == 0) {
mView_BackToPrev.setVisibility(View.INVISIBLE);
}
}
/** 获取布局中的各个View对象 */
private void findViews() {
mView_Close = (ImageView) findViewById(R.id.close_folder_choose);
mView_Title = (TextView) findViewById(R.id.title_folder_choose);
mView_ListView = (ListView) findViewById(R.id.listview_storage_folders);
mView_Confirm = (Button) findViewById(R.id.confirm_to_save);
mView_CreateFolder = (Button) findViewById(R.id.create_new_folder);
mView_BackToPrev = (ImageButton) findViewById(R.id.back_to_previous);
mView_CurrentPath = (TextView) findViewById(R.id.current_path);
}
/** 初始化各个View的设置 */
private void initViewsSetting() {
// ListView的设置--------------------------------------------------------
mAdapter = new ArrayAdapter<String>(getApplicationContext(),
R.layout.list_item_folder_choose, R.id.folder_name,
mCurFolderList);
mView_ListView.setAdapter(mAdapter);
mView_ListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO 打开目录,记录上一次的目录
mPathStack.push(mCurPath.toString());
mCurPath = mCurPath + mAdapter.getItem(position)
+ File.separator;
mView_CurrentPath.setText(mCurPath);
mView_BackToPrev.setVisibility(View.VISIBLE);
updateFolderList();
}
});
// 关闭按钮的设置--------------------------------------------------------
mView_Close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击关闭按钮,关闭本Activity
FolderChooseActivity.this.finish();
}
});
// 标题设置--------------------------------------------------------
mView_Title.setText(R.string.choose_lyric_save_path);
// 确认保存到当前位置
mView_Confirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
PreferenceManager
.getDefaultSharedPreferences(getApplicationContext())
.edit()
.putString(SettingFragment.KEY_LYRIC_SAVE_PATH,
mCurPath).commit();
FolderChooseActivity.this.finish();
}
});
// 新建目录
mView_CreateFolder.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCreateNewFolderDialogFragment = EditTextDialogFragment
.newInstance(
getResources().getString(
R.string.create_new_folder),
getResources().getString(R.string.app_name),
null, mCreateNewFolderListener);
mCreateNewFolderDialogFragment.show(
getSupportFragmentManager(), null);
}
});
// 回到上一级目录
mView_BackToPrev.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
backToPrevFolder();
}
});
// 获取歌词保存路径
// mCurPath = PreferenceManager.getDefaultSharedPreferences(
// getApplicationContext()).getString(
// SettingFragment.KEY_LYRIC_SAVE_PATH,
// Constant.LYRIC_SAVE_FOLDER_PATH);
mView_CurrentPath.setText(mCurPath);
mView_BackToPrev.setVisibility(View.INVISIBLE);
}
private void updateFolderList() {
File file = new File(mCurPath.toString());
mCurFolderList.clear();
if (file.listFiles() != null) {
for (File child : file.listFiles()) {
if (child.isDirectory()) {
mCurFolderList.add(child.getName());
}
}
mAdapter.sort(mFolderNameComparator);
}
mAdapter.notifyDataSetChanged();
}
Comparator<String> mFolderNameComparator = new Comparator<String>() {
char first_l, first_r;
@Override
public int compare(String lhs, String rhs) {
// 汉字转拼音这个操作非常耗时
// first_l = StringHelper.getPingYin(lhs).toLowerCase().charAt(0);
// first_r = StringHelper.getPingYin(rhs).toLowerCase().charAt(0);
first_l = lhs.toLowerCase().charAt(0);
first_r = rhs.toLowerCase().charAt(0);
if (first_l > first_r) {
return 1;
} else if (first_l < first_r) {
return -1;
} else {
return 0;
}
}
};
}