Trying to lock screen rotation when displaying dialogs
<p>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:</p>

<pre> <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;
     } </code></pre>

<p>I call mLockScreenRotation() when I launch any dialogs and I call mUnlockScreenRotation() in my handler and in my DialogInterface.OnClickListener's.  </p>

<p>Sometimes my screen remains locked, but it is not consistent. Any suggestions or ideas why or how to handle this?</p>

<p>Thanks in advance for any help!</p>

<p>Ammendment:  code where I am locking my screen:</p>

<pre> 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() </pre>
