2024-02-27

1少孝、Android13 修改Launcher3抽屜改成為滑動模式:
.../PortraitStatesTouchController.java | 5 +
.../android/launcher3/DeleteDropTarget.java | 6 +
.../android/launcher3/LauncherAppState.java | 3 +
.../model/AddWorkspaceItemsTask.java | 8 +-
.../android/launcher3/model/BgDataModel.java | 7 ++
.../launcher3/model/ItemInstallQueue.java | 54 +++++++++
.../android/launcher3/model/LoaderTask.java | 114 +++++++++++++++++-
.../model/WorkspaceItemSpaceFinder.java | 2 +-
.../model/data/WorkspaceItemInfo.java | 16 +++
.../touch/AllAppsSwipeController.java | 0
10 files changed, 212 insertions(+), 3 deletions(-)
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeleteDropTarget.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/BgDataModel.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/ItemInstallQueue.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
mode change 100644 => 100755 vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/touch/AllAppsSwipeController.java

diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
old mode 100644
new mode 100755
index e56c90c20cb..c539b06c633
--- a/vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
+++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
@@ -34,6 +34,8 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_VERTICAL_PR
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_FADE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_SCALE;

+import com.android.launcher3.LauncherAppState;

import android.view.MotionEvent;
import android.view.animation.Interpolator;

@@ -155,6 +157,9 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr
} else if (fromState == OVERVIEW) {
return isDragTowardPositive ? OVERVIEW : NORMAL;
} else if (fromState == NORMAL && isDragTowardPositive) {

  •       if (LauncherAppState.isUserSingleLayerStyle()) {
    
  •           return fromState;
    
  •        }
           return ALL_APPS;
       }
       return fromState;
    

diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeleteDropTarget.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeleteDropTarget.java
old mode 100644
new mode 100755
index 95d3ad9dbb7..5f0c8ad1e9a
--- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeleteDropTarget.java
+++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/DeleteDropTarget.java
@@ -89,6 +89,12 @@ public class DeleteDropTarget extends ButtonDropTarget {

 @Override
 protected boolean supportsDrop(ItemInfo info) {
  •    if (info != null &&
    
  •            info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
    
  •            && LauncherAppState.isUserSingleLayerStyle()) {
    
  •        return false;
    
  •    }
       return true;
    
    }

diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java
old mode 100644
new mode 100755
index 597bc8da3a4..24f0eb1eb71
--- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java
+++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/LauncherAppState.java
@@ -68,6 +68,9 @@ public class LauncherAppState implements SafeCloseable {
private final IconCache mIconCache;
private final InvariantDeviceProfile mInvariantDeviceProfile;
private final RunnableList mOnTerminateCallback = new RunnableList();

  • public static boolean isUserSingleLayerStyle() {

  •   return true;
    
  • }

    public static LauncherAppState getInstance(final Context context) {
    return INSTANCE.get(context);
    diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
    old mode 100644
    new mode 100755
    index 31ef2e5ea67..1ff1f228532
    --- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
    +++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
    @@ -97,8 +97,14 @@ public class AddWorkspaceItemsTask extends BaseModelUpdateTask {
    continue;
    }

  •               boolean mForceAdd = false;
    
  •               if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
    
  •                       && item instanceof WorkspaceItemInfo) {
    
  •                    mForceAdd = ((WorkspaceItemInfo) item).hasExtraFlag(WorkspaceItemInfo.EXTRA_FLAG_FORCE_ADD);
    
  •                }
    
  •                // b/139663018 Short-circuit this logic if the icon is a system app
    
  •                if (PackageManagerHelper.isSystemApp(app.getContext(), item.getIntent())) {
    
  •                if (!mForceAdd && PackageManagerHelper.isSystemApp(app.getContext(), item.getIntent())) {
                       if (TestProtocol.sDebugTracing) {
                           Log.d(TestProtocol.MISSING_PROMISE_ICON,
                                   LOG + " Item is a system app.");
    

diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/BgDataModel.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/BgDataModel.java
old mode 100644
new mode 100755
index de23c4b31f4..ca5b6de3dfc
--- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/BgDataModel.java
+++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/BgDataModel.java
@@ -403,6 +403,13 @@ public class BgDataModel {
items.addAll(appWidgets);
return items;
}

  • public synchronized ArrayList<ItemInfo> getAllWorkspaceItemsWithoutAppWidget() {

  •    ArrayList<ItemInfo> items = new ArrayList<>(workspaceItems.size());
    
  •    items.addAll(workspaceItems);
    
  •    return items;
    
  • }

    /**

    • Calls the provided {@code op} for all workspaceItems in the in-memory model (both persisted
      diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/ItemInstallQueue.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/ItemInstallQueue.java
      old mode 100644
      new mode 100755
      index 5a220f74c73..2f98689b66a
      --- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/ItemInstallQueue.java
      +++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/ItemInstallQueue.java
      @@ -186,6 +186,15 @@ public class ItemInstallQueue {
      public void queueItem(String packageName, UserHandle userHandle) {
      queuePendingShortcutInfo(new PendingInstallShortcutInfo(packageName, userHandle));
      }
  • /**

  • * Adds an item to the install queue
    
  • */
    
  • public void queueItem(LauncherActivityInfo launcherActivityInfo, UserHandle userHandle) {

  •    queuePendingShortcutInfo(new PendingInstallShortcutInfo(launcherActivityInfo, userHandle));
    
  • }

  • /**
    * Returns a stream of all pending shortcuts in the queue
    @@ -250,9 +259,18 @@ public class ItemInstallQueue {
    private static class PendingInstallShortcutInfo extends ItemInfo {

       final Intent intent;
    
  •   LauncherActivityInfo activityInfo = null;
    
       @Nullable ShortcutInfo shortcutInfo;
       @Nullable AppWidgetProviderInfo providerInfo;
    
  •    public PendingInstallShortcutInfo(LauncherActivityInfo activityInfo, UserHandle userHandle) {
    
  •        itemType = Favorites.ITEM_TYPE_APPLICATION;
    
  •        intent = new Intent().setComponent(activityInfo.getComponentName());
    
  •        this.activityInfo = activityInfo;
    
  •        user = userHandle;
    
  •    }
    
       /**
        * Initializes a PendingInstallShortcutInfo to represent a pending launcher target.
    

@@ -305,6 +323,12 @@ public class ItemInstallQueue {
si.itemType = ITEM_TYPE_APPLICATION;

                 LauncherActivityInfo lai;
  •                if (activityInfo != null) {
    
  •                    laiList.clear();
    
  •                    laiList.add(activityInfo);
    
  •                    si.addExtraFlag(WorkspaceItemInfo.EXTRA_FLAG_FORCE_ADD);
    
  •                }
    
  •                boolean usePackageIcon = laiList.isEmpty();
                   if (usePackageIcon) {
                       lai = null;
    

@@ -343,6 +367,34 @@ public class ItemInstallQueue {
return null;
}

  •    /*@Override
    
  •    public boolean equals(Object obj) {
    
  •        if (obj instanceof PendingInstallShortcutInfo) {
    
  •            PendingInstallShortcutInfo other = (PendingInstallShortcutInfo) obj;
    
  •            boolean userMatches = user.equals(other.user);
    
  •            boolean itemTypeMatches = itemType == other.itemType;
    
  •            boolean intentMatches = intent.toUri(0).equals(other.intent.toUri(0));
    
  •            boolean shortcutInfoMatches = shortcutInfo == null
    
  •                    ? other.shortcutInfo == null
    
  •                    : other.shortcutInfo != null
    
  •                        && shortcutInfo.getId().equals(other.shortcutInfo.getId())
    
  •                        && shortcutInfo.getPackage().equals(other.shortcutInfo.getPackage());
    
  •            boolean providerInfoMatches = providerInfo == null
    
  •                    ? other.providerInfo == null
    
  •                    : other.providerInfo != null
    
  •                        && providerInfo.provider.equals(other.providerInfo.provider);
    
  •            return userMatches
    
  •                    && itemTypeMatches
    
  •                    && intentMatches
    
  •                    && shortcutInfoMatches
    
  •                    && providerInfoMatches;
    
  •        }
    
  •        return false;
    
  •    }*/
    
  •    @Override
       public boolean equals(Object obj) {
           if (obj instanceof PendingInstallShortcutInfo) {
    

@@ -369,6 +421,8 @@ public class ItemInstallQueue {
}
return false;
}

  • }

    private static String getIntentPackage(Intent intent) {
    diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java
    old mode 100644
    new mode 100755
    index f1c5d59fc8f..2ba26da8cb8
    --- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java
    +++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java
    @@ -117,6 +117,7 @@ public class LoaderTask implements Runnable {
    private static final String TAG = "LoaderTask";

    private static final boolean DEBUG = true;

  • private static final boolean DEBUG_BOBO = true;

    protected final LauncherAppState mApp;
    private final AllAppsList mBgAllAppsList;
    @@ -186,6 +187,22 @@ public class LoaderTask implements Runnable {

     filterCurrentWorkspaceItems(firstScreens, allItems, firstScreenItems,
             new ArrayList<>() /* otherScreenItems are ignored */);
    
  •    if (DEBUG_BOBO) {
    
  •        Log.d(TAG, "sendFirstScreenActiveInstallsBroadcast firstScreenItems size: "
    
  •                + firstScreenItems.size());
    
  •        for (ItemInfo itemInfo : firstScreenItems) {
    
  •            Log.d(TAG, "firstScreenItems: " + itemInfo);
    
  •        }
    
  •       Log.d(TAG, "sendFirstScreenActiveInstallsBroadcast firstScreenItems end");
    
  •        Log.d(TAG, "sendFirstScreenActiveInstallsBroadcast allItems size: "
    
  •                + allItems.size());
    
  •        for (ItemInfo itemInfo : allItems) {
    
  •            Log.d(TAG, "allItems: " + itemInfo);
    
  •        }
    
  •        Log.d(TAG, "sendFirstScreenActiveInstallsBroadcast allItems end");
    
  •    }      
       mFirstScreenBroadcast.sendBroadcasts(mApp.getContext(), firstScreenItems);
    

    }

@@ -196,6 +213,10 @@ public class LoaderTask implements Runnable {
return;
}
}

  •   if (DEBUG_BOBO) {
    
  •        Log.d(TAG, "run start");
    
  •    }
    
       Object traceToken = TraceHelper.INSTANCE.beginSection(TAG);
       TimingLogger logger = new TimingLogger(TAG, "run");
    

@@ -208,6 +229,14 @@ public class LoaderTask implements Runnable {
} finally {
Trace.endSection();
}

  •        if (DEBUG_BOBO) {
    
  •            Log.d(TAG, "shortcutInfo size: " + allShortcuts.size());
    
  •            for (ShortcutInfo shortcutInfo : allShortcuts) {
    
  •                Log.d(TAG, "shortcutInfo: " + shortcutInfo);
    
  •            }
    
  •            Log.d(TAG, "shortcutInfo end");
    
  •        }
           logASplit(logger, "loadWorkspace");
    
           // Sanitize data re-syncs widgets/shortcuts based on the workspace loaded from db.
    

@@ -242,6 +271,14 @@ public class LoaderTask implements Runnable {
} finally {
Trace.endSection();
}

  •        if (DEBUG_BOBO) {
    
  •            Log.d(TAG, "allActivityList size: " + allActivityList.size());
    
  •            for (LauncherActivityInfo activityInfo : allActivityList) {
    
  •                Log.d(TAG, "activityInfo: " + activityInfo.getComponentName());
    
  •            }
    
  •            Log.d(TAG, "allActivityList end");
    
  •        }
           logASplit(logger, "loadAllApps");
    
           verifyNotStopped();
    

@@ -270,6 +307,14 @@ public class LoaderTask implements Runnable {

         // third step
         List<ShortcutInfo> allDeepShortcuts = loadDeepShortcuts();
  •        if (DEBUG_BOBO) {
    
  •            Log.d(TAG, "allDeepShortcuts size: " + allDeepShortcuts.size());
    
  •            for (ShortcutInfo shortcutInfo : allDeepShortcuts) {
    
  •                Log.d(TAG, "shortcutInfo: " + shortcutInfo);
    
  •            }
    
  •            Log.d(TAG, "allDeepShortcuts end");
    
  •        }
           logASplit(logger, "loadDeepShortcuts");
    
           verifyNotStopped();
    

@@ -290,7 +335,14 @@ public class LoaderTask implements Runnable {

         // fourth step
-                    mBgDataModel.widgetsModel.update(mApp, null);
+                    mBgDataModel.widgetsModel.update(mApp, null);                  
+            if (DEBUG_BOBO) {
+                Log.d(TAG, "allWidgetsList size: " + allWidgetsList.size());
+                for (ComponentWithLabelAndIcon componentWithLabelAndIcon : allWidgetsList) {
+                    Log.d(TAG, "componentWithLabelAndIcon: " + componentWithLabelAndIcon.getComponent());
+                }
+                Log.d(TAG, "allWidgetsList end");
+            }
             logASplit(logger, "load widgets");
 
             verifyNotStopped();
@@ -312,6 +364,9 @@ public class LoaderTask implements Runnable {
             updateHandler.finish();
             logASplit(logger, "finish icon update");
 
+            // add apps for single layer--bobo
+            updateForSingleLayerStyle(allActivityList);
+
             mModelDelegate.modelLoadComplete();
             transaction.commit();
             memoryLogger.clearLogs();
@@ -324,9 +379,57 @@ public class LoaderTask implements Runnable {
         } finally {
             logger.dumpToLog();
         }
+       
+        if (DEBUG_BOBO) {
+            Log.d(TAG, "run end");
+        }
         TraceHelper.INSTANCE.endSection(traceToken);
     }
 
+   private void updateForSingleLayerStyle(List<LauncherActivityInfo> allActivityList) {
+        if (!LauncherAppState.isUserSingleLayerStyle()) {
+            return;
+        }
+        if (allActivityList == null || allActivityList.size() <= 0) {
+            return;
+        }
+        Map<String, LauncherActivityInfo> newAppsMap = new HashMap<>();
+        for (LauncherActivityInfo info : allActivityList) {
+            newAppsMap.put(getComponentKey(info.getComponentName(), info.getUser().getIdentifier()),
+                    info);
+        }
+        ArrayList<ItemInfo> addedItems = mBgDataModel.getAllWorkspaceItemsWithoutAppWidget();
+        for (ItemInfo info : addedItems) {
+            if (info.getTargetComponent() == null) continue;
+            if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
+                newAppsMap.remove(getComponentKey(info.getTargetComponent(), info.user.getIdentifier()));
+            } else if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) {
+                //TODO
+            }
+        }
+        if (DEBUG_BOBO) {
+            Log.d(TAG, "updateForSingleLayerStyle newAppsMap:" + newAppsMap.size());
+            newAppsMap.values().stream().forEach(item->{
+                Log.d(TAG, "updateForSingleLayerStyle activityInfo: " + item.getComponentName());
+            });
+        }
+        ItemInstallQueue.INSTANCE.get(mApp.getContext())
+                .pauseModelPush(ItemInstallQueue.FLAG_LOADER_RUNNING);
+        newAppsMap.values().stream().forEach(item->{
+            ItemInstallQueue.INSTANCE.get(mApp.getContext())
+                    .queueItem(item, item.getUser());
+        });
+        ItemInstallQueue.INSTANCE.get(mApp.getContext())
+                .resumeModelPush(ItemInstallQueue.FLAG_LOADER_RUNNING);
+        if (DEBUG_BOBO) {
+            Log.d(TAG, "updateForSingleLayerStyle end");
+        }
+    }
+
+    private String getComponentKey(ComponentName componentName, int userId) {
+        return componentName.toString() + "_" + userId;
+    }
+
     public synchronized void stopLocked() {
         mStopped = true;
         this.notify();
@@ -1058,6 +1161,15 @@ public class LoaderTask implements Runnable {
                             suggestionInfos);
                     info.suggestedFolderNames = suggestionInfos;
                 }
+            }          
+            if (DEBUG_BOBO) {
+                Log.d(TAG, "loadFolderNames mBgDataModel.folders size: " + mBgDataModel.folders.size());
+                for (int i = 0; i < mBgDataModel.folders.size(); i++) {
+                    FolderInfo info = mBgDataModel.folders.valueAt(i);
+                    Log.d(TAG, "info: " +
+                            info.suggestedFolderNames);
+                }
+                Log.d(TAG, "loadFolderNames end");
             }
         }
     }
diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java
old mode 100644
new mode 100755
index 93fc6a539f1..ec685f7902b
--- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java
+++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java
@@ -66,7 +66,7 @@ public class WorkspaceItemSpaceFinder {
         int screenCount = workspaceScreens.size();
         // First check the preferred screen.
         IntSet screensToExclude = new IntSet();
-        if (FeatureFlags.QSB_ON_FIRST_SCREEN) {
+        if (FeatureFlags.QSB_ON_FIRST_SCREEN || LauncherAppState.isUserSingleLayerStyle()) {
             screensToExclude.add(FIRST_SCREEN_ID);
         }
 
diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/data/WorkspaceItemInfo.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
old mode 100644
new mode 100755
index 2b3da335c37..3f4be285775
--- a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
+++ b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
@@ -111,6 +111,7 @@ public class WorkspaceItemInfo extends ItemInfoWithIcon {
         iconResource = info.iconResource;
         status = info.status;
         personKeys = info.personKeys.clone();
+       mExtraFlags = info.mExtraFlags;
     }
 
     /** TODO: Remove this.  It's only called by ApplicationInfo.makeWorkspaceItem. */
@@ -228,4 +229,19 @@ public class WorkspaceItemInfo extends ItemInfoWithIcon {
     public WorkspaceItemInfo clone() {
         return new WorkspaceItemInfo(this);
     }
+   
+    public static final int EXTRA_FLAG_FORCE_ADD = 1;
+   private int mExtraFlags = 0;
+    public void addExtraFlag(int flag) {
+        mExtraFlags |= flag;
+    }
+
+    public void removeExtraFlag(int flag) {
+        mExtraFlags &= ~flag;
+    }
+
+    public boolean hasExtraFlag(int flag) {
+        return (mExtraFlags & flag) == flag;
+    }
+
 }
diff --git a/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/touch/AllAppsSwipeController.java b/vendor/mediatek/proprietary/packages/apps/Launcher3/src/com/android/launcher3/touch/AllAppsSwipeController.java
old mode 100644
new mode 100755
-- 
2.17.1



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子他炊,更是在濱河造成了極大的恐慌搭幻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窟社,死亡現(xiàn)場離奇詭異券勺,居然都是意外死亡,警方通過查閱死者的電腦和手機灿里,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門关炼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匣吊,你說我怎么就攤上這事儒拂。” “怎么了色鸳?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵社痛,是天一觀的道長。 經(jīng)常有香客問我命雀,道長蒜哀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任吏砂,我火速辦了婚禮撵儿,結(jié)果婚禮上乘客,老公的妹妹穿的比我還像新娘。我一直安慰自己淀歇,他們只是感情好易核,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪默,像睡著了一般牡直。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浴鸿,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天井氢,我揣著相機與錄音,去河邊找鬼岳链。 笑死花竞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的掸哑。 我是一名探鬼主播约急,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苗分!你這毒婦竟也來了厌蔽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤摔癣,失蹤者是張志新(化名)和其女友劉穎奴饮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择浊,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡戴卜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琢岩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片投剥。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖担孔,靈堂內(nèi)的尸體忽然破棺而出江锨,到底是詐尸還是另有隱情,我是刑警寧澤糕篇,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布啄育,位于F島的核電站,受9級特大地震影響拌消,放射性物質(zhì)發(fā)生泄漏挑豌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浮毯。 院中可真熱鬧,春花似錦泰鸡、人聲如沸债蓝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饰迹。三九已至,卻和暖如春余舶,著一層夾襖步出監(jiān)牢的瞬間啊鸭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工匿值, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赠制,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓挟憔,卻偏偏與公主長得像钟些,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绊谭,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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