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