Update the Connectivity debug app to the multinetwork API.

1. Stop using the deprecated startUsingNetworkFeature and use
   requestNetwork instead.
2. Make use of clearCapabilities().

Bug: 23597341
Change-Id: I65cb813111947d159d2bb18f0d8a93fb726912e5
diff --git a/apps/Development/res/layout/connectivity.xml b/apps/Development/res/layout/connectivity.xml
index 00ba508..8de23da 100644
--- a/apps/Development/res/layout/connectivity.xml
+++ b/apps/Development/res/layout/connectivity.xml
@@ -248,27 +248,27 @@
       android:paddingTop="4dip"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
-        <Button android:id="@+id/start_mms"
+        <Button android:id="@+id/request_mms"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
-          android:text="@string/start_mms" />
-        <Button android:id="@+id/stop_mms"
+          android:text="@string/request_mms" />
+        <Button android:id="@+id/release_mms"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
-          android:text="@string/stop_mms" />
+          android:text="@string/release_mms" />
     </LinearLayout>
     <LinearLayout
       android:orientation="horizontal"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
-        <Button android:id="@+id/start_hipri"
+        <Button android:id="@+id/request_cell"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
-          android:text="@string/start_hipri" />
-        <Button android:id="@+id/stop_hipri"
+          android:text="@string/request_cell" />
+        <Button android:id="@+id/release_cell"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
-          android:text="@string/stop_hipri" />
+          android:text="@string/release_cell" />
     </LinearLayout>
     <LinearLayout
       android:orientation="horizontal"
diff --git a/apps/Development/res/values/strings.xml b/apps/Development/res/values/strings.xml
index 3ef8845..ed42725 100644
--- a/apps/Development/res/values/strings.xml
+++ b/apps/Development/res/values/strings.xml
@@ -40,10 +40,10 @@
     <string name="stop_tdls">Stop TDLS</string>
     <string name="mac_tdls"> IP/MAC: </string>
 
-    <string name="start_mms">Start MMS</string>
-    <string name="stop_mms">Stop MMS</string>
-    <string name="start_hipri">Start HiPri</string>
-    <string name="stop_hipri">Stop HiPri</string>
+    <string name="request_mms">Request MMS</string>
+    <string name="release_mms">Release MMS</string>
+    <string name="request_cell">Request cell</string>
+    <string name="release_cell">Release cell</string>
     <string name="crash">CRASH</string>
     <string name="report_all_bad">Report all bad</string>
 
diff --git a/apps/Development/src/com/android/development/Connectivity.java b/apps/Development/src/com/android/development/Connectivity.java
index 0f0030f..21bf07c 100644
--- a/apps/Development/src/com/android/development/Connectivity.java
+++ b/apps/Development/src/com/android/development/Connectivity.java
@@ -287,6 +287,56 @@
     }
     private DevToolsNetworkCallback mCallback;
 
+    private class RequestableNetwork {
+        private final NetworkRequest mRequest;
+        private final int mRequestButton, mReleaseButton;
+        private NetworkCallback mCallback;
+
+        public RequestableNetwork(NetworkRequest request, int requestButton, int releaseButton) {
+            mRequest = request;
+            mRequestButton = requestButton;
+            mReleaseButton = releaseButton;
+        }
+
+        public void setRequested(boolean requested) {
+            findViewById(mRequestButton).setEnabled(!requested);
+            findViewById(mReleaseButton).setEnabled(requested);
+        }
+
+        public void request() {
+            if (mCallback == null) {
+                mCallback = new NetworkCallback();
+                mCm.requestNetwork(mRequest, mCallback);
+                setRequested(true);
+            }
+        }
+
+        public void release() {
+            if (mCallback != null) {
+                mCm.unregisterNetworkCallback(mCallback);
+                mCallback = null;
+                setRequested(false);
+            }
+        }
+    }
+
+    private final RequestableNetwork mMmsNetwork = new RequestableNetwork(
+            new NetworkRequest.Builder()
+                    .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS)
+                    .build(),
+            R.id.request_mms,
+            R.id.release_mms);
+
+    private final RequestableNetwork mCellNetwork = new RequestableNetwork(
+            new NetworkRequest.Builder()
+                    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+                    .build(),
+            R.id.request_cell,
+            R.id.release_cell);
+
+    final NetworkRequest mEmptyRequest = new NetworkRequest.Builder().clearCapabilities().build();
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -336,10 +386,10 @@
         findViewById(R.id.startTdls).setOnClickListener(mClickListener);
         findViewById(R.id.stopTdls).setOnClickListener(mClickListener);
 
-        findViewById(R.id.start_mms).setOnClickListener(mClickListener);
-        findViewById(R.id.stop_mms).setOnClickListener(mClickListener);
-        findViewById(R.id.start_hipri).setOnClickListener(mClickListener);
-        findViewById(R.id.stop_hipri).setOnClickListener(mClickListener);
+        findViewById(R.id.request_mms).setOnClickListener(mClickListener);
+        findViewById(R.id.release_mms).setOnClickListener(mClickListener);
+        findViewById(R.id.request_cell).setOnClickListener(mClickListener);
+        findViewById(R.id.release_cell).setOnClickListener(mClickListener);
         findViewById(R.id.report_all_bad).setOnClickListener(mClickListener);
         findViewById(R.id.crash).setOnClickListener(mClickListener);
 
@@ -353,24 +403,25 @@
         findViewById(R.id.default_socket).setOnClickListener(mClickListener);
         findViewById(R.id.link_stats).setOnClickListener(mClickListener);
 
+        mCellNetwork.setRequested(false);
+        mMmsNetwork.setRequested(false);
+
         registerReceiver(mReceiver, new IntentFilter(CONNECTIVITY_TEST_ALARM));
 
         mLinkStatsResults = (TextView)findViewById(R.id.stats);
         mLinkStatsResults.setVisibility(View.VISIBLE);
 
-        NetworkRequest.Builder builder = new NetworkRequest.Builder();
-        for (int i = 0; i < 255; i++) {
-            try { builder.removeCapability(i); } catch (IllegalArgumentException e) {}
-        }
-        NetworkRequest request = builder.build();
         mCallback = new DevToolsNetworkCallback();
-        mCm.registerNetworkCallback(request, mCallback);
+        mCm.registerNetworkCallback(mEmptyRequest, mCallback);
     }
 
     @Override
     public void onDestroy() {
         super.onDestroy();
+        mCellNetwork.release();
+        mMmsNetwork.release();
         mCm.unregisterNetworkCallback(mCallback);
+        mCallback = null;
         unregisterReceiver(mReceiver);
     }
 
@@ -410,13 +461,11 @@
                 case R.id.stopTdls:
                     onStopTdls();
                     break;
-                case R.id.start_mms:
-                    mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                            Phone.FEATURE_ENABLE_MMS);
+                case R.id.request_mms:
+                    mMmsNetwork.request();
                     break;
-                case R.id.stop_mms:
-                    mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                            Phone.FEATURE_ENABLE_MMS);
+                case R.id.release_mms:
+                    mMmsNetwork.release();
                     break;
                 case R.id.default_socket:
                     onDefaultSocket();
@@ -448,13 +497,11 @@
                 case R.id.crash:
                     onCrash();
                     break;
-                case R.id.start_hipri:
-                    mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                            Phone.FEATURE_ENABLE_HIPRI);
+                case R.id.request_cell:
+                    mCellNetwork.request();
                     break;
-                case R.id.stop_hipri:
-                    mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                            Phone.FEATURE_ENABLE_HIPRI);
+                case R.id.release_cell:
+                    mCellNetwork.release();
                     break;
                 case R.id.link_stats:
                     onLinkStats();