1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.settings.network; 17 18 import android.app.Fragment; 19 import android.content.Context; 20 import android.content.Intent; 21 import android.content.pm.PackageManager; 22 import android.os.SystemProperties; 23 import android.support.v14.preference.SwitchPreference; 24 import android.support.v7.preference.Preference; 25 import android.support.v7.preference.PreferenceScreen; 26 27 import com.android.internal.telephony.TelephonyIntents; 28 import com.android.internal.telephony.TelephonyProperties; 29 import com.android.settings.AirplaneModeEnabler; 30 import com.android.settings.core.PreferenceController; 31 import com.android.settings.core.instrumentation.MetricsFeatureProvider; 32 import com.android.settings.core.lifecycle.LifecycleObserver; 33 import com.android.settings.core.lifecycle.events.OnPause; 34 import com.android.settings.core.lifecycle.events.OnResume; 35 import com.android.settings.overlay.FeatureFactory; 36 37 public class AirplaneModePreferenceController extends PreferenceController 38 implements LifecycleObserver, OnResume, OnPause { 39 40 public static final int REQUEST_CODE_EXIT_ECM = 1; 41 42 public static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane"; 43 44 private static final String EXIT_ECM_RESULT = "exit_ecm_result"; 45 46 private final Fragment mFragment; 47 private final MetricsFeatureProvider mMetricsFeatureProvider; 48 private final PackageManager mPackageManager; 49 private AirplaneModeEnabler mAirplaneModeEnabler; 50 private SwitchPreference mAirplaneModePreference; 51 52 AirplaneModePreferenceController(Context context, Fragment hostFragment)53 public AirplaneModePreferenceController(Context context, Fragment hostFragment) { 54 super(context); 55 mFragment = hostFragment; 56 mPackageManager = context.getPackageManager(); 57 mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); 58 } 59 60 @Override handlePreferenceTreeClick(Preference preference)61 public boolean handlePreferenceTreeClick(Preference preference) { 62 if (KEY_TOGGLE_AIRPLANE.equals(preference.getKey()) && Boolean.parseBoolean( 63 SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { 64 // In ECM mode launch ECM app dialog 65 if (mFragment != null) { 66 mFragment.startActivityForResult( 67 new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null), 68 REQUEST_CODE_EXIT_ECM); 69 } 70 return true; 71 } 72 73 return false; 74 } 75 76 @Override displayPreference(PreferenceScreen screen)77 public void displayPreference(PreferenceScreen screen) { 78 if (isAvailable()) { 79 mAirplaneModePreference = (SwitchPreference) screen.findPreference(getPreferenceKey()); 80 if (mAirplaneModePreference != null) { 81 mAirplaneModeEnabler = new AirplaneModeEnabler(mContext, mAirplaneModePreference, 82 mMetricsFeatureProvider); 83 } 84 } else { 85 removePreference(screen, getPreferenceKey()); 86 } 87 } 88 89 @Override isAvailable()90 public boolean isAvailable() { 91 return !mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEVISION); 92 } 93 94 @Override getPreferenceKey()95 public String getPreferenceKey() { 96 return KEY_TOGGLE_AIRPLANE; 97 } 98 onResume()99 public void onResume() { 100 mAirplaneModeEnabler.resume(); 101 } 102 103 @Override onPause()104 public void onPause() { 105 mAirplaneModeEnabler.pause(); 106 } 107 onActivityResult(int requestCode, int resultCode, Intent data)108 public void onActivityResult(int requestCode, int resultCode, Intent data) { 109 if (requestCode == REQUEST_CODE_EXIT_ECM) { 110 Boolean isChoiceYes = data.getBooleanExtra(EXIT_ECM_RESULT, false); 111 // Set Airplane mode based on the return value and checkbox state 112 mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes, 113 mAirplaneModePreference.isChecked()); 114 } 115 } 116 } 117