Fix bug #12919330 RTE in Settings: PhoneFactory probably already running

- revert changes from the CL for Drawer implementation.
- we cannot convert those Activities to fragments as they are running in the Phone process

Change-Id: I7e4033bc9b53daa7e7aa6f1fd74576375cde88e9
This commit is contained in:
Fabrice Di Meglio
2014-02-06 17:51:30 -08:00
parent d3aee23cb6
commit 3065f75e16
4 changed files with 62 additions and 65 deletions

View File

@@ -35,8 +35,10 @@
<!-- Device status - launches activity --> <!-- Device status - launches activity -->
<PreferenceScreen android:key="status_info" <PreferenceScreen android:key="status_info"
android:title="@string/device_status" android:title="@string/device_status"
android:summary="@string/device_status_summary" android:summary="@string/device_status_summary">
android:fragment="com.android.settings.deviceinfo.Status"> <intent android:action="android.intent.action.MAIN"
android:targetPackage="com.android.settings"
android:targetClass="com.android.settings.deviceinfo.Status" />
</PreferenceScreen> </PreferenceScreen>
<!-- Legal Information --> <!-- Legal Information -->

View File

@@ -21,8 +21,10 @@
android:persistent="false"> android:persistent="false">
<Preference android:title="@string/sim_lock_settings_category" <Preference android:title="@string/sim_lock_settings_category"
android:persistent="false" android:persistent="false">
android:fragment="com.android.settings.IccLockSettings"> <intent android:action="android.intent.action.MAIN"
android:targetPackage="com.android.settings"
android:targetClass="com.android.settings.IccLockSettings"/>
</Preference> </Preference>
</PreferenceCategory> </PreferenceCategory>

View File

@@ -27,6 +27,7 @@ import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
@@ -44,7 +45,7 @@ import com.android.internal.telephony.TelephonyIntents;
* these operations. * these operations.
* *
*/ */
public class IccLockSettings extends SettingsPreferenceFragment public class IccLockSettings extends PreferenceActivity
implements EditPinPreference.OnPinEnteredListener { implements EditPinPreference.OnPinEnteredListener {
private static final String TAG = "IccLockSettings"; private static final String TAG = "IccLockSettings";
private static final boolean DBG = true; private static final boolean DBG = true;
@@ -127,11 +128,11 @@ public class IccLockSettings extends SettingsPreferenceFragment
}; };
// For top-level settings screen to query // For top-level settings screen to query
boolean isIccLockEnabled() { static boolean isIccLockEnabled() {
return mPhone.getIccCard().getIccLockEnabled(); return PhoneFactory.getDefaultPhone().getIccCard().getIccLockEnabled();
} }
String getSummary(Context context) { static String getSummary(Context context) {
Resources res = context.getResources(); Resources res = context.getResources();
String summary = isIccLockEnabled() String summary = isIccLockEnabled()
? res.getString(R.string.sim_lock_on) ? res.getString(R.string.sim_lock_on)
@@ -140,7 +141,7 @@ public class IccLockSettings extends SettingsPreferenceFragment
} }
@Override @Override
public void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (Utils.isMonkeyRunning()) { if (Utils.isMonkeyRunning()) {
@@ -181,9 +182,7 @@ public class IccLockSettings extends SettingsPreferenceFragment
// Don't need any changes to be remembered // Don't need any changes to be remembered
getPreferenceScreen().setPersistent(false); getPreferenceScreen().setPersistent(false);
PhoneFactory.makeDefaultPhone(getActivity());
mPhone = PhoneFactory.getDefaultPhone(); mPhone = PhoneFactory.getDefaultPhone();
mRes = getResources(); mRes = getResources();
updatePreferences(); updatePreferences();
} }
@@ -193,13 +192,13 @@ public class IccLockSettings extends SettingsPreferenceFragment
} }
@Override @Override
public void onResume() { protected void onResume() {
super.onResume(); super.onResume();
// ACTION_SIM_STATE_CHANGED is sticky, so we'll receive current state after this call, // ACTION_SIM_STATE_CHANGED is sticky, so we'll receive current state after this call,
// which will call updatePreferences(). // which will call updatePreferences().
final IntentFilter filter = new IntentFilter(TelephonyIntents.ACTION_SIM_STATE_CHANGED); final IntentFilter filter = new IntentFilter(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
getActivity().registerReceiver(mSimStateReceiver, filter); registerReceiver(mSimStateReceiver, filter);
if (mDialogState != OFF_MODE) { if (mDialogState != OFF_MODE) {
showPinDialog(); showPinDialog();
@@ -210,13 +209,13 @@ public class IccLockSettings extends SettingsPreferenceFragment
} }
@Override @Override
public void onPause() { protected void onPause() {
super.onPause(); super.onPause();
getActivity().unregisterReceiver(mSimStateReceiver); unregisterReceiver(mSimStateReceiver);
} }
@Override @Override
public void onSaveInstanceState(Bundle out) { protected void onSaveInstanceState(Bundle out) {
// Need to store this state for slider open/close // Need to store this state for slider open/close
// There is one case where the dialog is popped up by the preference // There is one case where the dialog is popped up by the preference
// framework. In that case, let the preference framework store the // framework. In that case, let the preference framework store the
@@ -360,8 +359,8 @@ public class IccLockSettings extends SettingsPreferenceFragment
if (success) { if (success) {
mPinToggle.setChecked(mToState); mPinToggle.setChecked(mToState);
} else { } else {
Toast.makeText(getActivity(), Toast.makeText(this, getPinPasswordErrorMessage(attemptsRemaining), Toast.LENGTH_LONG)
getPinPasswordErrorMessage(attemptsRemaining), Toast.LENGTH_LONG).show(); .show();
} }
mPinToggle.setEnabled(true); mPinToggle.setEnabled(true);
resetDialogState(); resetDialogState();
@@ -369,11 +368,11 @@ public class IccLockSettings extends SettingsPreferenceFragment
private void iccPinChanged(boolean success, int attemptsRemaining) { private void iccPinChanged(boolean success, int attemptsRemaining) {
if (!success) { if (!success) {
Toast.makeText(getActivity(), getPinPasswordErrorMessage(attemptsRemaining), Toast.makeText(this, getPinPasswordErrorMessage(attemptsRemaining),
Toast.LENGTH_LONG) Toast.LENGTH_LONG)
.show(); .show();
} else { } else {
Toast.makeText(getActivity(), mRes.getString(R.string.sim_change_succeeded), Toast.makeText(this, mRes.getString(R.string.sim_change_succeeded),
Toast.LENGTH_SHORT) Toast.LENGTH_SHORT)
.show(); .show();

View File

@@ -16,7 +16,6 @@
package com.android.settings.deviceinfo; package com.android.settings.deviceinfo;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ClipboardManager; import android.content.ClipboardManager;
@@ -25,6 +24,7 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo; import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Build; import android.os.Build;
@@ -35,6 +35,7 @@ import android.os.SystemClock;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.os.UserHandle; import android.os.UserHandle;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.telephony.CellBroadcastMessage; import android.telephony.CellBroadcastMessage;
import android.telephony.PhoneNumberUtils; import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneStateListener; import android.telephony.PhoneStateListener;
@@ -52,7 +53,6 @@ import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.PhoneStateIntentReceiver; import com.android.internal.telephony.PhoneStateIntentReceiver;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
@@ -72,7 +72,7 @@ import java.lang.ref.WeakReference;
* # XMPP/buzz/tickle status : TODO * # XMPP/buzz/tickle status : TODO
* *
*/ */
public class Status extends SettingsPreferenceFragment { public class Status extends PreferenceActivity {
private static final String KEY_DATA_STATE = "data_state"; private static final String KEY_DATA_STATE = "data_state";
private static final String KEY_SERVICE_STATE = "service_state"; private static final String KEY_SERVICE_STATE = "service_state";
@@ -163,8 +163,8 @@ public class Status extends SettingsPreferenceFragment {
private static class MyHandler extends Handler { private static class MyHandler extends Handler {
private WeakReference<Status> mStatus; private WeakReference<Status> mStatus;
public MyHandler(Status status) { public MyHandler(Status activity) {
mStatus = new WeakReference<Status>(status); mStatus = new WeakReference<Status>(activity);
} }
@Override @Override
@@ -254,14 +254,14 @@ public class Status extends SettingsPreferenceFragment {
} }
@Override @Override
public void onCreate(Bundle icicle) { protected void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
mHandler = new MyHandler(this); mHandler = new MyHandler(this);
mCM = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE); mCM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
mTelephonyManager = (TelephonyManager)getSystemService(Activity.TELEPHONY_SERVICE); mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mWifiManager = (WifiManager) getSystemService(Activity.WIFI_SERVICE); mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
addPreferencesFromResource(R.xml.device_info_status); addPreferencesFromResource(R.xml.device_info_status);
mBatteryLevel = findPreference(KEY_BATTERY_LEVEL); mBatteryLevel = findPreference(KEY_BATTERY_LEVEL);
@@ -276,14 +276,13 @@ public class Status extends SettingsPreferenceFragment {
mUnavailable = mRes.getString(R.string.status_unavailable); mUnavailable = mRes.getString(R.string.status_unavailable);
if (UserHandle.myUserId() == UserHandle.USER_OWNER) { if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
PhoneFactory.makeDefaultPhone(getActivity());
mPhone = PhoneFactory.getDefaultPhone(); mPhone = PhoneFactory.getDefaultPhone();
} }
// Note - missing in zaku build, be careful later... // Note - missing in zaku build, be careful later...
mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH); mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH);
mUptime = findPreference("up_time"); mUptime = findPreference("up_time");
if (mPhone == null || Utils.isWifiOnly(getActivity())) { if (mPhone == null || Utils.isWifiOnly(getApplicationContext())) {
for (String key : PHONE_RELATED_ENTRIES) { for (String key : PHONE_RELATED_ENTRIES) {
removePreferenceFromScreen(key); removePreferenceFromScreen(key);
} }
@@ -313,7 +312,7 @@ public class Status extends SettingsPreferenceFragment {
setSummaryText(KEY_IMEI, mPhone.getDeviceId()); setSummaryText(KEY_IMEI, mPhone.getDeviceId());
setSummaryText(KEY_IMEI_SV, setSummaryText(KEY_IMEI_SV,
((TelephonyManager) getSystemService(Activity.TELEPHONY_SERVICE)) ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
.getDeviceSoftwareVersion()); .getDeviceSoftwareVersion());
// device is not CDMA, do not display CDMA features // device is not CDMA, do not display CDMA features
@@ -337,7 +336,7 @@ public class Status extends SettingsPreferenceFragment {
// If formattedNumber is null or empty, it'll display as "Unknown". // If formattedNumber is null or empty, it'll display as "Unknown".
setSummaryText(KEY_PHONE_NUMBER, formattedNumber); setSummaryText(KEY_PHONE_NUMBER, formattedNumber);
mPhoneStateReceiver = new PhoneStateIntentReceiver(getActivity(), mHandler); mPhoneStateReceiver = new PhoneStateIntentReceiver(this, mHandler);
mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED); mPhoneStateReceiver.notifySignalStrength(EVENT_SIGNAL_STRENGTH_CHANGED);
mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED); mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
@@ -369,39 +368,34 @@ public class Status extends SettingsPreferenceFragment {
} else { } else {
removePreferenceFromScreen(KEY_SERIAL_NUMBER); removePreferenceFromScreen(KEY_SERIAL_NUMBER);
} }
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Make every pref on this screen copy its data to the clipboard on longpress. // Make every pref on this screen copy its data to the clipboard on longpress.
// Super convenient for capturing the IMEI, MAC addr, serial, etc. // Super convenient for capturing the IMEI, MAC addr, serial, etc.
getListView().setOnItemLongClickListener( getListView().setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener() { new AdapterView.OnItemLongClickListener() {
@Override @Override
public boolean onItemLongClick(AdapterView<?> parent, View view, public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) { int position, long id) {
ListAdapter listAdapter = (ListAdapter) parent.getAdapter(); ListAdapter listAdapter = (ListAdapter) parent.getAdapter();
Preference pref = (Preference) listAdapter.getItem(position); Preference pref = (Preference) listAdapter.getItem(position);
ClipboardManager cm = (ClipboardManager) ClipboardManager cm = (ClipboardManager)
getSystemService(Context.CLIPBOARD_SERVICE); getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(pref.getSummary()); cm.setText(pref.getSummary());
Toast.makeText( Toast.makeText(
getActivity(), Status.this,
com.android.internal.R.string.text_copied, com.android.internal.R.string.text_copied,
Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show();
return true; return true;
} }
}); });
} }
@Override @Override
public void onResume() { protected void onResume() {
super.onResume(); super.onResume();
if (mPhone != null && !Utils.isWifiOnly(getActivity())) { if (mPhone != null && !Utils.isWifiOnly(getApplicationContext())) {
mPhoneStateReceiver.registerIntent(); mPhoneStateReceiver.registerIntent();
updateSignalStrength(); updateSignalStrength();
@@ -410,17 +404,17 @@ public class Status extends SettingsPreferenceFragment {
mTelephonyManager.listen(mPhoneStateListener, mTelephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
if (mShowLatestAreaInfo) { if (mShowLatestAreaInfo) {
getActivity().registerReceiver(mAreaInfoReceiver, new IntentFilter(CB_AREA_INFO_RECEIVED_ACTION), registerReceiver(mAreaInfoReceiver, new IntentFilter(CB_AREA_INFO_RECEIVED_ACTION),
CB_AREA_INFO_SENDER_PERMISSION, null); CB_AREA_INFO_SENDER_PERMISSION, null);
// Ask CellBroadcastReceiver to broadcast the latest area info received // Ask CellBroadcastReceiver to broadcast the latest area info received
Intent getLatestIntent = new Intent(GET_LATEST_CB_AREA_INFO_ACTION); Intent getLatestIntent = new Intent(GET_LATEST_CB_AREA_INFO_ACTION);
getActivity().sendBroadcastAsUser(getLatestIntent, UserHandle.ALL, sendBroadcastAsUser(getLatestIntent, UserHandle.ALL,
CB_AREA_INFO_SENDER_PERMISSION); CB_AREA_INFO_SENDER_PERMISSION);
} }
} }
getActivity().registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter, registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter,
android.Manifest.permission.CHANGE_NETWORK_STATE, null); android.Manifest.permission.CHANGE_NETWORK_STATE, null);
getActivity().registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
mHandler.sendEmptyMessage(EVENT_UPDATE_STATS); mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
} }
@@ -428,15 +422,15 @@ public class Status extends SettingsPreferenceFragment {
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
if (mPhone != null && !Utils.isWifiOnly(getActivity())) { if (mPhone != null && !Utils.isWifiOnly(getApplicationContext())) {
mPhoneStateReceiver.unregisterIntent(); mPhoneStateReceiver.unregisterIntent();
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
} }
if (mShowLatestAreaInfo) { if (mShowLatestAreaInfo) {
getActivity().unregisterReceiver(mAreaInfoReceiver); unregisterReceiver(mAreaInfoReceiver);
} }
getActivity().unregisterReceiver(mBatteryInfoReceiver); unregisterReceiver(mBatteryInfoReceiver);
getActivity().unregisterReceiver(mConnectivityReceiver); unregisterReceiver(mConnectivityReceiver);
mHandler.removeMessages(EVENT_UPDATE_STATS); mHandler.removeMessages(EVENT_UPDATE_STATS);
} }