diff options
author | PauloftheWest <paulofthewest@google.com> | 2014-07-01 05:19:58 -0700 |
---|---|---|
committer | PauloftheWest <paulofthewest@google.com> | 2014-07-11 15:55:00 -0700 |
commit | c9dc66d6059a5bcc867ab2046c59f969a13c46d7 (patch) | |
tree | 65d9e122a201695371d3442b66d319c97e4bd052 | |
parent | 74e7c3e3601f4808854cf12bffe11ebf4c6ea8ab (diff) | |
download | packages_apps_Settings-c9dc66d6059a5bcc867ab2046c59f969a13c46d7.tar.gz packages_apps_Settings-c9dc66d6059a5bcc867ab2046c59f969a13c46d7.tar.bz2 packages_apps_Settings-c9dc66d6059a5bcc867ab2046c59f969a13c46d7.zip |
Add BT message access
+ List available email accounts
+ Allow for turning each account on/off with switches--making the message content available to bluetooth devices that can read emails (like cars)
Bug: 15720425
Change-Id: Ia0c91c1e74a2644fc99a8b902c42212453d8f86e
-rw-r--r-- | res/values/strings.xml | 6 | ||||
-rw-r--r-- | res/xml/bluetooth_message_access.xml | 31 | ||||
-rw-r--r-- | src/com/android/settings/SettingsActivity.java | 2 | ||||
-rwxr-xr-x | src/com/android/settings/bluetooth/BluetoothSettings.java | 21 | ||||
-rw-r--r-- | src/com/android/settings/bluetooth/MessageAccessSettings.java | 166 | ||||
-rw-r--r-- | src/com/android/settings/search/Ranking.java | 2 | ||||
-rw-r--r-- | src/com/android/settings/search/SearchIndexableResources.java | 8 |
7 files changed, 231 insertions, 5 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index b52f40d62..8663972d8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -306,6 +306,8 @@ <string name="bluetooth_notif_message">Touch to pair with <xliff:g id="device_name">%1$s</xliff:g>.</string> <!-- Bluetooth settings screen, menu to show the list of received files [CHAR LIMIT=30] --> <string name="bluetooth_show_received_files">Show received files</string> + <!-- Bluetooth settings screen, menu to show the list of email accounts to pull messages from [CHAR LIMIT=30] --> + <string name="bluetooth_show_message_access">Message access</string> <!-- Strings for BluetoothDevicePicker --> <string name="device_picker">Bluetooth device chooser</string> @@ -316,6 +318,8 @@ <!-- Strings for asking to the user whether to allow an app to enable bluetooth --> <string name="bluetooth_ask_enablement">An app wants to turn on Bluetooth.</string> + <!-- String for informing the user that bluetooth devices must be granted permission. [CHAR LIMIT=100] --> + <string name="bluetooth_message_access_notice">Bluetooth devices must ask for permission before accessing available accounts.</string> <!-- Strings for asking to the user whether to allow an app to enable discovery mode --> <string name="bluetooth_ask_discovery" product="tablet">An app wants to make your tablet visible to other Bluetooth devices for <xliff:g id="timeout">%1$d</xliff:g> seconds.</string> <!-- Strings for asking to the user whether to allow an app to enable discovery mode --> @@ -1106,6 +1110,8 @@ <string name="bluetooth_preference_device_settings">Device settings</string> <!-- Bluetooth settings: The sub heading for devices which have already been paired with this device. [CHAR LIMIT=40] --> <string name="bluetooth_preference_paired_devices">Paired devices</string> + <!-- Bluetooth settings: The sub heading for messaging accesses. [CHAR LIMIT=50] --> + <string name="bluetooth_message_access">Paired devices can view messages from</string> <!-- Bluetooth settings: The sub heading for available devices during and after scanning. [CHAR LIMIT=40] --> <string name="bluetooth_preference_found_devices">Available devices</string> <!-- Bluetooth settings. Context menu item for a device. Action will connect to all profiles on the device. --> diff --git a/res/xml/bluetooth_message_access.xml b/res/xml/bluetooth_message_access.xml new file mode 100644 index 000000000..d1da1327e --- /dev/null +++ b/res/xml/bluetooth_message_access.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 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. +--> +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" + android:title="@string/bluetooth_show_message_access"> + + <PreferenceCategory + android:key="accounts" + android:title="@string/bluetooth_message_access" /> + + <Preference + android:key="notice" + android:title="" + android:textAppearance="?android:attr/textAppearanceSmall" + android:textColor="?android:attr/colorForegroundInverse" + android:selectable="false" + android:summary="@string/bluetooth_message_access_notice" /> + +</PreferenceScreen> diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index b0d324109..4675bb221 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -76,6 +76,7 @@ import com.android.settings.applications.InstalledAppDetails; import com.android.settings.applications.ManageApplications; import com.android.settings.applications.ProcessStatsUi; import com.android.settings.bluetooth.BluetoothSettings; +import com.android.settings.bluetooth.MessageAccessSettings; import com.android.settings.dashboard.DashboardCategory; import com.android.settings.dashboard.DashboardSummary; import com.android.settings.dashboard.DashboardTile; @@ -237,6 +238,7 @@ public class SettingsActivity extends Activity AdvancedWifiSettings.class.getName(), SavedAccessPointsWifiSettings.class.getName(), BluetoothSettings.class.getName(), + MessageAccessSettings.class.getName(), TetherSettings.class.getName(), WifiP2pSettings.class.getName(), VpnSettings.class.getName(), diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index f329c3d6d..8eee272d7 100755 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -18,8 +18,6 @@ package com.android.settings.bluetooth; import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH; -import android.app.ActionBar; -import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; @@ -33,12 +31,10 @@ import android.preference.PreferenceCategory; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.util.Log; -import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.widget.Switch; import android.widget.TextView; import com.android.settings.R; @@ -63,6 +59,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem private static final int MENU_ID_RENAME_DEVICE = Menu.FIRST + 1; private static final int MENU_ID_VISIBILITY_TIMEOUT = Menu.FIRST + 2; private static final int MENU_ID_SHOW_RECEIVED = Menu.FIRST + 3; + private static final int MENU_ID_MESSAGE_ACCESS = Menu.FIRST + 4; /* Private intent to show the list of received files */ private static final String BTOPP_ACTION_OPEN_RECEIVED_FILES = @@ -187,6 +184,12 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files) .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + // Message Access API is still not finished, once completed we undo this check. + // Bug 16232864 + if (android.os.SystemProperties.get("show_bluetooth_message_access").equals("true")){ + menu.add(Menu.NONE, MENU_ID_MESSAGE_ACCESS, 0, R.string.bluetooth_show_message_access) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + } super.onCreateOptionsMenu(menu, inflater); } @@ -213,6 +216,14 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem Intent intent = new Intent(BTOPP_ACTION_OPEN_RECEIVED_FILES); getActivity().sendBroadcast(intent); return true; + + case MENU_ID_MESSAGE_ACCESS: + if (getActivity() instanceof SettingsActivity) { + ((SettingsActivity) getActivity()).startPreferencePanel( + MessageAccessSettings.class.getCanonicalName(), null, + R.string.bluetooth_show_message_access, null, this, 0); + } + return true; } return super.onOptionsItemSelected(item); } @@ -355,6 +366,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem getActivity().invalidateOptionsMenu(); } + @Override public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) { setDeviceListGroup(getPreferenceScreen()); removeAllDevices(); @@ -433,5 +445,4 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem return result; } }; - } diff --git a/src/com/android/settings/bluetooth/MessageAccessSettings.java b/src/com/android/settings/bluetooth/MessageAccessSettings.java new file mode 100644 index 000000000..bef59c816 --- /dev/null +++ b/src/com/android/settings/bluetooth/MessageAccessSettings.java @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2014 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.settings.bluetooth; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.app.ActivityManagerNative; +import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.UserHandle; +import android.preference.SwitchPreference; +import android.preference.Preference; +import android.preference.PreferenceGroup; +import android.preference.PreferenceScreen; +import android.provider.SearchIndexableResource; +import android.util.Log; + +import com.android.settings.accounts.AuthenticatorHelper; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; + +import java.util.ArrayList; +import java.util.List; + +public class MessageAccessSettings extends SettingsPreferenceFragment + implements AuthenticatorHelper.OnAccountsUpdateListener, Indexable { + private static final String TAG = "MessageAccessSettings"; + private static final String GMAIL_PACKAGE_NAME = "com.google.android.gm"; + private static final String EMAIL_PACKAGE_NAME = "com.google.android.email"; + + private Account[] mAccounts; + private UserHandle mUserHandle; + private PreferenceGroup mAvailableAccounts; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mUserHandle = Utils.getProfileToDisplay(ActivityManagerNative.getDefault(), + getActivity().getActivityToken(), savedInstanceState); + + addPreferencesFromResource(R.xml.bluetooth_message_access); + } + + @Override + public void onResume() { + super.onResume(); + initPreferences(); + } + + @Override + public void onAccountsUpdate(final UserHandle userHandle) { + mAccounts = AccountManager.get(getActivity()).getAccountsAsUser( + mUserHandle.getIdentifier()); + + final int mAccountsSize = mAccounts.length; + for (int i = 0; i < mAccountsSize; ++i){ + Log.d(TAG, String.format("account.type = %s\n", mAccounts[i].type)); + } + } + + /** + * Retrieves the email icon for a given account's email preference + * + * @param accountPref The user's account to retrieve the icon from. + * + * @return The drawable representing the icon of the user's email preference + **/ + private Drawable getIcon(AccountPreference accountPref){ + Drawable icon = null; + + // Currently only two types of icons are allowed. + final String packageName = accountPref.account.type.equals("com.google") + ? GMAIL_PACKAGE_NAME : EMAIL_PACKAGE_NAME; + + try{ + icon = getPackageManager().getApplicationIcon(packageName); + }catch(NameNotFoundException nnfe){ + icon = null; + } + + return icon; + } + + private void initPreferences() { + final PreferenceScreen preferenceScreen = getPreferenceScreen(); + mAvailableAccounts = (PreferenceGroup)preferenceScreen.findPreference("accounts"); + mAccounts = AccountManager.get(getActivity()).getAccountsAsUser( + mUserHandle.getIdentifier()); + + final int mAccountsSize = mAccounts.length; + for (int i = 0; i < mAccountsSize; ++i){ + AccountPreference accountPref = new AccountPreference(getActivity(), mAccounts[i]); + Drawable icon = getIcon(accountPref); + if (icon != null){ + accountPref.setIcon(icon); + } + mAvailableAccounts.addPreference(accountPref); + } + } + + private class AccountPreference extends SwitchPreference + implements Preference.OnPreferenceChangeListener{ + private Account account; + + AccountPreference(Context context, Account account){ + super(context); + this.account = account; + setTitle(account.type); + setSummary(account.name); + + setOnPreferenceChangeListener(this); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object val) { + if (preference instanceof AccountPreference){ + final AccountPreference accountPref = (AccountPreference) preference; + + if (((Boolean)val).booleanValue()){ + // Enable paired deviced to connect, fill in once API is available + Log.w(TAG, String.format( + "User has turned on '%s' for Bluetooth message access.", + accountPref.account.name)); + } else { + // Disable paired deviced to connect, fill in once API is available + Log.w(TAG, String.format( + "User has turned off '%s' for Bluetooth message access.", + accountPref.account.name)); + } + } + return true; + } + } + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List<SearchIndexableResource> getXmlResourcesToIndex( + Context context, boolean enabled) { + List<SearchIndexableResource> indexables = new ArrayList<SearchIndexableResource>(); + SearchIndexableResource indexable = new SearchIndexableResource(context); + indexable.xmlResId = R.xml.bluetooth_message_access; + indexables.add(indexable); + return indexables; + } + }; +} diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java index 0d53d85c2..fbb6f995a 100644 --- a/src/com/android/settings/search/Ranking.java +++ b/src/com/android/settings/search/Ranking.java @@ -30,6 +30,7 @@ import com.android.settings.WallpaperTypeSettings; import com.android.settings.WirelessSettings; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.bluetooth.BluetoothSettings; +import com.android.settings.bluetooth.MessageAccessSettings; import com.android.settings.deviceinfo.Memory; import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; @@ -90,6 +91,7 @@ public final class Ranking { // BT sRankMap.put(BluetoothSettings.class.getName(), RANK_BT); + sRankMap.put(MessageAccessSettings.class.getName(), RANK_BT); // DataUsage sRankMap.put(DataUsageSummary.class.getName(), RANK_DATA_USAGE); diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 4e35a7267..0a3ec2ae0 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -33,6 +33,7 @@ import com.android.settings.WallpaperTypeSettings; import com.android.settings.WirelessSettings; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.bluetooth.BluetoothSettings; +import com.android.settings.bluetooth.MessageAccessSettings; import com.android.settings.deviceinfo.Memory; import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; @@ -87,6 +88,13 @@ public final class SearchIndexableResources { BluetoothSettings.class.getName(), R.drawable.ic_settings_bluetooth2)); + sResMap.put(MessageAccessSettings.class.getName(), + new SearchIndexableResource( + Ranking.getRankForClassName(MessageAccessSettings.class.getName()), + NO_DATA_RES_ID, + MessageAccessSettings.class.getName(), + R.drawable.ic_settings_bluetooth2)); + sResMap.put(DataUsageSummary.class.getName(), new SearchIndexableResource( Ranking.getRankForClassName(DataUsageSummary.class.getName()), |