EmergencyAffordanceManager.java revision 705442fa7dcbf1bf92595fdaca6cc888810931d8
1705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek/* 2705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * Copyright (C) 2016 The Android Open Source Project 3705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * 4705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * Licensed under the Apache License, Version 2.0 (the "License"); 5705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * you may not use this file except in compliance with the License. 6705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * You may obtain a copy of the License at 7705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * 8705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * http://www.apache.org/licenses/LICENSE-2.0 9705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * 10705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * Unless required by applicable law or agreed to in writing, software 11705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * distributed under the License is distributed on an "AS IS" BASIS, 12705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * See the License for the specific language governing permissions and 14705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * limitations under the License 15705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek */ 16705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 17705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekpackage com.android.internal.policy; 18705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 19705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.content.Context; 20705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.content.Intent; 21705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.net.Uri; 22705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.os.Build; 23705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekimport android.provider.Settings; 24705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 25705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek/** 26705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * A class that manages emergency affordances and enables immediate calling to emergency services 27705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek */ 28705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinekpublic class EmergencyAffordanceManager { 29705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 30705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public static final boolean ENABLED = true; 31705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 32705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek /** 33705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * Global setting override with the number to call with the emergency affordance. 34705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * @hide 35705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek */ 36705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private static final String EMERGENCY_CALL_NUMBER_SETTING = "emergency_affordance_number"; 37705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 38705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek /** 39705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * Global setting, whether the emergency affordance should be shown regardless of device state. 40705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * The value is a boolean (1 or 0). 41705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * @hide 42705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek */ 43705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private static final String FORCE_EMERGENCY_AFFORDANCE_SETTING = "force_emergency_affordance"; 44705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 45705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private final Context mContext; 46705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 47705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public EmergencyAffordanceManager(Context context) { 48705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek mContext = context; 49705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 50705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 51705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek /** 52705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * perform an emergency call. 53705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek */ 54705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public final void performEmergencyCall() { 55705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek performEmergencyCall(mContext); 56705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 57705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 58705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private static Uri getPhoneUri(Context context) { 59705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek String number = context.getResources().getString( 60705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek com.android.internal.R.string.config_emergency_call_number); 61705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (Build.IS_DEBUGGABLE) { 62705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek String override = Settings.Global.getString( 63705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek context.getContentResolver(), EMERGENCY_CALL_NUMBER_SETTING); 64705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (override != null) { 65705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek number = override; 66705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 67705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 68705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return Uri.fromParts("tel", number, null); 69705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 70705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 71705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private static void performEmergencyCall(Context context) { 72705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek Intent intent = new Intent(Intent.ACTION_CALL_EMERGENCY); 73705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek intent.setData(getPhoneUri(context)); 74705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 75705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek context.startActivity(intent); 76705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 77705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 78705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek /** 79705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek * @return whether emergency affordance should be active. 80705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek */ 81705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek public boolean needsEmergencyAffordance() { 82705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (!ENABLED) { 83705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return false; 84705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 85705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek if (forceShowing()) { 86705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return true; 87705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 88705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return isEmergencyAffordanceNeeded(); 89705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 90705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 91705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private boolean isEmergencyAffordanceNeeded() { 92705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return Settings.Global.getInt(mContext.getContentResolver(), 93705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek Settings.Global.EMERGENCY_AFFORDANCE_NEEDED, 0) != 0; 94705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 95705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 96705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek 97705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek private boolean forceShowing() { 98705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek return Settings.Global.getInt(mContext.getContentResolver(), 99705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek FORCE_EMERGENCY_AFFORDANCE_SETTING, 0) != 0; 100705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek } 101705442fa7dcbf1bf92595fdaca6cc888810931d8Selim Cinek} 102