10a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan/* 20a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Copyright (C) 2015 The Android Open Source Project 30a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * 40a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Licensed under the Apache License, Version 2.0 (the "License"); 50a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * you may not use this file except in compliance with the License. 60a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * You may obtain a copy of the License at 70a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * 80a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * http://www.apache.org/licenses/LICENSE-2.0 90a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * 100a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * Unless required by applicable law or agreed to in writing, software 110a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * distributed under the License is distributed on an "AS IS" BASIS, 120a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * See the License for the specific language governing permissions and 140a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * limitations under the License. 150a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan */ 160a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 170a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanpackage com.android.internal.telephony; 180a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 190a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.content.Context; 20871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajanimport android.database.Cursor; 210a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport android.os.Handler; 22ec334adf4017ca172f44612d01456e671f922344Amit Mahajanimport android.os.IDeviceIdleController; 23199f4fd9f4075d4b2787e4ff918ef90d28f4ff2bJack Yuimport android.os.Looper; 24ec334adf4017ca172f44612d01456e671f922344Amit Mahajanimport android.os.ServiceManager; 254b2c78c078d59466d18a4f7f926bb3bc0eccff9dJack Yuimport android.telephony.AccessNetworkConstants.TransportType; 260a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 270a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; 280a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport com.android.internal.telephony.cdma.EriManager; 290a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanimport com.android.internal.telephony.dataconnection.DcTracker; 30fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunnimport com.android.internal.telephony.imsphone.ImsExternalCallTracker; 31ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.imsphone.ImsPhone; 32ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajanimport com.android.internal.telephony.imsphone.ImsPhoneCallTracker; 33b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajanimport com.android.internal.telephony.uicc.IccCardStatus; 34b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajanimport com.android.internal.telephony.uicc.UiccCard; 35b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajanimport com.android.internal.telephony.uicc.UiccProfile; 360a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 370a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan/** 380a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * This class has one-line methods to instantiate objects only. The purpose is to make code 390a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * unit-test friendly and use this class as a way to do dependency injection. Instantiating objects 400a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan * this way makes it easier to mock them in tests. 410a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan */ 420a567c9ed954f295df83c753239646c6f6a04128Amit Mahajanpublic class TelephonyComponentFactory { 430a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan private static TelephonyComponentFactory sInstance; 440a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 450a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public static TelephonyComponentFactory getInstance() { 460a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan if (sInstance == null) { 470a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan sInstance = new TelephonyComponentFactory(); 480a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 490a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return sInstance; 500a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 510a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 520a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public GsmCdmaCallTracker makeGsmCdmaCallTracker(GsmCdmaPhone phone) { 530a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new GsmCdmaCallTracker(phone); 540a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 550a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 560a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public SmsStorageMonitor makeSmsStorageMonitor(Phone phone) { 570a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new SmsStorageMonitor(phone); 580a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 590a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 600a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public SmsUsageMonitor makeSmsUsageMonitor(Context context) { 610a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new SmsUsageMonitor(context); 620a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 630a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 640a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public ServiceStateTracker makeServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci) { 650a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new ServiceStateTracker(phone, ci); 660a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 670a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 68f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller /** 69f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller * Returns a new {@link NitzStateMachine} instance. 70f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller */ 71f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller public NitzStateMachine makeNitzStateMachine(GsmCdmaPhone phone) { 72f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller return new NitzStateMachine(phone); 73f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller } 74f9e4314c7258d07ee1b995d625d20887d36c94daNeil Fuller 759af99511111eeb5e9930185dc44259502811e3b6fionaxu public SimActivationTracker makeSimActivationTracker(Phone phone) { 769af99511111eeb5e9930185dc44259502811e3b6fionaxu return new SimActivationTracker(phone); 779af99511111eeb5e9930185dc44259502811e3b6fionaxu } 789af99511111eeb5e9930185dc44259502811e3b6fionaxu 790a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public DcTracker makeDcTracker(Phone phone) { 804b2c78c078d59466d18a4f7f926bb3bc0eccff9dJack Yu return new DcTracker(phone, TransportType.WWAN); 810a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 820a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 836a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu public CarrierSignalAgent makeCarrierSignalAgent(Phone phone) { 846a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu return new CarrierSignalAgent(phone); 856a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu } 866a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu 876a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu public CarrierActionAgent makeCarrierActionAgent(Phone phone) { 886a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu return new CarrierActionAgent(phone); 896a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu } 906a7fb078d1cacba7cf2e83b71242bb5c4c27c975fionaxu 91b5c356fee2ce1be13fee506d1cc65927079d7b88fionaxu public CarrierIdentifier makeCarrierIdentifier(Phone phone) { 92b5c356fee2ce1be13fee506d1cc65927079d7b88fionaxu return new CarrierIdentifier(phone); 93b5c356fee2ce1be13fee506d1cc65927079d7b88fionaxu } 94b5c356fee2ce1be13fee506d1cc65927079d7b88fionaxu 950a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public IccPhoneBookInterfaceManager makeIccPhoneBookInterfaceManager(Phone phone) { 960a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new IccPhoneBookInterfaceManager(phone); 970a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 980a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 990a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public IccSmsInterfaceManager makeIccSmsInterfaceManager(Phone phone) { 1000a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new IccSmsInterfaceManager(phone); 1010a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1020a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 103b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajan /** 104b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajan * Create a new UiccProfile object. 105b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajan */ 106b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajan public UiccProfile makeUiccProfile(Context context, CommandsInterface ci, IccCardStatus ics, 10798a7a2b7cd8e0c4ea787e434ed9c6c6d5ddf8d5fAmit Mahajan int phoneId, UiccCard uiccCard, Object lock) { 10898a7a2b7cd8e0c4ea787e434ed9c6c6d5ddf8d5fAmit Mahajan return new UiccProfile(context, ci, ics, phoneId, uiccCard, lock); 109b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajan } 110b8d6fafa17b6be739a61e6fa90cbb186875d0bb0Amit Mahajan 1110a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public EriManager makeEriManager(Phone phone, Context context, int eriFileSource) { 1120a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return new EriManager(phone, context, eriFileSource); 1130a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 1140a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan 11560a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan public WspTypeDecoder makeWspTypeDecoder(byte[] pdu) { 11660a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan return new WspTypeDecoder(pdu); 11760a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan } 11860a81bdb47cf64972c8edf5b0c51e8059765e5a0Amit Mahajan 11927f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan /** 12027f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan * Create a tracker for a single-part SMS. 12127f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan */ 12227f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan public InboundSmsTracker makeInboundSmsTracker(byte[] pdu, long timestamp, int destPort, 123af7bc32573007f2ea1185fc5cb4f3980e1ff1304fionaxu boolean is3gpp2, boolean is3gpp2WapPdu, String address, String displayAddr, 124af7bc32573007f2ea1185fc5cb4f3980e1ff1304fionaxu String messageBody) { 1256e4abd849e12860a7459f7ec74496ca02b9d7ee0Amit Mahajan return new InboundSmsTracker(pdu, timestamp, destPort, is3gpp2, is3gpp2WapPdu, address, 126af7bc32573007f2ea1185fc5cb4f3980e1ff1304fionaxu displayAddr, messageBody); 12727f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan } 12827f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan 12927f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan /** 13027f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan * Create a tracker for a multi-part SMS. 13127f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan */ 13227f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan public InboundSmsTracker makeInboundSmsTracker(byte[] pdu, long timestamp, int destPort, 133af7bc32573007f2ea1185fc5cb4f3980e1ff1304fionaxu boolean is3gpp2, String address, String displayAddr, int referenceNumber, int sequenceNumber, 1346e4abd849e12860a7459f7ec74496ca02b9d7ee0Amit Mahajan int messageCount, boolean is3gpp2WapPdu, String messageBody) { 135af7bc32573007f2ea1185fc5cb4f3980e1ff1304fionaxu return new InboundSmsTracker(pdu, timestamp, destPort, is3gpp2, address, displayAddr, 136af7bc32573007f2ea1185fc5cb4f3980e1ff1304fionaxu referenceNumber, sequenceNumber, messageCount, is3gpp2WapPdu, messageBody); 13727f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan } 13827f471647b2da3ff50620a766c048ebef8d45ae1Amit Mahajan 139871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan /** 140871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan * Create a tracker from a row of raw table 141871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan */ 142871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan public InboundSmsTracker makeInboundSmsTracker(Cursor cursor, boolean isCurrentFormat3gpp2) { 143871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan return new InboundSmsTracker(cursor, isCurrentFormat3gpp2); 144871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan } 145871a2ec0bc8e8198aeb1913e7bf6cb22a7ff3604Amit Mahajan 146ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan public ImsPhoneCallTracker makeImsPhoneCallTracker(ImsPhone imsPhone) { 147ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan return new ImsPhoneCallTracker(imsPhone); 148ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan } 149ecac744a4e585e3c7af95ffa06fa3e711131200cAmit Mahajan 15091c714c06cc426b4f1af05a758c4d560b16f6d24Tyler Gunn public ImsExternalCallTracker makeImsExternalCallTracker(ImsPhone imsPhone) { 15193da8529345711fd1a5617f3c8b15c0921eececbTyler Gunn 15291c714c06cc426b4f1af05a758c4d560b16f6d24Tyler Gunn return new ImsExternalCallTracker(imsPhone); 153fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn } 154fec523bdc5d2b6dd90212c8076bf34bcc2ab08b2Tyler Gunn 155b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker /** 156b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker * Create an AppSmsManager for per-app SMS message. 157b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker */ 158b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker public AppSmsManager makeAppSmsManager(Context context) { 159b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker return new AppSmsManager(context); 160b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker } 161b4a28109bedc71afa5465247a86473a86d4b31faChad Brubaker 162baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu public DeviceStateMonitor makeDeviceStateMonitor(Phone phone) { 163baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu return new DeviceStateMonitor(phone); 164baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu } 165baecdb610b30a5d4b35345f8fc63fcbc2133c149Jack Yu 1660a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan public CdmaSubscriptionSourceManager 1670a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan getCdmaSubscriptionSourceManagerInstance(Context context, CommandsInterface ci, Handler h, 1680a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan int what, Object obj) { 1690a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan return CdmaSubscriptionSourceManager.getInstance(context, ci, h, what, obj); 1700a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan } 171ec334adf4017ca172f44612d01456e671f922344Amit Mahajan 172ec334adf4017ca172f44612d01456e671f922344Amit Mahajan public IDeviceIdleController getIDeviceIdleController() { 173ec334adf4017ca172f44612d01456e671f922344Amit Mahajan return IDeviceIdleController.Stub.asInterface( 174ec334adf4017ca172f44612d01456e671f922344Amit Mahajan ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); 175ec334adf4017ca172f44612d01456e671f922344Amit Mahajan } 176199f4fd9f4075d4b2787e4ff918ef90d28f4ff2bJack Yu 177199f4fd9f4075d4b2787e4ff918ef90d28f4ff2bJack Yu public LocaleTracker makeLocaleTracker(Phone phone, Looper looper) { 178199f4fd9f4075d4b2787e4ff918ef90d28f4ff2bJack Yu return new LocaleTracker(phone, looper); 179199f4fd9f4075d4b2787e4ff918ef90d28f4ff2bJack Yu } 1800a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan} 181