diff options
author | Yorke Lee <yorkelee@google.com> | 2015-07-24 12:27:46 -0700 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2015-07-24 12:52:02 -0700 |
commit | 5f6c901ad062cd7d88db09b555e28ee354ca66c6 (patch) | |
tree | 204db626234e773f39461181ba0c0b8a3388f428 /src/com/android/dialer/settings/DialerSettingsActivity.java | |
parent | a0018a3f788f381313ee5c5f2b15ddce8d7ec5d1 (diff) | |
download | android_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.java | 34 |
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(); |