VpnDialogs: fix screen flickering when popping up dialogs.

Bug: 5699057
Change-Id: Iad1b32cafa32f98b27b6c96a63e1e9d97908983a
diff --git a/packages/VpnDialogs/AndroidManifest.xml b/packages/VpnDialogs/AndroidManifest.xml
index 8e062b7..46c0f83 100644
--- a/packages/VpnDialogs/AndroidManifest.xml
+++ b/packages/VpnDialogs/AndroidManifest.xml
@@ -5,7 +5,7 @@
     <application android:label="VpnDialogs"
             android:allowBackup="false" >
         <activity android:name=".ConfirmDialog"
-                android:theme="@style/transparent">
+                android:theme="@*android:style/Theme.Holo.Dialog.Alert">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.DEFAULT"/>
@@ -13,7 +13,7 @@
         </activity>
 
         <activity android:name=".ManageDialog"
-                android:theme="@style/transparent"
+                android:theme="@*android:style/Theme.Holo.Dialog.Alert"
                 android:noHistory="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
diff --git a/packages/VpnDialogs/res/values/styles.xml b/packages/VpnDialogs/res/values/styles.xml
index cf10596..e3469ec 100644
--- a/packages/VpnDialogs/res/values/styles.xml
+++ b/packages/VpnDialogs/res/values/styles.xml
@@ -15,13 +15,6 @@
 -->
 
 <resources>
-
-    <style name="transparent">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:windowNoTitle">true</item>
-        <item name="android:windowIsFloating">true</item>
-    </style>
-
     <style name="label">
         <item name="android:gravity">center_vertical|right</item>
         <item name="android:paddingRight">2mm</item>
diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
index c7b4a5f..13d8019 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
@@ -16,8 +16,6 @@
 
 package com.android.vpndialogs;
 
-import android.app.Activity;
-import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -32,15 +30,16 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
-public class ConfirmDialog extends Activity implements CompoundButton.OnCheckedChangeListener,
-        DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
+import com.android.internal.app.AlertActivity;
+
+public class ConfirmDialog extends AlertActivity implements
+        CompoundButton.OnCheckedChangeListener, DialogInterface.OnClickListener {
     private static final String TAG = "VpnConfirm";
 
     private String mPackage;
 
     private IConnectivityManager mService;
 
-    private AlertDialog mDialog;
     private Button mButton;
 
     @Override
@@ -67,18 +66,17 @@
                     getString(R.string.prompt, app.loadLabel(pm)));
             ((CompoundButton) view.findViewById(R.id.check)).setOnCheckedChangeListener(this);
 
-            mDialog = new AlertDialog.Builder(this)
-                    .setIcon(android.R.drawable.ic_dialog_alert)
-                    .setTitle(android.R.string.dialog_alert_title)
-                    .setView(view)
-                    .setPositiveButton(android.R.string.ok, this)
-                    .setNegativeButton(android.R.string.cancel, this)
-                    .setCancelable(false)
-                    .create();
-            mDialog.setOnDismissListener(this);
-            mDialog.show();
+            mAlertParams.mIconId = android.R.drawable.ic_dialog_alert;
+            mAlertParams.mTitle = getText(android.R.string.dialog_alert_title);
+            mAlertParams.mPositiveButtonText = getText(android.R.string.ok);
+            mAlertParams.mPositiveButtonListener = this;
+            mAlertParams.mNegativeButtonText = getText(android.R.string.cancel);
+            mAlertParams.mNegativeButtonListener = this;
+            mAlertParams.mView = view;
+            setupAlert();
 
-            mButton = mDialog.getButton(DialogInterface.BUTTON_POSITIVE);
+            getWindow().setCloseOnTouchOutside(false);
+            mButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
             mButton.setEnabled(false);
         } catch (Exception e) {
             Log.e(TAG, "onResume", e);
@@ -87,12 +85,7 @@
     }
 
     @Override
-    protected void onPause() {
-        super.onPause();
-        if (mDialog != null) {
-            mDialog.setOnDismissListener(null);
-            mDialog.dismiss();
-        }
+    public void onBackPressed() {
     }
 
     @Override
@@ -103,16 +96,11 @@
     @Override
     public void onClick(DialogInterface dialog, int which) {
         try {
-            if (which == AlertDialog.BUTTON_POSITIVE && mService.prepareVpn(null, mPackage)) {
+            if (which == DialogInterface.BUTTON_POSITIVE && mService.prepareVpn(null, mPackage)) {
                 setResult(RESULT_OK);
             }
         } catch (Exception e) {
             Log.e(TAG, "onClick", e);
         }
     }
-
-    @Override
-    public void onDismiss(DialogInterface dialog) {
-        finish();
-    }
 }
diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
index 7fb1417..2de0251 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
@@ -16,8 +16,6 @@
 
 package com.android.vpndialogs;
 
-import android.app.Activity;
-import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -35,20 +33,20 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.app.AlertActivity;
 import com.android.internal.net.VpnConfig;
 
 import java.io.DataInputStream;
 import java.io.FileInputStream;
 
-public class ManageDialog extends Activity implements Handler.Callback,
-        DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
+public class ManageDialog extends AlertActivity implements
+        DialogInterface.OnClickListener, Handler.Callback {
     private static final String TAG = "VpnManage";
 
     private VpnConfig mConfig;
 
     private IConnectivityManager mService;
 
-    private AlertDialog mDialog;
     private TextView mDuration;
     private TextView mDataTransmitted;
     private TextView mDataReceived;
@@ -80,31 +78,24 @@
             mDataReceived = (TextView) view.findViewById(R.id.data_received);
 
             if (mConfig.user.equals(VpnConfig.LEGACY_VPN)) {
-                mDialog = new AlertDialog.Builder(this)
-                        .setIcon(android.R.drawable.ic_dialog_info)
-                        .setTitle(R.string.legacy_title)
-                        .setView(view)
-                        .setNeutralButton(R.string.disconnect, this)
-                        .setNegativeButton(android.R.string.cancel, this)
-                        .create();
+                mAlertParams.mIconId = android.R.drawable.ic_dialog_info;
+                mAlertParams.mTitle = getText(R.string.legacy_title);
             } else {
                 PackageManager pm = getPackageManager();
                 ApplicationInfo app = pm.getApplicationInfo(mConfig.user, 0);
-                mDialog = new AlertDialog.Builder(this)
-                        .setIcon(app.loadIcon(pm))
-                        .setTitle(app.loadLabel(pm))
-                        .setView(view)
-                        .setNeutralButton(R.string.disconnect, this)
-                        .setNegativeButton(android.R.string.cancel, this)
-                        .create();
+                mAlertParams.mIcon = app.loadIcon(pm);
+                mAlertParams.mTitle = app.loadLabel(pm);
             }
-
             if (mConfig.configureIntent != null) {
-                mDialog.setButton(DialogInterface.BUTTON_POSITIVE,
-                        getText(R.string.configure), this);
+                mAlertParams.mPositiveButtonText = getText(R.string.configure);
+                mAlertParams.mPositiveButtonListener = this;
             }
-            mDialog.setOnDismissListener(this);
-            mDialog.show();
+            mAlertParams.mNeutralButtonText = getText(R.string.disconnect);
+            mAlertParams.mNeutralButtonListener = this;
+            mAlertParams.mNegativeButtonText = getText(android.R.string.cancel);
+            mAlertParams.mNegativeButtonListener = this;
+            mAlertParams.mView = view;
+            setupAlert();
 
             if (mHandler == null) {
                 mHandler = new Handler(this);
@@ -119,18 +110,17 @@
     @Override
     protected void onPause() {
         super.onPause();
-        if (mDialog != null) {
-            mDialog.setOnDismissListener(null);
-            mDialog.dismiss();
+        if (!isFinishing()) {
+            finish();
         }
     }
 
     @Override
     public void onClick(DialogInterface dialog, int which) {
         try {
-            if (which == AlertDialog.BUTTON_POSITIVE) {
+            if (which == DialogInterface.BUTTON_POSITIVE) {
                 mConfig.configureIntent.send();
-            } else if (which == AlertDialog.BUTTON_NEUTRAL) {
+            } else if (which == DialogInterface.BUTTON_NEUTRAL) {
                 mService.prepareVpn(mConfig.user, VpnConfig.LEGACY_VPN);
             }
         } catch (Exception e) {
@@ -140,15 +130,10 @@
     }
 
     @Override
-    public void onDismiss(DialogInterface dialog) {
-        finish();
-    }
-
-    @Override
     public boolean handleMessage(Message message) {
         mHandler.removeMessages(0);
 
-        if (mDialog.isShowing()) {
+        if (!isFinishing()) {
             if (mConfig.startTime != 0) {
                 long seconds = (SystemClock.elapsedRealtime() - mConfig.startTime) / 1000;
                 mDuration.setText(String.format("%02d:%02d:%02d",