diff options
Diffstat (limited to 'src/com')
5 files changed, 194 insertions, 5 deletions
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()), |