Android Open Source - kakao-android-sdk-standalone Kakao Story Main Activity






From Project

Back to project page kakao-android-sdk-standalone.

License

The source code is released under:

Apache License

If you think the Android project kakao-android-sdk-standalone listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * Copyright 2014 Minyoung Jeong <kkungkkung@gmail.com>
 * Copyright 2014 Kakao Corp.//from   w  w  w  .  ja  va 2 s . com
 *
 * Redistribution and modification in source or binary forms are not permitted without specific prior written permission.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.kakao.sample.kakaostory;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Locale;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.kakao.APIErrorResult;
import com.kakao.KakaoStoryHttpResponseHandler;
import com.kakao.KakaoStoryPostParamBuilder;
import com.kakao.KakaoStoryPostParamBuilder.PERMISSION;
import com.kakao.KakaoStoryProfile;
import com.kakao.KakaoStoryProfile.BirthdayType;
import com.kakao.KakaoStoryService;
import com.kakao.KakaoStoryUpload;
import com.kakao.LogoutResponseCallback;
import com.kakao.UserManagement;
import com.kakao.UserProfile;
import com.kakao.helper.Logger;
import com.kakao.sample.kakaostory.R.drawable;
import com.kakao.sample.kakaostory.R.id;
import com.kakao.widget.ProfileLayout;

/**
 * ?????? API??? ???, ?????(????? ???)? ??? ??.
 * ??? ????? ??? ?????? {@link KakaoStoryLoginActivity}? ?? ?? ???? ????? ??? ?????????.
 */
public class KakaoStoryMainActivity extends Activity {
    private final String storyPostText = "This Cafe is really awesome!";
    private final String execParam = "place=1111";
    private ImageView background;
    private ProfileLayout profileLayout;
    private TextView birthdayView;
    private String imageURL;
    private UserProfile userProfile;

    /**
     * @param savedInstanceState ?? session ??? ????? ???
     */
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initializeView();
    }

    protected void onResume() {
        super.onResume();
        // ????? ??? caching???? ?? profile? ???.
        userProfile = UserProfile.loadFromCache();
        if (userProfile != null) {
            profileLayout.setUserProfile(userProfile);
        }
    }

    private void redirectLoginActivity() {
        final Intent intent = new Intent(this, KakaoStoryLoginActivity.class);
        startActivity(intent);
        finish();
    }

    private void onClickProfile() {
        KakaoStoryService.requestProfile(new MyKakaoStoryHttpResponseHandler<KakaoStoryProfile>() {
            @Override
            protected void onHttpSuccess(final KakaoStoryProfile storyProfile) {
                Toast.makeText(getApplicationContext(), "success to get story profile", Toast.LENGTH_SHORT).show();
                applyStoryProfileToView(storyProfile);
            }
        });
    }

    private void onClickUpload() {
        try {
            // TODO ???? ????? ??? ? image File??? ???????
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawable.post_image);
            File file = new File(writeStoryImage(getApplicationContext(), bitmap));

            KakaoStoryService.requestUpload(new MyKakaoStoryHttpResponseHandler<KakaoStoryUpload>() {
                @Override
                protected void onHttpSuccess(final KakaoStoryUpload storyProfile) {
                    imageURL = storyProfile.getUrl();
                    Toast.makeText(getApplicationContext(), "success to upload image", Toast.LENGTH_SHORT).show();
                }

            }, file);
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

    private void onClickPost() {
        final KakaoStoryPostParamBuilder postParamBuilder = new KakaoStoryPostParamBuilder(storyPostText, PERMISSION.PUBLIC);
        postParamBuilder.setAndroidExecuteParam(execParam);
        postParamBuilder.setIOSExecuteParam(execParam);
        if (imageURL != null)
            postParamBuilder.setImageURL(imageURL);
        Bundle parameters = postParamBuilder.build();

        KakaoStoryService.requestPost(new MyKakaoStoryHttpResponseHandler<Void>() {
            @Override
            protected void onHttpSuccess(Void resultObj) {
                Toast.makeText(getApplicationContext(), "success to post on KakaoStory", Toast.LENGTH_SHORT).show();
            }
        }, parameters);
    }

    private void onClickLogout() {
        UserManagement.requestLogout(new LogoutResponseCallback() {
            @Override
            protected void onSuccess(final long userId) {
                redirectLoginActivity();
            }

            @Override
            protected void onFailure(final APIErrorResult apiErrorResult) {
                redirectLoginActivity();
            }
        });
    }

    private void initializeView() {
        setContentView(R.layout.main);
        initializeButtons();
        initializeProfileView();
    }

    private void initializeButtons() {
        final Button profileButton = (Button) findViewById(R.id.profile_button);
        profileButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickProfile();
            }
        });

        // ??? ???????? ?? ?????? upload??.
        Button uploadButton = (Button) findViewById(id.upload_button);
        uploadButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickUpload();
            }
        });

        // image upload? ??? ?????? ?? ??????? image upload? ?? ???? text? upload??.
        Button postButton = (Button) findViewById(id.post_button);
        postButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickPost();
            }
        });

        Button logoutButton = (Button) findViewById(id.logout_button);
        logoutButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickLogout();
            }
        });
    }

    private void initializeProfileView() {
        profileLayout = (ProfileLayout) findViewById(R.id.com_kakao_user_profile);
        // background image
        background = (ImageView) findViewById(id.background);
        background.setImageResource(R.drawable.default_background);

        // extra story profile
        birthdayView = (TextView) findViewById(id.birthday);
    }

    // profile view??? story profile??? update ??.
    private void applyStoryProfileToView(final KakaoStoryProfile storyProfile) {
        if (profileLayout != null) {
            if (userProfile != null)
                profileLayout.setUserProfile(userProfile);

            final String nickName = storyProfile.getNickName();
            if (nickName != null)
                profileLayout.setNickname(nickName);

            final String profileImageURL = storyProfile.getProfileImageURL();
            if (profileImageURL != null)
                profileLayout.setProfileURL(profileImageURL);
        }

        final String backgroundURL = storyProfile.getBgImageURL();
        if (background != null && backgroundURL != null ) {
            new DownloadImageTask(background).execute(backgroundURL);
        }

        final Calendar birthday = storyProfile.getBirthdayCalendar();
        final BirthdayType birthDayType = storyProfile.getBirthdayType();
        if (birthdayView != null && birthday != null) {
            StringBuilder displayBirthday = new StringBuilder(8);
            displayBirthday.append(birthday.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US)).append(" ").append(birthday.get(Calendar.DAY_OF_MONTH));
            if (birthDayType != null)
                displayBirthday.append(" (").append(birthDayType.getDisplaySymbol()).append(")");
            birthdayView.setText(displayBirthday.toString());
        }
    }

    private static String writeStoryImage(final Context context, final Bitmap bitmap) throws IOException {
        final File diskCacheDir = new File(context.getCacheDir(), "story");

        if (!diskCacheDir.exists())
            diskCacheDir.mkdirs();

        final String file = diskCacheDir.getAbsolutePath() + File.separator + "temp_" + System.currentTimeMillis() + ".jpg";

        OutputStream out = null;
        try {
            out = new BufferedOutputStream(new FileOutputStream(file), 8 * 1024);
            bitmap.compress(CompressFormat.JPEG, 100, out);
        } finally {
            if (out != null) {
                out.close();
            }
        }

        return file;
    }

    private abstract class MyKakaoStoryHttpResponseHandler<T> extends KakaoStoryHttpResponseHandler<T> {

        @Override
        protected void onHttpSessionClosedFailure(final APIErrorResult errorResult) {
            redirectLoginActivity();
        }

        @Override
        protected void onNotKakaoStoryUser() {
            Toast.makeText(getApplicationContext(), "not KakaoStory user", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected void onFailure(final APIErrorResult errorResult) {
            final String message = "MyKakaoStoryHttpResponseHandler : failure : " + errorResult;
            Logger.getInstance().d(message);
            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
        }
    }

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView imageView;

        public DownloadImageTask(ImageView imageView) {
            this.imageView = imageView;
        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap bitmap = null;
            try {
                InputStream in = new URL(urldisplay).openStream();
                bitmap = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        protected void onPostExecute(Bitmap result) {
            imageView.setImageBitmap(result);
        }
    }
}




Java Source Code List

com.kakao.APIErrorResult.java
com.kakao.AppActionBuilder.java
com.kakao.ErrorCode.java
com.kakao.KakaoLinkParseException.java
com.kakao.KakaoLink.java
com.kakao.KakaoStoryHttpResponseHandler.java
com.kakao.KakaoStoryPostParamBuilder.java
com.kakao.KakaoStoryProfile.java
com.kakao.KakaoStoryService.java
com.kakao.KakaoStoryUpload.java
com.kakao.KakaoTalkHttpResponseHandler.java
com.kakao.KakaoTalkLinkMessageBuilder.java
com.kakao.KakaoTalkProfile.java
com.kakao.KakaoTalkService.java
com.kakao.LoginActivity.java
com.kakao.LogoutResponseCallback.java
com.kakao.MeResponseCallback.java
com.kakao.SessionCallback.java
com.kakao.Session.java
com.kakao.SignupResponseCallback.java
com.kakao.UnlinkResponseCallback.java
com.kakao.UpdateProfileResponseCallback.java
com.kakao.UserManagement.java
com.kakao.UserProfileResponseCallback.java
com.kakao.UserProfile.java
com.kakao.UserResponseCallback.java
com.kakao.User.java
com.kakao.authorization.AuthorizationResult.java
com.kakao.authorization.Authorizer.java
com.kakao.authorization.accesstoken.AccessTokenRequest.java
com.kakao.authorization.accesstoken.AccessToken.java
com.kakao.authorization.accesstoken.GetterAccessToken.java
com.kakao.authorization.accesstoken.package-info.java
com.kakao.authorization.authcode.AuthorizationCodeHandler.java
com.kakao.authorization.authcode.AuthorizationCodeRequest.java
com.kakao.authorization.authcode.AuthorizationCode.java
com.kakao.authorization.authcode.GetterAuthorizationCode.java
com.kakao.authorization.authcode.KakaoWebViewDialog.java
com.kakao.authorization.authcode.LoggedInTalkAuthHandler.java
com.kakao.authorization.authcode.LoggedOutTalkAuthHandler.java
com.kakao.authorization.authcode.OnWebViewCompleteListener.java
com.kakao.authorization.authcode.WebViewAuthHandler.java
com.kakao.authorization.authcode.package-info.java
com.kakao.exception.KakaoException.java
com.kakao.exception.KakaoWebviewException.java
com.kakao.exception.package-info.java
com.kakao.helper.Base64.java
com.kakao.helper.JsonHelper.java
com.kakao.helper.Logger.java
com.kakao.helper.ServerProtocol.java
com.kakao.helper.SharedPreferencesCache.java
com.kakao.helper.SystemInfo.java
com.kakao.helper.TalkProtocol.java
com.kakao.helper.Utility.java
com.kakao.helper.package-info.java
com.kakao.http.AsyncHttpClient.java
com.kakao.http.BodyPart.java
com.kakao.http.FilePart.java
com.kakao.http.HttpRequestBuilder.java
com.kakao.http.HttpRequestTask.java
com.kakao.http.HttpResponseHandler.java
com.kakao.http.HttpTaskManager.java
com.kakao.http.KakaoAsyncHandler.java
com.kakao.http.Multipart.java
com.kakao.http.Request.java
com.kakao.http.Response.java
com.kakao.http.package-info.java
com.kakao.internal.ActionInfo.java
com.kakao.internal.Action.java
com.kakao.internal.KakaoTalkLinkProtocol.java
com.kakao.internal.LinkObject.java
com.kakao.internal.package-info.java
com.kakao.rest.APIHttpRequestTask.java
com.kakao.rest.package-info.java
com.kakao.sample.kakaolink.KakaoLinkMainActivity.java
com.kakao.sample.kakaolink.KakaoLinkSplashActivity.java
com.kakao.sample.kakaolink.package-info.java
com.kakao.sample.kakaostory.KakaoStoryLoginActivity.java
com.kakao.sample.kakaostory.KakaoStoryMainActivity.java
com.kakao.sample.kakaostory.KakaoStorySignupActivity.java
com.kakao.sample.kakaostory.package-info.java
com.kakao.sample.kakaotalk.KakaoTalkLoginActivity.java
com.kakao.sample.kakaotalk.KakaoTalkMainActivity.java
com.kakao.sample.kakaotalk.KakaoTalkSignupActivity.java
com.kakao.sample.kakaotalk.package-info.java
com.kakao.sample.usermgmt.ExtraUserPropertyLayout.java
com.kakao.sample.usermgmt.UserMgmtLoginActivity.java
com.kakao.sample.usermgmt.UsermgmtMainActivity.java
com.kakao.sample.usermgmt.UsermgmtSignupActivity.java
com.kakao.sample.usermgmt.package-info.java
com.kakao.template.loginbase.SampleLoginActivity.java
com.kakao.template.loginbase.SampleSignupActivity.java
com.kakao.template.loginbase.package-info.java
com.kakao.template.loginfree.LoginFreeTemplateActivity.java
com.kakao.template.loginfree.package-info.java
com.kakao.widget.LoginButton.java
com.kakao.widget.ProfileLayout.java
com.kakao.widget.package-info.java
com.kakao.package-info.java