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, private boolean isLogin; private String selectedRegion; private int selectedQueryType; - private String queryContent = ""; + private String queryContent = EMPTY_STRING; private User mUser; private CasCommonDialog mDialog; private int offset = 0; private RecyclerView mRecyclerView; private SmartRefreshLayout mRefreshLayout; - private int mViewType = 0; + private int mViewType = 1; private ImageView mViewTypeIV; private PhoneListAdapter mPhoneListAdapter; @@ -146,7 +149,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, mUserCasRecord.getHashMapRecord(TOKEN), mUserCasRecord.getHashMapRecord(TOKEN_EXPIRE_TIME), mUserCasRecord.getHashMapRecord(PROJECT_ID), - ""); + EMPTY_STRING); isLogin = true; } } @@ -188,7 +191,8 @@ public class PhoneListFragment extends Fragment implements IHandleData, @Override public void onClick(View view) { mTVSearchContent.setText("搜索"); - queryContent = ""; + queryContent = EMPTY_STRING; + mSearchView.setQuery(EMPTY_STRING, false); mTVSearchContentClose.setVisibility(View.GONE); getUserPhoneList(true); } @@ -458,7 +462,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, phone.setTrafficType(phoneDetail.getTrafficType()); phone.setVncEnable("false"); phone.setVolumeMode(phoneDetail.getVolumeMode()); - return new PhoneInfo(phone, "", selectedRegion); + return new PhoneInfo(phone, EMPTY_STRING, selectedRegion); } private void showPhoneDetail(ResponseGetPhoneDetail phoneDetail) { @@ -492,9 +496,13 @@ public class PhoneListFragment extends Fragment implements IHandleData, // whiteIcon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); // closeButton.setImageDrawable(whiteIcon); + // 设置弹出输入法 + mSearchView.setFocusable(true); + mSearchView.requestFocusFromTouch(); + //设置搜索下拉框 searchSpinner = v.findViewById(R.id.search_spinner); - List searchTypeList = Arrays.asList(new String[]{"名称", "服务器id", "云手机id"}); + List searchTypeList = Arrays.asList("名称", "服务器id", "云手机id"); searchTypeSpinnerAdapter = new ArrayAdapter<>(mActivity, R.layout.spinner_item, searchTypeList); searchTypeSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); searchSpinner.setAdapter(searchTypeSpinnerAdapter); @@ -537,7 +545,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, return false; } - if (!queryContent.equals("") && selectedQueryType == 2) { + if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { getUserPhoneList(true); @@ -546,7 +554,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, List searchTypeList = Arrays.asList(new String[]{"名称", "服务器id", "云手机id", "状态"}); mTVSearchContent.setText(searchTypeList.get(selectedQueryType) + ":" + queryContent); mTVSearchContentClose.setVisibility(View.VISIBLE); - mSearchView.setQuery("", false); + mSearchView.setQuery(queryContent, false); dialog.dismiss(); return true; } @@ -586,7 +594,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, mUserCasRecord.getHashMapRecord(TOKEN), mUserCasRecord.getHashMapRecord(TOKEN_EXPIRE_TIME), mUserCasRecord.getHashMapRecord(PROJECT_ID), - ""); + EMPTY_STRING); } IUserModel userModel = new com.huawei.cloudapp.model.direct.UserModel(); UserPresenter userPresenter = new UserPresenter(this, userModel); @@ -626,7 +634,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, PhonePresenter phonePresenter = new PhonePresenter(this, phoneModel); phonePresenter.restartPhone(mUser, selectedRegion, mUser.getUserProjectId().get(selectedRegion), - "", null, Collections.singletonList(phoneId)); + EMPTY_STRING, null, Collections.singletonList(phoneId)); mDialog.dismiss(); } @@ -635,7 +643,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, PhonePresenter phonePresenter = new PhonePresenter(this, phoneModel); phonePresenter.resetPhone(mUser, selectedRegion, mUser.getUserProjectId().get(selectedRegion), - "", null, Collections.singletonList(phoneId)); + EMPTY_STRING, null, Collections.singletonList(phoneId)); mDialog.dismiss(); } @@ -847,7 +855,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, return; } Log.e(TAG, "onLoadMore: "); - if (!queryContent.equals("") && selectedQueryType == 2) { + if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { getUserPhoneList(false); @@ -863,7 +871,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, return; } mPhoneListAdapter.setNewInstance(new ArrayList<>()); - if (!queryContent.equals("") && selectedQueryType == 2) { + if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { getUserPhoneList(true); diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..20966eb0b3e8dafe79d1c85d33142ff6550fb1fb --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java @@ -0,0 +1,247 @@ +package com.huawei.cloudapp.ui.fragment.mine; + +import static android.content.Context.MODE_PRIVATE; +import static com.huawei.cloudapp.utils.CasConstantsUtil.COMMON; +import static com.huawei.cloudapp.utils.CasConstantsUtil.IAM_USERNAME; +import static com.huawei.cloudapp.utils.CasConstantsUtil.PROJECT_ID; +import static com.huawei.cloudapp.utils.CasConstantsUtil.TOKEN; +import static com.huawei.cloudapp.utils.CasConstantsUtil.TOKEN_EXPIRE_TIME; +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.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.drawable.RoundedBitmapDrawable; +import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; +import androidx.fragment.app.Fragment; + +import com.hjq.toast.ToastParams; +import com.hjq.toast.Toaster; +import com.hjq.toast.style.CustomToastStyle; +import com.huawei.cloudapp.R; +import com.huawei.cloudapp.common.CasCommonDialog; +import com.huawei.cloudapp.common.CasRecord; +import com.huawei.cloudapp.model.bean.User; +import com.huawei.cloudapp.ui.CasCloudLoginActivity; +import com.huawei.cloudapp.ui.activity.mine.MineAboutActivity; +import com.huawei.cloudapp.ui.activity.mine.MineQuestion2Activity; +import com.huawei.cloudapp.ui.activity.mine.MineQuestion3Activity; +import com.huawei.cloudapp.ui.common.ButtonTouchStyleListener; +import com.huawei.cloudapp.utils.CasCommonUtils; + +public class MineFragment extends Fragment { + + private static final String TAG = "MineFragment"; + + private CasRecord mUserCasRecord; + + private User mUser; + + private boolean isLogin; + + private CasCommonDialog mDialog; + + private LinearLayout mLayout; + + private CasRecord mCommonCasRecord; + + private Button logoutButton; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + Log.e(TAG, "onCreate: "); + super.onCreate(savedInstanceState); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + Log.e(TAG, "onCreateView: "); + View view = inflater.inflate(R.layout.fragment_mine, container, false); + getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + mUserCasRecord = new CasRecord(getActivity().getSharedPreferences(USER_INFO, MODE_PRIVATE)); + String username = mUserCasRecord.getRecord(USERNAME); + if (username == null || username.isEmpty()) { + finishAndReLogin(true); + } else { + mUser = new User(username, + mUserCasRecord.getRecord(IAM_USERNAME), + mUserCasRecord.getHashMapRecord(TOKEN), + mUserCasRecord.getHashMapRecord(TOKEN_EXPIRE_TIME), + mUserCasRecord.getHashMapRecord(PROJECT_ID), + ""); + isLogin = true; + } + return view; + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + Log.e(TAG, "onViewCreated: "); + super.onViewCreated(view, savedInstanceState); + mLayout = view.findViewById(R.id.fragment_mine); + mCommonCasRecord = new CasRecord(view.getContext().getSharedPreferences(COMMON, MODE_PRIVATE)); + + // 圆形头像 + ImageView headImage = (ImageView) view.findViewById(R.id.head); + Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.head); + Bitmap bitmap2 = Tools.makeBitmapSquare(bitmap1, 120); + RoundedBitmapDrawable roundImg = RoundedBitmapDrawableFactory.create(getResources(), bitmap2); + roundImg.setAntiAlias(true); + roundImg.setCornerRadius(bitmap2.getWidth() / 2); + headImage.setImageDrawable(roundImg); + + RelativeLayout aboutLinear = view.findViewById(R.id.mine_about_linear); + aboutLinear.setOnTouchListener(new ButtonTouchStyleListener()); + aboutLinear.setOnClickListener(new SwitchFragmentClickListener()); + + RelativeLayout question1 = view.findViewById(R.id.mine_question1); + question1.setOnTouchListener(new ButtonTouchStyleListener()); + question1.setOnClickListener(new SwitchFragmentClickListener()); + + RelativeLayout question2 = view.findViewById(R.id.mine_question2); + question2.setOnTouchListener(new ButtonTouchStyleListener()); + question2.setOnClickListener(new SwitchFragmentClickListener()); + + RelativeLayout question3 = view.findViewById(R.id.mine_question3); + question3.setOnTouchListener(new ButtonTouchStyleListener()); + question3.setOnClickListener(new SwitchFragmentClickListener()); + + logoutButton = view.findViewById(R.id.logout); + logoutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showLogoutUserDialog(mUser.getUsername()); + } + }); + + fillUserInfo(view); + + fillSdkVersion(view, getContext()); + + } + + private void fillUserInfo(@NonNull View view) { + if (mUser != null) { + TextView iamUserNameTextView = view.findViewById(R.id.iam_user_name); + iamUserNameTextView.setText(mUser.getIamUsername()); + + TextView userNameTextView = view.findViewById(R.id.user_name); + userNameTextView.setText(mUser.getUsername()); + } + } + + private void fillSdkVersion(View view, Context context) { + TextView sdkTextView = view.findViewById(R.id.sdk_version); + sdkTextView.setText(CasCommonUtils.getApkVersion(context)); + } + + private void finishAndReLogin(boolean isPrompt) { + if (isPrompt) { + //提示客户需要重新登陆 + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + ToastParams params = new ToastParams(); + params.text = getResources().getString(R.string.user_info_invalid_need_login); + params.style = new CustomToastStyle(R.layout.toast_error); + Toaster.show(params); + } + }); + } + getActivity().getSharedPreferences(USER_INFO, MODE_PRIVATE).edit().clear().apply(); + Intent intent = new Intent(getActivity(), CasCloudLoginActivity.class); + startActivity(intent); + getActivity().finish(); + } + + @Override + public void onResume() { + Log.e(TAG, "onResume: "); + super.onResume(); + } + + @Override + public void onDestroyView() { + Log.e(TAG, "onDestroyView: "); + super.onDestroyView(); + } + + public void onLogOut(View view) { + if (!isLogin) { + finishAndReLogin(false); + } else { + String name = mUser.getUsername(); + if (!mUser.getIamUsername().isEmpty()) { + name = mUser.getIamUsername(); + } + showLogoutUserDialog(name); + } + } + + public void showLogoutUserDialog(String username) { + if (mDialog == null || !mDialog.isShowing()) { + final View contentView = View.inflate(getContext(), R.layout.cas_set_ui_level, null); + final CasCommonDialog.Builder builder = new CasCommonDialog.Builder(getContext()); + CasCommonDialog.DialogClickListener dialogListener = new CasCommonDialog.DialogClickListener(); + + builder.setTitle(username); + builder.setMessage(getResources().getString(R.string.is_exit_account)); + builder.setContentView(contentView); + builder.setPositiveButton(getResources().getString(R.string.cas_phone_cancel_tip_message), dialogListener); + builder.setNegativeButton(getResources().getString(R.string.cas_phone_quit_app_tip_message), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finishAndReLogin(false); + } + }); + + mDialog = builder.create(); + mDialog.setCancelable(true); + if (!getActivity().isFinishing()) { + mDialog.show(); + } + } + } + + class SwitchFragmentClickListener implements View.OnClickListener { + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.mine_about_linear: + startActivity(new Intent(getActivity(), MineAboutActivity.class)); + break; + case R.id.mine_question1: + Toast.makeText(getActivity(), "问题一", Toast.LENGTH_SHORT).show(); + break; + case R.id.mine_question2: + startActivity(new Intent(getActivity(), MineQuestion2Activity.class)); + break; + case R.id.mine_question3: + startActivity(new Intent(getActivity(), MineQuestion3Activity.class)); + break; + } + } + } +} diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java new file mode 100644 index 0000000000000000000000000000000000000000..be6118d76263217aaad40745a2a3c413597695f3 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java @@ -0,0 +1,18 @@ +package com.huawei.cloudapp.ui.fragment.mine; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class MineViewModel extends ViewModel { + private final MutableLiveData mText; + + public MineViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is mine fragment"); + } + + public LiveData getText() { + return mText; + } +} diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java new file mode 100644 index 0000000000000000000000000000000000000000..10a3d8028d01777a199b3c07d15ff5e303cc79e9 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java @@ -0,0 +1,23 @@ +package com.huawei.cloudapp.ui.fragment.mine; + +import android.graphics.Bitmap; +import android.graphics.Matrix; + +public class Tools { + + public static Bitmap makeBitmapSquare(Bitmap oldBitmap, int newWidth) { + Bitmap newBitmap; + if (oldBitmap.getWidth() > oldBitmap.getHeight()) { + newBitmap = Bitmap.createBitmap(oldBitmap, oldBitmap.getWidth() / 2 - oldBitmap.getHeight() / 2, 0, oldBitmap.getHeight(), oldBitmap.getHeight()); + } else { + newBitmap = Bitmap.createBitmap(oldBitmap, 0, oldBitmap.getHeight() / 2 - oldBitmap.getWidth() / 2, oldBitmap.getWidth(), oldBitmap.getWidth()); + } + int width = newBitmap.getWidth(); + float scaleWidth = ((float) newWidth) / width; + Matrix matrix = new Matrix(); + matrix.postScale(scaleWidth, scaleWidth); + newBitmap = Bitmap.createBitmap(newBitmap, 0, 0, width, width, matrix, true); + return newBitmap; + } +} + diff --git a/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java b/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java index ccdd73605f7b4881119c3579edcb9087cffeab7f..d074b4a720982d72d3fbcffe2d05e7453af4df8d 100644 --- a/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java +++ b/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java @@ -1,6 +1,10 @@ package com.huawei.cloudapp.utils; +import static com.huawei.cloudapp.utils.CasConstantsUtil.EMPTY_STRING; + import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.media.MediaCodecList; import android.media.MediaFormat; import android.os.SystemClock; @@ -128,4 +132,18 @@ public class CasCommonUtils { public static boolean isStringEmpty(String str) { return str == null || str.length() == 0; } + + public static String getApkVersion(Context context) { + if (context == null) { + return EMPTY_STRING; + } + try { + // getPackageName()是当前类的包名,0代表是获取版本信息 + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return packageInfo.versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return EMPTY_STRING; + } } diff --git a/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java b/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java index a1f20bf9db748e1f55a13e1f041df9665a9a014e..3ecbdc9b5457b89a066254a142b0fd5b2e4e8c5c 100644 --- a/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java +++ b/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java @@ -235,6 +235,12 @@ public class CasConstantsUtil { public static final String SERVER_ID = "server_id"; public static final String STATUS = "status"; + public static final String EMPTY_STRING = ""; + + public static final String ENTER_STRING = "\n"; + + + public static final List REGION_NAME; static { REGION_NAME = new ArrayList<>(); diff --git a/app/src/main/res/anim/slide_center.xml b/app/src/main/res/anim/slide_center.xml new file mode 100644 index 0000000000000000000000000000000000000000..b7c9c0202a7e429cf4cc28a0b1649b948967e6f1 --- /dev/null +++ b/app/src/main/res/anim/slide_center.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd2f0abd4e732b9a6b3481a7dfd3a80c481d8723 --- /dev/null +++ b/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000000000000000000000000000000000000..302bdac26b879c0ecf7200894a9b859862447898 --- /dev/null +++ b/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000000000000000000000000000000000000..1274f23afabc9755f3670a3cbec70f77b41e8c27 --- /dev/null +++ b/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/anim/slide_out_right.xml b/app/src/main/res/anim/slide_out_right.xml new file mode 100644 index 0000000000000000000000000000000000000000..a820739e370b18bfbeb04e9f8171c956134a625b --- /dev/null +++ b/app/src/main/res/anim/slide_out_right.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/cae_view_back.xml b/app/src/main/res/drawable/cae_view_back.xml new file mode 100644 index 0000000000000000000000000000000000000000..da97870780e66fdb41248f53a6ea2b1758c1bf4f --- /dev/null +++ b/app/src/main/res/drawable/cae_view_back.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/cae_view_enter.xml b/app/src/main/res/drawable/cae_view_enter.xml new file mode 100644 index 0000000000000000000000000000000000000000..6451cd0869db7c946cd98d97011622c257b70e10 --- /dev/null +++ b/app/src/main/res/drawable/cae_view_enter.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/head.jpg b/app/src/main/res/drawable/head.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0567a98c26223d2db9948a6e1c67c398616e210 Binary files /dev/null and b/app/src/main/res/drawable/head.jpg differ diff --git a/app/src/main/res/drawable/project_id_screenshot.png b/app/src/main/res/drawable/project_id_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..15455abfe8f22d1de134ea8ae30ae00ba2a57b74 Binary files /dev/null and b/app/src/main/res/drawable/project_id_screenshot.png differ diff --git a/app/src/main/res/layout/activity_mine_about.xml b/app/src/main/res/layout/activity_mine_about.xml new file mode 100644 index 0000000000000000000000000000000000000000..08a72b31c15e5487b34a7ea8fb2bbd979432db1a --- /dev/null +++ b/app/src/main/res/layout/activity_mine_about.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_about_privacy_policy.xml b/app/src/main/res/layout/activity_mine_about_privacy_policy.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d79231f68b45f8e102aa8e6eb13f645ab088b67 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_about_privacy_policy.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_question1.xml b/app/src/main/res/layout/activity_mine_question1.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d0de44b00e46644f7749c916eaed7520066ec93 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_question1.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_question2.xml b/app/src/main/res/layout/activity_mine_question2.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f910147bedd65f3f24d4fa1bb2c01fb64e4280b --- /dev/null +++ b/app/src/main/res/layout/activity_mine_question2.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_question3.xml b/app/src/main/res/layout/activity_mine_question3.xml new file mode 100644 index 0000000000000000000000000000000000000000..c96f7e63f1fbbc0fc6a1d729af40f404160fc7b9 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_question3.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cas_phone_item_list.xml b/app/src/main/res/layout/cas_phone_item_list.xml index b1baccf65604c9c28146e70a92b67902a58fa76d..e30b7462b3903e1eb3c0d06495946c5e25ad819c 100644 --- a/app/src/main/res/layout/cas_phone_item_list.xml +++ b/app/src/main/res/layout/cas_phone_item_list.xml @@ -1,23 +1,24 @@ + android:focusable="true" + app:cardCornerRadius="0dp" + app:cardUseCompatPadding="true"> + android:paddingBottom="10dp"> + @@ -43,56 +44,108 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:background="@drawable/cas_connect_button_normal"/> + android:background="@drawable/cas_connect_button_normal" /> - + android:layout_marginTop="10dp" + android:orientation="horizontal"> - + + + + + + + android:layout_marginTop="10dp" + android:orientation="horizontal"> - + + + + + + android:layout_marginTop="10dp" + android:orientation="horizontal"> + + + + + + android:layout_marginBottom="10dp" + android:background="@color/cas_divider_background" /> + android:textSize="11sp" /> @@ -129,13 +182,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:layout_marginStart="20dp" + android:background="@drawable/cas_more" android:clickable="true" + android:focusable="true" android:onClick="ShowServerDetail" - android:background="@drawable/cas_more" - android:layout_marginStart="20dp" android:visibility="gone" - tools:ignore="UsingOnClickInXml" - android:focusable="true" /> + tools:ignore="UsingOnClickInXml" /> diff --git a/app/src/main/res/layout/fragment_explore.xml b/app/src/main/res/layout/fragment_explore.xml index 8c11770df9fe40f03b5c4c5cf3775ffeff3ca12d..4a3cf67a38f5e196d62b1d6f1d677d853b6971b8 100644 --- a/app/src/main/res/layout/fragment_explore.xml +++ b/app/src/main/res/layout/fragment_explore.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.fragment.dashboardhboardFragment"> + tools:context=".ui.fragment.dashboard.DashboardFragment"> diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000000000000000000000000000000000000..55081de3bd5418b0d1e34a9663c9a4ae325fc159 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +