OSDN Git Service

4a4c69904fa87893d557bf6dfb9e3bfde4e48c71
[smackclient/smackclient.git] / app / src / main / java / cc / minsnail / activity / MainActivity.java
1 package cc.minsnail.activity;
2
3 import android.app.FragmentManager;
4 import android.app.FragmentTransaction;
5 import android.content.ComponentName;
6 import android.content.Context;
7 import android.content.DialogInterface;
8 import android.content.Intent;
9 import android.content.ServiceConnection;
10 import android.graphics.drawable.BitmapDrawable;
11 import android.os.Bundle;
12 import android.os.Handler;
13 import android.os.IBinder;
14 import android.os.Message;
15 import android.os.RemoteException;
16 import android.support.v7.app.AlertDialog;
17 import android.support.v7.app.AppCompatActivity;
18 import android.support.v7.widget.Toolbar;
19 import android.util.Log;
20 import android.view.Gravity;
21 import android.view.KeyEvent;
22 import android.view.Menu;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.widget.PopupWindow;
26 import android.widget.TextView;
27
28 import cc.minsnail.aidl.IServiceAidlInterface;
29 import cc.minsnail.fragment.MessageFragment;
30 import cc.minsnail.fragment.RosterFragment;
31 import cc.minsnail.smackclient.R;
32 import cc.minsnail.tools.SharedHelper;
33 import cc.minsnail.view.ImagePopupWindow;
34
35 /**
36  * Created by yg on 2016/9/23.
37  */
38 public class MainActivity extends AppCompatActivity {
39     private static final int SHOW_INFO = 1;
40     private static final String TAG = "MainActivity";
41     private String mToUserName;
42     private IServiceAidlInterface mSmackService;
43     private ServiceConn mConn;
44     private RosterFragment mRosterFragment;
45     private MessageFragment mMessageFragment;
46     private TextView mMessage;
47     private TextView mRoster;
48     private Toolbar mToolbar;
49     private TextView mToolbarTitle;
50     private SharedHelper mSharedHelper;
51     private ImagePopupWindow popupWindow;
52     private Handler handler = new Handler(){
53         @Override
54         public void handleMessage(Message msg) {
55             switch (msg.what){
56                 case SHOW_INFO:
57                     mToolbar.setTitle(mToUserName);
58                     mSharedHelper.put("toUserName",mToUserName);
59                     break;
60             }
61         }
62     };
63     @Override
64     public void onCreate(Bundle savedInstanceState) {
65         super.onCreate(savedInstanceState);
66         setContentView(R.layout.activity_main);
67         mToolbar = (Toolbar) findViewById(R.id.toolbar);
68         //toolbar.setLogo(R.mipmap.ic_launcher);
69         mToolbar.setTitle("");
70         setSupportActionBar(mToolbar);
71         initView();
72         initEvent();
73         mConn = new ServiceConn();
74         Intent intent = new Intent("android.intent.action.SMACK_CLIENT_SERVICE");
75         intent.setPackage("cc.minsnail.www.smackclient");
76         bindService(intent,mConn, Context.BIND_AUTO_CREATE);
77
78         mSharedHelper = new SharedHelper(MainActivity.this);
79         popupWindow = new ImagePopupWindow(MainActivity.this,mMessage);
80     }
81     private void initView(){
82         mToolbarTitle = (TextView) mToolbar.findViewById(R.id.toolbar_title);
83         mMessage = (TextView)findViewById(R.id.message);
84         mRoster = (TextView) findViewById(R.id.roster);
85     }
86     private void initEvent(){
87         mMessage.setOnClickListener(listener);
88         mRoster.setOnClickListener(listener);
89     }
90     private View.OnClickListener listener = new View.OnClickListener() {
91         @Override
92         public void onClick(View view) {
93             switch (view.getId()){
94                 case R.id.message:
95                     mToolbarTitle.setText("消息");
96                     showFragment(0);
97                     break;
98                 case R.id.roster:
99                     mToolbarTitle.setText("好友");
100                     showFragment(1);
101                     break;
102             }
103         }
104     };
105     private void showFragment(int item){
106         FragmentManager fragmentManager = getFragmentManager();
107         FragmentTransaction transaction = fragmentManager.beginTransaction();
108         hideAllFragment(transaction);
109         switch (item){
110             case 0:
111                 if (mMessageFragment == null){
112                     mMessageFragment = new MessageFragment();
113                     transaction.add(R.id.main_fragment,mMessageFragment);
114                 }else {
115                     transaction.show(mMessageFragment);
116                 }
117                 break;
118             case 1:
119                 if (mRosterFragment==null){
120                     mRosterFragment = new RosterFragment(mSmackService);
121                     transaction.add(R.id.main_fragment,mRosterFragment);
122                 }else {
123                     transaction.show(mRosterFragment);
124                 }
125                 break;
126             default:
127                 break;
128         }
129         transaction.commit();
130     }
131     private void hideAllFragment(FragmentTransaction transaction){
132         if (mRosterFragment!=null) transaction.hide(mRosterFragment);
133         if (mMessageFragment!=null) transaction.hide(mMessageFragment);
134     }
135     private void init(){
136         showInfo();
137     }
138     private void showInfo(){
139         new Thread(new Runnable() {
140             @Override
141             public void run() {
142                 if (mSmackService != null){
143                     try {
144                         mToUserName = mSmackService.getAccountAttribute("username");
145                         handler.sendEmptyMessage(SHOW_INFO);
146                     } catch (RemoteException e) {
147                         e.printStackTrace();
148                     }
149                 }
150             }
151         }).start();
152     }
153     @Override
154     public boolean onCreateOptionsMenu(Menu menu) {
155         getMenuInflater().inflate(R.menu.menu_main,menu);
156         return super.onCreateOptionsMenu(menu);
157     }
158
159     @Override
160     public boolean onOptionsItemSelected(MenuItem item) {
161         switch (item.getItemId()){
162             case R.id.add_frd:
163                 Intent intent = new Intent(getApplicationContext(),SearchUserActivity.class);
164                 startActivity(intent);
165                 break;
166             case R.id.add_grp:
167                 // TODO: 2016/10/28
168                 popupWindow.show();
169                 break;
170             case R.id.loginout:
171                 loginOut();
172                 break;
173         }
174         return super.onOptionsItemSelected(item);
175     }
176     private void loginOut(){
177         AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
178         builder.setTitle(R.string.str_login_out_dialog_title)
179                 .setMessage(R.string.str_login_out_dialog_message);
180         builder.setPositiveButton(R.string.str_ok, new DialogInterface.OnClickListener() {
181             @Override
182             public void onClick(DialogInterface dialogInterface, int i) {
183                 // TODO: 2016/11/11  
184             }
185         });
186
187         builder.setNegativeButton(R.string.str_cancel, new DialogInterface.OnClickListener() {
188             @Override
189             public void onClick(DialogInterface dialogInterface, int i) {
190                 // TODO: 2016/11/11  
191             }
192         });
193
194         AlertDialog dialog = builder.create();
195         dialog.show();
196     }
197     class ServiceConn implements ServiceConnection {
198         @Override
199         public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
200             Log.d(TAG,"连接服务器成功");
201             mSmackService = IServiceAidlInterface.Stub.asInterface(iBinder);
202
203             init();
204             showFragment(0);
205         }
206
207         @Override
208         public void onServiceDisconnected(ComponentName componentName) {
209             Log.d(TAG,"连接服务失败");
210             mSmackService = null;
211         }
212     }
213     public boolean onKeyDown(int keyCode, KeyEvent event) {
214         if (keyCode == KeyEvent.KEYCODE_BACK){
215             Log.i(TAG,"finish");
216             this.finish();
217         }
218         return false;
219     }
220     @Override
221     protected void onDestroy() {
222         unbindService(mConn);
223         super.onDestroy();
224     }
225 }