I am trying to lock my screen in whatever orientation the user is in when the application launches a dialog and then unlocking it when the dialog dismisses. Here is my lock and unlock code:
// Sets screen rotation as fixed to current rotation setting
private void mLockScreenRotation() {
Log.d("####################", "screen orientation is " + mContext.getResources().getConfiguration().orientation);
// Stop the screen orientation changing during an event
if (mContext.getResources().getConfiguration().orientation == 1)
((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else ((Activity) mContext).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// switch (mContext.getResources().getConfiguration().orientation)
// {
// case Configuration.ORIENTATION_PORTRAIT:
// ((Activity) mContext).setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// break;
// case Configuration.ORIENTATION_LANDSCAPE:
// ((Activity) mContext).setRequestedOrientation(
// ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// break;
// }
}
// allow screen rotations again
private void mUnLockScreenRotation() {
this.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
mIsScreenRotationLocked = false;
}
I call mLockScreenRotation() when I launch any dialogs and I call mUnlockScreenRotation() in my handler and in my DialogInterface.OnClickListener's.
Sometimes my screen remains locked, but it is not consistent. Any suggestions or ideas why or how to handle this?
Thanks in advance for any help!
Ammendment: code where I am locking my screen:
public void displayProgressDialog(){ mLockScreenRotation(); // Get local handle on class progress dialog for optimization purposes ProgressDialog temp = mProgressDialog = new ProgressDialog(this); // Get message string (for some reason this dialog can't handle res IDs for messages) String message = getString(R.string.downloading); // Set some paramaters temp.setIndeterminate(true); temp.setTitle(R.string.weather_data); temp.setMessage(message); temp.setCancelable(false); temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.MEMORY_TYPE_PUSH_BUFFERS /*WindowManager.LayoutParams.FLAG_BLUR_BEHIND*/); temp.show(); } public void displayLocationSearchDialog(){ mLockScreenRotation(); // Get local handle on class progress dialog for optimization purposes ProgressDialog temp = mCoordinateSearchDialog = new ProgressDialog(this); // Get message string (for some reason this dialog can't handle res IDs for messages) String message = getString(R.string.searching); // Set some paramaters temp.setIndeterminate(true); temp.setTitle(R.string.location_search); temp.setMessage(message); temp.setCancelable(false); temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); temp.show(); } public void showDatafeedFailedDialog(){ mLockScreenRotation(); new AlertDialog.Builder(this) .setTitle(R.string.network_error) .setMessage(R.string.weather_data_failed) .setPositiveButton(R.string.try_again, mTryAgainListener) .setNegativeButton(R.string.dismiss, null) .create() .show(); } public void showCoordinateSearchFailedDialog(){ mLockScreenRotation(); new AlertDialog.Builder(this) .setTitle(R.string.network_error) .setMessage(R.string.location_search_failed) .setPositiveButton(R.string.try_again, mCoordTryAgainListener) .setNegativeButton(R.string.dismiss, null) .create() .show(); } private void showGpsAlertDialog(){ mLockScreenRotation(); new AlertDialog.Builder(this) .setTitle(R.string.gps_error) .setMessage(R.string.gps_error_details) .setNeutralButton(R.string.dismiss, null) .setPositiveButton(R.string.go_to_settings, mToSettingsListener) .create() .show(); } private void showGpsSearchingDialog(){ mLockScreenRotation(); ProgressDialog temp = mGpsSearchAlertDialog = new ProgressDialog(this); String message = getString(R.string.location_services_details); String btnText = getString(R.string.cancel); temp.setIndeterminate(true); temp.setTitle(R.string.location_services); temp.setMessage(message); temp.setButton(btnText, mCancelGpsSearchListener); temp.setCancelable(true); temp.getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); temp.show(); } private void showGpsTimeoutAlertDialog(){ mLockScreenRotation(); new AlertDialog.Builder(this) .setTitle(R.string.gps_error) .setMessage(R.string.gps_timeout_message) .setPositiveButton(R.string.try_again, mGpsTimeoutListener) .setNegativeButton(R.string.dismiss, mGpsTimeoutListener) // check this line with free if still no good .create() .show(); } private void showWeatherAlertDialog(){ Log.d("############", "weather alert dialog"); mLockScreenRotation(); String message = null; if(mWD.getWarningTypes() == null) return; int cnt = 0; int size = mWD.getWarningTypes().size() - 1; for(String warningType : mWD.getWarningTypes()){ if(cnt == 0) message = warningType; else if(cnt == size) message += " and " + warningType; else message += ", " + warningType; cnt++; } new AlertDialog.Builder(this) .setTitle(R.string.watches_and_warnings) .setMessage(message) .setPositiveButton(R.string.go_to_accuweather, mToAlertWebListener) .setNeutralButton(R.string.dismiss, null) .create() .show(); } private void showNeedLocationAlertDialog() { mLockScreenRotation(); new AlertDialog.Builder(this).setTitle(R.string.error).setMessage( R.string.add_location).setNeutralButton(R.string.dismiss, null) .setPositiveButton(R.string.okay, mToLocationSearchListener) .create().show(); } private void showConnectivityAlertDialog() { mLockScreenRotation(); new AlertDialog.Builder(this).setTitle(R.string.network_error) .setMessage(R.string.no_connection).setNeutralButton( R.string.dismiss, null).create().show(); } private void showCurrentUrlInBrowser(){ // Show current conditions web page if(mWD.getURL() == null || mWD.getURL().length()
mLockScreenRotation
. – user432209