/* * Copyright (C) 2017 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.wallpaper.picker; import static com.android.wallpaper.model.WallpaperRotationInitializer.NETWORK_PREFERENCE_CELLULAR_OK; import static com.android.wallpaper.model.WallpaperRotationInitializer.NETWORK_PREFERENCE_WIFI_ONLY; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; import com.android.wallpaper.R; import com.android.wallpaper.module.InjectorProvider; /** * Dialog which allows user to start a wallpaper rotation or cancel, as well as providing an option * whether to rotate wallpapers on wifi-only connections or not. */ public class StartRotationDialogFragment extends DialogFragment { private static final String KEY_IS_WIFI_ONLY_CHECKED = "key_is_wifi_only_checked"; private static final boolean DEFAULT_IS_WIFI_ONLY = true; private boolean mIsWifiOnlyChecked; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { mIsWifiOnlyChecked = DEFAULT_IS_WIFI_ONLY; } else { mIsWifiOnlyChecked = savedInstanceState.getBoolean(KEY_IS_WIFI_ONLY_CHECKED); } } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater inflater = getActivity().getLayoutInflater(); View dialogView = inflater.inflate(R.layout.dialog_start_rotation, null); TextView bodyText = dialogView.findViewById(R.id.start_rotation_dialog_subhead); bodyText.setText(Html.fromHtml(getResources().getString(getBodyTextResourceId()))); final CheckBox wifiOnlyCheckBox = dialogView.findViewById( R.id.start_rotation_wifi_only_checkbox); boolean hasTelephony = InjectorProvider.getInjector().getSystemFeatureChecker() .hasTelephony(getContext()); // Only show the "WiFi only" checkbox if the device supports a cellular data connection. if (hasTelephony) { wifiOnlyCheckBox.setChecked(mIsWifiOnlyChecked); wifiOnlyCheckBox.setOnClickListener( v -> mIsWifiOnlyChecked = wifiOnlyCheckBox.isChecked()); } else { wifiOnlyCheckBox.setVisibility(View.GONE); } return new AlertDialog.Builder(getActivity(), R.style.LightDialogTheme) .setView(dialogView) .setNegativeButton(android.R.string.cancel, null /* listener */) .setPositiveButton(getPositiveButtonTextResourceId(), (dialog, which) -> { RotationStarter callback = (RotationStarter) getTargetFragment(); callback.startRotation( mIsWifiOnlyChecked ? NETWORK_PREFERENCE_WIFI_ONLY : NETWORK_PREFERENCE_CELLULAR_OK); }) .create(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(KEY_IS_WIFI_ONLY_CHECKED, mIsWifiOnlyChecked); } @Override public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); ((Listener) getTargetFragment()).onStartRotationDialogDismiss(dialog); } private int getBodyTextResourceId() { return R.string.start_rotation_dialog_body; } private int getPositiveButtonTextResourceId() { return android.R.string.ok; } /** An interface for receiving this DialogFragment dismissed event. */ public interface Listener { /** Gets called when the DialogFragment is dismissed. */ void onStartRotationDialogDismiss(@NonNull DialogInterface dialog); } }