blob: c3a13dd13a6dbf5034ce9e80c52fad76b014a79f [file] [log] [blame]
/*
* 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.emergency;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_GESTURE_CALL_NUMBER;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_GESTURE_UI_SHOWING_VALUE;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_NUMBER_OVERRIDE_AUTHORITY;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_SETTING_OFF;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_SETTING_ON;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_SETTING_VALUE;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_GET_EMERGENCY_GESTURE_ENABLED;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_GET_EMERGENCY_GESTURE_SOUND_ENABLED;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_GET_EMERGENCY_NUMBER_OVERRIDE;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_SET_EMERGENCY_GESTURE;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_SET_EMERGENCY_GESTURE_UI_SHOWING;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_SET_EMERGENCY_NUMBER_OVERRIDE;
import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.METHOD_NAME_SET_EMERGENCY_SOUND;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.Settings;
import android.util.Log;
/**
* Content provider that gets/sets emergency number override for emergency gesture.
*/
public class EmergencyGestureContentProvider extends ContentProvider {
private static final String TAG = "EmergencyNumberContentP";
private static final boolean DEBUG = true;
private static final String SHARED_PREFERENCES_NAME =
"local_emergency_number_override_shared_pref";
@Override
public Bundle call(String authority, String method, String arg, Bundle extras) {
Log.d(TAG, "calling pid/uid" + Binder.getCallingPid() + "/" + Binder.getCallingUid());
final Bundle bundle = new Bundle();
final SharedPreferences preferences = getContext().getSharedPreferences(
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
switch (method) {
case METHOD_NAME_GET_EMERGENCY_NUMBER_OVERRIDE:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_GET_EMERGENCY_NUMBER_OVERRIDE);
}
bundle.putString(EMERGENCY_GESTURE_CALL_NUMBER,
preferences.getString(EMERGENCY_GESTURE_CALL_NUMBER, null));
break;
case METHOD_NAME_SET_EMERGENCY_NUMBER_OVERRIDE:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_SET_EMERGENCY_NUMBER_OVERRIDE);
}
final String inputNumber = extras.getString(EMERGENCY_GESTURE_CALL_NUMBER);
preferences.edit().putString(EMERGENCY_GESTURE_CALL_NUMBER, inputNumber).apply();
getContext().getContentResolver().notifyChange(EMERGENCY_NUMBER_OVERRIDE_AUTHORITY,
null);
break;
case METHOD_NAME_SET_EMERGENCY_GESTURE:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_SET_EMERGENCY_GESTURE);
}
final int gestureSettingValue = extras.getInt(EMERGENCY_SETTING_VALUE);
Settings.Secure.putInt(getContext().getContentResolver(),
Settings.Secure.EMERGENCY_GESTURE_ENABLED, gestureSettingValue);
break;
case METHOD_NAME_SET_EMERGENCY_GESTURE_UI_SHOWING:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_SET_EMERGENCY_GESTURE_UI_SHOWING);
}
long now = SystemClock.elapsedRealtime();
final int gestureUiShowingValue = extras.getInt(
EMERGENCY_GESTURE_UI_SHOWING_VALUE);
Settings.Secure.putInt(getContext().getContentResolver(),
Settings.Secure.EMERGENCY_GESTURE_UI_SHOWING, gestureUiShowingValue);
if (gestureUiShowingValue != 0) {
Settings.Secure.putLong(getContext().getContentResolver(),
Settings.Secure.EMERGENCY_GESTURE_UI_LAST_STARTED_MILLIS, now);
}
break;
case METHOD_NAME_SET_EMERGENCY_SOUND:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_SET_EMERGENCY_SOUND);
}
final int soundSettingValue = extras.getInt(EMERGENCY_SETTING_VALUE);
Settings.Secure.putInt(getContext().getContentResolver(),
Settings.Secure.EMERGENCY_GESTURE_SOUND_ENABLED, soundSettingValue);
break;
case METHOD_NAME_GET_EMERGENCY_GESTURE_ENABLED:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_GET_EMERGENCY_GESTURE_ENABLED);
}
bundle.putInt(EMERGENCY_SETTING_VALUE,
Settings.Secure.getInt(getContext().getContentResolver(),
Settings.Secure.EMERGENCY_GESTURE_ENABLED,
isDefaultEmergencyGestureEnabled(getContext()) ?
EMERGENCY_SETTING_ON : EMERGENCY_SETTING_OFF));
break;
case METHOD_NAME_GET_EMERGENCY_GESTURE_SOUND_ENABLED:
if (DEBUG) {
Log.d(TAG, METHOD_NAME_GET_EMERGENCY_GESTURE_SOUND_ENABLED);
}
bundle.putInt(EMERGENCY_SETTING_VALUE,
Settings.Secure.getInt(getContext().getContentResolver(),
Settings.Secure.EMERGENCY_GESTURE_SOUND_ENABLED,
isDefaultEmergencyGestureSoundEnabled(getContext()) ?
EMERGENCY_SETTING_ON : EMERGENCY_SETTING_OFF));
break;
}
return bundle;
}
@Override
public boolean onCreate() {
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
throw new UnsupportedOperationException();
}
@Override
public String getType(Uri uri) {
throw new UnsupportedOperationException();
}
@Override
public Uri insert(Uri uri, ContentValues values) {
throw new UnsupportedOperationException();
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
throw new UnsupportedOperationException();
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
throw new UnsupportedOperationException();
}
private boolean isDefaultEmergencyGestureEnabled(Context context) {
return context.getResources().getBoolean(
com.android.internal.R.bool.config_defaultEmergencyGestureEnabled);
}
private boolean isDefaultEmergencyGestureSoundEnabled(Context context) {
return context.getResources().getBoolean(
com.android.internal.R.bool.config_defaultEmergencyGestureSoundEnabled);
}
}