Android12 (S) Setting添加新項(xiàng)

根據(jù)項(xiàng)目要求朝巫,需要在setting中添加一項(xiàng)專門管理直播設(shè)置的內(nèi)容橘券,添加步驟如下(參考displaysetting 進(jìn)行添加):

  1. 添加liveSetting到SettingsHomepageActivity
--- a/packages/apps/Settings/res/xml/top_level_settings.xml
+++ b/packages/apps/Settings/res/xml/top_level_settings.xml
@@ -54,14 +54,23 @@
android:title="@string/configure_notification_settings"
android:summary="@string/notification_dashboard_summary"/>

+<!--    <Preference-->
+<!--        android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"-->
+<!--        android:icon="@drawable/ic_settings_battery_white"-->
+<!--        android:key="top_level_battery"-->
+<!--        android:order="-110"-->
+<!--        android:title="@string/power_usage_summary_title"-->
+<!--        android:summary="@string/summary_placeholder"-->
+<!--        settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>-->
+
<Preference
-        android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
-        android:icon="@drawable/ic_settings_battery_white"
-        android:key="top_level_battery"
+        android:fragment="com.android.settings.LiveSettings"
+        android:icon="@drawable/ic_settings_display_white"
+        android:key="top_level_live"
android:order="-110"
-        android:title="@string/power_usage_summary_title"
-        android:summary="@string/summary_placeholder"
-        settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>
+        android:title="@string/live_settings"
+        android:summary="@string/live_settings"
+        settings:controller="com.android.settings.klive.TopLevelLivePreferenceController"/>

<Preference
         android:fragment="com.android.settings.deviceinfo.StorageDashboardFragment"

參考displaysetting泞莉,將電池相關(guān)的setting更改為livesetting,提供livesetting的fragment:com.android.settings.LiveSettings 号俐,controller:com.android.settings.klive.TopLevelLivePreferenceController

  1. 參考displaysetting 新建LiveSettings 岭佳、TopLevelLivePreferenceController和R.xml.live_settings
+++ b/packages/apps/Settings/src/com/android/settings/LiveSettings.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * 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
+ *
+ *      http://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.
+ */
+
+package com.android.settings;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.klive.FakeCameraSwitchPreferenceController;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
+public class LiveSettings extends DashboardFragment {
+    private static final String TAG = "LiveSettings";
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.LIVE;
+    }
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.live_settings;
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+    }
+
+    @Override
+    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+        return buildPreferenceControllers(context, getSettingsLifecycle());
+    }
+
+    @Override
+    public int getHelpResource() {
+        return R.string.help_uri_display;
+    }
+
+    private static List<AbstractPreferenceController> buildPreferenceControllers(
+            Context context, Lifecycle lifecycle) {
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
         //controller中的key"fake_camera" 必須和xml中的key保持一致不然getPreferenceKey()方法會(huì)返回空,導(dǎo)致空指針
+        controllers.add(new FakeCameraSwitchPreferenceController(context,"fake_camera"));
+        return controllers;
+    }
+
+    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider(R.xml.live_settings) {
+
+                @Override
+                public List<AbstractPreferenceController> createPreferenceControllers(
+                        Context context) {
+                    return buildPreferenceControllers(context, null);
+                }
+            };
+}
+++ b/packages/apps/Settings/src/com/android/settings/klive/TopLevelLivePreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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
+ *
+ *      http://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.
+ */
+
+package com.android.settings.klive;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+public class TopLevelLivePreferenceController extends BasePreferenceController {
+
+    public TopLevelLivePreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return  AVAILABLE;
+
+    }
+}
+++ b/packages/apps/Settings/res/xml/live_settings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     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
+
+          http://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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:key="live_settings_screen"
+    android:title="@string/live_settings"
+    settings:keywords="@string/keywords_live">
+
+    <PreferenceCategory
         //一個(gè)組的名稱
+        android:title="@string/category_name_fake_camera">
+
+        <SwitchPreference
             //PreferenceKey 很重要 加載布局時(shí)需要根據(jù)這個(gè)來(lái)加載
+            android:key="fake_camera"
+            android:title="@string/fake_camera_switch"
             //關(guān)鍵字
+            settings:keywords="@string/category_name_fake_camera"
             //forwork 設(shè)置為true代表這個(gè)功能一直可用世蔗,不會(huì)置為灰色
+            settings:forWork="true"
             //該界面具體功能邏輯實(shí)現(xiàn)
+            settings:controller="com.android.settings.klive.FakeCameraSwitchPreferenceController"/>
+
+    </PreferenceCategory>
+
+
+
+</PreferenceScreen>

此xml即為livesetting的布局文件端逼,目前只添加了虛擬攝像頭開(kāi)關(guān)這一個(gè)選項(xiàng),后續(xù)需要增加可以參考添加

  1. 虛擬攝像頭controller 添加

要實(shí)現(xiàn)虛擬攝像頭開(kāi)關(guān) 相關(guān)邏輯需要添加到controller當(dāng)中

+++ b/packages/apps/Settings/src/com/android/settings/klive/FakeCameraSwitchPreferenceController.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * 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
+ *
+ *      http://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.
+ */
+package com.android.settings.klive;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.Build;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import androidx.annotation.RequiresApi;
+import androidx.preference.Preference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+
+public class FakeCameraSwitchPreferenceController extends TogglePreferenceController implements
+        PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver{
+
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+    private Preference mPreference;
+    //此處的key必須和xml里面的key保持一致 不然會(huì)導(dǎo)致報(bào)錯(cuò) 空指針
+    public FakeCameraSwitchPreferenceController(Context context, String key) {
+        super(context, key);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        mPreference = preference;
+        super.updateState(preference);
+    }
+
+
+
+    @Override
+    public boolean isSliceable() {
+        return TextUtils.equals(getPreferenceKey(), "fake_camera");
+    }
+
+    @Override
+    public boolean isPublicSlice() {
+        return true;
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
+    @Override
+    public boolean isChecked() {
+        return Settings.Global.getInt(mContext.getContentResolver(),Settings.Global.USE_FAKE_CAMERA,1)==1;
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        final int useFakeCamera=isChecked?1:0;
+        Settings.Global.putInt(mContext.getContentResolver(),Settings.Global.USE_FAKE_CAMERA,useFakeCamera);
+        return true;
+    }
+}
  1. 添加liveSetting activity (感覺(jué)非必須污淋,但沒(méi)有測(cè)試)
diff --git a/packages/apps/Settings/AndroidManifest.xml b/packages/apps/Settings/AndroidManifest.xml
old mode 100644
new mode 100755
index 5649d2e..50ed7d7
--- a/packages/apps/Settings/AndroidManifest.xml
+++ b/packages/apps/Settings/AndroidManifest.xml
@@ -974,6 +974,24 @@
                 android:value="true" />
         </activity>
 
+        <!-- Live -->
+        <activity
+            android:name="Settings$LiveSettingsActivity"
+            android:label="@string/live_settings"
+            android:taskAffinity=""
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+                <category android:name="com.android.settings.SHORTCUT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.klive.LiveSettings" />
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
+        </activity>
+
         <activity
             android:name="Settings$DisplaySettingsActivity"
             android:label="@string/display_settings"
diff --git a/packages/apps/Settings/src/com/android/settings/Settings.java b/packages/apps/Settings/src/com/android/settings/Settings.java
old mode 100644
new mode 100755
index 00e07ed..b4a04ab
--- a/packages/apps/Settings/src/com/android/settings/Settings.java
+++ b/packages/apps/Settings/src/com/android/settings/Settings.java
@@ -103,6 +103,7 @@ public class Settings extends SettingsActivity {
     public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ }
     public static class DarkThemeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class DisplaySettingsActivity extends SettingsActivity { /* empty */ }
+    public static class LiveSettingsActivity extends SettingsActivity { /* empty */ }
     public static class NightDisplaySettingsActivity extends SettingsActivity { /* empty */ }
     public static class NightDisplaySuggestionActivity extends NightDisplaySettingsActivity { /* empty */ }
     public static class SmartAutoRotateSettingsActivity extends SettingsActivity { /* empty */ }
  1. 注冊(cè)LiveSettings到DashboardFragment
diff --git a/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java b/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java
old mode 100644
new mode 100755
index 0316fba..ac02d12
--- a/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/packages/apps/Settings/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -19,6 +19,7 @@ package com.android.settings.core.gateway;
 import com.android.settings.AllInOneTetherSettings;
 import com.android.settings.DisplaySettings;
 import com.android.settings.IccLockSettings;
+import com.android.settings.LiveSettings;
 import com.android.settings.MainClear;
 import com.android.settings.MainClearConfirm;
 import com.android.settings.Settings;
@@ -199,6 +200,7 @@ public class SettingsGateway {
             UserDictionaryList.class.getName(),
             UserDictionarySettings.class.getName(),
             DisplaySettings.class.getName(),
+            LiveSettings.class.getName(),
             MyDeviceInfoFragment.class.getName(),
             ModuleLicensesDashboard.class.getName(),
             ManageApplications.class.getName(),
@@ -331,6 +333,7 @@ public class SettingsGateway {
             Settings.NetworkDashboardActivity.class.getName(),
             Settings.ConnectedDeviceDashboardActivity.class.getName(),
             Settings.AppDashboardActivity.class.getName(),
+            Settings.LiveSettingsActivity.class.getName(),
             Settings.DisplaySettingsActivity.class.getName(),
             Settings.SoundSettingsActivity.class.getName(),
             Settings.StorageDashboardActivity.class.getName(),
diff --git a/packages/apps/Settings/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/packages/apps/Settings/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
old mode 100644
new mode 100755
index 8ca2bee..6864a68
--- a/packages/apps/Settings/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/packages/apps/Settings/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -20,6 +20,7 @@ import android.util.ArrayMap;
 
 import com.android.settings.DisplaySettings;
 import com.android.settings.LegalSettings;
+import com.android.settings.LiveSettings;
 import com.android.settings.accounts.AccountDashboardFragment;
 import com.android.settings.accounts.AccountDetailDashboardFragment;
 import com.android.settings.applications.AppDashboardFragment;
@@ -79,6 +80,8 @@ public class DashboardFragmentRegistry {
                 CategoryKey.CATEGORY_DEVICE);
         PARENT_TO_CATEGORY_KEY_MAP.put(AppDashboardFragment.class.getName(),
                 CategoryKey.CATEGORY_APPS);
+        PARENT_TO_CATEGORY_KEY_MAP.put(LiveSettings.class.getName(),
+                CategoryKey.CATEGORY_LIVE);
         PARENT_TO_CATEGORY_KEY_MAP.put(PowerUsageSummary.class.getName(),
                 CategoryKey.CATEGORY_BATTERY);
         PARENT_TO_CATEGORY_KEY_MAP.put(DisplaySettings.class.getName(),
  1. 添加livesetting相關(guān)的枚舉
diff --git a/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java b/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
old mode 100644
new mode 100755
index 0d544be..fdc6334
--- a/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
+++ b/frameworks/base/packages/SettingsLib/src/com/android/settingslib/drawer/CategoryKey.java
@@ -30,6 +30,7 @@ public final class CategoryKey {
     public static final String CATEGORY_APPS = "com.android.settings.category.ia.apps";
     public static final String CATEGORY_APPS_DEFAULT =
             "com.android.settings.category.ia.apps.default";
+   public static final String CATEGORY_LIVE = "com.android.settings.category.ia.live";
     public static final String CATEGORY_BATTERY = "com.android.settings.category.ia.battery";
     public static final String CATEGORY_DISPLAY = "com.android.settings.category.ia.display";
     public static final String CATEGORY_SOUND = "com.android.settings.category.ia.sound";
diff --git a/frameworks/proto_logging/stats/enums/app/settings_enums.proto b/frameworks/proto_logging/stats/enums/app/settings_enums.proto
old mode 100644
new mode 100755
index 173cc72..556fd23
--- a/frameworks/proto_logging/stats/enums/app/settings_enums.proto
+++ b/frameworks/proto_logging/stats/enums/app/settings_enums.proto
@@ -3180,6 +3180,11 @@ enum PageId {
     // CATEGORY: SETTINGS
     // OS: S
     SETTINGS_BUTTON_NAV_DLG = 1907;
+    
+    // OPEN: Settings >Live
+    // CATEGORY: SETTINGS
+    // OS: S
+    LIVE = 1908;
 }
 
 // Battery Saver schedule types.

通過(guò)以上步驟 能順利添加新的setting項(xiàng)到 setting主界面中顶滩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寸爆,隨后出現(xiàn)的幾起案子礁鲁,更是在濱河造成了極大的恐慌,老刑警劉巖赁豆,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仅醇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡魔种,警方通過(guò)查閱死者的電腦和手機(jī)析二,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人叶摄,你說(shuō)我怎么就攤上這事属韧。” “怎么了蛤吓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵宵喂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我会傲,道長(zhǎng)锅棕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任淌山,我火速辦了婚禮裸燎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艾岂。我一直安慰自己顺少,他們只是感情好朋其,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般岩饼。 火紅的嫁衣襯著肌膚如雪诵次。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天袱蚓,我揣著相機(jī)與錄音钞啸,去河邊找鬼。 笑死喇潘,一個(gè)胖子當(dāng)著我的面吹牛体斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颖低,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼絮吵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了忱屑?” 一聲冷哼從身側(cè)響起蹬敲,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莺戒,沒(méi)想到半個(gè)月后伴嗡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡从铲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年瘪校,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名段。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渣淤,死狀恐怖赏寇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情价认,我是刑警寧澤嗅定,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站用踩,受9級(jí)特大地震影響渠退,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脐彩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一碎乃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惠奸,春花似錦梅誓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嗅回,卻和暖如春及穗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绵载。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工埂陆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娃豹。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓焚虱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懂版。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹃栽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容