From dbfa594f2b588c8b52e87eb5f90c0df05bde6a7e Mon Sep 17 00:00:00 2001 From: junjiez Date: Wed, 7 Sep 2016 11:27:18 +0800 Subject: SnapdragonCamera:Fix instance of SettingsManager is null When there are two CameraActivities, one of them is destroyed, the instance of settingsManager will be destroyed too. When the other CameraActivity invokes SettingsManager.getInstance(), it may return null and cause exceptions.Create and hold a instance of SettingsManager in each CameraActivity to make sure it's not null. Change-Id: Id2c355bf63f61e09f914113082db2876f28b9658 CRs-Fixed: 1060909 --- src/com/android/camera/CameraActivity.java | 14 ++++++++------ src/com/android/camera/CaptureModule.java | 2 +- src/com/android/camera/CaptureUI.java | 2 +- src/com/android/camera/SettingsManager.java | 20 +------------------- 4 files changed, 11 insertions(+), 27 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index a808dbf60..6c2360d8a 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -235,6 +235,7 @@ public class CameraActivity extends Activity private Intent mPanoramaShareIntent; private LocalMediaObserver mLocalImagesObserver; private LocalMediaObserver mLocalVideosObserver; + private SettingsManager mSettingsManager; private final int DEFAULT_SYSTEM_UI_VISIBILITY = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; @@ -1435,7 +1436,7 @@ public class CameraActivity extends Activity getWindow().requestFeature(Window.FEATURE_ACTION_BAR); - SettingsManager.createInstance(this); + mSettingsManager = new SettingsManager(this); LayoutInflater inflater = getLayoutInflater(); View rootLayout = inflater.inflate(R.layout.camera, null, false); @@ -1472,7 +1473,7 @@ public class CameraActivity extends Activity } } - boolean cam2on = SettingsManager.getInstance().isCamera2On(); + boolean cam2on = mSettingsManager.isCamera2On(); if (cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX) moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX; @@ -1775,9 +1776,8 @@ public class CameraActivity extends Activity mWakeLock.release(); Log.d(TAG, "wake lock release"); } - SettingsManager settingsMngr = SettingsManager.getInstance(); - if (settingsMngr != null) { - settingsMngr.destroyInstance(); + if (mSettingsManager != null) { + mSettingsManager = null; } if (mCursor != null) { getContentResolver().unregisterContentObserver(mLocalImagesObserver); @@ -1936,7 +1936,7 @@ public class CameraActivity extends Activity @Override public void onModuleSelected(int moduleIndex) { - boolean cam2on = SettingsManager.getInstance().isCamera2On(); + boolean cam2on = mSettingsManager.isCamera2On(); mForceReleaseCamera = cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX; if (mForceReleaseCamera) { moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX; @@ -2246,4 +2246,6 @@ public class CameraActivity extends Activity public CameraModule getCurrentModule() { return mCurrentModule; } + + public SettingsManager getSettingsManager() {return mSettingsManager;} } diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 1a7811000..0ae9c5ef1 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -902,7 +902,7 @@ public class CaptureModule implements CameraModule, PhotoController, @Override public void init(CameraActivity activity, View parent) { mActivity = activity; - mSettingsManager = SettingsManager.getInstance(); + mSettingsManager = activity.getSettingsManager(); mSettingsManager.registerListener(this); mSettingsManager.init(); mFirstPreviewLoaded = false; diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index cf3ca6d3a..69d0572fe 100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -261,7 +261,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, mActivity = activity; mModule = module; mRootView = parent; - mSettingsManager = SettingsManager.getInstance(); + mSettingsManager = activity.getSettingsManager(); mSettingsManager.registerListener(this); mActivity.getLayoutInflater().inflate(R.layout.capture_module, (ViewGroup) mRootView, true); diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index c8f3f8c7b..f4162c79f 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -120,7 +120,6 @@ public class SettingsManager implements ListMenu.SettingsListener { public static final String KEY_SHUTTER_SOUND = "pref_camera2_shutter_sound_key"; private static final String TAG = "SnapCam_SettingsManager"; - private static SettingsManager sInstance; private ArrayList mCharacteristics; private ArrayList mListeners; private Map mValuesMap; @@ -133,7 +132,7 @@ public class SettingsManager implements ListMenu.SettingsListener { private JSONObject mDependency; private int mCameraId; - private SettingsManager(Context context) { + public SettingsManager(Context context) { mListeners = new ArrayList<>(); mCharacteristics = new ArrayList<>(); mContext = context; @@ -173,23 +172,6 @@ public class SettingsManager implements ListMenu.SettingsListener { mDependency = parseJson("dependency.json"); } - public static SettingsManager createInstance(Context context) { - if (sInstance == null) { - sInstance = new SettingsManager(context); - } - return sInstance; - } - - public static SettingsManager getInstance() { - return sInstance; - } - - public void destroyInstance() { - if (sInstance != null) { - sInstance = null; - } - } - public List getDisabledList() { List list = new ArrayList<>(); Set keySet = mValuesMap.keySet(); -- cgit v1.2.3