summaryrefslogtreecommitdiffstats
path: root/src/com/android/dialer/settings/DialerSettingsActivity.java
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-07-24 12:27:46 -0700
committerYorke Lee <yorkelee@google.com>2015-07-24 12:52:02 -0700
commit5f6c901ad062cd7d88db09b555e28ee354ca66c6 (patch)
tree204db626234e773f39461181ba0c0b8a3388f428 /src/com/android/dialer/settings/DialerSettingsActivity.java
parenta0018a3f788f381313ee5c5f2b15ddce8d7ec5d1 (diff)
downloadandroid_packages_apps_Dialer-5f6c901ad062cd7d88db09b555e28ee354ca66c6.tar.gz
android_packages_apps_Dialer-5f6c901ad062cd7d88db09b555e28ee354ca66c6.tar.bz2
android_packages_apps_Dialer-5f6c901ad062cd7d88db09b555e28ee354ca66c6.zip
Protect against lack of WRITE_SYSTEM_SETTINGS AppOp
Guard the following entry points with checks against the AppOp 1) Launch of SoundSettingsFragment Fallback: Send to system sound settings instead 2) onResume of SoundSettingsFragment (this can happen if the AppOp is toggled by the user in the background) Fallback: Return to main Dialer settings instead 3) Toggling of various perferences (this can happen in monkey tests) Fallback: Show toast, ignore settings chance Bug: 22660372 Change-Id: Ief5d74166d35a9718ea664f378f6930e777f2923
Diffstat (limited to 'src/com/android/dialer/settings/DialerSettingsActivity.java')
-rw-r--r--src/com/android/dialer/settings/DialerSettingsActivity.java34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index d54053b40..abf854c08 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -1,23 +1,22 @@
package com.android.dialer.settings;
-import com.google.common.collect.Lists;
-
-import android.content.ComponentName;
+import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.os.UserHandle;
+import android.os.Process;
import android.os.UserManager;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
-import android.preference.PreferenceActivity.Header;
+import android.provider.Settings;
import android.telecom.TelecomManager;
import android.telephony.TelephonyManager;
-import android.text.TextUtils;
+import android.util.Log;
import android.view.MenuItem;
+import android.widget.Toast;
-import com.android.dialer.DialtactsActivity;
+import com.android.contacts.common.util.PermissionsUtil;
import com.android.dialer.R;
import java.util.List;
@@ -26,8 +25,6 @@ public class DialerSettingsActivity extends PreferenceActivity {
protected SharedPreferences mPreferences;
- private static final int OWNER_HANDLE_ID = 0;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -44,6 +41,7 @@ public class DialerSettingsActivity extends PreferenceActivity {
Header soundSettingsHeader = new Header();
soundSettingsHeader.titleRes = R.string.sounds_and_vibration_title;
soundSettingsHeader.fragment = SoundSettingsFragment.class.getName();
+ soundSettingsHeader.id = R.id.settings_header_sounds_and_vibration;
target.add(soundSettingsHeader);
Header quickResponseSettingsHeader = new Header();
@@ -91,6 +89,24 @@ public class DialerSettingsActivity extends PreferenceActivity {
}
@Override
+ public void onHeaderClick(Header header, int position) {
+ if (header.id == R.id.settings_header_sounds_and_vibration) {
+ // If we don't have the AppOp to write to system settings, go to system sound settings
+ // instead. Otherwise, perform the super implementation (which launches our own
+ // preference fragment.
+ if (!PermissionsUtil.hasAppOp(this, AppOpsManager.OPSTR_WRITE_SETTINGS)) {
+ Toast.makeText(
+ this,
+ getResources().getString(R.string.toast_cannot_write_system_settings),
+ Toast.LENGTH_SHORT).show();
+ startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS));
+ return;
+ }
+ }
+ super.onHeaderClick(header, position);
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();