/*
CommandListFragment.java
Copyright (c) 2016 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.app.simplebot.fragment;
import android.app.Fragment;
import android.app.ListFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import org.deviceconnect.android.app.simplebot.R;
import org.deviceconnect.android.app.simplebot.data.DataManager;
import org.deviceconnect.android.app.simplebot.utils.Utils;
import java.util.List;
/**
* コマンド一覧画面
*/
public class CommandListFragment extends ListFragment implements ShowMenuFragment {
/** Listアダプター */
private SimpleCursorAdapter adapter;
/** メニュー */
private Menu mainMenu;
/** CSVファイル読み込み先 */
private static final String CSV_FILE_PATH = Environment.getExternalStorageDirectory() + "/org.deviceconnect.android.app.simplebot/command.csv";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DataManager dm = new DataManager(getActivity());
Cursor cursor = dm.getAll();
String[] from = {DataManager.COLUMN_KEYWORD};
int[] to = {R.id.textCommandList};
int layout = R.layout.command_list_item;
adapter = new SimpleCursorAdapter(getActivity(), layout, cursor, from, to, 0);
setListAdapter(adapter);
}
@Override
public void onDestroy() {
adapter.getCursor().close();
super.onDestroy();
}
@Override
public void onResume() {
super.onResume();
getActivity().setTitle(getString(R.string.app_name) + " [コマンド一覧]");
// テーブル再読み込み
resetData();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.fragment_command_list, container, false);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Fragment fragment = new CommandDetailsFragment();
Bundle bundle = new Bundle();
bundle.putString("mode", "edit");
bundle.putLong("id", id);
fragment.setArguments(bundle);
Utils.transition(fragment, getFragmentManager(), true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.command_menu, menu);
mainMenu = menu;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_add_command:
Fragment fragment = new CommandDetailsFragment();
Bundle bundle = new Bundle();
bundle.putString("mode", "add");
fragment.setArguments(bundle);
Utils.transition(fragment, getFragmentManager(), true);
break;
case R.id.menu_import:
Utils.showConfirmDialog(getActivity(), "コマンドをインポート", CSV_FILE_PATH + "を読み込みます", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
importCommand(getActivity());
}
});
break;
}
return super.onOptionsItemSelected(item);
}
/**
* コマンドをインポートする
* @param context Context
*/
private void importCommand(Context context) {
List<String[]> csv = Utils.readCSV(CSV_FILE_PATH);
if (csv == null) {
Utils.showAlertDialog(context, context.getString(R.string.err_add_data));
return;
}
for (String[] line: csv) {
final DataManager dm = new DataManager(context);
DataManager.Data commandData = dm.convertData(line);
if (commandData == null || !dm.upsert(commandData)) {
Utils.showAlertDialog(context, context.getString(R.string.err_add_data));
break;
}
}
Utils.showAlertDialog(context, context.getString(R.string.success_add_data));
// テーブル再読み込み
resetData();
}
/**
* データを読み込み直してテーブルに通知
*/
private void resetData() {
adapter.getCursor().close();
DataManager dm = new DataManager(getActivity());
Cursor cursor = dm.getAll();
adapter.changeCursor(cursor);
adapter.notifyDataSetChanged();
}
/**
* メニューを表示
*/
public void showMenu() {
mainMenu.performIdentifierAction(R.id.overflow_options, 0);
}
}