diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2014-08-13 16:22:38 -0700 |
---|---|---|
committer | Fabrice Di Meglio <fdimeglio@google.com> | 2014-08-15 11:36:31 -0700 |
commit | 61a1fec49fbfbe8bdd0137ddb06e5eacf4f8ec54 (patch) | |
tree | fe8378adba969bd44b0a1315037b6dd306b00a02 | |
parent | 898671f14123695d74bd308450a462d11a341d1a (diff) | |
download | packages_apps_Settings-61a1fec49fbfbe8bdd0137ddb06e5eacf4f8ec54.zip packages_apps_Settings-61a1fec49fbfbe8bdd0137ddb06e5eacf4f8ec54.tar.gz packages_apps_Settings-61a1fec49fbfbe8bdd0137ddb06e5eacf4f8ec54.tar.bz2 |
Fix bug #16703191 APN settings shows back button even when you intent into it
- change a bit the way we recognize a SubSetting. Now we can pass the new
":settings:show_fragment_as_subsetting" Intent extra for forcing it.
- convert ApnSettings to a SettingsPreferenceFragment
Change-Id: I22167ad317530c0a58c4d522a72826f9d34ad2d3
-rw-r--r-- | AndroidManifest.xml | 7 | ||||
-rw-r--r-- | res/layout/apn_disallowed_preference_screen.xml | 39 | ||||
-rw-r--r-- | res/layout/apn_preference_layout.xml | 2 | ||||
-rw-r--r-- | src/com/android/settings/ApnSettings.java | 79 | ||||
-rw-r--r-- | src/com/android/settings/Settings.java | 1 | ||||
-rw-r--r-- | src/com/android/settings/SettingsActivity.java | 28 |
6 files changed, 74 insertions, 82 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2d2f9b4..6cb227c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -295,10 +295,11 @@ </intent-filter> </activity-alias> - <activity android:name="ApnSettings" + <activity android:name="Settings$ApnSettingsActivity" android:label="@string/apn_settings" - android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTask" + android:taskAffinity="com.android.settings" + android:configChanges="orientation|keyboardHidden|screenSize" android:parentActivityName="Settings$WirelessSettingsActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -308,6 +309,8 @@ </intent-filter> <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" /> + <meta-data android:name="com.android.settings.FRAGMENT_CLASS" + android:value="com.android.settings.ApnSettings" /> </activity> <activity android:name="Settings$BluetoothSettingsActivity" diff --git a/res/layout/apn_disallowed_preference_screen.xml b/res/layout/apn_disallowed_preference_screen.xml deleted file mode 100644 index 6ac8137..0000000 --- a/res/layout/apn_disallowed_preference_screen.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?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. - */ ---> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/listContainer" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <ListView android:id="@android:id/list" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:drawSelectorOnTop="false" - android:scrollbarStyle="insideOverlay" - android:background="@android:color/white" - android:cacheColorHint="@android:color/white" - android:fadingEdgeLength="16dip" /> - - <TextView android:id="@android:id/empty" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:gravity="center" - android:text="@string/apn_settings_not_available" - android:textAppearance="?android:attr/textAppearanceMedium" /> -</FrameLayout>
\ No newline at end of file diff --git a/res/layout/apn_preference_layout.xml b/res/layout/apn_preference_layout.xml index 8938f29..f3ee453 100644 --- a/res/layout/apn_preference_layout.xml +++ b/res/layout/apn_preference_layout.xml @@ -18,6 +18,8 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="center_vertical"> diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java index ef79f2b..b8864f3 100644 --- a/src/com/android/settings/ApnSettings.java +++ b/src/com/android/settings/ApnSettings.java @@ -39,8 +39,12 @@ import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.provider.Telephony; import android.util.Log; +import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; import android.widget.Toast; import com.android.internal.telephony.Phone; @@ -50,7 +54,7 @@ import com.android.internal.telephony.TelephonyProperties; import java.util.ArrayList; -public class ApnSettings extends PreferenceActivity implements +public class ApnSettings extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener { static final String TAG = "ApnSettings"; @@ -121,33 +125,47 @@ public class ApnSettings extends PreferenceActivity implements } @Override - protected void onCreate(Bundle icicle) { + public void onCreate(Bundle icicle) { super.onCreate(icicle); mUm = (UserManager) getSystemService(Context.USER_SERVICE); + mMobileStateFilter = new IntentFilter( + TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED); + + setHasOptionsMenu(true); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + TextView empty = (TextView) getView().findViewById(android.R.id.empty); + if (empty != null) { + empty.setText(R.string.apn_settings_not_available); + getListView().setEmptyView(empty); + } + if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) { mUnavailable = true; - setContentView(R.layout.apn_disallowed_preference_screen); + setPreferenceScreen(new PreferenceScreen(getActivity(), null)); return; } addPreferencesFromResource(R.xml.apn_settings); - getListView().setItemsCanFocus(true); - mMobileStateFilter = new IntentFilter( - TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED); + getListView().setItemsCanFocus(true); } @Override - protected void onResume() { + public void onResume() { super.onResume(); if (mUnavailable) { return; } - registerReceiver(mMobileStateReceiver, mMobileStateFilter); + getActivity().registerReceiver(mMobileStateReceiver, mMobileStateFilter); if (!mRestoreDefaultApnMode) { fillList(); @@ -157,18 +175,18 @@ public class ApnSettings extends PreferenceActivity implements } @Override - protected void onPause() { + public void onPause() { super.onPause(); if (mUnavailable) { return; } - unregisterReceiver(mMobileStateReceiver); + getActivity().unregisterReceiver(mMobileStateReceiver); } @Override - protected void onDestroy() { + public void onDestroy() { super.onDestroy(); if (mRestoreDefaultApnThread != null) { @@ -199,7 +217,7 @@ public class ApnSettings extends PreferenceActivity implements String key = cursor.getString(ID_INDEX); String type = cursor.getString(TYPES_INDEX); - ApnPreference pref = new ApnPreference(this); + ApnPreference pref = new ApnPreference(getActivity()); pref.setKey(key); pref.setTitle(name); @@ -228,16 +246,18 @@ public class ApnSettings extends PreferenceActivity implements } @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - menu.add(0, MENU_NEW, 0, - getResources().getString(R.string.menu_new)) - .setIcon(android.R.drawable.ic_menu_add) - .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - menu.add(0, MENU_RESTORE, 0, - getResources().getString(R.string.menu_restore)) - .setIcon(android.R.drawable.ic_menu_upload); - return true; + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + if (!mUnavailable) { + menu.add(0, MENU_NEW, 0, + getResources().getString(R.string.menu_new)) + .setIcon(android.R.drawable.ic_menu_add) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menu.add(0, MENU_RESTORE, 0, + getResources().getString(R.string.menu_restore)) + .setIcon(android.R.drawable.ic_menu_upload); + } + + super.onCreateOptionsMenu(menu, inflater); } @Override @@ -329,9 +349,9 @@ public class ApnSettings extends PreferenceActivity implements fillList(); getPreferenceScreen().setEnabled(true); mRestoreDefaultApnMode = false; - dismissDialog(DIALOG_RESTORE_DEFAULTAPN); + removeDialog(DIALOG_RESTORE_DEFAULTAPN); Toast.makeText( - ApnSettings.this, + getActivity(), getResources().getString( R.string.restore_default_apn_completed), Toast.LENGTH_LONG).show(); @@ -362,20 +382,13 @@ public class ApnSettings extends PreferenceActivity implements } @Override - protected Dialog onCreateDialog(int id) { + public Dialog onCreateDialog(int id) { if (id == DIALOG_RESTORE_DEFAULTAPN) { - ProgressDialog dialog = new ProgressDialog(this); + ProgressDialog dialog = new ProgressDialog(getActivity()); dialog.setMessage(getResources().getString(R.string.restore_default_apn)); dialog.setCancelable(false); return dialog; } return null; } - - @Override - protected void onPrepareDialog(int id, Dialog dialog) { - if (id == DIALOG_RESTORE_DEFAULTAPN) { - getPreferenceScreen().setEnabled(false); - } - } } diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 123d4fe..b714d28 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -98,5 +98,6 @@ public class Settings extends SettingsActivity { public static class QuickLaunchSettingsActivity extends SettingsActivity { /* empty */ } public static class TopLevelSettings extends SettingsActivity { /* empty */ } + public static class ApnSettingsActivity extends SettingsActivity { /* empty */ } } diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index bf0d9a1..9f1600b 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -184,8 +184,13 @@ public class SettingsActivity extends Activity * that fragment. */ public static final String EXTRA_SHOW_FRAGMENT_TITLE = ":settings:show_fragment_title"; - public static final String EXTRA_SHOW_FRAGMENT_TITLE_RESID = ":settings:show_fragment_title_resid"; - public static final String EXTRA_SHOW_FRAGMENT_AS_SHORTCUT = ":settings:show_fragment_as_shortcut"; + public static final String EXTRA_SHOW_FRAGMENT_TITLE_RESID = + ":settings:show_fragment_title_resid"; + public static final String EXTRA_SHOW_FRAGMENT_AS_SHORTCUT = + ":settings:show_fragment_as_shortcut"; + + public static final String EXTRA_SHOW_FRAGMENT_AS_SUBSETTING = + ":settings:show_fragment_as_subsetting"; private static final String META_DATA_KEY_FRAGMENT_CLASS = "com.android.settings.FRAGMENT_CLASS"; @@ -290,7 +295,8 @@ public class SettingsActivity extends Activity NotificationAppList.class.getName(), AppNotificationSettings.class.getName(), OtherSoundSettings.class.getName(), - QuickLaunchSettings.class.getName() + QuickLaunchSettings.class.getName(), + ApnSettings.class.getName() }; @@ -495,12 +501,15 @@ public class SettingsActivity extends Activity final String className = cn.getClassName(); mIsShowingDashboard = className.equals(Settings.class.getName()); - final boolean isSubSettings = className.equals(SubSettings.class.getName()); - // If this is a sub settings or not the main Dashboard and not a Shortcut and an initial - // Fragment then apply the SubSettings theme for the ActionBar content insets - if (isSubSettings || - (!mIsShowingDashboard && !mIsShortcut && (initialFragmentName != null))) { + // This is a "Sub Settings" when: + // - this is a real SubSettings + // - or :settings:show_fragment_as_subsetting is passed to the Intent + final boolean isSubSettings = className.equals(SubSettings.class.getName()) || + intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false); + + // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content insets + if (isSubSettings) { // Check also that we are not a Theme Dialog as we don't want to override them final int themeResId = getThemeResId(); if (themeResId != R.style.Theme_DialogWhenLarge && @@ -550,6 +559,9 @@ public class SettingsActivity extends Activity } else if (isSubSettings) { mDisplayHomeAsUpEnabled = true; mDisplaySearch = true; + } else { + mDisplayHomeAsUpEnabled = false; + mDisplaySearch = false; } setTitleFromIntent(intent); |