--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/tabhost"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:id="@+id/tabs_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scrollbars="none"
+ android:fillViewport="true">
+
+ <TabWidget
+ android:id="@android:id/tabs"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ style="?android:attr/tabWidgetStyle" />
+
+ </HorizontalScrollView>
+
+ <!-- give an empty content area to make tabhost happy -->
+ <FrameLayout
+ android:id="@android:id/tabcontent"
+ android:layout_width="0dip"
+ android:layout_height="0dip" />
+
+ <ListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:smoothScrollbar="false" />
+
+ </LinearLayout>
+
+</TabHost>
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.util.Log;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.TabHost;
+import android.widget.TabHost.OnTabChangeListener;
+import android.widget.TabHost.TabContentFactory;
+import android.widget.TabHost.TabSpec;
+import android.widget.TabWidget;
import android.widget.Toast;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.TelephonyIntents;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Implements the preference screen to enable/disable ICC lock and
* also the dialogs to change the ICC PIN. In the former case, enabling/disabling
// Are we trying to enable or disable ICC lock?
private boolean mToState;
+ private TabHost mTabHost;
+ private TabWidget mTabWidget;
+ private ListView mListView;
+
private Phone mPhone;
private EditPinPreference mPinDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ final Context context = getApplicationContext();
+ final TelephonyManager tm =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ final int numSims = tm.getSimCount();
if (Utils.isMonkeyRunning()) {
finish();
// Don't need any changes to be remembered
getPreferenceScreen().setPersistent(false);
+ if (numSims > 1) {
+ setContentView(R.layout.icc_lock_tabs);
+
+ mTabHost = (TabHost) findViewById(android.R.id.tabhost);
+ mTabWidget = (TabWidget) findViewById(android.R.id.tabs);
+ mListView = (ListView) findViewById(android.R.id.list);
+
+ mTabHost.setup();
+ mTabHost.setOnTabChangedListener(mTabListener);
+ mTabHost.clearAllTabs();
+
+ for (int i = 0; i < numSims; ++i) {
+ final SubscriptionInfo subInfo = Utils.findRecordBySlotId(i);
+ mTabHost.addTab(buildTabSpec(String.valueOf(i),
+ String.valueOf(subInfo == null
+ ? context.getString(R.string.sim_editor_title, i + 1)
+ : subInfo.getDisplayName())));
+ }
+ }
+
mPhone = PhoneFactory.getDefaultPhone();
mRes = getResources();
updatePreferences();
}
private void updatePreferences() {
- mPinToggle.setChecked(mPhone.getIccCard().getIccLockEnabled());
+ mPinDialog.setEnabled(mPhone != null);
+ mPinToggle.setEnabled(mPhone != null);
+
+ if (mPhone != null) {
+ mPinToggle.setChecked(mPhone.getIccCard().getIccLockEnabled());
+ }
}
@Override
setDialogValues();
mDialogState = OFF_MODE;
}
+
+ private OnTabChangeListener mTabListener = new OnTabChangeListener() {
+ @Override
+ public void onTabChanged(String tabId) {
+ final int slotId = Integer.parseInt(tabId);
+ final SubscriptionInfo sir = Utils.findRecordBySlotId(slotId);
+
+ mPhone = (sir == null) ? null
+ : PhoneFactory.getPhone(SubscriptionManager.getPhoneId(sir.getSubscriptionId()));
+
+ // The User has changed tab; update the body.
+ updatePreferences();
+ }
+ };
+
+ private TabContentFactory mEmptyTabContent = new TabContentFactory() {
+ @Override
+ public View createTabContent(String tag) {
+ return new View(mTabHost.getContext());
+ }
+ };
+
+ private TabSpec buildTabSpec(String tag, String title) {
+ return mTabHost.newTabSpec(tag).setIndicator(title).setContent(
+ mEmptyTabContent);
+ }
}