From 29b2425e3e7240b182b423649ea17f30b8b23258 Mon Sep 17 00:00:00 2001 From: wangshuo <584363327@qq.com> Date: Tue, 12 Sep 2023 15:34:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=A8=AA=E5=B1=8F?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=EF=BC=8C=E4=BC=98=E5=8C=96=E9=80=80=E5=87=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../cloudapp/ui/CasCloudMainActivity.java | 16 ---- .../cloudapp/ui/CasCloudPhoneActivity.java | 89 +++++++++++++------ .../src/main/cpp/cas_decoder/CasDecoder.cpp | 4 +- .../huawei/cloudphone/api/ICloudPhone.java | 7 ++ .../cloudphone/apiimpl/CloudPhoneImpl.java | 9 +- 6 files changed, 82 insertions(+), 45 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8e3e5c3..b6e54db 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ dependencies { implementation 'com.github.bumptech.glide:glide:4.13.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.14.0' implementation 'com.hyman:flowlayout-lib:1.1.2' - implementation 'com.github.Petterpx:FloatingX:1.3.1' + implementation 'com.github.Petterpx:FloatingX:1.3.3' implementation 'com.android.support:design:28.0.0' implementation 'com.github.Justson.AgentWeb:agentweb-core:v5.0.6-androidx' implementation project(':cloudphone') diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java index 694559d..764747d 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java @@ -51,15 +51,6 @@ public class CasCloudMainActivity extends Activity { private AutoCompleteTextView mCloudPhonePort; private TagFlowLayout mFlowLayout; private CasHistory mCasHistory; - private Button appConnect; - private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals("com.huawei.cloudapp.ui.CasCloudPhoneActivity.destroyed")) { - appConnect.setEnabled(true); - } - } - }; @Override protected void onCreate(Bundle savedInstanceState) { @@ -76,14 +67,11 @@ public class CasCloudMainActivity extends Activity { initAutoCompleteTextView("ip", mCloudPhoneIp); initAutoCompleteTextView("port", mCloudPhonePort); setAdapter(mFlowLayout); - registerReceiver(mBroadcastReceiver, - new IntentFilter("com.huawei.cloudapp.ui.CasCloudPhoneActivity.destroyed")); } @Override protected void onPause() { super.onPause(); - unregisterReceiver(mBroadcastReceiver); } private void initView() { @@ -93,7 +81,6 @@ public class CasCloudMainActivity extends Activity { initAutoCompleteTextView("port", mCloudPhonePort); mFlowLayout = findViewById(R.id.flow); setAdapter(mFlowLayout); - appConnect = findViewById(R.id.cloud_phone_connect); } @@ -101,7 +88,6 @@ public class CasCloudMainActivity extends Activity { if (CasCommonUtils.isFastClick()) { return; } - appConnect.setEnabled(false); startCloudPhoneActivity(CasCloudPhoneActivity.class); } @@ -117,13 +103,11 @@ public class CasCloudMainActivity extends Activity { String phoneIp = mCloudPhoneIp.getText().toString().trim(); if (TextUtils.isEmpty(phoneIp)) { CASLog.e(TAG, "输入Ip为空"); - appConnect.setEnabled(true); return; } String phonePort = mCloudPhonePort.getText().toString().trim(); if (TextUtils.isEmpty(phonePort)) { CASLog.e(TAG, "输入Port为空"); - appConnect.setEnabled(true); return; } Intent intent = new Intent(CasCloudMainActivity.this, cls); diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java index 15ebf22..b6b71c9 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java @@ -125,6 +125,7 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl private static final int MSG_STATE_CHANGE = 103; private static final int MSG_SHOW_TRAIL_PLAY_TIMEOUT = 104; private static final int MSG_RECONNECT_FAILED = 105; + private static final int STATE_DEINIT = 1; private static CasCloudPhoneActivity gAcitivity = null; private static CasListener mCasListener = null; @@ -166,9 +167,14 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl private FrameLayout mFloatContainer = null; private boolean mIsTrailPlayTimeout = false; private boolean mIsActivityBackground = false; + private boolean mIsStopCloudPhoneCalled = false; private volatile boolean mIsStartTaskRunning = false; private ICloudPhone mCloudPhone; + private boolean isLandscapeScreen = false; + private int screenWidth; + private int screenHeight; + RadioGroup.OnCheckedChangeListener qualityCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { if (group.getCheckedRadioButtonId() != checkedId) { @@ -324,8 +330,14 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl mMediaConfig.put(QUALITY, DEFINITION_MAIN); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getRealMetrics(metrics); - mMediaConfig.put(PHYSICAL_WIDTH, String.valueOf(metrics.widthPixels)); - mMediaConfig.put(PHYSICAL_HEIGHT, String.valueOf(metrics.heightPixels)); + screenWidth = metrics.widthPixels; + screenHeight = metrics.heightPixels; + + if (screenWidth > screenHeight) { + isLandscapeScreen = true; + } + mMediaConfig.put(PHYSICAL_WIDTH, String.valueOf(isLandscapeScreen ? screenHeight : screenWidth)); + mMediaConfig.put(PHYSICAL_HEIGHT, String.valueOf(isLandscapeScreen ? screenWidth : screenHeight)); mCloudPhone.setMediaConfig(mMediaConfig); mCloudPhone.startCloudPhone(this, mFrameLayout, parasMap); @@ -404,14 +416,7 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl CASLog.i(TAG, "onDestroy"); keepScreenLongLight(this, false); super.onDestroy(); - try { - mCloudPhone.exitCloudPhone(); - mCloudPhone.deinit(); - } catch (Exception e) { - CASLog.e(TAG, "destroy failed. " + e.getMessage()); - } - Intent intent = new Intent("com.huawei.cloudapp.ui.CasCloudPhoneActivity.destroyed"); - sendBroadcast(intent); + stopCloudPhone(); } @Override @@ -580,27 +585,54 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl return; } if (currentRotation != rotation) { + int landscapeWidth = 0, landscapeHeight = 0; switch (rotation) { case 0: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + if (isLandscapeScreen) { + landscapeHeight = screenHeight; + landscapeWidth = screenHeight * 9 / 16; + } break; case 1: case 8: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + if (isLandscapeScreen) { + landscapeHeight = screenHeight; + landscapeWidth = screenWidth; + } break; case 2: case 16: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); + if (isLandscapeScreen) { + landscapeHeight = screenHeight; + landscapeWidth = screenHeight * 9 / 16; + } break; case 3: case 24: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); + if (isLandscapeScreen) { + landscapeHeight = screenHeight; + landscapeWidth = screenWidth; + } break; default: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + if (isLandscapeScreen) { + landscapeHeight = screenHeight; + landscapeWidth = screenHeight * 9 / 16; + } break; } currentRotation = rotation; + + if (isLandscapeScreen) { + FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(landscapeWidth, landscapeHeight); + layoutParams.gravity = Gravity.CENTER; + mFrameLayout.setLayoutParams(layoutParams); + } } } @@ -687,28 +719,35 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl * stop cloud phone */ private void stopCloudPhone() { + if (mIsStopCloudPhoneCalled) { + return; + } CASLog.d(TAG, "stop cloud phone"); + mIsStopCloudPhoneCalled = true; + mProgressBar.setVisibility(View.VISIBLE); + mFrameLayout.setVisibility(View.GONE); doCheckConnection = false; // dismissAllDialogs(); - finish(); gAcitivity = null; if (mVirtualDeviceSession != null) { mVirtualDeviceSession.stop(); } - new Thread(new Runnable() { - @Override - public void run() { - bIsStart = false; - try { - mCloudPhone.exitCloudPhone(); - } catch (Exception e) { - CASLog.e(TAG, "stop cloud phone failed " + e.getMessage()); - } - if (mCasListener != null) { - mCasListener.onStateChange(CasState.CAS_EXIT, "Exit"); - } - } - }).start(); + + bIsStart = false; + try { + mCloudPhone.exitCloudPhone(); + mCloudPhone.deinit(); + } catch (Exception e) { + CASLog.e(TAG, "stop cloud phone failed " + e.getMessage()); + } + if (mCasListener != null) { + mCasListener.onStateChange(CasState.CAS_EXIT, "Exit"); + } + + while (mCloudPhone.getState() != STATE_DEINIT) { + sleep(100); + } + finish(); } /** diff --git a/cloudphone/src/main/cpp/cas_decoder/CasDecoder.cpp b/cloudphone/src/main/cpp/cas_decoder/CasDecoder.cpp index 2259a62..870c69b 100644 --- a/cloudphone/src/main/cpp/cas_decoder/CasDecoder.cpp +++ b/cloudphone/src/main/cpp/cas_decoder/CasDecoder.cpp @@ -26,8 +26,8 @@ namespace { enum MediaCodecResolution { - KEY_WIDTH = 720, - KEY_HEIGHT = 1280 + KEY_WIDTH = 1080, + KEY_HEIGHT = 1920 }; const char *MIME_TYPE_H264 = "video/avc"; const char *MIME_TYPE_H265 = "video/hevc"; diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java b/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java index 5cf371a..c3044a4 100644 --- a/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java +++ b/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java @@ -135,4 +135,11 @@ public interface ICloudPhone { * @return 网络时延 */ int getRtt(); + + /** + * 获取当前状态 + * + * @return 当前状态 + */ + int getState(); } diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java b/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java index ddb3569..e721021 100644 --- a/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java +++ b/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java @@ -326,6 +326,11 @@ public class CloudPhoneImpl implements ICloudPhone { } } + @Override + public int getState() { + return mCurrentState; + } + public void handleStartCmd(final Activity activity, final ViewGroup views) { if (null == activity) { CASLog.e(TAG, "handle start cmd fail, activity is null."); @@ -381,7 +386,7 @@ public class CloudPhoneImpl implements ICloudPhone { public void surfaceDestroyed(SurfaceHolder holder) { synchronized (mCloudPhoneLock) { CASLog.i(TAG, "surfaceDestroyed..."); - if (mCASClient.getState() != JNIState.JNI_STOPPED) { + if (mCASClient != null && mCASClient.getState() != JNIState.JNI_STOPPED) { mCASClient.stop(true); } if (mCmdHandler != null) { @@ -666,6 +671,8 @@ public class CloudPhoneImpl implements ICloudPhone { CASLog.e(TAG, "get orientation failed. " + e.getMessage()); return true; } + } else { + return false; } switch (orientation) { -- Gitee From b8688459baa0e09599c0d03d036e610809eea7cd Mon Sep 17 00:00:00 2001 From: wangshuo <584363327@qq.com> Date: Tue, 12 Sep 2023 17:19:48 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=A8=AA=E5=B1=8F?= =?UTF-8?q?=E8=AE=BE=E5=A4=87-=E5=88=9D=E5=A7=8B=E5=8C=96=E6=9C=9D?= =?UTF-8?q?=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java index b6b71c9..e07aabe 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java @@ -289,7 +289,6 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl textCtrl.setOnClickListener(CasCloudPhoneActivity.this); textCtrl.setBackgroundResource(R.drawable.button_sub_action_selector); - setRotation(mOrientation); lagSwitch.setChecked(false); gAcitivity = this; try { @@ -335,7 +334,9 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl if (screenWidth > screenHeight) { isLandscapeScreen = true; + mOrientation = 8; } + setRotation(mOrientation); mMediaConfig.put(PHYSICAL_WIDTH, String.valueOf(isLandscapeScreen ? screenHeight : screenWidth)); mMediaConfig.put(PHYSICAL_HEIGHT, String.valueOf(isLandscapeScreen ? screenWidth : screenHeight)); -- Gitee From 165520566c95543a5956647a89f3242ee50d6901 Mon Sep 17 00:00:00 2001 From: wangshuo <584363327@qq.com> Date: Mon, 18 Sep 2023 09:14:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=A8=AA=E5=B1=8F?= =?UTF-8?q?=E8=AE=BE=E5=A4=87-=E5=9B=9E=E9=80=80=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=80=80=E5=87=BA=E9=80=BB=E8=BE=91=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloudapp/ui/CasCloudMainActivity.java | 16 ++++++ .../cloudapp/ui/CasCloudPhoneActivity.java | 49 +++++++++---------- .../huawei/cloudphone/api/ICloudPhone.java | 7 --- .../cloudphone/apiimpl/CloudPhoneImpl.java | 5 -- 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java index 764747d..694559d 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudMainActivity.java @@ -51,6 +51,15 @@ public class CasCloudMainActivity extends Activity { private AutoCompleteTextView mCloudPhonePort; private TagFlowLayout mFlowLayout; private CasHistory mCasHistory; + private Button appConnect; + private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals("com.huawei.cloudapp.ui.CasCloudPhoneActivity.destroyed")) { + appConnect.setEnabled(true); + } + } + }; @Override protected void onCreate(Bundle savedInstanceState) { @@ -67,11 +76,14 @@ public class CasCloudMainActivity extends Activity { initAutoCompleteTextView("ip", mCloudPhoneIp); initAutoCompleteTextView("port", mCloudPhonePort); setAdapter(mFlowLayout); + registerReceiver(mBroadcastReceiver, + new IntentFilter("com.huawei.cloudapp.ui.CasCloudPhoneActivity.destroyed")); } @Override protected void onPause() { super.onPause(); + unregisterReceiver(mBroadcastReceiver); } private void initView() { @@ -81,6 +93,7 @@ public class CasCloudMainActivity extends Activity { initAutoCompleteTextView("port", mCloudPhonePort); mFlowLayout = findViewById(R.id.flow); setAdapter(mFlowLayout); + appConnect = findViewById(R.id.cloud_phone_connect); } @@ -88,6 +101,7 @@ public class CasCloudMainActivity extends Activity { if (CasCommonUtils.isFastClick()) { return; } + appConnect.setEnabled(false); startCloudPhoneActivity(CasCloudPhoneActivity.class); } @@ -103,11 +117,13 @@ public class CasCloudMainActivity extends Activity { String phoneIp = mCloudPhoneIp.getText().toString().trim(); if (TextUtils.isEmpty(phoneIp)) { CASLog.e(TAG, "输入Ip为空"); + appConnect.setEnabled(true); return; } String phonePort = mCloudPhonePort.getText().toString().trim(); if (TextUtils.isEmpty(phonePort)) { CASLog.e(TAG, "输入Port为空"); + appConnect.setEnabled(true); return; } Intent intent = new Intent(CasCloudMainActivity.this, cls); diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java index e07aabe..e11d3e2 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudPhoneActivity.java @@ -125,7 +125,6 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl private static final int MSG_STATE_CHANGE = 103; private static final int MSG_SHOW_TRAIL_PLAY_TIMEOUT = 104; private static final int MSG_RECONNECT_FAILED = 105; - private static final int STATE_DEINIT = 1; private static CasCloudPhoneActivity gAcitivity = null; private static CasListener mCasListener = null; @@ -167,7 +166,6 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl private FrameLayout mFloatContainer = null; private boolean mIsTrailPlayTimeout = false; private boolean mIsActivityBackground = false; - private boolean mIsStopCloudPhoneCalled = false; private volatile boolean mIsStartTaskRunning = false; private ICloudPhone mCloudPhone; @@ -417,7 +415,14 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl CASLog.i(TAG, "onDestroy"); keepScreenLongLight(this, false); super.onDestroy(); - stopCloudPhone(); + try { + mCloudPhone.exitCloudPhone(); + mCloudPhone.deinit(); + } catch (Exception e) { + CASLog.e(TAG, "destroy failed. " + e.getMessage()); + } + Intent intent = new Intent("com.huawei.cloudapp.ui.CasCloudPhoneActivity.destroyed"); + sendBroadcast(intent); } @Override @@ -705,7 +710,6 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl ctrView.setVisibility(View.GONE); return true; } - showUiLevelDialog(); return true; } else if (keyCode == KeyEvent.KEYCODE_APP_SWITCH) { return true; @@ -720,35 +724,28 @@ public class CasCloudPhoneActivity extends FragmentActivity implements View.OnCl * stop cloud phone */ private void stopCloudPhone() { - if (mIsStopCloudPhoneCalled) { - return; - } CASLog.d(TAG, "stop cloud phone"); - mIsStopCloudPhoneCalled = true; - mProgressBar.setVisibility(View.VISIBLE); - mFrameLayout.setVisibility(View.GONE); doCheckConnection = false; // dismissAllDialogs(); + finish(); gAcitivity = null; if (mVirtualDeviceSession != null) { mVirtualDeviceSession.stop(); } - - bIsStart = false; - try { - mCloudPhone.exitCloudPhone(); - mCloudPhone.deinit(); - } catch (Exception e) { - CASLog.e(TAG, "stop cloud phone failed " + e.getMessage()); - } - if (mCasListener != null) { - mCasListener.onStateChange(CasState.CAS_EXIT, "Exit"); - } - - while (mCloudPhone.getState() != STATE_DEINIT) { - sleep(100); - } - finish(); + new Thread(new Runnable() { + @Override + public void run() { + bIsStart = false; + try { + mCloudPhone.exitCloudPhone(); + } catch (Exception e) { + CASLog.e(TAG, "stop cloud phone failed " + e.getMessage()); + } + if (mCasListener != null) { + mCasListener.onStateChange(CasState.CAS_EXIT, "Exit"); + } + } + }).start(); } /** diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java b/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java index c3044a4..5cf371a 100644 --- a/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java +++ b/cloudphone/src/main/java/com/huawei/cloudphone/api/ICloudPhone.java @@ -135,11 +135,4 @@ public interface ICloudPhone { * @return 网络时延 */ int getRtt(); - - /** - * 获取当前状态 - * - * @return 当前状态 - */ - int getState(); } diff --git a/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java b/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java index e721021..012b42f 100644 --- a/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java +++ b/cloudphone/src/main/java/com/huawei/cloudphone/apiimpl/CloudPhoneImpl.java @@ -326,11 +326,6 @@ public class CloudPhoneImpl implements ICloudPhone { } } - @Override - public int getState() { - return mCurrentState; - } - public void handleStartCmd(final Activity activity, final ViewGroup views) { if (null == activity) { CASLog.e(TAG, "handle start cmd fail, activity is null."); -- Gitee