Merge "Add confirmation dialog for system locale change." into udc-dev
This commit is contained in:
65
res/layout/locale_dialog.xml
Normal file
65
res/layout/locale_dialog.xml
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2023 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.
|
||||
-->
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/admin_details_dialog_padding"
|
||||
android:paddingStart="@dimen/admin_details_dialog_padding"
|
||||
android:paddingEnd="@dimen/admin_details_dialog_padding"
|
||||
android:paddingBottom="@dimen/admin_details_dialog_padding_bottom"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center_horizontal"
|
||||
android:paddingBottom="@dimen/admin_details_dialog_title_bottom_padding">
|
||||
<ImageView
|
||||
android:layout_width="@dimen/admin_details_dialog_icon_size"
|
||||
android:layout_height="@dimen/admin_details_dialog_icon_size"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/ic_settings_language"
|
||||
android:tint="#4F8438"
|
||||
android:contentDescription="@null"/>
|
||||
<TextView
|
||||
android:id="@+id/dialog_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:textAppearance="@style/TextAppearance.AdminDialogTitle"/>
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fadeScrollbars="false">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/dialog_msg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLength="200"
|
||||
android:gravity="left"
|
||||
android:autoLink="email|phone|web"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
@@ -372,6 +372,21 @@
|
||||
<!-- Link for Locale helper page. [CHAR LIMIT=NONE]-->
|
||||
<string name="link_locale_picker_footer_learn_more" translatable="false">https://support.google.com/android?p=per_language_app_settings</string>
|
||||
|
||||
<!-- Title for asking to change system locale or not. [CHAR LIMIT=50]-->
|
||||
<string name="title_change_system_locale">Change system language to %s ?</string>
|
||||
|
||||
<!-- The text of the confirmation dialog showing the system locale will be changed. [CHAR LIMIT=NONE]-->
|
||||
<string name="desc_notice_device_locale_settings_change">Your device settings and regional preferences will change.</string>
|
||||
|
||||
<!-- A dialog button for confirmmation of system locale change. [CHAR LIMIT=25]-->
|
||||
<string name="button_label_confirmation_of_system_locale_change">Change</string>
|
||||
|
||||
<!-- Title for saying this selected locale is unavailable to use. [CHAR LIMIT=50]-->
|
||||
<string name="title_unavailable_locale">%s not available</string>
|
||||
|
||||
<!-- The text of the confirmation dialog for saying this selected locale is unavailable to use. [CHAR LIMIT=NONE]-->
|
||||
<string name="desc_unavailable_locale">This language can’t be used as a system language, but you’ve let apps and websites know you prefer this language.</string>
|
||||
|
||||
<!-- Regional Preferences begin -->
|
||||
<!-- The title of the menu entry of regional preferences. [CHAR LIMIT=50] -->
|
||||
<string name="regional_preferences_title">Regional preferences</string>
|
||||
|
198
src/com/android/settings/localepicker/LocaleDialogFragment.java
Normal file
198
src/com/android/settings/localepicker/LocaleDialogFragment.java
Normal file
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.localepicker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.os.ResultReceiver;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.android.internal.app.LocaleStore;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.RestrictedSettingsFragment;
|
||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
|
||||
/**
|
||||
* Create a dialog for system locale events.
|
||||
*/
|
||||
public class LocaleDialogFragment extends InstrumentedDialogFragment {
|
||||
private static final String TAG = LocaleDialogFragment.class.getSimpleName();
|
||||
|
||||
static final int DIALOG_CONFIRM_SYSTEM_DEFAULT = 0;
|
||||
static final int DIALOG_NOT_AVAILABLE_LOCALE = 1;
|
||||
|
||||
static final String ARG_DIALOG_TYPE = "arg_dialog_type";
|
||||
static final String ARG_TARGET_LOCALE = "arg_target_locale";
|
||||
static final String ARG_RESULT_RECEIVER = "arg_result_receiver";
|
||||
|
||||
/**
|
||||
* Show dialog
|
||||
*/
|
||||
public static void show(
|
||||
@NonNull RestrictedSettingsFragment fragment,
|
||||
int dialogType,
|
||||
LocaleStore.LocaleInfo localeInfo) {
|
||||
show(fragment, dialogType, localeInfo, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show dialog
|
||||
*/
|
||||
public static void show(
|
||||
@NonNull RestrictedSettingsFragment fragment,
|
||||
int dialogType,
|
||||
LocaleStore.LocaleInfo localeInfo,
|
||||
ResultReceiver resultReceiver) {
|
||||
FragmentManager manager = fragment.getChildFragmentManager();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ARG_DIALOG_TYPE, dialogType);
|
||||
args.putSerializable(ARG_TARGET_LOCALE, localeInfo);
|
||||
args.putParcelable(ARG_RESULT_RECEIVER, resultReceiver);
|
||||
|
||||
LocaleDialogFragment localeDialogFragment = new LocaleDialogFragment();
|
||||
localeDialogFragment.setArguments(args);
|
||||
localeDialogFragment.show(manager, TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
int dialogType = getArguments().getInt(ARG_DIALOG_TYPE);
|
||||
switch (dialogType) {
|
||||
case DIALOG_CONFIRM_SYSTEM_DEFAULT:
|
||||
return SettingsEnums.DIALOG_SYSTEM_LOCALE_CHANGE;
|
||||
case DIALOG_NOT_AVAILABLE_LOCALE:
|
||||
return SettingsEnums.DIALOG_SYSTEM_LOCALE_UNAVAILABLE;
|
||||
default:
|
||||
return SettingsEnums.DIALOG_SYSTEM_LOCALE_CHANGE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
LocaleDialogController controller = new LocaleDialogController(this);
|
||||
LocaleDialogController.DialogContent dialogContent = controller.getDialogContent();
|
||||
ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(getContext()).inflate(
|
||||
R.layout.locale_dialog, null);
|
||||
setDialogTitle(viewGroup, dialogContent.mTitle);
|
||||
setDialogMessage(viewGroup, dialogContent.mMessage);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getContext())
|
||||
.setView(viewGroup);
|
||||
if (!dialogContent.mPositiveButton.isEmpty()) {
|
||||
builder.setPositiveButton(dialogContent.mPositiveButton, controller);
|
||||
}
|
||||
if (!dialogContent.mNegativeButton.isEmpty()) {
|
||||
builder.setNegativeButton(dialogContent.mNegativeButton, controller);
|
||||
}
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
private static void setDialogTitle(View root, String content) {
|
||||
TextView titleView = root.findViewById(R.id.dialog_title);
|
||||
if (titleView == null) {
|
||||
return;
|
||||
}
|
||||
titleView.setText(content);
|
||||
}
|
||||
|
||||
private static void setDialogMessage(View root, String content) {
|
||||
TextView textView = root.findViewById(R.id.dialog_msg);
|
||||
if (textView == null) {
|
||||
return;
|
||||
}
|
||||
textView.setText(content);
|
||||
}
|
||||
|
||||
static class LocaleDialogController implements DialogInterface.OnClickListener {
|
||||
private final Context mContext;
|
||||
private final int mDialogType;
|
||||
private final LocaleStore.LocaleInfo mLocaleInfo;
|
||||
private final ResultReceiver mResultReceiver;
|
||||
|
||||
LocaleDialogController(
|
||||
@NonNull Context context, @NonNull LocaleDialogFragment dialogFragment) {
|
||||
mContext = context;
|
||||
Bundle arguments = dialogFragment.getArguments();
|
||||
mDialogType = arguments.getInt(ARG_DIALOG_TYPE);
|
||||
mLocaleInfo = (LocaleStore.LocaleInfo) arguments.getSerializable(
|
||||
ARG_TARGET_LOCALE);
|
||||
mResultReceiver = (ResultReceiver) arguments.getParcelable(ARG_RESULT_RECEIVER);
|
||||
}
|
||||
|
||||
LocaleDialogController(@NonNull LocaleDialogFragment dialogFragment) {
|
||||
this(dialogFragment.getContext(), dialogFragment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if (mResultReceiver != null && mDialogType == DIALOG_CONFIRM_SYSTEM_DEFAULT) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
|
||||
if (which == DialogInterface.BUTTON_POSITIVE) {
|
||||
mResultReceiver.send(Activity.RESULT_OK, bundle);
|
||||
} else if (which == DialogInterface.BUTTON_NEGATIVE) {
|
||||
mResultReceiver.send(Activity.RESULT_CANCELED, bundle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
DialogContent getDialogContent() {
|
||||
DialogContent
|
||||
dialogContent = new DialogContent();
|
||||
switch (mDialogType) {
|
||||
case DIALOG_CONFIRM_SYSTEM_DEFAULT:
|
||||
dialogContent.mTitle = String.format(mContext.getString(
|
||||
R.string.title_change_system_locale), mLocaleInfo.getFullNameNative());
|
||||
dialogContent.mMessage = mContext.getString(
|
||||
R.string.desc_notice_device_locale_settings_change);
|
||||
dialogContent.mPositiveButton = mContext.getString(
|
||||
R.string.button_label_confirmation_of_system_locale_change);
|
||||
dialogContent.mNegativeButton = mContext.getString(R.string.cancel);
|
||||
break;
|
||||
case DIALOG_NOT_AVAILABLE_LOCALE:
|
||||
dialogContent.mTitle = String.format(mContext.getString(
|
||||
R.string.title_unavailable_locale), mLocaleInfo.getFullNameNative());
|
||||
dialogContent.mMessage = mContext.getString(R.string.desc_unavailable_locale);
|
||||
dialogContent.mPositiveButton = mContext.getString(R.string.okay);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return dialogContent;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static class DialogContent {
|
||||
String mTitle = "";
|
||||
String mMessage = "";
|
||||
String mPositiveButton = "";
|
||||
String mNegativeButton = "";
|
||||
}
|
||||
}
|
||||
}
|
@@ -16,10 +16,14 @@
|
||||
|
||||
package com.android.settings.localepicker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.LocaleList;
|
||||
import android.os.Looper;
|
||||
import android.os.ResultReceiver;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -49,9 +53,11 @@ class LocaleDragAndDropAdapter
|
||||
private static final String TAG = "LocaleDragAndDropAdapter";
|
||||
private static final String CFGKEY_SELECTED_LOCALES = "selectedLocales";
|
||||
private final Context mContext;
|
||||
private final List<LocaleStore.LocaleInfo> mFeedItemList;
|
||||
private List<LocaleStore.LocaleInfo> mFeedItemList;
|
||||
private List<LocaleStore.LocaleInfo> mCacheItemList;
|
||||
private final ItemTouchHelper mItemTouchHelper;
|
||||
private RecyclerView mParentView = null;
|
||||
private LocaleListEditor mParent;
|
||||
private boolean mRemoveMode = false;
|
||||
private boolean mDragEnabled = true;
|
||||
private NumberFormat mNumberFormatter = NumberFormat.getNumberInstance();
|
||||
@@ -81,12 +87,15 @@ class LocaleDragAndDropAdapter
|
||||
}
|
||||
}
|
||||
|
||||
public LocaleDragAndDropAdapter(Context context, List<LocaleStore.LocaleInfo> feedItemList) {
|
||||
LocaleDragAndDropAdapter(LocaleListEditor parent,
|
||||
List<LocaleStore.LocaleInfo> feedItemList) {
|
||||
mFeedItemList = feedItemList;
|
||||
mContext = context;
|
||||
mParent = parent;
|
||||
mCacheItemList = new ArrayList<>(feedItemList);
|
||||
mContext = parent.getContext();
|
||||
|
||||
final float dragElevation = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8,
|
||||
context.getResources().getDisplayMetrics());
|
||||
mContext.getResources().getDisplayMetrics());
|
||||
|
||||
mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
|
||||
ItemTouchHelper.UP | ItemTouchHelper.DOWN, 0 /* no swipe */) {
|
||||
@@ -308,6 +317,42 @@ class LocaleDragAndDropAdapter
|
||||
});
|
||||
}
|
||||
|
||||
public void doTheUpdateWithMovingLocaleItem() {
|
||||
LocaleStore.LocaleInfo localeInfo = mFeedItemList.get(0);
|
||||
if (!localeInfo.getLocale().equals(LocalePicker.getLocales().get(0))) {
|
||||
LocaleDialogFragment.show(mParent,
|
||||
LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT,
|
||||
localeInfo,
|
||||
new ResultReceiver(new Handler(Looper.getMainLooper())) {
|
||||
@Override
|
||||
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
||||
super.onReceiveResult(resultCode, resultData);
|
||||
int type = resultData.getInt(LocaleDialogFragment.ARG_DIALOG_TYPE);
|
||||
if (type == LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT) {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
doTheUpdate();
|
||||
if (!localeInfo.isTranslated()) {
|
||||
LocaleDialogFragment.show(mParent,
|
||||
LocaleDialogFragment
|
||||
.DIALOG_NOT_AVAILABLE_LOCALE,
|
||||
localeInfo);
|
||||
}
|
||||
} else {
|
||||
if (!localeInfo.getLocale()
|
||||
.equals(mCacheItemList.get(0).getLocale())) {
|
||||
mFeedItemList = new ArrayList<>(mCacheItemList);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
mCacheItemList = new ArrayList<>(mFeedItemList);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
doTheUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
private void setDragEnabled(boolean enabled) {
|
||||
mDragEnabled = enabled;
|
||||
}
|
||||
@@ -315,6 +360,7 @@ class LocaleDragAndDropAdapter
|
||||
/**
|
||||
* Saves the list of checked locales to preserve status when the list is destroyed.
|
||||
* (for instance when the device is rotated)
|
||||
*
|
||||
* @param outInstanceState Bundle in which to place the saved state
|
||||
*/
|
||||
public void saveState(Bundle outInstanceState) {
|
||||
@@ -332,6 +378,7 @@ class LocaleDragAndDropAdapter
|
||||
/**
|
||||
* Restores the list of checked locales to preserve status when the list is recreated.
|
||||
* (for instance when the device is rotated)
|
||||
*
|
||||
* @param savedInstanceState Bundle with the data saved by {@link #saveState(Bundle)}
|
||||
*/
|
||||
public void restoreState(Bundle savedInstanceState) {
|
||||
|
@@ -105,7 +105,7 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
|
||||
LocaleStore.fillCache(this.getContext());
|
||||
final List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList();
|
||||
mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList);
|
||||
mAdapter = new LocaleDragAndDropAdapter(this, feedsList);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -40,7 +40,7 @@ class LocaleRecyclerView extends RecyclerView {
|
||||
if (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL) {
|
||||
LocaleDragAndDropAdapter adapter = (LocaleDragAndDropAdapter) this.getAdapter();
|
||||
if (adapter != null) {
|
||||
adapter.doTheUpdate();
|
||||
adapter.doTheUpdateWithMovingLocaleItem();
|
||||
}
|
||||
}
|
||||
return super.onTouchEvent(e);
|
||||
|
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.localepicker;
|
||||
|
||||
import static com.android.settings.localepicker.LocaleDialogFragment.ARG_DIALOG_TYPE;
|
||||
import static com.android.settings.localepicker.LocaleDialogFragment.ARG_RESULT_RECEIVER;
|
||||
import static com.android.settings.localepicker.LocaleDialogFragment.ARG_TARGET_LOCALE;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
import android.os.ResultReceiver;
|
||||
|
||||
import androidx.test.annotation.UiThreadTest;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.internal.app.LocaleStore;
|
||||
import com.android.settings.testutils.ResourcesUtils;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@UiThreadTest
|
||||
public class LocaleDialogFragmentTest {
|
||||
@Rule
|
||||
public final MockitoRule mockito = MockitoJUnit.rule();
|
||||
|
||||
private Context mContext;
|
||||
private LocaleDialogFragment mDialogFragment;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
mDialogFragment = new LocaleDialogFragment();
|
||||
}
|
||||
|
||||
private void setArgument(
|
||||
int type, ResultReceiver receiver) {
|
||||
LocaleStore.LocaleInfo localeInfo = LocaleStore.getLocaleInfo(Locale.ENGLISH);
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(ARG_DIALOG_TYPE, type);
|
||||
args.putSerializable(ARG_TARGET_LOCALE, localeInfo);
|
||||
args.putParcelable(ARG_RESULT_RECEIVER, receiver);
|
||||
mDialogFragment.setArguments(args);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDialogContent_confirmSystemDefault_has2ButtonText() {
|
||||
setArgument(LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT, null);
|
||||
LocaleDialogFragment.LocaleDialogController controller =
|
||||
new LocaleDialogFragment.LocaleDialogController(mContext, mDialogFragment);
|
||||
|
||||
LocaleDialogFragment.LocaleDialogController.DialogContent dialogContent =
|
||||
controller.getDialogContent();
|
||||
|
||||
assertEquals(ResourcesUtils.getResourcesString(
|
||||
mContext, "button_label_confirmation_of_system_locale_change"),
|
||||
dialogContent.mPositiveButton);
|
||||
assertEquals(ResourcesUtils.getResourcesString(mContext, "cancel"),
|
||||
dialogContent.mNegativeButton);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDialogContent_unavailableLocale_has1ButtonText() {
|
||||
setArgument(LocaleDialogFragment.DIALOG_NOT_AVAILABLE_LOCALE, null);
|
||||
LocaleDialogFragment.LocaleDialogController controller =
|
||||
new LocaleDialogFragment.LocaleDialogController(mContext, mDialogFragment);
|
||||
|
||||
LocaleDialogFragment.LocaleDialogController.DialogContent dialogContent =
|
||||
controller.getDialogContent();
|
||||
|
||||
assertEquals(ResourcesUtils.getResourcesString(mContext, "okay"),
|
||||
dialogContent.mPositiveButton);
|
||||
assertTrue(dialogContent.mNegativeButton.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onClick_clickPositiveButton_sendOK() {
|
||||
ResultReceiver resultReceiver = spy(new ResultReceiver(null));
|
||||
setArgument(LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT, resultReceiver);
|
||||
LocaleDialogFragment.LocaleDialogController controller =
|
||||
new LocaleDialogFragment.LocaleDialogController(mContext, mDialogFragment);
|
||||
|
||||
controller.onClick(null, DialogInterface.BUTTON_POSITIVE);
|
||||
|
||||
verify(resultReceiver).send(eq(Activity.RESULT_OK), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onClick_clickNegativeButton_sendCancel() {
|
||||
ResultReceiver resultReceiver = spy(new ResultReceiver(null));
|
||||
setArgument(LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT, resultReceiver);
|
||||
LocaleDialogFragment.LocaleDialogController controller =
|
||||
new LocaleDialogFragment.LocaleDialogController(mContext, mDialogFragment);
|
||||
|
||||
controller.onClick(null, DialogInterface.BUTTON_NEGATIVE);
|
||||
|
||||
verify(resultReceiver).send(eq(Activity.RESULT_CANCELED), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getMetricsCategory_systemLocaleChange() {
|
||||
setArgument(LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT, null);
|
||||
|
||||
int result = mDialogFragment.getMetricsCategory();
|
||||
|
||||
assertEquals(SettingsEnums.DIALOG_SYSTEM_LOCALE_CHANGE, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getMetricsCategory_unavailableLocale() {
|
||||
setArgument(LocaleDialogFragment.DIALOG_NOT_AVAILABLE_LOCALE, null);
|
||||
|
||||
int result = mDialogFragment.getMetricsCategory();
|
||||
|
||||
assertEquals(SettingsEnums.DIALOG_SYSTEM_LOCALE_UNAVAILABLE, result);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user