Clean up and document state lifecycle

This renames existing states and makes RunningState a child of
StartedState. StartedState's purpose is managing the IpClient lifecycle,
so when the state machine transitions to RunningState, there is
guaranteed to be an IpClient instance. RunningState will then
startProvisioning and register a NetworkAgent on provisioning success.

Test: builds
Change-Id: I7fa41a9be06feaa9cbe78e344242bcedbe91e7ed
diff --git a/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java b/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
index 6ebf84a..bc3fc88 100644
--- a/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
+++ b/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
@@ -77,7 +77,7 @@
     }
 
     /** Link is down */
-    private class DisconnectedState extends State {
+    private class LinkDownState extends State {
 
     }
 
@@ -108,21 +108,21 @@
     private class StoppedState extends State {
     }
 
-    /** Network is needed, start provisioning */
-    private class ProvisioningState extends State {
+    /** Network is needed, starts IpClient and manages its lifecycle */
+    private class StartedState extends State {
 
     }
 
-    /** Network is needed */
+    /** IpClient is running, starts provisioning and registers NetworkAgent */
     private class RunningState extends State {
 
     }
 
     private final TetheringState mTetheringState = new TetheringState();
-    private final DisconnectedState mDisconnectedState = new DisconnectedState();
+    private final LinkDownState mLinkDownState = new LinkDownState();
     private final NetworkOfferExtendedState mOfferExtendedState = new NetworkOfferExtendedState();
     private final StoppedState mStoppedState = new StoppedState();
-    private final ProvisioningState mProvisioningState = new ProvisioningState();
+    private final StartedState mStartedState = new StartedState();
     private final RunningState mRunningState = new RunningState();
 
     public EthernetInterfaceStateMachine(String iface, Handler handler, NetworkCapabilities capabilities, NetworkProvider provider) {
@@ -133,6 +133,33 @@
         mCapabilities = capabilities;
         mNetworkProvider = provider;
 
+        // Interface lifecycle:
+        //           [ LinkDownState ]
+        //                   |
+        //                   v
+        //             *link comes up*
+        //                   |
+        //                   v
+        //            [ StoppedState ]
+        //                   |
+        //                   v
+        //           *network is needed*
+        //                   |
+        //                   v
+        //            [ StartedState ]
+        //                   |
+        //                   v
+        //           *IpClient is created*
+        //                   |
+        //                   v
+        //            [ RunningState ]
+        //                   |
+        //                   v
+        //  *interface is requested for tethering*
+        //                   |
+        //                   v
+        //            [TetheringState]
+        //
         // Tethering mode is special as the interface is configured by Tethering, rather than the
         // ethernet module.
         final List<StateInfo> states = new ArrayList<>();
@@ -140,15 +167,15 @@
 
         // CHECKSTYLE:OFF IndentationCheck
         // Initial state
-        states.add(new StateInfo(mDisconnectedState, null));
+        states.add(new StateInfo(mLinkDownState, null));
         states.add(new StateInfo(mOfferExtendedState, null));
             states.add(new StateInfo(mStoppedState, mOfferExtendedState));
-            states.add(new StateInfo(mProvisioningState, mOfferExtendedState));
-            states.add(new StateInfo(mRunningState, mOfferExtendedState));
+            states.add(new StateInfo(mStartedState, mOfferExtendedState));
+                states.add(new StateInfo(mRunningState, mStartedState));
         // CHECKSTYLE:ON IndentationCheck
 
         // TODO: set initial state to TetheringState if a tethering interface has been requested and
         // this is the first interface to be added.
-        start(mDisconnectedState);
+        start(mLinkDownState);
     }
 }