diff --git a/service/java/com/android/server/wifi/ActiveModeWarden.java b/service/java/com/android/server/wifi/ActiveModeWarden.java
index d118d83..422cc44 100644
--- a/service/java/com/android/server/wifi/ActiveModeWarden.java
+++ b/service/java/com/android/server/wifi/ActiveModeWarden.java
@@ -654,4 +654,7 @@
             }
         }
     };
+
+    public void registerStaEventCallback() {}
+    public void unregisterStaEventCallback() {}
 }
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index a234d4d..633d6a7 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -102,6 +102,7 @@
     private final ScoringParams mScoringParams;
     private final ClientModeImpl mClientModeImpl;
     private final ActiveModeWarden mActiveModeWarden;
+    private final WifiStaStateNotifier mWifiStaStateNotifier;
     private final WifiSettingsStore mSettingsStore;
     private OpenNetworkNotifier mOpenNetworkNotifier;
     private CarrierNetworkNotifier mCarrierNetworkNotifier;
@@ -346,6 +347,8 @@
                 mWifiConfigManager, mContext, mDppMetrics);
         mIpMemoryStore = IpMemoryStore.getMemoryStore(mContext);
 
+        mWifiStaStateNotifier = new WifiStaStateNotifier(clientModeImplLooper, this);
+
         // Register the various network evaluators with the network selector.
         mWifiNetworkSelector.registerNetworkEvaluator(mSavedNetworkEvaluator);
         mWifiNetworkSelector.registerNetworkEvaluator(mNetworkSuggestionEvaluator);
@@ -452,6 +455,10 @@
         return mActiveModeWarden;
     }
 
+    public WifiStaStateNotifier getWifiStaStateNotifier() {
+        return mWifiStaStateNotifier;
+    }
+
     public WifiSettingsStore getWifiSettingsStore() {
         return mSettingsStore;
     }
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 54c2b61..12a0fdf 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -65,6 +65,7 @@
 import android.net.wifi.INetworkRequestMatchCallback;
 import android.net.wifi.IOnWifiUsabilityStatsListener;
 import android.net.wifi.ISoftApCallback;
+import android.net.wifi.IStaStateCallback;
 import android.net.wifi.ITrafficStateCallback;
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiActivityEnergyInfo;
@@ -187,6 +188,7 @@
     /* Backup/Restore Module */
     private final WifiBackupRestore mWifiBackupRestore;
     private final WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager;
+    private WifiStaStateNotifier mWifiStaStateNotifier;
 
     private WifiLog mLog;
     /**
@@ -489,6 +491,7 @@
         mPowerProfile = mWifiInjector.getPowerProfile();
         mWifiNetworkSuggestionsManager = mWifiInjector.getWifiNetworkSuggestionsManager();
         mDppManager = mWifiInjector.getDppManager();
+        mWifiStaStateNotifier = mWifiInjector.getWifiStaStateNotifier();
     }
 
     /**
@@ -3250,6 +3253,33 @@
         });
     }
 
+    @Override
+    public void registerStaStateCallback(IBinder binder, IStaStateCallback callback,
+                                                int callbackIdentifier) {
+        if (binder == null) {
+            throw new IllegalArgumentException("Binder must not be null");
+        }
+        if (callback == null) {
+            throw new IllegalArgumentException("Callback must not be null");
+        }
+        if (mVerboseLoggingEnabled) {
+            mLog.info("registerStaStateCallback uid=%").c(Binder.getCallingUid()).flush();
+        }
+        mWifiInjector.getClientModeImplHandler().post(() -> {
+            mWifiStaStateNotifier.addCallback(binder, callback, callbackIdentifier);
+        });
+    }
+
+    @Override
+    public void unregisterStaStateCallback(int callbackIdentifier) {
+        if (mVerboseLoggingEnabled) {
+            mLog.info("unregisterStaStateCallback uid=%").c(Binder.getCallingUid()).flush();
+        }
+        mWifiInjector.getClientModeImplHandler().post(() -> {
+            mWifiStaStateNotifier.removeCallback(callbackIdentifier);
+        });
+    }
+
     private boolean is5GhzSupported() {
         return (getSupportedFeaturesInternal() & WIFI_FEATURE_INFRA_5G) == WIFI_FEATURE_INFRA_5G;
     }
diff --git a/service/java/com/android/server/wifi/WifiStaStateNotifier.java b/service/java/com/android/server/wifi/WifiStaStateNotifier.java
new file mode 100644
index 0000000..05dd879
--- /dev/null
+++ b/service/java/com/android/server/wifi/WifiStaStateNotifier.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2020 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.server.wifi;
+
+import android.annotation.NonNull;
+import android.net.wifi.IStaStateCallback;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.server.wifi.util.ExternalCallbackTracker;
+
+
+public class WifiStaStateNotifier {
+    private final ExternalCallbackTracker<IStaStateCallback> mRegisteredCallbacks;
+    private static WifiInjector mWifiInjector;
+    private static final String TAG = "WifiStaStateNotifier";
+    private static final boolean DEBUG = false;
+
+    WifiStaStateNotifier(@NonNull Looper looper, WifiInjector wifiInjector) {
+        mRegisteredCallbacks = new ExternalCallbackTracker<IStaStateCallback>(new Handler(looper));
+        mWifiInjector = wifiInjector;
+    }
+
+    public void addCallback(IBinder binder, IStaStateCallback callback,
+                            int callbackIdentifier) {
+        if (DEBUG) Log.d(TAG, "addCallback");
+        if (mRegisteredCallbacks.getNumCallbacks() > 0) {
+            if (DEBUG) Log.e(TAG, "Failed to add callback, only support single request!");
+            return;
+        }
+        if (!mRegisteredCallbacks.add(binder, callback, callbackIdentifier)) {
+            if (DEBUG) Log.e(TAG, "Failed to add callback");
+            return;
+        }
+        mWifiInjector.getActiveModeWarden().registerStaEventCallback();
+    }
+
+    public void removeCallback(int callbackIdentifier) {
+        if (DEBUG) Log.d(TAG, "removeCallback");
+        mRegisteredCallbacks.remove(callbackIdentifier);
+        mWifiInjector.getActiveModeWarden().unregisterStaEventCallback();
+    }
+
+    public void onStaToBeOff() {
+        if (DEBUG) Log.d(TAG, "onStaToBeOff");
+        for (IStaStateCallback callback : mRegisteredCallbacks.getCallbacks()) {
+            try {
+                if (DEBUG) Log.d(TAG, "callback onStaToBeOff");
+                callback.onStaToBeOff();
+            } catch (RemoteException e) {
+                // do nothing
+            }
+        }
+    }
+}
