/*
* Copyright 2010 Renren, Inc.
*
* 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.renren.api.connect.android.view;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import com.renren.api.connect.android.R;
import com.renren.api.connect.android.Renren;
import com.renren.api.connect.android.exception.RenrenAuthError;
import com.renren.api.connect.android.view.ConnectButtonListenerHelper.DefaultConnectButtonListener;
/**
* 自定义的View组件,封装了对登录、登出等的处理。
*
* @author yong.li@opi-corp.com
*
*/
public class ConnectButton extends ImageButton implements OnClickListener {
private Renren renren;
private ConnectButtonListener connectButtonListener = new DefaultConnectButtonListener();
private int loginResourceId;
private int logoutResourceId;
private Activity activity;
public ConnectButton(Context context) {
super(context);
}
public ConnectButton(Context context, AttributeSet attrs) {
super(context, attrs);
this.initImageResourceId(attrs);
}
public ConnectButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.initImageResourceId(attrs);
}
private void initImageResourceId(AttributeSet attrs) {
this.logoutResourceId = attrs.getAttributeResourceValue(null, "renren_logout_resource",
R.drawable.renren_sdk_logout_button);
this.loginResourceId = attrs.getAttributeResourceValue(null, "renren_login_resource",
R.drawable.renren_sdk_login_button);
setImageResource(this.loginResourceId);
}
/**
* 必须初始化后才能使用
*
* @param renren
* @param activity
*/
public void init(final Renren renren, Activity activity) {
this.renren = renren;
this.activity = activity;
this.updateButtonImage();
setBackgroundColor(Color.TRANSPARENT);
setAdjustViewBounds(true);
drawableStateChanged();
setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
if (renren.isSessionKeyValid()) {
//AsyncRenren asyncRunner = new AsyncRenren(renren);
renren.logout(getContext());
uiThreadUpdateButtonImage();
connectButtonListener.onLogouted();
} else {
renren.authorize(this.activity, new LoginListener());
}
}
/**
* 设置Listener。
*
* @param connectButtonListener
*/
public void setConnectButtonListener(ConnectButtonListener connectButtonListener) {
this.connectButtonListener = connectButtonListener;
}
/**
* 更新按钮图片;必须在UI线程中调用。
*/
public void updateButtonImage() {
setImageResource(renren.isSessionKeyValid() ? this.logoutResourceId : this.loginResourceId);
}
private void uiThreadUpdateButtonImage() {
this.post(new Runnable() {
@Override
public void run() {
updateButtonImage();
}
});
}
private final class LoginListener implements RenrenAuthListener {
@Override
public void onComplete(Bundle values) {
uiThreadUpdateButtonImage();
connectButtonListener.onLogined(values);
}
@Override
public void onCancelLogin() {
connectButtonListener.onCancelLogin();
}
@Override
public void onCancelAuth(Bundle values) {
connectButtonListener.onCancelAuth(values);
}
@Override
public void onRenrenAuthError(RenrenAuthError renrenAuthError) {
connectButtonListener.onRenrenAuthError(renrenAuthError);
}
};
}