From f5b99060843d791ece129463dcc5e377cd89c072 Mon Sep 17 00:00:00 2001 From: mingwax Date: Mon, 7 Nov 2016 11:07:37 +0800 Subject: SnapdragonCamera: Fix camera can`t enter setting in pattern lock RootCause: Missing flag of WindowManager.LayoutParames in SettingsActivity.java and SceneModeActivity.java. Solution: (1) Add windowManager.LayoutParams.FLAG_SHOW_WHEN _LOCKED in SettingsActivity.java and SceneModeActivity.java. (2) Change SettingsManager`s single instance, and guarantee SettingsManager only one instance. (3) When SettingsActivity.java and SceneModeActivity.java is invisible status, finish them and ensure data is updated in a timely manner. Change-Id: I3ac24b9b181055382849550e585d3be726e71595 CRs-Fixed: 1084871 --- src/com/android/camera/CameraActivity.java | 6 ------ src/com/android/camera/CaptureUI.java | 1 + src/com/android/camera/SceneModeActivity.java | 23 +++++++++++++++++++++++ src/com/android/camera/SettingsActivity.java | 17 +++++++++++++++++ src/com/android/camera/SettingsManager.java | 3 ++- src/com/android/camera/app/CameraApp.java | 2 ++ src/com/android/camera/util/CameraUtil.java | 2 ++ 7 files changed, 47 insertions(+), 7 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 98fddcbe8..d8444fb7e 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -1486,8 +1486,6 @@ public class CameraActivity extends Activity getWindow().requestFeature(Window.FEATURE_ACTION_BAR); - SettingsManager.createInstance(this); - LayoutInflater inflater = getLayoutInflater(); View rootLayout = inflater.inflate(R.layout.camera, null, false); mCameraRootFrame = (FrameLayout)rootLayout.findViewById(R.id.camera_root_frame); @@ -1829,10 +1827,6 @@ public class CameraActivity extends Activity mWakeLock.release(); Log.d(TAG, "wake lock release"); } - SettingsManager settingsMngr = SettingsManager.getInstance(); - if (settingsMngr != null) { - settingsMngr.destroyInstance(); - } if (mCursor != null) { getContentResolver().unregisterContentObserver(mLocalImagesObserver); getContentResolver().unregisterContentObserver(mLocalVideosObserver); diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index ae67007d0..4866a6b6a 100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -526,6 +526,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, clearFocus(); removeFilterMenu(false); Intent intent = new Intent(mActivity, SceneModeActivity.class); + intent.putExtra(CameraUtil.KEY_IS_SECURE_CAMERA, mActivity.isSecureCamera()); mActivity.startActivity(intent); } }); diff --git a/src/com/android/camera/SceneModeActivity.java b/src/com/android/camera/SceneModeActivity.java index 09ad391c1..9e0e59506 100644 --- a/src/com/android/camera/SceneModeActivity.java +++ b/src/com/android/camera/SceneModeActivity.java @@ -38,6 +38,8 @@ import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; @@ -49,6 +51,7 @@ import org.codeaurora.snapcam.R; import com.android.camera.ui.DotsView; import com.android.camera.ui.DotsViewItem; import com.android.camera.ui.RotateImageView; +import com.android.camera.util.CameraUtil; public class SceneModeActivity extends Activity { private ViewPager mPager; @@ -86,6 +89,11 @@ public class SceneModeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + final boolean isSecureCamera = getIntent().getBooleanExtra( + CameraUtil.KEY_IS_SECURE_CAMERA, false); + if (isSecureCamera) { + setShowInLockScreen(); + } setContentView(R.layout.scene_mode_menu_layout); mSettingsManager = SettingsManager.getInstance(); @@ -137,6 +145,7 @@ public class SceneModeActivity extends Activity { @Override public void onClick(View v) { Intent intent = new Intent(getBaseContext(), SettingsActivity.class); + intent.putExtra(CameraUtil.KEY_IS_SECURE_CAMERA, isSecureCamera); startActivity(intent); finish(); } @@ -171,6 +180,20 @@ public class SceneModeActivity extends Activity { public int getCurrentScene() { return mCurrentScene; } + + private void setShowInLockScreen() { + // Change the window flags so that secure camera can show when locked + Window win = getWindow(); + WindowManager.LayoutParams params = win.getAttributes(); + params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; + win.setAttributes(params); + } + + @Override + protected void onStop() { + super.onStop(); + finish(); + } } class MyPagerAdapter extends PagerAdapter { diff --git a/src/com/android/camera/SettingsActivity.java b/src/com/android/camera/SettingsActivity.java index 32c6b5cad..d4f5ac13a 100644 --- a/src/com/android/camera/SettingsActivity.java +++ b/src/com/android/camera/SettingsActivity.java @@ -39,10 +39,13 @@ import android.preference.PreferenceGroup; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.preference.SwitchPreference; +import android.view.Window; +import android.view.WindowManager; import android.util.Log; import android.widget.Toast; import org.codeaurora.snapcam.R; +import com.android.camera.util.CameraUtil; import java.util.List; import java.util.Map; @@ -86,6 +89,11 @@ public class SettingsActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + final boolean isSecureCamera = getIntent().getBooleanExtra( + CameraUtil.KEY_IS_SECURE_CAMERA, false); + if (isSecureCamera) { + setShowInLockScreen(); + } mSettingsManager = SettingsManager.getInstance(); addPreferencesFromResource(R.xml.setting_menu_preferences); @@ -213,5 +221,14 @@ public class SettingsActivity extends PreferenceActivity { protected void onStop() { super.onStop(); mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener); + finish(); + } + + private void setShowInLockScreen() { + // Change the window flags so that secure camera can show when locked + Window win = getWindow(); + WindowManager.LayoutParams params = win.getAttributes(); + params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; + win.setAttributes(params); } } \ No newline at end of file diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index e076b3824..051f5db09 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -55,6 +55,7 @@ import com.android.camera.imageprocessor.filter.UbifocusFilter; import com.android.camera.ui.ListMenu; import com.android.camera.ui.PanoCaptureProcessView; import com.android.camera.util.SettingTranslation; +import com.android.camera.app.CameraApp; import org.codeaurora.snapcam.R; import org.json.JSONException; @@ -193,7 +194,7 @@ public class SettingsManager implements ListMenu.SettingsListener { public static SettingsManager createInstance(Context context) { if (sInstance == null) { - sInstance = new SettingsManager(context); + sInstance = new SettingsManager(context.getApplicationContext()); } return sInstance; } diff --git a/src/com/android/camera/app/CameraApp.java b/src/com/android/camera/app/CameraApp.java index b46d615b0..837e22cd1 100644 --- a/src/com/android/camera/app/CameraApp.java +++ b/src/com/android/camera/app/CameraApp.java @@ -22,6 +22,7 @@ import android.app.Application; import com.android.camera.SDCard; import com.android.camera.util.CameraUtil; import com.android.camera.util.UsageStatistics; +import com.android.camera.SettingsManager; public class CameraApp extends Application { private static long mMaxSystemMemory; @@ -37,6 +38,7 @@ public class CameraApp extends Application { if(mMaxSystemMemory <= LOW_MEMORY_DEVICE_THRESHOLD) { mIsLowMemoryDevice = true; } + SettingsManager.createInstance(this); UsageStatistics.initialize(this); CameraUtil.initialize(this); SDCard.initialize(this); diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java index 1cdfd285a..28cb8e3b2 100644 --- a/src/com/android/camera/util/CameraUtil.java +++ b/src/com/android/camera/util/CameraUtil.java @@ -124,6 +124,8 @@ public class CameraUtil { /** Has to be in sync with the receiving MovieActivity. */ public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back"; + /** Judge the value whether is from lockscreen come in or not */ + public static final String KEY_IS_SECURE_CAMERA = "is_secure_camera"; public static final int RATIO_UNKNOWN = 0; public static final int RATIO_16_9 = 1; -- cgit v1.2.3