package org.intermine.app.activity;
/*
* Copyright (C) 2015 InterMine
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. See the LICENSE file for more
* information or http://www.gnu.org/copyleft/lesser.html.
*
*/
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;
import org.intermine.app.R;
import org.intermine.app.core.Gene;
import org.intermine.app.fragment.GeneViewFragment;
import org.intermine.app.util.Sharing;
import org.intermine.app.util.Strs;
import org.intermine.app.util.Uris;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.ButterKnife;
import butterknife.InjectView;
public class GeneViewActivity extends BaseActivity implements GeneViewFragment.GeneActionCallbacks {
private static final String CLASS_PARAM = "class";
private static final String CLASS_DEFAULT_VALUE = "Gene";
private static final String EXTERNALIDS = "externalids";
@InjectView(R.id.default_toolbar)
Toolbar mToolbar;
private Gene mGene;
// --------------------------------------------------------------------------------------------
// Static Methods
// --------------------------------------------------------------------------------------------
/**
* Conventional method for starting activity
*
* @param ctx Context
* @param gene Gene to show basic info about
*/
public static void start(Context ctx, Gene gene) {
Intent intent = new Intent(ctx, GeneViewActivity.class);
intent.putExtra(GeneViewFragment.GENE_EXTRA, gene);
ctx.startActivity(intent);
}
// --------------------------------------------------------------------------------------------
// Activity Lifecycle
// --------------------------------------------------------------------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gene_view_activity);
ButterKnife.inject(this);
initToolbar();
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if (null != bundle) {
mGene = bundle.getParcelable(GeneViewFragment.GENE_EXTRA);
}
if (null == savedInstanceState) {
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction().add(R.id.main, GeneViewFragment.newInstance(mGene)).commit();
}
}
// --------------------------------------------------------------------------------------------
// Event Listeners
// --------------------------------------------------------------------------------------------
@Override
public void onGeneAddedToFavorites(Gene gene) {
getStorage().addGeneToFavorites(gene);
Toast.makeText(this, R.string.gene_added_to_favorites, Toast.LENGTH_LONG).show();
}
@Override
public void onGeneSelectedToBeShared(Gene gene) {
shareText();
}
@Override
public void onShowGeneReport(Gene gene) {
String geneReportUrl = generateGeneReportUrl(gene);
if (!Strs.isNullOrEmpty(geneReportUrl)) {
String title = "Gene Report";
if (!Strs.isNullOrEmpty(gene.getSymbol())) {
title = "Gene " + gene.getSymbol() + " Report";
}
WebActivity.start(this, title, geneReportUrl);
}
}
// --------------------------------------------------------------------------------------------
// Helper Methods
// --------------------------------------------------------------------------------------------
protected void shareText() {
Intent intent = Sharing.generateIntentToSendText(mGene);
PackageManager manager = getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
startActivity(Intent.createChooser(intent,
getResources().getString(R.string.share_message)));
} else {
Toast.makeText(this, "No messenger installed.", Toast.LENGTH_SHORT).show();
}
}
private String generateGeneReportUrl(Gene gene) {
if (!Strs.isNullOrEmpty(gene.getMine())) {
String webAppUrl = mStorage.getMineWebAppUrl(gene.getMine());
if (!Strs.isNullOrEmpty(webAppUrl)) {
Map<String, String> params = new HashMap<>();
params.put(CLASS_PARAM, CLASS_DEFAULT_VALUE);
params.put(EXTERNALIDS, gene.getPrimaryDBId());
return Uris.expandQuery(webAppUrl + getString(R.string.report_path), params);
}
}
return Strs.EMPTY_STRING;
}
private void initToolbar() {
setSupportActionBar(mToolbar);
final ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
}