package fr.paug.androidmakers.ui.fragment; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.AppCompatButton; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.List; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; import fr.paug.androidmakers.R; import fr.paug.androidmakers.manager.AgendaRepository; import fr.paug.androidmakers.model.PartnerGroup; import fr.paug.androidmakers.model.Partners; import fr.paug.androidmakers.util.CustomTabUtil; import fr.paug.androidmakers.util.WifiUtil; public class AboutFragment extends Fragment { @BindView(R.id.about_layout) LinearLayout aboutLayout; @BindView(R.id.wifi_autoconnect_progress) View wifiConnectionProgress; @BindView(R.id.wifi_connect_button) AppCompatButton wifiConnectButton; private Unbinder unbinder; public AboutFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Keeps this Fragment alive during configuration changes setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_about, container, false); unbinder = ButterKnife.bind(this, view); final Map<PartnerGroup.PartnerType, PartnerGroup> partners = AgendaRepository.getInstance().getPartners(); if (partners != null) { final PartnerGroup goldSponsorGroup = partners.get(PartnerGroup.PartnerType.GoldSponsor); addPartnerTypeToView(goldSponsorGroup); final PartnerGroup silverSponsorGroup = partners.get(PartnerGroup.PartnerType.SilverSponsor); addPartnerTypeToView(silverSponsorGroup); final PartnerGroup otherSponsorGroup = partners.get(PartnerGroup.PartnerType.OtherSponsor); addPartnerTypeToView(otherSponsorGroup); final PartnerGroup mediaSponsorGroup = partners.get(PartnerGroup.PartnerType.Media); addPartnerTypeToView(mediaSponsorGroup); final PartnerGroup locationGroup = partners.get(PartnerGroup.PartnerType.Location); addPartnerTypeToView(locationGroup); } // listen to network state change final IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); getContext().registerReceiver(wifiStateChangedReceiver, intentFilter); return view; } @OnClick(R.id.twitter_user_button) void openTwitterUser() { Intent twitterIntent; try { // get the Twitter app if possible getActivity().getPackageManager().getPackageInfo("com.twitter.android", 0); twitterIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("twitter://user?screen_name=AndroidMakersFR")); twitterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } catch (Exception e) { // no Twitter app, revert to browser twitterIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/AndroidMakersFR")); } startActivity(twitterIntent); } @OnClick(R.id.twitter_hashtag_button) void openTwitterHashtag() { Intent twitterIntent; try { // get the Twitter app if possible getActivity().getPackageManager().getPackageInfo("com.twitter.android", 0); twitterIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("twitter://search?query=%23AndroidMakers")); twitterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } catch (Exception e) { // no Twitter app, revert to browser twitterIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/search?q=%23AndroidMakers")); } startActivity(twitterIntent); } @OnClick(R.id.google_plus_button) void openGPlus() { Intent gplusIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.gplus))); startActivity(gplusIntent); } @OnClick(R.id.facebook_button) void openFacebookEvent() { Intent facebookIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.fbevent))); startActivity(facebookIntent); } @OnClick(R.id.youtube_button) void openYoutube() { Intent ytIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.ytchannel))); startActivity(ytIntent); } @OnClick(R.id.wifi_connect_button) void connectToVenuesWifi() { final Context context = getContext(); final int networkId = WifiUtil.getVenuesWifiNetworkId(context); if (networkId != -1) { if (WifiUtil.connectToWifi(context, networkId)) { wifiConnectButton.setVisibility(View.GONE); wifiConnectionProgress.setVisibility(View.VISIBLE); } } } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); getContext().unregisterReceiver(wifiStateChangedReceiver); } private final BroadcastReceiver wifiStateChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { onConnectivityChanged(); } }; private void onConnectivityChanged() { if (WifiUtil.isCurrentlyConnectedToVenuesWifi(getContext())) { wifiConnectButton.setVisibility(View.INVISIBLE); wifiConnectionProgress.setVisibility(View.GONE); } else if (wifiConnectionProgress.getVisibility() == View.GONE) { // case where we are not currently trying to connect to the venue's wifi wifiConnectButton.setVisibility(View.VISIBLE); wifiConnectionProgress.setVisibility(View.GONE); } else { wifiConnectButton.setVisibility(View.GONE); wifiConnectionProgress.setVisibility(View.VISIBLE); } } private void addPartnerTypeToView(final PartnerGroup partnerGroup) { if (partnerGroup == null) { return; } final List<Partners> partnersList = partnerGroup.getPartnersList(); if (partnersList != null && partnersList.size() > 0) { final LinearLayout partnersGroupLinearLayout = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.partners_group, null); final TextView partnerGroupHeader = (TextView) partnersGroupLinearLayout.findViewById(R.id.partners_title); partnerGroupHeader.setText(partnerGroup.getPartnerType().getName()); final LinearLayout partnerLogoLayout = (LinearLayout) partnersGroupLinearLayout.findViewById(R.id.partners_layout); final int partnerLogoSizePriority = partnerGroup.getPartnerType().getPartnerLogoSizePriority(); for (int index = 0; index < partnersList.size(); index += partnerLogoSizePriority) { final LinearLayout partnerRow = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.partner_row, null); partnerRow.setWeightSum(partnerLogoSizePriority); if (partnerLogoSizePriority > 0) { final ImageView partner1 = (ImageView) partnerRow.findViewById(R.id.partner1); setLogoInfo(partner1, partnersList.get(index)); } if (partnerLogoSizePriority > 1 && partnersList.size() > index + 1) { final ImageView partner2 = (ImageView) partnerRow.findViewById(R.id.partner2); setLogoInfo(partner2, partnersList.get(index + 1)); } if (partnerLogoSizePriority > 2 && partnersList.size() > index + 2) { final ImageView partner3 = (ImageView) partnerRow.findViewById(R.id.partner3); setLogoInfo(partner3, partnersList.get(index + 2)); } partnerLogoLayout.addView(partnerRow); } aboutLayout.addView(partnersGroupLinearLayout); } } private void setLogoInfo(final ImageView partnerLogo, final Partners partner) { partnerLogo.setVisibility(View.VISIBLE); Glide.with(getContext()) .load("http://androidmakers.fr/img/partners/" + partner.getImageUrl()) .into(partnerLogo); partnerLogo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CustomTabUtil.openChromeTab(getContext(), partner.getLink()); } }); } }