173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk/*
273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * Copyright (C) 2015 The Android Open Source Project
373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk *
473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * Licensed under the Apache License, Version 2.0 (the "License");
573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * you may not use this file except in compliance with the License.
673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * You may obtain a copy of the License at
773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk *
873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk *
1073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * Unless required by applicable law or agreed to in writing, software
1173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * distributed under the License is distributed on an "AS IS" BASIS,
1273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * See the License for the specific language governing permissions and
1473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk * limitations under the License.
1573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk */
1673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkpackage com.android.settings.applications;
1773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
1873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport android.content.ComponentName;
1973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport android.content.Context;
2073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport android.telephony.TelephonyManager;
2173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport android.text.TextUtils;
2273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport android.util.AttributeSet;
2373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
2473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport com.android.internal.telephony.SmsApplication;
2573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport com.android.internal.telephony.SmsApplication.SmsApplicationData;
2673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport com.android.settings.AppListPreference;
2773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
2873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport java.util.Collection;
2973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkimport java.util.Objects;
3073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
3173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monkpublic class DefaultSmsPreference extends AppListPreference {
3273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
3373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    public DefaultSmsPreference(Context context, AttributeSet attrs) {
3473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        super(context, attrs);
3573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
3673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        loadSmsApps();
3773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    }
3873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
3973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    private void loadSmsApps() {
4073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        Collection<SmsApplicationData> smsApplications =
4173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk                SmsApplication.getApplicationCollection(getContext());
4273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
4373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        int count = smsApplications.size();
4473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        String[] packageNames = new String[count];
4573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        int i = 0;
4673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        for (SmsApplicationData smsApplicationData : smsApplications) {
4773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk            packageNames[i++] = smsApplicationData.mPackageName;
4873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        }
4973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        setPackageNames(packageNames, getDefaultPackage());
5073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    }
5173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
5273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    private String getDefaultPackage() {
5373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        ComponentName appName = SmsApplication.getDefaultSmsApplication(getContext(), true);
5473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        if (appName != null) {
5573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk            return appName.getPackageName();
5673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        }
5773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        return null;
5873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    }
5973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
6073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    @Override
6173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    protected boolean persistString(String value) {
6273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
6373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk            SmsApplication.setDefaultApplication(value, getContext());
6473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        }
6573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        setSummary(getEntry());
6673a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        return true;
6773a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    }
6873a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
6973a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    public static boolean isAvailable(Context context) {
7073a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        TelephonyManager tm =
7173a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
7273a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk        return tm.isSmsCapable();
7373a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk    }
7473a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk
7573a2496d316cb9a8dc0020c245bc61f766b7f7c2Jason Monk}
76