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(); + } +}