diff --git a/README.md b/README.md index 60501d2..01f8fdf 100644 --- a/README.md +++ b/README.md @@ -106,4 +106,8 @@ QQ群:807242783 更新记录 === -https://github.com/starrtc/android-demo/wiki/Changelog \ No newline at end of file +https://github.com/starrtc/android-demo/wiki/Changelog + +对比 +=== +webRTC vs starRTC: https://github.com/starrtc/android-demo/raw/master/webRTC_vs_starRTC.mp4 \ No newline at end of file diff --git a/StarRTC_demo.apk b/StarRTC_demo.apk index a7d2023..deb8761 100644 Binary files a/StarRTC_demo.apk and b/StarRTC_demo.apk differ diff --git a/app/app.iml b/app/app.iml index b1c711e..1d8a66c 100644 --- a/app/app.iml +++ b/app/app.iml @@ -23,19 +23,19 @@ - - + + - + - + @@ -84,18 +84,27 @@ - + + + - + + + - + + - + + + + + - + diff --git a/app/build.gradle b/app/build.gradle index c5f29d6..d45b3df 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,10 +2,10 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion '27.0.3' + buildToolsVersion '28.0.3' defaultConfig { applicationId "com.starrtc.demo" - minSdkVersion 18 + minSdkVersion 17 targetSdkVersion 25 versionCode 1 versionName "1.0" @@ -26,6 +26,13 @@ android { jniLibs.srcDirs = ['libs'] } } + + lintOptions { + checkReleaseBuilds false + // Or, if you prefer, you can continue to check for errors in release builds, + // but continue the build even when errors are found: + abortOnError false + } } diff --git a/app/libs/armeabi-v7a/libstarRTC.so b/app/libs/armeabi-v7a/libstarRTC.so index 42adbdc..1fb5494 100644 Binary files a/app/libs/armeabi-v7a/libstarRTC.so and b/app/libs/armeabi-v7a/libstarRTC.so differ diff --git a/app/libs/star_rtc_sdk.jar b/app/libs/star_rtc_sdk.jar index dd89213..797459c 100644 Binary files a/app/libs/star_rtc_sdk.jar and b/app/libs/star_rtc_sdk.jar differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 80b8c3a..1b47847 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + @@ -13,6 +14,8 @@ + + - - - + + --> - --> + android:exported="false"> + + + + + + + + + + + + + + + + + @@ -67,6 +102,8 @@ + + @@ -76,15 +113,13 @@ - + + - + + @@ -110,27 +145,37 @@ android:name=".demo.im.group.MessageGroupListActivity" android:screenOrientation="portrait" /> + + + + + - + + \ No newline at end of file diff --git a/app/src/main/assets/sample.pcm b/app/src/main/assets/sample.pcm deleted file mode 100644 index ba0b419..0000000 Binary files a/app/src/main/assets/sample.pcm and /dev/null differ diff --git a/app/src/main/java/com/starrtc/demo/demo/database/CoreDB.java b/app/src/main/java/com/starrtc/demo/database/CoreDB.java similarity index 88% rename from app/src/main/java/com/starrtc/demo/demo/database/CoreDB.java rename to app/src/main/java/com/starrtc/demo/database/CoreDB.java index e02459c..8f6e819 100644 --- a/app/src/main/java/com/starrtc/demo/demo/database/CoreDB.java +++ b/app/src/main/java/com/starrtc/demo/database/CoreDB.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.database; +package com.starrtc.demo.database; import android.database.Cursor; @@ -96,13 +96,14 @@ public void setHistory(HistoryBean historyBean,Boolean hasRead){ historyBean.setNewMsgCount(0); } if (cursor != null) cursor.close(); - coreDBM.execSQL("delete from " + HISTORY_TABLE + " where type=? and conversationId=?", - new Object[]{historyBean.getType(),historyBean.getConversationId()}); - coreDBM.execSQL("insert into " + HISTORY_TABLE + "(type,conversationId,newMsg,lastMsg,lastTime,groupName,groupCreaterId) values(?,?,?,?,?,?,?)", - new Object[]{historyBean.getType(), historyBean.getConversationId(), + coreDBM.execSQL("UPDATE "+HISTORY_TABLE+" SET newMsg = ?," + + " lastMsg = ?," + + " lastTime = ?" + + " where type=? and conversationId=?", + new Object[]{ historyBean.getNewMsgCount(), historyBean.getLastMsg(), - historyBean.getLastTime(),historyBean.getGroupName(), - historyBean.getGroupCreaterId()}); + historyBean.getLastTime(), + historyBean.getType(), historyBean.getConversationId()}); }else{ if(hasRead){ historyBean.setNewMsgCount(0); diff --git a/app/src/main/java/com/starrtc/demo/demo/database/HistoryBean.java b/app/src/main/java/com/starrtc/demo/database/HistoryBean.java similarity index 92% rename from app/src/main/java/com/starrtc/demo/demo/database/HistoryBean.java rename to app/src/main/java/com/starrtc/demo/database/HistoryBean.java index 143bc0b..7e662de 100644 --- a/app/src/main/java/com/starrtc/demo/demo/database/HistoryBean.java +++ b/app/src/main/java/com/starrtc/demo/database/HistoryBean.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.database; +package com.starrtc.demo.database; public class HistoryBean { private int id = 0; diff --git a/app/src/main/java/com/starrtc/demo/demo/database/MessageBean.java b/app/src/main/java/com/starrtc/demo/database/MessageBean.java similarity index 90% rename from app/src/main/java/com/starrtc/demo/demo/database/MessageBean.java rename to app/src/main/java/com/starrtc/demo/database/MessageBean.java index 270f21b..b61a6c2 100644 --- a/app/src/main/java/com/starrtc/demo/demo/database/MessageBean.java +++ b/app/src/main/java/com/starrtc/demo/database/MessageBean.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.database; +package com.starrtc.demo.database; public class MessageBean { private int id; diff --git a/app/src/main/java/com/starrtc/demo/demo/BaseActivity.java b/app/src/main/java/com/starrtc/demo/demo/BaseActivity.java index 3ee1a85..1c428e6 100644 --- a/app/src/main/java/com/starrtc/demo/demo/BaseActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/BaseActivity.java @@ -5,9 +5,11 @@ import android.view.View; import com.starrtc.demo.R; +import com.starrtc.demo.demo.p2p.VoipP2PRingingActivity; import com.starrtc.demo.demo.voip.VoipRingingActivity; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.IEventListener; +import com.starrtc.starrtcsdk.api.XHClient; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; import org.json.JSONException; @@ -28,6 +30,7 @@ protected void onPause() { private void addListener(){ AEvent.addListener(AEvent.AEVENT_VOIP_REV_CALLING,this); + AEvent.addListener(AEvent.AEVENT_VOIP_P2P_REV_CALLING,this); AEvent.addListener(AEvent.AEVENT_C2C_REV_MSG,this); AEvent.addListener(AEvent.AEVENT_GROUP_REV_MSG,this); AEvent.addListener(AEvent.AEVENT_USER_ONLINE,this); @@ -35,6 +38,7 @@ private void addListener(){ } private void removeListener(){ AEvent.removeListener(AEvent.AEVENT_VOIP_REV_CALLING,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_P2P_REV_CALLING,this); AEvent.removeListener(AEvent.AEVENT_C2C_REV_MSG,this); AEvent.removeListener(AEvent.AEVENT_GROUP_REV_MSG,this); AEvent.removeListener(AEvent.AEVENT_USER_ONLINE,this); @@ -67,6 +71,14 @@ public void run() { startActivity(intent); } break; + case AEvent.AEVENT_VOIP_P2P_REV_CALLING: + if(MLOC.canPickupVoip){ + MLOC.hasNewVoipMsg = true; + Intent intent = new Intent(BaseActivity.this,VoipP2PRingingActivity.class); + intent.putExtra("targetId",eventObj.toString()); + startActivity(intent); + } + break; case AEvent.AEVENT_C2C_REV_MSG: MLOC.hasNewC2CMsg = true; runOnUiThread(new Runnable() { @@ -121,6 +133,13 @@ public void run() { @Override public void run() { MLOC.showMsg(BaseActivity.this,"服务已断开"); + if(findViewById(R.id.loading)!=null) { + if (XHClient.getInstance().getIsOnline()) { + findViewById(R.id.loading).setVisibility(View.INVISIBLE); + } else { + findViewById(R.id.loading).setVisibility(View.VISIBLE); + } + } } }); break; @@ -129,6 +148,13 @@ public void run() { @Override public void run() { // MLOC.showMsg(BaseActivity.this,"服务已连接"); + if(findViewById(R.id.loading)!=null) { + if (XHClient.getInstance().getIsOnline()) { + findViewById(R.id.loading).setVisibility(View.INVISIBLE); + } else { + findViewById(R.id.loading).setVisibility(View.VISIBLE); + } + } } }); break; diff --git a/app/src/main/java/com/starrtc/demo/demo/MLOC.java b/app/src/main/java/com/starrtc/demo/demo/MLOC.java index 9490b71..cf0e9db 100644 --- a/app/src/main/java/com/starrtc/demo/demo/MLOC.java +++ b/app/src/main/java/com/starrtc/demo/demo/MLOC.java @@ -4,6 +4,7 @@ import android.app.Dialog; import android.content.Context; import android.content.SharedPreferences; +import android.content.res.TypedArray; import android.util.Log; import android.view.Gravity; import android.view.View; @@ -13,9 +14,10 @@ import android.widget.Toast; import com.starrtc.demo.R; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.database.MessageBean; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.database.MessageBean; +import com.starrtc.demo.serverAPI.InterfaceUrls; import org.json.JSONException; import org.json.JSONObject; @@ -30,9 +32,25 @@ public class MLOC { public static Context appContext; - public static String agentId = "BjR6QV3vUJ4d"; - public static String authKey; - public static String userId; + public static String agentId = "starrtc181228"; +// public static String agentId = "BjR6QV3vUJ4d"; + public static String authKey = ""; + public static String userId = ""; + + public static String STAR_LOGIN_URL = "ips2.starrtc.com"; + public static String IM_SCHEDULE_URL = "ips2.starrtc.com"; + public static String LIVE_SRC_SCHEDULE_URL = "ips2.starrtc.com"; + public static String LIVE_VDN_SCHEDULE_URL = "ips2.starrtc.com"; + public static String CHAT_ROOM_SCHEDULE_URL = "ips2.starrtc.com"; + public static String VOIP_SERVER_URL = "voip2.starrtc.com"; + +// public static String STAR_LOGIN_URL = "192.168.0.1"; +// public static String IM_SCHEDULE_URL = "192.168.0.1"; +// public static String LIVE_SRC_SCHEDULE_URL = "192.168.0.1"; +// public static String LIVE_VDN_SCHEDULE_URL = "192.168.0.1"; +// public static String CHAT_ROOM_SCHEDULE_URL = "192.168.0.1"; +// public static String VOIP_SERVER_URL = "192.168.0.1"; + public static Boolean hasLogout = false; @@ -41,15 +59,36 @@ public class MLOC { public static boolean hasNewVoipMsg = false; public static boolean canPickupVoip = true; + private static CoreDB coreDB; public static void init(Context context){ appContext = context; coreDB = new CoreDB(); + userId = loadSharedData(context,"userId",userId); + agentId = loadSharedData(context,"agentId",agentId); + InterfaceUrls.setBaseUrl(loadSharedData(context,"workServer","https://api.starrtc.com/demo20181228")); + STAR_LOGIN_URL = loadSharedData(context,"STAR_LOGIN_URL",STAR_LOGIN_URL); + IM_SCHEDULE_URL = loadSharedData(context,"IM_SCHEDULE_URL",IM_SCHEDULE_URL); + LIVE_SRC_SCHEDULE_URL = loadSharedData(context,"LIVE_SRC_SCHEDULE_URL",LIVE_SRC_SCHEDULE_URL); + LIVE_VDN_SCHEDULE_URL = loadSharedData(context,"LIVE_VDN_SCHEDULE_URL",LIVE_VDN_SCHEDULE_URL); + CHAT_ROOM_SCHEDULE_URL = loadSharedData(context,"CHAT_ROOM_SCHEDULE_URL",CHAT_ROOM_SCHEDULE_URL); + VOIP_SERVER_URL = loadSharedData(context,"VOIP_SERVER_URL",VOIP_SERVER_URL); + } + + private static Boolean debug = true; + public static void setDebug(Boolean b){ + debug = b; } public static void d(String tag,String msg){ - Log.d("starSDK_demo_"+tag,msg); + if(debug){ + Log.d("starSDK_demo_"+tag,msg); + } + } + + public static void e(String tag,String msg){ + Log.e("starSDK_demo_"+tag,msg); } private static Toast mToast; @@ -81,7 +120,6 @@ public static void showMsg(Context context ,String str){ } } - public static List getHistoryList(String type){ if(coreDB!=null){ return coreDB.getHistory(type); @@ -122,6 +160,55 @@ public static String loadSharedData(Context context,String key){ return sp.getString(key,""); } + public static String loadSharedData(Context context,String key,String defValue){ + SharedPreferences sp = context.getSharedPreferences("stardemo", Activity.MODE_PRIVATE); + return sp.getString(key,defValue); + } + + public static void saveWorkServer(String host){ + InterfaceUrls.BASE_URL = host; + MLOC.saveSharedData(appContext,"workServer",InterfaceUrls.BASE_URL); + } + + public static void saveUserId(String id){ + MLOC.userId = id; + MLOC.saveSharedData(appContext,"userId",MLOC.userId); + } + public static void saveAgentId(String id){ + MLOC.agentId = id; + saveSharedData(appContext,"agentId",id); + } + + public static void saveLoginServerUrl(String loginServerUrl){ + MLOC.STAR_LOGIN_URL = loginServerUrl; + saveSharedData(appContext,"STAR_LOGIN_URL",STAR_LOGIN_URL); + } + + public static void saveIMSchduleUrl(String imSchduleUrl){ + MLOC.IM_SCHEDULE_URL = imSchduleUrl; + saveSharedData(appContext,"IM_SCHEDULE_URL",IM_SCHEDULE_URL); + } + + public static void saveSrcSchduleUrl(String srcSchduleUrl){ + MLOC.LIVE_SRC_SCHEDULE_URL = srcSchduleUrl; + saveSharedData(appContext,"LIVE_SRC_SCHEDULE_URL",LIVE_SRC_SCHEDULE_URL); + } + + public static void saveVdnSchduleUrl(String vdnSchduleUrl){ + MLOC.LIVE_VDN_SCHEDULE_URL = vdnSchduleUrl; + saveSharedData(appContext,"LIVE_VDN_SCHEDULE_URL",LIVE_VDN_SCHEDULE_URL); + } + + public static void saveChatroomSchduleUrl(String chatroomSchduleUrl){ + MLOC.CHAT_ROOM_SCHEDULE_URL = chatroomSchduleUrl; + saveSharedData(appContext,"CHAT_ROOM_SCHEDULE_URL",CHAT_ROOM_SCHEDULE_URL); + } + + public static void saveVoipServerUrl(String voipServerUrl){ + MLOC.VOIP_SERVER_URL = voipServerUrl; + saveSharedData(appContext,"VOIP_SERVER_URL",VOIP_SERVER_URL); + } + public static void saveC2CUserId(Context context,String uid){ String history = MLOC.loadSharedData(context,"c2cHistory"); if(history.length()>0){ @@ -178,7 +265,6 @@ public static void cleanVoipUserId(Context context){ MLOC.saveSharedData(context,"voipHistory",""); } - static Dialog[] dialogs = new Dialog[1]; static Timer dialogTimer ; static TimerTask timerTask; @@ -249,4 +335,28 @@ public void run() { } } + private static int[] mHeadIconIds ; + public static int getHeadImage(Context context,String userID){ + if(mHeadIconIds==null){ + TypedArray ar = context.getResources().obtainTypedArray(R.array.head_images); + int len = ar.length(); + mHeadIconIds = new int[len]; + for (int i = 0; i < len; i++) { + mHeadIconIds[i] = ar.getResourceId(i, 0); + } + ar.recycle(); + } + + if(userID.isEmpty()){ + return mHeadIconIds[70]; + }else{ + int intId = 0; + char[] chars = userID.toCharArray(); + for (int i = 0; i < chars.length; i++) { + intId+=(int)chars[i]; + } + return mHeadIconIds[intId%70]; + } + } + } diff --git a/app/src/main/java/com/starrtc/demo/demo/SplashActivity.java b/app/src/main/java/com/starrtc/demo/demo/SplashActivity.java index 4da79e5..8e1c707 100644 --- a/app/src/main/java/com/starrtc/demo/demo/SplashActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/SplashActivity.java @@ -8,9 +8,12 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.os.Build; import android.os.Bundle; import android.os.Handler; @@ -20,54 +23,40 @@ import android.view.animation.Animation; import com.starrtc.demo.R; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.listener.XHVoipP2PManagerListener; +import com.starrtc.demo.serverAPI.InterfaceUrls; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.IEventListener; -import com.starrtc.demo.demo.listener.XHChatManagerListener; +import com.starrtc.demo.listener.XHChatManagerListener; import com.starrtc.starrtcsdk.api.XHClient; -import com.starrtc.demo.demo.listener.XHGroupManagerListener; -import com.starrtc.demo.demo.listener.XHLoginManagerListener; +import com.starrtc.demo.listener.XHGroupManagerListener; +import com.starrtc.demo.listener.XHLoginManagerListener; import com.starrtc.starrtcsdk.api.XHConstants; -import com.starrtc.starrtcsdk.api.XHSDKConfig; -import com.starrtc.demo.demo.listener.XHVoipManagerListener; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.api.XHCustomConfig; +import com.starrtc.demo.listener.XHVoipManagerListener; +import com.starrtc.starrtcsdk.apiInterface.IXHErrorCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import com.starrtc.starrtcsdk.core.StarRtcCore; -import com.starrtc.starrtcsdk.core.utils.StarLog; +import com.starrtc.starrtcsdk.socket.StarSocket; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.Random; public class SplashActivity extends Activity implements IEventListener { private boolean isLogin = false; + private final boolean checkNetState = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN); setContentView(R.layout.activity_splash); + checkPermission(); - MLOC.userId = MLOC.loadSharedData(getApplicationContext(),"userId"); - if(MLOC.userId.equals("")){ - MLOC.userId = ""+(new Random().nextInt(900000)+100000); - MLOC.saveSharedData(getApplicationContext(),"userId",MLOC.userId); - } - isLogin = StarRtcCore.getInstance().getIsOnline(); - if(isLogin){ - startAnimation(); - }else{ - MLOC.init(getApplicationContext()); - addListener(); - //初始化 -// XHClient.getInstance().setLogLevel(0,0); - XHClient.getInstance().initSDK(this, new XHSDKConfig(MLOC.agentId),MLOC.userId); - XHClient.getInstance().getChatManager().addListener(new XHChatManagerListener()); - XHClient.getInstance().getGroupManager().addListener(new XHGroupManagerListener()); - XHClient.getInstance().getVoipManager().addListener(new XHVoipManagerListener()); - XHClient.getInstance().getLoginManager().addListener(new XHLoginManagerListener()); - checkPermission(); - } } private int times = 0; @@ -76,6 +65,7 @@ private void checkPermission(){ times++; final List permissionsList = new ArrayList<>(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ + if ((checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE)!= PackageManager.PERMISSION_GRANTED)) permissionsList.add(Manifest.permission.ACCESS_NETWORK_STATE); if ((checkSelfPermission(Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED)) permissionsList.add(Manifest.permission.READ_PHONE_STATE); if ((checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)) permissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); if ((checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)) permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE); @@ -107,19 +97,90 @@ public void onClick(DialogInterface arg0, int arg1) { }).show(); } }else{ - startAnimation(); - InterfaceUrls.demoLogin(MLOC.userId); -// loginPublicTest(); + init(); } }else{ - startAnimation(); + init(); + } + } + + private void init(){ + isLogin = StarRtcCore.getInstance().getIsOnline(); + if(!isLogin){ + MLOC.init(getApplicationContext()); + if(MLOC.userId.equals("")){ + MLOC.userId = ""+(new Random().nextInt(900000)+100000); + MLOC.saveUserId(MLOC.userId); + } + addListener(); + //初始化 + + + XHCustomConfig customConfig = XHCustomConfig.getInstance(); + customConfig.setAppId(MLOC.agentId); + customConfig.setLoginServerUrl(MLOC.STAR_LOGIN_URL); + customConfig.setChatroomScheduleUrl(MLOC.CHAT_ROOM_SCHEDULE_URL); + customConfig.setLiveSrcScheduleUrl(MLOC.LIVE_SRC_SCHEDULE_URL); + customConfig.setLiveVdnScheduleUrl(MLOC.LIVE_VDN_SCHEDULE_URL); + customConfig.setImScheduleUrl(MLOC.IM_SCHEDULE_URL); + customConfig.setVoipServerUrl(MLOC.VOIP_SERVER_URL); + customConfig.initSDK(this, MLOC.userId, new IXHErrorCallback() { + @Override + public void error(final String errMsg, Object data) { + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(errMsg); + } + }); + } + }); + XHClient.getInstance().getChatManager().addListener(new XHChatManagerListener()); + XHClient.getInstance().getGroupManager().addListener(new XHGroupManagerListener()); + XHClient.getInstance().getVoipManager().addListener(new XHVoipManagerListener()); + XHClient.getInstance().getVoipP2PManager().addListener(new XHVoipP2PManagerListener()); + XHClient.getInstance().getLoginManager().addListener(new XHLoginManagerListener()); + } + startAnimation(); + checkNetworkConnectAndLogin(); + } + + @Override + public void onRequestPermissionsResult(int requestCode, final String[] permissions, int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + checkPermission(); + } + + private void checkNetworkConnectAndLogin(){ + if(isConnectInternet(this)){ InterfaceUrls.demoLogin(MLOC.userId); -// loginPublicTest(); +// loginPublicTest(); + }else{ + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + checkNetworkConnectAndLogin(); + } + },3000); } } + public boolean isConnectInternet(Context mContext) { + if(!checkNetState){ + return true; + }else{ + ConnectivityManager conManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = conManager.getActiveNetworkInfo(); + if (networkInfo != null) { + return networkInfo.isAvailable(); + } + return false; + } + } + + private void loginPublicTest(){ - XHClient.getInstance().getLoginManager().loginPublic( new IXHCallback() { + XHClient.getInstance().getLoginManager().loginPublic( new IXHResultCallback() { @Override public void success(Object data) { isLogin = true; @@ -138,12 +199,6 @@ public void run() { }); } - @Override - public void onRequestPermissionsResult(int requestCode, final String[] permissions, int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - checkPermission(); - } - private void addListener(){ AEvent.addListener(AEvent.AEVENT_LOGIN,this); } @@ -157,7 +212,7 @@ public void dispatchEvent(String aEventID, boolean success, Object eventObj) { case AEvent.AEVENT_LOGIN: if(success){ MLOC.d("", (String) eventObj); - XHClient.getInstance().getLoginManager().login(MLOC.authKey, new IXHCallback() { + XHClient.getInstance().getLoginManager().login(MLOC.authKey, new IXHResultCallback() { @Override public void success(Object data) { isLogin = true; @@ -183,6 +238,7 @@ public void run() { @SuppressLint("WrongConstant") private void startAnimation(){ + isLogin = true; final View eye = findViewById(R.id.eye); eye.setAlpha(0.2f); final View black = findViewById(R.id.black_view); diff --git a/app/src/main/java/com/starrtc/demo/demo/StarAvDemoActivity.java b/app/src/main/java/com/starrtc/demo/demo/StarAvDemoActivity.java index 905699a..d9a1ace 100644 --- a/app/src/main/java/com/starrtc/demo/demo/StarAvDemoActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/StarAvDemoActivity.java @@ -4,13 +4,14 @@ import android.content.Intent; import android.os.Bundle; import android.view.View; +import android.widget.ImageView; import android.widget.TextView; import com.starrtc.demo.R; +import com.starrtc.demo.demo.audiolive.AudioLiveListActivity; import com.starrtc.demo.demo.im.IMDemoActivity; -import com.starrtc.demo.demo.service.FloatWindowsService; +import com.starrtc.demo.demo.miniclass.MiniClassListActivity; import com.starrtc.demo.demo.setting.SettingActivity; -import com.starrtc.demo.demo.test.LoopTestActivity; import com.starrtc.demo.demo.videolive.VideoLiveListActivity; import com.starrtc.demo.demo.videomeeting.VideoMeetingListActivity; import com.starrtc.demo.demo.voip.VoipListActivity; @@ -27,18 +28,17 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_star_rtc_main); ((TextView)findViewById(R.id.title_text)).setText(R.string.app_name); - MLOC.init(getApplicationContext()); - addListener(); +// MLOC.initSDK(getApplicationContext()); MLOC.userId = MLOC.loadSharedData(getApplicationContext(),"userId"); - + ((ImageView)findViewById(R.id.userinfo_head)).setImageResource(MLOC.getHeadImage(this,MLOC.userId)); ((TextView)findViewById(R.id.userinfo_id)).setText(MLOC.userId); findViewById(R.id.btn_main_im).setOnClickListener(this); findViewById(R.id.btn_main_voip).setOnClickListener(this); findViewById(R.id.btn_main_meeting).setOnClickListener(this); findViewById(R.id.btn_main_live).setOnClickListener(this); - findViewById(R.id.btn_main_loop).setOnClickListener(this); - findViewById(R.id.btn_main_logout).setOnClickListener(this); findViewById(R.id.btn_main_setting).setOnClickListener(this); + findViewById(R.id.btn_main_class).setOnClickListener(this); + findViewById(R.id.btn_main_audio).setOnClickListener(this); } @Override @@ -58,7 +58,7 @@ public void onResume(){ startActivity(new Intent(StarAvDemoActivity.this,SplashActivity.class)); finish(); } - isOnline = StarRtcCore.getInstance().getIsOnline(); + isOnline = XHClient.getInstance().getIsOnline(); if(isOnline){ findViewById(R.id.loading).setVisibility(View.INVISIBLE); }else{ @@ -71,25 +71,7 @@ public void onResume(){ @Override public void onRestart(){ super.onRestart(); - addListener(); - } - - private void addListener(){ - AEvent.addListener(AEvent.AEVENT_VOIP_REV_CALLING,this); - AEvent.addListener(AEvent.AEVENT_C2C_REV_MSG,this); - AEvent.addListener(AEvent.AEVENT_GROUP_REV_MSG,this); - AEvent.addListener(AEvent.AEVENT_USER_ONLINE,this); - AEvent.addListener(AEvent.AEVENT_USER_OFFLINE,this); } - private void removeListener(){ - AEvent.removeListener(AEvent.AEVENT_VOIP_REV_CALLING,this); - AEvent.removeListener(AEvent.AEVENT_C2C_REV_MSG,this); - AEvent.removeListener(AEvent.AEVENT_GROUP_REV_MSG,this); - AEvent.removeListener(AEvent.AEVENT_USER_ONLINE,this); - AEvent.removeListener(AEvent.AEVENT_USER_OFFLINE,this); - } - - @Override public void onClick(View v) { switch (v.getId()){ @@ -103,15 +85,6 @@ public void onClick(View v) { Intent intent3 = new Intent(this, VideoLiveListActivity.class); startActivity(intent3); break; - case R.id.btn_main_loop: - startActivity(new Intent(this,LoopTestActivity.class)); - break; - case R.id.btn_main_logout: - XHClient.getInstance().getLoginManager().logout(); - stopService(new Intent(StarAvDemoActivity.this, FloatWindowsService.class)); - removeListener(); - finish(); - break; case R.id.btn_main_setting: Intent intent6 = new Intent(this, SettingActivity.class); startActivity(intent6); @@ -120,6 +93,14 @@ public void onClick(View v) { Intent intent7= new Intent(this, IMDemoActivity.class); startActivity(intent7); break; + case R.id.btn_main_class: + Intent intent8= new Intent(this, MiniClassListActivity.class); + startActivity(intent8); + break; + case R.id.btn_main_audio: + Intent intent9= new Intent(this, AudioLiveListActivity.class); + startActivity(intent9); + break; } } diff --git a/app/src/main/java/com/starrtc/demo/demo/audiolive/AudioLiveActivity.java b/app/src/main/java/com/starrtc/demo/demo/audiolive/AudioLiveActivity.java new file mode 100644 index 0000000..76ad0b3 --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/audiolive/AudioLiveActivity.java @@ -0,0 +1,864 @@ +package com.starrtc.demo.demo.audiolive; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.listener.XHLiveManagerListener; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.starrtcsdk.api.XHConstants; +import com.starrtc.starrtcsdk.api.XHLiveItem; +import com.starrtc.starrtcsdk.api.XHLiveManager; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; +import com.starrtc.starrtcsdk.core.StarRtcCore; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; +import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class AudioLiveActivity extends BaseActivity { + + public static String CREATER_ID = "CREATER_ID"; //创建者ID + public static String LIVE_TYPE = "LIVE_TYPE"; //创建信息 + public static String LIVE_ID = "LIVE_ID"; //直播ID + public static String LIVE_NAME = "LIVE_NAME"; //直播名称 + + private TextView vRoomId; + private ListView vMsgList; + private View vSendBtn; + private EditText vEditText; + private TextView vLinkBtn; + private View vPushBtn; + private View vChatBtn; + private View vAudioBtn; + + + private List mPlayerList; + private List mDatas; + private MyChatroomListAdapter mAdapter ; + + private String mPrivateMsgTargetId; + private XHLiveManager liveManager; + private Boolean isUploader = false; + private String createrId; + private String liveId; + private String liveName; + private XHConstants.XHLiveType liveType; + + private TextView vCreatorName; + private ImageView vCreatorHead; + private ArrayList vNameArray; + private ArrayList vHeadArray; + private String[] mNameArray = new String[]{"","","","","",""}; + + private StarRTCAudioManager starRTCAudioManager; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | + WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + setContentView(R.layout.activity_audio_live); + + starRTCAudioManager = StarRTCAudioManager.create(this); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + + } + }); + + createrId = getIntent().getStringExtra(CREATER_ID); + liveName = getIntent().getStringExtra(LIVE_NAME); + liveId = getIntent().getStringExtra(LIVE_ID); + liveType = (XHConstants.XHLiveType) getIntent().getSerializableExtra(LIVE_TYPE); + + if(TextUtils.isEmpty(liveId)){ + if(createrId.equals(MLOC.userId)){ + if(TextUtils.isEmpty(liveName)||liveType==null){ + MLOC.showMsg(this,"没有直播信息"); + stopAndFinish(); + return; + } + }else{ + if(TextUtils.isEmpty(liveName)||liveType==null){ + MLOC.showMsg(this,"没有直播信息"); + stopAndFinish(); + return; + } + } + } + + vCreatorName = (TextView) findViewById(R.id.mc_id); + vCreatorHead = (ImageView) findViewById(R.id.mic_head); + vNameArray = new ArrayList<>(); + vNameArray.add((TextView) findViewById(R.id.mc_id_1)); + vNameArray.add((TextView) findViewById(R.id.mc_id_2)); + vNameArray.add((TextView) findViewById(R.id.mc_id_3)); + vNameArray.add((TextView) findViewById(R.id.mc_id_4)); + vNameArray.add((TextView) findViewById(R.id.mc_id_5)); + vNameArray.add((TextView) findViewById(R.id.mc_id_6)); + vHeadArray = new ArrayList<>(); + vHeadArray.add((ImageView) findViewById(R.id.mc_head_1)); + vHeadArray.add((ImageView) findViewById(R.id.mc_head_2)); + vHeadArray.add((ImageView) findViewById(R.id.mc_head_3)); + vHeadArray.add((ImageView) findViewById(R.id.mc_head_4)); + vHeadArray.add((ImageView) findViewById(R.id.mc_head_5)); + vHeadArray.add((ImageView) findViewById(R.id.mc_head_6)); + + liveManager = XHClient.getInstance().getLiveManager(this); + liveManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_BOTTOM); + liveManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_AUDIO_ONLY); + liveManager.addListener(new XHLiveManagerListener()); + + + addListener(); + vRoomId = (TextView) findViewById(R.id.live_id_text); + vRoomId.setText("直播间名称:"+ liveName); + + findViewById(R.id.back_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onBackPressed(); + } + }); + vEditText = (EditText) findViewById(R.id.id_input); + vEditText.clearFocus(); + mDatas = new ArrayList<>(); + vMsgList = (ListView) findViewById(R.id.msg_list); + + vMsgList.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); + vMsgList.setStackFromBottom(true); + + mAdapter = new MyChatroomListAdapter(); + vMsgList.setAdapter(mAdapter); + vMsgList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + String clickUserId = mDatas.get(position).fromId; + String msgText = mDatas.get(position).contentData; + showManagerDialog(clickUserId,msgText); + } + }); + + vSendBtn = findViewById(R.id.send_btn); + vSendBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String txt = vEditText.getText().toString(); + if(!TextUtils.isEmpty(txt)){ + sendChatMsg(txt); + vEditText.setText(""); + } + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(vEditText.getWindowToken(), 0); + } + }); + + vLinkBtn = (TextView) findViewById(R.id.link_btn); + vPushBtn = findViewById(R.id.push_btn); + vAudioBtn = findViewById(R.id.audio_btn); + vChatBtn = findViewById(R.id.chat_btn); + + if(createrId!=null&&createrId.equals(MLOC.userId)){ + vLinkBtn.setVisibility(View.GONE); + vAudioBtn.setVisibility(View.VISIBLE); + }else{ + vAudioBtn.setVisibility(View.GONE); + vLinkBtn.setVisibility(View.VISIBLE); + } + vLinkBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(isUploader){ + new AlertDialog.Builder(AudioLiveActivity.this).setCancelable(true) + .setTitle("是否结束上麦?") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + + } + }).setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + isUploader = false; + liveManager.changeToAudience(); + runOnUiThread(new Runnable() { + @Override + public void run() { + vLinkBtn.setText("上麦"); + vAudioBtn.setVisibility(View.GONE); + findViewById(R.id.audio_container).setVisibility(View.GONE); + findViewById(R.id.chat_container).setVisibility(View.VISIBLE); + } + }); + } + } + ).show(); + }else{ + new AlertDialog.Builder(AudioLiveActivity.this).setCancelable(true) + .setTitle("是否申请上麦?") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + + } + }).setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + liveManager.applyToBroadcaster(createrId); + } + } + ).show(); + } + } + }); + + vAudioBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(isUploader){ + findViewById(R.id.audio_container).setVisibility(View.VISIBLE); + findViewById(R.id.chat_container).setVisibility(View.GONE); + } + } + }); + vChatBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + findViewById(R.id.audio_container).setVisibility(View.GONE); + findViewById(R.id.chat_container).setVisibility(View.VISIBLE); + } + }); + + vPushBtn.setOnTouchListener(new View.OnTouchListener() { + int lastAction = -111; + @Override + public boolean onTouch(View v, MotionEvent event) { + if(isUploader){ + if(lastAction!=event.getAction()){ + switch (event.getAction()){ + case MotionEvent.ACTION_DOWN: + liveManager.setAudioEnable(true); + vPushBtn.setSelected(true); + break; + case MotionEvent.ACTION_OUTSIDE: + case MotionEvent.ACTION_UP: + liveManager.setAudioEnable(false); + vPushBtn.setSelected(false); + break; + } + lastAction = event.getAction(); + } + }else{ + findViewById(R.id.audio_container).setVisibility(View.GONE); + findViewById(R.id.chat_container).setVisibility(View.VISIBLE); + } + return true; + } + }); + init(); + } + + private void init(){ + if(createrId.equals(MLOC.userId)){ + findViewById(R.id.audio_container).setVisibility(View.VISIBLE); + findViewById(R.id.chat_container).setVisibility(View.GONE); + if(liveId==null){ + createNewLive(); + }else { + starLive(); + } + }else{ + joinLive(); + } + } + + private void createNewLive(){ + //创建新直播 + isUploader = true; + XHLiveItem liveItem = new XHLiveItem(); + liveItem.setLiveName(liveName); + liveItem.setLiveType(liveType); + liveManager.createLive(liveItem, new IXHResultCallback() { + @Override + public void success(Object data) { + liveId = (String) data; + InterfaceUrls.demoReportAudioLive(liveId,liveName,createrId); + starLive(); + } + @Override + public void failed(final String errMsg) { + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(AudioLiveActivity.this,errMsg); + stopAndFinish(); + } + }); + } + }); + } + + private void starLive(){ + //开始直播 + isUploader = true; + liveManager.startLive(liveId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("XHLiveManager","startLive success "+data); + } + @Override + public void failed(final String errMsg) { + MLOC.d("XHLiveManager","startLive failed "+errMsg); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(AudioLiveActivity.this,errMsg); + stopAndFinish(); + } + }); + } + }); + } + + private void joinLive(){ + //观众加入直播 + isUploader = false; + liveManager.watchLive(liveId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("XHLiveManager","watchLive success "+data); + } + @Override + public void failed(final String errMsg) { + MLOC.d("XHLiveManager","watchLive failed "+errMsg); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(AudioLiveActivity.this,errMsg); + stopAndFinish(); + } + }); + + } + }); + } + + private void sendChatMsg(String msg){ + MLOC.d("XHLiveManager","sendChatMsg "+msg); + if(TextUtils.isEmpty(mPrivateMsgTargetId)){ + XHIMMessage imMessage = liveManager.sendMessage(msg,null); + mDatas.add(imMessage); + }else{ + XHIMMessage imMessage = liveManager.sendPrivateMessage(msg,mPrivateMsgTargetId,null); + mDatas.add(imMessage); + } + mAdapter.notifyDataSetChanged(); + mPrivateMsgTargetId = ""; + } + + public void addListener(){ + AEvent.addListener(AEvent.AEVENT_LIVE_ERROR,this); + AEvent.addListener(AEvent.AEVENT_LIVE_ADD_UPLOADER,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REMOVE_UPLOADER,this); + AEvent.addListener(AEvent.AEVENT_LIVE_APPLY_LINK,this); + AEvent.addListener(AEvent.AEVENT_LIVE_APPLY_LINK_RESULT,this); + AEvent.addListener(AEvent.AEVENT_LIVE_INVITE_LINK,this); + AEvent.addListener(AEvent.AEVENT_LIVE_INVITE_LINK_RESULT,this); + AEvent.addListener(AEvent.AEVENT_LIVE_GET_ONLINE_NUMBER,this); + AEvent.addListener(AEvent.AEVENT_LIVE_SELF_KICKED,this); + AEvent.addListener(AEvent.AEVENT_LIVE_SELF_BANNED,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REV_MSG,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REV_PRIVATE_MSG,this); + AEvent.addListener(AEvent.AEVENT_LIVE_SELF_COMMANDED_TO_STOP,this); + } + + @Override + public void onResume(){ + super.onResume(); + MLOC.canPickupVoip = false; + } + @Override + public void onPause(){ + super.onPause(); + MLOC.canPickupVoip = true; + } + + @Override + public void onRestart(){ + super.onRestart(); + addListener(); + } + + @Override + public void onStop(){ + removeListener(); + super.onStop(); + } + + private void removeListener(){ + AEvent.removeListener(AEvent.AEVENT_LIVE_ERROR,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_ADD_UPLOADER,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REMOVE_UPLOADER,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_APPLY_LINK,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_APPLY_LINK_RESULT,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_INVITE_LINK,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_INVITE_LINK_RESULT,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_GET_ONLINE_NUMBER,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_SELF_KICKED,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_SELF_BANNED,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REV_MSG,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REV_PRIVATE_MSG,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_SELF_COMMANDED_TO_STOP,this); + } + + @Override + public void onBackPressed(){ + new AlertDialog.Builder(AudioLiveActivity.this).setCancelable(true) + .setTitle("是否要退出?") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + + } + }).setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + stop(); + } + } + ).show(); + } + + private void stop(){ + liveManager.leaveLive(liveId, new IXHResultCallback() { + @Override + public void success(Object data) { + stopAndFinish(); + } + + @Override + public void failed(final String errMsg) { + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(AudioLiveActivity.this,errMsg); + } + }); + stopAndFinish(); + } + }); + } + + private void addPlayer(String addUserID){ + if(addUserID.equals(MLOC.userId)){ + //主持人进入后,先自己静音 + liveManager.setAudioEnable(false); + } + + if(mPlayerList==null){ + mPlayerList = new ArrayList<>(); + } + for(int i = 0;i(); + } + for(int i = 0;i mDatas; + private LayoutInflater mInflater; + private SwipeRefreshLayout refreshLayout; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_audio_live_list); + ((TextView)findViewById(R.id.title_text)).setText("语音直播列表"); + findViewById(R.id.title_left_btn).setVisibility(View.VISIBLE); + findViewById(R.id.title_left_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + findViewById(R.id.create_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(AudioLiveListActivity.this,AudioLiveCreateActivity.class)); + } + }); + + refreshLayout = (SwipeRefreshLayout)findViewById(R.id.refresh_layout); + //设置刷新时动画的颜色,可以设置4个 + refreshLayout.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light); + refreshLayout.setOnRefreshListener(this); + + mDatas = new ArrayList<>(); + mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + myListAdapter = new MyListAdapter(); + vList = (ListView) findViewById(R.id.list); + vList.setAdapter(myListAdapter); + vList.setOnItemClickListener(this); + vList.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int i) { + switch (i) { + case SCROLL_STATE_IDLE: + if(StarListUtil.isListViewReachTopEdge(absListView)){ + refreshLayout.setEnabled(true); + }else{ + refreshLayout.setEnabled(false); + } + break; + } + } + @Override + public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} + }); + } + + @Override + public void onResume(){ + super.onResume(); + AEvent.addListener(AEvent.AEVENT_AUDIO_LIVE_GOT_LIST,this); + InterfaceUrls.demoRequestAudioLiveList(); + } + @Override + public void onPause(){ + AEvent.removeListener(AEvent.AEVENT_AUDIO_LIVE_GOT_LIST,this); + super.onPause(); + } + + @Override + public void dispatchEvent(String aEventID, boolean success, Object eventObj) { + super.dispatchEvent(aEventID,success,eventObj); + switch (aEventID){ + case AEvent.AEVENT_AUDIO_LIVE_GOT_LIST: + refreshLayout.setRefreshing(false); + mDatas.clear(); + if(success){ + ArrayList res = (ArrayList) eventObj; + for(int i = 0;i parent, View view, int position, long id) { + AudioLiveInfo clickLiveInfo = mDatas.get(position); + + Intent intent = new Intent(AudioLiveListActivity.this, AudioLiveActivity.class); + intent.putExtra(AudioLiveActivity.LIVE_NAME,clickLiveInfo.liveName); + intent.putExtra(AudioLiveActivity.CREATER_ID,clickLiveInfo.createrId); + intent.putExtra(AudioLiveActivity.LIVE_ID,clickLiveInfo.liveId); + startActivity(intent); + + } + + @Override + public void onRefresh() { + InterfaceUrls.demoRequestAudioLiveList(); + } + + + class MyListAdapter extends BaseAdapter{ + @Override + public int getCount() { + return mDatas.size(); + } + + @Override + public Object getItem(int position) { + return mDatas.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final ViewHolder viewIconImg; + if(convertView == null){ + viewIconImg = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_all_list,null); + viewIconImg.vRoomName = (TextView)convertView.findViewById(R.id.item_id); + viewIconImg.vCreaterId = (TextView)convertView.findViewById(R.id.item_creater_id); + viewIconImg.vLiveState = (TextView)convertView.findViewById(R.id.live_flag); + viewIconImg.vHeadBg = convertView.findViewById(R.id.head_bg); + viewIconImg.vHeadImage = (ImageView) convertView.findViewById(R.id.head_img); + viewIconImg.vHeadCover = (CircularCoverView) convertView.findViewById(R.id.head_cover); + convertView.setTag(viewIconImg); + }else{ + viewIconImg = (ViewHolder)convertView.getTag(); + } + viewIconImg.vRoomName.setText(mDatas.get(position).liveName); + viewIconImg.vCreaterId.setText(mDatas.get(position).createrId); + viewIconImg.vHeadBg.setBackgroundColor(ColorUtils.getColor(AudioLiveListActivity.this,mDatas.get(position).liveName)); + viewIconImg.vHeadCover.setCoverColor(Color.parseColor("#FFFFFF")); + viewIconImg.vLiveState.setVisibility(mDatas.get(position).isLiveOn.equals("1")?View.VISIBLE:View.INVISIBLE); + int cint = DensityUtils.dip2px(AudioLiveListActivity.this,28); + viewIconImg.vHeadCover.setRadians(cint, cint, cint, cint,0); + viewIconImg.vHeadImage.setImageResource(R.drawable.icon_main_mic); + return convertView; + } + + class ViewHolder{ + private TextView vRoomName; + private TextView vCreaterId; + public View vHeadBg; + public CircularCoverView vHeadCover; + public ImageView vHeadImage; + public TextView vLiveState; + } + } + + +} diff --git a/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CActivity.java index f0bed5a..849fafe 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CActivity.java @@ -21,17 +21,16 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.database.MessageBean; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.database.MessageBean; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.demo.utils.IEventListener; import com.starrtc.starrtcsdk.core.StarRtcCore; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; -import com.starrtc.starrtcsdk.core.utils.StarLog; public class C2CActivity extends Activity implements IEventListener { @@ -238,7 +237,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemSelfHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); int cint = DensityUtils.dip2px(C2CActivity.this,20); itemSelfHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemSelfHolder.vHeadImage.setImageResource(R.drawable.starfox_50); + itemSelfHolder.vHeadImage.setImageResource(MLOC.getHeadImage(C2CActivity.this,mDatas.get(position).getFromId())); }else if(currLayoutType == 1){//别人的信息 final ViewHolder itemOtherHolder; if(convertView == null){ @@ -249,10 +248,6 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemOtherHolder.vHeadBg = convertView.findViewById(R.id.head_bg); itemOtherHolder.vHeadCover = (CircularCoverView) convertView.findViewById(R.id.head_cover); itemOtherHolder.vHeadImage = (ImageView) convertView.findViewById(R.id.head_img); - itemOtherHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); - int cint = DensityUtils.dip2px(C2CActivity.this,20); - itemOtherHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemOtherHolder.vHeadImage.setImageResource(R.drawable.starfox_50); convertView.setTag(itemOtherHolder); }else{ itemOtherHolder = (ViewHolder)convertView.getTag(); @@ -260,6 +255,10 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemOtherHolder.vUserId.setText(mDatas.get(position).getFromId()); itemOtherHolder.vMsg.setText(mDatas.get(position).getMsg()); itemOtherHolder.vHeadBg.setBackgroundColor(ColorUtils.getColor(C2CActivity.this,mDatas.get(position).getFromId())); + itemOtherHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); + int cint = DensityUtils.dip2px(C2CActivity.this,20); + itemOtherHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); + itemOtherHolder.vHeadImage.setImageResource(MLOC.getHeadImage(C2CActivity.this,mDatas.get(position).getFromId())); } return convertView; } diff --git a/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CCreateActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CCreateActivity.java index 180e824..a2f3cb9 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CCreateActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CCreateActivity.java @@ -1,8 +1,6 @@ package com.starrtc.demo.demo.im.c2c; -import android.app.Activity; import android.content.Intent; -import android.graphics.Color; import android.os.Bundle; import android.text.TextUtils; import android.view.View; @@ -12,7 +10,6 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.utils.StatusBarUtils; public class C2CCreateActivity extends BaseActivity { diff --git a/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CListActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CListActivity.java index eaa974d..fc2db57 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CListActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/c2c/C2CListActivity.java @@ -16,9 +16,9 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; @@ -36,7 +36,7 @@ public class C2CListActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_c2c_list); - //StatusBarUtils.with(this).setColor(Color.parseColor("#FF6C00")).init(); + //StatusBarUtils.with(this).setColor(Color.parseColor("#FF6C00")).initSDK(); ((TextView)findViewById(R.id.title_text)).setText("一对一会话列表"); findViewById(R.id.title_left_btn).setVisibility(View.VISIBLE); findViewById(R.id.title_left_btn).setOnClickListener(new View.OnClickListener() { @@ -146,7 +146,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemSelfHolder.vHeadCover.setCoverColor(Color.parseColor("#FFFFFF")); int cint = DensityUtils.dip2px(C2CListActivity.this,28); itemSelfHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemSelfHolder.vHeadImage.setImageResource(R.drawable.starfox_50); + itemSelfHolder.vHeadImage.setImageResource(MLOC.getHeadImage(C2CListActivity.this,userId)); itemSelfHolder.vTime.setText(historyBean.getLastTime()); itemSelfHolder.vMessage.setText(historyBean.getLastMsg()); diff --git a/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomActivity.java index bbb02a7..6440481 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomActivity.java @@ -24,18 +24,17 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.listener.XHChatroomManagerListener; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.listener.XHChatroomManagerListener; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.starrtcsdk.api.XHChatroomManager; import com.starrtc.starrtcsdk.api.XHClient; import com.starrtc.starrtcsdk.api.XHConstants; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; -import com.starrtc.starrtcsdk.core.utils.StarLog; public class ChatroomActivity extends BaseActivity { public static String TYPE = "TYPE"; @@ -128,7 +127,7 @@ public void onClick(View v) { } private void createChatroom(){ - chatroomManager.createChatroom(mRoomName,createType, new IXHCallback() { + chatroomManager.createChatroom(mRoomName,createType, new IXHResultCallback() { @Override public void success(final Object data) { runOnUiThread(new Runnable() { @@ -155,7 +154,7 @@ public void run() { }); } private void joinChatroom(){ - chatroomManager.joinChatroom(mRoomId, new IXHCallback() { + chatroomManager.joinChatroom(mRoomId, new IXHResultCallback() { @Override public void success(final Object data) { runOnUiThread(new Runnable() { @@ -235,7 +234,7 @@ public void onRestart(){ @Override public void onBackPressed(){ super.onBackPressed(); - chatroomManager.exitChatroom(mRoomId, new IXHCallback() { + chatroomManager.exitChatroom(mRoomId, new IXHResultCallback() { @Override public void success(Object data) { } @@ -380,7 +379,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemSelfHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); int cint = DensityUtils.dip2px(ChatroomActivity.this,20); itemSelfHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemSelfHolder.vHeadImage.setImageResource(R.drawable.starfox_50); + itemSelfHolder.vHeadImage.setImageResource(MLOC.getHeadImage(ChatroomActivity.this,mDatas.get(position).fromId)); }else if(currLayoutType == 1){//别人的信息 final ViewHolder itemOtherHolder; if(convertView == null){ @@ -391,10 +390,6 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemOtherHolder.vHeadBg = convertView.findViewById(R.id.head_bg); itemOtherHolder.vHeadCover = (CircularCoverView) convertView.findViewById(R.id.head_cover); itemOtherHolder.vHeadImage = (ImageView) convertView.findViewById(R.id.head_img); - itemOtherHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); - int cint = DensityUtils.dip2px(ChatroomActivity.this,20); - itemOtherHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemOtherHolder.vHeadImage.setImageResource(R.drawable.starfox_50); convertView.setTag(itemOtherHolder); }else{ itemOtherHolder = (ViewHolder)convertView.getTag(); @@ -402,6 +397,10 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemOtherHolder.vUserId.setText(mDatas.get(position).fromId); itemOtherHolder.vMsg.setText(mDatas.get(position).contentData); itemOtherHolder.vHeadBg.setBackgroundColor(ColorUtils.getColor(ChatroomActivity.this,mDatas.get(position).fromId)); + itemOtherHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); + int cint = DensityUtils.dip2px(ChatroomActivity.this,20); + itemOtherHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); + itemOtherHolder.vHeadImage.setImageResource(MLOC.getHeadImage(ChatroomActivity.this,mDatas.get(position).fromId)); } return convertView; } @@ -425,7 +424,7 @@ private void showManagerDialog(final String userId) { @Override public void onClick(DialogInterface dialogInterface, int i) { if(i==0){ - chatroomManager.kickMember(mRoomId, userId, new IXHCallback() { + chatroomManager.kickMember(mRoomId, userId, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { @@ -448,7 +447,7 @@ public void run() { } }); }else if(i==1){ - chatroomManager.muteMember(mRoomId, userId,60, new IXHCallback() { + chatroomManager.muteMember(mRoomId, userId,60, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { diff --git a/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomCreateActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomCreateActivity.java index eb4309e..57f1cee 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomCreateActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomCreateActivity.java @@ -1,6 +1,5 @@ package com.starrtc.demo.demo.im.chatroom; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; diff --git a/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomListActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomListActivity.java index 699fd93..c41ae0e 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomListActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/chatroom/ChatroomListActivity.java @@ -1,6 +1,5 @@ package com.starrtc.demo.demo.im.chatroom; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; @@ -20,12 +19,11 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; -import com.starrtc.demo.utils.IEventListener; import com.starrtc.demo.utils.StarListUtil; public class ChatroomListActivity extends BaseActivity implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { diff --git a/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupActivity.java index 91dcab6..f94a560 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupActivity.java @@ -21,20 +21,19 @@ import java.util.List; import com.starrtc.demo.R; -import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.database.MessageBean; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.database.MessageBean; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.demo.utils.IEventListener; import com.starrtc.starrtcsdk.api.XHClient; import com.starrtc.starrtcsdk.api.XHGroupManager; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; public class MessageGroupActivity extends Activity implements IEventListener{ @@ -91,7 +90,7 @@ public void onClick(View v) { }else if(type.equals(GROUP_NAME)){ mGroupName = getIntent().getStringExtra(GROUP_NAME); mCreaterId = MLOC.userId; - groupManager.createGroup(mGroupName, new IXHCallback() { + groupManager.createGroup(mGroupName, new IXHResultCallback() { @Override public void success(Object data) { mGroupId = (String) data; @@ -283,7 +282,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemSelfHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); int cint = DensityUtils.dip2px(MessageGroupActivity.this,20); itemSelfHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemSelfHolder.vHeadImage.setImageResource(R.drawable.starfox_50); + itemSelfHolder.vHeadImage.setImageResource(MLOC.getHeadImage(MessageGroupActivity.this,mDatas.get(position).getFromId())); }else if(currLayoutType == 1){//别人的信息 final ViewHolder itemOtherHolder; if(convertView == null){ @@ -294,10 +293,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemOtherHolder.vHeadBg = convertView.findViewById(R.id.head_bg); itemOtherHolder.vHeadCover = (CircularCoverView) convertView.findViewById(R.id.head_cover); itemOtherHolder.vHeadImage = (ImageView) convertView.findViewById(R.id.head_img); - itemOtherHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); - int cint = DensityUtils.dip2px(MessageGroupActivity.this,20); - itemOtherHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemOtherHolder.vHeadImage.setImageResource(R.drawable.starfox_50); + convertView.setTag(itemOtherHolder); }else{ itemOtherHolder = (ViewHolder)convertView.getTag(); @@ -305,6 +301,10 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemOtherHolder.vUserId.setText(mDatas.get(position).getFromId()); itemOtherHolder.vMsg.setText(mDatas.get(position).getMsg()); itemOtherHolder.vHeadBg.setBackgroundColor(ColorUtils.getColor(MessageGroupActivity.this,mDatas.get(position).getFromId())); + itemOtherHolder.vHeadCover.setCoverColor(Color.parseColor("#f6f6f6")); + int cint = DensityUtils.dip2px(MessageGroupActivity.this,20); + itemOtherHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); + itemOtherHolder.vHeadImage.setImageResource(MLOC.getHeadImage(MessageGroupActivity.this,mDatas.get(position).getFromId())); } return convertView; } diff --git a/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupListActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupListActivity.java index 6913c59..4e89821 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupListActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupListActivity.java @@ -21,10 +21,10 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; diff --git a/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupSettingActivity.java b/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupSettingActivity.java index c688d5c..cff55f1 100644 --- a/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupSettingActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/im/group/MessageGroupSettingActivity.java @@ -24,15 +24,15 @@ import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; import com.starrtc.demo.demo.im.c2c.C2CActivity; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.demo.voip.VoipActivity; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.starrtcsdk.api.XHClient; import com.starrtc.starrtcsdk.api.XHGroupManager; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import java.util.ArrayList; import java.util.HashMap; @@ -69,7 +69,7 @@ public void onClick(View v) { public void onClick(View v) { if (findViewById(R.id.switch_btn).isSelected()) { findViewById(R.id.switch_btn).setSelected(false); - groupManager.setPushEnable(mGroupId, false, new IXHCallback() { + groupManager.setPushEnable(mGroupId, false, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { @@ -92,7 +92,7 @@ public void run() { }); } else { findViewById(R.id.switch_btn).setSelected(true); - groupManager.setPushEnable(mGroupId, true, new IXHCallback() { + groupManager.setPushEnable(mGroupId, true, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { @@ -195,7 +195,7 @@ public void run() { private void addUserToGroup(String addUserId){ ArrayList idList = new ArrayList<>(); idList.add(addUserId); - groupManager.addGroupMembers(mGroupId, idList, new IXHCallback() { + groupManager.addGroupMembers(mGroupId, idList, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { @@ -222,7 +222,7 @@ public void run() { private void deleteUserFormGroup(String delUserId){ ArrayList idList = new ArrayList<>(); idList.add(delUserId); - groupManager.deleteGroupMembers(mGroupId, idList, new IXHCallback() { + groupManager.deleteGroupMembers(mGroupId, idList, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { @@ -247,7 +247,7 @@ public void run() { } private void deleteGroup(){ - groupManager.deleteGroup(mGroupId, new IXHCallback() { + groupManager.deleteGroup(mGroupId, new IXHResultCallback() { @Override public void success(Object data) { runOnUiThread(new Runnable() { @@ -390,14 +390,13 @@ public void onClick(View v) { holder.vHeadCover.setCoverColor(Color.parseColor("#FFFFFF")); int cint = DensityUtils.dip2px(MessageGroupSettingActivity.this,26); holder.vHeadCover.setRadians(cint, cint, cint, cint,0); - holder.vHeadImage.setImageResource(R.drawable.starfox_50); + holder.vHeadImage.setImageResource(MLOC.getHeadImage(MessageGroupSettingActivity.this,id)); holder.vHeadImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showManagerDialog(id); } }); - } } class MyViewHolder extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/com/starrtc/demo/demo/miniclass/MiniClassActivity.java b/app/src/main/java/com/starrtc/demo/demo/miniclass/MiniClassActivity.java new file mode 100644 index 0000000..43070cf --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/miniclass/MiniClassActivity.java @@ -0,0 +1,918 @@ +package com.starrtc.demo.demo.miniclass; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.listener.XHLiveManagerListener; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.demo.videomeeting.ViewPosition; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.starrtcsdk.api.XHConstants; +import com.starrtc.starrtcsdk.api.XHLiveItem; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHLiveManager; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; +import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; +import com.starrtc.starrtcsdk.core.player.StarPlayer; +import com.starrtc.starrtcsdk.core.player.StarWhitePanel2; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class MiniClassActivity extends BaseActivity{ + + public static String CLASS_ID = "CLASS_ID"; //会议ID + public static String CLASS_NAME = "CLASS_NAME"; //会议名称 + public static String CLASS_TYPE = "CLASS_TYPE"; //会议类型 + public static String CLASS_CREATER = "CLASS_CREATER"; //会议创建者 + + private String meetingId; + private String meetingName; + private String createrId; + + private TextView vMeetingName; + + private List mDatas; + private MyChatroomListAdapter mAdapter ; + private ListView vMsgList; + private RelativeLayout vPlayerView; + private TextView vLinkBtn; + private ImageView vCameraBtn; + private ImageView vMicBtn; + private ImageView vCleanBtn; + private ImageView vRevokeBtn; + private ImageView vLaserPenBtn; + private ImageView vSelectColorBtn; + private View vSelectColorView; + + private ArrayList mPlayerList; + private int borderW = 0; + private int borderH = 0; + + private IXHLiveManager classManager; + private StarWhitePanel2 vPaintPlayer; + + private Boolean isPortrait = true; + private Boolean isUploader = false; + + private StarRTCAudioManager starRTCAudioManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + + starRTCAudioManager = StarRTCAudioManager.create(this); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + + } + }); + + classManager = XHClient.getInstance().getLiveManager(this); + classManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_RIHGT); + classManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_VIDEO_AND_AUDIO); + classManager.addListener(new XHLiveManagerListener()); + + DisplayMetrics dm = getResources().getDisplayMetrics(); + if(dm.heightPixels>dm.widthPixels){ + isPortrait = true; + setContentView(R.layout.activity_mini_class); + classManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_BOTTOM); + }else{ + isPortrait = false; + setContentView(R.layout.activity_mini_class_landscape); + classManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_RIHGT); + } + vPlayerView = (RelativeLayout) findViewById(R.id.view1); + mPlayerList = new ArrayList<>(); + if(isPortrait){ + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(dm.widthPixels,dm.widthPixels/4*3); + vPlayerView.setLayoutParams(lp); + borderW = dm.widthPixels; + borderH = dm.widthPixels/4*3; + }else{ + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(dm.heightPixels/4/9*16,dm.heightPixels); + vPlayerView.setLayoutParams(lp); + borderW = dm.heightPixels/4/9*16; + borderH = dm.heightPixels; + } + + addListener(); + meetingId = getIntent().getStringExtra(CLASS_ID); + meetingName = getIntent().getStringExtra(CLASS_NAME); + createrId = getIntent().getStringExtra(CLASS_CREATER); + vMeetingName = (TextView) findViewById(R.id.live_id_text); + vMeetingName.setText("ID:"+meetingName); + vPaintPlayer = (StarWhitePanel2) findViewById(R.id.painter_view); + + findViewById(R.id.chat_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + findViewById(R.id.white_panel_view).setVisibility(View.INVISIBLE); + findViewById(R.id.chat_message_view).setVisibility(View.VISIBLE); + } + }); + findViewById(R.id.panel_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + findViewById(R.id.white_panel_view).setVisibility(View.VISIBLE); + findViewById(R.id.chat_message_view).setVisibility(View.INVISIBLE); + } + }); + findViewById(R.id.send_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String txt = ((EditText)findViewById(R.id.id_input)).getText().toString(); + if(!TextUtils.isEmpty(txt)){ + sendChatMsg(txt); + ((EditText)findViewById(R.id.id_input)).setText(""); + } + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(((EditText)findViewById(R.id.id_input)).getWindowToken(), 0); + } + }); + + vCameraBtn = (ImageView) findViewById(R.id.camera_btn); + vMicBtn = (ImageView) findViewById(R.id.mic_btn); + vLinkBtn = (TextView) findViewById(R.id.link_btn); + vCleanBtn = (ImageView) findViewById(R.id.clean_btn); + vCleanBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + vPaintPlayer.clean(); + } + }); + vRevokeBtn = (ImageView) findViewById(R.id.revoke_btn); + vRevokeBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + vPaintPlayer.revoke(); + } + }); + vLaserPenBtn = (ImageView) findViewById(R.id.laser_btn); + vLaserPenBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(vLaserPenBtn.isSelected()){ + vLaserPenBtn.setSelected(false); + vPaintPlayer.laserPenOff(); + }else{ + vLaserPenBtn.setSelected(true); + vPaintPlayer.laserPenOn(); + } + } + }); + vSelectColorView = findViewById(R.id.select_color_view); + vSelectColorBtn = (ImageView)findViewById(R.id.select_color_btn); + vSelectColorBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(vSelectColorView.getVisibility()==View.VISIBLE){ + vSelectColorView.setVisibility(View.INVISIBLE); + }else{ + vSelectColorView.setVisibility(View.VISIBLE); + } + } + }); + View.OnClickListener colorClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.select_color_black: + vPaintPlayer.setSelectColor(0x000000); + vSelectColorBtn.setBackgroundResource(R.drawable.pen_color_bg_black); + break; + case R.id.select_color_red: + vPaintPlayer.setSelectColor(0xcf0206); + vSelectColorBtn.setBackgroundResource(R.drawable.pen_color_bg_red); + break; + case R.id.select_color_yellow: + vPaintPlayer.setSelectColor(0xf59b00); + vSelectColorBtn.setBackgroundResource(R.drawable.pen_color_bg_yellow); + break; + case R.id.select_color_green: + vPaintPlayer.setSelectColor(0x3dc25a); + vSelectColorBtn.setBackgroundResource(R.drawable.pen_color_bg_green); + break; + case R.id.select_color_blue: + vPaintPlayer.setSelectColor(0x0029f7); + vSelectColorBtn.setBackgroundResource(R.drawable.pen_color_bg_blue); + break; + case R.id.select_color_purple: + vPaintPlayer.setSelectColor(0x8600a7); + vSelectColorBtn.setBackgroundResource(R.drawable.pen_color_bg_purple); + break; + } + vSelectColorView.setVisibility(View.INVISIBLE); + } + }; + findViewById(R.id.select_color_black).setOnClickListener(colorClickListener); + findViewById(R.id.select_color_red).setOnClickListener(colorClickListener); + findViewById(R.id.select_color_yellow).setOnClickListener(colorClickListener); + findViewById(R.id.select_color_green).setOnClickListener(colorClickListener); + findViewById(R.id.select_color_blue).setOnClickListener(colorClickListener); + findViewById(R.id.select_color_purple).setOnClickListener(colorClickListener); + vCameraBtn.setSelected(true); + vMicBtn.setSelected(true); + vCameraBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(vCameraBtn.isSelected()){ + vCameraBtn.setSelected(false); + classManager.setVideoEnable(false); + sendChatMsg("关闭摄像头"); + for(int i = 0;i(); + vMsgList = (ListView) findViewById(R.id.msg_list); + vMsgList.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); + mAdapter = new MyChatroomListAdapter(); + vMsgList.setAdapter(mAdapter); + + findViewById(R.id.back_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onBackPressed(); + } + }); + init(); + } + + private void init(){ + if(createrId.equals(MLOC.userId)){ + vLinkBtn.setVisibility(View.GONE); + vCameraBtn.setVisibility(View.VISIBLE); + vMicBtn.setVisibility(View.VISIBLE); + vCleanBtn.setVisibility(View.VISIBLE); + vRevokeBtn.setVisibility(View.VISIBLE); + vSelectColorBtn.setVisibility(View.VISIBLE); + vLaserPenBtn.setVisibility(View.VISIBLE); + if(meetingId==null){ + createNewMeeting(); + }else { + startClass(); + } + }else{ + vLinkBtn.setVisibility(View.VISIBLE); + vCameraBtn.setVisibility(View.GONE); + vMicBtn.setVisibility(View.GONE); + vCleanBtn.setVisibility(View.GONE); + vRevokeBtn.setVisibility(View.GONE); + vSelectColorBtn.setVisibility(View.GONE); + vLaserPenBtn.setVisibility(View.GONE); + if(meetingId==null){ + MLOC.showMsg(MiniClassActivity.this,"课堂ID为空"); + }else { + joinClass(); + } + } + } + + private void createNewMeeting(){ + isUploader = true; + //创建新直播 + XHLiveItem meetingItem = new XHLiveItem(); + meetingItem.setLiveName(meetingName); + meetingItem.setLiveType((XHConstants.XHLiveType) getIntent().getSerializableExtra(CLASS_TYPE)); + classManager.createLive(meetingItem, new IXHResultCallback() { + @Override + public void success(Object data) { + meetingId = (String) data; + InterfaceUrls.demoReportMiniClass(meetingId,meetingName,createrId); + startClass(); + } + @Override + public void failed(final String errMsg) { + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(MiniClassActivity.this,errMsg); + stopAndFinish(); + } + }); + } + }); + } + + private void stop(){ + classManager.leaveLive(meetingId, new IXHResultCallback() { + @Override + public void success(Object data) { + stopAndFinish(); + } + + @Override + public void failed(final String errMsg) { + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(MiniClassActivity.this,errMsg); + } + }); + stopAndFinish(); + } + }); + } + + private void startClass(){ + isUploader = true; + //开始直播 + vPaintPlayer.publish(MLOC.userId); + classManager.startLive(meetingId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("XHLiveManager","startLive success "+data); + } + @Override + public void failed(final String errMsg) { + MLOC.d("XHLiveManager","startLive failed "+errMsg); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(MiniClassActivity.this,errMsg); + stopAndFinish(); + + } + }); + } + }); + } + private void joinClass(){ + isUploader = false; + //观看直播 + classManager.watchLive(meetingId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("XHLiveManager","watchLive success "+data); + } + @Override + public void failed(final String errMsg) { + MLOC.d("XHLiveManager","watchLive failed "+errMsg); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(MiniClassActivity.this,errMsg); + stopAndFinish(); + + } + }); + } + }); + } + + public void addListener(){ + AEvent.addListener(AEvent.AEVENT_LIVE_ADD_UPLOADER,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REMOVE_UPLOADER,this); + AEvent.addListener(AEvent.AEVENT_LIVE_ERROR,this); + AEvent.addListener(AEvent.AEVENT_LIVE_GET_ONLINE_NUMBER,this); + AEvent.addListener(AEvent.AEVENT_LIVE_SELF_KICKED,this); + AEvent.addListener(AEvent.AEVENT_LIVE_SELF_BANNED,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REV_MSG,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REV_PRIVATE_MSG,this); + AEvent.addListener(AEvent.AEVENT_LIVE_REV_REALTIME_DATA,this); + AEvent.addListener(AEvent.AEVENT_LIVE_APPLY_LINK,this); + AEvent.addListener(AEvent.AEVENT_LIVE_APPLY_LINK_RESULT,this); + AEvent.addListener(AEvent.AEVENT_LIVE_INVITE_LINK,this); + AEvent.addListener(AEvent.AEVENT_LIVE_INVITE_LINK_RESULT,this); + AEvent.addListener(AEvent.AEVENT_LIVE_SELF_COMMANDED_TO_STOP,this); + } + public void removeListener(){ + AEvent.removeListener(AEvent.AEVENT_LIVE_ADD_UPLOADER,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REMOVE_UPLOADER,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_ERROR,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_GET_ONLINE_NUMBER,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_SELF_KICKED,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_SELF_BANNED,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REV_MSG,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REV_PRIVATE_MSG,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_REV_REALTIME_DATA,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_APPLY_LINK,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_APPLY_LINK_RESULT,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_INVITE_LINK,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_INVITE_LINK_RESULT,this); + AEvent.removeListener(AEvent.AEVENT_LIVE_SELF_COMMANDED_TO_STOP,this); + } + + @Override + public void onResume(){ + super.onResume(); + MLOC.canPickupVoip = false; + } + @Override + public void onPause(){ + super.onPause(); + MLOC.canPickupVoip = true; + } + @Override + public void onRestart(){ + super.onRestart(); + addListener(); + } + + @Override + public void onStop(){ + removeListener(); + super.onStop(); + } + + @Override + public void onBackPressed(){ + new AlertDialog.Builder(MiniClassActivity.this).setCancelable(true) + .setTitle("是否退出课堂?") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + + } + }).setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + stop(); + } + } + ).show(); + } + + private void addPlayer(String addUserID){ + if(mPlayerList.size()==4)return; + ViewPosition newOne = new ViewPosition(); + newOne.setUserId(addUserID); + StarPlayer player = new StarPlayer(this); + newOne.setVideoPlayer(player); + mPlayerList.add(newOne); + vPlayerView.addView(player); + resetLayout(); + player.setZOrderMediaOverlay(true); + + if(mPlayerList.size()==1){ + classManager.attachPlayerView(addUserID,player,true); + }else{ + classManager.attachPlayerView(addUserID,player,false); + } + } + + private void deletePlayer(String removeUserId){ + if(mPlayerList!=null&&mPlayerList.size()>0){ + for(int i = 0;i mDatas; + private LayoutInflater mInflater; + private SwipeRefreshLayout refreshLayout; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mini_class_list); + ((TextView)findViewById(R.id.title_text)).setText("小班课列表"); + findViewById(R.id.title_left_btn).setVisibility(View.VISIBLE); + findViewById(R.id.title_left_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + findViewById(R.id.create_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(MiniClassListActivity.this,MiniClassCreateActivity.class)); + } + }); + + AEvent.addListener(AEvent.AEVENT_MINI_CLASS_GOT_LIST,this); + + refreshLayout = (SwipeRefreshLayout)findViewById(R.id.refresh_layout); + //设置刷新时动画的颜色,可以设置4个 + refreshLayout.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light); + refreshLayout.setOnRefreshListener(this); + + mDatas = new ArrayList<>(); + mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + myListAdapter = new MyListAdapter(); + vList = (ListView) findViewById(R.id.list); + vList.setAdapter(myListAdapter); + vList.setOnItemClickListener(this); + vList.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int i) { + switch (i) { + case SCROLL_STATE_IDLE: + if(StarListUtil.isListViewReachTopEdge(absListView)){ + refreshLayout.setEnabled(true); + }else{ + refreshLayout.setEnabled(false); + } + break; + } + } + @Override + public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} + }); + } + + @Override + public void onResume(){ + super.onResume(); + AEvent.addListener(AEvent.AEVENT_MINI_CLASS_GOT_LIST,this); + InterfaceUrls.demoRequestMiniClassList(); + } + + @Override + public void onStop(){ + AEvent.removeListener(AEvent.AEVENT_MINI_CLASS_GOT_LIST,this); + super.onStop(); + } + + @Override + public void dispatchEvent(String aEventID, boolean success, Object eventObj) { + super.dispatchEvent(aEventID,success,eventObj); + switch (aEventID){ + case AEvent.AEVENT_MINI_CLASS_GOT_LIST: + refreshLayout.setRefreshing(false); + mDatas.clear(); + if(success){ + ArrayList res = (ArrayList) eventObj; + mDatas.addAll(res); + myListAdapter.notifyDataSetChanged(); + } + break; + } + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + MiniClassInfo clickMeetingInfo = mDatas.get(position); + Intent intent = new Intent(MiniClassListActivity.this, MiniClassActivity.class); + intent.putExtra(MiniClassActivity.CLASS_ID,clickMeetingInfo.meetingId); + intent.putExtra(MiniClassActivity.CLASS_NAME,clickMeetingInfo.meetingName); + intent.putExtra(MiniClassActivity.CLASS_CREATER,clickMeetingInfo.createrId); + startActivity(intent); + } + + @Override + public void onRefresh() { + InterfaceUrls.demoRequestMiniClassList(); + } + + + class MyListAdapter extends BaseAdapter{ + @Override + public int getCount() { + return mDatas.size(); + } + + @Override + public Object getItem(int position) { + return mDatas.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final ViewHolder viewIconImg; + if(convertView == null){ + viewIconImg = new ViewHolder(); + convertView = mInflater.inflate(R.layout.item_all_list,null); + viewIconImg.vRoomName = (TextView)convertView.findViewById(R.id.item_id); + viewIconImg.vCreaterId = (TextView)convertView.findViewById(R.id.item_creater_id); + viewIconImg.vHeadBg = convertView.findViewById(R.id.head_bg); + viewIconImg.vHeadImage = (ImageView) convertView.findViewById(R.id.head_img); + viewIconImg.vHeadCover = (CircularCoverView) convertView.findViewById(R.id.head_cover); + convertView.setTag(viewIconImg); + }else{ + viewIconImg = (ViewHolder)convertView.getTag(); + } + viewIconImg.vRoomName.setText(mDatas.get(position).meetingName); + viewIconImg.vCreaterId.setText(mDatas.get(position).createrId); + viewIconImg.vHeadBg.setBackgroundColor(ColorUtils.getColor(MiniClassListActivity.this,mDatas.get(position).meetingId)); + viewIconImg.vHeadCover.setCoverColor(Color.parseColor("#FFFFFF")); + int cint = DensityUtils.dip2px(MiniClassListActivity.this,28); + viewIconImg.vHeadCover.setRadians(cint, cint, cint, cint,0); + viewIconImg.vHeadImage.setImageResource(R.drawable.icon_main_class); + return convertView; + } + + class ViewHolder{ + private TextView vRoomName; + private TextView vCreaterId; + public View vHeadBg; + public CircularCoverView vHeadCover; + public ImageView vHeadImage; + } + } + + +} diff --git a/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PActivity.java b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PActivity.java new file mode 100644 index 0000000..2c4acea --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PActivity.java @@ -0,0 +1,350 @@ +package com.starrtc.demo.demo.p2p; + +import android.annotation.SuppressLint; +import android.content.DialogInterface; +import android.graphics.Color; +import android.os.Bundle; +import android.os.SystemClock; +import android.support.v7.app.AlertDialog; +import android.view.View; +import android.view.WindowManager; +import android.widget.Chronometer; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.ui.CircularCoverView; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.demo.utils.ColorUtils; +import com.starrtc.demo.utils.DensityUtils; +import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.starrtcsdk.api.XHConstants; +import com.starrtc.starrtcsdk.api.XHVoipP2PManager; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; +import com.starrtc.starrtcsdk.core.player.StarPlayer; + +import java.util.Set; + +public class VoipP2PActivity extends BaseActivity implements View.OnClickListener { + + String TAG = "VOIP P2P VoipP2PActivity"; + private XHVoipP2PManager voipP2PManager; + + private StarPlayer targetPlayer; + private StarPlayer selfPlayer; + private Chronometer timer; + + public static String ACTION = "ACTION"; + public static String RING = "RING"; + public static String CALLING = "CALLING"; + private String action; + private String targetId; + private Boolean isTalking = false; + + private StarRTCAudioManager starRTCAudioManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + + starRTCAudioManager = StarRTCAudioManager.create(this); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + } + }); + + setContentView(R.layout.activity_voip_p2p); + voipP2PManager = XHClient.getInstance().getVoipP2PManager(); + voipP2PManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_LEFT); + voipP2PManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_VIDEO_AND_AUDIO); + addListener(); + + targetId = getIntent().getStringExtra("targetId"); + action = getIntent().getStringExtra(ACTION); + + MLOC.d(TAG,"targetId " + targetId); + + targetPlayer = (StarPlayer) findViewById(R.id.voip_surface_target); + selfPlayer = (StarPlayer) findViewById(R.id.voip_surface_self); + selfPlayer.setZOrderMediaOverlay(true); + timer = (Chronometer) findViewById(R.id.timer); + targetPlayer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(isTalking){ + findViewById(R.id.talking_view).setVisibility(findViewById(R.id.talking_view).getVisibility()==View.VISIBLE?View.INVISIBLE:View.VISIBLE); + } + } + }); + + ((TextView)findViewById(R.id.targetid_text)).setText(targetId); + findViewById(R.id.head_bg).setBackgroundColor(ColorUtils.getColor(VoipP2PActivity.this,targetId)); + ((CircularCoverView)findViewById(R.id.head_cover)).setCoverColor(Color.parseColor("#000000")); + int cint = DensityUtils.dip2px(VoipP2PActivity.this,45); + ((CircularCoverView)findViewById(R.id.head_cover)).setRadians(cint, cint, cint, cint,0); + + findViewById(R.id.calling_hangup).setOnClickListener(this); + findViewById(R.id.talking_hangup).setOnClickListener(this); + + if(action.equals(CALLING)){ + showCallingView(); + MLOC.d(TAG,"call"); + voipP2PManager.call(targetId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d(TAG,"call success"); + } + @Override + public void failed(String errMsg) { + MLOC.d(TAG,"call failed"); + VoipP2PActivity.this.stopAndFinish(); + } + }); + }else{ + voipP2PManager.setupView(this,selfPlayer, targetPlayer, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d(TAG,"setupView success"); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d(TAG,"onPickup"); + onPickup(); + } + }); + } + @Override + public void failed(String errMsg) { + MLOC.d(TAG,"setupView failed"); + VoipP2PActivity.this.stopAndFinish(); + } + }); + + } + + } + + public void addListener(){ + AEvent.addListener(AEvent.AEVENT_VOIP_INIT_COMPLETE,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_BUSY,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_REFUSED,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_HANGUP,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_CONNECT,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_ERROR,this); + } + + public void removeListener(){ + AEvent.removeListener(AEvent.AEVENT_VOIP_INIT_COMPLETE,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_BUSY,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_REFUSED,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_HANGUP,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_CONNECT,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_ERROR,this); + } + + @Override + public void onResume(){ + super.onResume(); + MLOC.canPickupVoip = false; + } + + @Override + public void onPause(){ + super.onPause(); + } + + @Override + public void onRestart(){ + super.onRestart(); + addListener(); + } + + @Override + public void onDestroy(){ + removeListener(); + MLOC.canPickupVoip = true; + super.onDestroy(); + } + + @Override + public void onBackPressed(){ + new AlertDialog.Builder(VoipP2PActivity.this).setCancelable(true) + .setTitle("是否挂断?") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + + } + }).setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + timer.stop(); + voipP2PManager.hangup(new IXHResultCallback() { + @Override + public void success(Object data) { + stopAndFinish(); + } + + @Override + public void failed(final String errMsg) { + MLOC.d("","AEVENT_VOIP_ON_STOP errMsg:"+errMsg); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(VoipP2PActivity.this,errMsg); + } + }); + } + }); + } + } + ).show(); + } + + @Override + public void dispatchEvent(String aEventID, boolean success, final Object eventObj) { + super.dispatchEvent(aEventID,success,eventObj); + switch (aEventID){ + case AEvent.AEVENT_VOIP_REV_BUSY: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d(TAG,"对方线路忙"); + MLOC.showMsg(VoipP2PActivity.this,"对方线路忙"); + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_REFUSED: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d(TAG,"对方拒绝通话"); + MLOC.showMsg(VoipP2PActivity.this,"对方拒绝通话"); + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_HANGUP: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d(TAG,"对方已挂断"); + MLOC.showMsg(VoipP2PActivity.this,"对方已挂断"); + timer.stop(); + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_CONNECT: + MLOC.d(TAG,"对方允许通话"); + showTalkingView(); + voipP2PManager.setupView(this,selfPlayer, targetPlayer, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d(TAG,"setupView success"); + } + @Override + public void failed(String errMsg) { + MLOC.d(TAG,"setupView failed"); + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_ERROR: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d(TAG,(String) eventObj); + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + } + } + + + private void showCallingView(){ + findViewById(R.id.calling_view).setVisibility(View.VISIBLE); + findViewById(R.id.talking_view).setVisibility(View.INVISIBLE); + } + + private void showTalkingView(){ + runOnUiThread(new Runnable() { + @Override + public void run() { + isTalking = true; + findViewById(R.id.calling_view).setVisibility(View.INVISIBLE); + findViewById(R.id.talking_view).setVisibility(View.VISIBLE); + @SuppressLint("WrongViewCast") FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) findViewById(R.id.talking_view).getLayoutParams(); + flp.width = findViewById(R.id.calling_view).getWidth(); + findViewById(R.id.talking_view).setLayoutParams(flp); + timer.setBase(SystemClock.elapsedRealtime()); + timer.start(); + } + }); + } + + private void onPickup(){ + voipP2PManager.accept(targetId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d(TAG,"onPickup OK "); + } + @Override + public void failed(String errMsg) { + MLOC.d(TAG,"onPickup failed "); + VoipP2PActivity.this.stopAndFinish(); + } + }); + showTalkingView(); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.calling_hangup: + voipP2PManager.cancel(new IXHResultCallback() { + @Override + public void success(Object data) { + VoipP2PActivity.this.stopAndFinish(); + } + + @Override + public void failed(String errMsg) { + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + case R.id.talking_hangup: + voipP2PManager.hangup(new IXHResultCallback() { + @Override + public void success(Object data) { + VoipP2PActivity.this.stopAndFinish(); + } + + @Override + public void failed(String errMsg) { + VoipP2PActivity.this.stopAndFinish(); + } + }); + break; + + } + } + + private void stopAndFinish(){ + if(starRTCAudioManager!=null){ + starRTCAudioManager.stop(); + } + removeListener(); + finish(); + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PCreateActivity.java b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PCreateActivity.java new file mode 100644 index 0000000..ab1c9b4 --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PCreateActivity.java @@ -0,0 +1,124 @@ +package com.starrtc.demo.demo.p2p; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.demo.MLOC; + + +public class VoipP2PCreateActivity extends BaseActivity implements View.OnClickListener { + private TextView vTargetId; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_voip_p2p_create); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + ((TextView)findViewById(R.id.title_text)).setText("请输入目标终端IP"); + findViewById(R.id.title_left_btn).setVisibility(View.VISIBLE); + findViewById(R.id.title_left_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + vTargetId = (TextView)findViewById(R.id.targetid_input); + findViewById(R.id.btn_1).setOnClickListener(this); + findViewById(R.id.btn_2).setOnClickListener(this); + findViewById(R.id.btn_3).setOnClickListener(this); + findViewById(R.id.btn_4).setOnClickListener(this); + findViewById(R.id.btn_5).setOnClickListener(this); + findViewById(R.id.btn_6).setOnClickListener(this); + findViewById(R.id.btn_7).setOnClickListener(this); + findViewById(R.id.btn_8).setOnClickListener(this); + findViewById(R.id.btn_9).setOnClickListener(this); + findViewById(R.id.btn_0).setOnClickListener(this); + findViewById(R.id.btn_point).setOnClickListener(this); + findViewById(R.id.btn_clean).setOnClickListener(this); + findViewById(R.id.btn_call).setOnClickListener(this); + + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.btn_call: + final String inputId = ((TextView)findViewById(R.id.targetid_input)).getText().toString(); + if(TextUtils.isEmpty(inputId)){ + MLOC.showMsg(VoipP2PCreateActivity.this,"ip不能为空"); + }else{ + saveIp(inputId); + Intent intent = new Intent(VoipP2PCreateActivity.this,VoipP2PActivity.class); + intent.putExtra("targetId",inputId); + intent.putExtra(VoipP2PActivity.ACTION,VoipP2PActivity.CALLING); + startActivity(intent); + VoipP2PCreateActivity.this.finish(); + } + break; + case R.id.btn_clean: + vTargetId.setText(""); + break; + case R.id.btn_0: + vTargetId.append("0"); + break; + case R.id.btn_1: + vTargetId.append("1"); + break; + case R.id.btn_2: + vTargetId.append("2"); + break; + case R.id.btn_3: + vTargetId.append("3"); + break; + case R.id.btn_4: + vTargetId.append("4"); + break; + case R.id.btn_5: + vTargetId.append("5"); + break; + case R.id.btn_6: + vTargetId.append("6"); + break; + case R.id.btn_7: + vTargetId.append("7"); + break; + case R.id.btn_8: + vTargetId.append("8"); + break; + case R.id.btn_9: + vTargetId.append("9"); + break; + case R.id.btn_point: + vTargetId.append("."); + break; + } + } + + @Override + public void onResume(){ + super.onResume(); + ((TextView)findViewById(R.id.targetid_input)).setText(loadIP()); + } + + private String loadIP(){ + SharedPreferences prefer = getSharedPreferences("com.starrtc.boins", Context.MODE_PRIVATE); + String v = prefer.getString("P2P_IP", ""); + return v; + } + private void saveIp(String IP){ + SharedPreferences prefer = getSharedPreferences("com.starrtc.boins", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = prefer.edit(); + editor.putString("P2P_IP", IP); + editor.commit(); + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PDemoActivity.java b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PDemoActivity.java new file mode 100644 index 0000000..d601afb --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PDemoActivity.java @@ -0,0 +1,66 @@ +package com.starrtc.demo.demo.p2p; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.demo.utils.StarNetUtil; +import com.starrtc.starrtcsdk.api.XHClient; + + +public class VoipP2PDemoActivity extends BaseActivity { + private boolean onListening = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_voip_p2p_main); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + addListener(); + ((TextView)findViewById(R.id.ip_addr)).setText(StarNetUtil.getIP(this)); + findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(VoipP2PDemoActivity.this, VoipP2PCreateActivity.class)); + } + }); + + } + + @Override + public void onResume(){ + super.onResume(); + if(!onListening){ + onListening = true; + XHClient.getInstance().initStarDirectLink(); + } + } + + @Override + public void onBackPressed(){ + removeListener(); + onListening = false; + XHClient.getInstance().stopStarDircetLink(); + finish(); + } + + @Override + public void onRestart(){ + super.onRestart(); + addListener(); + } + + private void addListener(){ + AEvent.addListener(AEvent.AEVENT_VOIP_REV_CALLING,this); + } + + private void removeListener(){ + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_CALLING,this); + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PRingingActivity.java b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PRingingActivity.java new file mode 100644 index 0000000..8ea376f --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/p2p/VoipP2PRingingActivity.java @@ -0,0 +1,112 @@ +package com.starrtc.demo.demo.p2p; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.ui.CircularCoverView; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.demo.utils.ColorUtils; +import com.starrtc.demo.utils.DensityUtils; +import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; + +public class VoipP2PRingingActivity extends BaseActivity implements View.OnClickListener { + + private String targetId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + setContentView(R.layout.activity_voip_p2p_ringing); + addListener(); + + targetId = getIntent().getStringExtra("targetId"); + findViewById(R.id.ring_hangoff).setOnClickListener(this); + findViewById(R.id.ring_pickup).setOnClickListener(this); + ((TextView)findViewById(R.id.targetid_text)).setText(targetId); + findViewById(R.id.head_bg).setBackgroundColor(ColorUtils.getColor(VoipP2PRingingActivity.this,targetId)); + ((CircularCoverView)findViewById(R.id.head_cover)).setCoverColor(Color.parseColor("#000000")); + int cint = DensityUtils.dip2px(VoipP2PRingingActivity.this,45); + ((CircularCoverView)findViewById(R.id.head_cover)).setRadians(cint, cint, cint, cint,0); + } + + public void addListener(){ + AEvent.addListener(AEvent.AEVENT_VOIP_REV_HANGUP,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_ERROR,this); + } + + public void removeListener(){ + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_HANGUP,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_ERROR,this); + } + + @Override + public void dispatchEvent(final String aEventID, boolean success, final Object eventObj) { + super.dispatchEvent(aEventID,success,eventObj); + runOnUiThread(new Runnable() { + @Override + public void run() { + switch (aEventID){ + case AEvent.AEVENT_VOIP_REV_HANGUP: + MLOC.d("","对方已挂断"); + MLOC.showMsg(VoipP2PRingingActivity.this,"对方已挂断"); + finish(); + break; + case AEvent.AEVENT_VOIP_REV_ERROR: + MLOC.showMsg(VoipP2PRingingActivity.this, (String) eventObj); + finish(); + break; + } + } + }); + } + + @Override + public void onRestart(){ + super.onRestart(); + addListener(); + } + + @Override + public void onStop(){ + super.onStop(); + removeListener(); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.ring_hangoff: + XHClient.getInstance().getVoipP2PManager().refuse(new IXHResultCallback() { + @Override + public void success(Object data) { + finish(); + } + + @Override + public void failed(String errMsg) { + finish(); + } + }); + break; + case R.id.ring_pickup:{ + Intent intent = new Intent(VoipP2PRingingActivity.this,VoipP2PActivity.class); + intent.putExtra("targetId",targetId); + intent.putExtra(VoipP2PActivity.ACTION,VoipP2PActivity.RING); + startActivity(intent); + finish(); + break; + } + + } + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/service/FloatWindowsService.java b/app/src/main/java/com/starrtc/demo/demo/service/FloatWindowsService.java index bc45f9e..993f6bc 100644 --- a/app/src/main/java/com/starrtc/demo/demo/service/FloatWindowsService.java +++ b/app/src/main/java/com/starrtc/demo/demo/service/FloatWindowsService.java @@ -18,8 +18,11 @@ import android.widget.Toast; import com.starrtc.demo.R; +import com.starrtc.demo.ui.LineChartView; import com.starrtc.starrtcsdk.core.StarRtcCore; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; @@ -42,6 +45,8 @@ public IBinder onBind(Intent intent) { //////////////////////////////////////////////////////////////////////////////////////////////////// private TextView vLogText; private View vCloseBtn; + private LineChartView vLineChart; + private ArrayList lines = new ArrayList<>(); private RelativeLayout floatView; private RelativeLayout floatViewBall; private Timer refreshTimer; @@ -64,6 +69,24 @@ private void createFloatView() | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.width = RelativeLayout.LayoutParams.WRAP_CONTENT; params.height = RelativeLayout.LayoutParams.WRAP_CONTENT; + + vLineChart = (LineChartView) floatView.findViewById(R.id.line_chart); + LineChartView.LineData netLine = new LineChartView.LineData(); + netLine.name = "net"; + netLine.color = 0xFFFF0000; + netLine.datas = new ArrayList<>(); + lines.add(netLine); + LineChartView.LineData netLine2 = new LineChartView.LineData(); + netLine2.name = "net"; + netLine2.color = 0xFF0000FF; + netLine2.datas = new ArrayList<>(); + lines.add(netLine2); + LineChartView.LineData farNetLine = new LineChartView.LineData(); + farNetLine.name = "net"; + farNetLine.color = 0xFF00FFFF; + farNetLine.datas = new ArrayList<>(); + lines.add(farNetLine); + vLogText = (TextView) floatView.findViewById(R.id.log_txt); vCloseBtn = floatView.findViewById(R.id.log_close); vCloseBtn.setOnClickListener(new View.OnClickListener() { @@ -108,10 +131,32 @@ public void run() { handler.post(new Runnable(){ public void run(){ StringBuffer stringBuffer = new StringBuffer(); - stringBuffer.append("网络质量:"+ StarRtcCore.currentNetworkQuality+"\n"); - stringBuffer.append("上传速度:"+ StarRtcCore.currentUploadSpeed+" kb/s\n"); + stringBuffer.append("Interval:"+ StarRtcCore.currentNetIQInterval+"\n"); + stringBuffer.append("上传速度:"+ StarRtcCore.currentUploadSpeed+" kb/s "+ StarRtcCore.currentUploadSpeed2+" kb/s\n"); stringBuffer.append("下载速度:"+ StarRtcCore.currentDownloadSpeed+" kb/s\n"); stringBuffer.append("---------------------------------\n"); + if(StarRtcCore.videoTotalBytes>0){ + stringBuffer.append("视频丢包率:" + + new BigDecimal((float)StarRtcCore.videoDropBytes/StarRtcCore.videoTotalBytes).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue()*100 + +"%("+StarRtcCore.videoDropBytes+"/"+StarRtcCore.videoTotalBytes+")\n"); + }else{ + stringBuffer.append("视频丢包率:0.0%(0/0)\n"); + } + if(StarRtcCore.audioTotalBytes>0){ + stringBuffer.append("音频丢包率:" + + new BigDecimal((float)StarRtcCore.audioDropBytes/StarRtcCore.audioTotalBytes).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue()*100 + +"%("+StarRtcCore.audioDropBytes+"/"+StarRtcCore.audioTotalBytes+")\n"); + }else{ + stringBuffer.append("音频丢包率:0.0%(0/0)\n"); + } + if(StarRtcCore.realTimeTotalBytes>0){ + stringBuffer.append("白板丢包率:" + + new BigDecimal((float)StarRtcCore.realTimeDropBytes/StarRtcCore.realTimeTotalBytes).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue()*100 + +"%("+StarRtcCore.realTimeDropBytes+"/"+StarRtcCore.realTimeTotalBytes+")\n"); + }else{ + stringBuffer.append("白板丢包率:0.0%(0/0)\n"); + } + stringBuffer.append("---------------------------------\n"); stringBuffer.append("分辨率大:"+ StarRtcCore.currentVideoWidth+"x"+StarRtcCore.currentVideoHeight+"\n"); stringBuffer.append("码率大:"+ StarRtcCore.currentBitRate+" kbps\n"); stringBuffer.append("帧率大:"+ StarRtcCore.currentFPS+" fps\n"); @@ -120,6 +165,20 @@ public void run(){ stringBuffer.append("码率小:"+ StarRtcCore.currentBitRateSmall+" kbps\n"); stringBuffer.append("帧率小:"+ StarRtcCore.currentFPSSmall+" fps\n"); vLogText.setText(stringBuffer.toString()); + + if(lines.get(0).datas.size()>30){ + lines.get(0).datas.remove(0); + } + if(lines.get(1).datas.size()>30){ + lines.get(1).datas.remove(0); + } + lines.get(1).datas.add((float) StarRtcCore.currentUploadSpeed); + + if(lines.get(2).datas.size()>30){ + lines.get(2).datas.remove(0); + } + lines.get(2).datas.add((float) StarRtcCore.currentUploadSpeed2); + vLineChart.refreshData(lines); } }); } diff --git a/app/src/main/java/com/starrtc/demo/demo/setting/SettingActivity.java b/app/src/main/java/com/starrtc/demo/demo/setting/SettingActivity.java index 5591ea2..14640af 100644 --- a/app/src/main/java/com/starrtc/demo/demo/setting/SettingActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/setting/SettingActivity.java @@ -1,22 +1,29 @@ package com.starrtc.demo.demo.setting; import android.app.AlertDialog; +import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; +import android.view.Gravity; import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.demo.p2p.VoipP2PDemoActivity; import com.starrtc.demo.demo.service.FloatWindowsService; -import com.starrtc.demo.demo.test.EchoTestActivity; +import com.starrtc.demo.demo.test.LoopTestActivity; import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.starrtcsdk.api.XHCustomConfig; import com.starrtc.starrtcsdk.core.StarRtcCore; import com.starrtc.starrtcsdk.api.XHConstants; @@ -38,9 +45,18 @@ public void onClick(View v) { }); ((TextView)findViewById(R.id.title_text)).setText("设置"); - findViewById(R.id.btn_test_speed).setOnClickListener(this); + findViewById(R.id.btn_server_set).setOnClickListener(this); + findViewById(R.id.btn_test_loop).setOnClickListener(this); + findViewById(R.id.btn_test_p2p).setOnClickListener(this); findViewById(R.id.btn_video_size).setOnClickListener(this); + findViewById(R.id.btn_video_config_big).setOnClickListener(this); + findViewById(R.id.btn_video_config_small).setOnClickListener(this); findViewById(R.id.opengl_switch).setOnClickListener(this); + findViewById(R.id.opensl_switch).setOnClickListener(this); + findViewById(R.id.dy_bt_fp_switch).setOnClickListener(this); + findViewById(R.id.voip_p2p_switch).setOnClickListener(this); + findViewById(R.id.audio_process_switch).setOnClickListener(this); + findViewById(R.id.audio_process_qulity_switch).setOnClickListener(this); findViewById(R.id.log_switch).setOnClickListener(this); findViewById(R.id.hard_encode_switch).setOnClickListener(this); findViewById(R.id.btn_about).setOnClickListener(this); @@ -49,11 +65,23 @@ public void onClick(View v) { @Override public void onResume(){ super.onResume(); - - findViewById(R.id.opengl_switch).setSelected(StarRtcCore.openGLESEnable); + if(MLOC.hasLogout){ + finish(); + MLOC.hasLogout = true; + return; + } + findViewById(R.id.opengl_switch).setSelected(XHCustomConfig.getInstance().getOpenGLESEnable()); findViewById(R.id.log_switch).setSelected(FloatWindowsService.runing); - findViewById(R.id.hard_encode_switch).setSelected(StarRtcCore.hardEncode); - ((TextView)findViewById(R.id.video_size_text)).setText("("+ StarRtcCore.videoConfig_videoSize +")"); + findViewById(R.id.hard_encode_switch).setSelected(XHCustomConfig.getInstance().getHardwareEnable()); + ((TextView)findViewById(R.id.video_size_text)).setText("("+ XHCustomConfig.getInstance().getVideoSizeName() +")"); + findViewById(R.id.opensl_switch).setSelected(XHCustomConfig.getInstance().getOpenSLESEnable()); + findViewById(R.id.dy_bt_fp_switch).setSelected(XHCustomConfig.getInstance().getDynamicBitrateAndFpsEnable()); + findViewById(R.id.voip_p2p_switch).setSelected(XHCustomConfig.getInstance().getVoipP2PEnable()); + findViewById(R.id.audio_process_switch).setSelected(XHCustomConfig.getInstance().getAudioProcessEnable()); + findViewById(R.id.audio_process_qulity_switch).setSelected(XHCustomConfig.getInstance().getAECConfigQulity() == + XHConstants.XHAudioAECQulityEnum.AUDIO_AEC_LOW_QULITY?true:false); + ((TextView)findViewById(R.id.video_config_big_text)).setText("("+ XHCustomConfig.getInstance().getBigVideoFPS() +"/"+XHCustomConfig.getInstance().getBigVideoBitrate()+")"); + ((TextView)findViewById(R.id.video_config_small_text)).setText("("+ XHCustomConfig.getInstance().getSmallVideoFPS() +"/"+XHCustomConfig.getInstance().getSmallVideoBitrate()+")"); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -73,28 +101,37 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onClick(View v) { switch (v.getId()){ - case R.id.btn_main_logout: - finish(); + case R.id.btn_server_set: + startActivity(new Intent(this,SetupServerHostActivity.class)); + break; + case R.id.btn_test_loop: + startActivity(new Intent(this,LoopTestActivity.class)); + break; + case R.id.btn_test_p2p: + startActivity(new Intent(this,VoipP2PDemoActivity.class)); + break; + case R.id.btn_video_config_big: + showAddDialog(true); break; - case R.id.btn_test_speed: - startActivity(new Intent(this,EchoTestActivity.class)); + case R.id.btn_video_config_small: + showAddDialog(false); break; case R.id.btn_video_size:{ AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setItems(XHConstants.XHCropTypeEnumName, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { - XHConstants.XHCropTypeEnum selected = StarRtcCore.cropTypeEnum; + XHConstants.XHCropTypeEnum selected = XHCustomConfig.getInstance().getVideoSize(); for (XHConstants.XHCropTypeEnum e : XHConstants.XHCropTypeEnum.values()) { if(i==e.ordinal()) { selected = e; } } - if(StarRtcCore.setVideoSizeConfig(selected)){ + if(XHCustomConfig.getInstance().setDefConfigVideoSize(selected)){ MLOC.d("Setting","Setting selected "+ selected.toString()); - ((TextView)findViewById(R.id.video_size_text)).setText("("+ StarRtcCore.videoConfig_videoSize +")"); + ((TextView)findViewById(R.id.video_size_text)).setText("("+ XHCustomConfig.getInstance().getVideoSizeName() +")"); }else{ - MLOC.showMsg(SettingActivity.this,"固定配置无法修改"); + MLOC.showMsg(SettingActivity.this,"设备无法支持所选配置"); } } }); @@ -105,8 +142,8 @@ public void onClick(DialogInterface dialogInterface, int i) { } case R.id.opengl_switch: - StarRtcCore.getInstance().setOpenGLESEnable(StarRtcCore.openGLESEnable ?false:true); - findViewById(R.id.opengl_switch).setSelected(StarRtcCore.openGLESEnable); + XHCustomConfig.getInstance().setDefConfigOpenGLESEnable(XHCustomConfig.getInstance().getOpenGLESEnable() ?false:true); + findViewById(R.id.opengl_switch).setSelected(XHCustomConfig.getInstance().getOpenGLESEnable()); break; case R.id.log_switch: @@ -129,8 +166,8 @@ public void onClick(DialogInterface dialogInterface, int i) { } break; case R.id.hard_encode_switch: - if(StarRtcCore.setHardEncodeEnable(StarRtcCore.hardEncode?false:true)){ - findViewById(R.id.hard_encode_switch).setSelected(StarRtcCore.hardEncode); + if(XHCustomConfig.getInstance().setHardwareEnable(XHCustomConfig.getInstance().getHardwareEnable()?false:true)){ + findViewById(R.id.hard_encode_switch).setSelected(XHCustomConfig.getInstance().getHardwareEnable()); }else{ MLOC.showMsg(SettingActivity.this,"设置失败"); } @@ -144,6 +181,108 @@ public void onClick(DialogInterface dialogInterface, int i) { MLOC.hasLogout = true; finish(); break; + case R.id.opensl_switch: + XHCustomConfig.getInstance().setDefConfigOpenSLESEnable(XHCustomConfig.getInstance().getOpenSLESEnable() ?false:true); + findViewById(R.id.opensl_switch).setSelected(XHCustomConfig.getInstance().getOpenSLESEnable()); + break; + case R.id.dy_bt_fp_switch: + XHCustomConfig.getInstance().setDefConfigDynamicBitrateAndFpsEnable(XHCustomConfig.getInstance().getDynamicBitrateAndFpsEnable() ?false:true); + findViewById(R.id.dy_bt_fp_switch).setSelected(XHCustomConfig.getInstance().getDynamicBitrateAndFpsEnable()); + break; + case R.id.voip_p2p_switch: + XHCustomConfig.getInstance().setDefConfigVoipP2PEnable(XHCustomConfig.getInstance().getVoipP2PEnable() ?false:true); + findViewById(R.id.voip_p2p_switch).setSelected(XHCustomConfig.getInstance().getVoipP2PEnable()); + break; + case R.id.audio_process_switch: + XHCustomConfig.getInstance().setDefConfigAudioProcessEnable(XHCustomConfig.getInstance().getAudioProcessEnable() ?false:true); + findViewById(R.id.audio_process_switch).setSelected(XHCustomConfig.getInstance().getAudioProcessEnable()); + break; + case R.id.audio_process_qulity_switch: + XHCustomConfig.getInstance().setDefConfigAECConfigQulity( + XHCustomConfig.getInstance().getAECConfigQulity() == + XHConstants.XHAudioAECQulityEnum.AUDIO_AEC_HIGH_QULITY + ?XHConstants.XHAudioAECQulityEnum.AUDIO_AEC_LOW_QULITY + :XHConstants.XHAudioAECQulityEnum.AUDIO_AEC_HIGH_QULITY); + findViewById(R.id.audio_process_qulity_switch).setSelected(XHCustomConfig.getInstance().getAECConfigQulity() == + XHConstants.XHAudioAECQulityEnum.AUDIO_AEC_LOW_QULITY?true:false); + break; } } + + + private void showAddDialog(final Boolean isbig){ + final Dialog dialog = new Dialog(this,R.style.dialog_popup); + dialog.setContentView(R.layout.dialog_video_config_setting); + Window win = dialog.getWindow(); + win.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); + win.setGravity(Gravity.CENTER); + dialog.setCanceledOnTouchOutside(true); + + final TextView fpsTxt = (TextView) dialog.findViewById(R.id.fps_txt); + final SeekBar fpsSeekBar = (SeekBar) dialog.findViewById(R.id.fps_seekbar); + final TextView bitrateTxt = (TextView) dialog.findViewById(R.id.bitrate_txt); + final SeekBar bitrateSeekBar = (SeekBar) dialog.findViewById(R.id.bitrate_seekbar); + + if(isbig){ + fpsSeekBar.setMax(20); + fpsSeekBar.setProgress(XHCustomConfig.getInstance().getBigVideoFPS()); + fpsTxt.setText("帧率:"+XHCustomConfig.getInstance().getBigVideoFPS()); + bitrateSeekBar.setMax(2000); + bitrateSeekBar.setProgress(XHCustomConfig.getInstance().getBigVideoBitrate()); + bitrateTxt.setText("码率:"+XHCustomConfig.getInstance().getBigVideoBitrate()); + }else{ + fpsSeekBar.setMax(10); + fpsSeekBar.setProgress(XHCustomConfig.getInstance().getSmallVideoFPS()); + fpsTxt.setText("帧率:"+XHCustomConfig.getInstance().getSmallVideoFPS()); + bitrateSeekBar.setMax(200); + bitrateSeekBar.setProgress(XHCustomConfig.getInstance().getSmallVideoBitrate()); + bitrateTxt.setText("码率:"+XHCustomConfig.getInstance().getSmallVideoBitrate()); + } + + fpsSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + fpsTxt.setText("帧率:"+progress); + } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + }); + + bitrateSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + bitrateTxt.setText("码率:"+progress); + } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + }); + + + dialog.findViewById(R.id.btn_yes).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(isbig){ + XHCustomConfig.getInstance().setDefConfiBigVideoConfig(fpsSeekBar.getProgress(),bitrateSeekBar.getProgress()); + ((TextView)findViewById(R.id.video_config_big_text)).setText("("+ XHCustomConfig.getInstance().getBigVideoFPS() +"/"+XHCustomConfig.getInstance().getBigVideoBitrate()+")"); + }else{ + XHCustomConfig.getInstance().setDefConfiSmallVideoConfig(fpsSeekBar.getProgress(),bitrateSeekBar.getProgress()); + ((TextView)findViewById(R.id.video_config_small_text)).setText("("+ XHCustomConfig.getInstance().getSmallVideoFPS() +"/"+XHCustomConfig.getInstance().getSmallVideoBitrate()+")"); + } + dialog.dismiss(); + } + }); + dialog.findViewById(R.id.btn_no).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + dialog.show(); + } + } diff --git a/app/src/main/java/com/starrtc/demo/demo/setting/SetupServerHostActivity.java b/app/src/main/java/com/starrtc/demo/demo/setting/SetupServerHostActivity.java new file mode 100644 index 0000000..c7e4d1d --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/setting/SetupServerHostActivity.java @@ -0,0 +1,91 @@ +package com.starrtc.demo.demo.setting; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.demo.service.FloatWindowsService; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.starrtcsdk.api.XHClient; + +public class SetupServerHostActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setup_server_host); + findViewById(R.id.title_left_btn).setVisibility(View.VISIBLE); + findViewById(R.id.title_left_btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + ((TextView)findViewById(R.id.title_text)).setText("系统设置"); + + findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String work_server = ((EditText)findViewById(R.id.work_server)).getText().toString().trim(); + if(!TextUtils.isEmpty(work_server)){ + MLOC.saveWorkServer(work_server); + } + String user_id = ((EditText)findViewById(R.id.user_id)).getText().toString().trim(); + if(!TextUtils.isEmpty(user_id)){ + MLOC.saveUserId(user_id); + } + String app_id = ((EditText)findViewById(R.id.app_id)).getText().toString().trim(); + if(!TextUtils.isEmpty(app_id)){ + MLOC.saveAgentId(app_id); + } + String login_host = ((EditText)findViewById(R.id.login_host)).getText().toString().trim(); + if(!TextUtils.isEmpty(login_host)){ + MLOC.saveLoginServerUrl(login_host); + } + String im_host = ((EditText)findViewById(R.id.im_host)).getText().toString().trim(); + if(!TextUtils.isEmpty(im_host)){ + MLOC.saveIMSchduleUrl(im_host); + } + String chatroom_host = ((EditText)findViewById(R.id.chatroom_host)).getText().toString().trim(); + if(!TextUtils.isEmpty(chatroom_host)){ + MLOC.saveChatroomSchduleUrl(chatroom_host); + } + String src_host = ((EditText)findViewById(R.id.src_host)).getText().toString().trim(); + if(!TextUtils.isEmpty(src_host)){ + MLOC.saveSrcSchduleUrl(src_host); + } + String vdn_host = ((EditText)findViewById(R.id.vdn_host)).getText().toString().trim(); + if(!TextUtils.isEmpty(vdn_host)){ + MLOC.saveVdnSchduleUrl(vdn_host); + } + String voip_host = ((EditText)findViewById(R.id.voip_host)).getText().toString().trim(); + if(!TextUtils.isEmpty(voip_host)){ + MLOC.saveVoipServerUrl(voip_host); + } + XHClient.getInstance().getLoginManager().logout(); + stopService(new Intent(SetupServerHostActivity.this, FloatWindowsService.class)); + MLOC.hasLogout = true; + finish(); + } + }); + } + @Override + public void onResume(){ + super.onResume(); + ((EditText)findViewById(R.id.work_server)).setText(InterfaceUrls.BASE_URL); + ((EditText)findViewById(R.id.user_id)).setText(MLOC.userId); + ((EditText)findViewById(R.id.app_id)).setText(MLOC.agentId); + ((EditText)findViewById(R.id.login_host)).setText(MLOC.STAR_LOGIN_URL); + ((EditText)findViewById(R.id.im_host)).setText(MLOC.IM_SCHEDULE_URL); + ((EditText)findViewById(R.id.chatroom_host)).setText(MLOC.CHAT_ROOM_SCHEDULE_URL); + ((EditText)findViewById(R.id.src_host)).setText(MLOC.LIVE_SRC_SCHEDULE_URL); + ((EditText)findViewById(R.id.vdn_host)).setText(MLOC.LIVE_VDN_SCHEDULE_URL); + ((EditText)findViewById(R.id.voip_host)).setText(MLOC.VOIP_SERVER_URL); + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/test/EchoTestActivity.java b/app/src/main/java/com/starrtc/demo/demo/test/EchoTestActivity.java deleted file mode 100644 index 530e589..0000000 --- a/app/src/main/java/com/starrtc/demo/demo/test/EchoTestActivity.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.starrtc.demo.demo.test; - -import android.app.Activity; -import android.os.Handler; -import android.os.Message; -import android.os.Bundle; -import android.view.View; -import android.widget.EditText; - -import com.starrtc.demo.R; -import com.starrtc.demo.demo.BaseActivity; -import com.starrtc.demo.utils.AEvent; -import com.starrtc.demo.utils.IEventListener; -import com.starrtc.starrtcsdk.core.StarRtcCore; -import com.starrtc.starrtcsdk.core.im.callback.IStarCallback; - -public class EchoTestActivity extends BaseActivity{ - - private EditText traceBox; - private View clearBtn; - private View backBtn; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_echo_test); - StarRtcCore.getInstance().voipEchoTest(new IStarCallback() { - @Override - public void callback(boolean reqSuccess, String statusCode, final String data) { - runOnUiThread(new Runnable() { - @Override - public void run() { - String msgStr = data; - if(traceBox!=null){ - traceBox.append(msgStr+"\n"); - } - } - }); - } - }); - traceBox = (EditText) findViewById(R.id.trace_box); - clearBtn = findViewById(R.id.clear_btn); - backBtn = findViewById(R.id.back_btn); - clearBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - traceBox.setText(""); - } - }); - backBtn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); - } - - - - -} diff --git a/app/src/main/java/com/starrtc/demo/demo/test/LayoutTestActivity.java b/app/src/main/java/com/starrtc/demo/demo/test/LayoutTestActivity.java deleted file mode 100644 index 1b0b9ce..0000000 --- a/app/src/main/java/com/starrtc/demo/demo/test/LayoutTestActivity.java +++ /dev/null @@ -1,265 +0,0 @@ -package com.starrtc.demo.demo.test; - -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.graphics.Color; -import android.os.Bundle; -import android.view.View; -import android.view.animation.LinearInterpolator; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.starrtc.demo.R; -import com.starrtc.demo.utils.ColorUtils; -import com.starrtc.demo.utils.DensityUtils; -import com.starrtc.demo.utils.StatusBarUtils; - -import java.util.ArrayList; -import java.util.Random; - -public class LayoutTestActivity extends Activity { - - private RelativeLayout vRootView; - private TextView vPlayerCount; - private ArrayList mPlayerList; - private int borderW = 0; - private int borderH = 0; - - @SuppressLint("WrongViewCast") - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_star_rtc_main); - //StatusBarUtils.with(this).setColor(Color.parseColor("#FF6C00")).init(); -// setContentView(R.layout.activity_layout_test); -// findViewById(R.id.button_add).setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// addPlayer(); -// } -// }); -// findViewById(R.id.button_delete).setOnClickListener(new View.OnClickListener() { -// @Override -// public void onClick(View v) { -// deletePlayer(); -// } -// }); -// borderW = DensityUtils.screenWidth(this); -// borderH = borderW/3*4; -// mPlayerList = new ArrayList<>(); -// vRootView = (RelativeLayout) findViewById(R.id.root_view); -// vPlayerCount = (TextView)findViewById(R.id.count_text); - } - - private void addPlayer(){ - RelativeLayout player = new RelativeLayout(this); - mPlayerList.add(player); - vRootView.addView(player); - player.setBackgroundColor(ColorUtils.randomColor(200,200,200)); - player.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - changeLayout(v); - } - }); - resetLayout1(); - vPlayerCount.setText(""+mPlayerList.size()); - } - - private void changeLayout(View v){ - if(v == mPlayerList.get(0))return; - final RelativeLayout clickPlayer = (RelativeLayout) v; - int clickIndex = 0; - for (int i=0;i0&&i<3){ - RelativeLayout player = mPlayerList.get(i); - RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(borderW/3,borderH/4); - player.setLayoutParams(lp); - player.setX((i-1)*borderW/3); - player.setY(borderH-borderH/4); - }else{ - RelativeLayout player = mPlayerList.get(i); - RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(borderW/3,borderH/4); - player.setLayoutParams(lp); - player.setX(borderW-borderW/3); - player.setY((i-3)*borderH/4); - } - } - break; - } - } - } - - -} diff --git a/app/src/main/java/com/starrtc/demo/demo/test/LoopTestActivity.java b/app/src/main/java/com/starrtc/demo/demo/test/LoopTestActivity.java index ceba97e..9e5b4cf 100644 --- a/app/src/main/java/com/starrtc/demo/demo/test/LoopTestActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/test/LoopTestActivity.java @@ -11,11 +11,14 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; -import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.demo.demo.MLOC; import com.starrtc.starrtcsdk.api.XHConstants; import com.starrtc.starrtcsdk.core.StarRtcCore; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; import com.starrtc.starrtcsdk.core.player.StarPlayer; +import java.util.Set; + public class LoopTestActivity extends BaseActivity implements View.OnClickListener { private StarPlayer selfPlayer; @@ -26,10 +29,11 @@ public class LoopTestActivity extends BaseActivity implements View.OnClickListen private TextView vVideoSizeText; private TextView vVideoFpsText; private TextView vMediaConfigText; + + private StarRTCAudioManager starRTCAudioManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - DisplayMetrics dm = getResources().getDisplayMetrics(); if(dm.heightPixels>dm.widthPixels){ setContentView(R.layout.activity_loop_p); @@ -37,6 +41,15 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_loop_l); } + starRTCAudioManager = StarRTCAudioManager.create(this.getApplicationContext()); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + MLOC.d("onAudioDeviceChanged ",selectedAudioDevice.name()); + } + }); + + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN); findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() { @@ -145,7 +158,6 @@ public void run() { targetSmallPlayer.setLayoutParams(lp2); targetSmallPlayer.setVideoSize(StarRtcCore.smallVideoH, StarRtcCore.smallVideoW); } - StarRtcCore.getInstance().initLoopTest(this, targetPlayer,0, targetSmallPlayer,1, @@ -153,13 +165,15 @@ public void run() { selfSmallPlayer,3, XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_RIHGT); } - } @Override public void onBackPressed() { StarRtcCore.getInstance().stopLoopTest(); StarRtcCore.stopKeepWatch(); + if(starRTCAudioManager!=null){ + starRTCAudioManager.stop(); + } finish(); } diff --git a/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveActivity.java b/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveActivity.java index 423ffb0..bd036b6 100644 --- a/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveActivity.java @@ -25,9 +25,9 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.listener.XHLiveManagerListener; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.listener.XHLiveManagerListener; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.demo.videomeeting.ViewPosition; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.DensityUtils; @@ -35,8 +35,9 @@ import com.starrtc.starrtcsdk.api.XHConstants; import com.starrtc.starrtcsdk.api.XHLiveItem; import com.starrtc.starrtcsdk.api.XHLiveManager; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import com.starrtc.starrtcsdk.core.StarRtcCore; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; import com.starrtc.starrtcsdk.core.player.StarPlayerScaleType; import com.starrtc.starrtcsdk.core.player.StarWhitePanel; @@ -47,6 +48,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; public class VideoLiveActivity extends BaseActivity { @@ -84,6 +86,8 @@ public class VideoLiveActivity extends BaseActivity { private Boolean isPortrait = true; + private StarRTCAudioManager starRTCAudioManager; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -94,6 +98,14 @@ protected void onCreate(Bundle savedInstanceState) { WindowManager.LayoutParams. FLAG_FULLSCREEN); setContentView(R.layout.activity_video_live); + starRTCAudioManager = StarRTCAudioManager.create(this); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + + } + }); + DisplayMetrics dm = getResources().getDisplayMetrics(); if(dm.heightPixels>dm.widthPixels){ isPortrait = true; @@ -110,13 +122,13 @@ protected void onCreate(Bundle savedInstanceState) { if(createrId.equals(MLOC.userId)){ if(TextUtils.isEmpty(liveName)||liveType==null){ MLOC.showMsg(this,"没有直播信息"); - finish(); + stopAndFinish(); return; } }else{ if(TextUtils.isEmpty(liveName)||liveType==null){ MLOC.showMsg(this,"没有直播信息"); - finish(); + stopAndFinish(); return; } } @@ -124,6 +136,7 @@ protected void onCreate(Bundle savedInstanceState) { liveManager = XHClient.getInstance().getLiveManager(this); liveManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_BOTTOM); + liveManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_VIDEO_AND_AUDIO); liveManager.addListener(new XHLiveManagerListener()); @@ -253,7 +266,7 @@ public void onClick(View v) { if(vPanelBtn.isSelected()){ vPanelBtn.setSelected(false); vCleanBtn.setVisibility(View.INVISIBLE); - vPaintPlayer.puase(); + vPaintPlayer.pause(); }else{ vPanelBtn.setSelected(true); vCleanBtn.setVisibility(View.VISIBLE); @@ -289,7 +302,7 @@ private void createNewLive(){ XHLiveItem liveItem = new XHLiveItem(); liveItem.setLiveName(liveName); liveItem.setLiveType(liveType); - liveManager.createLive(liveItem, new IXHCallback() { + liveManager.createLive(liveItem, new IXHResultCallback() { @Override public void success(Object data) { liveId = (String) data; @@ -302,8 +315,7 @@ public void failed(final String errMsg) { @Override public void run() { MLOC.showMsg(VideoLiveActivity.this,errMsg); - removeListener(); - finish(); + stopAndFinish(); } }); } @@ -313,7 +325,7 @@ public void run() { private void starLive(){ //开始直播 isUploader = true; - liveManager.startLive(liveId, new IXHCallback() { + liveManager.startLive(liveId, new IXHResultCallback() { @Override public void success(Object data) { MLOC.d("XHLiveManager","startLive success "+data); @@ -325,8 +337,7 @@ public void failed(final String errMsg) { @Override public void run() { MLOC.showMsg(VideoLiveActivity.this,errMsg); - removeListener(); - finish(); + stopAndFinish(); } }); @@ -337,7 +348,7 @@ public void run() { private void joinLive(){ //观众加入直播 isUploader = false; - liveManager.watchLive(liveId, new IXHCallback() { + liveManager.watchLive(liveId, new IXHResultCallback() { @Override public void success(Object data) { MLOC.d("XHLiveManager","watchLive success "+data); @@ -349,8 +360,7 @@ public void failed(final String errMsg) { @Override public void run() { MLOC.showMsg(VideoLiveActivity.this,errMsg); - removeListener(); - finish(); + stopAndFinish(); } }); @@ -450,11 +460,10 @@ public void onClick(DialogInterface arg0, int arg1) { } private void stop(){ - liveManager.leaveLive(liveId, new IXHCallback() { + liveManager.leaveLive(liveId, new IXHResultCallback() { @Override public void success(Object data) { - removeListener(); - finish(); + stopAndFinish(); } @Override @@ -465,8 +474,7 @@ public void run() { MLOC.showMsg(VideoLiveActivity.this,errMsg); } }); - removeListener(); - finish(); + stopAndFinish(); } }); } @@ -890,8 +898,7 @@ public void run() { @Override public void run() { MLOC.showMsg(VideoLiveActivity.this,"你已被踢出"); - removeListener(); - finish(); + stopAndFinish(); } }); break; @@ -933,8 +940,7 @@ public void run() { errStr = "直播关闭"; } MLOC.showMsg(getApplicationContext(),errStr); - removeListener(); - finish(); + stopAndFinish(); } }); break; @@ -1085,5 +1091,11 @@ public void onClick(DialogInterface dialogInterface, int i) { } } - + private void stopAndFinish(){ + if(starRTCAudioManager!=null){ + starRTCAudioManager.stop(); + } + removeListener(); + finish(); + } } diff --git a/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveCreateActivity.java b/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveCreateActivity.java index 6730173..b18d067 100644 --- a/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveCreateActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveCreateActivity.java @@ -1,6 +1,5 @@ package com.starrtc.demo.demo.videolive; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; @@ -12,7 +11,6 @@ import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; import com.starrtc.starrtcsdk.api.XHConstants; -import com.starrtc.starrtcsdk.api.XHLiveItem; public class VideoLiveCreateActivity extends BaseActivity { diff --git a/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveListActivity.java b/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveListActivity.java index 1dd9c19..220fec5 100644 --- a/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveListActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/videolive/VideoLiveListActivity.java @@ -1,6 +1,5 @@ package com.starrtc.demo.demo.videolive; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; @@ -20,12 +19,11 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; -import com.starrtc.demo.utils.IEventListener; import com.starrtc.demo.utils.StarListUtil; public class VideoLiveListActivity extends BaseActivity implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { diff --git a/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingActivity.java b/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingActivity.java index e51bd4c..333840c 100644 --- a/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingActivity.java @@ -18,30 +18,32 @@ import org.json.JSONObject; import java.util.ArrayList; +import java.util.Set; import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.listener.XHMeetingManagerListener; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.listener.XHMeetingManagerListener; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.starrtcsdk.api.XHClient; import com.starrtc.starrtcsdk.api.XHConstants; import com.starrtc.starrtcsdk.api.XHMeetingItem; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import com.starrtc.starrtcsdk.apiInterface.IXHMeetingManager; import com.starrtc.starrtcsdk.core.StarRtcCore; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; import com.starrtc.starrtcsdk.core.player.StarPlayer; import com.starrtc.starrtcsdk.core.player.StarPlayerScaleType; public class VideoMeetingActivity extends BaseActivity{ public static String MEETING_ID = "MEETING_ID"; //会议ID - public static String MEETING_NAME = "MEETING_NAME"; //会议名称 - public static String MEETING_TYPE = "MEETING_TYPE"; //会议类型 - public static String MEETING_CREATER = "MEETING_CREATER"; //会议创建者 + public static String MEETING_NAME = "CLASS_NAME"; //会议名称 + public static String MEETING_TYPE = "CLASS_TYPE"; //会议类型 + public static String MEETING_CREATER = "CLASS_CREATER"; //会议创建者 private String meetingId; private String meetingName; @@ -55,6 +57,7 @@ public class VideoMeetingActivity extends BaseActivity{ private int borderH = 0; private IXHMeetingManager meetingManager; + private StarRTCAudioManager starRTCAudioManager; private Boolean isPortrait = true; @Override @@ -65,6 +68,14 @@ protected void onCreate(Bundle savedInstanceState) { WindowManager.LayoutParams. FLAG_FULLSCREEN); setContentView(R.layout.activity_video_meeting); + starRTCAudioManager = StarRTCAudioManager.create(getApplicationContext()); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + + } + }); + DisplayMetrics dm = getResources().getDisplayMetrics(); if(dm.heightPixels>dm.widthPixels){ isPortrait = true; @@ -74,6 +85,7 @@ protected void onCreate(Bundle savedInstanceState) { meetingManager = XHClient.getInstance().getMeetingManager(this); meetingManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_RIHGT); + meetingManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_VIDEO_AND_AUDIO); meetingManager.addListener(new XHMeetingManagerListener()); addListener(); @@ -129,7 +141,7 @@ private void createNewMeeting(){ XHMeetingItem meetingItem = new XHMeetingItem(); meetingItem.setMeetingName(meetingName); meetingItem.setMeetingType((XHConstants.XHMeetingType) getIntent().getSerializableExtra(MEETING_TYPE)); - meetingManager.createMeeting(meetingItem, new IXHCallback() { + meetingManager.createMeeting(meetingItem, new IXHResultCallback() { @Override public void success(Object data) { meetingId = (String) data; @@ -142,8 +154,7 @@ public void failed(final String errMsg) { @Override public void run() { MLOC.showMsg(VideoMeetingActivity.this,errMsg); - removeListener(); - finish(); + stopAndFinish(); } }); } @@ -151,11 +162,10 @@ public void run() { } private void stop(){ - meetingManager.leaveMeeting(meetingId, new IXHCallback() { + meetingManager.leaveMeeting(meetingId, new IXHResultCallback() { @Override public void success(Object data) { - removeListener(); - finish(); + stopAndFinish(); } @Override @@ -166,15 +176,14 @@ public void run() { MLOC.showMsg(VideoMeetingActivity.this,errMsg); } }); - removeListener(); - finish(); + stopAndFinish(); } }); } private void joinMeeting(){ //开始直播 - meetingManager.joinMeeting(meetingId, new IXHCallback() { + meetingManager.joinMeeting(meetingId, new IXHResultCallback() { @Override public void success(Object data) { MLOC.d("XHMeetingManager","startLive success "+data); @@ -186,8 +195,7 @@ public void failed(final String errMsg) { @Override public void run() { MLOC.showMsg(VideoMeetingActivity.this,errMsg); - removeListener(); - finish(); + stopAndFinish(); } }); @@ -561,8 +569,7 @@ public void run() { public void run() { String errStr = (String) eventObj; MLOC.showMsg(getApplicationContext(),errStr); - removeListener(); - finish(); + stopAndFinish(); } }); break; @@ -573,8 +580,7 @@ public void run() { @Override public void run() { MLOC.showMsg(VideoMeetingActivity.this,"你已被踢出"); - removeListener(); - finish(); + stopAndFinish(); } }); break; @@ -586,4 +592,11 @@ public void run() { break; } } + private void stopAndFinish(){ + if(starRTCAudioManager!=null){ + starRTCAudioManager.stop(); + } + removeListener(); + finish(); + } } diff --git a/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingCreateActivity.java b/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingCreateActivity.java index 2a99f44..9d6f2bd 100644 --- a/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingCreateActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingCreateActivity.java @@ -1,6 +1,5 @@ package com.starrtc.demo.demo.videomeeting; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; diff --git a/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingListActivity.java b/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingListActivity.java index 75a0439..752291a 100644 --- a/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingListActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/videomeeting/VideoMeetingListActivity.java @@ -1,6 +1,5 @@ package com.starrtc.demo.demo.videomeeting; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; @@ -20,12 +19,11 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; -import com.starrtc.demo.demo.serverAPI.InterfaceUrls; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.serverAPI.InterfaceUrls; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; -import com.starrtc.demo.utils.IEventListener; import com.starrtc.demo.utils.StarListUtil; public class VideoMeetingListActivity extends BaseActivity implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { diff --git a/app/src/main/java/com/starrtc/demo/demo/voip/VoipActivity.java b/app/src/main/java/com/starrtc/demo/demo/voip/VoipActivity.java index 7d367c4..11a8c3b 100644 --- a/app/src/main/java/com/starrtc/demo/demo/voip/VoipActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/voip/VoipActivity.java @@ -15,26 +15,29 @@ import android.view.View; import android.view.WindowManager; import android.widget.Chronometer; +import android.widget.FrameLayout; import android.widget.TextView; import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.starrtcsdk.api.XHClient; import com.starrtc.starrtcsdk.api.XHConstants; import com.starrtc.starrtcsdk.api.XHVoipManager; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import com.starrtc.starrtcsdk.core.StarRtcCore; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; import com.starrtc.starrtcsdk.core.player.StarPlayer; import com.starrtc.starrtcsdk.core.pusher.ScreenRecorder; import java.text.SimpleDateFormat; +import java.util.Set; public class VoipActivity extends BaseActivity implements View.OnClickListener { @@ -51,16 +54,27 @@ public class VoipActivity extends BaseActivity implements View.OnClickListener { private String targetId; private Boolean isTalking = false; + private StarRTCAudioManager starRTCAudioManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + starRTCAudioManager = StarRTCAudioManager.create(this.getApplicationContext()); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + MLOC.d("onAudioDeviceChanged ",selectedAudioDevice.name()); + } + }); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN); setContentView(R.layout.activity_voip); voipManager = XHClient.getInstance().getVoipManager(); voipManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_BOTTOM); + voipManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_VIDEO_AND_AUDIO); addListener(); targetId = getIntent().getStringExtra("targetId"); @@ -94,8 +108,8 @@ public void onClick(View v) { } }); findViewById(R.id.screen_btn).setOnClickListener(this); - voipManager.setupView(this,selfPlayer, targetPlayer, new IXHCallback() { -// voipManager.setupView(this,null, targetPlayer, new IXHCallback() { + voipManager.setupView(this,selfPlayer, targetPlayer, new IXHResultCallback() { +// voipManager.setupView(this,null, targetPlayer, new IXHResultCallback() { @Override public void success(Object data) { MLOC.d("newVoip","setupView success"); @@ -104,7 +118,7 @@ public void success(Object data) { public void run() { if(action.equals(CALLING)){ MLOC.d("newVoip","call"); - voipManager.call(targetId, new IXHCallback() { + voipManager.call(targetId, new IXHResultCallback() { @Override public void success(Object data) { MLOC.d("newVoip","call success"); @@ -112,10 +126,9 @@ public void success(Object data) { @Override public void failed(String errMsg) { MLOC.d("newVoip","call failed"); - VoipActivity.this.finish(); + stopAndFinish(); } }); - showCallingView(); }else{ MLOC.d("newVoip","onPickup"); onPickup(); @@ -127,9 +140,12 @@ public void failed(String errMsg) { @Override public void failed(String errMsg) { MLOC.d("newVoip","setupView failed"); - VoipActivity.this.finish(); + stopAndFinish(); } }); + if(action.equals(CALLING)){ + showCallingView(); + } } public void addListener(){ @@ -193,11 +209,11 @@ public void onClick(DialogInterface arg0, int arg1) { @Override public void onClick(DialogInterface arg0, int arg1) { timer.stop(); - voipManager.hangup(new IXHCallback() { + voipManager.hangup(new IXHResultCallback() { @Override public void success(Object data) { removeListener(); - finish(); + stopAndFinish(); } @Override @@ -226,7 +242,7 @@ public void dispatchEvent(String aEventID, boolean success, final Object eventOb public void run() { MLOC.d("","对方线路忙"); MLOC.showMsg(VoipActivity.this,"对方线路忙"); - VoipActivity.this.finish(); + stopAndFinish(); } }); break; @@ -236,7 +252,7 @@ public void run() { public void run() { MLOC.d("","对方拒绝通话"); MLOC.showMsg(VoipActivity.this,"对方拒绝通话"); - VoipActivity.this.finish(); + stopAndFinish(); } }); break; @@ -247,7 +263,7 @@ public void run() { MLOC.d("","对方已挂断"); MLOC.showMsg(VoipActivity.this,"对方已挂断"); timer.stop(); - VoipActivity.this.finish(); + stopAndFinish(); } }); break; @@ -260,7 +276,7 @@ public void run() { @Override public void run() { MLOC.d("",(String) eventObj); - VoipActivity.this.finish(); + stopAndFinish(); } }); break; @@ -269,13 +285,8 @@ public void run() { private void showCallingView(){ - runOnUiThread(new Runnable() { - @Override - public void run() { - findViewById(R.id.calling_view).setVisibility(View.VISIBLE); - } - }); - + findViewById(R.id.calling_view).setVisibility(View.VISIBLE); + findViewById(R.id.talking_view).setVisibility(View.INVISIBLE); } private void showTalkingView(){ @@ -285,15 +296,17 @@ public void run() { isTalking = true; findViewById(R.id.calling_view).setVisibility(View.INVISIBLE); findViewById(R.id.talking_view).setVisibility(View.VISIBLE); + FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) findViewById(R.id.talking_view).getLayoutParams(); + flp.width = findViewById(R.id.calling_view).getWidth(); + findViewById(R.id.talking_view).setLayoutParams(flp); timer.setBase(SystemClock.elapsedRealtime()); timer.start(); } }); - } private void onPickup(){ - voipManager.accept(targetId, new IXHCallback() { + voipManager.accept(targetId, new IXHResultCallback() { @Override public void success(Object data) { MLOC.d("newVoip","onPickup OK "); @@ -301,7 +314,7 @@ public void success(Object data) { @Override public void failed(String errMsg) { MLOC.d("newVoip","onPickup failed "); - VoipActivity.this.finish(); + stopAndFinish(); } }); showTalkingView(); @@ -311,28 +324,28 @@ public void failed(String errMsg) { public void onClick(View v) { switch (v.getId()){ case R.id.calling_hangup: - voipManager.cancel(new IXHCallback() { + voipManager.cancel(new IXHResultCallback() { @Override public void success(Object data) { - VoipActivity.this.finish(); + stopAndFinish(); } @Override public void failed(String errMsg) { - VoipActivity.this.finish(); + stopAndFinish(); } }); break; case R.id.talking_hangup: - voipManager.hangup(new IXHCallback() { + voipManager.hangup(new IXHResultCallback() { @Override public void success(Object data) { - VoipActivity.this.finish(); + stopAndFinish(); } @Override public void failed(String errMsg) { - VoipActivity.this.finish(); + stopAndFinish(); } }); break; @@ -385,7 +398,13 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { final int dpi = metrics.densityDpi; mRecorder = new ScreenRecorder(width, height, bitrate, dpi, mediaProjection); StarRtcCore.getInstance().voipShareScreen(mRecorder); + } + private void stopAndFinish(){ + if(starRTCAudioManager !=null){ + starRTCAudioManager.stop(); + } + VoipActivity.this.finish(); } } diff --git a/app/src/main/java/com/starrtc/demo/demo/voip/VoipAudioActivity.java b/app/src/main/java/com/starrtc/demo/demo/voip/VoipAudioActivity.java new file mode 100644 index 0000000..558d479 --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/demo/voip/VoipAudioActivity.java @@ -0,0 +1,309 @@ +package com.starrtc.demo.demo.voip; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.os.Bundle; +import android.os.SystemClock; +import android.support.v7.app.AlertDialog; +import android.view.View; +import android.view.WindowManager; +import android.widget.Chronometer; +import android.widget.TextView; + +import com.starrtc.demo.R; +import com.starrtc.demo.demo.BaseActivity; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.ui.CircularCoverView; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.demo.utils.ColorUtils; +import com.starrtc.demo.utils.DensityUtils; +import com.starrtc.starrtcsdk.api.XHClient; +import com.starrtc.starrtcsdk.api.XHConstants; +import com.starrtc.starrtcsdk.api.XHVoipManager; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; +import com.starrtc.starrtcsdk.core.audio.StarRTCAudioManager; + +import java.text.SimpleDateFormat; +import java.util.Set; + +public class VoipAudioActivity extends BaseActivity implements View.OnClickListener { + + private XHVoipManager voipManager; + private Chronometer timer; + + public static String ACTION = "ACTION"; + public static String RING = "RING"; + public static String CALLING = "CALLING"; + private String action; + private String targetId; + + private StarRTCAudioManager starRTCAudioManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , + WindowManager.LayoutParams. FLAG_FULLSCREEN); + setContentView(R.layout.activity_voip_audio); + + starRTCAudioManager = StarRTCAudioManager.create(this.getApplicationContext()); + starRTCAudioManager.start(new StarRTCAudioManager.AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(StarRTCAudioManager.AudioDevice selectedAudioDevice, Set availableAudioDevices) { + MLOC.d("onAudioDeviceChanged ",selectedAudioDevice.name()); + } + }); + + voipManager = XHClient.getInstance().getVoipManager(); + voipManager.setRtcMediaType(XHConstants.XHRtcMediaTypeEnum.STAR_RTC_MEDIA_TYPE_AUDIO_ONLY); + voipManager.setDeviceDirection(XHConstants.XHDeviceDirectionEnum.STAR_DEVICE_DIRECTION_HOME_BOTTOM); + addListener(); + + targetId = getIntent().getStringExtra("targetId"); + action = getIntent().getStringExtra(ACTION); + timer = (Chronometer) findViewById(R.id.timer); + + + ((TextView)findViewById(R.id.targetid_text)).setText(targetId); + findViewById(R.id.head_bg).setBackgroundColor(ColorUtils.getColor(VoipAudioActivity.this,targetId)); + ((CircularCoverView)findViewById(R.id.head_cover)).setCoverColor(Color.parseColor("#000000")); + int cint = DensityUtils.dip2px(VoipAudioActivity.this,45); + ((CircularCoverView)findViewById(R.id.head_cover)).setRadians(cint, cint, cint, cint,0); + + findViewById(R.id.hangup).setOnClickListener(this); + + + voipManager.setupView(this,null, null, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("newVoip","setupView success"); + runOnUiThread(new Runnable() { + @Override + public void run() { + if(action.equals(CALLING)){ + MLOC.d("newVoip","call"); + voipManager.call(targetId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("newVoip","call success"); + } + @Override + public void failed(String errMsg) { + MLOC.d("newVoip","call failed"); + stopAndFinish(); + } + }); + }else{ + MLOC.d("newVoip","onPickup"); + onPickup(); + } + } + }); + } + + @Override + public void failed(String errMsg) { + MLOC.d("newVoip","setupView failed"); + stopAndFinish(); + } + }); + if(action.equals(CALLING)){ + showCallingView(); + } + } + + public void addListener(){ + AEvent.addListener(AEvent.AEVENT_VOIP_INIT_COMPLETE,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_BUSY,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_REFUSED,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_HANGUP,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_CONNECT,this); + AEvent.addListener(AEvent.AEVENT_VOIP_REV_ERROR,this); + } + + public void removeListener(){ + MLOC.canPickupVoip = true; + AEvent.removeListener(AEvent.AEVENT_VOIP_INIT_COMPLETE,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_BUSY,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_REFUSED,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_HANGUP,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_CONNECT,this); + AEvent.removeListener(AEvent.AEVENT_VOIP_REV_ERROR,this); + } + + @Override + public void onResume(){ + super.onResume(); + MLOC.canPickupVoip = false; + HistoryBean historyBean = new HistoryBean(); + historyBean.setType(CoreDB.HISTORY_TYPE_VOIP); + historyBean.setLastTime(new SimpleDateFormat("MM-dd HH:mm").format(new java.util.Date())); + historyBean.setConversationId(targetId); + historyBean.setNewMsgCount(1); + MLOC.setHistory(historyBean,true); + } + + @Override + public void onPause(){ + super.onPause(); + } + + @Override + public void onRestart(){ + super.onRestart(); + addListener(); + } + + @Override + public void onDestroy(){ + removeListener(); + super.onDestroy(); + } + + @Override + public void onBackPressed(){ + new AlertDialog.Builder(VoipAudioActivity.this).setCancelable(true) + .setTitle("是否挂断?") + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + + } + }).setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + timer.stop(); + voipManager.hangup(new IXHResultCallback() { + @Override + public void success(Object data) { + stopAndFinish(); + } + + @Override + public void failed(final String errMsg) { + MLOC.d("","AEVENT_VOIP_ON_STOP errMsg:"+errMsg); + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.showMsg(VoipAudioActivity.this,errMsg); + } + }); + } + }); + } + } + ).show(); + } + + @Override + public void dispatchEvent(String aEventID, boolean success, final Object eventObj) { + super.dispatchEvent(aEventID,success,eventObj); + switch (aEventID){ + case AEvent.AEVENT_VOIP_REV_BUSY: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d("","对方线路忙"); + MLOC.showMsg(VoipAudioActivity.this,"对方线路忙"); + stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_REFUSED: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d("","对方拒绝通话"); + MLOC.showMsg(VoipAudioActivity.this,"对方拒绝通话"); + stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_HANGUP: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d("","对方已挂断"); + MLOC.showMsg(VoipAudioActivity.this,"对方已挂断"); + timer.stop(); + stopAndFinish(); + } + }); + break; + case AEvent.AEVENT_VOIP_REV_CONNECT: + MLOC.d("","对方允许通话"); + showTalkingView(); + break; + case AEvent.AEVENT_VOIP_REV_ERROR: + runOnUiThread(new Runnable() { + @Override + public void run() { + MLOC.d("",(String) eventObj); + stopAndFinish(); + } + }); + break; + } + } + + private void showCallingView(){ + findViewById(R.id.calling_txt).setVisibility(View.VISIBLE); + findViewById(R.id.timer).setVisibility(View.INVISIBLE); + } + + private void showTalkingView(){ + runOnUiThread(new Runnable() { + @Override + public void run() { + findViewById(R.id.calling_txt).setVisibility(View.INVISIBLE); + findViewById(R.id.timer).setVisibility(View.VISIBLE); + timer.setBase(SystemClock.elapsedRealtime()); + timer.start(); + } + }); + } + + private void onPickup(){ + voipManager.accept(targetId, new IXHResultCallback() { + @Override + public void success(Object data) { + MLOC.d("newVoip","onPickup OK "); + } + @Override + public void failed(String errMsg) { + MLOC.d("newVoip","onPickup failed "); + stopAndFinish(); + } + }); + showTalkingView(); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.hangup: + voipManager.hangup(new IXHResultCallback() { + @Override + public void success(Object data) { + stopAndFinish(); + } + + @Override + public void failed(String errMsg) { + stopAndFinish(); + } + }); + break; + } + } + + private void stopAndFinish(){ + if(starRTCAudioManager !=null){ + starRTCAudioManager.stop(); + } + VoipAudioActivity.this.finish(); + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/voip/VoipCreateActivity.java b/app/src/main/java/com/starrtc/demo/demo/voip/VoipCreateActivity.java index c159f7b..e3a82e3 100644 --- a/app/src/main/java/com/starrtc/demo/demo/voip/VoipCreateActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/voip/VoipCreateActivity.java @@ -1,5 +1,7 @@ package com.starrtc.demo.demo.voip; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; @@ -28,17 +30,36 @@ public void onClick(View v) { findViewById(R.id.yes_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - String inputId = ((EditText)findViewById(R.id.targetid_input)).getText().toString(); + final String inputId = ((EditText)findViewById(R.id.targetid_input)).getText().toString(); if(TextUtils.isEmpty(inputId)){ MLOC.showMsg(VoipCreateActivity.this,"id不能为空"); }else{ - Intent intent = new Intent(VoipCreateActivity.this,VoipActivity.class); - intent.putExtra("targetId",inputId); - intent.putExtra(VoipActivity.ACTION,VoipActivity.CALLING); - startActivity(intent); - finish(); + + AlertDialog.Builder builder=new AlertDialog.Builder(VoipCreateActivity.this); + builder.setItems(new String[]{"视频通话","音频通话"}, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + if(i==0){ + Intent intent = new Intent(VoipCreateActivity.this,VoipActivity.class); + intent.putExtra("targetId",inputId); + intent.putExtra(VoipActivity.ACTION,VoipActivity.CALLING); + startActivity(intent); + VoipCreateActivity.this.finish(); + }else if(i==1){ + Intent intent = new Intent(VoipCreateActivity.this,VoipAudioActivity.class); + intent.putExtra("targetId",inputId); + intent.putExtra(VoipActivity.ACTION,VoipAudioActivity.CALLING); + startActivity(intent); + VoipCreateActivity.this.finish(); + } + } + }); + builder.setCancelable(true); + AlertDialog dialog=builder.create(); + dialog.show(); } } }); + } } diff --git a/app/src/main/java/com/starrtc/demo/demo/voip/VoipListActivity.java b/app/src/main/java/com/starrtc/demo/demo/voip/VoipListActivity.java index b1ebba1..3a21af0 100644 --- a/app/src/main/java/com/starrtc/demo/demo/voip/VoipListActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/voip/VoipListActivity.java @@ -1,6 +1,8 @@ package com.starrtc.demo.demo.voip; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; @@ -17,9 +19,9 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; @@ -56,7 +58,6 @@ public void onClick(View v) { }); mHistoryList = new ArrayList<>(); - myListAdapter = new MyListAdapter(); vHistoryList = (ListView) findViewById(R.id.list); vHistoryList.setAdapter(myListAdapter); @@ -65,10 +66,29 @@ public void onClick(View v) { public void onItemClick(AdapterView parent, View view, int position, long id) { mTargetId = (String) mHistoryList.get(position).getConversationId(); MLOC.saveVoipUserId(VoipListActivity.this,mTargetId); - Intent intent = new Intent(VoipListActivity.this,VoipActivity.class); - intent.putExtra("targetId",mTargetId); - intent.putExtra(VoipActivity.ACTION,VoipActivity.CALLING); - startActivity(intent); + + AlertDialog.Builder builder=new AlertDialog.Builder(VoipListActivity.this); + builder.setItems(new String[]{"视频通话","音频通话"}, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + if(i==0){ + Intent intent = new Intent(VoipListActivity.this,VoipActivity.class); + intent.putExtra("targetId",mTargetId); + intent.putExtra(VoipActivity.ACTION,VoipActivity.CALLING); + startActivity(intent); + }else if(i==1){ + Intent intent = new Intent(VoipListActivity.this,VoipAudioActivity.class); + intent.putExtra("targetId",mTargetId); + intent.putExtra(VoipAudioActivity.ACTION,VoipAudioActivity.CALLING); + startActivity(intent); + } + } + }); + builder.setCancelable(true); + AlertDialog dialog=builder.create(); + dialog.show(); + + } }); } @@ -142,7 +162,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { itemSelfHolder.vHeadCover.setCoverColor(Color.parseColor("#FFFFFF")); int cint = DensityUtils.dip2px(VoipListActivity.this,28); itemSelfHolder.vHeadCover.setRadians(cint, cint, cint, cint,0); - itemSelfHolder.vHeadImage.setImageResource(R.drawable.starfox_50); + itemSelfHolder.vHeadImage.setImageResource(MLOC.getHeadImage(VoipListActivity.this,userId)); if(mHistoryList.get(position).getNewMsgCount()==0){ itemSelfHolder.vCount.setVisibility(View.INVISIBLE); diff --git a/app/src/main/java/com/starrtc/demo/demo/voip/VoipRingingActivity.java b/app/src/main/java/com/starrtc/demo/demo/voip/VoipRingingActivity.java index efdb683..7f42c82 100644 --- a/app/src/main/java/com/starrtc/demo/demo/voip/VoipRingingActivity.java +++ b/app/src/main/java/com/starrtc/demo/demo/voip/VoipRingingActivity.java @@ -10,14 +10,14 @@ import com.starrtc.demo.R; import com.starrtc.demo.demo.BaseActivity; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.ui.CircularCoverView; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.ui.CircularCoverView; import com.starrtc.demo.utils.AEvent; import com.starrtc.demo.utils.ColorUtils; import com.starrtc.demo.utils.DensityUtils; import com.starrtc.starrtcsdk.api.XHClient; -import com.starrtc.starrtcsdk.apiInterface.IXHCallback; +import com.starrtc.starrtcsdk.apiInterface.IXHResultCallback; import java.text.SimpleDateFormat; @@ -36,6 +36,7 @@ protected void onCreate(Bundle savedInstanceState) { targetId = getIntent().getStringExtra("targetId"); findViewById(R.id.ring_hangoff).setOnClickListener(this); findViewById(R.id.ring_pickup).setOnClickListener(this); + findViewById(R.id.ring_pickup_audio).setOnClickListener(this); ((TextView)findViewById(R.id.targetid_text)).setText(targetId); findViewById(R.id.head_bg).setBackgroundColor(ColorUtils.getColor(VoipRingingActivity.this,targetId)); ((CircularCoverView)findViewById(R.id.head_cover)).setCoverColor(Color.parseColor("#000000")); @@ -98,7 +99,7 @@ public void onStop(){ public void onClick(View v) { switch (v.getId()){ case R.id.ring_hangoff: - XHClient.getInstance().getVoipManager().refuse(new IXHCallback() { + XHClient.getInstance().getVoipManager().refuse(new IXHResultCallback() { @Override public void success(Object data) { finish(); @@ -110,13 +111,22 @@ public void failed(String errMsg) { } }); break; - case R.id.ring_pickup: + case R.id.ring_pickup:{ Intent intent = new Intent(VoipRingingActivity.this,VoipActivity.class); intent.putExtra("targetId",targetId); intent.putExtra(VoipActivity.ACTION,VoipActivity.RING); startActivity(intent); finish(); break; + } + case R.id.ring_pickup_audio: { + Intent intent = new Intent(VoipRingingActivity.this, VoipAudioActivity.class); + intent.putExtra("targetId", targetId); + intent.putExtra(VoipAudioActivity.ACTION, VoipAudioActivity.RING); + startActivity(intent); + finish(); + break; + } } } } diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHChatManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHChatManagerListener.java similarity index 82% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHChatManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHChatManagerListener.java index 08be470..6017106 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHChatManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHChatManagerListener.java @@ -1,14 +1,13 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.database.MessageBean; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.database.MessageBean; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.apiInterface.IXHChatManagerListener; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; -import java.sql.Date; import java.text.SimpleDateFormat; public class XHChatManagerListener implements IXHChatManagerListener { diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHChatroomManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHChatroomManagerListener.java similarity index 93% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHChatroomManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHChatroomManagerListener.java index 24e44d9..4bc0e9e 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHChatroomManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHChatroomManagerListener.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.apiInterface.IXHChatroomManagerListener; diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHGroupManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHGroupManagerListener.java similarity index 87% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHGroupManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHGroupManagerListener.java index 68287a6..79d79b7 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHGroupManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHGroupManagerListener.java @@ -1,9 +1,9 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; -import com.starrtc.demo.demo.database.MessageBean; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.database.MessageBean; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.apiInterface.IXHGroupManagerListener; import com.starrtc.starrtcsdk.core.im.message.XHIMMessage; diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHLiveManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHLiveManagerListener.java similarity index 95% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHLiveManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHLiveManagerListener.java index 5273683..edf93b6 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHLiveManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHLiveManagerListener.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.api.XHConstants; diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHLoginManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHLoginManagerListener.java similarity index 73% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHLoginManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHLoginManagerListener.java index bbb5785..b679911 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHLoginManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHLoginManagerListener.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.api.XHConstants; @@ -8,9 +8,9 @@ public class XHLoginManagerListener implements IXHLoginManagerListener { @Override public void onConnectionStateChanged(XHConstants.XHSDKConnectionState state) { - if(state == XHConstants.XHSDKConnectionState.IFSDKConnectionStateDisconnect){ + if(state == XHConstants.XHSDKConnectionState.SDKConnectionStateDisconnect){ AEvent.notifyListener(AEvent.AEVENT_USER_OFFLINE,true,""); - }else if(state == XHConstants.XHSDKConnectionState.IFSDKConnectionStateReconnect){ + }else if(state == XHConstants.XHSDKConnectionState.SDKConnectionStateReconnect){ AEvent.notifyListener(AEvent.AEVENT_USER_ONLINE,true,""); } } diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHMeetingManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHMeetingManagerListener.java similarity index 80% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHMeetingManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHMeetingManagerListener.java index ec49ae4..33a6ee8 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHMeetingManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHMeetingManagerListener.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.apiInterface.IXHMeetingManagerListener; @@ -64,5 +64,14 @@ public void onReceivePrivateMessage(XHIMMessage message) { @Override public void onReceiveRealtimeData(byte[] data, String upId) { + try { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data",data); + jsonObject.put("upId",upId); + AEvent.notifyListener(AEvent.AEVENT_MEETING_REV_REALTIME_DATA,true,jsonObject); + } catch (JSONException e) { + AEvent.notifyListener(AEvent.AEVENT_MEETING_REV_REALTIME_DATA,false,data); + e.printStackTrace(); + } } } diff --git a/app/src/main/java/com/starrtc/demo/demo/listener/XHVoipManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHVoipManagerListener.java similarity index 89% rename from app/src/main/java/com/starrtc/demo/demo/listener/XHVoipManagerListener.java rename to app/src/main/java/com/starrtc/demo/listener/XHVoipManagerListener.java index 843b0e6..d308559 100644 --- a/app/src/main/java/com/starrtc/demo/demo/listener/XHVoipManagerListener.java +++ b/app/src/main/java/com/starrtc/demo/listener/XHVoipManagerListener.java @@ -1,8 +1,8 @@ -package com.starrtc.demo.demo.listener; +package com.starrtc.demo.listener; import com.starrtc.demo.demo.MLOC; -import com.starrtc.demo.demo.database.CoreDB; -import com.starrtc.demo.demo.database.HistoryBean; +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; import com.starrtc.demo.utils.AEvent; import com.starrtc.starrtcsdk.apiInterface.IXHVoipManagerListener; import com.starrtc.starrtcsdk.socket.StarErrorCode; diff --git a/app/src/main/java/com/starrtc/demo/listener/XHVoipP2PManagerListener.java b/app/src/main/java/com/starrtc/demo/listener/XHVoipP2PManagerListener.java new file mode 100644 index 0000000..32c0790 --- /dev/null +++ b/app/src/main/java/com/starrtc/demo/listener/XHVoipP2PManagerListener.java @@ -0,0 +1,60 @@ +package com.starrtc.demo.listener; + +import com.starrtc.demo.database.CoreDB; +import com.starrtc.demo.database.HistoryBean; +import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.utils.AEvent; +import com.starrtc.starrtcsdk.apiInterface.IXHVoipP2PManagerListener; +import com.starrtc.starrtcsdk.socket.StarErrorCode; + +import java.text.SimpleDateFormat; + +public class XHVoipP2PManagerListener implements IXHVoipP2PManagerListener { + @Override + public void onCalling(String fromID) { + +// HistoryBean historyBean = new HistoryBean(); +// historyBean.setType(CoreDB.HISTORY_TYPE_VOIP); +// historyBean.setLastTime(new SimpleDateFormat("MM-dd HH:mm").format(new java.util.Date())); +// historyBean.setConversationId(fromID); +// historyBean.setNewMsgCount(1); +// MLOC.setHistory(historyBean,false); + + AEvent.notifyListener(AEvent.AEVENT_VOIP_P2P_REV_CALLING,true,fromID); + } + + @Override + public void onCancled(String fromID) { + + } + + @Override + public void onRefused(String fromID) { + AEvent.notifyListener(AEvent.AEVENT_VOIP_REV_REFUSED,true,fromID); + } + + @Override + public void onBusy(String fromID) { + AEvent.notifyListener(AEvent.AEVENT_VOIP_REV_BUSY,true,fromID); + } + + @Override + public void onConnected(String fromID) { + AEvent.notifyListener(AEvent.AEVENT_VOIP_REV_CONNECT,true,fromID); + } + + @Override + public void onHangup(String fromID) { + AEvent.notifyListener(AEvent.AEVENT_VOIP_REV_HANGUP,true,fromID); + } + + @Override + public void onError(String errorCode) { + AEvent.notifyListener(AEvent.AEVENT_VOIP_REV_ERROR,true, StarErrorCode.getErrorCode(errorCode)); + } + + @Override + public void onReceiveRealtimeData(byte[] data) { + + } +} diff --git a/app/src/main/java/com/starrtc/demo/demo/serverAPI/InterfaceUrls.java b/app/src/main/java/com/starrtc/demo/serverAPI/InterfaceUrls.java similarity index 67% rename from app/src/main/java/com/starrtc/demo/demo/serverAPI/InterfaceUrls.java rename to app/src/main/java/com/starrtc/demo/serverAPI/InterfaceUrls.java index 9629492..b03f166 100644 --- a/app/src/main/java/com/starrtc/demo/demo/serverAPI/InterfaceUrls.java +++ b/app/src/main/java/com/starrtc/demo/serverAPI/InterfaceUrls.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.serverAPI; +package com.starrtc.demo.serverAPI; import android.os.AsyncTask; import android.os.Bundle; @@ -10,8 +10,10 @@ import java.util.ArrayList; import com.starrtc.demo.demo.MLOC; +import com.starrtc.demo.demo.audiolive.AudioLiveInfo; import com.starrtc.demo.demo.im.chatroom.ChatroomInfo; import com.starrtc.demo.demo.im.group.MessageGroupInfo; +import com.starrtc.demo.demo.miniclass.MiniClassInfo; import com.starrtc.demo.demo.videolive.LiveInfo; import com.starrtc.demo.demo.videomeeting.MeetingInfo; import com.starrtc.demo.utils.AEvent; @@ -23,47 +25,54 @@ */ public class InterfaceUrls { - public static final String BASE_URL = "https://api.starrtc.com"; + public static String BASE_URL; //获取authKey - public static final String LOGIN_URL = BASE_URL+"/demo/authKey"; + public static String LOGIN_URL; //会议室列表 - public static final String MEETING_LIST_URL = BASE_URL+"/demo/meeting/list"; + public static String MEETING_LIST_URL; //直播列表 - public static final String LIVE_LIST_URL = BASE_URL+"/demo/live/list"; + public static String LIVE_LIST_URL; + //音频直播列表 + public static String AUDIO_LIVE_LIST_URL; + //小班课列表 + public static String MINI_CLASS_LIST_URL; //上报直播间使用的聊天室ID(直播里的文字聊天用了一个聊天室) - public static final String LIVE_SET_CHAT_URL = BASE_URL+"/demo/live/set_chat"; + public static String LIVE_SET_CHAT_URL; //聊天室列表 - public static final String CHATROOM_LIST_URL = BASE_URL+"/demo/chat/list"; + public static String CHATROOM_LIST_URL; //自己加入的群列表 - public static final String GROUP_LIST_URL = BASE_URL+"/demo/group/list_all"; + public static String GROUP_LIST_URL; //群成员列表 - public static final String GROUP_MEMBERS_URL = BASE_URL+"/demo/group/members"; + public static String GROUP_MEMBERS_URL; //上报直播 - public static final String REPORT_LIVE_INFO_URL = BASE_URL+"/demo/live/store"; + public static String REPORT_LIVE_INFO_URL; + //上报语音直播 + public static String REPORT_AUDIO_LIVE_INFO_URL; + //上报小班课 + public static String REPORT_MINI_CLASS_INFO_URL; //上报会议 - public static final String REPORT_MEETING_INFO_URL = BASE_URL+"/demo/meeting/store"; + public static String REPORT_MEETING_INFO_URL; //上报聊天室 - public static final String REPORT_CHATROOM_INFO_URL = BASE_URL+"/demo/chat/store"; - -// //////// -// //测试// -// //////// -// public static final String BASE_URL = "http://api.starrtc.com"; -// //获取authKey -// public static final String LOGIN_URL = BASE_URL+"/demo/authKey.php"; -// //会议室列表 -// public static final String MEETING_LIST_URL = BASE_URL+"/demo/meeting/list.php"; -// //直播列表 -// public static final String LIVE_LIST_URL = BASE_URL+"/demo/live/list.php"; -// //上报直播间使用的聊天室ID(直播里的文字聊天用了一个聊天室) -// public static final String LIVE_SET_CHAT_URL = BASE_URL+"/demo/live/set_chat.php"; -// //聊天室列表 -// public static final String CHATROOM_LIST_URL = BASE_URL+"/demo/chat/list.php"; -// //自己加入的群列表 -// public static final String GROUP_LIST_URL = BASE_URL+"/demo/group/list_all.php"; -// //群成员列表 -// public static final String GROUP_MEMBERS_URL = BASE_URL+"/demo/group/members.php"; + public static String REPORT_CHATROOM_INFO_URL; + + public static void setBaseUrl(String baseUrl) { + BASE_URL = baseUrl; + LOGIN_URL = BASE_URL+"/authKey"; + MEETING_LIST_URL = BASE_URL+"/meeting/list"; + LIVE_LIST_URL = BASE_URL+"/live/list"; + AUDIO_LIVE_LIST_URL = BASE_URL+"/audio/list"; + MINI_CLASS_LIST_URL = BASE_URL+"/class/list"; + LIVE_SET_CHAT_URL = BASE_URL+"/live/set_chat"; + CHATROOM_LIST_URL = BASE_URL+"/chat/list"; + GROUP_LIST_URL = BASE_URL+"/group/list_all"; + GROUP_MEMBERS_URL = BASE_URL+"/group/members"; + REPORT_LIVE_INFO_URL = BASE_URL+"/live/store"; + REPORT_AUDIO_LIVE_INFO_URL = BASE_URL+"/audio/store"; + REPORT_MINI_CLASS_INFO_URL = BASE_URL+"/class/store"; + REPORT_MEETING_INFO_URL = BASE_URL+"/meeting/store"; + REPORT_CHATROOM_INFO_URL = BASE_URL+"/chat/store"; + } public static void demoLogin(String userId){ String url = LOGIN_URL+"?userid="+userId; @@ -133,6 +142,44 @@ public void callback(boolean reqSuccess, String statusCode, String data) { httpPost.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,bundle); } + //小班课列表 + public static void demoRequestMiniClassList(){ + String url = MINI_CLASS_LIST_URL; + String params = ""; + StarHttpUtil httpPost = new StarHttpUtil(StarHttpUtil.REQUEST_METHOD_GET); + httpPost.addListener(new ICallback() { + @Override + public void callback(boolean reqSuccess, String statusCode, String data) { + if(reqSuccess){ + if(statusCode.equals("1")){ + try { + JSONArray datas = new JSONArray(data); + ArrayList res = new ArrayList(); + for (int i = 0;i res = new ArrayList(); + for (int i = 0;i srcDatas; + private Paint paint = new Paint();//依靠此类开始画线 + + private void initPaint(){ + paint.setAntiAlias(true);// 抗锯齿 + paint.setDither(true); // 防抖动 + paint.setStyle(Paint.Style.FILL);// 画笔类型 STROKE空心 FILL 实心 + paint.setStrokeJoin(Paint.Join.ROUND);// 画笔接洽点类型 如影响矩形但角的外轮廓,让画的线圆滑 + paint.setStrokeCap(Paint.Cap.ROUND);// 画笔笔刷类型 如影响画笔但始末端 + paint.setStrokeWidth(3);// 设置线宽 + } + + public void refreshData(ArrayList datas){ + srcDatas = datas; + this.postInvalidate(); + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + if(srcDatas==null||srcDatas.size()==0)return; + + ArrayList drawData = (ArrayList) srcDatas.clone(); + int totalHeight = this.getHeight()-10; + for(LineData lineData:drawData){ + String lineName = lineData.name; + int lineColor = lineData.color; + ArrayList data = lineData.datas; + paint.setColor(lineColor); + if(data.size()<=1)continue; + float stepX = this.getWidth()/(data.size()-1); + float maxValue = 1; + for(int i = 1;i datas = new ArrayList<>(); + } + +} diff --git a/app/src/main/java/com/starrtc/demo/demo/ui/RoundImageView.java b/app/src/main/java/com/starrtc/demo/ui/RoundImageView.java similarity index 97% rename from app/src/main/java/com/starrtc/demo/demo/ui/RoundImageView.java rename to app/src/main/java/com/starrtc/demo/ui/RoundImageView.java index 1c9ec0a..f699cd1 100644 --- a/app/src/main/java/com/starrtc/demo/demo/ui/RoundImageView.java +++ b/app/src/main/java/com/starrtc/demo/ui/RoundImageView.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.ui; +package com.starrtc.demo.ui; /** * Created by xuas on 2015/4/22. diff --git a/app/src/main/java/com/starrtc/demo/demo/ui/SquareRelativeLayout.java b/app/src/main/java/com/starrtc/demo/ui/SquareRelativeLayout.java similarity index 93% rename from app/src/main/java/com/starrtc/demo/demo/ui/SquareRelativeLayout.java rename to app/src/main/java/com/starrtc/demo/ui/SquareRelativeLayout.java index f37a851..d6c3ece 100644 --- a/app/src/main/java/com/starrtc/demo/demo/ui/SquareRelativeLayout.java +++ b/app/src/main/java/com/starrtc/demo/ui/SquareRelativeLayout.java @@ -1,4 +1,4 @@ -package com.starrtc.demo.demo.ui; +package com.starrtc.demo.ui; import android.content.Context; import android.util.AttributeSet; diff --git a/app/src/main/java/com/starrtc/demo/utils/AEvent.java b/app/src/main/java/com/starrtc/demo/utils/AEvent.java index f1fcf6b..36157e3 100644 --- a/app/src/main/java/com/starrtc/demo/utils/AEvent.java +++ b/app/src/main/java/com/starrtc/demo/utils/AEvent.java @@ -52,7 +52,9 @@ private static class EventObj{ public static final String AEVENT_RESET = "AEVENT_RESET"; public static final String AEVENT_MEETING_GOT_LIST = "AEVENT_MEETING_GOT_LIST"; + public static final String AEVENT_MINI_CLASS_GOT_LIST = "AEVENT_MINI_CLASS_GOT_LIST"; public static final String AEVENT_LIVE_GOT_LIST = "AEVENT_LIVE_GOT_LIST"; + public static final String AEVENT_AUDIO_LIVE_GOT_LIST = "AEVENT_AUDIO_LIVE_GOT_LIST"; public static final String AEVENT_CHATROOM_GOT_LIST = "AEVENT_CHATROOM_GOT_LIST"; public static final String AEVENT_GROUP_GOT_LIST = "AEVENT_GROUP_GOT_LIST"; public static final String AEVENT_GROUP_GOT_MEMBER_LIST = "AEVENT_GROUP_GOT_MEMBER_LIST"; @@ -65,6 +67,7 @@ private static class EventObj{ public static final String AEVENT_VOIP_REV_CONNECT = "AEVENT_VOIP_REV_CONNECT"; public static final String AEVENT_VOIP_REV_ERROR = "AEVENT_VOIP_REV_ERROR"; public static final String AEVENT_VOIP_REV_REALTIME_DATA = "AEVENT_VOIP_REV_REALTIME_DATA"; + public static final String AEVENT_VOIP_P2P_REV_CALLING = "AEVENT_VOIP_P2P_REV_CALLING"; public static final String AEVENT_LIVE_ADD_UPLOADER = "AEVENT_LIVE_ADD_UPLOADER"; public static final String AEVENT_LIVE_REMOVE_UPLOADER = "AEVENT_LIVE_REMOVE_UPLOADER"; @@ -81,14 +84,15 @@ private static class EventObj{ public static final String AEVENT_LIVE_SELF_COMMANDED_TO_STOP = "AEVENT_LIVE_SELF_COMMANDED_TO_STOP"; public static final String AEVENT_LIVE_REV_REALTIME_DATA = "AEVENT_LIVE_REV_REALTIME_DATA"; - public static final String AEVENT_MEETING_ADD_UPLOADER = "AEVENT_MEETING_ADD_UPLOADER"; - public static final String AEVENT_MEETING_REMOVE_UPLOADER = "AEVENT_MEETING_REMOVE_UPLOADER"; - public static final String AEVENT_MEETING_ERROR = "AEVENT_MEETING_ERROR"; - public static final String AEVENT_MEETING_GET_ONLINE_NUMBER = "AEVENT_MEETING_GET_ONLINE_NUMBER"; - public static final String AEVENT_MEETING_SELF_KICKED = "AEVENT_MEETING_SELF_KICKED"; - public static final String AEVENT_MEETING_SELF_BANNED = "AEVENT_MEETING_SELF_BANNED"; - public static final String AEVENT_MEETING_REV_MSG = "AEVENT_MEETING_REV_MSG"; - public static final String AEVENT_MEETING_REV_PRIVATE_MSG = "AEVENT_MEETING_REV_PRIVATE_MSG"; + public static final String AEVENT_MEETING_ADD_UPLOADER = "AEVENT_MEETING_ADD_UPLOADER"; + public static final String AEVENT_MEETING_REMOVE_UPLOADER = "AEVENT_MEETING_REMOVE_UPLOADER"; + public static final String AEVENT_MEETING_ERROR = "AEVENT_MEETING_ERROR"; + public static final String AEVENT_MEETING_GET_ONLINE_NUMBER = "AEVENT_MEETING_GET_ONLINE_NUMBER"; + public static final String AEVENT_MEETING_SELF_KICKED = "AEVENT_MEETING_SELF_KICKED"; + public static final String AEVENT_MEETING_SELF_BANNED = "AEVENT_MEETING_SELF_BANNED"; + public static final String AEVENT_MEETING_REV_MSG = "AEVENT_MEETING_REV_MSG"; + public static final String AEVENT_MEETING_REV_PRIVATE_MSG = "AEVENT_MEETING_REV_PRIVATE_MSG"; + public static final String AEVENT_MEETING_REV_REALTIME_DATA = "AEVENT_MEETING_REV_REALTIME_DATA"; public static final String AEVENT_ECHO_FIN = "AEVENT_ECHO_FIN"; diff --git a/app/src/main/java/com/starrtc/demo/utils/StarNetUtil.java b/app/src/main/java/com/starrtc/demo/utils/StarNetUtil.java index 66ad2e2..b44dfaa 100644 --- a/app/src/main/java/com/starrtc/demo/utils/StarNetUtil.java +++ b/app/src/main/java/com/starrtc/demo/utils/StarNetUtil.java @@ -8,6 +8,11 @@ import java.io.BufferedReader; import java.io.InputStreamReader; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.Enumeration; /** * Created by zhangjt on 2017/8/9. @@ -89,4 +94,24 @@ public void run() { }).start(); } + + public static String getIP(Context context){ + try { + for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { + NetworkInterface intf = en.nextElement(); + for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) + { + InetAddress inetAddress = enumIpAddr.nextElement(); + if (!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address)) + { + return inetAddress.getHostAddress().toString(); + } + } + } + } + catch (SocketException ex){ + ex.printStackTrace(); + } + return null; + } } diff --git a/app/src/main/res/drawable/audio_live_bg.jpg b/app/src/main/res/drawable/audio_live_bg.jpg new file mode 100644 index 0000000..b7eb9ae Binary files /dev/null and b/app/src/main/res/drawable/audio_live_bg.jpg differ diff --git a/app/src/main/res/drawable/bg_btn_border_white.xml b/app/src/main/res/drawable/bg_btn_border_white.xml new file mode 100644 index 0000000..82472c6 --- /dev/null +++ b/app/src/main/res/drawable/bg_btn_border_white.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_class_video.png b/app/src/main/res/drawable/bg_class_video.png new file mode 100644 index 0000000..ea327a6 Binary files /dev/null and b/app/src/main/res/drawable/bg_class_video.png differ diff --git a/app/src/main/res/drawable/btn_chat.png b/app/src/main/res/drawable/btn_chat.png new file mode 100644 index 0000000..4468be5 Binary files /dev/null and b/app/src/main/res/drawable/btn_chat.png differ diff --git a/app/src/main/res/drawable/btn_style_green_pressed.xml b/app/src/main/res/drawable/btn_style_green_pressed.xml index 3ea1c07..1fd2276 100644 --- a/app/src/main/res/drawable/btn_style_green_pressed.xml +++ b/app/src/main/res/drawable/btn_style_green_pressed.xml @@ -1,6 +1,6 @@ - + - + diff --git a/app/src/main/res/drawable/btn_style_pink_pressed.xml b/app/src/main/res/drawable/btn_style_pink_pressed.xml index 82996af..4af34d6 100644 --- a/app/src/main/res/drawable/btn_style_pink_pressed.xml +++ b/app/src/main/res/drawable/btn_style_pink_pressed.xml @@ -1,8 +1,8 @@ - + diff --git a/app/src/main/res/drawable/btn_switch_camera.xml b/app/src/main/res/drawable/btn_switch_camera.xml index 2b788c1..84399a8 100644 --- a/app/src/main/res/drawable/btn_switch_camera.xml +++ b/app/src/main/res/drawable/btn_switch_camera.xml @@ -1,8 +1,5 @@ - - - - - + + diff --git a/app/src/main/res/drawable/btn_switch_laser_pen.xml b/app/src/main/res/drawable/btn_switch_laser_pen.xml new file mode 100644 index 0000000..7a36c1b --- /dev/null +++ b/app/src/main/res/drawable/btn_switch_laser_pen.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/btn_switch_mic.xml b/app/src/main/res/drawable/btn_switch_mic.xml new file mode 100644 index 0000000..012d44a --- /dev/null +++ b/app/src/main/res/drawable/btn_switch_mic.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/btn_turn_camera.xml b/app/src/main/res/drawable/btn_turn_camera.xml new file mode 100644 index 0000000..2b788c1 --- /dev/null +++ b/app/src/main/res/drawable/btn_turn_camera.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/camera_close.png b/app/src/main/res/drawable/camera_close.png new file mode 100644 index 0000000..e631d83 Binary files /dev/null and b/app/src/main/res/drawable/camera_close.png differ diff --git a/app/src/main/res/drawable/camera_open.png b/app/src/main/res/drawable/camera_open.png new file mode 100644 index 0000000..89c8fbc Binary files /dev/null and b/app/src/main/res/drawable/camera_open.png differ diff --git a/app/src/main/res/drawable/head_icon_1.png b/app/src/main/res/drawable/head_icon_1.png new file mode 100644 index 0000000..e7b8638 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_1.png differ diff --git a/app/src/main/res/drawable/head_icon_10.png b/app/src/main/res/drawable/head_icon_10.png new file mode 100644 index 0000000..4a84a0f Binary files /dev/null and b/app/src/main/res/drawable/head_icon_10.png differ diff --git a/app/src/main/res/drawable/head_icon_11.png b/app/src/main/res/drawable/head_icon_11.png new file mode 100644 index 0000000..8a6f2e3 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_11.png differ diff --git a/app/src/main/res/drawable/head_icon_12.png b/app/src/main/res/drawable/head_icon_12.png new file mode 100644 index 0000000..fe51b66 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_12.png differ diff --git a/app/src/main/res/drawable/head_icon_13.png b/app/src/main/res/drawable/head_icon_13.png new file mode 100644 index 0000000..d29d4a5 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_13.png differ diff --git a/app/src/main/res/drawable/head_icon_14.png b/app/src/main/res/drawable/head_icon_14.png new file mode 100644 index 0000000..cc44fee Binary files /dev/null and b/app/src/main/res/drawable/head_icon_14.png differ diff --git a/app/src/main/res/drawable/head_icon_15.png b/app/src/main/res/drawable/head_icon_15.png new file mode 100644 index 0000000..3f34c30 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_15.png differ diff --git a/app/src/main/res/drawable/head_icon_16.png b/app/src/main/res/drawable/head_icon_16.png new file mode 100644 index 0000000..fec4e43 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_16.png differ diff --git a/app/src/main/res/drawable/head_icon_17.png b/app/src/main/res/drawable/head_icon_17.png new file mode 100644 index 0000000..871baac Binary files /dev/null and b/app/src/main/res/drawable/head_icon_17.png differ diff --git a/app/src/main/res/drawable/head_icon_18.png b/app/src/main/res/drawable/head_icon_18.png new file mode 100644 index 0000000..f5c0a15 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_18.png differ diff --git a/app/src/main/res/drawable/head_icon_19.png b/app/src/main/res/drawable/head_icon_19.png new file mode 100644 index 0000000..64a5c47 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_19.png differ diff --git a/app/src/main/res/drawable/head_icon_2.png b/app/src/main/res/drawable/head_icon_2.png new file mode 100644 index 0000000..fdcc2df Binary files /dev/null and b/app/src/main/res/drawable/head_icon_2.png differ diff --git a/app/src/main/res/drawable/head_icon_20.png b/app/src/main/res/drawable/head_icon_20.png new file mode 100644 index 0000000..6658ae7 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_20.png differ diff --git a/app/src/main/res/drawable/head_icon_21.png b/app/src/main/res/drawable/head_icon_21.png new file mode 100644 index 0000000..48da181 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_21.png differ diff --git a/app/src/main/res/drawable/head_icon_22.png b/app/src/main/res/drawable/head_icon_22.png new file mode 100644 index 0000000..2c52ae8 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_22.png differ diff --git a/app/src/main/res/drawable/head_icon_23.png b/app/src/main/res/drawable/head_icon_23.png new file mode 100644 index 0000000..003d26c Binary files /dev/null and b/app/src/main/res/drawable/head_icon_23.png differ diff --git a/app/src/main/res/drawable/head_icon_24.png b/app/src/main/res/drawable/head_icon_24.png new file mode 100644 index 0000000..cadd6b1 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_24.png differ diff --git a/app/src/main/res/drawable/head_icon_25.png b/app/src/main/res/drawable/head_icon_25.png new file mode 100644 index 0000000..4e7e596 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_25.png differ diff --git a/app/src/main/res/drawable/head_icon_26.png b/app/src/main/res/drawable/head_icon_26.png new file mode 100644 index 0000000..56081cb Binary files /dev/null and b/app/src/main/res/drawable/head_icon_26.png differ diff --git a/app/src/main/res/drawable/head_icon_27.png b/app/src/main/res/drawable/head_icon_27.png new file mode 100644 index 0000000..d204774 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_27.png differ diff --git a/app/src/main/res/drawable/head_icon_28.png b/app/src/main/res/drawable/head_icon_28.png new file mode 100644 index 0000000..b4ffed9 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_28.png differ diff --git a/app/src/main/res/drawable/head_icon_29.png b/app/src/main/res/drawable/head_icon_29.png new file mode 100644 index 0000000..724c813 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_29.png differ diff --git a/app/src/main/res/drawable/head_icon_3.png b/app/src/main/res/drawable/head_icon_3.png new file mode 100644 index 0000000..efe1999 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_3.png differ diff --git a/app/src/main/res/drawable/head_icon_30.png b/app/src/main/res/drawable/head_icon_30.png new file mode 100644 index 0000000..ea22d51 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_30.png differ diff --git a/app/src/main/res/drawable/head_icon_31.png b/app/src/main/res/drawable/head_icon_31.png new file mode 100644 index 0000000..355be7e Binary files /dev/null and b/app/src/main/res/drawable/head_icon_31.png differ diff --git a/app/src/main/res/drawable/head_icon_32.png b/app/src/main/res/drawable/head_icon_32.png new file mode 100644 index 0000000..0f0ee2e Binary files /dev/null and b/app/src/main/res/drawable/head_icon_32.png differ diff --git a/app/src/main/res/drawable/head_icon_33.png b/app/src/main/res/drawable/head_icon_33.png new file mode 100644 index 0000000..0076bee Binary files /dev/null and b/app/src/main/res/drawable/head_icon_33.png differ diff --git a/app/src/main/res/drawable/head_icon_34.png b/app/src/main/res/drawable/head_icon_34.png new file mode 100644 index 0000000..75fdeb8 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_34.png differ diff --git a/app/src/main/res/drawable/head_icon_35.png b/app/src/main/res/drawable/head_icon_35.png new file mode 100644 index 0000000..001bf8b Binary files /dev/null and b/app/src/main/res/drawable/head_icon_35.png differ diff --git a/app/src/main/res/drawable/head_icon_36.png b/app/src/main/res/drawable/head_icon_36.png new file mode 100644 index 0000000..75b0e91 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_36.png differ diff --git a/app/src/main/res/drawable/head_icon_37.png b/app/src/main/res/drawable/head_icon_37.png new file mode 100644 index 0000000..f1efdfe Binary files /dev/null and b/app/src/main/res/drawable/head_icon_37.png differ diff --git a/app/src/main/res/drawable/head_icon_38.png b/app/src/main/res/drawable/head_icon_38.png new file mode 100644 index 0000000..f7b864f Binary files /dev/null and b/app/src/main/res/drawable/head_icon_38.png differ diff --git a/app/src/main/res/drawable/head_icon_39.png b/app/src/main/res/drawable/head_icon_39.png new file mode 100644 index 0000000..d47d844 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_39.png differ diff --git a/app/src/main/res/drawable/head_icon_4.png b/app/src/main/res/drawable/head_icon_4.png new file mode 100644 index 0000000..f1c0542 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_4.png differ diff --git a/app/src/main/res/drawable/head_icon_40.png b/app/src/main/res/drawable/head_icon_40.png new file mode 100644 index 0000000..dd65482 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_40.png differ diff --git a/app/src/main/res/drawable/head_icon_41.png b/app/src/main/res/drawable/head_icon_41.png new file mode 100644 index 0000000..9616843 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_41.png differ diff --git a/app/src/main/res/drawable/head_icon_42.png b/app/src/main/res/drawable/head_icon_42.png new file mode 100644 index 0000000..8d7372e Binary files /dev/null and b/app/src/main/res/drawable/head_icon_42.png differ diff --git a/app/src/main/res/drawable/head_icon_43.png b/app/src/main/res/drawable/head_icon_43.png new file mode 100644 index 0000000..5f9d61b Binary files /dev/null and b/app/src/main/res/drawable/head_icon_43.png differ diff --git a/app/src/main/res/drawable/head_icon_44.png b/app/src/main/res/drawable/head_icon_44.png new file mode 100644 index 0000000..b97e749 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_44.png differ diff --git a/app/src/main/res/drawable/head_icon_45.png b/app/src/main/res/drawable/head_icon_45.png new file mode 100644 index 0000000..fd2674d Binary files /dev/null and b/app/src/main/res/drawable/head_icon_45.png differ diff --git a/app/src/main/res/drawable/head_icon_46.png b/app/src/main/res/drawable/head_icon_46.png new file mode 100644 index 0000000..0624ca3 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_46.png differ diff --git a/app/src/main/res/drawable/head_icon_47.png b/app/src/main/res/drawable/head_icon_47.png new file mode 100644 index 0000000..bae286c Binary files /dev/null and b/app/src/main/res/drawable/head_icon_47.png differ diff --git a/app/src/main/res/drawable/head_icon_48.png b/app/src/main/res/drawable/head_icon_48.png new file mode 100644 index 0000000..b14631b Binary files /dev/null and b/app/src/main/res/drawable/head_icon_48.png differ diff --git a/app/src/main/res/drawable/head_icon_49.png b/app/src/main/res/drawable/head_icon_49.png new file mode 100644 index 0000000..3e19fb9 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_49.png differ diff --git a/app/src/main/res/drawable/head_icon_5.png b/app/src/main/res/drawable/head_icon_5.png new file mode 100644 index 0000000..a1beb7f Binary files /dev/null and b/app/src/main/res/drawable/head_icon_5.png differ diff --git a/app/src/main/res/drawable/head_icon_50.png b/app/src/main/res/drawable/head_icon_50.png new file mode 100644 index 0000000..98f81e8 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_50.png differ diff --git a/app/src/main/res/drawable/head_icon_51.png b/app/src/main/res/drawable/head_icon_51.png new file mode 100644 index 0000000..ba07da5 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_51.png differ diff --git a/app/src/main/res/drawable/head_icon_52.png b/app/src/main/res/drawable/head_icon_52.png new file mode 100644 index 0000000..1d22134 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_52.png differ diff --git a/app/src/main/res/drawable/head_icon_53.png b/app/src/main/res/drawable/head_icon_53.png new file mode 100644 index 0000000..8b2a7d1 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_53.png differ diff --git a/app/src/main/res/drawable/head_icon_54.png b/app/src/main/res/drawable/head_icon_54.png new file mode 100644 index 0000000..488d832 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_54.png differ diff --git a/app/src/main/res/drawable/head_icon_55.png b/app/src/main/res/drawable/head_icon_55.png new file mode 100644 index 0000000..ccf9465 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_55.png differ diff --git a/app/src/main/res/drawable/head_icon_56.png b/app/src/main/res/drawable/head_icon_56.png new file mode 100644 index 0000000..190b460 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_56.png differ diff --git a/app/src/main/res/drawable/head_icon_57.png b/app/src/main/res/drawable/head_icon_57.png new file mode 100644 index 0000000..9f27547 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_57.png differ diff --git a/app/src/main/res/drawable/head_icon_58.png b/app/src/main/res/drawable/head_icon_58.png new file mode 100644 index 0000000..be77a41 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_58.png differ diff --git a/app/src/main/res/drawable/head_icon_59.png b/app/src/main/res/drawable/head_icon_59.png new file mode 100644 index 0000000..b15a358 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_59.png differ diff --git a/app/src/main/res/drawable/head_icon_6.png b/app/src/main/res/drawable/head_icon_6.png new file mode 100644 index 0000000..0fafdf4 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_6.png differ diff --git a/app/src/main/res/drawable/head_icon_60.png b/app/src/main/res/drawable/head_icon_60.png new file mode 100644 index 0000000..382f5d0 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_60.png differ diff --git a/app/src/main/res/drawable/head_icon_61.png b/app/src/main/res/drawable/head_icon_61.png new file mode 100644 index 0000000..84e1cfb Binary files /dev/null and b/app/src/main/res/drawable/head_icon_61.png differ diff --git a/app/src/main/res/drawable/head_icon_62.png b/app/src/main/res/drawable/head_icon_62.png new file mode 100644 index 0000000..175c751 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_62.png differ diff --git a/app/src/main/res/drawable/head_icon_63.png b/app/src/main/res/drawable/head_icon_63.png new file mode 100644 index 0000000..316fa8a Binary files /dev/null and b/app/src/main/res/drawable/head_icon_63.png differ diff --git a/app/src/main/res/drawable/head_icon_64.png b/app/src/main/res/drawable/head_icon_64.png new file mode 100644 index 0000000..9ff03b6 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_64.png differ diff --git a/app/src/main/res/drawable/head_icon_65.png b/app/src/main/res/drawable/head_icon_65.png new file mode 100644 index 0000000..470156b Binary files /dev/null and b/app/src/main/res/drawable/head_icon_65.png differ diff --git a/app/src/main/res/drawable/head_icon_66.png b/app/src/main/res/drawable/head_icon_66.png new file mode 100644 index 0000000..07d9c71 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_66.png differ diff --git a/app/src/main/res/drawable/head_icon_67.png b/app/src/main/res/drawable/head_icon_67.png new file mode 100644 index 0000000..a7f2ebb Binary files /dev/null and b/app/src/main/res/drawable/head_icon_67.png differ diff --git a/app/src/main/res/drawable/head_icon_68.png b/app/src/main/res/drawable/head_icon_68.png new file mode 100644 index 0000000..7628006 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_68.png differ diff --git a/app/src/main/res/drawable/head_icon_69.png b/app/src/main/res/drawable/head_icon_69.png new file mode 100644 index 0000000..a52146d Binary files /dev/null and b/app/src/main/res/drawable/head_icon_69.png differ diff --git a/app/src/main/res/drawable/head_icon_7.png b/app/src/main/res/drawable/head_icon_7.png new file mode 100644 index 0000000..d3e20a4 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_7.png differ diff --git a/app/src/main/res/drawable/head_icon_70.png b/app/src/main/res/drawable/head_icon_70.png new file mode 100644 index 0000000..ad1a078 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_70.png differ diff --git a/app/src/main/res/drawable/head_icon_8.png b/app/src/main/res/drawable/head_icon_8.png new file mode 100644 index 0000000..f130811 Binary files /dev/null and b/app/src/main/res/drawable/head_icon_8.png differ diff --git a/app/src/main/res/drawable/head_icon_9.png b/app/src/main/res/drawable/head_icon_9.png new file mode 100644 index 0000000..1bf4b0a Binary files /dev/null and b/app/src/main/res/drawable/head_icon_9.png differ diff --git a/app/src/main/res/drawable/icon_audio_live_chat.png b/app/src/main/res/drawable/icon_audio_live_chat.png new file mode 100644 index 0000000..f73e124 Binary files /dev/null and b/app/src/main/res/drawable/icon_audio_live_chat.png differ diff --git a/app/src/main/res/drawable/icon_chat.png b/app/src/main/res/drawable/icon_chat.png new file mode 100644 index 0000000..c84a590 Binary files /dev/null and b/app/src/main/res/drawable/icon_chat.png differ diff --git a/app/src/main/res/drawable/icon_clean.png b/app/src/main/res/drawable/icon_clean.png new file mode 100644 index 0000000..13d59b9 Binary files /dev/null and b/app/src/main/res/drawable/icon_clean.png differ diff --git a/app/src/main/res/drawable/icon_laser_pen_close.png b/app/src/main/res/drawable/icon_laser_pen_close.png new file mode 100644 index 0000000..ba7d91b Binary files /dev/null and b/app/src/main/res/drawable/icon_laser_pen_close.png differ diff --git a/app/src/main/res/drawable/icon_laser_pen_open.png b/app/src/main/res/drawable/icon_laser_pen_open.png new file mode 100644 index 0000000..9dc9ec0 Binary files /dev/null and b/app/src/main/res/drawable/icon_laser_pen_open.png differ diff --git a/app/src/main/res/drawable/icon_main_class.png b/app/src/main/res/drawable/icon_main_class.png new file mode 100644 index 0000000..14f9cfe Binary files /dev/null and b/app/src/main/res/drawable/icon_main_class.png differ diff --git a/app/src/main/res/drawable/icon_main_mic.png b/app/src/main/res/drawable/icon_main_mic.png new file mode 100644 index 0000000..7308e60 Binary files /dev/null and b/app/src/main/res/drawable/icon_main_mic.png differ diff --git a/app/src/main/res/drawable/icon_main_setting.png b/app/src/main/res/drawable/icon_main_setting.png new file mode 100644 index 0000000..c723373 Binary files /dev/null and b/app/src/main/res/drawable/icon_main_setting.png differ diff --git a/app/src/main/res/drawable/icon_mic_picup.png b/app/src/main/res/drawable/icon_mic_picup.png new file mode 100644 index 0000000..fc25cf8 Binary files /dev/null and b/app/src/main/res/drawable/icon_mic_picup.png differ diff --git a/app/src/main/res/drawable/icon_undo.png b/app/src/main/res/drawable/icon_undo.png new file mode 100644 index 0000000..5fce549 Binary files /dev/null and b/app/src/main/res/drawable/icon_undo.png differ diff --git a/app/src/main/res/drawable/mic_close.png b/app/src/main/res/drawable/mic_close.png new file mode 100644 index 0000000..2d9e3fd Binary files /dev/null and b/app/src/main/res/drawable/mic_close.png differ diff --git a/app/src/main/res/drawable/mic_open.png b/app/src/main/res/drawable/mic_open.png new file mode 100644 index 0000000..e2e27e3 Binary files /dev/null and b/app/src/main/res/drawable/mic_open.png differ diff --git a/app/src/main/res/drawable/pen_color_bg_black.xml b/app/src/main/res/drawable/pen_color_bg_black.xml new file mode 100644 index 0000000..3175fdf --- /dev/null +++ b/app/src/main/res/drawable/pen_color_bg_black.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable/pen_color_bg_blue.xml b/app/src/main/res/drawable/pen_color_bg_blue.xml new file mode 100644 index 0000000..e3b4e96 --- /dev/null +++ b/app/src/main/res/drawable/pen_color_bg_blue.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable/pen_color_bg_green.xml b/app/src/main/res/drawable/pen_color_bg_green.xml new file mode 100644 index 0000000..948fa2f --- /dev/null +++ b/app/src/main/res/drawable/pen_color_bg_green.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable/pen_color_bg_purple.xml b/app/src/main/res/drawable/pen_color_bg_purple.xml new file mode 100644 index 0000000..3a817f0 --- /dev/null +++ b/app/src/main/res/drawable/pen_color_bg_purple.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable/pen_color_bg_red.xml b/app/src/main/res/drawable/pen_color_bg_red.xml new file mode 100644 index 0000000..5e5c471 --- /dev/null +++ b/app/src/main/res/drawable/pen_color_bg_red.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/drawable/pen_color_bg_yellow.xml b/app/src/main/res/drawable/pen_color_bg_yellow.xml new file mode 100644 index 0000000..7c79511 --- /dev/null +++ b/app/src/main/res/drawable/pen_color_bg_yellow.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/app/src/main/res/layout/activity_audio_live.xml b/app/src/main/res/layout/activity_audio_live.xml new file mode 100644 index 0000000..c0adb0e --- /dev/null +++ b/app/src/main/res/layout/activity_audio_live.xml @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_audio_live_create.xml b/app/src/main/res/layout/activity_audio_live_create.xml new file mode 100644 index 0000000..cf96490 --- /dev/null +++ b/app/src/main/res/layout/activity_audio_live_create.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_audio_live_list.xml b/app/src/main/res/layout/activity_audio_live_list.xml new file mode 100644 index 0000000..1625985 --- /dev/null +++ b/app/src/main/res/layout/activity_audio_live_list.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_loop_l.xml b/app/src/main/res/layout/activity_loop_l.xml index 1be43ea..eeb2d1c 100644 --- a/app/src/main/res/layout/activity_loop_l.xml +++ b/app/src/main/res/layout/activity_loop_l.xml @@ -112,5 +112,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_loop_p.xml b/app/src/main/res/layout/activity_loop_p.xml index 43a2f01..20e007b 100644 --- a/app/src/main/res/layout/activity_loop_p.xml +++ b/app/src/main/res/layout/activity_loop_p.xml @@ -112,5 +112,4 @@ - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mini_class.xml b/app/src/main/res/layout/activity_mini_class.xml new file mode 100644 index 0000000..74eb997 --- /dev/null +++ b/app/src/main/res/layout/activity_mini_class.xml @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_mini_class_create.xml b/app/src/main/res/layout/activity_mini_class_create.xml new file mode 100644 index 0000000..f6a61a0 --- /dev/null +++ b/app/src/main/res/layout/activity_mini_class_create.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_mini_class_landscape.xml b/app/src/main/res/layout/activity_mini_class_landscape.xml new file mode 100644 index 0000000..ea2224b --- /dev/null +++ b/app/src/main/res/layout/activity_mini_class_landscape.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_mini_class_list.xml b/app/src/main/res/layout/activity_mini_class_list.xml new file mode 100644 index 0000000..eda0fb0 --- /dev/null +++ b/app/src/main/res/layout/activity_mini_class_list.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 861889f..97d8d8b 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -18,9 +18,8 @@ android:background="#FFFFFF" android:layout_marginTop="10dp" > - + android:text="服务器配置"/> - + android:text="视频回环测试"/> + + android:layout_weight="1" /> @@ -84,7 +82,38 @@ android:layout_marginRight="10dp" android:layout_marginLeft="10dp" android:background="#CCCCCC"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - + diff --git a/app/src/main/res/layout/activity_setup_server_host.xml b/app/src/main/res/layout/activity_setup_server_host.xml new file mode 100644 index 0000000..9a2be6b --- /dev/null +++ b/app/src/main/res/layout/activity_setup_server_host.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_star_rtc_main.xml b/app/src/main/res/layout/activity_star_rtc_main.xml index 221e88d..2ab2f15 100644 --- a/app/src/main/res/layout/activity_star_rtc_main.xml +++ b/app/src/main/res/layout/activity_star_rtc_main.xml @@ -15,13 +15,12 @@ android:layout_marginRight="12dp" > + android:padding="10dp"/> - - + - - - - - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="visible"> - + + - - + - - - - - + + + + + - - - - - + + + + + - + android:layout_marginRight="20dp" + android:layout_marginBottom="26dp"> + + + + - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_voip_audio.xml b/app/src/main/res/layout/activity_voip_audio.xml new file mode 100644 index 0000000..d0a530c --- /dev/null +++ b/app/src/main/res/layout/activity_voip_audio.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_voip_create.xml b/app/src/main/res/layout/activity_voip_create.xml index 260f640..c3db8b3 100644 --- a/app/src/main/res/layout/activity_voip_create.xml +++ b/app/src/main/res/layout/activity_voip_create.xml @@ -20,7 +20,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_voip_p2p_create.xml b/app/src/main/res/layout/activity_voip_p2p_create.xml new file mode 100644 index 0000000..be8cb03 --- /dev/null +++ b/app/src/main/res/layout/activity_voip_p2p_create.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + +