diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java index 5bf83577a504dca47379029228c41868ee341912..1bf1e204970850590928affc7568b9ca5f6df340 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java @@ -162,6 +162,7 @@ public class PhoneListFragment extends CloudPhoneFragment implements IHandleData public void onAttach(@NonNull Context context) { super.onAttach(context); mActivity = (Activity) context; + Toaster.init(mActivity.getApplication()); } @Nullable @@ -736,6 +737,9 @@ public class PhoneListFragment extends CloudPhoneFragment implements IHandleData params.text = getResources().getString(R.string.no_more_response); params.style = new CustomToastStyle(R.layout.toast_info); Toaster.show(params); + if (mRefreshLayout != null) { + mRefreshLayout.finishRefresh(true).finishLoadMore(true); + } } }); } else if (((List) list).get(0) instanceof User) { @@ -849,6 +853,9 @@ public class PhoneListFragment extends CloudPhoneFragment implements IHandleData params.text = message; params.style = new CustomToastStyle(R.layout.toast_error); Toaster.show(params); + if (mRefreshLayout != null) { + mRefreshLayout.finishRefresh(true).finishLoadMore(true); + } } }); } @@ -878,7 +885,9 @@ public class PhoneListFragment extends CloudPhoneFragment implements IHandleData || !mUser.getUserProjectId().containsKey(selectedRegion)) { return; } - mPhoneListAdapter.setNewInstance(new ArrayList<>()); + if (mPhoneListAdapter != null && !mPhoneListAdapter.getData().isEmpty()) { + mPhoneListAdapter.setNewInstance(new ArrayList<>()); + } if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { diff --git a/app/src/main/java/com/huawei/cloudapp/utils/CasHttpUtils.java b/app/src/main/java/com/huawei/cloudapp/utils/CasHttpUtils.java index 836c0d089c623a5203327d9056d8397e72033edc..fb608e133f92b9d088eff6a7cf03e99aa1b88c8b 100644 --- a/app/src/main/java/com/huawei/cloudapp/utils/CasHttpUtils.java +++ b/app/src/main/java/com/huawei/cloudapp/utils/CasHttpUtils.java @@ -6,13 +6,11 @@ import android.util.Log; import androidx.annotation.NonNull; -import com.google.gson.Gson; - import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; -import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; @@ -21,7 +19,6 @@ import javax.net.ssl.X509TrustManager; import okhttp3.Call; import okhttp3.Callback; -import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -81,7 +78,10 @@ public class CasHttpUtils { .post(body) .build(); - OKHttpClientBuilder.buildOKHttpClient().build().newCall(request).enqueue(callback); + OKHttpClientBuilder.buildOKHttpClient() + .callTimeout(10, TimeUnit.SECONDS) + .connectTimeout(30, TimeUnit.SECONDS) + .build().newCall(request).enqueue(callback); } public static void get(String url, Map header, Callback callback) { @@ -95,7 +95,10 @@ public class CasHttpUtils { Request request = builder.url(url) .build(); - OKHttpClientBuilder.buildOKHttpClient().build().newCall(request).enqueue(callback); + OKHttpClientBuilder.buildOKHttpClient() + .callTimeout(10, TimeUnit.SECONDS) + .connectTimeout(30, TimeUnit.SECONDS) + .build().newCall(request).enqueue(callback); } public static class OKHttpClientBuilder { diff --git a/app/src/main/res/layout/activity_cas_cloud_main_direct.xml b/app/src/main/res/layout/activity_cas_cloud_main_direct.xml index 575a1e2927eea294c3bb47a9868061da8a278356..00c08d226793c529050fcf6dc197778fa55ef933 100644 --- a/app/src/main/res/layout/activity_cas_cloud_main_direct.xml +++ b/app/src/main/res/layout/activity_cas_cloud_main_direct.xml @@ -13,8 +13,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" - app:defaultNavHost="true" - app:navGraph="@navigation/mobile_navigation" /> + app:defaultNavHost="true" /> Init(PEER_CLIENT, m_conf.ip.c_str(), m_conf.port + 2, param, + m_mtrans->Init(PEER_CLIENT, m_conf.ip.c_str(), m_conf.port, param, OnRecvVideoStreamData, OnRecvAudioStreamData, nullptr, diff --git a/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.cpp b/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.cpp index 2f5409d0f8631bd95eaf511a7e07be97bcb208a9..f7458820c82aae3ae815cbb9c82f80db96be56bb 100644 --- a/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.cpp +++ b/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.cpp @@ -28,14 +28,13 @@ CasHeartbeatThread::CasHeartbeatThread(CasHeartbeatController *heartbeatControll { m_casSocket = sock; m_heartbeatController = heartbeatController; - m_statLagTask = nullptr; } CasHeartbeatThread::~CasHeartbeatThread() { - if (this->m_statLagTask != nullptr) { - delete this->m_statLagTask; - this->m_statLagTask = nullptr; + if (m_statLagTask.joinable()) { + SetThreadStatus(CAS_THREAD_INIT); + m_statLagTask.join(); } } @@ -52,7 +51,10 @@ uint64_t CasHeartbeatThread::TestLag() struct timeval sent, recv; const int sleepTime = 20000; gettimeofday(&sent, nullptr); - bool ret = m_heartbeatController->HeartBeatRequest(600); + bool ret = false; + if (m_heartbeatController != nullptr) { + ret = m_heartbeatController->HeartBeatRequest(600); + } usleep(sleepTime); gettimeofday(&recv, nullptr); @@ -124,17 +126,7 @@ int CasHeartbeatThread::Start() } this->m_threadStatus = CAS_THREAD_INIT; - this->m_statLagTask = new (std::nothrow) thread(TaskEntry, this); - - if (this->m_statLagTask == nullptr) { - ERR("Task thread is nullptr."); - return -1; - } - - if (this->m_statLagTask->joinable()) { - this->m_statLagTask->detach(); - } - + this->m_statLagTask = std::thread(std::bind(&TaskEntry, this)); this->m_threadStatus = CAS_THREAD_RUNNING; return 0; } @@ -163,15 +155,10 @@ int CasHeartbeatThread::Exit() if (this->m_threadStatus != CAS_THREAD_EXIT) { this->m_threadStatus = CAS_THREAD_EXIT; } - int waitCount = 0; - while (this->m_threadStatus == CAS_THREAD_EXIT) { - if (waitCount >= 2) { - break; - } - waitCount++; - usleep(1000); + if(m_statLagTask.joinable()) { + m_statLagTask.join(); + return 0; } - return 0; } return -1; } \ No newline at end of file diff --git a/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.h b/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.h index 2ec2cc377d2e318c5c0bc9251e1672e054f3f42c..bbc2a928ae0fed017948f4e6701d1b3fdcf8658d 100644 --- a/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.h +++ b/cloudphone/src/main/cpp/cas_service/CasHeartbeatThread.h @@ -49,7 +49,7 @@ private: int m_sendHbErrCount = 0; std::deque m_lagDeque; std::atomic_int m_threadStatus; - std::thread *m_statLagTask; + std::thread m_statLagTask; }; #endif // CLOUDAPPSDK_CASHEARTBEATTHREAD_H \ No newline at end of file diff --git a/config.gradle b/config.gradle index 1cea3ff427f2e630a0bea1b4b715c02f77be540f..13404f6e51a2285219f065047ba8b7142259b2cb 100644 --- a/config.gradle +++ b/config.gradle @@ -5,5 +5,5 @@ ext.versions = [ compileSdkVersion : 31, buildToolsVersion : '28.0.3', versionCode : 1, - versionName : '24.3.0', + versionName : '24.6.0', ] \ No newline at end of file