14e9f04de0a6511086f47479addb53b84c3bb9763David Braun/*
24e9f04de0a6511086f47479addb53b84c3bb9763David Braun * Copyright (C) 2013 The Android Open Source Project
34e9f04de0a6511086f47479addb53b84c3bb9763David Braun *
44e9f04de0a6511086f47479addb53b84c3bb9763David Braun * Licensed under the Apache License, Version 2.0 (the "License");
54e9f04de0a6511086f47479addb53b84c3bb9763David Braun * you may not use this file except in compliance with the License.
64e9f04de0a6511086f47479addb53b84c3bb9763David Braun * You may obtain a copy of the License at
74e9f04de0a6511086f47479addb53b84c3bb9763David Braun *
84e9f04de0a6511086f47479addb53b84c3bb9763David Braun *      http://www.apache.org/licenses/LICENSE-2.0
94e9f04de0a6511086f47479addb53b84c3bb9763David Braun *
104e9f04de0a6511086f47479addb53b84c3bb9763David Braun * Unless required by applicable law or agreed to in writing, software
114e9f04de0a6511086f47479addb53b84c3bb9763David Braun * distributed under the License is distributed on an "AS IS" BASIS,
124e9f04de0a6511086f47479addb53b84c3bb9763David Braun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134e9f04de0a6511086f47479addb53b84c3bb9763David Braun * See the License for the specific language governing permissions and
144e9f04de0a6511086f47479addb53b84c3bb9763David Braun * limitations under the License.
154e9f04de0a6511086f47479addb53b84c3bb9763David Braun */
164e9f04de0a6511086f47479addb53b84c3bb9763David Braun
174e9f04de0a6511086f47479addb53b84c3bb9763David Braunpackage com.android.settings;
184e9f04de0a6511086f47479addb53b84c3bb9763David Braun
194e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.content.ComponentName;
204e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.content.Context;
214e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.content.DialogInterface;
224e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.content.Intent;
234e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.content.pm.ApplicationInfo;
244e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.content.pm.PackageManager;
254e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.os.Bundle;
264e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport android.provider.Telephony.Sms.Intents;
271c17255d5edadaf1790af365d2ed5f962a7bcc65David Braunimport android.telephony.TelephonyManager;
284e9f04de0a6511086f47479addb53b84c3bb9763David Braun
294e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport com.android.internal.app.AlertActivity;
304e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport com.android.internal.app.AlertController;
314e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport com.android.internal.telephony.SmsApplication;
324e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport com.android.internal.telephony.SmsApplication.SmsApplicationData;
334e9f04de0a6511086f47479addb53b84c3bb9763David Braunimport com.android.settings.R;
344e9f04de0a6511086f47479addb53b84c3bb9763David Braun
354e9f04de0a6511086f47479addb53b84c3bb9763David Braunpublic final class SmsDefaultDialog extends AlertActivity implements
364e9f04de0a6511086f47479addb53b84c3bb9763David Braun        DialogInterface.OnClickListener {
374e9f04de0a6511086f47479addb53b84c3bb9763David Braun    private ComponentName mNewDefault;
384e9f04de0a6511086f47479addb53b84c3bb9763David Braun    private SmsApplicationData mNewSmsApplicationData;
394e9f04de0a6511086f47479addb53b84c3bb9763David Braun
404e9f04de0a6511086f47479addb53b84c3bb9763David Braun    @Override
414e9f04de0a6511086f47479addb53b84c3bb9763David Braun    protected void onCreate(Bundle savedInstanceState) {
424e9f04de0a6511086f47479addb53b84c3bb9763David Braun        super.onCreate(savedInstanceState);
434e9f04de0a6511086f47479addb53b84c3bb9763David Braun
444e9f04de0a6511086f47479addb53b84c3bb9763David Braun        Intent intent = getIntent();
454e9f04de0a6511086f47479addb53b84c3bb9763David Braun        String packageName = intent.getStringExtra(Intents.EXTRA_PACKAGE_NAME);
464e9f04de0a6511086f47479addb53b84c3bb9763David Braun
474e9f04de0a6511086f47479addb53b84c3bb9763David Braun        setResult(RESULT_CANCELED);
484e9f04de0a6511086f47479addb53b84c3bb9763David Braun        if (!buildDialog(packageName)) {
494e9f04de0a6511086f47479addb53b84c3bb9763David Braun            finish();
504e9f04de0a6511086f47479addb53b84c3bb9763David Braun        }
514e9f04de0a6511086f47479addb53b84c3bb9763David Braun    }
524e9f04de0a6511086f47479addb53b84c3bb9763David Braun
534e9f04de0a6511086f47479addb53b84c3bb9763David Braun    @Override
544e9f04de0a6511086f47479addb53b84c3bb9763David Braun    public void onClick(DialogInterface dialog, int which) {
554e9f04de0a6511086f47479addb53b84c3bb9763David Braun        switch (which) {
564e9f04de0a6511086f47479addb53b84c3bb9763David Braun            case BUTTON_POSITIVE:
574e9f04de0a6511086f47479addb53b84c3bb9763David Braun                SmsApplication.setDefaultApplication(mNewSmsApplicationData.mPackageName, this);
584e9f04de0a6511086f47479addb53b84c3bb9763David Braun                setResult(RESULT_OK);
594e9f04de0a6511086f47479addb53b84c3bb9763David Braun                break;
604e9f04de0a6511086f47479addb53b84c3bb9763David Braun            case BUTTON_NEGATIVE:
614e9f04de0a6511086f47479addb53b84c3bb9763David Braun                break;
624e9f04de0a6511086f47479addb53b84c3bb9763David Braun        }
634e9f04de0a6511086f47479addb53b84c3bb9763David Braun    }
644e9f04de0a6511086f47479addb53b84c3bb9763David Braun
654e9f04de0a6511086f47479addb53b84c3bb9763David Braun    private boolean buildDialog(String packageName) {
661c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
67a3c0a535d15d897fc2b799811727a17eb79f773eDave Daynard        if (!tm.isSmsCapable()) {
681c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            // No phone, no SMS
691c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            return false;
701c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        }
711c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun
724e9f04de0a6511086f47479addb53b84c3bb9763David Braun        mNewSmsApplicationData = SmsApplication.getSmsApplicationData(packageName, this);
734e9f04de0a6511086f47479addb53b84c3bb9763David Braun        if (mNewSmsApplicationData == null) {
744e9f04de0a6511086f47479addb53b84c3bb9763David Braun            return false;
754e9f04de0a6511086f47479addb53b84c3bb9763David Braun        }
764e9f04de0a6511086f47479addb53b84c3bb9763David Braun
771c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        SmsApplicationData oldSmsApplicationData = null;
784e9f04de0a6511086f47479addb53b84c3bb9763David Braun        ComponentName oldSmsComponent = SmsApplication.getDefaultSmsApplication(this, true);
791c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        if (oldSmsComponent != null) {
801c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            oldSmsApplicationData =
811c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun                    SmsApplication.getSmsApplicationData(oldSmsComponent.getPackageName(), this);
821c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            if (oldSmsApplicationData.mPackageName.equals(mNewSmsApplicationData.mPackageName)) {
831c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun                return false;
841c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            }
854e9f04de0a6511086f47479addb53b84c3bb9763David Braun        }
864e9f04de0a6511086f47479addb53b84c3bb9763David Braun
874e9f04de0a6511086f47479addb53b84c3bb9763David Braun        // Compose dialog; get
884e9f04de0a6511086f47479addb53b84c3bb9763David Braun        final AlertController.AlertParams p = mAlertParams;
894e9f04de0a6511086f47479addb53b84c3bb9763David Braun        p.mTitle = getString(R.string.sms_change_default_dialog_title);
901c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        if (oldSmsApplicationData != null) {
911c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            p.mMessage = getString(R.string.sms_change_default_dialog_text,
921c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun                    mNewSmsApplicationData.mApplicationName,
931c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun                    oldSmsApplicationData.mApplicationName);
941c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        } else {
951c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun            p.mMessage = getString(R.string.sms_change_default_no_previous_dialog_text,
961c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun                    mNewSmsApplicationData.mApplicationName);
971c17255d5edadaf1790af365d2ed5f962a7bcc65David Braun        }
984e9f04de0a6511086f47479addb53b84c3bb9763David Braun        p.mPositiveButtonText = getString(R.string.yes);
994e9f04de0a6511086f47479addb53b84c3bb9763David Braun        p.mNegativeButtonText = getString(R.string.no);
1004e9f04de0a6511086f47479addb53b84c3bb9763David Braun        p.mPositiveButtonListener = this;
1014e9f04de0a6511086f47479addb53b84c3bb9763David Braun        p.mNegativeButtonListener = this;
1024e9f04de0a6511086f47479addb53b84c3bb9763David Braun        setupAlert();
1034e9f04de0a6511086f47479addb53b84c3bb9763David Braun
1044e9f04de0a6511086f47479addb53b84c3bb9763David Braun        return true;
1054e9f04de0a6511086f47479addb53b84c3bb9763David Braun    }
1064e9f04de0a6511086f47479addb53b84c3bb9763David Braun}