Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a81a07c3 authored by Shaleen Jain's avatar Shaleen Jain Committed by Abhisek Devkota
Browse files

Settings: merge sim enabler and sim cards preference

the "sim is enabled/disabled" is made redundant by the switches
show card details in its place and edit dialog on enablerPreference click.

Change-Id: Id3bfdd2f5ada5813db35cec0403ccad76bfeff14
parent 88a0a994
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -20,10 +20,6 @@
            android:key="sim_enablers"
            android:title="@string/sim_enabler_title"/>

    <PreferenceCategory
            android:key="sim_cards"
            android:title="@string/sim_settings_title" />

    <PreferenceCategory
            android:key="sim_activities"
            android:title="@string/sim_pref_divider">
+60 −12
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@

package com.android.settings.sim;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
@@ -47,11 +48,15 @@ import android.provider.Settings;
import android.telephony.SubInfoRecord;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;

@@ -202,28 +207,23 @@ public class MultiSimEnablerPreference extends Preference implements OnCheckedCh
        }
    }

    @Override
    public void setEnabled(boolean isEnabled) {
        if (mSwitch != null) {
            mSwitch.setEnabled(isEnabled);
        }
        super.setEnabled(isEnabled);
    }

    private void updateSummary() {
        Resources res = mContext.getResources();
        String summary;
        boolean isActivated = (mSir.mStatus == SubscriptionManager.ACTIVE);
        logd("updateSummary: subId " + mSir.subId + " isActivated = " + isActivated +
                " slot id = " + mSlotId);

        if (isActivated) {
            summary = mContext.getString(R.string.sim_enabler_summary,
                    res.getString(R.string.sim_enabled));
        } else {
            summary = mContext.getString(R.string.sim_enabler_summary,
                    res.getString(hasCard() ? R.string.sim_disabled : R.string.sim_missing));
        }

        if (mSubSummary != null) {
            String simSlot = res.getString(R.string.sim_card_number_title, mSlotId + 1);
            String summary = res.getString(R.string.sim_settings_summary, simSlot, mSir.number);
            mSubSummary.setText(summary);
        }
        setChecked(isActivated);
@@ -390,9 +390,6 @@ public class MultiSimEnablerPreference extends Preference implements OnCheckedCh
                        sendSubConfigurationRequest();
                    } else if (which == DialogInterface.BUTTON_NEGATIVE) {
                        setChecked(true);
                        mSubSummary.setText(mContext.getString(
                                R.string.sim_enabler_summary,
                                mContext.getString(R.string.sim_enabled)));
                    } else if (which == DialogInterface.BUTTON_NEUTRAL) {
                        update();
                    }
@@ -452,6 +449,57 @@ public class MultiSimEnablerPreference extends Preference implements OnCheckedCh
        }
    };

    public void createEditDialog() {
        final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        final LayoutInflater inflater = LayoutInflater.from(mContext);

        final View dialogLayout = inflater.inflate(R.layout.multi_sim_dialog, null);
        builder.setView(dialogLayout);

        final EditText nameText = (EditText) dialogLayout.findViewById(R.id.sim_name);
        nameText.setText(mSir.displayName);

        TextView numberView = (TextView)dialogLayout.findViewById(R.id.number);
        numberView.setText(mSir.number);

        TextView carrierView = (TextView)dialogLayout.findViewById(R.id.carrier);
        TelephonyManager tm = (TelephonyManager)
                mContext.getSystemService(Context.TELEPHONY_SERVICE);
        String spn = tm.getSimOperatorName(mSir.subId);
        if (TextUtils.isEmpty(spn) && !tm.isNetworkRoaming(mSir.subId)) {
            // Operator did not write the SPN inside the SIM, so set
            // the current network operator as the SIM name, but only if
            // we're not roaming.
            spn = tm.getNetworkOperatorName(mSir.subId);
        }
        carrierView.setText(spn);

        builder.setTitle(R.string.sim_editor_title);

        builder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int whichButton) {
                final Spinner displayNumbers =
                        (Spinner)dialogLayout.findViewById(R.id.display_numbers);

                final int formatSetting = displayNumbers.getSelectedItemPosition() == 0
                        ? SubscriptionManager.DISPLAY_NUMBER_LAST
                        : SubscriptionManager.DISPLAY_NUMBER_FIRST;
                SubscriptionManager.setDisplayNumberFormat(formatSetting, mSir.subId);

                mSir.displayName = nameText.getText().toString();
                SubscriptionManager.setDisplayName(mSir.displayName,
                        mSir.subId, SubscriptionManager.NAME_SOURCE_USER_INPUT);

                update();
            }
        });

        builder.setNegativeButton(R.string.cancel, null);

        builder.show();
    }

    private void logd(String msg) {
        if (DBG) Log.d(TAG + "(" + mSlotId + ")", msg);
    }
+8 −123
Original line number Diff line number Diff line
@@ -16,16 +16,10 @@

package com.android.settings.sim;

import android.provider.SearchIndexableResource;
import com.android.settings.R;

import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.content.Intent;
import android.content.Context;
import android.content.res.Resources;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -33,26 +27,21 @@ import android.os.SystemProperties;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.provider.SearchIndexableResource;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.SubInfoRecord;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telecom.PhoneAccount;
import android.telephony.CellInfo;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.Utils;
import com.android.settings.notification.DropDownPreference;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.Indexable.SearchIndexProvider;

import java.util.ArrayList;
import java.util.List;
@@ -66,7 +55,6 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable

    private static final String DISALLOW_CONFIG_SIM = "no_config_sim";
    private static final String SIM_ENABLER_CATEGORY = "sim_enablers";
    private static final String SIM_CARD_CATEGORY = "sim_cards";
    private static final String SIM_ACTIVITIES_CATEGORY = "sim_activities";
    private static final String KEY_CELLULAR_DATA = "sim_cellular_data";
    private static final String KEY_CALLS = "sim_calls";
@@ -156,7 +144,6 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
        addPreferencesFromResource(R.xml.sim_settings);

        mPrimarySubSelect = (Preference) findPreference(KEY_PRIMARY_SUB_SELECT);
        final PreferenceCategory simCards = (PreferenceCategory)findPreference(SIM_CARD_CATEGORY);
        final PreferenceCategory simEnablers =
                (PreferenceCategory)findPreference(SIM_ENABLER_CATEGORY);

@@ -164,7 +151,6 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
        mSimEnablers = new ArrayList<MultiSimEnablerPreference>(mNumSlots);
        for (int i = 0; i < mNumSlots; ++i) {
            final SubInfoRecord sir = findRecordBySlotId(i);
            simCards.addPreference(new SimPreference(getActivity(), sir, i));
            if (mNumSlots > 1) {
                mSimEnablers.add(i, new MultiSimEnablerPreference(
                        getActivity(), sir, mHandler, i));
@@ -183,23 +169,10 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
    private void updateAllOptions() {
        Log.d(TAG,"updateAllOptions");
        mSubInfoList = SubscriptionManager.getActiveSubInfoList();
        updateSimSlotValues();
        updateActivitesCategory();
        updateSimEnablers();
    }

    private void updateSimSlotValues() {
        final PreferenceScreen prefScreen = getPreferenceScreen();

        final int prefSize = prefScreen.getPreferenceCount();
        for (int i = 0; i < prefSize; ++i) {
            Preference pref = prefScreen.getPreference(i);
            if (pref instanceof SimPreference) {
                ((SimPreference)pref).update();
            }
        }
    }

    private void updateActivitesCategory() {
        createDropDown((DropDownPreference) findPreference(KEY_CELLULAR_DATA));
        createDropDown((DropDownPreference) findPreference(KEY_CALLS));
@@ -351,12 +324,11 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
    @Override
    public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen,
            final Preference preference) {
        if (preference instanceof SimPreference) {
            ((SimPreference) preference).createEditDialog((SimPreference) preference);
        if (preference instanceof MultiSimEnablerPreference) {
            ((MultiSimEnablerPreference) preference).createEditDialog();
        }  else if (preference == mPrimarySubSelect) {
            startActivity(mPrimarySubSelect.getIntent());
        }

        return true;
    }

@@ -440,93 +412,6 @@ public class SimSettings extends RestrictedSettingsFragment implements Indexable
        updateActivitesCategory();
    }

    private class SimPreference extends Preference{
        private SubInfoRecord mSubInfoRecord;
        private int mSlotId;

        public SimPreference(Context context, SubInfoRecord subInfoRecord, int slotId) {
            super(context);

            mSubInfoRecord = subInfoRecord;
            mSlotId = slotId;
            setKey("sim" + mSlotId);
            update();
        }

        public void update() {
            final Resources res = getResources();

            setTitle(res.getString(R.string.sim_card_number_title, mSlotId + 1));
            if (mSubInfoRecord != null) {
                setSummary(res.getString(R.string.sim_settings_summary,
                            mSubInfoRecord.displayName, mSubInfoRecord.number));
                setEnabled(true);
            } else {
                setSummary(R.string.sim_slot_empty);
                setFragment(null);
                setEnabled(false);
            }
        }

        public void createEditDialog(SimPreference simPref) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            final View dialogLayout = getActivity().getLayoutInflater().inflate(
                    R.layout.multi_sim_dialog, null);
            builder.setView(dialogLayout);

            EditText nameText = (EditText)dialogLayout.findViewById(R.id.sim_name);
            nameText.setText(mSubInfoRecord.displayName);

            TextView numberView = (TextView)dialogLayout.findViewById(R.id.number);
            numberView.setText(mSubInfoRecord.number);

            TextView carrierView = (TextView)dialogLayout.findViewById(R.id.carrier);
            TelephonyManager tm = (TelephonyManager)
                    getActivity().getSystemService(Context.TELEPHONY_SERVICE);
            String spn = tm.getSimOperatorName(mSubInfoRecord.subId);
            if (TextUtils.isEmpty(spn) && !tm.isNetworkRoaming(mSubInfoRecord.subId)) {
                // Operator did not write the SPN inside the SIM, so set
                // the current network operator as the SIM name, but only if
                // we're not roaming.
                spn = tm.getNetworkOperatorName(mSubInfoRecord.subId);
            }
            carrierView.setText(spn);

            builder.setTitle(R.string.sim_editor_title);

            builder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    final EditText nameText = (EditText)dialogLayout.findViewById(R.id.sim_name);
                    final Spinner displayNumbers =
                        (Spinner)dialogLayout.findViewById(R.id.display_numbers);

                    SubscriptionManager.setDisplayNumberFormat(
                        displayNumbers.getSelectedItemPosition() == 0
                            ? SubscriptionManager.DISPLAY_NUMBER_LAST
                            : SubscriptionManager.DISPLAY_NUMBER_FIRST, mSubInfoRecord.subId);

                    mSubInfoRecord.displayName = nameText.getText().toString();
                    SubscriptionManager.setDisplayName(mSubInfoRecord.displayName,
                        mSubInfoRecord.subId, SubscriptionManager.NAME_SOURCE_USER_INPUT);

                    updateAllOptions();
                    update();
                }
            });

            builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int whichButton) {
                    dialog.dismiss();
                }
            });

            builder.create().show();
        }
    }

    /**
     * For search
     */