com.gorbin.androidsocialnetworksextended.asne.MainFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.gorbin.androidsocialnetworksextended.asne.MainFragment.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Evgeny Gorbin
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *******************************************************************************/
package com.gorbin.androidsocialnetworksextended.asne;

import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.github.gorbin.asne.core.SocialNetwork;
import com.github.gorbin.asne.core.SocialNetworkException;
import com.github.gorbin.asne.core.SocialNetworkManager;
import com.github.gorbin.asne.core.listener.OnLoginCompleteListener;
import com.github.gorbin.asne.core.listener.OnPostingCompleteListener;
import com.github.gorbin.asne.core.listener.OnRequestDetailedSocialPersonCompleteListener;
import com.github.gorbin.asne.core.listener.OnRequestSocialPersonCompleteListener;
import com.github.gorbin.asne.core.persons.SocialPerson;
import com.github.gorbin.asne.facebook.FacebookSocialNetwork;
import com.github.gorbin.asne.googleplus.GooglePlusSocialNetwork;
import com.github.gorbin.asne.instagram.InstagramSocialNetwork;
import com.github.gorbin.asne.linkedin.LinkedInSocialNetwork;
import com.github.gorbin.asne.odnoklassniki.OkSocialNetwork;
import com.github.gorbin.asne.twitter.TwitterSocialNetwork;
import com.github.gorbin.asne.vk.VkSocialNetwork;
import com.gorbin.androidsocialnetworksextended.asne.utils.ADialogs;
import com.gorbin.androidsocialnetworksextended.asne.utils.Constants;
import com.gorbin.androidsocialnetworksextended.asne.utils.SocialCard;
import com.vk.sdk.VKScope;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

import ru.ok.android.sdk.util.OkScope;

public class MainFragment extends Fragment
        implements SocialNetworkManager.OnInitializationCompleteListener, OnLoginCompleteListener,
        OnRequestSocialPersonCompleteListener, OnRequestDetailedSocialPersonCompleteListener {

    //Keys
    public static final String TWITTER_CONSUMER_KEY = "TWITTER_CONSUMER_KEY";
    public static final String TWITTER_CONSUMER_SECRET = "TWITTER_CONSUMER_SECRET";
    public static final String LINKEDIN_CONSUMER_KEY = "LINKEDIN_CONSUMER_KEY";
    public static final String LINKEDIN_CONSUMER_SECRET = "LINKEDIN_CONSUMER_SECRET";
    public static final String VK_KEY = "VK_KEY";
    public static final String OK_APP_ID = "OK_APP_ID";
    public static final String OK_PUBLIC_KEY = "OK_PUBLIC_KEY";
    public static final String OK_SECRET_KEY = "OK_SECRET_KEY";
    public static final String INSTAGRAM_CLIENT_KEY = "INSTAGRAM_KEY";
    public static final String INSTAGRAM_CLIENT_SECRET = "INSTAGRAM_SECRET";

    //redirect urls
    public static final String TWITTER_CALLBACK_URL = "http://github.com/gorbin/ASNE";
    public static final String LINKEDIN_CALLBACK_URL = "https://asne";
    public static final String INSTAGRAM_CALLBACK_URL = "oauth://ASNE";

    public static final String SOCIAL_NETWORK_TAG = "SocialIntegrationMain.SOCIAL_NETWORK_TAG";
    public static SocialNetworkManager mSocialNetworkManager;
    ADialogs loginProgressDialog;
    private SocialCard socialCards[] = new SocialCard[Constants.logo.length];
    private boolean isDetailed[] = new boolean[Constants.logo.length];
    private OnPostingCompleteListener postingComplete = new OnPostingCompleteListener() {
        @Override
        public void onPostSuccessfully(int socialNetworkID) {
            Toast.makeText(getActivity(), "Sent", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(int socialNetworkID, String requestID, String errorMessage, Object data) {
            Toast.makeText(getActivity(), "Error while sending: " + errorMessage, Toast.LENGTH_LONG).show();
        }
    };

    public MainFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_social_network, container, false);
        ((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.app_name);

        loginProgressDialog = new ADialogs(getActivity());
        loginProgressDialog.progress(false, "Login in progress...");

        //      Get VK fingerprints for app
        //        String[] fingerprints = VKUtil.getCertificateFingerprint(getActivity(), getActivity().getPackageName());
        //        Log.d("TAG via vk ", "Fingerprint: " + fingerprints[0]);
        //        printHashKey();

        socialCards[0] = (SocialCard) rootView.findViewById(R.id.tw_card);
        socialCards[1] = (SocialCard) rootView.findViewById(R.id.in_card);
        socialCards[2] = (SocialCard) rootView.findViewById(R.id.gp_card);
        socialCards[3] = (SocialCard) rootView.findViewById(R.id.fb_card);
        socialCards[4] = (SocialCard) rootView.findViewById(R.id.vk_card);
        socialCards[5] = (SocialCard) rootView.findViewById(R.id.ok_card);
        socialCards[6] = (SocialCard) rootView.findViewById(R.id.insta_card);

        //      Connect ASNE SocialNetworks

        ArrayList<String> fbScope = new ArrayList<String>();
        fbScope.addAll(Arrays.asList("public_profile, email, user_friends, user_location, user_birthday"));
        String linkedInScope = "r_basicprofile+r_fullprofile+rw_nus+r_network+w_messages+r_emailaddress+r_contactinfo";
        String[] okScope = new String[] { OkScope.VALUABLE_ACCESS };
        String[] vkScope = new String[] { VKScope.FRIENDS, VKScope.WALL, VKScope.PHOTOS, VKScope.NOHTTPS,
                VKScope.STATUS, };
        String instagramScope = "likes+comments+relationships";

        mSocialNetworkManager = (SocialNetworkManager) getFragmentManager().findFragmentByTag(SOCIAL_NETWORK_TAG);

        if (mSocialNetworkManager == null) {
            mSocialNetworkManager = new SocialNetworkManager();

            FacebookSocialNetwork fbNetwork = new FacebookSocialNetwork(this, fbScope);
            mSocialNetworkManager.addSocialNetwork(fbNetwork);

            TwitterSocialNetwork twNetwork = new TwitterSocialNetwork(this, TWITTER_CONSUMER_KEY,
                    TWITTER_CONSUMER_SECRET, TWITTER_CALLBACK_URL);
            mSocialNetworkManager.addSocialNetwork(twNetwork);

            LinkedInSocialNetwork liNetwork = new LinkedInSocialNetwork(this, LINKEDIN_CONSUMER_KEY,
                    LINKEDIN_CONSUMER_SECRET, LINKEDIN_CALLBACK_URL, linkedInScope);
            mSocialNetworkManager.addSocialNetwork(liNetwork);

            GooglePlusSocialNetwork gpNetwork = new GooglePlusSocialNetwork(this);
            mSocialNetworkManager.addSocialNetwork(gpNetwork);

            VkSocialNetwork vkNetwork = new VkSocialNetwork(this, VK_KEY, vkScope);
            mSocialNetworkManager.addSocialNetwork(vkNetwork);

            OkSocialNetwork okNetwork = new OkSocialNetwork(this, OK_APP_ID, OK_PUBLIC_KEY, OK_SECRET_KEY, okScope);
            mSocialNetworkManager.addSocialNetwork(okNetwork);

            InstagramSocialNetwork instagramNetwork = new InstagramSocialNetwork(this, INSTAGRAM_CLIENT_KEY,
                    INSTAGRAM_CLIENT_SECRET, INSTAGRAM_CALLBACK_URL, instagramScope);
            mSocialNetworkManager.addSocialNetwork(instagramNetwork);

            getFragmentManager().beginTransaction().add(mSocialNetworkManager, SOCIAL_NETWORK_TAG).commit();
            mSocialNetworkManager.setOnInitializationCompleteListener(this);
        } else {
            if (!mSocialNetworkManager.getInitializedSocialNetworks().isEmpty()) {
                for (SocialNetwork socialNetwork : mSocialNetworkManager.getInitializedSocialNetworks()) {
                    socialNetwork.setOnLoginCompleteListener(this);
                    socialNetwork.setOnRequestCurrentPersonCompleteListener(this);
                    socialNetwork.setOnRequestDetailedSocialPersonCompleteListener(this);
                }
                for (int i = 0; i < socialCards.length; i++) {
                    updateSocialCard(socialCards[i], i + 1);
                }
            }
        }
        return rootView;
    }

    // Print hashKey for FB app
    //    public void printHashKey() {
    //    try {
    //    PackageInfo info = getActivity().getPackageManager().getPackageInfo("com.gorbin.androidsocialnetworksextended.asne",
    //    PackageManager.GET_SIGNATURES);
    //    for (Signature signature : info.signatures) {
    //    MessageDigest md = MessageDigest.getInstance("SHA");
    //    md.update(signature.toByteArray());
    //    Log.d("TEMPTAGHASH KEY:",
    //    Base64.encodeToString(md.digest(), Base64.DEFAULT));
    //    }
    //    } catch (PackageManager.NameNotFoundException e) {
    //
    //    } catch (NoSuchAlgorithmException e) {
    //
    //    }
    //
    //    }

    //==================================================================================================

    private void defaultSocialCardData(SocialCard socialCard, int id) {
        socialCard.setName("NoName");
        socialCard.setId("unknown");
        socialCard.setImageResource(Constants.userPhoto[id - 1]);
    }

    @Override
    public void onError(int socialNetworkID, String requestID, String errorMessage, Object data) {
        if (loginProgressDialog != null) {
            loginProgressDialog.cancelProgress();
        }
        Toast.makeText(getActivity(), Constants.handleError(socialNetworkID, requestID, errorMessage),
                Toast.LENGTH_LONG).show();
        updateSocialCard(socialCards[socialNetworkID - 1], socialNetworkID);
    }

    @Override
    public void onSocialNetworkManagerInitialized() {
        for (SocialNetwork socialNetwork : mSocialNetworkManager.getInitializedSocialNetworks()) {
            socialNetwork.setOnLoginCompleteListener(this);
            socialNetwork.setOnRequestCurrentPersonCompleteListener(this);
            socialNetwork.setOnRequestDetailedSocialPersonCompleteListener(this);
        }
        for (int i = 0; i < socialCards.length; i++) {
            updateSocialCard(socialCards[i], i + 1);
        }
    }

    @Override
    public void onLoginSuccess(int id) {
        if (id != 6) {
            loginProgressDialog.cancelProgress();
        }
        updateSocialCard(socialCards[id - 1], id);

    }

    @Override
    public void onRequestSocialPersonSuccess(int socialNetworkId, SocialPerson socialPerson) {
        setSocialCardFromUser(socialPerson, socialCards[socialNetworkId - 1], socialNetworkId - 1);
    }

    @Override
    public void onRequestDetailedSocialPersonSuccess(int socialNetworkId, SocialPerson socialPerson) {
        setSocialCardFromUser(socialPerson, socialCards[socialNetworkId - 1], socialNetworkId - 1);
    }

    //==================================================================================================
    // You can get any SocialNetwork like:
    //    public SocialNetwork getSpecialSocialCard(int networkId) {
    //        SocialNetwork socialNetwork = null;
    //        switch (networkId) {
    //            case 1:
    //                socialNetwork = mSocialNetworkManager.getTwitterSocialNetwork();
    //                break;
    //            case 2:
    //                socialNetwork = mSocialNetworkManager.getLinkedInSocialNetwork();
    //                break;
    //            case 3:
    //                socialNetwork = mSocialNetworkManager.getGooglePlusSocialNetwork();
    //                break;
    //            case 4:
    //                socialNetwork = mSocialNetworkManager.getFacebookSocialNetwork();
    //                break;
    //            case 5:
    //                socialNetwork = mSocialNetworkManager.getVKSocialNetwork();
    //                break;
    //            case 6:
    //                socialNetwork = mSocialNetworkManager.getOKSocialNetwork();
    //                break;
    //        }
    //        return socialNetwork;
    //    }
    //==================================================================================================

    private void updateSocialCard(final SocialCard socialCard, final int networkId) {
        final SocialNetwork socialNetwork = mSocialNetworkManager.getSocialNetwork(networkId);//getSpecialSocialCard(networkId);
        if ((socialNetwork != null) && (socialNetwork.isConnected())) {

            socialCard.setConnectButtonIcon(Constants.logo[networkId - 1]);
            socialCard.setConnectButtonText("Logout");
            socialCard.connect.setVisibility(View.VISIBLE);
            socialCard.connect.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    socialNetwork.logout();
                    updateSocialCard(socialCard, networkId);
                }
            });
            final ADialogs alertDialog = new ADialogs(getActivity());
            socialCard.share.setVisibility(View.VISIBLE);
            socialCard.share.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    ADialogs listDialog = new ADialogs(getActivity());
                    listDialog.setADialogsListListener(new ADialogs.ADialogsListListener() {
                        @Override
                        public void onADialogsListDialog(DialogInterface dialog, int id, Constants.SharePost type) {
                            switch (type) {
                            case POST_MESSAGE:
                                alertDialog.alert(true, "Would you like to post message:", Constants.message,
                                        "Post Message", "Cancel");
                                alertDialog.setADialogsListener(new ADialogs.ADialogsListener() {
                                    @Override
                                    public void onADialogsPositiveClick(DialogInterface dialog) {
                                        socialNetwork.requestPostMessage(Constants.message, postingComplete);
                                    }

                                    @Override
                                    public void onADialogsNegativeClick(DialogInterface dialog) {
                                        dialog.cancel();
                                    }

                                    @Override
                                    public void onADialogsCancel(DialogInterface dialog) {
                                        dialog.cancel();
                                    }
                                });
                                break;
                            case POST_PHOTO:
                                alertDialog.customImageDialog(getActivity(), true, "Would you like to post photo:",
                                        getPhotoFile(), "Post Photo", "Cancel");
                                alertDialog
                                        .setADialogsImageAlertListener(new ADialogs.ADialogsImageAlertListener() {
                                            @Override
                                            public void onADialogsImageAlertPositiveClick(DialogInterface dialog,
                                                    int id) {
                                                socialNetwork.requestPostPhoto(getPhotoFile(), Constants.message,
                                                        postingComplete);
                                            }
                                        });
                                break;
                            case POST_LINK:
                                alertDialog.alert(true, "Would you like to post Link:", Constants.link, "Post Link",
                                        "Cancel");
                                alertDialog.setADialogsListener(new ADialogs.ADialogsListener() {
                                    @Override
                                    public void onADialogsPositiveClick(DialogInterface dialog) {
                                        Bundle postParams = new Bundle();
                                        postParams.putString(SocialNetwork.BUNDLE_LINK, Constants.link);
                                        postParams.putString(SocialNetwork.BUNDLE_NAME, Constants.title);
                                        socialNetwork.requestPostLink(postParams, Constants.message,
                                                postingComplete);
                                    }

                                    @Override
                                    public void onADialogsNegativeClick(DialogInterface dialog) {
                                        dialog.cancel();
                                    }

                                    @Override
                                    public void onADialogsCancel(DialogInterface dialog) {
                                        dialog.cancel();
                                    }
                                });
                                break;
                            case POST_DIALOG:
                                Bundle linkParams = new Bundle();
                                linkParams.putString(SocialNetwork.BUNDLE_LINK, Constants.link);
                                socialNetwork.requestPostDialog(linkParams, postingComplete);
                                break;
                            case NONE:
                                Toast.makeText(getActivity(),
                                        Constants.socialName[networkId - 1] + "SocialNetwork " + "sharing error",
                                        Toast.LENGTH_LONG).show();
                                break;
                            }
                        }
                    });
                    listDialog.listDialog(true, "Share via " + Constants.socialName[networkId - 1],
                            Constants.share[networkId - 1], Constants.shareNum[networkId - 1]);
                    ADialogs alert = new ADialogs(getActivity());
                    if (networkId == 4) {
                        alert.alert(true, "Facebook share warning", Constants.facebookShare, null, "Continue");
                    }
                }
            });
            socialCard.friends.setVisibility(View.VISIBLE);
            socialCard.friends.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    FriendsListFragment friends = FriendsListFragment.newInstance(networkId);
                    getActivity().getSupportFragmentManager().beginTransaction().addToBackStack("friends")
                            .replace(R.id.container, friends).commit();
                }
            });
            socialCard.detail.setVisibility(View.VISIBLE);
            socialCard.detail.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    isDetailed[networkId - 1] = !isDetailed[networkId - 1];
                    socialOrDetailed(networkId, socialCard, socialNetwork);
                }
            });
            socialOrDetailed(networkId, socialCard, socialNetwork);
        } else {
            socialCard.detail.setVisibility(View.GONE);
            socialCard.setConnectButtonIcon(Constants.logo[networkId - 1]);
            socialCard.setConnectButtonText("Login");
            socialCard.connect.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    socialNetwork.requestLogin();
                    if (networkId != 6) {
                        loginProgressDialog.showProgress();
                    }
                }
            });
            socialCard.share.setVisibility(View.GONE);
            socialCard.friends.setVisibility(View.GONE);
            defaultSocialCardData(socialCard, networkId);
        }
    }

    private void socialOrDetailed(int networkId, SocialCard socialCard, SocialNetwork socialNetwork) {
        if (isDetailed[networkId - 1]) {
            socialCard.detail.setText("hide details");
            try {
                socialNetwork.requestDetailedCurrentPerson();
            } catch (SocialNetworkException e) {
                e.printStackTrace();
            }
        } else {
            socialCard.detail.setText("show details...");
            try {
                socialNetwork.requestCurrentPerson();
            } catch (SocialNetworkException e) {
                e.printStackTrace();
            }
        }
    }

    public void setSocialCardFromUser(SocialPerson socialPerson, SocialCard socialCard, int id) {
        socialCard.setName(socialPerson.name);
        String detailedSocialPersonString = socialPerson.toString();
        String infoString = detailedSocialPersonString.substring(detailedSocialPersonString.indexOf("{") + 1,
                detailedSocialPersonString.lastIndexOf("}"));
        socialCard.setId(infoString.replace(", ", "\n"));
        socialCard.setImage(socialPerson.avatarURL, Constants.userPhoto[id], R.drawable.error);
    }

    public File getPhotoFile() {
        File f = new File(getActivity().getCacheDir(), "logo.png");
        try {
            f.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.raw.logo);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos);
        byte[] bitmapdata = bos.toByteArray();
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(f);
            fos.write(bitmapdata);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return f;
    }
}