diff options
Diffstat (limited to 'src/com/android/settings/sim/SimDialogActivity.java')
-rw-r--r-- | src/com/android/settings/sim/SimDialogActivity.java | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java index 0b73d65..b4c7f03 100644 --- a/src/com/android/settings/sim/SimDialogActivity.java +++ b/src/com/android/settings/sim/SimDialogActivity.java @@ -21,6 +21,8 @@ import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.Bundle; import android.os.RemoteException; @@ -45,6 +47,7 @@ import android.widget.TextView; import android.widget.Toast; import com.android.internal.telephony.IExtTelephony; +import com.android.internal.telephony.SmsApplication; import com.android.settings.R; import com.android.settings.Utils; import java.util.ArrayList; @@ -62,6 +65,8 @@ public class SimDialogActivity extends Activity { public static final int SMS_PICK = 2; public static final int PREFERRED_PICK = 3; + private boolean mHideAlwaysAsk = false; + private IExtTelephony mExtTelephony = IExtTelephony.Stub. asInterface(ServiceManager.getService("extphone")); @@ -70,6 +75,7 @@ public class SimDialogActivity extends Activity { super.onCreate(savedInstanceState); final Bundle extras = getIntent().getExtras(); final int dialogType = extras.getInt(DIALOG_TYPE_KEY, INVALID_PICK); + mHideAlwaysAsk = !SmsApplication.canSmsAppHandleAlwaysAsk(this) && dialogType == SMS_PICK; switch (dialogType) { case DATA_PICK: @@ -194,7 +200,8 @@ public class SimDialogActivity extends Activity { case SMS_PICK: boolean isSmsPrompt = false; if (value < 1) { - isSmsPrompt = true; + isSmsPrompt = false; // user knows best + setDefaultSmsSubId(context, SubscriptionManager.INVALID_SUBSCRIPTION_ID); } else { sir = smsSubInfoList.get(value); if ( sir != null) { @@ -238,7 +245,7 @@ public class SimDialogActivity extends Activity { } }; - int currentIndex = -1; + int currentIndex = 0; ArrayList<SubscriptionInfo> callsSubInfoList = new ArrayList<SubscriptionInfo>(); if (id == CALLS_PICK) { final TelecomManager telecomManager = TelecomManager.from(context); @@ -294,8 +301,13 @@ public class SimDialogActivity extends Activity { currentIndex = list.size() - 1; } } + if (mHideAlwaysAsk && currentIndex == 0) { + // unselect always ask because user can't select it. + currentIndex = -1; + } } else { - SubscriptionInfo defaultSub = subscriptionManager.getDefaultDataSubscriptionInfo(); + currentIndex = -1; + final int defaultDataSubId = SubscriptionManager.getDefaultDataSubId(); for (int i = 0; i < selectableSubInfoLength; ++i) { final SubscriptionInfo sir = subInfoList.get(i); CharSequence displayName = sir.getDisplayName(); @@ -303,8 +315,7 @@ public class SimDialogActivity extends Activity { displayName = ""; } list.add(displayName.toString()); - if (defaultSub != null && defaultSub.getSubscriptionId() - == sir.getSubscriptionId()) { + if (defaultDataSubId == sir.getSubscriptionId()) { currentIndex = list.size() - 1; } } @@ -344,6 +355,11 @@ public class SimDialogActivity extends Activity { finish(); } }); + if (mHideAlwaysAsk) { + // make sure the user doesn't click out accidentally and we keep spamming them + // with dialogs + dialog.setCancelable(false); + } return dialog; @@ -357,6 +373,16 @@ public class SimDialogActivity extends Activity { private List<SubscriptionInfo> mSubInfoList; private final int mSelectionIndex; + @Override + public boolean areAllItemsEnabled() { + return false; + } + + @Override + public boolean isEnabled(int position) { + return !(mHideAlwaysAsk && mSubInfoList.get(position) == null); + } + public SelectAccountListAdapter(List<SubscriptionInfo> subInfoList, Context context, int resource, String[] arr, int dialogId, int selectionIndex) { super(context, resource, arr); @@ -388,10 +414,14 @@ public class SimDialogActivity extends Activity { holder = (ViewHolder) rowView.getTag(); } + final boolean enabled = isEnabled(position); final SubscriptionInfo sir = mSubInfoList.get(position); if (sir == null) { holder.title.setText(getItem(position)); - holder.summary.setVisibility(View.GONE); + holder.summary.setText(mHideAlwaysAsk + ? getString(R.string.not_available_with_app, getCurrentSmsAppName()) + : null); + holder.summary.setVisibility(View.VISIBLE); holder.icon.setImageDrawable(getResources() .getDrawable(R.drawable.ic_live_help)); holder.icon.setAlpha(OPACITY); @@ -402,9 +432,24 @@ public class SimDialogActivity extends Activity { holder.icon.setImageBitmap(sir.createIconBitmap(mContext)); } holder.radio.setChecked(position == mSelectionIndex); + holder.radio.setEnabled(enabled); + holder.title.setEnabled(enabled); + holder.summary.setEnabled(enabled); return rowView; } + private String getCurrentSmsAppName() { + try { + final ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo( + SmsApplication.getDefaultMmsApplication(getApplicationContext(), false) + .getPackageName(), 0); + return getPackageManager().getApplicationLabel(applicationInfo).toString(); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return null; + } + private class ViewHolder { TextView title; TextView summary; |