package com.swjtu.gcmformojo; import android.app.Activity; import android.app.ActivityManager; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.google.firebase.iid.FirebaseInstanceId; import com.xiaomi.mipush.sdk.MiPushClient; import java.util.ArrayList; import java.util.List; import static com.swjtu.gcmformojo.MyApplication.QQ; import static com.swjtu.gcmformojo.MyApplication.SYS; import static com.swjtu.gcmformojo.MyApplication.WEIXIN; import static com.swjtu.gcmformojo.MyApplication.deviceGcmToken; import static com.swjtu.gcmformojo.MyApplication.deviceMiToken; import static com.swjtu.gcmformojo.MyApplication.fm_APP_ID; import static com.swjtu.gcmformojo.MyApplication.fm_APP_KEY; import static com.swjtu.gcmformojo.MyApplication.getCurTime; import static com.swjtu.gcmformojo.MyApplication.getInstance; import static com.swjtu.gcmformojo.MyApplication.miSettings; import static com.swjtu.gcmformojo.MyApplication.mi_APP_ID; import static com.swjtu.gcmformojo.MyApplication.mi_APP_KEY; import static com.swjtu.gcmformojo.MyApplication.mySettings; public class CurrentUserActivity extends AppCompatActivity { private ArrayList<User> currentUserList; public static Handler userHandler; public ListView currentUserListView; public UserAdapter currentUserAdapter; private static final int REQUEST_EXTERNAL_STORAGE = 1; final private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_current_user); currentUserList = MyApplication.getInstance().getCurrentUserList(); verifyStoragePermissions(this); userHandler = new Handler(){ @Override public void handleMessage(Message msg) { String handlerMsg = (String)msg.obj; if(handlerMsg.equals("UpdateCurrentUserList") && currentUserAdapter!=null){ currentUserAdapter.notifyDataSetChanged(); } super.handleMessage(msg); } }; //SharedPreferences Settings = getSharedPreferences(PREF, Context.MODE_PRIVATE); final String qqReplyUrl=mySettings.getString("edit_text_preference_qq_replyurl",""); final String wxReplyUrl=mySettings.getString("edit_text_preference_wx_replyurl",""); final String qqPackgeName=mySettings.getString("edit_text_preference_qq_packgename","com.tencent.mobileqq"); final String wxPackgeName=mySettings.getString("edit_text_preference_wx_packgename","com.tencent.mm"); String pushType=mySettings.getString("push_type","GCM"); switch (pushType){ case "GCM": deviceGcmToken = FirebaseInstanceId.getInstance().getToken(); //stopMiPush(); // Log.e(MYTAG, "使用GCM推送"); break; case "MiPush": if(shouldInit()) { MiPushClient.registerPush(this, mi_APP_ID, mi_APP_KEY); } //SharedPreferences miSettings = getSharedPreferences("mipush", Context.MODE_PRIVATE); deviceMiToken = miSettings.getString("regId",deviceMiToken); // Log.e(MYTAG, "使用MiPush推送"); break; case "HwPush": com.huawei.android.pushagent.api.PushManager.requestToken(getInstance()); //stopMiPush(); // Log.e(MYTAG, "使用HwPush推送"); break; case "FmPush": com.meizu.cloud.pushsdk.PushManager.register(this, fm_APP_ID, fm_APP_KEY); //stopMiPush(); // Log.e(MYTAG, "使用FmPush推送"); break; default: deviceGcmToken = FirebaseInstanceId.getInstance().getToken(); //stopMiPush(); // Log.e(MYTAG, "默认DefaultGCM推送"); break; } currentUserListView = (ListView) findViewById(R.id.current_user_list_view); addNotfiyContent(); currentUserAdapter = new UserAdapter(CurrentUserActivity.this,R.layout.current_userlist_item,currentUserList); currentUserListView.setAdapter(currentUserAdapter); currentUserListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); currentUserListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { User p=(User) parent.getItemAtPosition(position); Intent intentSend = new Intent(getApplicationContext(), DialogActivity.class); intentSend.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); Bundle msgDialogBundle = new Bundle(); msgDialogBundle.putString("msgId",p.getUserId()); msgDialogBundle.putString("qqReplyUrl",qqReplyUrl); msgDialogBundle.putString("wxReplyUrl",wxReplyUrl); msgDialogBundle.putString("senderType", p.getSenderType()); msgDialogBundle.putString("msgType",p.getUserType()); msgDialogBundle.putString("msgTitle",p.getUserName()); msgDialogBundle.putString("msgBody",p.getUserMessage()); msgDialogBundle.putInt("notifyId", p.getNotifyId()); msgDialogBundle.putString("msgTime",p.getUserTime()); msgDialogBundle.putString("qqPackgeName",qqPackgeName); msgDialogBundle.putString("wxPackgeName",wxPackgeName); intentSend.putExtras(msgDialogBundle); startActivity(intentSend); } }); currentUserListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent,View view,int position,long id) { //系统信息不能删除 if(!currentUserList.get(position).getUserId().equals("0") && !currentUserList.get(position).getUserId().equals("1") && !currentUserList.get(position).getUserId().equals("2")) { currentUserList.remove(position); currentUserAdapter.notifyDataSetChanged(); } return true;//当返回true时,不会触发短按事件 //return false;//当返回false时,会触发短按事件 } }); } private boolean shouldInit() { ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)); List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses(); String mainProcessName = getPackageName(); int myPid = android.os.Process.myPid(); for (ActivityManager.RunningAppProcessInfo info : processInfos) { if (info.pid == myPid && mainProcessName.equals(info.processName)) { return true; } } return false; } public void addNotfiyContent() { //点击通知增加会话内容,用于缓存被杀时列表内容为空的情况,使用通知自带的最后一条消息 Intent intentCurrentListUser = getIntent(); if(intentCurrentListUser!=null) { Bundle msgBundle = intentCurrentListUser.getExtras(); if (msgBundle != null && msgBundle.containsKey("userId")) { if (msgBundle.getInt("notifyId") != -1) { NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(msgBundle.getInt("notifyId")); /* for(int i=0; i<currentUserList.size(); i++){ if(currentUserList.get(i).getNotifyId()==notifyId){ currentUserList.get(i).setMsgCount("0"); if(CurrentUserActivity.userHandler!=null) new WeixinNotificationBroadcastReceiver.userThread().start(); break; } } */ } if (!isHaveMsg(currentUserList, msgBundle.getString("userId"))) { User noifyMsg = new User(msgBundle.getString("userName"), msgBundle.getString("userId"), msgBundle.getString("userType"), msgBundle.getString("userMessage"), msgBundle.getString("userTime"), msgBundle.getString("senderType"), msgBundle.getInt("NotificationId"), msgBundle.getString("msgCount")); currentUserList.add(0, noifyMsg); if (currentUserAdapter != null) { currentUserAdapter.notifyDataSetChanged(); } } } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. switch(item.getItemId()) { case R.id.action_qq_contacts: Intent intentFriend = new Intent(this,QqContactsActivity.class); startActivity(intentFriend); break; case R.id.action_settings: Intent intentSettings = new Intent(this, FragmentPreferences.class); startActivity(intentSettings); break; case R.id.action_help: Intent intentHelp = new Intent(this, HelpActivity.class); startActivity(intentHelp); break; case R.id.action_token: Intent intentToken = new Intent(this, TokenActivity.class); startActivity(intentToken); break; default: return super.onOptionsItemSelected(item); } return true; } private static void verifyStoragePermissions(Activity activity) { // Check if we have read or write permission int writePermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); int readPermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE); if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions( activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); } } // --Commented out by Inspection START (2017/2/27 19:24): // public Handler getHandler(){ // return userHandler; // } // --Commented out by Inspection STOP (2017/2/27 19:24) @Override protected void onResume() { super.onResume(); //进入界面清除通知 NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancelAll(); if (!isHaveMsg(currentUserList,"2")) currentUserList.add(new User("微信机器人(未开放)", "2", WEIXIN, "用于控制服务端。", getCurTime(), "1", 2, "0")); if (!isHaveMsg(currentUserList,"1")) currentUserList.add(new User("QQ机器人(未开放)", "1", QQ, "用于控制服务端。", getCurTime(), "1", 1, "0")); if (!isHaveMsg(currentUserList,"0")) currentUserList.add(new User("欢迎使用!", "0", SYS, "请点击右上角选项获取设备码。", getCurTime(), "1", 0, "0")); } @Override protected void onDestroy() { super.onDestroy(); //getApplicationContext().unregisterReceiver(); // unregisterReceiver("com.xiaomi.push.service.receivers.NetworkStatusReceiver"); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); addNotfiyContent(); } public Boolean isHaveMsg(final ArrayList<User> userList,final String userId){ if(userList.size()==0) { return false; } for(int i=0; i<userList.size(); i++){ String str = userList.get(i).getUserId(); if(str.equals(userId)){ return true; } } return false; } }