123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- package com.ouling.weibo.OAuth;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.ObjectOutputStream;
- import java.util.ArrayList;
- import java.util.Arrays;
- import org.apache.commons.codec.binary.Base64;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.content.SharedPreferences.Editor;
- import android.graphics.Color;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.Gravity;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.AbsListView;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.CheckBox;
- import android.widget.CompoundButton;
- import android.widget.CompoundButton.OnCheckedChangeListener;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.ouling.weibo.MainActivity;
- import com.ouling.weibo.R;
- import com.ouling.weibo.basic.User;
- import com.ouling.weibo.basic.Weibo;
- import com.ouling.weibo.basic.WeiboException;
- import com.ouling.weibo.db.DBAdapter;
- import com.ouling.weibo.http.AccessToken;
- import com.ouling.weibo.http.RequestToken;
- //import com.ouling.weibo.widget.WebViewActivity;
- import com.ouling.weibo.util.WebViewActivity;
- /**
- * 显示已经过验证的用户列表,用于选择登录的用户 添加删除验证用户
- */
- public class OAuthUserList extends Activity {
- private static final int DIS_MODE = 1;// 选择登录用户界面
- private static final int DELETE_MODE = 2;// 删除用户界面
- private boolean[] isCheck;
- private ArrayList<AccessToken> users = new ArrayList<AccessToken>();
- private UserAdapter userAdapter;
- private Button btn_addUser;
- private Button btn_deleteUser;
- private boolean mode;//登录模式为true,删除模式为false
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
- case DIS_MODE:
- btn_deleteUser.setText("删除用户");
- btn_addUser.setText("添加用户");
- mode = true;
- break;
- case DELETE_MODE:
- btn_deleteUser.setText("取消");
- btn_addUser.setText("确定");
- mode = false;
- isCheck = new boolean[users.size()];
- Arrays.fill(isCheck, false);
- break;
- }
- users = DBAdapter.getInstance(OAuthUserList.this)
- .getAllUsersAccessToken();
- userAdapter.notifyDataSetChanged();
- }
- };
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.userlist);
- System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
- System.setProperty("weibo4j.oauth.consumerSecret",
- Weibo.CONSUMER_SECRET);
- mode = true;
- btn_addUser = (Button) findViewById(R.id.btn_addUser);
- btn_addUser.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mode) {
- OAuthConstant.initData();
- // 新浪微博认证页面
- Weibo weibo = OAuthConstant.getInstance().getWeibo();
- try {
- RequestToken requestToken = weibo
- .getOAuthRequestToken("ouling://UserList");
- Uri uri = Uri.parse(requestToken.getAuthenticationURL()
- + "&from=xweibo");
- OAuthConstant.getInstance().setRequestToken(
- requestToken);
- Intent intent = new Intent(OAuthUserList.this,
- WebViewActivity.class);
- intent.putExtra("url", uri.toString());
- OAuthUserList.this.startActivity(intent);
- } catch (WeiboException e) {
- e.printStackTrace();
- }
- } else {
- // 删除用户模式时,为确定删除
- for (int i = 0; i < users.size(); i++) {
- if (isCheck[i])
- DBAdapter.getInstance(OAuthUserList.this)
- .deleteUserToken(users.get(i));
- }
- handler.sendEmptyMessage(DIS_MODE);
- }
- }
- });
- btn_deleteUser = (Button) findViewById(R.id.btn_deleteUser);
- btn_deleteUser.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mode) {
- handler.sendEmptyMessage(DELETE_MODE);
- } else {
- handler.sendEmptyMessage(DIS_MODE);
- }
- }
- });
- // 列出所有已经验证的用户
- ListView listView = (ListView) findViewById(R.id.user_list);
- userAdapter = new UserAdapter(this);
- listView.setAdapter(userAdapter);
- listView.setDividerHeight(5);
- listView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- if (mode) {
- // 选择认证用户登录,认证后不再需要输入密码
- OAuthConstant.getInstance().setAccessToken(
- users.get(position));
- try {
- ByteArrayOutputStream byaos = new ByteArrayOutputStream();
- SharedPreferences sp = OAuthUserList.this
- .getSharedPreferences("ouling",
- Context.MODE_PRIVATE);
- Editor editor = sp.edit();
- ObjectOutputStream oos = new ObjectOutputStream(byaos);
- oos.writeObject(users.get(position));
- String s = new String(Base64.encodeBase64(byaos
- .toByteArray()));
- editor.putString("accessToken", s);
- editor.commit();
- } catch (IOException e) {
- e.printStackTrace();
- Toast.makeText(OAuthUserList.this, "保存token失败",
- Toast.LENGTH_LONG).show();
- }
-
- //跳转到微博用户界面
- startActivity(new Intent(OAuthUserList.this,
- MainActivity.class));
- } else {
- //删除模式时,为勾选或为勾选
- isCheck[position] = !isCheck[position];
- ((ViewHolder) view.getTag()).checkBox
- .setChecked(isCheck[position]);
- }
- }
- });
- }
- @Override
- public void onResume() {
- super.onResume();
- handler.sendEmptyMessage(DIS_MODE);
- }
- @Override
- /*当该activity继续运行时,调用该方法。
- * 当完成用户认证后,返回时调用
- */
- public void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- // System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
- // System.setProperty("weibo4j.oauth.consumerSecret",
- // Weibo.CONSUMER_SECRET);
- Uri uri = intent.getData();
- try {
- //保存用户认证后的返回信息
- RequestToken requestToken = OAuthConstant.getInstance()
- .getRequestToken();
- AccessToken accessToken = requestToken.getAccessToken(uri
- .getQueryParameter("oauth_verifier"));
- OAuthConstant.getInstance().setAccessToken(accessToken);
- Weibo weibo = OAuthConstant.getInstance().getWeibo();
- weibo.setToken(OAuthConstant.getInstance().getToken(),
- OAuthConstant.getInstance().getTokenSecret());
- User user = weibo.showUser(accessToken.getUserId() + "");
- accessToken.setScreenName(user.getScreenName());
- DBAdapter.getInstance(this).saveUserToken(accessToken);
- users = DBAdapter.getInstance(this).getAllUsersAccessToken();
- userAdapter.notifyDataSetChanged();
- } catch (Exception e) {
- e.printStackTrace();
- Toast.makeText(this, "添加失败", Toast.LENGTH_LONG).show();
- }
- this.onResume();
- }
- // 带选择框的listview的适配器
- class UserAdapter extends BaseAdapter {
- Context context;
- public UserAdapter(Context context) {
- this.context = context;
- }
- @Override
- public int getCount() {
- return users.size();
- }
- @Override
- public AccessToken getItem(int position) {
- return users.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(final int position, View convertView,
- ViewGroup parent) {
- View view;
- ViewHolder holder;
- if (convertView != null) {
- holder = (ViewHolder) convertView.getTag();
- view = convertView;
- } else {
- LinearLayout linearLayout = new LinearLayout(context);
- linearLayout.setBackgroundResource(R.drawable.item_bg_triangle);
- linearLayout.setLayoutParams(new AbsListView.LayoutParams(
- LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
- linearLayout.setOrientation(LinearLayout.HORIZONTAL);
- linearLayout.setGravity(Gravity.CENTER_VERTICAL);
- CheckBox checkBox = new CheckBox(context);
- checkBox.setLayoutParams(new LayoutParams(
- LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
- checkBox.setGravity(Gravity.RIGHT);
- linearLayout.addView(checkBox);
- ImageView imageView = new ImageView(context);
- LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
- 40, 40);
- lp.weight = 1;
- imageView.setImageResource(R.drawable.triangle);
- linearLayout.addView(imageView, lp);
- TextView tv = new TextView(context);
- tv.setText(users.get(position).getScreenName());
- tv.setTextSize(20);
- tv.setTextColor(Color.BLACK);
- tv.setLayoutParams(new LayoutParams(
- LinearLayout.LayoutParams.FILL_PARENT,
- LayoutParams.WRAP_CONTENT));
- tv.setGravity(Gravity.CENTER_VERTICAL);
- linearLayout.addView(tv);
- view = linearLayout;
- holder = new ViewHolder();
- holder.tv = tv;
- holder.checkBox = checkBox;
- view.setTag(holder);
- }
- holder.checkBox.setFocusable(false);
- holder.checkBox.setChecked(false);
- holder.checkBox
- .setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView,
- boolean isChecked) {
- isCheck[position] = isChecked;
- }
- });
- if (mode) {
- holder.checkBox.setVisibility(View.GONE);
- } else {
- holder.checkBox.setVisibility(View.VISIBLE);
- }
- holder.tv.setText(users.get(position).getScreenName());
- return view;
- }
- }
- static class ViewHolder {
- TextView tv;
- CheckBox checkBox;
- }
- }
|