diff --git a/res/layout/app_locale_picker.xml b/res/layout/app_locale_picker.xml
deleted file mode 100644
index 51e35ef37ee..00000000000
--- a/res/layout/app_locale_picker.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 9edfc51a0ac..c1cfe2eee96 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -37,4 +37,7 @@
+
+
+
diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
index b3c56eacddc..34b7472072c 100644
--- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -18,12 +18,16 @@ package com.android.settings.localepicker;
import android.app.FragmentTransaction;
import android.app.LocaleManager;
+import android.net.Uri;
import android.os.Bundle;
import android.os.LocaleList;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
+import android.view.View;
+import android.widget.FrameLayout;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.LocalePickerWithRegion;
import com.android.internal.app.LocaleStore;
import com.android.settings.R;
@@ -39,11 +43,19 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
private static final String TAG = AppLocalePickerActivity.class.getSimpleName();
private String mPackageName;
+ private LocalePickerWithRegion mLocalePickerWithRegion;
+ private AppLocaleDetails mAppLocaleDetails;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mPackageName = getIntent().getData().getSchemeSpecificPart();
+ Uri data = getIntent().getData();
+ if (data == null) {
+ Log.d(TAG, "There is no uri data.");
+ finish();
+ return;
+ }
+ mPackageName = data.getSchemeSpecificPart();
if (TextUtils.isEmpty(mPackageName)) {
Log.d(TAG, "There is no package name.");
finish();
@@ -51,25 +63,13 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
}
getActionBar().setDisplayHomeAsUpEnabled(true);
- setContentView(R.layout.app_locale_picker);
- // Create App locale info detail part.
- AppLocaleDetails appLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.app_locale_detail, appLocaleDetails)
- .commit();
+ mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker(
+ this, AppLocalePickerActivity.this, false /* translate only */, mPackageName);
+ mAppLocaleDetails = AppLocaleDetails.newInstance(mPackageName);
- // Create Locale picker part.
- final LocalePickerWithRegion selector = LocalePickerWithRegion.createLanguagePicker(
- this, AppLocalePickerActivity.this, false /* translate only */);
- // LocalePickerWithRegion use android.app.ListFragment. Thus, it can not user
- // getSupportFragmentManager() to add this into container.
- getFragmentManager()
- .beginTransaction()
- .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
- .replace(R.id.app_locale_picker_with_region, selector)
- .commit();
+ // Launch Locale picker part.
+ launchLocalePickerPage();
}
@Override
@@ -114,5 +114,38 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
}
localeManager.setApplicationLocales(mPackageName, LocaleList.forLanguageTags(languageTag));
}
-}
+ private View launchAppLocaleDetailsPage() {
+ FrameLayout appLocaleDetailsContainer = new FrameLayout(this);
+ appLocaleDetailsContainer.setId(R.id.layout_app_locale_details);
+ getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.layout_app_locale_details, mAppLocaleDetails)
+ .commit();
+ return appLocaleDetailsContainer;
+ }
+
+ @VisibleForTesting
+ void launchLocalePickerPage() {
+ // LocalePickerWithRegion use android.app.ListFragment. Thus, it can not use
+ // getSupportFragmentManager() to add this into container.
+ android.app.FragmentManager fragmentManager = getFragmentManager();
+ fragmentManager.registerFragmentLifecycleCallbacks(
+ new android.app.FragmentManager.FragmentLifecycleCallbacks() {
+ @Override
+ public void onFragmentViewCreated(
+ android.app.FragmentManager fm,
+ android.app.Fragment f,
+ View v,
+ Bundle savedInstanceState) {
+ super.onFragmentViewCreated(fm, f, v, savedInstanceState);
+ mLocalePickerWithRegion
+ .getListView().addHeaderView(launchAppLocaleDetailsPage());
+ }
+ }, true);
+ fragmentManager.beginTransaction()
+ .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+ .replace(R.id.content_frame, mLocalePickerWithRegion)
+ .commit();
+ }
+}