package it.angelic.soulissclient.fragments; import android.app.AlertDialog; import android.content.Intent; import android.os.Build; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.widget.ImageButton; import android.widget.TableRow; import android.widget.TextView; import java.util.List; import it.angelic.soulissclient.AbstractStatusedFragmentActivity; import it.angelic.soulissclient.Constants; import it.angelic.soulissclient.R; import it.angelic.soulissclient.SoulissApp; import it.angelic.soulissclient.TagDetailActivity; import it.angelic.soulissclient.helpers.AlertDialogHelper; import it.angelic.soulissclient.helpers.SoulissPreferenceHelper; import it.angelic.soulissclient.model.SoulissTag; import it.angelic.soulissclient.model.SoulissTypical; import it.angelic.soulissclient.model.db.SoulissDBTagHelper; import it.angelic.tagviewlib.OnSimpleTagClickListener; import it.angelic.tagviewlib.OnSimpleTagDeleteListener; import it.angelic.tagviewlib.SimpleTagRelativeLayout; import it.angelic.tagviewlib.SimpleTagView; public class AbstractTypicalFragment extends Fragment { protected TableRow infoTags; protected SimpleTagRelativeLayout tagView; protected SoulissPreferenceHelper opzioni; protected SoulissTypical collected; Toolbar actionBar; public AbstractTypicalFragment() { super(); opzioni = SoulissApp.getOpzioni(); } public SoulissTypical getCollected() { return collected; } void setCollected(SoulissTypical collected) { this.collected = collected; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // Rinomina nodo e scelta icona inflater.inflate(R.menu.addto_ctx_menu, menu); Log.i(Constants.TAG, "Inflated Equalizer menu"); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.addTo: SoulissDBTagHelper dbt = new SoulissDBTagHelper(getActivity()); AlertDialog.Builder alert4 = AlertDialogHelper.addTagCommandDialog(getActivity(), dbt, collected, null, null); AlertDialog built = alert4.create(); built.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); built.show(); break; } return super.onOptionsItemSelected(item); } @Override public void onStart() { super.onStart(); actionBar = (Toolbar) getActivity().findViewById(R.id.my_awesome_toolbar); ((AbstractStatusedFragmentActivity) getActivity()).setSupportActionBar(actionBar); ((AbstractStatusedFragmentActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); refreshStatusIcon(); } protected void refreshStatusIcon() { try { View ds = actionBar.getRootView(); if (ds != null) { //TextView info1 = (TextView) ds.findViewById(R.id.TextViewInfoStatus); // TextView info2 = (TextView) ds.findViewById(R.id.TextViewInfo2); ImageButton online = (ImageButton) ds.findViewById(R.id.online_status_icon); TextView statusOnline = (TextView) ds.findViewById(R.id.online_status); TextView actionTitle = (TextView) ds.findViewById(R.id.actionbar_title); if (collected != null) { actionTitle.setText(collected.getNiceName()); } if (!opzioni.isSoulissReachable()) { online.setBackgroundResource(R.drawable.red); statusOnline.setTextColor(ContextCompat.getColor(getContext(), R.color.std_red)); statusOnline.setText(R.string.offline); } else { online.setBackgroundResource(R.drawable.green); statusOnline.setTextColor(ContextCompat.getColor(getContext(), R.color.std_green)); statusOnline.setText(R.string.Online); } statusOnline.invalidate(); } } catch (Exception e) { Log.e(Constants.TAG, "FAIL refresh status icon: " + e.getMessage()); } } protected void refreshTagsInfo() { tagView.postDelayed(new Runnable() { @Override public void run() { try { if (collected.getTypicalDTO().isTagged() || collected.getTypicalDTO().isFavourite()) { SoulissDBTagHelper tagDb = new SoulissDBTagHelper(getContext()); List<SoulissTag> tags = tagDb.getTagsByTypicals(collected); tagView.removeAll(); StringBuilder tagInfo = new StringBuilder(); tagInfo.append(getString(R.string.amongTags)).append("\n"); for (SoulissTag newT : tags) { SimpleTagView nuovoTag = new SimpleTagView(getContext(), newT.getNiceName()); //nuovoTag.setColor(ContextCompat.getColor(getContext(), R.color.black_overlay)); nuovoTag.setFontAwesome("fa-tag"); nuovoTag.setDeletable(true); Log.w(Constants.TAG, "adding tag to view: " + nuovoTag.getText()); tagView.addTag(nuovoTag); //badgeView.setBackgroundColor(ContextCompat.getColor(getContext(),R.color.grey_alpha)); //tagInfo.append("-").append(newT.getNiceName()).append("\n"); } if (infoTags != null) infoTags.setVisibility(View.VISIBLE); //textviewHistoryTags.setText(tagInfo.toString()); } else { if (infoTags != null) infoTags.setVisibility(View.GONE); } } catch (Exception e) { Log.e(Constants.TAG, "FAIL refreshTagsInfo: " + e.getMessage()); } if (tagView != null) { tagView.setOnSimpleTagDeleteListener(new OnSimpleTagDeleteListener() { @Override public void onTagDeleted(SimpleTagView tag) { final SoulissDBTagHelper tagDb = new SoulissDBTagHelper(getContext()); List<SoulissTag> toRemoveL = tagDb.getTagsByTypicals(collected); for (SoulissTag tr : toRemoveL) { if (tr.getName().equals(tag.getText())) { Log.w(Constants.TAG, "Removing " + tr.getName() + " from " + collected.toString()); List<SoulissTypical> temp = tr.getAssignedTypicals(); //necessaria sta roba perche non ce equals? //no, perche il DB fa da se. Ci sarebbe considerazione //filosofica sul fatto che in realta equals e` quella, //e in questo caso la terna nodeid:slot:tagId tagDb.deleteTagTypicalNode(collected, tr); Log.w(Constants.TAG, "Removed TAG from typical"); } } tagView.remove(tag); //Toast.makeText(MainActivity.this, "\"" + tag.text + "\" deleted", Toast.LENGTH_SHORT).show(); } }); tagView.setOnSimpleTagClickListener(new OnSimpleTagClickListener() { @Override public void onSimpleTagClick(SimpleTagView tag) { final SoulissDBTagHelper tagDb = new SoulissDBTagHelper(getContext()); Intent myIntent = new Intent(getActivity(), TagDetailActivity.class); List<SoulissTag> toRemoveL = tagDb.getTagsByTypicals(collected); for (SoulissTag tr : toRemoveL) { if (tr.getName().equals(tag.getText())) { Log.w(Constants.TAG, "Selected " + tr.getName() + " from " + collected.toString()); myIntent.putExtra("TAG", tr.getTagId()); myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); getActivity().startActivity(myIntent); } } } }); } } }, 500);//con calma } /** * Siccome nel rientro da dettaglio nested a dettaglio * gli elementi non sono ancora presenti, si postpone la transazione per sbloccarla * poi con una chiamata a codesto metodo */ protected void scheduleStartPostponedTransition(final View sharedElement) { Log.w(Constants.TAG, "SCHEDULE "); sharedElement.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { sharedElement.getViewTreeObserver().removeOnPreDrawListener(this); Log.w(Constants.TAG, "SCHEDULE StartPostponedTransition "); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getActivity().startPostponedEnterTransition(); } return true; } }); } }