package de.geeksfactory.opacclient.frontend; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.databinding.DataBindingUtil; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v4.view.animation.FastOutLinearInInterpolator; import android.support.v4.view.animation.LinearOutSlowInInterpolator; import android.support.v7.app.AppCompatActivity; import android.text.Html; import android.transition.ChangeBounds; import android.transition.Transition; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ScrollView; import de.geeksfactory.opacclient.OpacClient; import de.geeksfactory.opacclient.R; import de.geeksfactory.opacclient.apis.EbookServiceApi; import de.geeksfactory.opacclient.apis.OpacApi; import de.geeksfactory.opacclient.databinding.AccountItemDetailActivityBinding; import de.geeksfactory.opacclient.objects.AccountItem; import de.geeksfactory.opacclient.objects.LentItem; import de.geeksfactory.opacclient.objects.ReservedItem; import de.geeksfactory.opacclient.objects.SearchResult; public class AccountItemDetailActivity extends AppCompatActivity { public static final String EXTRA_ITEM = "item"; public static final int RESULT_PROLONG = 1; public static final int RESULT_DOWNLOAD = 2; public static final int RESULT_CANCEL = 3; public static final int RESULT_BOOKING = 4; public static final String EXTRA_DATA = "data"; private AccountItemDetailActivityBinding binding; private AccountItem item = null; @Override @TargetApi(21) public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_accountitem_detail); binding = DataBindingUtil.bind(findViewById(R.id.content)); setSupportActionBar(binding.toolbar); item = (AccountItem) getIntent().getSerializableExtra(EXTRA_ITEM); binding.setItem(item); binding.btnDetails.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(AccountItemDetailActivity.this, SearchResultDetailActivity.class); intent.putExtra(SearchResultDetailFragment.ARG_ITEM_ID, item.getId()); startActivity(intent); } }); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Transition enter = new ChangeBounds() .setInterpolator(new LinearOutSlowInInterpolator()) .setDuration(225); getWindow().setSharedElementEnterTransition(enter); enter.addListener(new Transition.TransitionListener() { @Override public void onTransitionStart(Transition transition) { ScrollView sv = (ScrollView) findViewById(R.id.scrollView); sv.scrollTo(0, 0); } @Override public void onTransitionEnd(Transition transition) { ScrollView sv = (ScrollView) findViewById(R.id.scrollView); sv.scrollTo(0, 0); } @Override public void onTransitionCancel(Transition transition) {} @Override public void onTransitionPause(Transition transition) {} @Override public void onTransitionResume(Transition transition) {} }); Transition exit = new ChangeBounds() .setInterpolator(new FastOutLinearInInterpolator()) .setDuration(195); getWindow().setSharedElementReturnTransition(exit); } View outside = findViewById(R.id.outside); // finish when clicking outside dialog outside.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ActivityCompat.finishAfterTransition(AccountItemDetailActivity.this); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_account_item_detail, menu); MenuItem prolong = menu.findItem(R.id.action_prolong); MenuItem download = menu.findItem(R.id.action_download); MenuItem cancel = menu.findItem(R.id.action_cancel); MenuItem booking = menu.findItem(R.id.action_booking); OpacClient app = (OpacClient) getApplication(); OpacApi api = null; try { api = app.getApi(); } catch (OpacClient.LibraryRemovedException e) { e.printStackTrace(); } if (item instanceof LentItem) { final LentItem i = (LentItem) item; cancel.setVisible(false); booking.setVisible(false); if (i.getProlongData() != null) { prolong.setVisible(true); //ViewCompat.setAlpha(prolong, item.isRenewable() ? 1f : 0.4f); download.setVisible(false); } else if (i.getDownloadData() != null && api != null && api instanceof EbookServiceApi) { prolong.setVisible(false); download.setVisible(true); } else { prolong.setVisible(false); download.setVisible(false); } } else if (item instanceof ReservedItem) { final ReservedItem i = (ReservedItem) item; prolong.setVisible(false); download.setVisible(false); if (i.getBookingData() != null) { booking.setVisible(true); cancel.setVisible(false); } else if (i.getCancelData() != null) { cancel.setVisible(true); booking.setVisible(false); } else { cancel.setVisible(false); booking.setVisible(false); } } return true; } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { Intent intent = new Intent(); int resultCode; int item_id = menuItem.getItemId(); if (item_id == R.id.action_prolong) { resultCode = RESULT_PROLONG; intent.putExtra(EXTRA_DATA, ((LentItem) item).getProlongData()); } else if (item_id == R.id.action_download) { resultCode = RESULT_DOWNLOAD; intent.putExtra(EXTRA_DATA, ((LentItem) item).getDownloadData()); } else if (item_id == R.id.action_cancel) { resultCode = RESULT_CANCEL; intent.putExtra(EXTRA_DATA, ((ReservedItem) item).getCancelData()); } else if (item_id == R.id.action_booking) { resultCode = RESULT_BOOKING; intent.putExtra(EXTRA_DATA, ((ReservedItem) item).getBookingData()); } else { return super.onOptionsItemSelected(menuItem); } setResult(resultCode, intent); supportFinishAfterTransition(); return true; } public static CharSequence getBranch(AccountItem item, String format) { if (item instanceof LentItem) { LentItem lentItem = (LentItem) item; if (lentItem.getLendingBranch() != null && lentItem.getHomeBranch() != null) { return fromHtml(String.format(format, lentItem.getLendingBranch(), lentItem.getHomeBranch())); } else if (lentItem.getLendingBranch() != null) { return fromHtml(lentItem.getLendingBranch()); } else if (lentItem.getHomeBranch() != null) { return fromHtml(lentItem.getHomeBranch()); } else { return null; } } else { return fromHtml(((ReservedItem) item).getBranch()); } } private static CharSequence fromHtml(@Nullable String text) { return text != null ? Html.fromHtml(text) : null; } public static String getMediaTypeName(SearchResult.MediaType mediaType, Context context) { int id = context.getResources().getIdentifier("mediatype_" + mediaType.toString().toLowerCase(), "string", context.getPackageName()); return context.getResources().getString(id); } public static CharSequence getFormat(AccountItem item, Context context) { if (item.getFormat() != null) { return Html.fromHtml(item.getFormat()); } else if (item.getMediaType() != null) { return getMediaTypeName(item.getMediaType(), context); } else { return null; } } }