/* * Copyright (C) 2013 Alex Kuiper * * This file is part of PageTurner * * PageTurner is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PageTurner is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PageTurner. If not, see <http://www.gnu.org/licenses/>.* */ package net.nightwhistler.pageturner.activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.*; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockListActivity; import com.google.inject.Inject; import net.nightwhistler.pageturner.*; import roboguice.RoboGuice; import java.util.ArrayList; import java.util.List; public class ManageSitesActivity extends RoboSherlockListActivity { @Inject Configuration config; private CustomOPDSSiteAdapter adapter; private static enum ContextAction { EDIT, DELETE }; @Override protected void onCreate(Bundle savedInstanceState) { Configuration config = RoboGuice.getInjector(this).getInstance(Configuration.class); PageTurner.changeLanguageSetting(this, config); setTheme( config.getTheme() ); super.onCreate(savedInstanceState); List<CustomOPDSSite> sites = config.getCustomOPDSSites(); this.adapter = new CustomOPDSSiteAdapter(sites); setListAdapter(this.adapter); registerForContextMenu(getListView()); } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.edit_sites_menu, menu); return true; } @Override public boolean onOptionsItemSelected( com.actionbarsherlock.view.MenuItem item) { showAddSiteDialog(); return true; } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(Menu.NONE, ContextAction.EDIT.ordinal(), Menu.NONE, R.string.edit ); menu.add(Menu.NONE, ContextAction.DELETE.ordinal(), Menu.NONE, R.string.delete ); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { showEditDialog( adapter.getItem(position) ); } @Override public boolean onContextItemSelected(MenuItem item) { ContextAction action = ContextAction.values()[item.getItemId()]; AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); CustomOPDSSite site = adapter.getItem(info.position); switch (action) { case EDIT: showEditDialog(site); break; case DELETE: adapter.remove(adapter.getItem(info.position)); storeSites(); } return true; } private void storeSites() { List<CustomOPDSSite> sites = new ArrayList<CustomOPDSSite>(); for ( int i=0; i < adapter.getCount(); i++ ) { sites.add( adapter.getItem(i)); } config.storeCustomOPDSSites(sites); } private void showEditDialog(final CustomOPDSSite site) { showSiteDialog(R.string.edit_site, site); } private void showAddSiteDialog() { showSiteDialog(R.string.add_site, null); } private void showSiteDialog(int titleResource, final CustomOPDSSite siteParam ) { final CustomOPDSSite site; if ( siteParam == null ) { site = new CustomOPDSSite(); } else { site = siteParam; } AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(titleResource); LayoutInflater inflater = PlatformUtil.getLayoutInflater(this); View layout = inflater.inflate(R.layout.edit_site, null); builder.setView(layout); final TextView siteName = (TextView) layout.findViewById(R.id.siteName); final TextView siteURL = (TextView) layout.findViewById(R.id.siteUrl); final TextView siteDesc = (TextView) layout.findViewById(R.id.siteDescription); final TextView userName = (TextView) layout.findViewById(R.id.username); final TextView password = (TextView) layout.findViewById(R.id.password); siteName.setText(site.getName()); siteURL.setText(site.getUrl()); siteDesc.setText(site.getDescription()); userName.setText(site.getUserName()); password.setText(site.getPassword()); builder.setPositiveButton(R.string.save, (dialog, which) -> { if ( siteName.getText().toString().trim().length() == 0 ) { Toast.makeText(ManageSitesActivity.this, R.string.msg_name_blank, Toast.LENGTH_SHORT).show(); return; } if ( siteURL.getText().toString().trim().length() == 0 ) { Toast.makeText(ManageSitesActivity.this, R.string.msg_url_blank, Toast.LENGTH_SHORT).show(); return; } site.setName(siteName.getText().toString()); site.setDescription(siteDesc.getText().toString()); site.setUrl(siteURL.getText().toString()); site.setUserName(userName.getText().toString()); site.setPassword(password.getText().toString()); if ( siteParam == null ) { adapter.add(site); } storeSites(); adapter.notifyDataSetChanged(); dialog.dismiss(); }); builder.setNegativeButton(android.R.string.cancel, null ); builder.show(); } private class CustomOPDSSiteAdapter extends ArrayAdapter<CustomOPDSSite> { public CustomOPDSSiteAdapter(List<CustomOPDSSite> sites) { super(ManageSitesActivity.this, 0, sites); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if ( convertView != null ) { view = convertView; } else { view = ( (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE) ).inflate(R.layout.manage_sites, null); } TextView siteName = (TextView) view.findViewById( R.id.siteName ); TextView description = (TextView) view.findViewById( R.id.siteDescription ); CustomOPDSSite site = this.getItem(position); siteName.setText( site.getName() ); description.setText( site.getDescription() ); return view; } } }