package org.sorz.lab.smallcloudemoji.fragments;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.LruCache;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.sorz.lab.smallcloudemoji.R;
import org.sorz.lab.smallcloudemoji.activites.AddRepositoryActivity;
import org.sorz.lab.smallcloudemoji.activites.SettingsActivity;
import org.sorz.lab.smallcloudemoji.db.DaoSession;
import org.sorz.lab.smallcloudemoji.db.DatabaseHelper;
import org.sorz.lab.smallcloudemoji.db.Source;
import org.sorz.lab.smallcloudemoji.db.SourceDao;
import org.sorz.lab.smallcloudemoji.interfaces.IconCacheHolder;
import java.text.DateFormat;
/**
* A simple {@link Fragment} subclass.
* Use the {@link SourceFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class SourceFragment extends Fragment {
private static final String SOURCE_ID = "source_id";
private Context context;
private Source source;
private LruCache<String, Bitmap> iconCache;
private Button installButton;
public static SourceFragment newInstance(long sourceId) {
SourceFragment fragment = new SourceFragment();
Bundle args = new Bundle();
args.putLong(SOURCE_ID, sourceId);
fragment.setArguments(args);
return fragment;
}
public SourceFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getActivity();
DaoSession daoSession = DatabaseHelper.getInstance(context).getDaoSession();
SourceDao sourceDao = daoSession.getSourceDao();
iconCache = ((IconCacheHolder) context).getIconCache();
if (getArguments() != null) {
long sourceId = getArguments().getLong(SOURCE_ID);
source = sourceDao.queryBuilder()
.where(SourceDao.Properties.Id.eq(sourceId))
.unique();
}
setHasOptionsMenu(true);
}
private void setTextViewIfNotNull(View view, int id, String text) {
TextView textView = (TextView) view.findViewById(id);
if (text != null)
textView.setText(text);
}
private void updateInstallState() {
if (source.getInstalled()) {
installButton.setText(R.string.source_installed);
installButton.setEnabled(false);
} else {
installButton.setText(R.string.source_install);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_source, container, false);
installButton = (Button) view.findViewById(R.id.install);
setTextViewIfNotNull(view, R.id.source_name, source.getName());
setTextViewIfNotNull(view, R.id.source_introduction, source.getIntroduction());
setTextViewIfNotNull(view, R.id.source_creator, source.getCreator());
setTextViewIfNotNull(view, R.id.source_creator_url, source.getCreatorUrl());
setTextViewIfNotNull(view, R.id.source_code_url, source.getCodeUrl());
String server = source.getServer();
if ("dropboxusercontent.com".equals(server))
server = "Dropbox";
setTextViewIfNotNull(view, R.id.source_server, server);
String postDate = null;
if (source.getPostDate() != null)
postDate = DateFormat.getDateInstance().format(source.getPostDate());
setTextViewIfNotNull(view, R.id.source_postdate, postDate);
if (source.getIconUrl() != null) {
Bitmap icon = iconCache.get(source.getIconUrl());
if (icon != null)
((ImageView) view.findViewById(R.id.source_icon)).setImageBitmap(icon);
}
// Install URL on store missing "-s" in protocol currently.
// So instead generating it from code URL.
final String installUrl = source.getCodeUrl().replaceFirst("^http", "cloudemoticon");
installButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(installUrl));
intent.putExtra("source_name", source.getName());
startActivityForResult(intent, SettingsActivity.REQUEST_FOR_ADDING_REPOSITORY);
}
});
updateInstallState();
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.source_actions, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_open_browser) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(source.getStoreUrl()));
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SettingsActivity.REQUEST_FOR_ADDING_REPOSITORY) {
if (resultCode == AddRepositoryActivity.RESULT_SUCCESS_ADDED) {
updateInstallState();
// Poke other fragments to update themselves.
if (context instanceof SettingsActivity)
((SettingsActivity) context).onActivityResult(requestCode, resultCode, data);
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}