package ee.ioc.phon.android.speak.activity; import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import java.util.ArrayList; import java.util.List; import java.util.Set; import ee.ioc.phon.android.speak.Executable; import ee.ioc.phon.android.speak.ExecutableString; import ee.ioc.phon.android.speak.R; import ee.ioc.phon.android.speak.adapter.RewritesAdapter; import ee.ioc.phon.android.speak.fragment.K6neleListFragment; import ee.ioc.phon.android.speak.model.Combo; import ee.ioc.phon.android.speak.model.Rewrites; import ee.ioc.phon.android.speak.utils.Utils; import ee.ioc.phon.android.speechutils.utils.PreferenceUtils; public class RewritesSelectorActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().add(android.R.id.content, new RewritesSelectorFragment()).commit(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.rewrites_selector, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuRewritesAdd: Intent intent = new Intent(this, RewritesLoaderActivity.class); startActivity(intent); return true; case R.id.menuRewritesHelp: Intent view = new Intent(Intent.ACTION_VIEW); view.setData(Uri.parse(getString(R.string.urlRewritesDoc))); startActivity(view); return true; default: return super.onContextItemSelected(item); } } public static class RewritesSelectorFragment extends K6neleListFragment { private SharedPreferences mPrefs; private Resources mRes; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); mRes = getResources(); } @Override public void onResume() { super.onResume(); initAdapter(); registerForContextMenu(getListView()); setEmptyView(getString(R.string.emptylistRewrites)); } @Override public void onPause() { super.onPause(); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N_MR1) { Context context = getContext(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); Resources res = getResources(); List<Combo> selectedCombos = new ArrayList<>(); Set<String> selectedCombosAsStrings = PreferenceUtils.getPrefStringSet(prefs, res, R.string.keyCombo); for (String combo : selectedCombosAsStrings) { selectedCombos.add(new Combo(context, combo)); } Utils.publishShortcuts(getActivity().getApplicationContext(), selectedCombos, PreferenceUtils.getPrefStringSet(prefs, res, R.string.defaultRewriteTables)); } } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.cm_rewrites, menu); final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; final Rewrites rewrites = (Rewrites) getListView().getItemAtPosition(info.position); if (rewrites.isSelected()) { menu.findItem(R.id.cmRewritesActivate).setTitle(R.string.cmDeactivate); } else { menu.findItem(R.id.cmRewritesActivate).setTitle(R.string.cmActivate); } } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); final Rewrites rewrites = (Rewrites) getListView().getItemAtPosition(info.position); final String name = rewrites.getId(); switch (item.getItemId()) { case R.id.cmRewritesActivate: if (rewrites.toggle()) { toast(String.format(getString(R.string.toastActivated), name)); } else { toast(String.format(getString(R.string.toastDeactivated), name)); } initAdapter(); return true; case R.id.cmRewritesShare: startActivity(Intent.createChooser(rewrites.getSendIntent(), getResources().getText(R.string.labelRewritesShare))); return true; case R.id.cmRewritesTest: startActivity(rewrites.getK6neleIntent()); return true; case R.id.cmRewritesRename: Utils.getTextEntryDialog( getActivity(), getString(R.string.confirmRename), name, new ExecutableString() { public void execute(String newName) { if (!newName.isEmpty()) { rewrites.rename(newName); initAdapter(); } } } ).show(); return true; case R.id.cmRewritesDelete: Utils.getYesNoDialog( getActivity(), String.format(getString(R.string.confirmDelete), name), new Executable() { public void execute() { rewrites.delete(); initAdapter(); } } ).show(); return true; default: return super.onContextItemSelected(item); } } @Override public void onListItemClick(ListView l, View v, int position, long id) { startActivity(((Rewrites) l.getItemAtPosition(position)).getShowIntent()); } private void initAdapter() { List<Rewrites> tables = Rewrites.getTables(mPrefs, mRes); setListAdapter(new RewritesAdapter(this, tables)); ActionBar actionBar = getActivity().getActionBar(); if (actionBar != null) { int count = tables.size(); actionBar.setSubtitle(mRes.getQuantityString(R.plurals.subtitleRewritesSelector, count, count)); } } } }