Initial checkin of AOSP Messaging app.
b/23110861 Change-Id: I9aa980d7569247d6b2ca78f5dcb4502e1eaadb8a
This commit is contained in:
245
src/com/android/messaging/FactoryImpl.java
Normal file
245
src/com/android/messaging/FactoryImpl.java
Normal file
@@ -0,0 +1,245 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.messaging;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Process;
|
||||
import android.telephony.SmsManager;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import com.android.messaging.datamodel.DataModel;
|
||||
import com.android.messaging.datamodel.DataModelImpl;
|
||||
import com.android.messaging.datamodel.MemoryCacheManager;
|
||||
import com.android.messaging.datamodel.ParticipantRefresh.ContactContentObserver;
|
||||
import com.android.messaging.datamodel.data.ParticipantData;
|
||||
import com.android.messaging.datamodel.media.BugleMediaCacheManager;
|
||||
import com.android.messaging.datamodel.media.MediaCacheManager;
|
||||
import com.android.messaging.datamodel.media.MediaResourceManager;
|
||||
import com.android.messaging.sms.BugleCarrierConfigValuesLoader;
|
||||
import com.android.messaging.ui.UIIntents;
|
||||
import com.android.messaging.ui.UIIntentsImpl;
|
||||
import com.android.messaging.util.Assert;
|
||||
import com.android.messaging.util.BugleApplicationPrefs;
|
||||
import com.android.messaging.util.BugleGservices;
|
||||
import com.android.messaging.util.BugleGservicesImpl;
|
||||
import com.android.messaging.util.BuglePrefs;
|
||||
import com.android.messaging.util.BugleSubscriptionPrefs;
|
||||
import com.android.messaging.util.BugleWidgetPrefs;
|
||||
import com.android.messaging.util.LogUtil;
|
||||
import com.android.messaging.util.MediaUtil;
|
||||
import com.android.messaging.util.MediaUtilImpl;
|
||||
import com.android.messaging.util.OsUtil;
|
||||
import com.android.messaging.util.PhoneUtils;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
class FactoryImpl extends Factory {
|
||||
private BugleApplication mApplication;
|
||||
private DataModel mDataModel;
|
||||
private BugleGservices mBugleGservices;
|
||||
private BugleApplicationPrefs mBugleApplicationPrefs;
|
||||
private BugleWidgetPrefs mBugleWidgetPrefs;
|
||||
private Context mApplicationContext;
|
||||
private UIIntents mUIIntents;
|
||||
private MemoryCacheManager mMemoryCacheManager;
|
||||
private MediaResourceManager mMediaResourceManager;
|
||||
private MediaCacheManager mMediaCacheManager;
|
||||
private ContactContentObserver mContactContentObserver;
|
||||
private PhoneUtils mPhoneUtils;
|
||||
private MediaUtil mMediaUtil;
|
||||
private SparseArray<BugleSubscriptionPrefs> mSubscriptionPrefs;
|
||||
private BugleCarrierConfigValuesLoader mCarrierConfigValuesLoader;
|
||||
|
||||
// Cached instance for Pre-L_MR1
|
||||
private static final Object PHONEUTILS_INSTANCE_LOCK = new Object();
|
||||
private static PhoneUtils sPhoneUtilsInstancePreLMR1 = null;
|
||||
// Cached subId->instance for L_MR1 and beyond
|
||||
private static final ConcurrentHashMap<Integer, PhoneUtils> sPhoneUtilsInstanceCacheLMR1 =
|
||||
new ConcurrentHashMap<>();
|
||||
|
||||
private FactoryImpl() {
|
||||
}
|
||||
|
||||
public static Factory register(final Context applicationContext,
|
||||
final BugleApplication application) {
|
||||
// This only gets called once (from BugleApplication.onCreate), but its not called in tests.
|
||||
Assert.isTrue(!sRegistered);
|
||||
Assert.isNull(Factory.get());
|
||||
|
||||
final FactoryImpl factory = new FactoryImpl();
|
||||
Factory.setInstance(factory);
|
||||
sRegistered = true;
|
||||
|
||||
// At this point Factory is published. Services can now get initialized and depend on
|
||||
// Factory.get().
|
||||
factory.mApplication = application;
|
||||
factory.mApplicationContext = applicationContext;
|
||||
factory.mMemoryCacheManager = new MemoryCacheManager();
|
||||
factory.mMediaCacheManager = new BugleMediaCacheManager();
|
||||
factory.mMediaResourceManager = new MediaResourceManager();
|
||||
factory.mBugleGservices = new BugleGservicesImpl(applicationContext);
|
||||
factory.mBugleApplicationPrefs = new BugleApplicationPrefs(applicationContext);
|
||||
factory.mDataModel = new DataModelImpl(applicationContext);
|
||||
factory.mBugleWidgetPrefs = new BugleWidgetPrefs(applicationContext);
|
||||
factory.mUIIntents = new UIIntentsImpl();
|
||||
factory.mContactContentObserver = new ContactContentObserver();
|
||||
factory.mMediaUtil = new MediaUtilImpl();
|
||||
factory.mSubscriptionPrefs = new SparseArray<BugleSubscriptionPrefs>();
|
||||
factory.mCarrierConfigValuesLoader = new BugleCarrierConfigValuesLoader(applicationContext);
|
||||
|
||||
Assert.initializeGservices(factory.mBugleGservices);
|
||||
LogUtil.initializeGservices(factory.mBugleGservices);
|
||||
|
||||
if (OsUtil.hasRequiredPermissions()) {
|
||||
factory.onRequiredPermissionsAcquired();
|
||||
}
|
||||
|
||||
return factory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequiredPermissionsAcquired() {
|
||||
if (sInitialized) {
|
||||
return;
|
||||
}
|
||||
sInitialized = true;
|
||||
|
||||
mApplication.initializeSync(this);
|
||||
|
||||
final Thread asyncInitialization = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
|
||||
mApplication.initializeAsync(FactoryImpl.this);
|
||||
}
|
||||
};
|
||||
asyncInitialization.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Context getApplicationContext() {
|
||||
return mApplicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataModel getDataModel() {
|
||||
return mDataModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BugleGservices getBugleGservices() {
|
||||
return mBugleGservices;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuglePrefs getApplicationPrefs() {
|
||||
return mBugleApplicationPrefs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuglePrefs getWidgetPrefs() {
|
||||
return mBugleWidgetPrefs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuglePrefs getSubscriptionPrefs(int subId) {
|
||||
subId = PhoneUtils.getDefault().getEffectiveSubId(subId);
|
||||
BugleSubscriptionPrefs pref = mSubscriptionPrefs.get(subId);
|
||||
if (pref == null) {
|
||||
synchronized (this) {
|
||||
if ((pref = mSubscriptionPrefs.get(subId)) == null) {
|
||||
pref = new BugleSubscriptionPrefs(getApplicationContext(), subId);
|
||||
mSubscriptionPrefs.put(subId, pref);
|
||||
}
|
||||
}
|
||||
}
|
||||
return pref;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UIIntents getUIIntents() {
|
||||
return mUIIntents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MemoryCacheManager getMemoryCacheManager() {
|
||||
return mMemoryCacheManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MediaResourceManager getMediaResourceManager() {
|
||||
return mMediaResourceManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MediaCacheManager getMediaCacheManager() {
|
||||
return mMediaCacheManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContactContentObserver getContactContentObserver() {
|
||||
return mContactContentObserver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PhoneUtils getPhoneUtils(int subId) {
|
||||
if (OsUtil.isAtLeastL_MR1()) {
|
||||
if (subId == ParticipantData.DEFAULT_SELF_SUB_ID) {
|
||||
subId = SmsManager.getDefaultSmsSubscriptionId();
|
||||
}
|
||||
if (subId < 0) {
|
||||
LogUtil.w(LogUtil.BUGLE_TAG, "PhoneUtils.getForLMR1(): invalid subId = " + subId);
|
||||
subId = ParticipantData.DEFAULT_SELF_SUB_ID;
|
||||
}
|
||||
PhoneUtils instance = sPhoneUtilsInstanceCacheLMR1.get(subId);
|
||||
if (instance == null) {
|
||||
instance = new PhoneUtils.PhoneUtilsLMR1(subId);
|
||||
sPhoneUtilsInstanceCacheLMR1.putIfAbsent(subId, instance);
|
||||
}
|
||||
return instance;
|
||||
} else {
|
||||
Assert.isTrue(subId == ParticipantData.DEFAULT_SELF_SUB_ID);
|
||||
if (sPhoneUtilsInstancePreLMR1 == null) {
|
||||
synchronized (PHONEUTILS_INSTANCE_LOCK) {
|
||||
if (sPhoneUtilsInstancePreLMR1 == null) {
|
||||
sPhoneUtilsInstancePreLMR1 = new PhoneUtils.PhoneUtilsPreLMR1();
|
||||
}
|
||||
}
|
||||
}
|
||||
return sPhoneUtilsInstancePreLMR1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reclaimMemory() {
|
||||
mMemoryCacheManager.reclaimMemory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResume() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public MediaUtil getMediaUtil() {
|
||||
return mMediaUtil;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BugleCarrierConfigValuesLoader getCarrierConfigValuesLoader() {
|
||||
return mCarrierConfigValuesLoader;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user