Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0e98010 authored by Weng Su's avatar Weng Su Committed by Android (Google) Code Review
Browse files

Merge "[Provider Model] Update Airplane mode message" into sc-dev

parents 14a2fd6b 8ce423cd
Loading
Loading
Loading
Loading
+2 −14
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@
    android:orientation="vertical">

    <TextView
        android:id="@+id/airplane_mode_text"
        android:text="@string/condition_airplane_title"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:layout_width="wrap_content"
@@ -30,17 +29,6 @@
        android:layout_gravity="center_horizontal"
        android:layout_marginStart="@dimen/content_margin_left"
        android:layout_marginEnd="@dimen/content_margin_left"
        android:layout_marginTop="@dimen/view_airplane_mode_networks_button_margin_vertical"
        android:layout_marginBottom="@dimen/view_airplane_mode_networks_button_margin_vertical"/>

    <Button
        android:id="@+id/view_airplane_mode_networks_button"
        android:text="@string/view_airplane_safe_networks"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginStart="@dimen/content_margin_left"
        android:layout_marginEnd="@dimen/content_margin_left"
        android:layout_marginBottom="@dimen/view_airplane_mode_networks_button_margin_vertical"
        style="@style/ActionPrimaryButton"/>
        android:layout_marginTop="@dimen/airplane_mode_message_margin_vertical"
        android:layout_marginBottom="@dimen/airplane_mode_message_margin_vertical"/>
</LinearLayout>
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@
    <dimen name="wifi_detail_page_header_image_size">32dp</dimen>

    <!-- Internet Preferences -->
    <dimen name="view_airplane_mode_networks_button_margin_vertical">24dp</dimen>
    <dimen name="airplane_mode_message_margin_vertical">24dp</dimen>
    <dimen name="reset_internet_ring_progress_right_margin">4dp</dimen>

    <!-- Color picker -->
+3 −3
Original line number Diff line number Diff line
@@ -28,12 +28,12 @@
        android:layout="@layout/resetting_internet"
        settings:allowDividerBelow="true"/>

    <!-- View airplane mode networks button -->
    <!-- Airplane mode message -->
    <com.android.settingslib.widget.LayoutPreference
        android:key="view_airplane_mode_netwokrs_button"
        android:key="airplane_mode_message"
        android:title="@string/condition_airplane_title"
        android:selectable="false"
        android:layout="@layout/view_airplane_mode_networks_button"
        android:layout="@layout/airplane_mode_message_preference"
        settings:allowDividerBelow="true"/>

    <Preference
+32 −20
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;

import com.android.settings.AirplaneModeEnabler;
import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.core.FeatureFlags;
@@ -98,7 +99,8 @@ import java.util.Optional;
public class NetworkProviderSettings extends RestrictedSettingsFragment
        implements Indexable, WifiPickerTracker.WifiPickerTrackerCallback,
        WifiDialog2.WifiDialog2Listener, DialogInterface.OnDismissListener,
        ConnectivitySubsystemsRecoveryManager.RecoveryStatusCallback {
        ConnectivitySubsystemsRecoveryManager.RecoveryStatusCallback,
        AirplaneModeEnabler.OnAirplaneModeChangedListener {

    public static final String ACTION_NETWORK_PROVIDER_SETTINGS =
            "android.settings.NETWORK_PROVIDER_SETTINGS";
@@ -118,6 +120,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    static final int CONFIG_NETWORK_REQUEST = 3;
    static final int MANAGE_SUBSCRIPTION = 4;

    private static final String PREF_KEY_AIRPLANE_MODE_MSG = "airplane_mode_message";
    private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list";
    // TODO(b/70983952): Rename these to use WifiEntry instead of AccessPoint.
    private static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point";
@@ -184,6 +187,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
     */
    private boolean mIsRestricted;

    @VisibleForTesting
    AirplaneModeEnabler mAirplaneModeEnabler;
    @VisibleForTesting
    WifiPickerTracker mWifiPickerTracker;
    private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
@@ -204,8 +209,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    @VisibleForTesting
    DataUsagePreference mDataUsagePreference;
    @VisibleForTesting
    ViewAirplaneModeNetworksLayoutPreferenceController
            mViewAirplaneModeNetworksButtonPreference;
    Preference mAirplaneModeMsgPreference;
    @VisibleForTesting
    LayoutPreference mResetInternetPreference;
    @VisibleForTesting
@@ -241,6 +245,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mAirplaneModeEnabler = new AirplaneModeEnabler(getContext(), this);

        // TODO(b/37429702): Add animations and preference comparator back after initial screen is
        // loaded (ODR).
@@ -254,6 +259,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    private void addPreferences() {
        addPreferencesFromResource(R.xml.network_provider_settings);

        mAirplaneModeMsgPreference = findPreference(PREF_KEY_AIRPLANE_MODE_MSG);
        updateAirplaneModeMsgPreference(mAirplaneModeEnabler.isAirplaneModeOn() /* visible */);
        mConnectedWifiEntryPreferenceCategory = findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
        mWifiEntryPreferenceCategory = findPreference(PREF_KEY_ACCESS_POINTS);
        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
@@ -269,11 +276,16 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
            mResetInternetPreference.setVisible(false);
        }
        addNetworkMobileProviderController();
        addViewAirplaneModeNetworksButtonController();
        addConnectedEthernetNetworkController();
        addWifiSwitchPreferenceController();
    }

    private void updateAirplaneModeMsgPreference(boolean visible) {
        if (mAirplaneModeMsgPreference != null) {
            mAirplaneModeMsgPreference.setVisible(visible);
        }
    }

    private void addNetworkMobileProviderController() {
        if (mNetworkMobileProviderController == null) {
            mNetworkMobileProviderController = new NetworkMobileProviderController(
@@ -283,15 +295,6 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
        mNetworkMobileProviderController.displayPreference(getPreferenceScreen());
    }

    private void addViewAirplaneModeNetworksButtonController() {
        if (mViewAirplaneModeNetworksButtonPreference == null) {
            mViewAirplaneModeNetworksButtonPreference =
                    new ViewAirplaneModeNetworksLayoutPreferenceController(
                            getContext(), getSettingsLifecycle());
        }
        mViewAirplaneModeNetworksButtonPreference.displayPreference(getPreferenceScreen());
    }

    private void addConnectedEthernetNetworkController() {
        if (mConnectedEthernetNetworkController == null) {
            mConnectedEthernetNetworkController =
@@ -386,10 +389,11 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    @Override
    public void onStart() {
        super.onStart();

        if (mIsRestricted) {
            restrictUi();
            return;
        }
        mAirplaneModeEnabler.start();
    }

    private void restrictUi() {
@@ -419,6 +423,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    public void onStop() {
        getView().removeCallbacks(mUpdateWifiEntryPreferencesRunnable);
        getView().removeCallbacks(mHideProgressBarRunnable);
        mAirplaneModeEnabler.stop();
        super.onStop();
    }

@@ -1188,9 +1193,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
        if (mResetInternetPreference != null) {
            mResetInternetPreference.setVisible(true);
        }
        if (mViewAirplaneModeNetworksButtonPreference != null) {
            mViewAirplaneModeNetworksButtonPreference.setVisible(false);
        }
        updateAirplaneModeMsgPreference(false /* visible */);
    }

    /**
@@ -1200,9 +1203,18 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
        if (mResetInternetPreference != null) {
            mResetInternetPreference.setVisible(false);
        }
        if (mViewAirplaneModeNetworksButtonPreference != null
                && mViewAirplaneModeNetworksButtonPreference.isAvailable()) {
            mViewAirplaneModeNetworksButtonPreference.setVisible(true);
        if (mAirplaneModeEnabler.isAirplaneModeOn()) {
            updateAirplaneModeMsgPreference(true /* visible */);
        }
    }

    /**
     * Called when airplane mode status is changed.
     *
     * @param isAirplaneModeOn The airplane mode is on
     */
    @Override
    public void onAirplaneModeChanged(boolean isAirplaneModeOn) {
        updateAirplaneModeMsgPreference(isAirplaneModeOn /* visible */);
    }
}
+0 −168
Original line number Diff line number Diff line
/*
 * 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.network;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.PreferenceScreen;

import com.android.settings.AirplaneModeEnabler;
import com.android.settings.R;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.widget.LayoutPreference;

/**
 * This controls the airplane mode message and click button of the "View airplane mode networks"
 * item on the Network & internet page.
 */
public class ViewAirplaneModeNetworksLayoutPreferenceController extends AbstractPreferenceController
        implements LifecycleObserver, AirplaneModeEnabler.OnAirplaneModeChangedListener,
        View.OnClickListener {

    public static final String KEY = "view_airplane_mode_netwokrs_button";

    private LayoutPreference mPreference;
    @VisibleForTesting
    TextView mTextView;
    @VisibleForTesting
    Button mButton;

    private AirplaneModeEnabler mAirplaneModeEnabler;
    private final WifiManager mWifiManager;
    private final IntentFilter mIntentFilter;
    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
                refreshLayout();
            }
        }
    };

    public ViewAirplaneModeNetworksLayoutPreferenceController(Context context,
            Lifecycle lifecycle) {
        super(context);
        if (lifecycle == null) {
            throw new IllegalArgumentException("Lifecycle must be set");
        }
        mAirplaneModeEnabler = new AirplaneModeEnabler(context, this);
        mWifiManager = context.getSystemService(WifiManager.class);
        mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
        lifecycle.addObserver(this);
    }

    @Override
    public boolean isAvailable() {
        return mAirplaneModeEnabler.isAirplaneModeOn();
    }

    @Override
    public String getPreferenceKey() {
        return KEY;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
        generateLayout();
    }

    /** Lifecycle.Event.ON_START */
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        mAirplaneModeEnabler.start();
    }

    /** Lifecycle.Event.ON_STOP */
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        mAirplaneModeEnabler.stop();
    }

    /** Lifecycle.Event.ON_RESUME */
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        mContext.registerReceiver(mBroadcastReceiver, mIntentFilter);
    }

    /** Lifecycle.Event.ON_PAUSE */
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        mContext.unregisterReceiver(mBroadcastReceiver);
    }

    @Override
    public void onAirplaneModeChanged(boolean isAirplaneModeOn) {
        if (mPreference != null) {
            mPreference.setVisible(isAirplaneModeOn);
        }
    }

    @Override
    public void onClick(View v) {
        mWifiManager.setWifiEnabled(true);
    }

    private void generateLayout() {
        if (mPreference == null) {
            return;
        }
        if (mTextView == null) {
            mTextView = mPreference.findViewById(R.id.airplane_mode_text);
        }
        if (mButton == null) {
            mButton = mPreference.findViewById(R.id.view_airplane_mode_networks_button);
        }
        if (mButton != null) {
            mButton.setOnClickListener(this);
        }
        refreshLayout();
    }

    @VisibleForTesting
    void refreshLayout() {
        boolean isWifiEnabled = mWifiManager.isWifiEnabled();
        if (mTextView != null) {
            mTextView.setText(isWifiEnabled ? R.string.viewing_airplane_mode_networks
                    : R.string.condition_airplane_title);
        }
        if (mButton != null) {
            mButton.setVisibility(isWifiEnabled ? View.GONE : View.VISIBLE);
        }
    }

    /**
     * Sets the visibility of the preference.
     */
    public void setVisible(boolean visible) {
        if (mPreference != null) {
            mPreference.setVisible(visible);
        }
    }
}
Loading