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