diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 010fcd863c73a3b3c708e32f86b257ac465852e2..0a63e556472071bd748a2c6239d7c95481105fad 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,6 +19,35 @@
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
+
+
+
+
+
+
+
-
\ No newline at end of file
diff --git a/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java b/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java
index 178f00dc042e37ba502b606e0ad5cb155f4a718e..0a21b39e683e3199252fd30fcd24400cf39cb1eb 100644
--- a/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java
+++ b/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java
@@ -19,6 +19,7 @@ package com.huawei.cloudapp.common;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
@@ -50,6 +51,7 @@ public class CasCommonDialog extends Dialog {
private String negativeButtonText;
private OnClickListener positiveButtonClickListener;
private OnClickListener negativeButtonClickListener;
+ private int contentGravity;
public Builder(Context context) {
this.context = context;
@@ -104,6 +106,11 @@ public class CasCommonDialog extends Dialog {
return this;
}
+ public Builder setGravity(int gravity) {
+ this.contentGravity = gravity;
+ return this;
+ }
+
public CasCommonDialog create() {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final CasCommonDialog dialog = new CasCommonDialog(context, R.style.dialog);
@@ -144,6 +151,9 @@ public class CasCommonDialog extends Dialog {
}
TextView messageTV = (TextView) layout.findViewById(R.id.message);
+ if (contentGravity != 0) {
+ messageTV.setGravity(contentGravity);
+ }
LinearLayout content = (LinearLayout) layout.findViewById(R.id.content);
if (message != null) {
messageTV.setText(message);
diff --git a/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java b/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java
index a92ea5e325f5cf83537d93e643ac505cfb928bff..77871a3f848172acd3b9d0c4044b7f9faea68ab5 100644
--- a/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java
+++ b/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java
@@ -184,6 +184,19 @@ public class ResponseGetConnectInfo implements Parcelable {
return new AccessInfo[size];
}
};
+
+ @Override
+ public String toString() {
+ return "AccessInfo{" +
+ "accessIp='" + accessIp + '\'' +
+ ", intranetIp='" + intranetIp + '\'' +
+ ", accessIpv6='" + accessIpv6 + '\'' +
+ ", accessPort=" + accessPort +
+ ", sessionId='" + sessionId + '\'' +
+ ", timestamp='" + timestamp + '\'' +
+ ", ticket='" + ticket + '\'' +
+ '}';
+ }
}
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java
index fda8ea28e2be67ccb70e7877b1114da0e6e6a739..a119b40b4feb0330820a4387c7e76d3149744693 100644
--- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java
+++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java
@@ -19,6 +19,7 @@ import static com.huawei.cloudapp.utils.CasConstantsUtil.USERNAME;
import static com.huawei.cloudapp.utils.CasConstantsUtil.USER_INFO;
import android.annotation.SuppressLint;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
@@ -64,6 +65,7 @@ import com.huawei.cloudapp.model.direct.PhoneModel;
import com.huawei.cloudapp.presenter.PhonePresenter;
import com.huawei.cloudapp.presenter.UserPresenter;
import com.huawei.cloudapp.ui.adapter.PhoneListAdapter;
+import com.huawei.cloudapp.ui.common.SmoothScroller;
import com.huawei.cloudapp.utils.CasAESKeystoreUtils;
import com.huawei.cloudapp.utils.CasCommonUtils;
import com.scwang.smart.refresh.footer.ClassicsFooter;
@@ -270,7 +272,7 @@ public class CasCloudDirectMainActivity extends AppCompatActivity implements IHa
pagerSnapHelper.attachToRecyclerView(mRecyclerView);
if (mViewType == 0) {
- mLayoutManager = new LinearLayoutManager(this);
+ mLayoutManager = new MyLayoutManager(this);
mPhoneListAdapter = new PhoneListAdapter(R.layout.cas_phone_item_list);
mRecyclerView.clearOnScrollListeners();
mRecyclerView.setPadding(0, 0, 0, 0);
@@ -786,4 +788,18 @@ public class CasCloudDirectMainActivity extends AppCompatActivity implements IHa
getUserPhoneList(true);
}
}
+
+ public class MyLayoutManager extends LinearLayoutManager {
+
+ public MyLayoutManager(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
+ SmoothScroller smoothScroller = new SmoothScroller(recyclerView.getContext());
+ smoothScroller.setTargetPosition(position);
+ startSmoothScroll(smoothScroller);
+ }
+ }
}
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd67bc27071cb8ea8fd366d5d43167c25c6ed9ad
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java
@@ -0,0 +1,112 @@
+package com.huawei.cloudapp.ui.activity.mine;
+
+import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.content.res.AppCompatResources;
+import androidx.appcompat.widget.Toolbar;
+
+import com.huawei.cloudapp.R;
+import com.huawei.cloudapp.common.CasCommonDialog;
+import com.huawei.cloudapp.ui.common.ButtonTouchStyleListener;
+import com.huawei.cloudapp.utils.CasCommonUtils;
+
+public class MineAboutActivity extends AppCompatActivity {
+
+ private CasCommonDialog connectUsDialog;
+
+ private static final String CONNECT_MSG1 = "4000-955-988 转 1";
+ private static final String CONNECT_MSG2 = "950808 转 1";
+ private static final String CONNECT_MSG3 = "为您提供售前购买咨询、解决方案推荐、配置推荐等1v1服务, 助您上云无忧!\n\n热线服务时间 9:00-18:00";
+
+ @SuppressLint("ClickableViewAccessibility")
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_about);
+
+ ImageView backButton = findViewById(R.id.back_button);
+ backButton.setOnClickListener(view -> onBackPressed());
+
+ TextView version = findViewById(R.id.about_version);
+ version.setText(CasCommonUtils.getApkVersion(MineAboutActivity.this));
+
+ RelativeLayout connectUs = findViewById(R.id.connect_us_linear);
+ connectUs.setOnTouchListener(new ButtonTouchStyleListener());
+ connectUs.setOnClickListener(new MineAboutClickListener());
+
+ RelativeLayout checkNewVersion = findViewById(R.id.check_new_version_linear);
+ checkNewVersion.setOnTouchListener(new ButtonTouchStyleListener());
+ checkNewVersion.setOnClickListener(new MineAboutClickListener());
+
+ RelativeLayout privacyPolicy = findViewById(R.id.privacy_policy_linear);
+ privacyPolicy.setOnTouchListener(new ButtonTouchStyleListener());
+ privacyPolicy.setOnClickListener(new MineAboutClickListener());
+ }
+
+ class MineAboutClickListener implements View.OnClickListener {
+
+ @Override
+ public void onClick(View view) {
+
+ switch (view.getId()) {
+ case R.id.connect_us_linear:
+ showConnectUsDialog();
+ break;
+ case R.id.check_new_version_linear:
+ Toast.makeText(view.getContext(), "检查新版本", Toast.LENGTH_SHORT).show();
+ break;
+ case R.id.privacy_policy_linear:
+ Intent intent = new Intent(MineAboutActivity.this, MineAboutPrivacyPolicyActivity.class);
+ startActivity(intent);
+ break;
+ default:
+ Toast.makeText(view.getContext(), "空白", Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+
+ public void showConnectUsDialog() {
+ if (connectUsDialog == null || !connectUsDialog.isShowing()) {
+ final View contentView = View.inflate(MineAboutActivity.this, R.layout.cas_set_ui_level, null);
+ CasCommonDialog.DialogClickListener dialogListener = new CasCommonDialog.DialogClickListener();
+
+ final CasCommonDialog.Builder builder = new CasCommonDialog.Builder(MineAboutActivity.this)
+ .setTitle(R.string.connect_us)
+ .setMessage(getConnectMsg(MineAboutActivity.this))
+ .setContentView(contentView)
+ .setGravity(Gravity.START)
+ .setPositiveButton(getResources().getString(R.string.cas_phone_confirm_tip_message), dialogListener);
+
+ connectUsDialog = builder.create();
+ connectUsDialog.setCancelable(true);
+ if (!isFinishing()) {
+ connectUsDialog.show();
+ }
+ }
+ }
+
+ private static String getConnectMsg(Context context) {
+ return context.getResources().getString(R.string.sale_phone)
+ + ENTER_STRING
+ + CONNECT_MSG1
+ + ENTER_STRING
+ + CONNECT_MSG2
+ +ENTER_STRING
+ + CONNECT_MSG3;
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..32e014f7bb62d58f958ce0b6c25f229792904385
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java
@@ -0,0 +1,21 @@
+package com.huawei.cloudapp.ui.activity.mine;
+
+import android.os.Bundle;
+import android.widget.ImageView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.huawei.cloudapp.R;
+
+public class MineAboutPrivacyPolicyActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_about_privacy_policy);
+
+ ImageView backButton = findViewById(R.id.back_button);
+ backButton.setOnClickListener(view -> onBackPressed());
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java
new file mode 100644
index 0000000000000000000000000000000000000000..750fd8ab92e3f2b0707e6842fdf979535d0b603a
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java
@@ -0,0 +1,38 @@
+package com.huawei.cloudapp.ui.activity.mine;
+
+import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING;
+
+import android.os.Bundle;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.huawei.cloudapp.R;
+
+public class MineQuestion1Activity extends AppCompatActivity {
+
+ private static final String MSG1 = "1.若您是咨询云手机是否可安装IOS系统,答案是不可以。目前只支持安装开源的谷歌AOSP版本,其他手机系统出于商业授权缘故、架构不一致等缘由,我们不能提供。";
+ private static final String MSG2 = "2.若您是咨询是否可以通过IOS系统连接云手机,答案是可以。我们支持通过任何系统连接云手机。";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_question1);
+
+ ImageView backButton = findViewById(R.id.back_button);
+ backButton.setOnClickListener(view -> onBackPressed());
+
+ TextView content = findViewById(R.id.mine_question1_content_text);
+ content.setText(getQuestion2Content());
+
+ }
+
+ private static String getQuestion2Content() {
+ return MSG1
+ + ENTER_STRING
+ + MSG2
+ + ENTER_STRING;
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b63f1f89ef771fb19ef728b13525801cd2bdd7b
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java
@@ -0,0 +1,45 @@
+package com.huawei.cloudapp.ui.activity.mine;
+
+import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING;
+
+import android.app.Dialog;
+import android.graphics.Matrix;
+import android.graphics.PointF;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.huawei.cloudapp.R;
+
+public class MineQuestion2Activity extends AppCompatActivity {
+
+ private static final String STEP1 = "1.登录管理控制台。";
+ private static final String STEP2 = "2.在右上角用户名的下拉列表中,单击“我的凭证”。";
+ private static final String STEP3 = "3.在“项目列表”中获取各区域对应的“项目ID”。";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_question2);
+
+ ImageView backButton = findViewById(R.id.back_button);
+ backButton.setOnClickListener(view -> onBackPressed());
+
+ TextView content = findViewById(R.id.mine_question2_content_text);
+ content.setText(getQuestion2Content());
+
+ ImageView image = findViewById(R.id.mine_question2_image_view);
+ }
+
+ private static String getQuestion2Content() {
+ return STEP1
+ + ENTER_STRING
+ + STEP2
+ + ENTER_STRING
+ + STEP3;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java
new file mode 100644
index 0000000000000000000000000000000000000000..09897274884ad7f26d9b0a96f8252112c810a155
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java
@@ -0,0 +1,44 @@
+package com.huawei.cloudapp.ui.activity.mine;
+
+import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING;
+
+import android.os.Bundle;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.huawei.cloudapp.R;
+
+public class MineQuestion3Activity extends AppCompatActivity {
+
+ private static final String QUESTION_DES = "如果私钥文件丢失了,可以为服务器替换新的密钥对,并使用新的私钥文件连接云手机。";
+ private static final String SOLUTION_STEP0 = "以下为替换服务器密钥对的操作指导,请提前在云服务器控制台创建密钥对,并将密钥对对应的私钥文件下载至本地。";
+ private static final String SOLUTION_STEP1 = "1.登录管理控制台。";
+ private static final String SOLUTION_STEP2 = "2.在服务列表页,选择“计算 > 云手机服务器CPH”。进入云手机服务器页面。";
+ private static final String SOLUTION_STEP3 = "3.单击左侧导航栏的“服务器管理”。";
+ private static final String SOLUTION_STEP4 = "4.选择需要修改密钥对的服务器,在操作列单击“更多 > 修改密钥对”。";
+ private static final String SOLUTION_STEP5 = "5.在“修改密钥对”对话框,选择新的密钥对,单击“确定”。等待几分钟,新的密钥对生效。";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_mine_question3);
+
+ ImageView backButton = findViewById(R.id.back_button);
+ backButton.setOnClickListener(view -> onBackPressed());
+
+ TextView desText = findViewById(R.id.mine_question3_content_text1);
+ desText.setText(QUESTION_DES);
+
+ TextView solutionText = findViewById(R.id.mine_question3_content_text2);
+ solutionText.setText(getQuestion3Solution());
+
+ }
+
+ private static String getQuestion3Solution() {
+ return String.join(ENTER_STRING,
+ SOLUTION_STEP0, SOLUTION_STEP1, SOLUTION_STEP2, SOLUTION_STEP3, SOLUTION_STEP4, SOLUTION_STEP5);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java b/app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..0bb319225cd56a1464835bcb01b1d9900a3e5cd1
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java
@@ -0,0 +1,31 @@
+package com.huawei.cloudapp.ui.common;
+
+import android.os.Handler;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+
+import androidx.core.content.ContextCompat;
+
+import com.huawei.cloudapp.R;
+
+public class ButtonTouchStyleListener implements View.OnTouchListener {
+
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+
+ if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
+ view.setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.cas_radio_button_unselected_color));
+ } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ // 改变TextView的颜色
+ view.setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.cas_white));
+ view.performClick();
+ }
+ }, 200);
+ }
+ return true;
+ }
+}
diff --git a/app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java b/app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java
new file mode 100644
index 0000000000000000000000000000000000000000..8552104c53be8226d76a2b79845b72c7c0643b60
--- /dev/null
+++ b/app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java
@@ -0,0 +1,19 @@
+package com.huawei.cloudapp.ui.common;
+
+import android.content.Context;
+import android.util.DisplayMetrics;
+
+import androidx.recyclerview.widget.LinearSmoothScroller;
+
+public class SmoothScroller extends LinearSmoothScroller {
+ private static final float SPEED = 9000000f; // 滑动速度,单位是像素每毫秒
+
+ public SmoothScroller(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
+ return SPEED / displayMetrics.densityDpi;
+ }
+}
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 6002ad2e6685d8e6b55ec4a5011b32155b0c76d1..42087102986a9c316be269535902c8093c19c157 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
@@ -2,6 +2,8 @@ package com.huawei.cloudapp.ui.fragment.home;
import static android.content.Context.MODE_PRIVATE;
import static com.huawei.cloudapp.utils.CasConstantsUtil.COMMON;
+import static com.huawei.cloudapp.utils.CasConstantsUtil.EMPTY_STRING;
+import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING;
import static com.huawei.cloudapp.utils.CasConstantsUtil.IAM_USERNAME;
import static com.huawei.cloudapp.utils.CasConstantsUtil.PHONE_ID;
import static com.huawei.cloudapp.utils.CasConstantsUtil.PHONE_NAME;
@@ -70,6 +72,7 @@ import com.huawei.cloudapp.presenter.PhonePresenter;
import com.huawei.cloudapp.presenter.UserPresenter;
import com.huawei.cloudapp.ui.CasCloudLoginActivity;
import com.huawei.cloudapp.ui.CasCloudPhoneActivity;
+import com.huawei.cloudapp.ui.MainActivity;
import com.huawei.cloudapp.ui.adapter.PhoneListAdapter;
import com.huawei.cloudapp.utils.CasAESKeystoreUtils;
import com.huawei.cloudapp.utils.CasCommonUtils;
@@ -102,13 +105,13 @@ public class PhoneListFragment extends Fragment implements IHandleData