119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh/* 219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * Copyright (C) 2011 The Android Open Source Project 319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * 419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * Licensed under the Apache License, Version 2.0 (the "License"); 519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * you may not use this file except in compliance with the License. 619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * You may obtain a copy of the License at 719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * 819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * http://www.apache.org/licenses/LICENSE-2.0 919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * 1019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * Unless required by applicable law or agreed to in writing, software 1119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * distributed under the License is distributed on an "AS IS" BASIS, 1219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * See the License for the specific language governing permissions and 1419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh * limitations under the License. 1519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh */ 1619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 1719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehpackage com.android.vpndialogs; 1819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 1919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.Context; 2019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.DialogInterface; 2119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.Intent; 2219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.pm.ApplicationInfo; 2319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.pm.PackageManager; 24f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yehimport android.net.IConnectivityManager; 25f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yehimport android.os.ServiceManager; 2619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.util.Log; 2719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.view.View; 2819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.widget.Button; 2919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.widget.CompoundButton; 3019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.widget.ImageView; 3119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.widget.TextView; 3219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 33ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yehimport com.android.internal.app.AlertActivity; 34ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh 35ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yehpublic class ConfirmDialog extends AlertActivity implements 36ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh CompoundButton.OnCheckedChangeListener, DialogInterface.OnClickListener { 3719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh private static final String TAG = "VpnConfirm"; 3819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 39100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh private String mPackage; 4019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 41f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh private IConnectivityManager mService; 4219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 4319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh private Button mButton; 4419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 4519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 4619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh protected void onResume() { 4719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh super.onResume(); 4819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh try { 49100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh mPackage = getCallingPackage(); 50f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh 51f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh mService = IConnectivityManager.Stub.asInterface( 52f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); 5319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 54100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh if (mService.prepareVpn(mPackage, null)) { 5519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh setResult(RESULT_OK); 5619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh finish(); 5719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh return; 5819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 5919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 6019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh PackageManager pm = getPackageManager(); 61100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh ApplicationInfo app = pm.getApplicationInfo(mPackage, 0); 6219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 6319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh View view = View.inflate(this, R.layout.confirm, null); 6419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh ((ImageView) view.findViewById(R.id.icon)).setImageDrawable(app.loadIcon(pm)); 6519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh ((TextView) view.findViewById(R.id.prompt)).setText( 6619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh getString(R.string.prompt, app.loadLabel(pm))); 6719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh ((CompoundButton) view.findViewById(R.id.check)).setOnCheckedChangeListener(this); 6819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 69ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mIconId = android.R.drawable.ic_dialog_alert; 70ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mTitle = getText(android.R.string.dialog_alert_title); 71ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mPositiveButtonText = getText(android.R.string.ok); 72ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mPositiveButtonListener = this; 73ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mNegativeButtonText = getText(android.R.string.cancel); 74ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mNegativeButtonListener = this; 75ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mView = view; 76ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh setupAlert(); 77ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh 78ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh getWindow().setCloseOnTouchOutside(false); 79ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE); 8019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh mButton.setEnabled(false); 8119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } catch (Exception e) { 8219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh Log.e(TAG, "onResume", e); 8319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh finish(); 8419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 8519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 8619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 8719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 88ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh public void onBackPressed() { 8919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 9019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 9119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 9219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh public void onCheckedChanged(CompoundButton button, boolean checked) { 9319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh mButton.setEnabled(checked); 9419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 9519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 9619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 9719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh public void onClick(DialogInterface dialog, int which) { 9819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh try { 99ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh if (which == DialogInterface.BUTTON_POSITIVE && mService.prepareVpn(null, mPackage)) { 10019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh setResult(RESULT_OK); 10119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 10219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } catch (Exception e) { 10319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh Log.e(TAG, "onClick", e); 10419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 10519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 10619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh} 107