package uni.projecte.Activities.RemoteDBs;
import java.util.HashMap;
import uni.projecte.R;
import uni.projecte.controler.ProjectConfigControler;
import uni.projecte.dataLayer.RemoteDBManager.objects.RemoteProviderPair;
import uni.projecte.dataLayer.RemoteDBManager.objects.RemoteTaxonTabHandler;
import uni.projecte.dataLayer.utils.TaxonUtils;
import uni.projecte.dataTypes.Utilities;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.Html;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Spinner;
import android.widget.TextView;
public class TaxonRemoteTab extends Activity{
private WebView webView;
private Spinner spServices;
private CheckBox cbDefaultTab;
private TextView tvTabTaxon;
private String taxon;
private String filumLetter;
private String defaultProvider;
private long projId;
private boolean pressetedProvider=true;
private ProjectConfigControler projCnfCnt;
private HashMap<String, String> providerList;
private ProgressDialog mProgress;
private RemoteProviderPair[] providerId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.remote_taxon_tab);
webView = (WebView) findViewById(R.id.webview);
spServices = (Spinner) findViewById(R.id.spServices);
cbDefaultTab = (CheckBox) findViewById(R.id.cbDefaultTab);
tvTabTaxon = (TextView) findViewById(R.id.tvTabTaxon);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.setWebViewClient(new DataBaseWebViewClient());
webView.getSettings().setBuiltInZoomControls(true);
/* Intent params */
projId=getIntent().getExtras().getLong("projId");
taxon=getIntent().getExtras().getString("taxon");
filumLetter=getIntent().getExtras().getString("filumLetter");
if(projId<0){
cbDefaultTab.setVisibility(View.GONE);
pressetedProvider=false;
}
if(taxon!=null){
tvTabTaxon.setText(Html.fromHtml("<b>"+TaxonUtils.removeAuthors(taxon)+"</b>"));
RemoteTaxonTabHandler remoteTabHnd= new RemoteTaxonTabHandler(this, filumLetter);
providerId=remoteTabHnd.getAvailableTaxonTabs(taxon.replace(" ","+"), "ca");
providerList=remoteTabHnd.getTabProviderList();
cbDefaultTab.setOnClickListener(cbDefaultListener);
if(providerList.size()>0){
projCnfCnt=new ProjectConfigControler(this);
if(pressetedProvider) defaultProvider=projCnfCnt.getProjectConfig(projId,ProjectConfigControler.DEFAULT_TAB_PROVIDER);
else defaultProvider="bdbc";
fillRemoteTab(providerId);
}
else{
Utilities.showToast(getString(R.string.noTaxonTab), this);
finish();
}
}
else {
Utilities.showToast(getString(R.string.wrongTaxon), this);
finish();
}
}
private void fillRemoteTab(RemoteProviderPair[] providerId) {
int spinnerSelection=findValuePosition(providerId,defaultProvider);
ArrayAdapter<RemoteProviderPair> adapter = new ArrayAdapter<RemoteProviderPair>(this,android.R.layout.simple_spinner_item, providerId);
spServices.setAdapter(adapter);
spServices.setSelection(spinnerSelection);
spServices.setOnItemSelectedListener(spListener);
}
private int findValuePosition(RemoteProviderPair[] providerId,String defaultValue) {
int pos=0;
boolean found=false;
for(int i=0; i<providerId.length && !found && !defaultValue.equals(""); i++){
if(providerId[i].getValue().equals(defaultValue)) {
found=true;
pos=i;
}
}
return pos;
}
private android.view.View.OnClickListener cbDefaultListener = new CheckBox.OnClickListener()
{
public void onClick(View v) {
RemoteProviderPair d = providerId[spServices.getSelectedItemPosition()];
defaultProvider=d.getValue();
projCnfCnt.changeProjectConfig(projId, ProjectConfigControler.DEFAULT_TAB_PROVIDER, defaultProvider);
cbDefaultTab.setEnabled(false);
}
};
private OnItemSelectedListener spListener = new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1, int position,long arg3) {
RemoteProviderPair d = providerId[position];
mProgress = ProgressDialog.show(arg0.getContext(),getString(R.string.loadingTab), d.getSpinnerText(),false,true);
String url=providerList.get(d.getValue());
if(!d.getValue().equals(defaultProvider)) {
cbDefaultTab.setEnabled(true);
cbDefaultTab.setChecked(false);
}
else {
cbDefaultTab.setChecked(true);
cbDefaultTab.setEnabled(false);
}
webView.loadUrl(url);
}
public void onNothingSelected(AdapterView<?> arg0) {
}
};
public class DataBaseWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains(".pdf")){
Uri uri = Uri.parse(url.toString());
Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(browserIntent);
return true;
}
else view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
if(mProgress.isShowing()) {
mProgress.dismiss();
webView.clearHistory();
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}