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; 2105542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport android.content.Intent; 2219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.pm.ApplicationInfo; 2319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.content.pm.PackageManager; 2405542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport android.content.pm.ResolveInfo; 2505542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport android.graphics.drawable.Drawable; 26f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yehimport android.net.IConnectivityManager; 2705542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport android.net.VpnService; 28f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yehimport android.os.ServiceManager; 2905542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport android.text.Html; 3005542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport android.text.Html.ImageGetter; 3119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.util.Log; 3219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.view.View; 3319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.widget.Button; 3419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yehimport android.widget.TextView; 3519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 36ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yehimport com.android.internal.app.AlertActivity; 3705542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport com.android.internal.net.VpnConfig; 38ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh 3905542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonimport java.util.List; 4005542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson 4105542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidsonpublic class ConfirmDialog extends AlertActivity 4205542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson implements DialogInterface.OnClickListener, ImageGetter { 4319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh private static final String TAG = "VpnConfirm"; 4419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 45100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh private String mPackage; 4619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 47f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh private IConnectivityManager mService; 4819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 4919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh private Button mButton; 5019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 5119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 5219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh protected void onResume() { 5319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh super.onResume(); 5419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh try { 55100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh mPackage = getCallingPackage(); 56f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh 57f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh mService = IConnectivityManager.Stub.asInterface( 58f530da67b4f9ffa55bb8a1c05390c6f7f87fe4baChia-chi Yeh ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); 5919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 60100155a310fbb5028fc48e359bdfb7c4d3531843Chia-chi Yeh if (mService.prepareVpn(mPackage, null)) { 6119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh setResult(RESULT_OK); 6219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh finish(); 6319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh return; 6419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 6519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 6619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh View view = View.inflate(this, R.layout.confirm, null); 6719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 6805542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson ((TextView) view.findViewById(R.id.warning)).setText( 6905542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson Html.fromHtml( 7005542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson getString(R.string.warning, VpnConfig.getVpnLabel(this, mPackage)), 7105542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson this, null /* tagHandler */)); 7205542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson 7305542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson mAlertParams.mTitle = getText(R.string.prompt); 74ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mPositiveButtonText = getText(android.R.string.ok); 75ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mPositiveButtonListener = this; 76ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mNegativeButtonText = getText(android.R.string.cancel); 77ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mAlertParams.mView = view; 78ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh setupAlert(); 79ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh 80ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh getWindow().setCloseOnTouchOutside(false); 81ae380fb89dedaa03597d031370a18aa153a6a645Chia-chi Yeh mButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE); 8256480ef53fe63f03d069ba76d8f90e712d764c9bKenny Root mButton.setFilterTouchesWhenObscured(true); 8319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } catch (Exception e) { 8419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh Log.e(TAG, "onResume", e); 8519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh finish(); 8619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 8719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 8819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 8919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 9005542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson public Drawable getDrawable(String source) { 9105542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson // Should only reach this when fetching the VPN icon for the warning string. 9205542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson Drawable icon = getDrawable(R.drawable.ic_vpn_dialog); 9305542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight()); 9405542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson return icon; 9519f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 9619f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 9719f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 9805542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson public void onBackPressed() { 9919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 10019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh 10119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh @Override 10219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh public void onClick(DialogInterface dialog, int which) { 10319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh try { 10405542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson if (mService.prepareVpn(null, mPackage)) { 10505542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson // Authorize this app to initiate VPN connections in the future without user 10605542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson // intervention. 10705542603dd4f1e0ea47a3dca01de3999a9a329a9Jeff Davidson mService.setVpnPackageAuthorization(true); 10819f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh setResult(RESULT_OK); 10919f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 11019f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } catch (Exception e) { 11119f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh Log.e(TAG, "onClick", e); 11219f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 11319f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh } 11419f054b0f69b2f56ea0e98a3bb7e0e62b90ff480Chia-chi Yeh} 115