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