From facb0d0c253f733e11b2d04a95fc83bfdaff1f71 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期五, 02 六月 2023 11:59:03 +0800
Subject: [PATCH] 2023年06月02日11:58:43
---
app/src/main/res/drawable/checked.xml | 5
app/src/main/java/com/example/photovoltaic/base/CustomBaseFragment.java | 7
app/src/main/res/drawable/show.png | 0
app/src/main/res/drawable/house_list_line_parent_bg.xml | 5
app/src/main/res/drawable/selectedme.png | 0
app/src/main/res/navigation/nav_graph.xml | 28
app/src/main/java/com/example/photovoltaic/ui/StartActivity.java | 24
app/src/main/res/layout/fragment_me_line.xml | 61 +
gradlew.bat | 89 +
app/src/main/res/layout/frgment_house_list_line.xml | 75 +
app/src/main/java/com/example/photovoltaic/base/BaseActivity.java | 99 +
app/src/main/res/drawable/down.png | 0
app/src/main/res/layout/activity_home_login.xml | 260 ++++
app/src/main/res/drawable/message.png | 0
app/src/main/res/drawable/unselected.png | 0
app/build.gradle | 46
app/src/main/res/drawable/unselectedpowerstation.png | 0
app/src/main/res/values-w1240dp/dimens.xml | 3
app/src/main/res/values/dimens.xml | 162 ++
app/src/main/res/layout/fragment_me.xml | 55
gradlew | 185 +++
app/src/main/java/com/example/photovoltaic/ui/home/MeFragment.java | 32
app/src/main/res/values/strings.xml | 53
app/src/main/res/layout/activity_start.xml | 22
app/src/main/res/drawable/hide.png | 0
app/src/main/res/drawable/state_ffb300.xml | 7
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml | 5
app/src/main/res/mipmap-xhdpi/ic_launcher.webp | 0
app/src/main/java/com/example/photovoltaic/enums/ShowErrorMode.java | 9
app/src/main/java/com/example/photovoltaic/HDLApp.java | 47
app/src/main/res/drawable/state_b9b9b9.xml | 7
app/src/test/java/com/example/photovoltaic/ExampleUnitTest.java | 17
app/src/main/res/mipmap-hdpi/ic_launcher.webp | 0
app/src/main/java/com/example/photovoltaic/ui/Login/HomeLoginActivity.java | 230 ++++
app/src/main/res/values-w600dp/dimens.xml | 3
app/src/main/res/mipmap-mdpi/ic_launcher.webp | 0
app/proguard-rules.pro | 21
app/src/main/res/drawable/set.png | 0
app/src/main/res/drawable/add.png | 0
app/src/main/res/values/styles.xml | 7
app/src/main/res/drawable/selectedpowerstation.png | 0
app/src/main/res/values/themes.xml | 30
gradle/wrapper/gradle-wrapper.jar | 0
app/src/main/java/com/example/photovoltaic/ui/home/HouseListFragment.java | 113 ++
app/src/main/res/drawable/ic_launcher_background.xml | 170 +++
app/src/main/res/drawable/yesandnoselected.xml | 5
app/src/main/res/drawable/asregards.png | 0
app/src/main/res/layout/toolbar_top_view_44.xml | 61 +
gradle/wrapper/gradle-wrapper.properties | 6
app/src/main/res/layout/activity_my_power_station.xml | 63 +
app/src/main/res/values-land/dimens.xml | 3
app/src/main/res/drawable/unselectedme.png | 0
app/src/main/res/drawable/yesandnocheck.xml | 5
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp | 0
app/src/main/res/values/colors.xml | 34
app/src/main/res/drawable/more.png | 0
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp | 0
app/src/main/java/com/example/photovoltaic/ui/bean/HouseInfoBean.java | 17
app/src/main/res/values-night/themes.xml | 21
app/src/main/res/layout/toolbar_top_view_52.xml | 62 +
build.gradle | 9
app/src/main/res/drawable/selected.png | 0
app/src/main/java/com/example/photovoltaic/other/HdlLogLogic.java | 31
app/src/main/java/com/example/photovoltaic/ui/adapter/HouseInfoAdapter.java | 67 +
app/src/main/res/drawable/state_06b92a.xml | 7
app/src/main/java/com/example/photovoltaic/base/CustomBaseActivity.java | 9
app/src/main/java/com/example/photovoltaic/listener/BaseView.java | 10
app/src/main/res/drawable-v24/ic_launcher_foreground.xml | 30
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp | 0
app/src/main/java/com/example/photovoltaic/utils/AppManagerUtils.java | 162 ++
app/.gitignore | 1
app/src/androidTest/java/com/example/photovoltaic/ExampleInstrumentedTest.java | 26
app/src/main/res/drawable/clear.png | 0
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp | 0
settings.gradle | 16
app/src/main/java/com/example/photovoltaic/base/BaseFragment.java | 278 ++++
app/src/main/res/values/attrs.xml | 6
app/src/main/java/com/example/photovoltaic/ui/home/MyPowerStationActivity.java | 80 +
app/src/main/AndroidManifest.xml | 37
app/src/main/res/drawable/state_e34343.xml | 7
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp | 0
app/src/main/res/layout/home_bottom_line.xml | 34
app/src/main/res/drawable/unchecked_btn.xml | 5
app/src/main/res/drawable/region.png | 0
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml | 5
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp | 0
gradle.properties | 21
app/src/main/res/layout/fragment_house_list.xml | 135 ++
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp | 0
app/src/main/java/com/example/photovoltaic/other/HdlThreadLogic.java | 120 ++
local.properties | 10
app/src/main/java/com/example/photovoltaic/utils/FlashLightUtils.java | 83 +
app/src/main/res/drawable/next.png | 0
93 files changed, 3,343 insertions(+), 0 deletions(-)
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..620abc7
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,46 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "com.example.photovoltaic"
+ minSdk 23
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ buildFeatures {
+ viewBinding true
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.3.0'
+ implementation 'com.google.android.material:material:1.4.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ implementation 'androidx.navigation:navigation-fragment:2.3.5'
+ implementation 'androidx.navigation:navigation-ui:2.3.5'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ implementation 'org.greenrobot:eventbus:3.0.0'
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/example/photovoltaic/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/photovoltaic/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..dc9aa79
--- /dev/null
+++ b/app/src/androidTest/java/com/example/photovoltaic/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.photovoltaic;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.example.photovoltaic", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..c67f994
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.example.photovoltaic" >
+
+ <application
+ android:name=".HDLApp"
+ android:allowBackup="true"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.PhotovoltaicDebug" >
+ <activity
+ android:name=".ui.home.MyPowerStationActivity"
+ android:exported="false" />
+ <activity
+ android:name=".ui.Login.HomeLoginActivity"
+ android:exported="false" />
+ <activity
+ android:name=".ui.StartActivity"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <meta-data
+ android:name="design_height_in_dp"
+ android:value="812" />
+ <meta-data
+ android:name="design_width_in_dp"
+ android:value="375" />
+ </application>
+
+</manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/example/photovoltaic/HDLApp.java b/app/src/main/java/com/example/photovoltaic/HDLApp.java
new file mode 100644
index 0000000..c54aedb
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/HDLApp.java
@@ -0,0 +1,47 @@
+package com.example.photovoltaic;
+
+import android.app.Application;
+
+import java.util.HashMap;
+import java.util.Objects;
+
+public class HDLApp extends Application {
+ //澹版槑涓�涓綋鍓嶅簲鐢ㄧ殑瀹炰緥
+ private static HDLApp mHDLApp;
+ //澹版槑涓�涓叕鍏辩殑淇℃伅鏄犲皠,鍙綋浣滃叏灞�鍙橀噺浣跨敤;
+ public HashMap<String, String> mInfoMap = new HashMap<>();
+
+ //鍒╃敤鍗曚緥妯″紡鑾峰彇褰撳墠搴旂敤鐨勫敮涓�瀹炰緥
+ public static HDLApp getInstance() {
+ return mHDLApp;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mHDLApp = this;
+ }
+
+ public void setInfoMap(String key, String value) {
+ mInfoMap.put(key, value);
+ }
+
+ public String getValue(String key) {
+ if (mInfoMap.containsKey(key)) {
+ return mInfoMap.get(key);
+ }
+ return "";
+ }
+
+ public String getKey(String value) {
+ if (mInfoMap.containsValue(value)) {
+ for (String key : mInfoMap.keySet()) {
+ if (Objects.equals(mInfoMap.get(key), value)) {
+ return key;
+ }
+ }
+ }
+ return "";
+ }
+
+}
diff --git a/app/src/main/java/com/example/photovoltaic/base/BaseActivity.java b/app/src/main/java/com/example/photovoltaic/base/BaseActivity.java
new file mode 100644
index 0000000..1b6615e
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/base/BaseActivity.java
@@ -0,0 +1,99 @@
+package com.example.photovoltaic.base;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.example.photovoltaic.listener.BaseView;
+import com.example.photovoltaic.utils.AppManagerUtils;
+
+import org.greenrobot.eventbus.EventBus;
+
+
+public abstract class BaseActivity extends AppCompatActivity implements BaseView {
+
+ protected Activity _mActivity;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ _mActivity = this;
+ Object content = getContentView();
+ //娣诲姞Activity鍒板爢鏍�
+ AppManagerUtils.getAppManager().addActivity(this);
+ if (content instanceof Integer) {
+ setContentView((int) content);
+ } else if (content instanceof View) {
+ setContentView((View) content);
+ } else {
+ throw new RuntimeException("getContentView() should be a @LayoutRes or a View");
+ }
+ onBindView(savedInstanceState);
+
+ }
+
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+
+ }
+
+ /**
+ * 鏄剧ずView
+ *
+ * @param view
+ */
+ public void setViewVisible(View view) {
+ if (view.getVisibility() != View.VISIBLE) {
+ view.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * 闅愯棌View
+ *
+ * @param view
+ */
+ protected void setViewGone(View view) {
+ if (view.getVisibility() != View.GONE) {
+ view.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 绠�鍗曠殑璺宠浆Activity
+ *
+ * @param clazz
+ */
+ protected void startActivity(Class<?> clazz) {
+ Intent intent = new Intent(this, clazz);
+ startActivity(intent);
+
+ }
+
+ /**
+ * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� dp 鐨勫崟浣� 杞垚涓� px(鍍忕礌)
+ */
+ public int dip2px(float dpValue) {
+ final float scale = getResources().getDisplayMetrics().density;
+ return (int) (dpValue * scale + 0.5f);
+ }
+
+ /**
+ * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� px(鍍忕礌) 鐨勫崟浣� 杞垚涓� dp
+ */
+ public int px2dip(float pxValue) {
+ final float scale = getResources().getDisplayMetrics().density;
+ return (int) (pxValue / scale + 0.5f);
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/photovoltaic/base/BaseFragment.java b/app/src/main/java/com/example/photovoltaic/base/BaseFragment.java
new file mode 100644
index 0000000..ac6a787
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/base/BaseFragment.java
@@ -0,0 +1,278 @@
+package com.example.photovoltaic.base;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.Lifecycle;
+
+import com.example.photovoltaic.listener.BaseView;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.Locale;
+
+public abstract class BaseFragment extends Fragment implements BaseView {
+
+ private boolean isFirst = true;
+ protected FragmentActivity _mActivity;
+ protected View mContainerView;
+// private LoadingDialog loadingDialog;
+// private LoadingDialog loadingGetDataDialog;
+// private DeviceLoadingDialog deviceLoadingDialog;
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+ _mActivity = getActivity();
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view;
+ if (getContentView() instanceof Integer) {
+ view = inflater.inflate((int) getContentView(), container, false);
+ } else if (getContentView() instanceof View) {
+ view = (View) getContentView();
+ FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ view.setLayoutParams(layoutParams);
+ } else {
+ view = null;
+ }
+ mContainerView = view;
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ view.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ dispatchVisible();
+
+ }
+ }, 200L);
+ }
+
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ dispatchVisible();
+ }
+
+ protected void dispatchVisible() {
+ if (null != getParentFragment() && !getParentFragment().isResumed() && getParentFragment().isRemoving()) {
+ return;
+
+ }
+ if (getLifecycle().getCurrentState() == Lifecycle.State.STARTED && isFirst) {
+ if (getView() != null) {
+ onLazyInitView(getArguments());
+ isFirst = false;
+ }
+ }
+
+ }
+
+ protected void onLazyInitView(Bundle savedInstanceState) {
+ onBindView(savedInstanceState);
+// registerEventBus();
+ }
+
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ _mActivity = null;
+ isFirst = true;
+// unregisterEventBus();
+ }
+
+
+ protected void unregisterEventBus() {
+ if (EventBus.getDefault().isRegistered(this)) {
+ EventBus.getDefault().unregister(this);
+ }
+ }
+
+ protected void registerEventBus() {
+ if (!EventBus.getDefault().isRegistered(this)) {
+ EventBus.getDefault().register(this);
+ }
+ }
+
+// @Subscribe(threadMode = ThreadMode.MAIN)
+// public void onEventMessage(BaseEvent event) {
+//
+// }
+
+ /**
+ * 鏄剧ずView
+ *
+ * @param view
+ */
+ public void setViewVisible(View view) {
+ if (view.getVisibility() != View.VISIBLE && _mActivity != null) {
+ view.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * 闅愯棌View
+ *
+ * @param view
+ */
+ protected void setViewGone(View view) {
+ if (view.getVisibility() != View.GONE && _mActivity != null) {
+ view.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 绠�鍗曠殑璺宠浆Activity
+ *
+ * @param clazz
+ */
+ protected void startActivity(Class<?> clazz) {
+ if (_mActivity != null) {
+ Intent intent = new Intent(_mActivity, clazz);
+ startActivity(intent);
+ }
+ }
+
+ /* *//**
+ * 鑾峰彇LoadingDialog
+ *
+ * @return
+ *//*
+ protected LoadingDialog getLoadingDialog() {
+ if (loadingDialog == null && _mActivity != null) {
+ loadingDialog = new LoadingDialog(_mActivity, R.style.loading_dialog);
+ }
+ return loadingDialog;
+ }
+
+ public LoadingDialog getLoadingGetDataDialog() {
+ if (loadingGetDataDialog == null && _mActivity != null) {
+ loadingGetDataDialog = new LoadingDialog(_mActivity, R.style.loading_dialog);
+ }
+ return loadingGetDataDialog;
+ }
+
+
+ *//**
+ * 鑾峰彇DeviceLoadingDialog
+ *
+ * @return
+ *//*
+ protected DeviceLoadingDialog getDeviceLoadingDialog() {
+ if (deviceLoadingDialog == null && _mActivity != null) {
+ deviceLoadingDialog = new DeviceLoadingDialog(_mActivity, R.style.loading_dialog);
+ }
+ return deviceLoadingDialog;
+ }
+
+ *//**
+ * 寮�濮婰oading
+ *//*
+ public void showLoading() {
+ getLoadingDialog().start();
+ }
+
+ *//**
+ * 寮�濮婰oading
+ *//*
+ public void showDeviceLoading() {
+ getDeviceLoadingDialog().start();
+ }
+
+
+ *//**
+ * 寮�濮婰oading
+ *//*
+ protected void showLoading(String mes) {
+ getLoadingDialog().start();
+ getLoadingDialog().setText(mes);
+ }
+
+
+ *//**
+ * 寮�濮婰oading
+ *//*
+ protected void showGetDataLoading(String mes) {
+ getLoadingGetDataDialog().startTouchNotGone();
+ getLoadingGetDataDialog().setText(mes);
+ }
+
+
+ *//**
+ * 寮�濮婰oading
+ *//*
+ protected void showDeviceLoading(String mes) {
+ getDeviceLoadingDialog().start();
+ getDeviceLoadingDialog().setText(mes);
+ }
+
+ *//**
+ * 鍋滄闅愯棌Loading
+ *//*
+ protected void hideLoading() {
+ if (loadingDialog != null && loadingDialog.isShowing()) {
+ loadingDialog.stop();
+ }
+ }
+
+ *//**
+ * 鍋滄闅愯棌Loading
+ *//*
+ protected void hideGetDataLoading() {
+ if (loadingGetDataDialog != null && loadingGetDataDialog.isShowing()) {
+ loadingGetDataDialog.stop();
+ }
+ }
+
+ */
+
+ /**
+ * 鍋滄闅愯棌Loading
+ *//*
+ protected void hideDeviceLoading() {
+ if (deviceLoadingDialog != null && deviceLoadingDialog.isShowing()) {
+ deviceLoadingDialog.stop();
+ }
+ }*/
+
+ //鐢ㄤ簬popwindow鏄剧ず闅愯棌鏃跺�欒儗鏅殑棰滆壊鏇存崲
+ protected void backgroundAlpha(float bgAlpha) {
+ if (_mActivity != null) {
+ WindowManager.LayoutParams lp = _mActivity.getWindow().getAttributes();
+ _mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+ lp.alpha = bgAlpha; //0.0-1.0
+ _mActivity.getWindow().setAttributes(lp);
+ }
+ }
+
+ public static boolean isZh(Context context) {
+ Locale locale = context.getResources().getConfiguration().locale;
+ String language = locale.getLanguage();
+ if (language.endsWith("zh"))
+ return true;
+ else
+ return false;
+ }
+}
diff --git a/app/src/main/java/com/example/photovoltaic/base/CustomBaseActivity.java b/app/src/main/java/com/example/photovoltaic/base/CustomBaseActivity.java
new file mode 100644
index 0000000..a1770ba
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/base/CustomBaseActivity.java
@@ -0,0 +1,9 @@
+package com.example.photovoltaic.base;
+
+
+/**
+ * 瀹炵幇涓�ц嚜瀹氫箟鏂规硶
+ */
+public abstract class CustomBaseActivity extends BaseActivity {
+
+}
diff --git a/app/src/main/java/com/example/photovoltaic/base/CustomBaseFragment.java b/app/src/main/java/com/example/photovoltaic/base/CustomBaseFragment.java
new file mode 100644
index 0000000..2d1564b
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/base/CustomBaseFragment.java
@@ -0,0 +1,7 @@
+package com.example.photovoltaic.base;
+
+/**
+ * 瀹炵幇涓�ц嚜瀹氫箟鏂规硶
+ */
+public abstract class CustomBaseFragment extends BaseFragment {
+}
diff --git a/app/src/main/java/com/example/photovoltaic/enums/ShowErrorMode.java b/app/src/main/java/com/example/photovoltaic/enums/ShowErrorMode.java
new file mode 100644
index 0000000..9d1a82d
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/enums/ShowErrorMode.java
@@ -0,0 +1,9 @@
+package com.example.photovoltaic.enums;
+
+/**
+ * 鏄剧ず閿欒妯″紡
+ */
+public enum ShowErrorMode {
+ NO,//涓嶆樉绀洪敊璇�
+ YES,//鏄剧ず閿欒
+}
diff --git a/app/src/main/java/com/example/photovoltaic/listener/BaseView.java b/app/src/main/java/com/example/photovoltaic/listener/BaseView.java
new file mode 100644
index 0000000..69d66f0
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/listener/BaseView.java
@@ -0,0 +1,10 @@
+package com.example.photovoltaic.listener;
+
+import android.os.Bundle;
+
+public interface BaseView {
+
+ Object getContentView();
+
+ void onBindView(Bundle savedInstanceState);
+}
diff --git a/app/src/main/java/com/example/photovoltaic/other/HdlLogLogic.java b/app/src/main/java/com/example/photovoltaic/other/HdlLogLogic.java
new file mode 100644
index 0000000..f52e69d
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/other/HdlLogLogic.java
@@ -0,0 +1,31 @@
+package com.example.photovoltaic.other;
+
+import android.nfc.Tag;
+import android.util.Log;
+
+/**
+ * 鏃ュ織閫昏緫
+ */
+public class HdlLogLogic {
+
+ private static volatile HdlLogLogic sHdlLogLogic;
+
+ public static synchronized HdlLogLogic getInstance() {
+ if (sHdlLogLogic == null) {
+ synchronized (HdlLogLogic.class) {
+ if (sHdlLogLogic == null) {
+ sHdlLogLogic = new HdlLogLogic();
+ }
+ }
+ }
+ return sHdlLogLogic;
+ }
+
+ public static void print(String tag, String mgs) {
+ Log.d(tag, mgs);
+ }
+
+
+
+
+}
diff --git a/app/src/main/java/com/example/photovoltaic/other/HdlThreadLogic.java b/app/src/main/java/com/example/photovoltaic/other/HdlThreadLogic.java
new file mode 100644
index 0000000..1791853
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/other/HdlThreadLogic.java
@@ -0,0 +1,120 @@
+package com.example.photovoltaic.other;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.widget.Toast;
+
+import com.example.photovoltaic.HDLApp;
+import com.example.photovoltaic.enums.ShowErrorMode;
+
+/**
+ * 绾跨▼閫昏緫
+ */
+public class HdlThreadLogic {
+ private static final Handler handler = new Handler(Looper.getMainLooper());
+
+ /**
+ * 鍒囨崲鍥炰富绾跨▼
+ *
+ * @param run 鍥炶皟
+ */
+ public static void runMainThread(Runnable run) {
+ try {
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ run.run();
+ } else {
+ handler.post(run);
+ }
+ } catch (Exception e) {
+ exception(e, ShowErrorMode.YES);
+ }
+ }
+
+ /**
+ * 鍒囨崲鍥炰富绾跨▼
+ *
+ * @param run 鍥炶皟
+ * @param context 涓婁笅鏂�
+ * @param showErrorMode 鏄惁鏄剧ず閿欒
+ */
+ public static void runMainThread(Runnable run, Context context, ShowErrorMode showErrorMode) {
+ try {
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ run.run();
+ } else {
+ handler.post(run);
+ }
+ } catch (Exception e) {
+ exception(e, showErrorMode);
+ }
+ }
+
+ /**
+ * 瀛愮嚎绋�
+ *
+ * @param run 鍥炶皟
+ */
+ public static void runThread(Runnable run) {
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ run.run();
+ } catch (Exception e) {
+ exception(e, ShowErrorMode.NO);
+ }
+ }
+ }).start();
+
+ }
+
+ /**
+ * 瀛愮嚎绋�
+ *
+ * @param run 鍥炶皟
+ * @param context 涓婁笅鏂�
+ * @param showErrorMode 鏄惁鏄剧ず閿欒
+ */
+ public static void runThread(Runnable run, Context context, ShowErrorMode showErrorMode) {
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ run.run();
+ } catch (Exception e) {
+ exception(e, showErrorMode);
+ }
+ }
+ }).start();
+
+ }
+
+
+ private static void exception(Exception e, ShowErrorMode showErrorMode) {
+ if (showErrorMode == ShowErrorMode.NO) {
+ return;
+ }
+
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+// Dialog alertDialog = new AlertDialog.Builder(HDLApp.getInstance().getApplicationContext()).
+// setTitle("鎶辨瓑绋嬪簭鍑虹幇閿欒浜�,鐐瑰嚮\"纭\"鑾峰彇鏇村璇︾粏淇℃伅.").
+// setMessage(e.getMessage()).
+// create();
+// alertDialog.show();
+ //鎻愮ず
+// AlertDialog alertDialog=new AlertDialog(HDLApp.getInstance().getApplicationContext(), androidx.fragment.R.style.TextAppearance_Compat_Notification);
+// alertDialog.setTitle("鎶辨瓑绋嬪簭鍑虹幇閿欒浜�");
+// alertDialog.show();
+ //Toast.makeText(HDLApp.getInstance().getApplicationContext(), "鎶辨瓑绋嬪簭鍑虹幇閿欒浜�", Toast.LENGTH_SHORT).show();
+
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/photovoltaic/ui/Login/HomeLoginActivity.java b/app/src/main/java/com/example/photovoltaic/ui/Login/HomeLoginActivity.java
new file mode 100644
index 0000000..3f80612
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/Login/HomeLoginActivity.java
@@ -0,0 +1,230 @@
+package com.example.photovoltaic.ui.Login;
+
+
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
+import android.text.style.ForegroundColorSpan;
+import android.util.Log;
+import android.view.View;
+import android.widget.TextView;
+
+
+import androidx.appcompat.content.res.AppCompatResources;
+
+import com.example.photovoltaic.R;
+import com.example.photovoltaic.base.CustomBaseActivity;
+import com.example.photovoltaic.databinding.ActivityHomeLoginBinding;
+import com.example.photovoltaic.other.HdlThreadLogic;
+import com.example.photovoltaic.ui.home.MyPowerStationActivity;
+
+
+public class HomeLoginActivity extends CustomBaseActivity {
+
+ private ActivityHomeLoginBinding viewBinding;
+
+ @Override
+ public Object getContentView() {
+ viewBinding = ActivityHomeLoginBinding.inflate(getLayoutInflater());
+ return viewBinding.getRoot();
+ }
+
+ @Override
+ public void onBindView(Bundle savedInstanceState) {
+ //鍒濆鍖�
+ initView();
+ //鍒濆鍖栫晫闈㈢洃鍚櫒
+ initEvent();
+
+
+ }
+
+ private void initView() {
+ setStringDifferentColors(viewBinding.homeLoginPrivacyTv);
+ }
+
+ private void initEvent() {
+
+ viewBinding.homeLoginAccountEt.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ Log.d("HomeLoginActivity2", String.format("CharSequence=%s,start=%s,before=%s,count=%s", s, start, before, count));
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.length() > 0) {
+ if (viewBinding.homeLoginClearContentsIv.getVisibility() == View.GONE) {
+ viewBinding.homeLoginClearContentsIv.setVisibility(View.VISIBLE);
+ }
+ } else {
+ if (viewBinding.homeLoginClearContentsIv.getVisibility() == View.VISIBLE) {
+ viewBinding.homeLoginClearContentsIv.setVisibility(View.GONE);
+ }
+ }
+ isLoginTextViewEnabled();
+
+ }
+ });
+ viewBinding.homeLoginClearContentsIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ viewBinding.homeLoginAccountEt.setText("");
+ }
+ });
+
+ viewBinding.homeLoginPasswordEt.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ isLoginTextViewEnabled();
+ }
+ });
+ viewBinding.homeLoginHideIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (v.isSelected()) {
+ v.setSelected(false);
+ viewBinding.homeLoginHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide));
+ viewBinding.homeLoginPasswordEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
+ } else {
+ v.setSelected(true);
+ viewBinding.homeLoginHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show));
+ viewBinding.homeLoginPasswordEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+
+
+ }
+ if (!TextUtils.isEmpty(viewBinding.homeLoginPasswordEt.getText())) {
+ viewBinding.homeLoginPasswordEt.setSelection(viewBinding.homeLoginPasswordEt.getText().length());
+ }
+ }
+ });
+
+
+ viewBinding.homeLoginCheckIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ v.setSelected(!v.isSelected());
+ }
+ });
+ viewBinding.homeLoginPrivacyCheckIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ v.setSelected(!v.isSelected());
+ }
+ });
+ //鐧诲綍
+ viewBinding.homeLoginTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ boolean isLogin = isLocalCheckAccountAndPassword();
+ if (!isLogin) {
+ return;
+ }
+// boolean isSelected = viewBinding.homeLoginPrivacyCheckIv.isSelected();
+// if(!isSelected){
+// //闅愮鍗忚鎻愮ず
+// return;
+// }
+ restoreButtonStyleToInitializeState();
+
+ startActivity(MyPowerStationActivity.class);
+
+
+ }
+ });
+ //浣撻獙鐢电珯
+ viewBinding.homeLoginExperienceTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(MyPowerStationActivity.class);
+ }
+ });
+
+ }
+
+ /**
+ * 鏍¢獙鐧诲綍鎸夐挳鏄惁鍚敤
+ */
+ private void isLoginTextViewEnabled() {
+ String account = viewBinding.homeLoginAccountEt.getText().toString().replace(" ", "");
+ String password = viewBinding.homeLoginPasswordEt.getText().toString().replace(" ", "");
+ boolean isEnabled = account.length() > 0 && password.length() > 0;
+ viewBinding.homeLoginTv.setEnabled(isEnabled);
+ }
+
+ /**
+ * 鏈湴鏍¢獙杈撳叆璐﹀彿鎴栬�呭瘑鐮佹槸鍚︽纭�
+ * 姝g‘杩斿洖<true>true</true>
+ * 涓�鑸柟娉�
+ */
+ private boolean isLocalCheckAccountAndPassword() {
+ String account = viewBinding.homeLoginAccountEt.getText().toString().replace(" ", "");
+ String password = viewBinding.homeLoginPasswordEt.getText().toString().replace(" ", "");
+ if (TextUtils.isEmpty(account)) {
+ viewBinding.homeLoginLine1V.setBackgroundColor(getColor(R.color.text_D34545));
+ viewBinding.homeLoginAccountTextErrorTv.setText(R.string.home_login_error_璐﹀彿涓嶈兘涓虹┖);
+ return false;
+ }
+ if (TextUtils.isEmpty(password)) {
+ viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_D34545));
+ viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_瀵嗙爜涓嶈兘涓虹┖);
+ return false;
+ }
+
+
+ if (password.length() < 6 || password.length() > 16) {
+ viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_D34545));
+ viewBinding.homeLoginPasswordTextErrorTv.setText(R.string.home_login_error_鏈�灏�6_16涓瓧绗�);
+ return false;
+ }
+ return true;
+
+ }
+
+ /**
+ * 鎭㈠缁勪欢鏍峰紡鍒板垵濮嬪寲鐘舵��
+ */
+ private void restoreButtonStyleToInitializeState() {
+ viewBinding.homeLoginLine1V.setBackgroundColor(getColor(R.color.text_E1E1E1));
+ viewBinding.homeLoginAccountTextErrorTv.setText("");
+ viewBinding.homeLoginLine2V.setBackgroundColor(getColor(R.color.text_E1E1E1));
+ viewBinding.homeLoginPasswordTextErrorTv.setText("");
+ }
+
+ /**
+ * 璁剧疆涓�涓插瓧绗﹀绉嶉鑹�
+ *
+ * @param view 褰撳墠缁勪欢
+ */
+ private void setStringDifferentColors(TextView view) {
+ String s = view.getText().toString();
+ SpannableStringBuilder spannable = new SpannableStringBuilder(s);
+ //璁剧疆鏂囧瓧鐨勫墠鏅壊
+ spannable.setSpan(new ForegroundColorSpan(getColor(R.color.text_245EC3)), 2, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+ spannable.setSpan(new ForegroundColorSpan(getColor(R.color.text_245EC3)), 9, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+ view.setText(spannable);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/photovoltaic/ui/StartActivity.java b/app/src/main/java/com/example/photovoltaic/ui/StartActivity.java
new file mode 100644
index 0000000..85a6978
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/StartActivity.java
@@ -0,0 +1,24 @@
+package com.example.photovoltaic.ui;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.example.photovoltaic.R;
+import com.example.photovoltaic.ui.Login.HomeLoginActivity;
+
+public class StartActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_start);
+ Intent intent = new Intent();
+ intent.setClass(this, HomeLoginActivity.class);
+ startActivity(intent);
+ finish();
+
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/photovoltaic/ui/adapter/HouseInfoAdapter.java b/app/src/main/java/com/example/photovoltaic/ui/adapter/HouseInfoAdapter.java
new file mode 100644
index 0000000..499b209
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/adapter/HouseInfoAdapter.java
@@ -0,0 +1,67 @@
+package com.example.photovoltaic.ui.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.photovoltaic.R;
+import com.example.photovoltaic.ui.bean.HouseInfoBean;
+
+import java.util.List;
+
+public class HouseInfoAdapter extends RecyclerView.Adapter<HouseInfoAdapter.MyViewHolder> {
+
+ private List<HouseInfoBean> mList;
+
+ public HouseInfoAdapter(List<HouseInfoBean> list) {
+ this.mList = list;
+ }
+
+ @NonNull
+ @Override
+ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View contentItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.frgment_house_list_line, parent, false);
+ return new MyViewHolder(contentItem);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
+ HouseInfoBean houseInfoBean = this.mList.get(position);
+ holder.homeNameTv.setText(houseInfoBean.getName());
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return this.mList == null ? 0 : this.mList.size();
+ }
+
+
+ public void setList(List<HouseInfoBean> list) {
+ this.mList = list;
+ }
+
+
+ static class MyViewHolder extends RecyclerView.ViewHolder {
+
+ public ImageView homeIconIv;//浣忓畢鍥剧墖
+ public TextView homeNameTv;//浣忓畢鍚嶇О
+ public TextView capacityTv;//瑁呮満瀹归噺
+ public TextView powerTv;//鍙戠數鍔熺巼
+ public TextView stateTv;//鐢电珯鐘舵��(杩炴帴涓�,杩愯,绂荤嚎,鏁呴殰);
+
+ public MyViewHolder(@NonNull View itemView) {
+ super(itemView);
+ homeIconIv = itemView.findViewById(R.id.fragment_house_list_line_left_iv);
+ homeNameTv = itemView.findViewById(R.id.fragment_house_list_line_name_tv);
+ capacityTv = itemView.findViewById(R.id.fragment_house_list_line_capacity_tv);
+ powerTv = itemView.findViewById(R.id.fragment_house_list_line_power_tv);
+ stateTv = itemView.findViewById(R.id.fragment_house_list_line_state_tv);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/photovoltaic/ui/bean/HouseInfoBean.java b/app/src/main/java/com/example/photovoltaic/ui/bean/HouseInfoBean.java
new file mode 100644
index 0000000..454be2c
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/bean/HouseInfoBean.java
@@ -0,0 +1,17 @@
+package com.example.photovoltaic.ui.bean;
+
+import java.io.Serializable;
+
+public class HouseInfoBean implements Serializable {
+
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/app/src/main/java/com/example/photovoltaic/ui/home/HouseListFragment.java b/app/src/main/java/com/example/photovoltaic/ui/home/HouseListFragment.java
new file mode 100644
index 0000000..ed55005
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/home/HouseListFragment.java
@@ -0,0 +1,113 @@
+package com.example.photovoltaic.ui.home;
+
+import android.content.Context;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraManager;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+
+import com.example.photovoltaic.R;
+import com.example.photovoltaic.base.CustomBaseFragment;
+import com.example.photovoltaic.databinding.FragmentHouseListBinding;
+import com.example.photovoltaic.ui.adapter.HouseInfoAdapter;
+import com.example.photovoltaic.ui.bean.HouseInfoBean;
+import com.example.photovoltaic.utils.FlashLightUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HouseListFragment extends CustomBaseFragment {
+ private FragmentHouseListBinding viewBinding;
+ private HouseInfoAdapter houseInfoAdapter;
+ private FlashLightUtils flashLightUtils;
+ private CameraManager manager;
+
+ private List<HouseInfoBean> houseInfoBeanList = null;
+
+ @Override
+ public Object getContentView() {
+ viewBinding = FragmentHouseListBinding.inflate(getLayoutInflater());
+ return viewBinding.getRoot();
+ }
+
+ @Override
+ public void onBindView(Bundle savedInstanceState) {
+ flashLightUtils = new FlashLightUtils(_mActivity);
+ manager = (CameraManager) _mActivity.getSystemService(Context.CAMERA_SERVICE);
+
+ initData();
+ //鍒濆鍖�
+ initView();
+ //鍒濆鍖栫晫闈㈢洃鍚櫒
+ initEvent();
+
+
+ }
+
+
+ private void initEvent() {
+
+
+ viewBinding.toolbarTopFragmentHouseListRl.topMoreIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+// try {
+// manager.setTorchMode("0",true);
+// } catch (CameraAccessException e) {
+// e.printStackTrace();
+// }
+// flashLightUtils.open();
+ }
+ });
+ //璁剧疆涓嬫媺绠ご棰滆壊
+ viewBinding.fragmentHouseSrl.setColorSchemeResources(R.color.text_FF245EC3);
+ viewBinding.fragmentHouseSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+// flashLightUtils.cloes();
+// try {
+// manager.setTorchMode("0",false);
+// } catch (CameraAccessException e) {
+// e.printStackTrace();
+// }
+// viewBinding.fragmentHouseSrl.setRefreshing(false);
+ Log.d("HouseListFragment", "涓嬫媺鍒锋柊");
+ }
+ });
+ }
+
+ private void initView() {
+ viewBinding.toolbarTopFragmentHouseListRl.topTitleTv.setText(R.string.my_power_station_鎴戠殑鐢电珯);
+ viewBinding.toolbarTopFragmentHouseListRl.topMoreIv.setVisibility(View.VISIBLE);
+ viewBinding.toolbarTopFragmentHouseListRl.topMoreIv.setImageResource(R.drawable.add);
+
+ LinearLayoutManager linearLayout = new LinearLayoutManager(_mActivity);
+ houseInfoAdapter = new HouseInfoAdapter(this.houseInfoBeanList);
+ viewBinding.fragmentHouseSrlListRc.setLayoutManager(linearLayout);
+ viewBinding.fragmentHouseSrlListRc.setAdapter(houseInfoAdapter);
+
+
+ }
+
+ private void initData() {
+ this.houseInfoBeanList = new ArrayList<>();
+ for (int i = 0; i < 11; i++) {
+ HouseInfoBean houseInfoBean = new HouseInfoBean();
+ houseInfoBean.setName("鐢电珯" + i);
+ this.houseInfoBeanList.add(houseInfoBean);
+ }
+
+
+ }
+
+ private void openCamera() {
+
+
+ }
+
+
+}
diff --git a/app/src/main/java/com/example/photovoltaic/ui/home/MeFragment.java b/app/src/main/java/com/example/photovoltaic/ui/home/MeFragment.java
new file mode 100644
index 0000000..902249b
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/home/MeFragment.java
@@ -0,0 +1,32 @@
+package com.example.photovoltaic.ui.home;
+
+import android.os.Bundle;
+import android.view.View;
+
+import com.example.photovoltaic.R;
+import com.example.photovoltaic.base.CustomBaseFragment;
+import com.example.photovoltaic.databinding.FragmentMeBinding;
+
+public class MeFragment extends CustomBaseFragment {
+ private FragmentMeBinding viewBinding;
+
+ @Override
+ public Object getContentView() {
+ viewBinding = FragmentMeBinding.inflate(getLayoutInflater());
+ return viewBinding.getRoot();
+ }
+
+ @Override
+ public void onBindView(Bundle savedInstanceState) {
+ viewBinding.toolbarTopFragmentMeRl.topTitleTv.setText(R.string.my_power_station_鎴戠殑);
+ viewBinding.toolbarTopFragmentMeRl.topMoreIv.setVisibility(View.VISIBLE);
+ viewBinding.toolbarTopFragmentMeRl.topMoreIv.setImageResource(R.drawable.message);
+
+ viewBinding.fragmentMeLineSetIl.fragmentMeLineLeftIconIv.setImageResource(R.drawable.set);
+ viewBinding.fragmentMeLineSetIl.fragmentMeLineTitleIv.setText(R.string.me_璁剧疆);
+
+ viewBinding.fragmentMeLineAsregardsIl.fragmentMeLineLeftIconIv.setImageResource(R.drawable.asregards);
+ viewBinding.fragmentMeLineAsregardsIl.fragmentMeLineTitleIv.setText(R.string.me_鍏充簬);
+
+ }
+}
diff --git a/app/src/main/java/com/example/photovoltaic/ui/home/MyPowerStationActivity.java b/app/src/main/java/com/example/photovoltaic/ui/home/MyPowerStationActivity.java
new file mode 100644
index 0000000..8e12c54
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/ui/home/MyPowerStationActivity.java
@@ -0,0 +1,80 @@
+package com.example.photovoltaic.ui.home;
+
+import androidx.appcompat.content.res.AppCompatResources;
+
+import android.os.Bundle;
+import android.view.View;
+
+import com.example.photovoltaic.R;
+import com.example.photovoltaic.base.CustomBaseActivity;
+import com.example.photovoltaic.databinding.ActivityMyPowerStationBinding;
+
+
+public class MyPowerStationActivity extends CustomBaseActivity {
+
+ private ActivityMyPowerStationBinding viewBinding;
+ private int currentFragmentIndex = 0;
+
+
+ @Override
+ public Object getContentView() {
+ viewBinding = ActivityMyPowerStationBinding.inflate(getLayoutInflater());
+ return viewBinding.getRoot();
+ }
+
+ @Override
+ public void onBindView(Bundle savedInstanceState) {
+ //鍒濆鍖�
+ initView();
+ //鍒濆鍖栫晫闈㈢洃鍚櫒
+ initEvent();
+ }
+
+ private void initEvent() {
+ viewBinding.myPowerStationBottomIl1.clickTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ currentFragmentIndex = 0;
+ bottomViewChangeOfStyle();
+ }
+ });
+ viewBinding.myPowerStationBottomIl2.clickTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ currentFragmentIndex = 1;
+ bottomViewChangeOfStyle();
+ }
+ });
+
+ }
+
+
+ private void initView() {
+ viewBinding.myPowerStationBottomIl1.titleTv.setText(R.string.my_power_station_鐢电珯);
+ viewBinding.myPowerStationBottomIl2.titleTv.setText(R.string.my_power_station_鎴戠殑);
+ this.bottomViewChangeOfStyle();
+
+ }
+
+ private void bottomViewChangeOfStyle() {
+ if (this.currentFragmentIndex == 0) {
+
+ viewBinding.myPowerStationFcv1.setVisibility(View.VISIBLE);
+ viewBinding.myPowerStationFcv2.setVisibility(View.GONE);
+ viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedpowerstation));
+ viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_90000000));
+ viewBinding.myPowerStationBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedme));
+ viewBinding.myPowerStationBottomIl2.titleTv.setTextColor(getColor(R.color.text_65000000));
+ } else {
+ viewBinding.myPowerStationFcv1.setVisibility(View.GONE);
+ viewBinding.myPowerStationFcv2.setVisibility(View.VISIBLE);
+ viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.unselectedpowerstation));
+ viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_65000000));
+ viewBinding.myPowerStationBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.selectedme));
+ viewBinding.myPowerStationBottomIl2.titleTv.setTextColor(getColor(R.color.text_90000000));
+
+
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/photovoltaic/utils/AppManagerUtils.java b/app/src/main/java/com/example/photovoltaic/utils/AppManagerUtils.java
new file mode 100644
index 0000000..79b3f8e
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/utils/AppManagerUtils.java
@@ -0,0 +1,162 @@
+package com.example.photovoltaic.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+
+import java.util.Iterator;
+import java.util.Stack;
+
+/**
+ * Author: Zoro
+ * Date: 2019/6/9
+ * Description: This is AppManagerUtils
+ */
+
+public class AppManagerUtils {
+
+ private static AppManagerUtils appManagerUtils;
+
+ private AppManagerUtils() {
+ }
+
+ public static AppManagerUtils getAppManager() {
+ if (null == appManagerUtils) {
+ synchronized (AppManagerUtils.class) {
+ if (null == appManagerUtils) {
+ appManagerUtils = new AppManagerUtils();
+ }
+ }
+ }
+ return appManagerUtils;
+ }
+
+ /**
+ * 鑾峰彇AppVersion
+ *
+ * @param context
+ * @return
+ */
+ public static String getAppVersion(Context context) {
+ String version = "";
+ try {
+ String packageName = context.getPackageName();
+ PackageManager packageManager = context.getPackageManager();
+ PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
+ version = packageInfo.versionName;
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return version;
+ }
+
+ /**
+ * 榛樿鐨凙ctivity鍫嗘爤
+ */
+ private Stack<Activity> activityStack;
+
+ /**
+ * 娣诲姞Activity鍒板爢鏍�
+ */
+ public void addActivity(Activity activity) {
+ if (activityStack == null) {
+ activityStack = new Stack<>();
+ }
+ activityStack.add(activity);
+ }
+
+
+ /**
+ * 绉婚櫎Activity
+ */
+ public void removeActivity(Activity activity) {
+ if (activity != null) {
+ activityStack.remove(activity);
+ }
+ }
+
+ /**
+ * 缁撴潫鎸囧畾绫诲悕鐨凙ctivity
+ */
+ public void finishActivity(Class<?>... args) {
+ Iterator<Activity> iterator = activityStack.listIterator();
+ while (iterator.hasNext()) {
+ Activity activity = iterator.next();
+ for (Class<?> cls : args) {
+ if (activity.getClass().equals(cls)) {
+ activity.finish();
+ iterator.remove();
+ }
+ }
+ }
+ }
+
+ /**
+ * 鎸囧畾涓�涓被鍚�,浠庢寚瀹氱被鍚嶅紑濮嬬Щ闄ゅ悗闈㈡墍鏈堿ctivity
+ * @param className Activity-绫诲悕(activity.getClass().getName())
+ * @param removeClass 鏄惁绉婚櫎鏈韩(true-绉婚櫎)
+ */
+ public void finishActivity(String className,boolean removeClass) {
+ Iterator<Activity> iterator = activityStack.listIterator();
+ while (iterator.hasNext()) {
+ Activity activity = iterator.next();
+ if (activity.getClass().getName().equals(className)) {
+ if (removeClass) {
+ activity.finish();
+ iterator.remove();
+ }
+ break;
+ } else {
+ activity.finish();
+ iterator.remove();
+ }
+ }
+
+// int count= activityStack.size() - 1;
+// for (Iterator<Activity> it = activityStack.listIterator(count); it.hasNext(); ) {
+// Activity activity = it.next();
+// System.out.println("绉婚櫎缁撴潫" + activity.getClass().getName());
+// if (activity.getClass().getName().equals(className)) {
+// if (removeClass) {
+// activity.finish();
+// it.remove();
+// }
+// break;
+// } else {
+// activity.finish();
+// it.remove();
+// }
+// }
+ }
+
+ /**
+ * 缁撴潫鎵�鏈堿ctivity
+ */
+ public void finishAllActivity() {
+ for (int i = 0, size = activityStack.size(); i < size; i++) {
+ if (null != activityStack.get(i)) {
+ Activity activity = activityStack.get(i);
+ if (!activity.isFinishing()) {
+ activity.finish();
+ }
+ }
+ }
+ activityStack.clear();
+ }
+
+// /**
+// * 鍒ゆ柇褰撳墠搴旂敤鏄惁鏄痙ebug鐘舵��
+// */
+// public static boolean isApkInDebug(Context context) {
+// try {
+// ApplicationInfo info = context.getApplicationInfo();
+// return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
+// } catch (Exception e) {
+// return false;
+// }
+// }
+
+
+
+}
diff --git a/app/src/main/java/com/example/photovoltaic/utils/FlashLightUtils.java b/app/src/main/java/com/example/photovoltaic/utils/FlashLightUtils.java
new file mode 100644
index 0000000..bfb5d1b
--- /dev/null
+++ b/app/src/main/java/com/example/photovoltaic/utils/FlashLightUtils.java
@@ -0,0 +1,83 @@
+package com.example.photovoltaic.utils;
+
+
+import android.content.Context;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageManager;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraManager;
+import android.os.Build;
+import android.hardware.Camera;
+import android.text.method.Touch;
+
+import java.util.Optional;
+
+public class FlashLightUtils {
+ private CameraManager manager;
+ private Camera mCamera = null;
+ private Context context;
+ private boolean status = false; // 璁板綍鎵嬫満鐘舵��
+
+ public FlashLightUtils(Context context) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
+
+ }
+ this.context = context;
+ }
+
+ // 鎵撳紑鎵嬬數绛�
+ public void open() {
+ if (status) { //濡傛灉鏄墦寮�鐘舵��,涓嶉渶瑕佹墦寮�
+ return;
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ try {
+ manager.setTorchMode("0", true);
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+ } else {
+ PackageManager packageManager = context.getPackageManager();
+ FeatureInfo[] features = packageManager.getSystemAvailableFeatures();
+ for (FeatureInfo featureInfo : features) {
+ // 鍒ゆ柇璁惧鏄惁鏀寔闂厜鐏�
+ if (packageManager.FEATURE_CAMERA_FLASH.equals(featureInfo.name)) {
+ if (null == mCamera) {
+ mCamera = Camera.open();
+ }
+ Camera.Parameters parameters = mCamera.getParameters();
+ parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
+ mCamera.setParameters(parameters);
+ mCamera.startPreview();
+
+ }
+ }
+ }
+ status = true; // 璁板綍鎵嬬數绛掔姸鎬佷负鎵撳紑
+ }
+
+ // 鍏抽棴鎵嬬數绛�
+ public void cloes() {
+ if (!status) // 濡傛灉鏄凡缁忓叧闂殑鐘舵�� 涓嶉渶瑕佹墦寮�
+ {
+ return;
+ }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ try {
+ manager.setTorchMode("0", false);
+
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+ } else {
+ if (mCamera != null) {
+ mCamera.stopPreview();
+ mCamera.release();
+ mCamera = null;
+ }
+ }
+ status = false; // 璁板綍鎵嬬數绛掍负鍏抽棴
+ }
+}
+
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="85.84757"
+ android:endY="92.4963"
+ android:startX="42.9492"
+ android:startY="49.59793"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/add.png b/app/src/main/res/drawable/add.png
new file mode 100644
index 0000000..2ab7acb
--- /dev/null
+++ b/app/src/main/res/drawable/add.png
Binary files differ
diff --git a/app/src/main/res/drawable/asregards.png b/app/src/main/res/drawable/asregards.png
new file mode 100644
index 0000000..48d4707
--- /dev/null
+++ b/app/src/main/res/drawable/asregards.png
Binary files differ
diff --git a/app/src/main/res/drawable/checked.xml b/app/src/main/res/drawable/checked.xml
new file mode 100644
index 0000000..ed7a228
--- /dev/null
+++ b/app/src/main/res/drawable/checked.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+<solid android:color="@color/text_245EC3"/>
+ <corners android:radius="@dimen/dp_4"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/clear.png b/app/src/main/res/drawable/clear.png
new file mode 100644
index 0000000..44d80ae
--- /dev/null
+++ b/app/src/main/res/drawable/clear.png
Binary files differ
diff --git a/app/src/main/res/drawable/down.png b/app/src/main/res/drawable/down.png
new file mode 100644
index 0000000..58d829e
--- /dev/null
+++ b/app/src/main/res/drawable/down.png
Binary files differ
diff --git a/app/src/main/res/drawable/hide.png b/app/src/main/res/drawable/hide.png
new file mode 100644
index 0000000..4b80a96
--- /dev/null
+++ b/app/src/main/res/drawable/hide.png
Binary files differ
diff --git a/app/src/main/res/drawable/house_list_line_parent_bg.xml b/app/src/main/res/drawable/house_list_line_parent_bg.xml
new file mode 100644
index 0000000..7a5233d
--- /dev/null
+++ b/app/src/main/res/drawable/house_list_line_parent_bg.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/text_FFFFFFFF" />
+ <corners android:radius="@dimen/dp_4" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+</vector>
diff --git a/app/src/main/res/drawable/message.png b/app/src/main/res/drawable/message.png
new file mode 100644
index 0000000..29bc5c8
--- /dev/null
+++ b/app/src/main/res/drawable/message.png
Binary files differ
diff --git a/app/src/main/res/drawable/more.png b/app/src/main/res/drawable/more.png
new file mode 100644
index 0000000..cf9f54a
--- /dev/null
+++ b/app/src/main/res/drawable/more.png
Binary files differ
diff --git a/app/src/main/res/drawable/next.png b/app/src/main/res/drawable/next.png
new file mode 100644
index 0000000..4fe9d94
--- /dev/null
+++ b/app/src/main/res/drawable/next.png
Binary files differ
diff --git a/app/src/main/res/drawable/region.png b/app/src/main/res/drawable/region.png
new file mode 100644
index 0000000..5f7d4a5
--- /dev/null
+++ b/app/src/main/res/drawable/region.png
Binary files differ
diff --git a/app/src/main/res/drawable/selected.png b/app/src/main/res/drawable/selected.png
new file mode 100644
index 0000000..6fb74a3
--- /dev/null
+++ b/app/src/main/res/drawable/selected.png
Binary files differ
diff --git a/app/src/main/res/drawable/selectedme.png b/app/src/main/res/drawable/selectedme.png
new file mode 100644
index 0000000..100658f
--- /dev/null
+++ b/app/src/main/res/drawable/selectedme.png
Binary files differ
diff --git a/app/src/main/res/drawable/selectedpowerstation.png b/app/src/main/res/drawable/selectedpowerstation.png
new file mode 100644
index 0000000..7cd39ef
--- /dev/null
+++ b/app/src/main/res/drawable/selectedpowerstation.png
Binary files differ
diff --git a/app/src/main/res/drawable/set.png b/app/src/main/res/drawable/set.png
new file mode 100644
index 0000000..c3b1967
--- /dev/null
+++ b/app/src/main/res/drawable/set.png
Binary files differ
diff --git a/app/src/main/res/drawable/show.png b/app/src/main/res/drawable/show.png
new file mode 100644
index 0000000..4fd8712
--- /dev/null
+++ b/app/src/main/res/drawable/show.png
Binary files differ
diff --git a/app/src/main/res/drawable/state_06b92a.xml b/app/src/main/res/drawable/state_06b92a.xml
new file mode 100644
index 0000000..d4505e4
--- /dev/null
+++ b/app/src/main/res/drawable/state_06b92a.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/text_06B92A" />
+ <corners
+ android:bottomLeftRadius="@dimen/dp_4"
+ android:topRightRadius="@dimen/dp_4" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/state_b9b9b9.xml b/app/src/main/res/drawable/state_b9b9b9.xml
new file mode 100644
index 0000000..f5f4a8b
--- /dev/null
+++ b/app/src/main/res/drawable/state_b9b9b9.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/text_B9B9B9" />
+ <corners
+ android:bottomLeftRadius="@dimen/dp_4"
+ android:topRightRadius="@dimen/dp_4" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/state_e34343.xml b/app/src/main/res/drawable/state_e34343.xml
new file mode 100644
index 0000000..ec2b056
--- /dev/null
+++ b/app/src/main/res/drawable/state_e34343.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/text_E34343" />
+ <corners
+ android:bottomLeftRadius="@dimen/dp_4"
+ android:topRightRadius="@dimen/dp_4" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/state_ffb300.xml b/app/src/main/res/drawable/state_ffb300.xml
new file mode 100644
index 0000000..2f120fb
--- /dev/null
+++ b/app/src/main/res/drawable/state_ffb300.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/text_FFB300" />
+ <corners
+ android:bottomLeftRadius="@dimen/dp_4"
+ android:topRightRadius="@dimen/dp_4" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/unchecked_btn.xml b/app/src/main/res/drawable/unchecked_btn.xml
new file mode 100644
index 0000000..d2e2190
--- /dev/null
+++ b/app/src/main/res/drawable/unchecked_btn.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+<solid android:color="@color/text_94B6E7"/>
+ <corners android:radius="@dimen/dp_4"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/unselected.png b/app/src/main/res/drawable/unselected.png
new file mode 100644
index 0000000..0f40c2e
--- /dev/null
+++ b/app/src/main/res/drawable/unselected.png
Binary files differ
diff --git a/app/src/main/res/drawable/unselectedme.png b/app/src/main/res/drawable/unselectedme.png
new file mode 100644
index 0000000..0069cc6
--- /dev/null
+++ b/app/src/main/res/drawable/unselectedme.png
Binary files differ
diff --git a/app/src/main/res/drawable/unselectedpowerstation.png b/app/src/main/res/drawable/unselectedpowerstation.png
new file mode 100644
index 0000000..80b0652
--- /dev/null
+++ b/app/src/main/res/drawable/unselectedpowerstation.png
Binary files differ
diff --git a/app/src/main/res/drawable/yesandnocheck.xml b/app/src/main/res/drawable/yesandnocheck.xml
new file mode 100644
index 0000000..dc37013
--- /dev/null
+++ b/app/src/main/res/drawable/yesandnocheck.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/checked" android:state_enabled="true" />
+ <item android:drawable="@drawable/unchecked_btn" android:state_enabled="false" />
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/yesandnoselected.xml b/app/src/main/res/drawable/yesandnoselected.xml
new file mode 100644
index 0000000..6e8b0b3
--- /dev/null
+++ b/app/src/main/res/drawable/yesandnoselected.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/selected" android:state_selected="true" />
+ <item android:drawable="@drawable/unselected" android:state_selected="false" />
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home_login.xml b/app/src/main/res/layout/activity_home_login.xml
new file mode 100644
index 0000000..bb74213
--- /dev/null
+++ b/app/src/main/res/layout/activity_home_login.xml
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".ui.Login.HomeLoginActivity">
+
+ <ImageView
+ android:id="@+id/home_login_server_iv"
+ android:layout_width="@dimen/dp_13"
+ android:layout_height="@dimen/dp_13"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginTop="@dimen/dp_63"
+ android:src="@drawable/region"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/home_login_language_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginStart="@dimen/dp_6"
+ android:text="@string/home_login_涓枃"
+ android:textColor="@color/text_FF000000"
+ android:textSize="@dimen/text_14"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_server_iv"
+ app:layout_constraintStart_toEndOf="@+id/home_login_server_iv"
+ app:layout_constraintTop_toTopOf="@+id/home_login_server_iv" />
+
+ <ImageView
+ android:id="@+id/home_login_down_iv"
+ android:layout_width="@dimen/dp_11"
+ android:layout_height="@dimen/dp_7"
+ android:layout_marginStart="@dimen/dp_1"
+ android:src="@drawable/down"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_language_tv"
+ app:layout_constraintStart_toEndOf="@+id/home_login_language_tv"
+ app:layout_constraintTop_toTopOf="@+id/home_login_language_tv" />
+
+ <ImageView
+ android:id="@+id/home_login_more_iv"
+ android:layout_width="@dimen/dp_20"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_20"
+ android:src="@drawable/more"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_language_tv"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/home_login_language_tv" />
+
+ <TextView
+ android:id="@+id/home_login_title_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_39"
+ android:layout_marginTop="@dimen/dp_40"
+ android:text="@string/home_login_HDL鍏変紡鍌ㄨ兘"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_28"
+ android:textStyle="bold"
+ app:layout_constraintStart_toStartOf="@+id/home_login_server_iv"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_language_tv" />
+
+ <ImageView
+ android:id="@+id/home_login_check_iv"
+ android:layout_width="@dimen/dp_20"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginTop="@dimen/dp_56"
+ android:background="@drawable/yesandnoselected"
+ app:layout_constraintStart_toStartOf="@+id/home_login_server_iv"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_title_tv" />
+
+ <TextView
+ android:id="@+id/home_login_install_user_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginStart="@dimen/dp_16"
+ android:text="@string/home_login_鎴戞槸瀹夎鍟�"
+ android:textColor="@color/text_FF000000"
+ android:textSize="@dimen/text_14"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_check_iv"
+ app:layout_constraintStart_toEndOf="@+id/home_login_check_iv"
+ app:layout_constraintTop_toTopOf="@+id/home_login_check_iv" />
+ <!--璐﹀彿杈撳叆妗�-->
+ <EditText
+ android:id="@+id/home_login_account_et"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_45"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginTop="@dimen/dp_44"
+ android:layout_marginEnd="@dimen/dp_60"
+ android:background="@null"
+ android:gravity="center_vertical"
+ android:hint="@string/home_login_璇疯緭鍏ユ墜鏈哄彿_閭鍙�"
+ android:inputType="text"
+ android:lines="1"
+ android:maxLines="1"
+ android:textColor="@color/text_FF000000"
+ android:textColorHint="@color/text_25000000"
+ android:textSize="@dimen/text_16"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_install_user_tv" />
+
+ <ImageView
+ android:id="@+id/home_login_clear_contents_iv"
+ android:layout_width="@dimen/dp_20"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_32"
+ android:src="@drawable/clear"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_account_et"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/home_login_account_et" />
+
+ <View
+ android:id="@+id/home_login_line1_v"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_20"
+ android:background="@color/text_E1E1E1"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_account_et" />
+
+ <TextView
+ android:id="@+id/home_login_account_text_error_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="2dp"
+ android:textColor="@color/text_D34545"
+ android:textSize="12sp"
+ app:layout_constraintStart_toStartOf="@+id/home_login_line1_v"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_line1_v" />
+
+ <!--瀵嗙爜杈撳叆妗�-->
+
+ <EditText
+
+ android:id="@+id/home_login_password_et"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_45"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginTop="32dp"
+ android:layout_marginEnd="@dimen/dp_60"
+ android:background="@null"
+ android:gravity="center_vertical"
+ android:hint="@string/home_login_璇疯緭鍏ュ瘑鐮�"
+ android:inputType="textPassword"
+ android:lines="1"
+ android:maxLines="1"
+ android:textColor="@color/text_FF000000"
+ android:textColorHint="@color/text_25000000"
+ android:textSize="@dimen/text_16"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_line1_v" />
+
+ <ImageView
+ android:id="@+id/home_login_hide_iv"
+ android:layout_width="@dimen/dp_20"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_32"
+ android:src="@drawable/hide"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_password_et"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/home_login_password_et" />
+
+ <View
+ android:id="@+id/home_login_line2_v"
+ android:layout_width="0dp"
+ android:layout_height="1dp"
+ android:background="@color/text_E1E1E1"
+ app:layout_constraintEnd_toEndOf="@+id/home_login_line1_v"
+ app:layout_constraintStart_toStartOf="@+id/home_login_line1_v"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_password_et" />
+
+ <TextView
+ android:id="@+id/home_login_password_text_error_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="2dp"
+ android:textColor="@color/text_D34545"
+ android:textSize="12sp"
+ app:layout_constraintStart_toStartOf="@+id/home_login_line2_v"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_line2_v" />
+
+ <TextView
+ android:id="@+id/home_login_register_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginTop="@dimen/dp_24"
+ android:text="@string/home_login_娉ㄥ唽"
+ android:textColor="@color/text_245EC3"
+ android:textSize="@dimen/text_14"
+ app:layout_constraintStart_toStartOf="@+id/home_login_line2_v"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_line2_v" />
+
+ <TextView
+ android:id="@+id/home_login_forget_password_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginTop="@dimen/dp_24"
+ android:text="@string/home_login_蹇樿瀵嗙爜"
+ android:textColor="@color/text_245EC3"
+ android:textSize="@dimen/text_14"
+ app:layout_constraintEnd_toEndOf="@+id/home_login_line2_v"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_line2_v" />
+ <!--鐧诲綍-->
+ <TextView
+ android:id="@+id/home_login_tv"
+ android:layout_width="0dp"
+ android:layout_height="52dp"
+ android:layout_marginTop="@dimen/dp_45"
+ android:background="@drawable/yesandnocheck"
+ android:gravity="center"
+ android:text="@string/home_login_鐧诲綍"
+ android:textColor="@color/text_FFFFFFFF"
+ android:textSize="18sp"
+ android:enabled="false"
+ app:layout_constraintEnd_toEndOf="@+id/home_login_line2_v"
+ app:layout_constraintStart_toStartOf="@+id/home_login_line2_v"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_forget_password_tv" />
+
+ <TextView
+ android:id="@+id/home_login_experience_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_25"
+ android:layout_marginTop="@dimen/text_28"
+ android:text="@string/home_login_浣撻獙鐢电珯"
+ android:textColor="@color/text_245EC3"
+ android:textSize="18sp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_tv" />
+
+ <ImageView
+ android:id="@+id/home_login_privacy_check_iv"
+ android:layout_width="@dimen/dp_20"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginStart="@dimen/dp_42"
+ android:layout_marginTop="@dimen/dp_208"
+ android:background="@drawable/yesandnoselected"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/home_login_tv" />
+
+ <TextView
+ android:id="@+id/home_login_privacy_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:layout_marginStart="@dimen/dp_16"
+ android:text="@string/home_login_鍚屾剰_鏈嶅姟鍗忚"
+ android:textColor="@color/text_FF000000"
+ android:textSize="@dimen/text_14"
+ app:layout_constraintBottom_toBottomOf="@+id/home_login_privacy_check_iv"
+ app:layout_constraintStart_toEndOf="@+id/home_login_privacy_check_iv"
+ app:layout_constraintTop_toTopOf="@+id/home_login_privacy_check_iv" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_my_power_station.xml b/app/src/main/res/layout/activity_my_power_station.xml
new file mode 100644
index 0000000..8e9da08
--- /dev/null
+++ b/app/src/main/res/layout/activity_my_power_station.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/text_F9FAFB"
+ tools:context=".ui.home.MyPowerStationActivity">
+
+ <!--鎴戠殑鐢电珯-Fragment-->
+ <androidx.fragment.app.FragmentContainerView
+
+ android:id="@+id/my_power_station_fcv1"
+ android:name="com.example.photovoltaic.ui.home.HouseListFragment"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:visibility="gone"
+ app:layout_constraintBottom_toTopOf="@+id/my_power_station_bottom_ll"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+ <!--鎴戠殑-Fragment-->
+ <androidx.fragment.app.FragmentContainerView
+ android:id="@+id/my_power_station_fcv2"
+ android:name="com.example.photovoltaic.ui.home.MeFragment"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:visibility="gone"
+ app:layout_constraintBottom_toTopOf="@+id/my_power_station_bottom_ll"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <LinearLayout
+ android:id="@+id/my_power_station_bottom_ll"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_49"
+ android:background="@color/text_FFFFFFFF"
+ android:gravity="center"
+ android:orientation="horizontal"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent">
+ <!--鐢电珯-鏍囩-->
+ <include
+ android:id="@+id/my_power_station_bottom_il1"
+ layout="@layout/home_bottom_line" />
+
+
+ <View
+ android:layout_width="@dimen/dp_1"
+ android:layout_height="@dimen/dp_17"
+ android:background="@color/text_CBCDD1" />
+ <!--鎴戠殑-鏍囩-->
+ <include
+ android:id="@+id/my_power_station_bottom_il2"
+ layout="@layout/home_bottom_line" />
+
+
+ </LinearLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_start.xml b/app/src/main/res/layout/activity_start.xml
new file mode 100644
index 0000000..0c6519e
--- /dev/null
+++ b/app/src/main/res/layout/activity_start.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".ui.StartActivity">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="娆㈣繋鎵撳紑鏅烘収鑳芥簮APP"
+ android:textColor="@color/text_245EC3"
+ android:textSize="@dimen/text_28"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.496"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.093" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_house_list.xml b/app/src/main/res/layout/fragment_house_list.xml
new file mode 100644
index 0000000..f9e2a3e
--- /dev/null
+++ b/app/src/main/res/layout/fragment_house_list.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include
+ android:id="@+id/toolbar_top_fragment_house_list_rl"
+ layout="@layout/toolbar_top_view_52" />
+
+ <RelativeLayout
+ android:id="@+id/fragment_house_list_head_rl"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_64"
+ android:background="@color/text_F9FAFB"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/toolbar_top_fragment_house_list_rl">
+
+ <LinearLayout
+ android:id="@+id/fragment_house_list_content_ll"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_20"
+ android:orientation="horizontal">
+
+ <RelativeLayout
+ android:id="@+id/fragment_house_list_content_title1_rl"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="3"
+ android:gravity="center"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/fragment_house_list_content_title1_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:text="@string/my_power_station_鍙戠數鍔熺巼"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_14" />
+
+ <ImageView
+ android:id="@+id/fragment_house_list_content_title1_iv"
+ android:layout_width="@dimen/dp_10"
+ android:layout_height="@dimen/dp_6"
+ android:layout_alignTop="@+id/fragment_house_list_content_title1_tv"
+ android:layout_alignBottom="@+id/fragment_house_list_content_title1_tv"
+ android:layout_marginStart="@dimen/dp_7"
+ android:layout_toEndOf="@+id/fragment_house_list_content_title1_tv"
+ android:src="@drawable/down" />
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:id="@+id/fragment_house_list_content_title2_rl"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="3"
+ android:gravity="center"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/fragment_house_list_content_title2_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:text="@string/my_power_station_浠婃棩鍙戠數"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_14" />
+
+ <ImageView
+ android:id="@+id/my_power_station_content_title2_iv"
+ android:layout_width="@dimen/dp_10"
+ android:layout_height="@dimen/dp_6"
+ android:layout_alignTop="@+id/fragment_house_list_content_title2_tv"
+ android:layout_alignBottom="@+id/fragment_house_list_content_title2_tv"
+ android:layout_marginStart="@dimen/dp_7"
+ android:layout_toEndOf="@+id/fragment_house_list_content_title2_tv"
+ android:src="@drawable/down" />
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:id="@+id/fragment_house_list_content_title3_rl"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="3"
+ android:gravity="center"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/fragment_house_list_content_title3_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_20"
+ android:text="@string/my_power_station_鍒涘缓鏃堕棿"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_14" />
+
+ <ImageView
+ android:id="@+id/fragment_house_list_content_title3_iv"
+ android:layout_width="@dimen/dp_10"
+ android:layout_height="@dimen/dp_6"
+ android:layout_alignTop="@+id/fragment_house_list_content_title3_tv"
+ android:layout_alignBottom="@+id/fragment_house_list_content_title3_tv"
+ android:layout_marginStart="@dimen/dp_7"
+ android:layout_toEndOf="@+id/fragment_house_list_content_title3_tv"
+ android:src="@drawable/down" />
+ </RelativeLayout>
+
+ </LinearLayout>
+
+ </RelativeLayout>
+
+ <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+ android:id="@+id/fragment_house_srl"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/fragment_house_list_head_rl">
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/fragment_house_srl_list_rc"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+ </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml
new file mode 100644
index 0000000..dc1b9b7
--- /dev/null
+++ b/app/src/main/res/layout/fragment_me.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+
+ <include
+ android:id="@+id/toolbar_top_fragment_me_rl"
+ layout="@layout/toolbar_top_view_52" />
+
+ <ImageView
+ android:id="@+id/fragment_me_icon_iv"
+ android:layout_width="69dp"
+ android:layout_height="69dp"
+ android:layout_marginTop="@dimen/dp_39"
+ android:background="@color/text_D34545"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/toolbar_top_fragment_me_rl" />
+
+ <TextView
+ android:id="@+id/fragment_me_user_name_iv"
+ android:layout_width="wrap_content"
+ android:layout_height="25dp"
+ android:layout_marginTop="@dimen/dp_16"
+ android:text="寮�濮嬭璁′簡"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_18"
+ app:layout_constraintEnd_toEndOf="@+id/fragment_me_icon_iv"
+ app:layout_constraintStart_toStartOf="@+id/fragment_me_icon_iv"
+ app:layout_constraintTop_toBottomOf="@+id/fragment_me_icon_iv" />
+
+ <include
+ android:id="@+id/fragment_me_line_set_il"
+ layout="@layout/fragment_me_line"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_64"
+ android:layout_marginTop="@dimen/dp_48"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/fragment_me_user_name_iv" />
+
+ <include
+ android:id="@+id/fragment_me_line_asregards_il"
+ layout="@layout/fragment_me_line"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_64"
+ android:layout_marginTop="@dimen/dp_12"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/fragment_me_line_set_il" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_me_line.xml b/app/src/main/res/layout/fragment_me_line.xml
new file mode 100644
index 0000000..63c114a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_me_line.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_64"
+ android:background="@color/text_F9FAFB">
+
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_20"
+ android:background="@color/text_FFFFFFFF"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent">
+
+ <ImageView
+ android:id="@+id/fragment_me_line_left_icon_iv"
+ android:layout_width="@dimen/dp_24"
+ android:layout_height="@dimen/dp_24"
+ android:layout_marginStart="@dimen/dp_16"
+ android:src="@drawable/set"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/fragment_me_line_title_iv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_23"
+ android:layout_marginStart="@dimen/dp_7"
+ android:text="@string/me_璁剧疆"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/dp_16"
+ app:layout_constraintBottom_toBottomOf="@id/fragment_me_line_left_icon_iv"
+ app:layout_constraintStart_toEndOf="@+id/fragment_me_line_left_icon_iv"
+ app:layout_constraintTop_toTopOf="@id/fragment_me_line_left_icon_iv" />
+
+ <ImageView
+ android:id="@+id/fragment_me_line_right_icon_iv"
+ android:layout_width="@dimen/dp_7"
+ android:layout_height="@dimen/dp_12"
+ android:layout_marginEnd="@dimen/dp_23"
+ android:src="@drawable/next"
+ app:layout_constraintBottom_toBottomOf="@id/fragment_me_line_left_icon_iv"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="@id/fragment_me_line_left_icon_iv" />
+ <!--闅愯棌绾挎潯-->
+<!-- <View-->
+ <!-- android:id="@+id/fragment_me_line_v"-->
+ <!-- android:layout_width="0dp"-->
+ <!-- android:layout_height="1dp"-->
+ <!-- android:background="@color/text_E1E1E1"-->
+ <!-- app:layout_constraintBottom_toBottomOf="parent"-->
+ <!-- app:layout_constraintEnd_toEndOf="parent"-->
+ <!-- app:layout_constraintStart_toStartOf="parent" />-->
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/frgment_house_list_line.xml b/app/src/main/res/layout/frgment_house_list_line.xml
new file mode 100644
index 0000000..e554529
--- /dev/null
+++ b/app/src/main/res/layout/frgment_house_list_line.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="142dp"
+ android:background="@color/text_F9FAFB">
+
+ <RelativeLayout
+ android:id="@+id/fragment_house_list_line_parent_rl"
+ android:layout_width="0dp"
+ android:layout_height="130dp"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentEnd="true"
+ android:layout_marginStart="@dimen/dp_20"
+ android:layout_marginEnd="@dimen/dp_20"
+ android:background="@drawable/house_list_line_parent_bg">
+
+ <ImageView
+ android:id="@+id/fragment_house_list_line_left_iv"
+ android:layout_width="113dp"
+ android:layout_height="130dp"
+ android:background="@color/text_245EC3" />
+
+ <TextView
+ android:id="@+id/fragment_house_list_line_name_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_23"
+ android:layout_marginStart="@dimen/dp_15"
+ android:layout_marginTop="@dimen/dp_28"
+ android:layout_toEndOf="@+id/fragment_house_list_line_left_iv"
+ android:gravity="center_vertical"
+ android:text="@string/my_power_station_鐢电珯"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_16" />
+
+ <TextView
+ android:id="@+id/fragment_house_list_line_capacity_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_17"
+ android:layout_below="@+id/fragment_house_list_line_name_tv"
+ android:layout_alignStart="@+id/fragment_house_list_line_name_tv"
+ android:layout_marginTop="@dimen/dp_13"
+ android:gravity="center_vertical"
+ android:text="@string/my_power_station_瑁呮満瀹归噺"
+ android:textColor="@color/text_40000000"
+ android:textSize="@dimen/text_12" />
+
+ <TextView
+ android:id="@+id/fragment_house_list_line_power_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/dp_17"
+ android:layout_below="@+id/fragment_house_list_line_capacity_tv"
+ android:layout_alignStart="@+id/fragment_house_list_line_capacity_tv"
+ android:layout_marginTop="@dimen/dp_13"
+ android:gravity="center_vertical"
+ android:text="@string/my_power_station_鍙戠數鍔熺巼"
+ android:textColor="@color/text_40000000"
+ android:textSize="@dimen/text_12" />
+
+ <TextView
+ android:id="@+id/fragment_house_list_line_state_tv"
+ android:layout_width="@dimen/dp_48"
+ android:layout_height="@dimen/dp_33"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentEnd="true"
+ android:background="@drawable/state_ffb300"
+ android:gravity="center"
+ android:text="@string/my_power_station_杩炴帴涓�"
+ android:textColor="@color/text_FFFFFFFF"
+ android:textSize="@dimen/text_12" />
+
+
+ </RelativeLayout>
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/home_bottom_line.xml b/app/src/main/res/layout/home_bottom_line.xml
new file mode 100644
index 0000000..b1ba497
--- /dev/null
+++ b/app/src/main/res/layout/home_bottom_line.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="187dp"
+ android:layout_height="@dimen/dp_49">
+
+ <ImageView
+ android:id="@+id/icon_iv"
+ android:layout_width="@dimen/dp_22"
+ android:layout_height="@dimen/dp_22"
+ android:layout_alignParentTop="true"
+ android:layout_centerInParent="true"
+ android:layout_marginTop="@dimen/dp_8" />
+
+ <TextView
+ android:id="@+id/title_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/text_14"
+ android:layout_below="@+id/icon_iv"
+ android:layout_centerInParent="true"
+ android:layout_marginTop="@dimen/dp_2"
+ android:textColor="@color/text_90000000"
+ android:textSize="@dimen/text_10" />
+ <!--鍔犲ぇ鐐瑰嚮鐑尯-->
+ <TextView
+ android:id="@+id/click_tv"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentEnd="true"
+ android:layout_marginStart="@dimen/dp_30"
+ android:layout_marginEnd="@dimen/dp_30" />
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/toolbar_top_view_44.xml b/app/src/main/res/layout/toolbar_top_view_44.xml
new file mode 100644
index 0000000..72c0247
--- /dev/null
+++ b/app/src/main/res/layout/toolbar_top_view_44.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/top_bar_view"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_44"
+ android:orientation="horizontal">
+
+ <!--1.杩斿洖鎸夐挳 澧炲ぇ鐐瑰嚮鍖哄煙-->
+ <LinearLayout
+ android:id="@+id/top_back_btn"
+ android:layout_width="@dimen/dp_56"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:layout_width="@dimen/dp_24"
+ android:layout_height="@dimen/dp_24"
+ android:layout_gravity="center"
+ android:layout_marginLeft="@dimen/dp_16"
+ android:scaleType="centerInside" />
+ </LinearLayout>
+
+ <!--2.鏍囬鏂囨湰-->
+ <TextView
+ android:id="@+id/top_title_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:layout_marginLeft="@dimen/dp_60"
+ android:layout_marginRight="@dimen/dp_60"
+ android:fontFamily="sans-serif-medium"
+ android:gravity="center"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/text_FF000000"
+ android:textSize="@dimen/text_18" />
+
+ <!--3.鏇村鎸夐挳 榛樿闅愯棌-->
+ <LinearLayout
+ android:id="@+id/top_more_btn"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_alignParentEnd="true"
+ android:gravity="center_vertical"
+ android:orientation="horizontal"
+ android:src="@drawable/add"
+ android:visibility="gone">
+
+ <ImageView
+ android:id="@+id/top_more_iv"
+ android:layout_width="@dimen/dp_28"
+ android:layout_height="@dimen/dp_28"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
+ android:adjustViewBounds="true"
+ android:scaleType="centerInside" />
+
+ </LinearLayout>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/toolbar_top_view_52.xml b/app/src/main/res/layout/toolbar_top_view_52.xml
new file mode 100644
index 0000000..02e2249
--- /dev/null
+++ b/app/src/main/res/layout/toolbar_top_view_52.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/top_bar_view"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dp_52"
+ android:background="@color/text_245EC3"
+ android:orientation="horizontal">
+
+ <!--1.杩斿洖鎸夐挳 澧炲ぇ鐐瑰嚮鍖哄煙-->
+ <LinearLayout
+ android:id="@+id/top_back_btn"
+ android:layout_width="@dimen/dp_56"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="horizontal"
+ android:visibility="gone">
+
+ <ImageView
+ android:layout_width="@dimen/dp_24"
+ android:layout_height="@dimen/dp_24"
+ android:layout_gravity="center"
+ android:layout_marginLeft="@dimen/dp_16"
+ android:scaleType="centerInside" />
+ </LinearLayout>
+
+ <!--2.鏍囬鏂囨湰-->
+ <TextView
+ android:id="@+id/top_title_tv"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:layout_marginLeft="@dimen/dp_60"
+ android:layout_marginRight="@dimen/dp_60"
+ android:fontFamily="sans-serif-medium"
+ android:gravity="center"
+ android:maxLines="1"
+ android:text="@string/my_power_station_鎴戠殑鐢电珯"
+ android:textColor="@color/text_FFFFFFFF"
+ android:textSize="@dimen/text_18" />
+
+ <!--3.鏇村鎸夐挳 榛樿闅愯棌-->
+ <LinearLayout
+ android:id="@+id/top_more_btn"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_alignParentEnd="true"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/top_more_iv"
+ android:layout_width="@dimen/dp_28"
+ android:layout_height="@dimen/dp_28"
+ android:layout_marginStart="20dp"
+ android:layout_marginEnd="20dp"
+ android:adjustViewBounds="true"
+ android:scaleType="centerInside"
+ android:visibility="gone" />
+
+ </LinearLayout>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
--- /dev/null
+++ b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
--- /dev/null
+++ b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
--- /dev/null
+++ b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
--- /dev/null
+++ b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
new file mode 100644
index 0000000..7578e8e
--- /dev/null
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<navigation xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/nav_graph"
+ app:startDestination="@id/FirstFragment">
+
+ <fragment
+ android:id="@+id/FirstFragment"
+ android:name="com.example.photovoltaic.ui.Login.FirstFragment"
+ android:label="@string/first_fragment_label"
+ tools:layout="@layout/fragment_first" >
+
+ <action
+ android:id="@+id/action_FirstFragment_to_SecondFragment"
+ app:destination="@id/SecondFragment" />
+ </fragment>
+ <fragment
+ android:id="@+id/SecondFragment"
+ android:name="com.example.photovoltaic.ui.Login.SecondFragment"
+ android:label="@string/second_fragment_label"
+ tools:layout="@layout/fragment_second" >
+
+ <action
+ android:id="@+id/action_SecondFragment_to_FirstFragment"
+ app:destination="@id/FirstFragment" />
+ </fragment>
+</navigation>
\ No newline at end of file
diff --git a/app/src/main/res/values-land/dimens.xml b/app/src/main/res/values-land/dimens.xml
new file mode 100644
index 0000000..14991b4
--- /dev/null
+++ b/app/src/main/res/values-land/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">48dp</dimen>
+ </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..8b28a25
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,21 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.PhotovoltaicDebug" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_200</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/black</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_200</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+
+ <style name="ThemeOverlay.PhotovoltaicDebug.FullscreenContainer" parent="">
+ <item name="fullscreenBackgroundColor">@color/light_blue_900</item>
+ <item name="fullscreenTextColor">@color/light_blue_A400</item>
+ </style>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-w1240dp/dimens.xml b/app/src/main/res/values-w1240dp/dimens.xml
new file mode 100644
index 0000000..98f46b4
--- /dev/null
+++ b/app/src/main/res/values-w1240dp/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">200dp</dimen>
+ </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml
new file mode 100644
index 0000000..14991b4
--- /dev/null
+++ b/app/src/main/res/values-w600dp/dimens.xml
@@ -0,0 +1,3 @@
+<resources>
+ <dimen name="fab_margin">48dp</dimen>
+ </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..e52391d
--- /dev/null
+++ b/app/src/main/res/values/attrs.xml
@@ -0,0 +1,6 @@
+<resources>
+ <declare-styleable name="FullscreenAttrs">
+ <attr name="fullscreenBackgroundColor" format="color" />
+ <attr name="fullscreenTextColor" format="color" />
+ </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..05de233
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="purple_200">#FFBB86FC</color>
+ <color name="purple_500">#FF6200EE</color>
+ <color name="purple_700">#FF3700B3</color>
+ <color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
+ <color name="black">#FF000000</color>
+ <color name="white">#FFFFFFFF</color>
+ <color name="light_blue_600">#FF039BE5</color>
+ <color name="light_blue_900">#FF01579B</color>
+ <color name="light_blue_A200">#FF40C4FF</color>
+ <color name="light_blue_A400">#FF00B0FF</color>
+ <color name="black_overlay">#66000000</color>
+
+ <color name="text_245EC3">#245EC3</color>
+ <color name="text_25000000">#25000000</color>
+ <color name="text_40000000">#40000000</color>
+ <color name="text_65000000">#65000000</color>
+ <color name="text_90000000">#90000000</color>
+ <color name="text_FF000000">#FF000000</color>
+ <color name="text_E1E1E1">#E1E1E1</color>
+ <color name="text_94B6E7">#94B6E7</color>
+ <color name="text_FFFFFFFF">#FFFFFFFF</color>
+ <color name="text_D34545">#D34545</color>
+ <color name="text_FFB300">#FFB300</color>
+ <color name="text_B9B9B9">#B9B9B9</color>
+ <color name="text_E34343">#E34343</color>
+ <color name="text_06B92A">#06B92A</color>
+ <color name="text_F9FAFB">#F9FAFB</color>
+ <color name="text_CBCDD1">#CBCDD1</color>/
+ <color name="text_FF245EC3">#FF245EC3</color>
+
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..44f9661
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,162 @@
+<resources>
+ <dimen name="fab_margin">16dp</dimen>
+
+ <dimen name="dp_line">0.5dp</dimen>
+ <dimen name="dp_0_5">0.5dp</dimen>
+ <dimen name="dp_0">0dp</dimen>
+ <dimen name="dp_1">1dp</dimen>
+ <dimen name="dp_2">2dp</dimen>
+ <dimen name="dp_3">3dp</dimen>
+ <dimen name="dp_4">4dp</dimen>
+ <dimen name="dp_5">5dp</dimen>
+ <dimen name="dp_6">6dp</dimen>
+ <dimen name="dp_7">7dp</dimen>
+ <dimen name="dp_8">8dp</dimen>
+ <dimen name="dp_9">9dp</dimen>
+ <dimen name="dp_10">10dp</dimen>
+ <dimen name="dp_11">11dp</dimen>
+ <dimen name="dp_12">12dp</dimen>
+ <dimen name="dp_13">13dp</dimen>
+ <dimen name="dp_14">14dp</dimen>
+ <dimen name="dp_15">15dp</dimen>
+ <dimen name="dp_16">16dp</dimen>
+ <dimen name="dp_17">17dp</dimen>
+ <dimen name="dp_18">18dp</dimen>
+ <dimen name="dp_19">19dp</dimen>
+ <dimen name="dp_20">20dp</dimen>
+ <dimen name="dp_21">21dp</dimen>
+ <dimen name="dp_22">22dp</dimen>
+ <dimen name="dp_23">23dp</dimen>
+ <dimen name="dp_24">24dp</dimen>
+ <dimen name="dp_25">25dp</dimen>
+ <dimen name="dp_26">26dp</dimen>
+ <dimen name="dp_27">27dp</dimen>
+ <dimen name="dp_28">28dp</dimen>
+ <dimen name="dp_29">29dp</dimen>
+ <dimen name="dp_30">30dp</dimen>
+ <dimen name="dp_31">31dp</dimen>
+ <dimen name="dp_32">32dp</dimen>
+ <dimen name="dp_33">33dp</dimen>
+ <dimen name="dp_34">34dp</dimen>
+ <dimen name="dp_35">35dp</dimen>
+ <dimen name="dp_36">36dp</dimen>
+ <dimen name="dp_37">37dp</dimen>
+ <dimen name="dp_38">38dp</dimen>
+ <dimen name="dp_39">39dp</dimen>
+ <dimen name="dp_40">40dp</dimen>
+ <dimen name="dp_41">41dp</dimen>
+ <dimen name="dp_42">42dp</dimen>
+ <dimen name="dp_43">43dp</dimen>
+ <dimen name="dp_44">44dp</dimen>
+ <dimen name="dp_45">45dp</dimen>
+ <dimen name="dp_46">46dp</dimen>
+ <dimen name="dp_47">47dp</dimen>
+ <dimen name="dp_48">48dp</dimen>
+ <dimen name="dp_49">49dp</dimen>
+ <dimen name="dp_50">50dp</dimen>
+ <dimen name="dp_51">51dp</dimen>
+ <dimen name="dp_52">52dp</dimen>
+ <dimen name="dp_54">54dp</dimen>
+ <dimen name="dp_55">55dp</dimen>
+ <dimen name="dp_56">56dp</dimen>
+ <dimen name="dp_57">57dp</dimen>
+ <dimen name="dp_58">58dp</dimen>
+ <dimen name="dp_60">60dp</dimen>
+ <dimen name="dp_62">62dp</dimen>
+ <dimen name="dp_63">63dp</dimen>
+ <dimen name="dp_64">64dp</dimen>
+ <dimen name="dp_65">65dp</dimen>
+ <dimen name="dp_66">66dp</dimen>
+ <dimen name="dp_68">68dp</dimen>
+ <dimen name="dp_70">70dp</dimen>
+ <dimen name="dp_74">74dp</dimen>
+ <dimen name="dp_75">75dp</dimen>
+ <dimen name="dp_76">76dp</dimen>
+ <dimen name="dp_80">80dp</dimen>
+ <dimen name="dp_83">83dp</dimen>
+ <dimen name="dp_85">85dp</dimen>
+ <dimen name="dp_86">86dp</dimen>
+ <dimen name="dp_87">87dp</dimen>
+ <dimen name="dp_89">89dp</dimen>
+ <dimen name="dp_90">90dp</dimen>
+ <dimen name="dp_96">96dp</dimen>
+ <dimen name="dp_99">99dp</dimen>
+ <dimen name="dp_100">100dp</dimen>
+ <dimen name="dp_104">104dp</dimen>
+ <dimen name="dp_107">107dp</dimen>
+ <dimen name="dp_108">108dp</dimen>
+ <dimen name="dp_110">110dp</dimen>
+ <dimen name="dp_112">112dp</dimen>
+ <dimen name="dp_115">115dp</dimen>
+ <dimen name="dp_116">116dp</dimen>
+ <dimen name="dp_117">117dp</dimen>
+ <dimen name="dp_119">119dp</dimen>
+ <dimen name="dp_120">120dp</dimen>
+ <dimen name="dp_126">126dp</dimen>
+ <dimen name="dp_127">127dp</dimen>
+ <dimen name="dp_128">128dp</dimen>
+ <dimen name="dp_131">131dp</dimen>
+ <dimen name="dp_133">133dp</dimen>
+ <dimen name="dp_134">134dp</dimen>
+ <dimen name="dp_135">135dp</dimen>
+ <dimen name="dp_140">140dp</dimen>
+ <dimen name="dp_141">141dp</dimen>
+ <dimen name="dp_145">145dp</dimen>
+ <dimen name="dp_147">147dp</dimen>
+ <dimen name="dp_148">148dp</dimen>
+ <dimen name="dp_150">150dp</dimen>
+ <dimen name="dp_155">155dp</dimen>
+ <dimen name="dp_160">160dp</dimen>
+ <dimen name="dp_162">162dp</dimen>
+ <dimen name="dp_164">164dp</dimen>
+ <dimen name="dp_166">166dp</dimen>
+ <dimen name="dp_171">171dp</dimen>
+ <dimen name="dp_177">177dp</dimen>
+ <dimen name="dp_178">178dp</dimen>
+ <dimen name="dp_180">180dp</dimen>
+ <dimen name="dp_184">184dp</dimen>
+ <dimen name="dp_192">192dp</dimen>
+ <dimen name="dp_198">198dp</dimen>
+ <dimen name="dp_200">200dp</dimen>
+ <dimen name="dp_202">202dp</dimen>
+ <dimen name="dp_208">208dp</dimen>
+ <dimen name="dp_210">210dp</dimen>
+ <dimen name="dp_212">212dp</dimen>
+ <dimen name="dp_214">214dp</dimen>
+ <dimen name="dp_220">220dp</dimen>
+ <dimen name="dp_235">235dp</dimen>
+ <dimen name="dp_237">237dp</dimen>
+ <dimen name="dp_244">244dp</dimen>
+ <dimen name="dp_267">267dp</dimen>
+ <dimen name="dp_284">284dp</dimen>
+ <dimen name="dp_292">292dp</dimen>
+ <dimen name="dp_295">295dp</dimen>
+ <dimen name="dp_299">299dp</dimen>
+ <dimen name="dp_311">311dp</dimen>
+ <dimen name="dp_339">339dp</dimen>
+ <dimen name="dp_400">400dp</dimen>
+
+ <!--瀛椾綋澶у皬-->
+ <dimen name="text_10">10sp</dimen>
+ <dimen name="text_11">11sp</dimen>
+ <dimen name="text_12">12sp</dimen>
+ <dimen name="text_13">13sp</dimen>
+ <dimen name="text_14">14sp</dimen>
+ <dimen name="text_15">15sp</dimen>
+ <dimen name="text_16">16sp</dimen>
+ <dimen name="text_17">17sp</dimen>
+ <dimen name="text_18">18sp</dimen>
+ <dimen name="text_19">19sp</dimen>
+ <dimen name="text_20">20sp</dimen>
+ <dimen name="text_21">21sp</dimen>
+ <dimen name="text_22">22sp</dimen>
+ <dimen name="text_23">23sp</dimen>
+ <dimen name="text_24">24sp</dimen>
+ <dimen name="text_25">25sp</dimen>
+ <dimen name="text_26">26sp</dimen>
+ <dimen name="text_27">27sp</dimen>
+ <dimen name="text_28">28sp</dimen>
+ <dimen name="text_29">29sp</dimen>
+ <dimen name="text_30">30sp</dimen>
+
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..2bd4d75
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,53 @@
+<resources>
+ <string name="app_name">PhotovoltaicDebug</string>
+ <string name="title_activity_home_login">HomeLoginActivity</string>
+ <!-- Strings used for fragments for navigation -->
+ <string name="first_fragment_label">First Fragment</string>
+ <string name="second_fragment_label">Second Fragment</string>
+ <string name="next">Next</string>
+ <string name="previous">Previous</string>
+
+ <string name="hello_first_fragment">Hello first fragment</string>
+ <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
+
+ <!--鐧诲綍妯″潡-->
+ <string name="home_login_涓枃">涓枃锛堢畝浣擄級</string>
+ <string name="home_login_HDL鍏変紡鍌ㄨ兘">HDL鍏変紡鍌ㄨ兘</string>
+ <string name="home_login_鎴戞槸瀹夎鍟�">鎴戞槸瀹夎鍟�</string>
+ <string name="home_login_璇疯緭鍏ユ墜鏈哄彿_閭鍙�">璇疯緭鍏ユ墜鏈哄彿/閭鍙�</string>
+ <string name="home_login_璇疯緭鍏ユ墜鏈哄彿">璇疯緭鍏ユ墜鏈哄彿</string>
+ <string name="home_login_閭鍙�">閭鍙�</string>
+ <string name="home_login_璇疯緭鍏ュ瘑鐮�">璇疯緭鍏ュ瘑鐮�</string>
+ <string name="home_login_娉ㄥ唽">娉ㄥ唽</string>
+ <string name="home_login_蹇樿瀵嗙爜">蹇樿瀵嗙爜</string>
+ <string name="home_login_鐧诲綍">鐧诲綍</string>
+ <string name="home_login_浣撻獙鐢电珯">浣撻獙鐢电珯</string>
+ <string name="home_login_鍚屾剰_鏈嶅姟鍗忚">鍚屾剰銆婃湇鍔″崗璁�嬪拰銆婄敤鎴蜂俊鎭繚鎶よ瀹氥��</string>
+ <string name="home_login_error_璐﹀彿涓嶈兘涓虹┖">璐﹀彿涓嶈兘涓虹┖.</string>
+ <string name="home_login_error_瀵嗙爜涓嶈兘涓虹┖">瀵嗙爜涓嶈兘涓虹┖.</string>
+ <string name="home_login_error_璐﹀彿鎴栬�呭瘑鐮佷笉瀵�">璐﹀彿鎴栬�呭瘑鐮佷笉瀵�,璇烽噸鏂拌緭鍏�.</string>
+ <string name="home_login_error_鏈�灏�6_16涓瓧绗�">瀵嗙爜涓嶇鍚堟渶浣庡畨鍏ㄨ姹�,鏈�灏�6鈥�16涓瓧绗�.</string>
+ <string name="home_login_error_瀵嗙爜涓嶈兘灏忎簬6涓瓧绗�">瀵嗙爜涓嶈兘灏忎簬6涓瓧绗�.</string>
+ <string name="home_login_error_瀵嗙爜涓嶈兘澶т簬16涓瓧绗�">瀵嗙爜涓嶈兘澶т簬16涓瓧绗�.</string>
+
+ <!--鎴戠殑鐢电珯-->
+ <string name="my_power_station_鐢电珯">鐢电珯</string>
+ <string name="my_power_station_鎴戠殑">鎴戠殑</string>
+ <string name="my_power_station_鎴戠殑鐢电珯">鎴戠殑鐢电珯</string>
+ <string name="my_power_station_鍙戠數鍔熺巼">鍙戠數鍔熺巼</string>
+ <string name="my_power_station_浠婃棩鍙戠數">浠婃棩鍙戠數</string>
+ <string name="my_power_station_鍒涘缓鏃堕棿">鍒涘缓鏃堕棿</string>
+ <string name="my_power_station_瑁呮満瀹归噺">瑁呮満瀹归噺</string>
+ <string name="my_power_station_杩炴帴涓�">杩炴帴涓�</string>
+ <string name="my_power_station_绂荤嚎">绂荤嚎</string>
+ <string name="my_power_station_鏁呴殰">鏁呴殰</string>
+ <string name="my_power_station_杩愯">杩愯</string>
+
+
+ <!--鎴戠殑-->
+ <string name="me_鎴戠殑">鎴戠殑</string>
+ <string name="me_璁剧疆">璁剧疆</string>
+ <string name="me_鍏充簬">鍏充簬</string>
+
+
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..3eab926
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,7 @@
+<resources>
+
+ <style name="Widget.Theme.PhotovoltaicDebug.ButtonBar.Fullscreen" parent="">
+ <item name="android:background">@color/black_overlay</item>
+ <item name="android:buttonBarStyle">?android:attr/buttonBarStyle</item>
+ </style>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..0d121ed
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,30 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.PhotovoltaicDebug" parent="Theme.AppCompat.Light.NoActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_500</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/white</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_700</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+
+ <style name="Theme.PhotovoltaicDebug.NoActionBar">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
+
+ <style name="Theme.PhotovoltaicDebug.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
+
+ <style name="Theme.PhotovoltaicDebug.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
+
+ <style name="ThemeOverlay.PhotovoltaicDebug.FullscreenContainer" parent="">
+ <item name="fullscreenBackgroundColor">@color/light_blue_600</item>
+ <item name="fullscreenTextColor">@color/light_blue_A200</item>
+ </style>
+</resources>
\ No newline at end of file
diff --git a/app/src/test/java/com/example/photovoltaic/ExampleUnitTest.java b/app/src/test/java/com/example/photovoltaic/ExampleUnitTest.java
new file mode 100644
index 0000000..b714bc4
--- /dev/null
+++ b/app/src/test/java/com/example/photovoltaic/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.photovoltaic;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..905d3bd
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,9 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '7.1.3' apply false
+ id 'com.android.library' version '7.1.3' apply false
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..dab7c28
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,21 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e708b1c
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..16e585a
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri May 26 09:40:23 CST 2023
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..4f906e0
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..ac1b06f
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/local.properties b/local.properties
new file mode 100644
index 0000000..1a98706
--- /dev/null
+++ b/local.properties
@@ -0,0 +1,10 @@
+## This file is automatically generated by Android Studio.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file should *NOT* be checked into Version Control Systems,
+# as it contains information specific to your local configuration.
+#
+# Location of the SDK. This is only used by Gradle.
+# For customization when using a Version Control System, please read the
+# header note.
+sdk.dir=/Users/wenjucheng/Library/Android/sdk
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..ff1df1f
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = "PhotovoltaicDebug"
+include ':app'
--
Gitblit v1.8.0