package org.holoeverywhere.demo.fragments.about; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import org.holoeverywhere.app.ListFragment; import org.holoeverywhere.content.IntentCompat; import org.holoeverywhere.demo.R; import org.holoeverywhere.widget.AdapterView; import org.holoeverywhere.widget.AdapterView.OnItemClickListener; import org.holoeverywhere.widget.ArrayAdapter; import org.holoeverywhere.widget.Spinner; import org.holoeverywhere.widget.TextView; import java.util.ArrayList; import java.util.List; public class DevelopersFragment extends ListFragment { private static final class Developer { private final int description, name; private final List<DeveloperLink> links = new ArrayList<DeveloperLink>(); public Developer(int name, int description) { this.name = name; this.description = description; } public Developer link(DeveloperLink link) { links.add(link); return this; } } private static class DeveloperLink { public CharSequence text; public void onClick() { } } private final class DeveloperLinksAdapter extends ArrayAdapter<DeveloperLink> implements OnItemClickListener { private Developer developer; public DeveloperLinksAdapter(Developer developer) { super(getSupportActivity(), android.R.id.text1); this.developer = developer; addAll(developer.links); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.simple_list_item_1); } TextView text = (TextView) convertView.findViewById(android.R.id.text1); DeveloperLink link = getItem(position); text.setText(link.text); return convertView; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.developer_name); } TextView name = (TextView) convertView.findViewById(android.R.id.text1); name.setText(developer.name); return convertView; } @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { getItem(position).onClick(); } } private final class DevelopersAdapter extends ArrayAdapter<Developer> { public DevelopersAdapter() { super(getSupportActivity(), android.R.id.text1); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.developer); } Spinner name = (Spinner) convertView.findViewById(R.id.developerName); TextView description = (TextView) convertView.findViewById(R.id.developerDescription); Developer developer = getItem(position); DeveloperLinksAdapter linksAdapter = new DeveloperLinksAdapter(developer); name.setAdapter(linksAdapter); name.internalSetOnItemClickListener(linksAdapter); description.setText(developer.description); return convertView; } } private class EmailLink extends DeveloperLink { private final String subject, to; public EmailLink(String to, String subject) { this.to = to; this.subject = subject; text = "Email"; } @Override public void onClick() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ to }); intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent = IntentCompat.createChooser(intent, getText(R.string.select_email_programm)); if (intent != null) { getActivity().startActivity(intent); } } } private class GithubLink extends UrlLink { public GithubLink(String username) { super("https://github.com/" + username + "/"); text = "GitHub"; } } private final class GPlusLink extends UrlLink { public GPlusLink(String userId) { super("https://plus.google.com/" + userId + "/posts"); text = "Google Plus"; } } private class HabrahabrLink extends UrlLink { public HabrahabrLink(String username) { super("http://habrahabr.ru/users/" + username + "/"); text = "Habrahabr"; } } private class UrlLink extends DeveloperLink { private final Uri uri; public UrlLink(String url) { uri = Uri.parse(url); } @Override public void onClick() { Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent = IntentCompat.createChooser(intent, getText(R.string.select_browser)); if (intent != null) { getActivity().startActivity(intent); } } } private DevelopersAdapter mAdapter; private void add(Developer developer) { mAdapter.add(developer); } private DevelopersAdapter createDevelopersAdapter() { final DevelopersAdapter adapter = mAdapter = new DevelopersAdapter(); prepareAdapter(adapter); mAdapter = null; return adapter; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(createDevelopersAdapter()); } @Override public void onResume() { super.onResume(); getSupportActionBar().setSubtitle("Developers"); } private void prepareAdapter(DevelopersAdapter adapter) { Developer developer; developer = new Developer(R.string.developer_prototik, R.string.developer_prototik_desc); developer.link(new GPlusLink("103272077758668000975")); developer.link(new GithubLink("Prototik")); developer.link(new EmailLink("prototypegamez@gmail.com", "HoloEverywhere")); developer.link(new HabrahabrLink("Prototik")); add(developer); developer = new Developer(R.string.developer_brais_gabin, R.string.developer_brais_gabin_desc); developer.link(new GithubLink("BraisGabin")); developer.link(new EmailLink("braisgabin@gmail.com", "HoloEverywhere")); add(developer); developer = new Developer(R.string.developer_wazabe, R.string.developer_wazabe_desc); developer.link(new GPlusLink("108315424589085456181")); developer.link(new GithubLink("ChristopheVersieux")); add(developer); } }