/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package my.home.lehome.fragment;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
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.AdapterView.AdapterContextMenuInfo;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import my.home.lehome.R;
import my.home.lehome.activity.NFCDetectDialog;
import my.home.lehome.adapter.ShortcutArrayAdapter;
import my.home.lehome.helper.MessageHelper;
import my.home.model.entities.Shortcut;
import my.home.model.manager.DBStaticManager;
public class ShortcutFragment extends ListFragment {
private ShortcutArrayAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.shortcut_fragment, container, false);
if (adapter == null) {
adapter = new ShortcutArrayAdapter(getActivity(), R.layout.shortcut_item);
adapter.setData(DBStaticManager.getAllShortcuts(this.getActivity()));
}
setListAdapter(adapter);
// for retainning fragment
setRetainInstance(true);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Indicate that this fragment would like to influence the set of actions in the action bar.
setHasOptionsMenu(true);
registerForContextMenu(getListView());
// AddPattenDialog addPattenDialog = new AddPattenDialog(getActivity());
// addPattenDialog.show();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId() == getListView().getId()) {
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.delete_shortcut_item, menu);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
Shortcut shortcut = adapter.getItem(info.position);
switch (item.getItemId()) {
case R.id.delete_shortcut_item:
adapter.remove(shortcut);
adapter.notifyDataSetChanged();
DBStaticManager.deleteShortcut(this.getActivity(), shortcut.getId());
return true;
case R.id.copy_shortcut_item:
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(getString(R.string.app_name), shortcut.getContent());
clipboard.setPrimaryClip(clip);
return true;
case R.id.write_to_nfc_item:
Intent nfcIntent = new Intent(getActivity(), NFCDetectDialog.class);
nfcIntent.putExtra(NFCDetectDialog.EXTRA_TEXT_CONTENT, shortcut.getContent());
startActivity(nfcIntent);
return true;
default:
return super.onContextItemSelected(item);
}
}
@Override
public void onListItemClick(ListView parent, View v,
int position, long id) {
final Shortcut shortcut = adapter.getItem(position);
shortcut.setInvoke_count(shortcut.getInvoke_count() + 1);
DBStaticManager.updateShortcut(this.getActivity(), shortcut);
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle(R.string.qs_run_favor);
alert.setMessage(getString(R.string.qs_run_quote, shortcut.getContent()));
alert.setPositiveButton(R.string.com_comfirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(),
getResources().getString(R.string.com_exec) + ":" + shortcut.getContent(),
Toast.LENGTH_SHORT).show();
MessageHelper.sendMsgToServer(getActivity(), shortcut.getContent());
}
});
alert.setNegativeButton(R.string.com_cancel, null);
alert.show();
//
// MainActivity mainActivity = (MainActivity) getActivity();
// new SendCommandAsyncTask(mainActivity, shortcut.getContent()).execute();
//
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int id = item.getItemId();
switch (id) {
case R.id.add_shortcut_item:
addListItemWithUserInput();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private void addListItemWithUserInput() {
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
// alert.setTitle(getResources().getString(R.string.add_shortcut_item));
alert.setMessage(getResources().getString(R.string.add_shortcut_item_summ));
// Set an EditText view to get user input
final EditText input = new EditText(getActivity());
input.setSingleLine(true);
input.setHint(R.string.qs_default_input);
alert.setView(input);
alert.setPositiveButton(getResources().getString(R.string.com_comfirm)
, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if (value != null && !value.trim().equals("")) {
addShortcut(value);
}
}
});
alert.setNegativeButton(getResources().getString(R.string.com_cancel),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
// see http://androidsnippets.com/prompt-user-input-with-an-alertdialog
}
public boolean addShortcut(String content) {
if (content == null || content.trim() == "") {
return false;
}
Shortcut shortcut = new Shortcut();
shortcut.setContent(content);
shortcut.setInvoke_count(0);
shortcut.setWeight(1.0);
this.adapter.add(shortcut);
DBStaticManager.addShortcut(this.getActivity(), shortcut);
return true;
}
}