Merge "[Panlingual] Add outside entry."
This commit is contained in:
@@ -832,6 +832,18 @@
|
||||
android:theme="@style/Theme.LocalePickerWithRegionActivity">
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".applications.appinfo.AppLocalePickerActivity"
|
||||
android:label="@string/app_locale_picker_title"
|
||||
android:exported="true" >
|
||||
<intent-filter>
|
||||
<action android:name="android.settings.APP_LOCALE_SETTINGS" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||
android:value="com.android.settings.applications.appinfo.AppLocaleDetails" />
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".Settings$LanguageAndInputSettingsActivity"
|
||||
android:label="@string/language_settings"
|
||||
|
@@ -270,9 +270,14 @@ public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreferen
|
||||
/** Gets per app's default locale */
|
||||
public static Locale getAppDefaultLocale(Context context, String packageName) {
|
||||
LocaleManager localeManager = context.getSystemService(LocaleManager.class);
|
||||
LocaleList localeList = (localeManager == null)
|
||||
? new LocaleList() : localeManager.getApplicationLocales(packageName);
|
||||
return localeList.isEmpty() ? null : localeList.get(0);
|
||||
try {
|
||||
LocaleList localeList = (localeManager == null)
|
||||
? new LocaleList() : localeManager.getApplicationLocales(packageName);
|
||||
return localeList.isEmpty() ? null : localeList.get(0);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.w(TAG, "package name : " + packageName + " is not correct. " + e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Sets per app's default language to system. */
|
||||
|
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.
|
||||
*/
|
||||
package com.android.settings.applications.appinfo;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.applications.AppInfoBase;
|
||||
|
||||
/** Activity for the entry of {@link #AppLocaleDetails} from outside Settings app. */
|
||||
public class AppLocalePickerActivity extends SettingsActivity {
|
||||
private static final String TAG = "AppLocalePickerActivity";
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedState) {
|
||||
Intent intent = getEntryIntent(getIntent());
|
||||
if (intent == null) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
setIntent(intent);
|
||||
super.onCreate(savedState);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
Intent getEntryIntent(Intent intent) {
|
||||
String callingPackage = getCallingPackage();
|
||||
if (callingPackage == null || callingPackage.isEmpty()) {
|
||||
Log.d(TAG, "No calling package name is found.");
|
||||
return null;
|
||||
}
|
||||
final Bundle fragmentArgs = new Bundle();
|
||||
fragmentArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, callingPackage);
|
||||
return intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs);
|
||||
}
|
||||
}
|
@@ -42,6 +42,7 @@ import com.android.settings.applications.ProcessStatsUi;
|
||||
import com.android.settings.applications.UsageAccessDetails;
|
||||
import com.android.settings.applications.appinfo.AlarmsAndRemindersDetails;
|
||||
import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
|
||||
import com.android.settings.applications.appinfo.AppLocaleDetails;
|
||||
import com.android.settings.applications.appinfo.DrawOverlayDetails;
|
||||
import com.android.settings.applications.appinfo.ExternalSourcesDetails;
|
||||
import com.android.settings.applications.appinfo.ManageExternalStorageDetails;
|
||||
@@ -331,7 +332,8 @@ public class SettingsGateway {
|
||||
MediaManagementAppsDetails.class.getName(),
|
||||
AutoBrightnessSettings.class.getName(),
|
||||
OneHandedSettings.class.getName(),
|
||||
MobileNetworkSettings.class.getName()
|
||||
MobileNetworkSettings.class.getName(),
|
||||
AppLocaleDetails.class.getName()
|
||||
};
|
||||
|
||||
public static final String[] SETTINGS_FOR_RESTRICTED = {
|
||||
|
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.
|
||||
*/
|
||||
|
||||
package com.android.settings.applications.appinfo;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
|
||||
import androidx.test.annotation.UiThreadTest;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.applications.AppInfoBase;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class AppLocalePickerActivityTest {
|
||||
private TestAppLocalePickerActivity mActivity;
|
||||
|
||||
@Before
|
||||
@UiThreadTest
|
||||
public void setUp() {
|
||||
if (Looper.myLooper() == null) {
|
||||
Looper.prepare();
|
||||
}
|
||||
mActivity = new TestAppLocalePickerActivity();
|
||||
}
|
||||
|
||||
@After
|
||||
public void cleanUp() {
|
||||
mActivity = null;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreate_getEntryIntent_returnNull() {
|
||||
TestAppLocalePickerActivity.setCallingPackage(null);
|
||||
Intent intent = new Intent();
|
||||
|
||||
assertThat(mActivity.getEntryIntent(intent)).isEqualTo(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onCreate_getEntryIntent_returnIntentWithPackageName() {
|
||||
String callingPackageName = "com.example.android";
|
||||
TestAppLocalePickerActivity.setCallingPackage(callingPackageName);
|
||||
Intent intent = new Intent();
|
||||
|
||||
Intent entryIntent = mActivity.getEntryIntent(intent);
|
||||
|
||||
Bundle outputBundle =
|
||||
entryIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
String packageName = outputBundle.getString(AppInfoBase.ARG_PACKAGE_NAME);
|
||||
assertThat(packageName).isEqualTo(callingPackageName);
|
||||
}
|
||||
|
||||
private static class TestAppLocalePickerActivity extends AppLocalePickerActivity {
|
||||
private static String sCallingPackage;
|
||||
@Override
|
||||
public String getCallingPackage() {
|
||||
return sCallingPackage;
|
||||
}
|
||||
|
||||
public static void setCallingPackage(String packageName) {
|
||||
sCallingPackage = packageName;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user