package com.frozendevs.periodictable.activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.SharedElementCallback;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.frozendevs.periodictable.PeriodicTableApplication;
import com.frozendevs.periodictable.R;
import com.frozendevs.periodictable.fragment.IsotopesFragment;
import com.frozendevs.periodictable.fragment.PropertiesFragment;
import com.frozendevs.periodictable.content.Database;
import com.frozendevs.periodictable.model.ElementProperties;
import com.frozendevs.periodictable.model.adapter.PropertiesAdapter;
import com.frozendevs.periodictable.model.adapter.TableAdapter;
import com.frozendevs.periodictable.model.adapter.ViewPagerAdapter;
import com.frozendevs.periodictable.view.RecyclerView;
import com.squareup.picasso.Callback;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.RequestCreator;
public class PropertiesActivity extends AppCompatActivity {
public static final String EXTRA_ATOMIC_NUMBER = "com.frozendevs.periodictable.AtomicNumber";
public static final String ARGUMENT_PROPERTIES = "properties";
private static final String STATE_ELEMENT_PROPERTIES = "elementProperties";
private ElementProperties mElementProperties;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.properties_activity);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
final PeriodicTableApplication application = (PeriodicTableApplication) getApplication();
final SharedElementCallback callback = application.getSharedElementCallback();
if (callback != null) {
setEnterSharedElementCallback(callback);
}
/*
* Work around shared view alpha state not being restored on exit transition finished.
*/
final View.OnAttachStateChangeListener listener =
application.getOnAttachStateChangeListener();
if (listener != null) {
getWindow().getDecorView().addOnAttachStateChangeListener(listener);
}
}
if (savedInstanceState == null || (mElementProperties = savedInstanceState.getParcelable(
STATE_ELEMENT_PROPERTIES)) == null) {
mElementProperties = Database.getElement(this, ElementProperties.class,
getIntent().getIntExtra(EXTRA_ATOMIC_NUMBER, 1));
}
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(
R.id.collapsing_toolbar);
collapsingToolbar.setTitle(mElementProperties.getName());
Bundle bundle = new Bundle();
bundle.putParcelable(ARGUMENT_PROPERTIES, mElementProperties);
ViewPagerAdapter pagerAdapter = new ViewPagerAdapter(this);
pagerAdapter.addPage(R.string.fragment_title_properties, PropertiesFragment.class, bundle);
pagerAdapter.addPage(R.string.fragment_title_isotopes, IsotopesFragment.class, bundle);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(pagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/NotoSans-Regular.ttf");
TableAdapter tableAdapter = new TableAdapter();
View tileView = findViewById(R.id.tile_view);
tableAdapter.getView(mElementProperties, tileView, (ViewGroup) tileView.getParent());
tileView.setClickable(false);
TextView configuration = (TextView) findViewById(R.id.element_electron_configuration);
configuration.setText(PropertiesAdapter.formatProperty(this,
mElementProperties.getElectronConfiguration()));
configuration.setTypeface(typeface);
TextView shells = (TextView) findViewById(R.id.element_electrons_per_shell);
shells.setText(PropertiesAdapter.formatProperty(this,
mElementProperties.getElectronsPerShell()));
shells.setTypeface(typeface);
TextView electronegativity = (TextView) findViewById(R.id.element_electronegativity);
electronegativity.setText(PropertiesAdapter.formatProperty(this,
mElementProperties.getElectronegativity()));
electronegativity.setTypeface(typeface);
TextView oxidationStates = (TextView) findViewById(R.id.element_oxidation_states);
oxidationStates.setText(PropertiesAdapter.formatProperty(this,
mElementProperties.getOxidationStates()));
oxidationStates.setTypeface(typeface);
String imageUrl = mElementProperties.getImageUrl();
final ImageView backdrop = (ImageView) findViewById(R.id.backdrop);
if (imageUrl.equals("")) {
backdrop.setImageResource(R.drawable.backdrop);
} else {
final ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(
Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String downloadWifiOnlyKey = getString(R.string.preferences_download_wifi_only_key);
RequestCreator requestCreator = Picasso.with(this).load(imageUrl);
if (networkInfo != null && (networkInfo.getState() == NetworkInfo.State.CONNECTED ||
networkInfo.getState() == NetworkInfo.State.CONNECTING) &&
preferences.getBoolean(downloadWifiOnlyKey, false)) {
requestCreator.networkPolicy(NetworkPolicy.OFFLINE);
}
requestCreator.into(backdrop, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
backdrop.setImageResource(R.drawable.backdrop);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.properties_action_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_wiki:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(
mElementProperties.getWikipediaLink())));
return true;
case android.R.id.home:
supportFinishAfterTransition();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.properties_context_menu, menu);
menu.setHeaderTitle(R.string.context_title_options);
super.onCreateContextMenu(menu, view, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
String propertyName, propertyValue;
View view = ((RecyclerView.RecyclerContextMenuInfo) item.getMenuInfo()).targetView;
TextView symbol = (TextView) view.findViewById(R.id.property_symbol);
if (symbol != null) {
propertyName = getString(R.string.property_symbol);
propertyValue = (String) symbol.getText();
} else {
propertyName = (String) ((TextView) view.findViewById(R.id.property_name)).getText();
propertyValue = (String) ((TextView) view.findViewById(R.id.property_value)).getText();
}
switch (item.getItemId()) {
case R.id.context_copy:
((ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE)).
setPrimaryClip(ClipData.newPlainText(propertyName, propertyValue));
return true;
}
return super.onContextItemSelected(item);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(STATE_ELEMENT_PROPERTIES, mElementProperties);
}
}