1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.google.android.sample.testsliceapp;
17 
18 import android.net.ConnectivityManager;
19 import android.net.ConnectivityManager.NetworkCallback;
20 import android.net.Network;
21 import android.net.NetworkCapabilities;
22 import android.net.NetworkRequest;
23 import android.net.TelephonyNetworkSpecifier;
24 import android.os.Bundle;
25 import android.telephony.SubscriptionManager;
26 import android.util.Log;
27 import android.view.LayoutInflater;
28 import android.view.View;
29 import android.view.View.OnClickListener;
30 import android.view.ViewGroup;
31 import android.widget.Button;
32 
33 import androidx.fragment.app.Fragment;
34 
35 /**
36  * A simple {@link Fragment} subclass. Use the {@link CBS#newInstance} factory method to create an
37  * instance of this fragment.
38  */
39 public class CBS extends Fragment {
40     Button mRelease, mRequest, mPing;
41     Network mNetwork;
42     ConnectivityManager mConnectivityManager;
43     NetworkCallback mProfileCheckNetworkCallback;
44 
CBS()45     public CBS() {
46         // Required empty public constructor
47     }
48 
49     /**
50      * Use this factory method to create a new instance of this fragment using the provided
51      * parameters.
52      *
53      * @param param1 Parameter 1.
54      * @param param2 Parameter 2.
55      * @return A new instance of fragment CBS.
56      */
57     // TODO: Rename and change types and number of parameters
newInstance(String param1, String param2)58     public static CBS newInstance(String param1, String param2) {
59         CBS fragment = new CBS();
60         Bundle args = new Bundle();
61         fragment.setArguments(args);
62         return fragment;
63     }
64 
65     @Override
onCreate(Bundle savedInstanceState)66     public void onCreate(Bundle savedInstanceState) {
67         super.onCreate(savedInstanceState);
68         mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
69     }
70 
71     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)72     public View onCreateView(LayoutInflater inflater, ViewGroup container,
73             Bundle savedInstanceState) {
74         // Inflate the layout for this fragment
75         View view = inflater.inflate(R.layout.fragment_c_b_s, container, false);
76         mProfileCheckNetworkCallback =
77                 new NetworkCallback() {
78             @Override
79             public void onAvailable(final Network network) {
80                 mNetwork = network;
81             }
82         };
83         mRelease = view.findViewById(R.id.releasecbs);
84         mRelease.setOnClickListener(new OnClickListener() {
85             @Override
86             public void onClick(View view) {
87                 try {
88                     mConnectivityManager.unregisterNetworkCallback(
89                         mProfileCheckNetworkCallback);
90                 } catch (Exception e) {
91                     Log.d("SliceTest", "Exception: " + e);
92                 }
93             }
94         });
95         mRequest = view.findViewById(R.id.requestcbs);
96         mRequest.setOnClickListener(new OnClickListener() {
97             @Override
98             public void onClick(View view) {
99                 mProfileCheckNetworkCallback = new NetworkCallback() {
100                     @Override
101                     public void onAvailable(final Network network) {
102                         mNetwork = network;
103                         Log.d("CBS", "onAvailable + " + network);
104                     }
105                 };
106                 NetworkRequest.Builder builder = new NetworkRequest.Builder();
107                 builder.addCapability(NetworkCapabilities.NET_CAPABILITY_CBS);
108                 builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
109                 int subId = SubscriptionManager.getDefaultDataSubscriptionId();
110                 builder.setNetworkSpecifier(new TelephonyNetworkSpecifier.Builder()
111                         .setSubscriptionId(subId).build());
112                 mConnectivityManager.requestNetwork(builder.build(), mProfileCheckNetworkCallback);
113                 Log.d("CBS", "onClick + " + builder.build());
114             }
115         });
116         mPing = view.findViewById(R.id.pingcbs);
117         mPing.setOnClickListener(new OnClickListener() {
118             @Override
119             public void onClick(View view) {
120                 if (mNetwork != null) {
121                     //mNetwork.
122                     try {
123                         new RequestTask().execute(mNetwork);
124                     } catch (Exception e) {
125                         Log.d("SliceTest", "Exception: " + e);
126                     }
127                 }
128             }
129         });
130         return view;
131     }
132 }
133