diff options
Diffstat (limited to 'core')
106 files changed, 1652 insertions, 2135 deletions
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 150880c..39e83e0 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -405,6 +405,55 @@ public class AccountManager { } /** + * Change whether or not an app (identified by its uid) is allowed to retrieve an authToken + * for an account. + * <p> + * This is only meant to be used by system activities and is not in the SDK. + * @param account The account whose permissions are being modified + * @param authTokenType The type of token whose permissions are being modified + * @param uid The uid that identifies the app which is being granted or revoked permission. + * @param value true is permission is being granted, false for revoked + * @hide + */ + public void updateAppPermission(Account account, String authTokenType, int uid, boolean value) { + try { + mService.updateAppPermission(account, authTokenType, uid, value); + } catch (RemoteException e) { + // won't ever happen + throw new RuntimeException(e); + } + } + + /** + * Get the user-friendly label associated with an authenticator's auth token. + * @param accountType the type of the authenticator. must not be null. + * @param authTokenType the token type. must not be null. + * @param callback callback to invoke when the result is available. may be null. + * @param handler the handler on which to invoke the callback, or null for the main thread + * @return a future containing the label string + * @hide + */ + public AccountManagerFuture<String> getAuthTokenLabel( + final String accountType, final String authTokenType, + AccountManagerCallback<String> callback, Handler handler) { + if (accountType == null) throw new IllegalArgumentException("accountType is null"); + if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null"); + return new Future2Task<String>(handler, callback) { + public void doWork() throws RemoteException { + mService.getAuthTokenLabel(mResponse, accountType, authTokenType); + } + + @Override + public String bundleToResult(Bundle bundle) throws AuthenticatorException { + if (!bundle.containsKey(KEY_AUTH_TOKEN_LABEL)) { + throw new AuthenticatorException("no result in response"); + } + return bundle.getString(KEY_AUTH_TOKEN_LABEL); + } + }.start(); + } + + /** * Finds out whether a particular account has all the specified features. * Account features are authenticator-specific string tokens identifying * boolean account properties. For example, features are used to tell diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index 2b643c2..079b9bd 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -163,7 +163,8 @@ public class AccountManagerService new HashMap<Account, Integer>(); private final Object cacheLock = new Object(); /** protected by the {@link #cacheLock} */ - private final HashMap<String, Account[]> accountCache = new HashMap<String, Account[]>(); + private final HashMap<String, Account[]> accountCache = + new LinkedHashMap<String, Account[]>(); /** protected by the {@link #cacheLock} */ private HashMap<Account, HashMap<String, String>> userDataCache = new HashMap<Account, HashMap<String, String>>(); @@ -296,7 +297,7 @@ public class AccountManagerService try { accounts.accountCache.clear(); final HashMap<String, ArrayList<String>> accountNamesByType = - new HashMap<String, ArrayList<String>>(); + new LinkedHashMap<String, ArrayList<String>>(); while (cursor.moveToNext()) { final long accountId = cursor.getLong(0); final String accountType = cursor.getString(1); @@ -985,21 +986,25 @@ public class AccountManagerService } } - void getAuthTokenLabel(final IAccountManagerResponse response, - final Account account, - final String authTokenType, int uid) { - if (account == null) throw new IllegalArgumentException("account is null"); + public void getAuthTokenLabel(IAccountManagerResponse response, final String accountType, + final String authTokenType) + throws RemoteException { + if (accountType == null) throw new IllegalArgumentException("accountType is null"); if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null"); - checkBinderPermission(Manifest.permission.USE_CREDENTIALS); - UserAccounts accounts = getUserAccounts(UserId.getUserId(uid)); + final int callingUid = getCallingUid(); + clearCallingIdentity(); + if (callingUid != android.os.Process.SYSTEM_UID) { + throw new SecurityException("can only call from system"); + } + UserAccounts accounts = getUserAccounts(UserId.getUserId(callingUid)); long identityToken = clearCallingIdentity(); try { - new Session(accounts, response, account.type, false, + new Session(accounts, response, accountType, false, false /* stripAuthTokenFromResult */) { protected String toDebugString(long now) { return super.toDebugString(now) + ", getAuthTokenLabel" - + ", " + account + + ", " + accountType + ", authTokenType " + authTokenType; } @@ -2230,6 +2235,21 @@ public class AccountManagerService Manifest.permission.USE_CREDENTIALS); } + public void updateAppPermission(Account account, String authTokenType, int uid, boolean value) + throws RemoteException { + final int callingUid = getCallingUid(); + + if (callingUid != android.os.Process.SYSTEM_UID) { + throw new SecurityException(); + } + + if (value) { + grantAppPermission(account, authTokenType, uid); + } else { + revokeAppPermission(account, authTokenType, uid); + } + } + /** * Allow callers with the given uid permission to get credentials for account/authTokenType. * <p> @@ -2237,7 +2257,7 @@ public class AccountManagerService * which is in the system. This means we don't need to protect it with permissions. * @hide */ - public void grantAppPermission(Account account, String authTokenType, int uid) { + private void grantAppPermission(Account account, String authTokenType, int uid) { if (account == null || authTokenType == null) { Log.e(TAG, "grantAppPermission: called with invalid arguments", new Exception()); return; @@ -2271,7 +2291,7 @@ public class AccountManagerService * which is in the system. This means we don't need to protect it with permissions. * @hide */ - public void revokeAppPermission(Account account, String authTokenType, int uid) { + private void revokeAppPermission(Account account, String authTokenType, int uid) { if (account == null || authTokenType == null) { Log.e(TAG, "revokeAppPermission: called with invalid arguments", new Exception()); return; diff --git a/core/java/android/accounts/ChooseTypeAndAccountActivity.java b/core/java/android/accounts/ChooseTypeAndAccountActivity.java index 291e75e..6b3b7fd 100644 --- a/core/java/android/accounts/ChooseTypeAndAccountActivity.java +++ b/core/java/android/accounts/ChooseTypeAndAccountActivity.java @@ -16,24 +16,18 @@ package android.accounts; import android.app.Activity; -import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.res.Resources; -import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; import android.text.TextUtils; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; -import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; + import com.android.internal.R; import java.io.IOException; @@ -106,10 +100,16 @@ public class ChooseTypeAndAccountActivity extends Activity private static final String KEY_INSTANCE_STATE_PENDING_REQUEST = "pendingRequest"; private static final String KEY_INSTANCE_STATE_EXISTING_ACCOUNTS = "existingAccounts"; + private static final String KEY_INSTANCE_STATE_SELECTED_ACCOUNT_NAME = "selectedAccountName"; + private static final String KEY_INSTANCE_STATE_SELECTED_ADD_ACCOUNT = "selectedAddAccount"; + + private static final int SELECTED_ITEM_NONE = -1; - private ArrayList<AccountInfo> mAccountInfos; + private ArrayList<Account> mAccounts; private int mPendingRequest = REQUEST_NULL; private Parcelable[] mExistingAccounts = null; + private int mSelectedItemIndex; + private Button mOkButton; @Override public void onCreate(Bundle savedInstanceState) { @@ -119,31 +119,39 @@ public class ChooseTypeAndAccountActivity extends Activity + savedInstanceState + ")"); } + // save some items we use frequently + final AccountManager accountManager = AccountManager.get(this); + final Intent intent = getIntent(); + + String selectedAccountName = null; + boolean selectedAddNewAccount = false; + if (savedInstanceState != null) { mPendingRequest = savedInstanceState.getInt(KEY_INSTANCE_STATE_PENDING_REQUEST); mExistingAccounts = savedInstanceState.getParcelableArray(KEY_INSTANCE_STATE_EXISTING_ACCOUNTS); + + // Makes sure that any user selection is preserved across orientation changes. + selectedAccountName = savedInstanceState.getString( + KEY_INSTANCE_STATE_SELECTED_ACCOUNT_NAME); + + selectedAddNewAccount = savedInstanceState.getBoolean( + KEY_INSTANCE_STATE_SELECTED_ADD_ACCOUNT, false); } else { mPendingRequest = REQUEST_NULL; mExistingAccounts = null; + // If the selected account as specified in the intent matches one in the list we will + // show is as pre-selected. + Account selectedAccount = (Account) intent.getParcelableExtra(EXTRA_SELECTED_ACCOUNT); + if (selectedAccount != null) { + selectedAccountName = selectedAccount.name; + } } - // save some items we use frequently - final AccountManager accountManager = AccountManager.get(this); - final Intent intent = getIntent(); - - // override the description text if supplied - final String descriptionOverride = - intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE); - if (!TextUtils.isEmpty(descriptionOverride)) { - ((TextView)findViewById(R.id.description)).setText(descriptionOverride); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "selected account name is " + selectedAccountName); } - // If the selected account matches one in the list we will place a - // checkmark next to it. - final Account selectedAccount = - (Account)intent.getParcelableExtra(EXTRA_SELECTED_ACCOUNT); - // build an efficiently queryable map of account types to authenticator descriptions final HashMap<String, AuthenticatorDescription> typeToAuthDescription = new HashMap<String, AuthenticatorDescription>(); @@ -192,7 +200,8 @@ public class ChooseTypeAndAccountActivity extends Activity // accounts that don't match the allowable types, if provided, or that don't match the // allowable accounts, if provided. final Account[] accounts = accountManager.getAccounts(); - mAccountInfos = new ArrayList<AccountInfo>(accounts.length); + mAccounts = new ArrayList<Account>(accounts.length); + mSelectedItemIndex = SELECTED_ITEM_NONE; for (Account account : accounts) { if (setOfAllowableAccounts != null && !setOfAllowableAccounts.contains(account)) { @@ -202,15 +211,16 @@ public class ChooseTypeAndAccountActivity extends Activity && !setOfRelevantAccountTypes.contains(account.type)) { continue; } - mAccountInfos.add(new AccountInfo(account, - getDrawableForType(typeToAuthDescription, account.type), - account.equals(selectedAccount))); + if (account.name.equals(selectedAccountName)) { + mSelectedItemIndex = mAccounts.size(); + } + mAccounts.add(account); } if (mPendingRequest == REQUEST_NULL) { - // If there are no relevant accounts and only one relevant account typoe go directly to + // If there are no relevant accounts and only one relevant account type go directly to // add account. Otherwise let the user choose. - if (mAccountInfos.isEmpty()) { + if (mAccounts.isEmpty()) { if (setOfRelevantAccountTypes.size() == 1) { runAddAccountForAuthenticator(setOfRelevantAccountTypes.iterator().next()); } else { @@ -221,36 +231,64 @@ public class ChooseTypeAndAccountActivity extends Activity // if there is only one allowable account return it if (!intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false) - && mAccountInfos.size() == 1) { - Account account = mAccountInfos.get(0).account; + && mAccounts.size() == 1) { + Account account = mAccounts.get(0); setResultAndFinish(account.name, account.type); return; } } + // Cannot set content view until we know that mPendingRequest is not null, otherwise + // would cause screen flicker. setContentView(R.layout.choose_type_and_account); - // there is more than one allowable account. initialize the list adapter to allow - // the user to select an account. + // Override the description text if supplied + final String descriptionOverride = + intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE); + TextView descriptionView = (TextView) findViewById(R.id.description); + if (!TextUtils.isEmpty(descriptionOverride)) { + descriptionView.setText(descriptionOverride); + } else { + descriptionView.setVisibility(View.GONE); + } + + // List of options includes all accounts found together with "Add new account" as the + // last item in the list. + String[] listItems = new String[mAccounts.size() + 1]; + for (int i = 0; i < mAccounts.size(); i++) { + listItems[i] = mAccounts.get(i).name; + } + listItems[mAccounts.size()] = getResources().getString( + R.string.add_account_button_label); + ListView list = (ListView) findViewById(android.R.id.list); - list.setAdapter(new AccountArrayAdapter(this, - android.R.layout.simple_list_item_1, mAccountInfos)); + list.setAdapter(new ArrayAdapter<String>(this, + android.R.layout.simple_list_item_single_choice, listItems)); list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); + list.setItemsCanFocus(false); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { - onListItemClick((ListView)parent, v, position, id); + mSelectedItemIndex = position; + mOkButton.setEnabled(true); } }); - // set the listener for the addAccount button - Button addAccountButton = (Button) findViewById(R.id.addAccount); - addAccountButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(final View v) { - startChooseAccountTypeActivity(); + // If "Add account" option was previously selected by user, preserve it across + // orientation changes. + if (selectedAddNewAccount) { + mSelectedItemIndex = mAccounts.size(); + } + if (mSelectedItemIndex != SELECTED_ITEM_NONE) { + list.setItemChecked(mSelectedItemIndex, true); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "List item " + mSelectedItemIndex + " should be selected"); } - }); + } + + // Only enable "OK" button if something has been selected. + mOkButton = (Button) findViewById(android.R.id.button2); + mOkButton.setEnabled(mSelectedItemIndex != SELECTED_ITEM_NONE); } @Override @@ -268,6 +306,28 @@ public class ChooseTypeAndAccountActivity extends Activity if (mPendingRequest == REQUEST_ADD_ACCOUNT) { outState.putParcelableArray(KEY_INSTANCE_STATE_EXISTING_ACCOUNTS, mExistingAccounts); } + if (mSelectedItemIndex != SELECTED_ITEM_NONE) { + if (mSelectedItemIndex == mAccounts.size()) { + outState.putBoolean(KEY_INSTANCE_STATE_SELECTED_ADD_ACCOUNT, true); + } else { + outState.putBoolean(KEY_INSTANCE_STATE_SELECTED_ADD_ACCOUNT, false); + outState.putString(KEY_INSTANCE_STATE_SELECTED_ACCOUNT_NAME, + mAccounts.get(mSelectedItemIndex).name); + } + } + } + + public void onCancelButtonClicked(View view) { + onBackPressed(); + } + + public void onOkButtonClicked(View view) { + if (mSelectedItemIndex == mAccounts.size()) { + // Selected "Add New Account" option + startChooseAccountTypeActivity(); + } else if (mSelectedItemIndex != SELECTED_ITEM_NONE) { + onAccountSelected(mAccounts.get(mSelectedItemIndex)); + } } // Called when the choose account type activity (for adding an account) returns. @@ -287,9 +347,9 @@ public class ChooseTypeAndAccountActivity extends Activity mPendingRequest = REQUEST_NULL; if (resultCode == RESULT_CANCELED) { - // if cancelling out of addAccount and the original state caused us to skip this, + // if canceling out of addAccount and the original state caused us to skip this, // finish this activity - if (mAccountInfos.isEmpty()) { + if (mAccounts.isEmpty()) { setResult(Activity.RESULT_CANCELED); finish(); } @@ -360,6 +420,7 @@ public class ChooseTypeAndAccountActivity extends Activity options, null /* activity */, this /* callback */, null /* Handler */); } + @Override public void run(final AccountManagerFuture<Bundle> accountManagerFuture) { try { final Bundle accountManagerResult = accountManagerFuture.getResult(); @@ -385,34 +446,9 @@ public class ChooseTypeAndAccountActivity extends Activity finish(); } - private Drawable getDrawableForType( - final HashMap<String, AuthenticatorDescription> typeToAuthDescription, - String accountType) { - Drawable icon = null; - if (typeToAuthDescription.containsKey(accountType)) { - try { - AuthenticatorDescription desc = typeToAuthDescription.get(accountType); - Context authContext = createPackageContext(desc.packageName, 0); - icon = authContext.getResources().getDrawable(desc.iconId); - } catch (PackageManager.NameNotFoundException e) { - // Nothing we can do much here, just log - if (Log.isLoggable(TAG, Log.WARN)) { - Log.w(TAG, "No icon name for account type " + accountType); - } - } catch (Resources.NotFoundException e) { - // Nothing we can do much here, just log - if (Log.isLoggable(TAG, Log.WARN)) { - Log.w(TAG, "No icon resource for account type " + accountType); - } - } - } - return icon; - } - - protected void onListItemClick(ListView l, View v, int position, long id) { - AccountInfo accountInfo = mAccountInfos.get(position); - Log.d(TAG, "selected account " + accountInfo.account); - setResultAndFinish(accountInfo.account.name, accountInfo.account.type); + private void onAccountSelected(Account account) { + Log.d(TAG, "selected account " + account); + setResultAndFinish(account.name, account.type); } private void setResultAndFinish(final String accountName, final String accountType) { @@ -444,58 +480,4 @@ public class ChooseTypeAndAccountActivity extends Activity startActivityForResult(intent, REQUEST_CHOOSE_TYPE); mPendingRequest = REQUEST_CHOOSE_TYPE; } - - private static class AccountInfo { - final Account account; - final Drawable drawable; - private final boolean checked; - - AccountInfo(Account account, Drawable drawable, boolean checked) { - this.account = account; - this.drawable = drawable; - this.checked = checked; - } - } - - private static class ViewHolder { - ImageView icon; - TextView text; - ImageView checkmark; - } - - private static class AccountArrayAdapter extends ArrayAdapter<AccountInfo> { - private LayoutInflater mLayoutInflater; - private ArrayList<AccountInfo> mInfos; - - public AccountArrayAdapter(Context context, int textViewResourceId, - ArrayList<AccountInfo> infos) { - super(context, textViewResourceId, infos); - mInfos = infos; - mLayoutInflater = (LayoutInflater) context.getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - ViewHolder holder; - - if (convertView == null) { - convertView = mLayoutInflater.inflate(R.layout.choose_selected_account_row, null); - holder = new ViewHolder(); - holder.text = (TextView) convertView.findViewById(R.id.account_row_text); - holder.icon = (ImageView) convertView.findViewById(R.id.account_row_icon); - holder.checkmark = (ImageView) convertView.findViewById(R.id.account_row_checkmark); - convertView.setTag(holder); - } else { - holder = (ViewHolder) convertView.getTag(); - } - - holder.text.setText(mInfos.get(position).account.name); - holder.icon.setImageDrawable(mInfos.get(position).drawable); - final int displayCheckmark = - mInfos.get(position).checked ? View.VISIBLE : View.INVISIBLE; - holder.checkmark.setVisibility(displayCheckmark); - return convertView; - } - } } diff --git a/core/java/android/accounts/GrantCredentialsPermissionActivity.java b/core/java/android/accounts/GrantCredentialsPermissionActivity.java index 4419c8c..8b01c6a 100644 --- a/core/java/android/accounts/GrantCredentialsPermissionActivity.java +++ b/core/java/android/accounts/GrantCredentialsPermissionActivity.java @@ -16,22 +16,22 @@ package android.accounts; import android.app.Activity; +import android.content.pm.RegisteredServicesCache; +import android.content.res.Resources; import android.os.Bundle; -import android.os.RemoteException; import android.widget.TextView; import android.widget.LinearLayout; -import android.widget.ImageView; import android.view.View; import android.view.LayoutInflater; -import android.view.Window; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.content.pm.RegisteredServicesCache; import android.text.TextUtils; -import android.graphics.drawable.Drawable; import com.android.internal.R; +import java.io.IOException; +import java.net.Authenticator; + /** * @hide */ @@ -48,7 +48,6 @@ public class GrantCredentialsPermissionActivity extends Activity implements View private int mUid; private Bundle mResultBundle = null; protected LayoutInflater mInflater; - private final AccountManagerService accountManagerService = AccountManagerService.getSingleton(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -81,7 +80,7 @@ public class GrantCredentialsPermissionActivity extends Activity implements View String accountTypeLabel; try { - accountTypeLabel = accountManagerService.getAccountLabel(mAccount.type); + accountTypeLabel = getAccountLabel(mAccount); } catch (IllegalArgumentException e) { // label or resource was missing. abort the activity. setResult(Activity.RESULT_CANCELED); @@ -92,28 +91,27 @@ public class GrantCredentialsPermissionActivity extends Activity implements View final TextView authTokenTypeView = (TextView) findViewById(R.id.authtoken_type); authTokenTypeView.setVisibility(View.GONE); - /** Handles the responses from the AccountManager */ - IAccountManagerResponse response = new IAccountManagerResponse.Stub() { - public void onResult(Bundle bundle) { - final String authTokenLabel = - bundle.getString(AccountManager.KEY_AUTH_TOKEN_LABEL); - if (!TextUtils.isEmpty(authTokenLabel)) { - runOnUiThread(new Runnable() { - public void run() { - if (!isFinishing()) { - authTokenTypeView.setText(authTokenLabel); - authTokenTypeView.setVisibility(View.VISIBLE); + final AccountManagerCallback<String> callback = new AccountManagerCallback<String>() { + public void run(AccountManagerFuture<String> future) { + try { + final String authTokenLabel = future.getResult(); + if (!TextUtils.isEmpty(authTokenLabel)) { + runOnUiThread(new Runnable() { + public void run() { + if (!isFinishing()) { + authTokenTypeView.setText(authTokenLabel); + authTokenTypeView.setVisibility(View.VISIBLE); + } } - } - }); + }); + } + } catch (OperationCanceledException e) { + } catch (IOException e) { + } catch (AuthenticatorException e) { } } - - public void onError(int code, String message) { - } }; - - accountManagerService.getAuthTokenLabel(response, mAccount, mAuthTokenType, mUid); + AccountManager.get(this).getAuthTokenLabel(mAccount.type, mAuthTokenType, callback, null); findViewById(R.id.allow_button).setOnClickListener(this); findViewById(R.id.deny_button).setOnClickListener(this); @@ -134,6 +132,24 @@ public class GrantCredentialsPermissionActivity extends Activity implements View ((TextView) findViewById(R.id.account_type)).setText(accountTypeLabel); } + private String getAccountLabel(Account account) { + final AuthenticatorDescription[] authenticatorTypes = + AccountManager.get(this).getAuthenticatorTypes(); + for (int i = 0, N = authenticatorTypes.length; i < N; i++) { + final AuthenticatorDescription desc = authenticatorTypes[i]; + if (desc.type.equals(account.type)) { + try { + return createPackageContext(desc.packageName, 0).getString(desc.labelId); + } catch (PackageManager.NameNotFoundException e) { + return account.type; + } catch (Resources.NotFoundException e) { + return account.type; + } + } + } + return account.type; + } + private View newPackageView(String packageLabel) { View view = mInflater.inflate(R.layout.permissions_package_list_item, null); ((TextView) view.findViewById(R.id.package_label)).setText(packageLabel); @@ -143,7 +159,7 @@ public class GrantCredentialsPermissionActivity extends Activity implements View public void onClick(View v) { switch (v.getId()) { case R.id.allow_button: - accountManagerService.grantAppPermission(mAccount, mAuthTokenType, mUid); + AccountManager.get(this).updateAppPermission(mAccount, mAuthTokenType, mUid, true); Intent result = new Intent(); result.putExtra("retry", true); setResult(RESULT_OK, result); @@ -151,7 +167,7 @@ public class GrantCredentialsPermissionActivity extends Activity implements View break; case R.id.deny_button: - accountManagerService.revokeAppPermission(mAccount, mAuthTokenType, mUid); + AccountManager.get(this).updateAppPermission(mAccount, mAuthTokenType, mUid, false); setResult(RESULT_CANCELED); break; } diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl index 36a5653..6007321 100644 --- a/core/java/android/accounts/IAccountManager.aidl +++ b/core/java/android/accounts/IAccountManager.aidl @@ -41,6 +41,7 @@ interface IAccountManager { void setPassword(in Account account, String password); void clearPassword(in Account account); void setUserData(in Account account, String key, String value); + void updateAppPermission(in Account account, String authTokenType, int uid, boolean value); void getAuthToken(in IAccountManagerResponse response, in Account account, String authTokenType, boolean notifyOnAuthFailure, boolean expectActivityLaunch, @@ -54,4 +55,6 @@ interface IAccountManager { boolean expectActivityLaunch); void confirmCredentials(in IAccountManagerResponse response, in Account account, in Bundle options, boolean expectActivityLaunch); + void getAuthTokenLabel(in IAccountManagerResponse response, String accountType, + String authTokenType); } diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 17b1962..92b6f72 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1360,6 +1360,13 @@ public class ActivityManager { public int lastTrimLevel; /** + * Constant for {@link #importance}: this is a persistent process. + * Only used when reporting to process observers. + * @hide + */ + public static final int IMPORTANCE_PERSISTENT = 50; + + /** * Constant for {@link #importance}: this process is running the * foreground UI. */ diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index a457e3c..7242029 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4516,7 +4516,7 @@ public final class ActivityThread { boolean noisy, boolean noReleaseNeeded, boolean stable) { ContentProvider localProvider = null; IContentProvider provider; - if (holder == null) { + if (holder == null || holder.provider == null) { if (DEBUG_PROVIDER || noisy) { Slog.d(TAG, "Loading provider " + info.authority + ": " + info.name); diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 6058bdc..03ee419 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -1568,8 +1568,17 @@ final class FragmentManagerImpl extends FragmentManager { for (int i=0; i<N; i++) { Fragment f = mActive.get(i); if (f != null) { + if (f.mIndex < 0) { + String msg = "Failure saving state: active " + f + + " has cleared index: " + f.mIndex; + Slog.e(TAG, msg); + dump(" ", null, new PrintWriter(new LogWriter( + Log.ERROR, TAG, Log.LOG_ID_SYSTEM)), new String[] { }); + throw new IllegalStateException(msg); + } + haveFragments = true; - + FragmentState fs = new FragmentState(f); active[i] = fs; @@ -1621,6 +1630,14 @@ final class FragmentManagerImpl extends FragmentManager { added = new int[N]; for (int i=0; i<N; i++) { added[i] = mAdded.get(i).mIndex; + if (added[i] < 0) { + String msg = "Failure saving state: active " + mAdded.get(i) + + " has cleared index: " + added[i]; + Slog.e(TAG, msg); + dump(" ", null, new PrintWriter(new LogWriter( + Log.ERROR, TAG, Log.LOG_ID_SYSTEM)), new String[] { }); + throw new IllegalStateException(msg); + } if (DEBUG) Log.v(TAG, "saveAllState: adding fragment #" + i + ": " + mAdded.get(i)); } diff --git a/core/java/android/app/IProcessObserver.aidl b/core/java/android/app/IProcessObserver.aidl index 2094294..e587912 100644 --- a/core/java/android/app/IProcessObserver.aidl +++ b/core/java/android/app/IProcessObserver.aidl @@ -20,6 +20,7 @@ package android.app; oneway interface IProcessObserver { void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities); + void onImportanceChanged(int pid, int uid, int importance); void onProcessDied(int pid, int uid); } diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 3ced82b..036008b 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -1379,7 +1379,7 @@ public class Notification implements Parcelable } } - private RemoteViews applyStandardTemplate(int resId) { + private RemoteViews applyStandardTemplate(int resId, boolean fitIn1U) { RemoteViews contentView = new RemoteViews(mContext.getPackageName(), resId); boolean showLine3 = false; boolean showLine2 = false; @@ -1432,7 +1432,6 @@ public class Notification implements Parcelable contentView.setTextViewText(R.id.text, mSubText); if (mContentText != null) { contentView.setTextViewText(R.id.text2, mContentText); - // need to shrink all the type to make sure everything fits contentView.setViewVisibility(R.id.text2, View.VISIBLE); showLine2 = true; } else { @@ -1450,10 +1449,13 @@ public class Notification implements Parcelable } } if (showLine2) { - final Resources res = mContext.getResources(); - final float subTextSize = res.getDimensionPixelSize( - R.dimen.notification_subtext_size); - contentView.setTextViewTextSize(R.id.text, TypedValue.COMPLEX_UNIT_PX, subTextSize); + if (fitIn1U) { + // need to shrink all the type to make sure everything fits + final Resources res = mContext.getResources(); + final float subTextSize = res.getDimensionPixelSize( + R.dimen.notification_subtext_size); + contentView.setTextViewTextSize(R.id.text, TypedValue.COMPLEX_UNIT_PX, subTextSize); + } // vertical centering contentView.setViewPadding(R.id.line1, 0, 0, 0, 0); } @@ -1470,16 +1472,18 @@ public class Notification implements Parcelable } } contentView.setViewVisibility(R.id.line3, showLine3 ? View.VISIBLE : View.GONE); + contentView.setViewVisibility(R.id.overflow_divider, showLine3 ? View.VISIBLE : View.GONE); return contentView; } private RemoteViews applyStandardTemplateWithActions(int layoutId) { - RemoteViews big = applyStandardTemplate(layoutId); + RemoteViews big = applyStandardTemplate(layoutId, false); int N = mActions.size(); if (N > 0) { // Log.d("Notification", "has actions: " + mContentText); big.setViewVisibility(R.id.actions, View.VISIBLE); + big.setViewVisibility(R.id.action_divider, View.VISIBLE); if (N>MAX_ACTION_BUTTONS) N=MAX_ACTION_BUTTONS; big.removeAllViews(R.id.actions); for (int i=0; i<N; i++) { @@ -1495,7 +1499,7 @@ public class Notification implements Parcelable if (mContentView != null) { return mContentView; } else { - return applyStandardTemplate(R.layout.notification_template_base); // no more special large_icon flavor + return applyStandardTemplate(R.layout.notification_template_base, true); // no more special large_icon flavor } } @@ -1506,7 +1510,7 @@ public class Notification implements Parcelable if (mContentView == null) { return applyStandardTemplate(mLargeIcon == null ? R.layout.status_bar_latest_event_ticker - : R.layout.status_bar_latest_event_ticker_large_icon); + : R.layout.status_bar_latest_event_ticker_large_icon, true); } else { return null; } @@ -1655,12 +1659,9 @@ public class Notification implements Parcelable contentView.setViewVisibility(R.id.line1, View.VISIBLE); } + // The last line defaults to the content text or subtext, but can be replaced by mSummaryText if (mSummaryText != null && !mSummaryText.equals("")) { - contentView.setViewVisibility(R.id.overflow_title, View.VISIBLE); - contentView.setTextViewText(R.id.overflow_title, mSummaryText); - contentView.setViewVisibility(R.id.line3, View.GONE); - } else { - contentView.setViewVisibility(R.id.overflow_title, View.GONE); + contentView.setTextViewText(R.id.text, mSummaryText); contentView.setViewVisibility(R.id.line3, View.VISIBLE); } @@ -1801,6 +1802,8 @@ public class Notification implements Parcelable } private RemoteViews makeBigContentView() { + // Remove the content text so line3 disappears entirely + mBuilder.mContentText = null; RemoteViews contentView = getStandardView(R.layout.notification_template_big_text); contentView.setTextViewText(R.id.big_text, mBigText); contentView.setViewVisibility(R.id.big_text, View.VISIBLE); diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index ad52e13..679a8ac 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -935,7 +935,17 @@ public class PackageParser { com.android.internal.R.styleable.AndroidManifest_installLocation, PARSE_DEFAULT_INSTALL_LOCATION); pkg.applicationInfo.installLocation = pkg.installLocation; - + + /* Set the global "forward lock" flag */ + if ((flags & PARSE_FORWARD_LOCK) != 0) { + pkg.applicationInfo.flags |= ApplicationInfo.FLAG_FORWARD_LOCK; + } + + /* Set the global "on SD card" flag */ + if ((flags & PARSE_ON_SDCARD) != 0) { + pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE; + } + // Resource boolean are -1, so 1 means we don't know the value. int supportsSmallScreens = 1; int supportsNormalScreens = 1; @@ -1454,8 +1464,7 @@ public class PackageParser { perm.info.descriptionRes = sa.getResourceId( com.android.internal.R.styleable.AndroidManifestPermissionGroup_description, 0); - perm.info.flags = sa.getInt( - com.android.internal.R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags, 0); + perm.info.flags = 0; perm.info.priority = sa.getInt( com.android.internal.R.styleable.AndroidManifestPermissionGroup_priority, 0); if (perm.info.priority > 0 && (flags&PARSE_IS_SYSTEM) == 0) { @@ -1726,14 +1735,6 @@ public class PackageParser { } } - if ((flags & PARSE_FORWARD_LOCK) != 0) { - ai.flags |= ApplicationInfo.FLAG_FORWARD_LOCK; - } - - if ((flags & PARSE_ON_SDCARD) != 0) { - ai.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE; - } - if (sa.getBoolean( com.android.internal.R.styleable.AndroidManifestApplication_debuggable, false)) { diff --git a/core/java/android/content/pm/PermissionGroupInfo.java b/core/java/android/content/pm/PermissionGroupInfo.java index 452bf0d..96d30d4 100644 --- a/core/java/android/content/pm/PermissionGroupInfo.java +++ b/core/java/android/content/pm/PermissionGroupInfo.java @@ -44,17 +44,20 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable { /** * Flag for {@link #flags}, corresponding to <code>personalInfo</code> * value of {@link android.R.attr#permissionGroupFlags}. + * @hide */ public static final int FLAG_PERSONAL_INFO = 1<<0; /** * Additional flags about this group as given by * {@link android.R.attr#permissionGroupFlags}. + * @hide */ public int flags; /** * Prioritization of this group, for visually sorting with other groups. + * @hide */ public int priority; diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 89068e7..4d9077f 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -736,8 +736,8 @@ public class Camera { return; case CAMERA_MSG_PREVIEW_FRAME: - if (mPreviewCallback != null) { - PreviewCallback cb = mPreviewCallback; + PreviewCallback pCb = mPreviewCallback; + if (pCb != null) { if (mOneShot) { // Clear the callback variable before the callback // in case the app calls setPreviewCallback from @@ -749,7 +749,7 @@ public class Camera { // Set to oneshot mode again. setHasPreviewCallback(true, false); } - cb.onPreviewFrame((byte[])msg.obj, mCamera); + pCb.onPreviewFrame((byte[])msg.obj, mCamera); } return; @@ -1059,6 +1059,7 @@ public class Camera { } native_takePicture(msgType); + mFaceDetectionRunning = false; } /** diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index 2782dca..e8f87bb 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -24,6 +24,7 @@ import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; +import android.content.ContextWrapper; import android.content.CursorEntityIterator; import android.content.Entity; import android.content.EntityIterator; @@ -7711,9 +7712,19 @@ public final class ContactsContract { */ public static void showQuickContact(Context context, Rect target, Uri lookupUri, int mode, String[] excludeMimes) { + // When launching from an Activiy, we don't want to start a new task, but otherwise + // we *must* start a new task. (Otherwise startActivity() would crash.) + Context actualContext = context; + while ((actualContext instanceof ContextWrapper) + && !(actualContext instanceof Activity)) { + actualContext = ((ContextWrapper) actualContext).getBaseContext(); + } + final int intentFlags = (actualContext instanceof Activity) + ? Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET + : Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK; + // Launch pivot dialog through intent for now - final Intent intent = new Intent(ACTION_QUICK_CONTACT) - .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + final Intent intent = new Intent(ACTION_QUICK_CONTACT).addFlags(intentFlags); intent.setData(lookupUri); intent.setSourceBounds(target); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 8b7ee0e..8630204 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2886,6 +2886,15 @@ public final class Settings { "enabled_accessibility_services"; /** + * List of the accessibility services to which the user has graned + * permission to put the device into touch exploration mode. + * + * @hide + */ + public static final String TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES = + "touch_exploration_granted_accessibility_services"; + + /** * Whether to speak passwords while in accessibility mode. */ public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password"; @@ -4292,6 +4301,7 @@ public final class Settings { ACCESSIBILITY_SCRIPT_INJECTION, BACKUP_AUTO_RESTORE, ENABLED_ACCESSIBILITY_SERVICES, + TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES, TOUCH_EXPLORATION_ENABLED, ACCESSIBILITY_ENABLED, ACCESSIBILITY_SPEAK_PASSWORD, diff --git a/core/java/android/server/BluetoothA2dpService.java b/core/java/android/server/BluetoothA2dpService.java index 300bc68..08a99d2 100644 --- a/core/java/android/server/BluetoothA2dpService.java +++ b/core/java/android/server/BluetoothA2dpService.java @@ -33,7 +33,11 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioManager; +import android.os.Handler; +import android.os.Message; import android.os.ParcelUuid; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; import android.provider.Settings; import android.util.Log; @@ -65,6 +69,10 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { private final BluetoothAdapter mAdapter; private int mTargetA2dpState; private BluetoothDevice mPlayingA2dpDevice; + private IntentBroadcastHandler mIntentBroadcastHandler; + private final WakeLock mWakeLock; + + private static final int MSG_CONNECTION_STATE_CHANGED = 0; private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override @@ -131,6 +139,11 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { public BluetoothA2dpService(Context context, BluetoothService bluetoothService) { mContext = context; + PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "BluetoothA2dpService"); + + mIntentBroadcastHandler = new IntentBroadcastHandler(); + mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); mBluetoothService = bluetoothService; @@ -514,17 +527,15 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { adjustOtherSinkPriorities(device); } - Intent intent = new Intent(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); - intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); - intent.putExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, prevState); - intent.putExtra(BluetoothProfile.EXTRA_STATE, state); - intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); - mContext.sendBroadcast(intent, BLUETOOTH_PERM); + int delay = mAudioManager.setBluetoothA2dpDeviceConnectionState(device, state); - if (DBG) log("A2DP state : device: " + device + " State:" + prevState + "->" + state); - - mBluetoothService.sendConnectionStateChange(device, BluetoothProfile.A2DP, state, - prevState); + mWakeLock.acquire(); + mIntentBroadcastHandler.sendMessageDelayed(mIntentBroadcastHandler.obtainMessage( + MSG_CONNECTION_STATE_CHANGED, + prevState, + state, + device), + delay); } } @@ -586,6 +597,34 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub { } } + /** Handles A2DP connection state change intent broadcasts. */ + private class IntentBroadcastHandler extends Handler { + + private void onConnectionStateChanged(BluetoothDevice device, int prevState, int state) { + Intent intent = new Intent(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); + intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); + intent.putExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, prevState); + intent.putExtra(BluetoothProfile.EXTRA_STATE, state); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); + mContext.sendBroadcast(intent, BLUETOOTH_PERM); + + if (DBG) log("A2DP state : device: " + device + " State:" + prevState + "->" + state); + + mBluetoothService.sendConnectionStateChange(device, BluetoothProfile.A2DP, state, + prevState); + } + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_CONNECTION_STATE_CHANGED: + onConnectionStateChanged((BluetoothDevice) msg.obj, msg.arg1, msg.arg2); + mWakeLock.release(); + break; + } + } + } + @Override protected synchronized void dump(FileDescriptor fd, PrintWriter pw, String[] args) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG); diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java index 6dc31dd..bd86a8d 100644 --- a/core/java/android/view/AccessibilityInteractionController.java +++ b/core/java/android/view/AccessibilityInteractionController.java @@ -62,6 +62,8 @@ final class AccessibilityInteractionController { private final int mMyProcessId; + private final ArrayList<View> mTempArrayList = new ArrayList<View>(); + public AccessibilityInteractionController(ViewRootImpl viewRootImpl) { Looper looper = viewRootImpl.mHandler.getLooper(); mMyLooperThreadId = looper.getThread().getId(); @@ -313,7 +315,7 @@ final class AccessibilityInteractionController { infos = provider.findAccessibilityNodeInfosByText(text, virtualDescendantId); } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED) { - ArrayList<View> foundViews = mViewRootImpl.mAttachInfo.mTempArrayList; + ArrayList<View> foundViews = mTempArrayList; foundViews.clear(); root.findViewsWithText(foundViews, text, View.FIND_VIEWS_WITH_TEXT | View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java index da666b5..a42e156 100644 --- a/core/java/android/view/DisplayList.java +++ b/core/java/android/view/DisplayList.java @@ -62,6 +62,13 @@ public abstract class DisplayList { public static final int STATUS_INVOKE = 0x2; /** + * Indicates that the display list performed GL drawing operations. + * + * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int) + */ + public static final int STATUS_DREW = 0x4; + + /** * Starts recording the display list. All operations performed on the * returned canvas are recorded and stored in this display list. * diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index f986d15..7e86ea3 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -457,9 +457,11 @@ public abstract class HardwareRenderer { * @param functor The native functor to insert in the execution queue. * * @see HardwareCanvas#callDrawGLFunction(int) - * @see #detachFunctor(int) + * @see #detachFunctor(int) + * + * @return true if the functor was attached successfully */ - abstract void attachFunctor(View.AttachInfo attachInfo, int functor); + abstract boolean attachFunctor(View.AttachInfo attachInfo, int functor); /** * Initializes the hardware renderer for the specified surface and setup the @@ -1102,6 +1104,7 @@ public abstract class HardwareRenderer { onPreDraw(dirty); + int status = DisplayList.STATUS_DONE; int saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); @@ -1135,7 +1138,7 @@ public abstract class HardwareRenderer { drawDisplayListStartTime = System.nanoTime(); } - int status = canvas.drawDisplayList(displayList, mRedrawClip, + status = canvas.drawDisplayList(displayList, mRedrawClip, DisplayList.FLAG_CLIP_CHILDREN); if (mProfileEnabled) { @@ -1171,22 +1174,25 @@ public abstract class HardwareRenderer { onPostDraw(); attachInfo.mIgnoreDirtyState = false; + + if ((status & DisplayList.STATUS_DREW) == DisplayList.STATUS_DREW) { - long eglSwapBuffersStartTime = 0; - if (mProfileEnabled) { - eglSwapBuffersStartTime = System.nanoTime(); - } - - sEgl.eglSwapBuffers(sEglDisplay, mEglSurface); - - if (mProfileEnabled) { - long now = System.nanoTime(); - float total = (now - eglSwapBuffersStartTime) * 0.000001f; - mProfileData[mProfileCurrentFrame + 2] = total; + long eglSwapBuffersStartTime = 0; + if (mProfileEnabled) { + eglSwapBuffersStartTime = System.nanoTime(); + } + + sEgl.eglSwapBuffers(sEglDisplay, mEglSurface); + + if (mProfileEnabled) { + long now = System.nanoTime(); + float total = (now - eglSwapBuffersStartTime) * 0.000001f; + mProfileData[mProfileCurrentFrame + 2] = total; + } + + checkEglErrors(); } - checkEglErrors(); - return dirty == null; } } @@ -1227,11 +1233,13 @@ public abstract class HardwareRenderer { } @Override - void attachFunctor(View.AttachInfo attachInfo, int functor) { + boolean attachFunctor(View.AttachInfo attachInfo, int functor) { if (mCanvas != null) { mCanvas.attachFunctor(functor); scheduleFunctors(attachInfo); + return true; } + return false; } /** diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index 2ea0360..3bb9c01 100755 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java @@ -459,6 +459,18 @@ public final class InputDevice implements Parcelable { } /** + * Returns true if the device is a full keyboard. + * + * @return True if the device is a full keyboard. + * + * @hide + */ + public boolean isFullKeyboard() { + return (mSources & SOURCE_KEYBOARD) == SOURCE_KEYBOARD + && mKeyboardType == KEYBOARD_TYPE_ALPHABETIC; + } + + /** * Gets the name of this input device. * @return The input device name. */ diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 551b6cc..3138692 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -670,10 +670,11 @@ public final class ViewRootImpl implements ViewParent, } } - public void attachFunctor(int functor) { + public boolean attachFunctor(int functor) { if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) { - mAttachInfo.mHardwareRenderer.attachFunctor(mAttachInfo, functor); + return mAttachInfo.mHardwareRenderer.attachFunctor(mAttachInfo, functor); } + return false; } public void detachFunctor(int functor) { diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java index 78984e0..5ffc2c3 100644 --- a/core/java/android/view/VolumePanel.java +++ b/core/java/android/view/VolumePanel.java @@ -437,8 +437,10 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie public void postVolumeChanged(int streamType, int flags) { if (hasMessages(MSG_VOLUME_CHANGED)) return; - if (mStreamControls == null) { - createSliders(); + synchronized (this) { + if (mStreamControls == null) { + createSliders(); + } } removeMessages(MSG_FREE_RESOURCES); obtainMessage(MSG_VOLUME_CHANGED, streamType, flags).sendToTarget(); @@ -450,8 +452,10 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie public void postMuteChanged(int streamType, int flags) { if (hasMessages(MSG_VOLUME_CHANGED)) return; - if (mStreamControls == null) { - createSliders(); + synchronized (this) { + if (mStreamControls == null) { + createSliders(); + } } removeMessages(MSG_FREE_RESOURCES); obtainMessage(MSG_MUTE_CHANGED, streamType, flags).sendToTarget(); @@ -471,10 +475,12 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie if (LOGD) Log.d(TAG, "onVolumeChanged(streamType: " + streamType + ", flags: " + flags + ")"); if ((flags & AudioManager.FLAG_SHOW_UI) != 0) { - if (mActiveStreamType != streamType) { - reorderSliders(streamType); + synchronized (this) { + if (mActiveStreamType != streamType) { + reorderSliders(streamType); + } + onShowVolumeChanged(streamType, flags); } - onShowVolumeChanged(streamType, flags); } if ((flags & AudioManager.FLAG_PLAY_SOUND) != 0 && ! mRingIsSilent) { diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java index fc59e6e..161e8fb 100644 --- a/core/java/android/view/textservice/TextServicesManager.java +++ b/core/java/android/view/textservice/TextServicesManager.java @@ -217,7 +217,7 @@ public final class TextServicesManager { public SpellCheckerSubtype getCurrentSpellCheckerSubtype( boolean allowImplicitlySelectedSubtype) { try { - // Passing null as a locale for ICS + // Passing null as a locale until we support multiple enabled spell checker subtypes. return sService.getCurrentSpellCheckerSubtype(null, allowImplicitlySelectedSubtype); } catch (RemoteException e) { Log.e(TAG, "Error in getCurrentSpellCheckerSubtype: " + e); diff --git a/core/java/android/webkit/AutoCompletePopup.java b/core/java/android/webkit/AutoCompletePopup.java index 87e878b..c624ce4 100644 --- a/core/java/android/webkit/AutoCompletePopup.java +++ b/core/java/android/webkit/AutoCompletePopup.java @@ -181,8 +181,11 @@ class AutoCompletePopup implements OnItemClickListener, Filter.FilterListener, // There is no autofill profile setup yet and the user has // elected to try and set one up. Call through to the // embedder to action that. - mWebView.getWebChromeClient().setupAutoFill( + WebChromeClient webChromeClient = mWebView.getWebChromeClient(); + if (webChromeClient != null) { + webChromeClient.setupAutoFill( mHandler.obtainMessage(AUTOFILL_FORM)); + } } } else { Object selectedItem; diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index 65fd59a..d1da53b 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -7827,15 +7827,18 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mSendScrollEvent = true; int functor = 0; + boolean forceInval = isPictureAfterFirstLayout; ViewRootImpl viewRoot = mWebView.getViewRootImpl(); if (mWebView.isHardwareAccelerated() && viewRoot != null) { functor = nativeGetDrawGLFunction(mNativeClass); if (functor != 0) { - viewRoot.attachFunctor(functor); + // force an invalidate if functor attach not successful + forceInval |= !viewRoot.attachFunctor(functor); } } if (functor == 0 + || forceInval || mWebView.getLayerType() != View.LAYER_TYPE_NONE) { // invalidate the screen so that the next repaint will show new content // TODO: partial invalidate diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 9abe72b..edffb5e 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -57,7 +57,6 @@ import android.view.ViewConfiguration; import android.view.ViewDebug; import android.view.ViewGroup; import android.view.ViewParent; -import android.view.ViewRootImpl; import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; @@ -1331,43 +1330,42 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te @Override public void addFocusables(ArrayList<View> views, int direction, int focusableMode) { - if ((focusableMode & FOCUSABLES_ACCESSIBILITY) == FOCUSABLES_ACCESSIBILITY - && (direction == ACCESSIBILITY_FOCUS_FORWARD - || direction == ACCESSIBILITY_FOCUS_BACKWARD)) { - if (canTakeAccessibilityFocusFromHover()) { - views.add(this); + if ((focusableMode & FOCUSABLES_ACCESSIBILITY) == FOCUSABLES_ACCESSIBILITY) { + switch(direction) { + case ACCESSIBILITY_FOCUS_BACKWARD: { + View focusable = (getChildCount() > 0) ? getChildAt(getChildCount() - 1) : this; + if (focusable.canTakeAccessibilityFocusFromHover()) { + views.add(focusable); + } + } return; + case ACCESSIBILITY_FOCUS_FORWARD: { + if (canTakeAccessibilityFocusFromHover()) { + views.add(this); + } + } return; } - } else { super.addFocusables(views, direction, focusableMode); } } @Override public View focusSearch(int direction) { - return focusSearch(null, direction); + return focusSearch(this, direction); } @Override public View focusSearch(View focused, int direction) { switch (direction) { case ACCESSIBILITY_FOCUS_FORWARD: { - ViewRootImpl viewRootImpl = getViewRootImpl(); - if (viewRootImpl == null) { - return null; - } - View currentFocus = viewRootImpl.getAccessibilityFocusedHost(); - if (currentFocus == null) { - return super.focusSearch(this, direction); - } - // If we have the focus try giving it to the first child. - if (currentFocus == this) { + // If we are the focused view try giving it to the first child. + if (focused == this) { if (getChildCount() > 0) { return getChildAt(0); } return super.focusSearch(this, direction); } - // Find the item that has accessibility focus. - final int currentPosition = getPositionForView(currentFocus); + // Find the item that has the focused view. + final int currentPosition = getPositionForView(focused); if (currentPosition < 0 || currentPosition >= getCount()) { return super.focusSearch(this, direction); } @@ -1376,9 +1374,9 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (currentItem instanceof ViewGroup) { ViewGroup currentItemGroup = (ViewGroup) currentItem; View nextFocus = FocusFinder.getInstance().findNextFocus(currentItemGroup, - currentFocus, direction); + focused, direction); if (nextFocus != null && nextFocus != currentItemGroup - && nextFocus != currentFocus) { + && nextFocus != focused) { return nextFocus; } } @@ -1386,50 +1384,54 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final int nextPosition = currentPosition - getFirstVisiblePosition() + 1; if (nextPosition < getChildCount()) { return getChildAt(nextPosition); - } else { - return super.focusSearch(this, direction); } + // No next item start searching from the list. + return super.focusSearch(this, direction); } case ACCESSIBILITY_FOCUS_BACKWARD: { - ViewRootImpl viewRootImpl = getViewRootImpl(); - if (viewRootImpl == null) { - return null; - } - View currentFocus = viewRootImpl.getAccessibilityFocusedHost(); - if (currentFocus == null) { - return super.focusSearch(this, direction); - } - // If we have the focus do a generic search. - if (currentFocus == this) { - final int lastChildIndex = getChildCount() - 1; - if (lastChildIndex >= 0) { - return getChildAt(lastChildIndex); + // If we are the focused search from the view that is + // as closer to the bottom as possible. + if (focused == this) { + final int childCount = getChildCount(); + if (childCount > 0) { + return super.focusSearch(getChildAt(childCount - 1), direction); } return super.focusSearch(this, direction); } - // Find the item that has accessibility focus. - final int currentPosition = getPositionForView(currentFocus); + // Find the item that has the focused view. + final int currentPosition = getPositionForView(focused); if (currentPosition < 0 || currentPosition >= getCount()) { return super.focusSearch(this, direction); } - // Try to advance focus in the current item. + View currentItem = getChildAt(currentPosition - getFirstVisiblePosition()); + + // If a list item is the focused view we try to find a view + // in the previous item since in reverse the item contents + // get accessibility focus before the item itself. + if (currentItem == focused) { + // This list gets accessibility focus after the last first item. + final int previoustPosition = currentPosition - getFirstVisiblePosition() - 1; + if (previoustPosition < 0) { + return this; + } + currentItem = getChildAt(previoustPosition); + focused = null; + } + + // Search for into the item. if (currentItem instanceof ViewGroup) { ViewGroup currentItemGroup = (ViewGroup) currentItem; View nextFocus = FocusFinder.getInstance().findNextFocus(currentItemGroup, - currentFocus, direction); + focused, direction); if (nextFocus != null && nextFocus != currentItemGroup - && nextFocus != currentFocus) { + && nextFocus != focused) { return nextFocus; } } - // Try to move focus to the previous item. - final int nextPosition = currentPosition - getFirstVisiblePosition() - 1; - if (nextPosition >= 0) { - return getChildAt(nextPosition); - } else { - return super.focusSearch(this, direction); - } + + // If not item content wants focus we give it to the item. + return currentItem; } } return super.focusSearch(focused, direction); @@ -2283,14 +2285,10 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final ListAdapter adapter = getAdapter(); if ((position == INVALID_POSITION) || (adapter == null)) { - // Cannot perform actions on invalid items. - info.setEnabled(false); return; } if (!isEnabled() || !adapter.isEnabled(position)) { - // Cannot perform actions on invalid items. - info.setEnabled(false); return; } diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java index 64f6c07..988760d 100755 --- a/core/java/android/widget/AppSecurityPermissions.java +++ b/core/java/android/widget/AppSecurityPermissions.java @@ -18,9 +18,7 @@ package android.widget; import com.android.internal.R; -import android.app.AlertDialog; import android.content.Context; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; @@ -28,14 +26,9 @@ import android.content.pm.PackageParser; import android.content.pm.PermissionGroupInfo; import android.content.pm.PermissionInfo; import android.graphics.drawable.Drawable; -import android.os.Parcel; -import android.text.SpannableStringBuilder; -import android.text.TextUtils; -import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import java.text.Collator; import java.util.ArrayList; @@ -43,6 +36,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -58,200 +52,52 @@ import java.util.Set; * * {@hide} */ -public class AppSecurityPermissions { +public class AppSecurityPermissions implements View.OnClickListener { - public static final int WHICH_PERSONAL = 1<<0; - public static final int WHICH_DEVICE = 1<<1; - public static final int WHICH_NEW = 1<<2; - public static final int WHICH_ALL = 0xffff; + private enum State { + NO_PERMS, + DANGEROUS_ONLY, + NORMAL_ONLY, + BOTH + } private final static String TAG = "AppSecurityPermissions"; private boolean localLOGV = false; private Context mContext; private LayoutInflater mInflater; private PackageManager mPm; - private PackageInfo mInstalledPackageInfo; - private final Map<String, MyPermissionGroupInfo> mPermGroups - = new HashMap<String, MyPermissionGroupInfo>(); - private final List<MyPermissionGroupInfo> mPermGroupsList - = new ArrayList<MyPermissionGroupInfo>(); - private final PermissionGroupInfoComparator mPermGroupComparator; - private final PermissionInfoComparator mPermComparator; - private List<MyPermissionInfo> mPermsList; - private CharSequence mNewPermPrefix; + private LinearLayout mPermsView; + private Map<String, String> mDangerousMap; + private Map<String, String> mNormalMap; + private List<PermissionInfo> mPermsList; + private String mDefaultGrpLabel; + private String mDefaultGrpName="DefaultGrp"; + private String mPermFormat; private Drawable mNormalIcon; private Drawable mDangerousIcon; - - static class MyPermissionGroupInfo extends PermissionGroupInfo { - CharSequence mLabel; - - final ArrayList<MyPermissionInfo> mNewPermissions = new ArrayList<MyPermissionInfo>(); - final ArrayList<MyPermissionInfo> mPersonalPermissions = new ArrayList<MyPermissionInfo>(); - final ArrayList<MyPermissionInfo> mDevicePermissions = new ArrayList<MyPermissionInfo>(); - final ArrayList<MyPermissionInfo> mAllPermissions = new ArrayList<MyPermissionInfo>(); - - MyPermissionGroupInfo(PermissionInfo perm) { - name = perm.packageName; - packageName = perm.packageName; - } - - MyPermissionGroupInfo(PermissionGroupInfo info) { - super(info); - } - - public Drawable loadGroupIcon(PackageManager pm) { - if (icon != 0) { - return loadIcon(pm); - } else { - ApplicationInfo appInfo; - try { - appInfo = pm.getApplicationInfo(packageName, 0); - return appInfo.loadIcon(pm); - } catch (NameNotFoundException e) { - } - } - return null; - } - } - - static class MyPermissionInfo extends PermissionInfo { - CharSequence mLabel; - - /** - * PackageInfo.requestedPermissionsFlags for the new package being installed. - */ - int mNewReqFlags; - - /** - * PackageInfo.requestedPermissionsFlags for the currently installed - * package, if it is installed. - */ - int mExistingReqFlags; - - /** - * True if this should be considered a new permission. - */ - boolean mNew; - - MyPermissionInfo() { - } - - MyPermissionInfo(PermissionInfo info) { - super(info); - } - - MyPermissionInfo(MyPermissionInfo info) { - super(info); - mNewReqFlags = info.mNewReqFlags; - mExistingReqFlags = info.mExistingReqFlags; - mNew = info.mNew; - } - } - - public static class PermissionItemView extends LinearLayout implements View.OnClickListener { - MyPermissionGroupInfo mGroup; - MyPermissionInfo mPerm; - AlertDialog mDialog; - - public PermissionItemView(Context context, AttributeSet attrs) { - super(context, attrs); - setClickable(true); - } - - public void setPermission(MyPermissionGroupInfo grp, MyPermissionInfo perm, - boolean first, CharSequence newPermPrefix) { - mGroup = grp; - mPerm = perm; - - ImageView permGrpIcon = (ImageView) findViewById(R.id.perm_icon); - TextView permNameView = (TextView) findViewById(R.id.perm_name); - - PackageManager pm = getContext().getPackageManager(); - Drawable icon = null; - if (first) { - icon = grp.loadGroupIcon(pm); - } - CharSequence label = perm.mLabel; - if (perm.mNew && newPermPrefix != null) { - // If this is a new permission, format it appropriately. - SpannableStringBuilder builder = new SpannableStringBuilder(); - Parcel parcel = Parcel.obtain(); - TextUtils.writeToParcel(newPermPrefix, parcel, 0); - parcel.setDataPosition(0); - CharSequence newStr = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel); - parcel.recycle(); - builder.append(newStr); - builder.append(label); - label = builder; - } - - permGrpIcon.setImageDrawable(icon); - permNameView.setText(label); - setOnClickListener(this); - } - - @Override - public void onClick(View v) { - if (mGroup != null && mPerm != null) { - if (mDialog != null) { - mDialog.dismiss(); - } - PackageManager pm = getContext().getPackageManager(); - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(mGroup.mLabel); - if (mPerm.descriptionRes != 0) { - builder.setMessage(mPerm.loadDescription(pm)); - } else { - CharSequence appName; - try { - ApplicationInfo app = pm.getApplicationInfo(mPerm.packageName, 0); - appName = app.loadLabel(pm); - } catch (NameNotFoundException e) { - appName = mPerm.packageName; - } - StringBuilder sbuilder = new StringBuilder(128); - sbuilder.append(getContext().getString( - R.string.perms_description_app, appName)); - sbuilder.append("\n\n"); - sbuilder.append(mPerm.name); - builder.setMessage(sbuilder.toString()); - } - builder.setCancelable(true); - builder.setIcon(mGroup.loadGroupIcon(pm)); - mDialog = builder.show(); - mDialog.setCanceledOnTouchOutside(true); - } - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - if (mDialog != null) { - mDialog.dismiss(); - } - } - } - + private boolean mExpanded; + private Drawable mShowMaxIcon; + private Drawable mShowMinIcon; + private View mShowMore; + private TextView mShowMoreText; + private ImageView mShowMoreIcon; + private State mCurrentState; + private LinearLayout mNonDangerousList; + private LinearLayout mDangerousList; + private HashMap<String, CharSequence> mGroupLabelCache; + private View mNoPermsView; + public AppSecurityPermissions(Context context, List<PermissionInfo> permList) { mContext = context; mPm = mContext.getPackageManager(); - loadResources(); - mPermComparator = new PermissionInfoComparator(); - mPermGroupComparator = new PermissionGroupInfoComparator(); - for (PermissionInfo pi : permList) { - mPermsList.add(new MyPermissionInfo(pi)); - } - setPermissions(mPermsList); + mPermsList = permList; } public AppSecurityPermissions(Context context, String packageName) { mContext = context; mPm = mContext.getPackageManager(); - loadResources(); - mPermComparator = new PermissionInfoComparator(); - mPermGroupComparator = new PermissionGroupInfoComparator(); - mPermsList = new ArrayList<MyPermissionInfo>(); - Set<MyPermissionInfo> permSet = new HashSet<MyPermissionInfo>(); + mPermsList = new ArrayList<PermissionInfo>(); + Set<PermissionInfo> permSet = new HashSet<PermissionInfo>(); PackageInfo pkgInfo; try { pkgInfo = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); @@ -263,39 +109,29 @@ public class AppSecurityPermissions { if((pkgInfo.applicationInfo != null) && (pkgInfo.applicationInfo.uid != -1)) { getAllUsedPermissions(pkgInfo.applicationInfo.uid, permSet); } - for(MyPermissionInfo tmpInfo : permSet) { + for(PermissionInfo tmpInfo : permSet) { mPermsList.add(tmpInfo); } - setPermissions(mPermsList); } - + public AppSecurityPermissions(Context context, PackageParser.Package pkg) { mContext = context; mPm = mContext.getPackageManager(); - loadResources(); - mPermComparator = new PermissionInfoComparator(); - mPermGroupComparator = new PermissionGroupInfoComparator(); - mPermsList = new ArrayList<MyPermissionInfo>(); - Set<MyPermissionInfo> permSet = new HashSet<MyPermissionInfo>(); + mPermsList = new ArrayList<PermissionInfo>(); + Set<PermissionInfo> permSet = new HashSet<PermissionInfo>(); if(pkg == null) { return; } - - // Convert to a PackageInfo - PackageInfo info = PackageParser.generatePackageInfo(pkg, null, - PackageManager.GET_PERMISSIONS, 0, 0, null); - PackageInfo installedPkgInfo = null; // Get requested permissions - if (info.requestedPermissions != null) { - try { - installedPkgInfo = mPm.getPackageInfo(info.packageName, - PackageManager.GET_PERMISSIONS); - } catch (NameNotFoundException e) { + if (pkg.requestedPermissions != null) { + ArrayList<String> strList = pkg.requestedPermissions; + int size = strList.size(); + if (size > 0) { + extractPerms(strList.toArray(new String[size]), permSet); } - extractPerms(info, permSet, installedPkgInfo); } // Get permissions related to shared user if any - if (pkg.mSharedUserId != null) { + if(pkg.mSharedUserId != null) { int sharedUid; try { sharedUid = mPm.getUidForSharedUser(pkg.mSharedUserId); @@ -305,23 +141,13 @@ public class AppSecurityPermissions { } } // Retrieve list of permissions - for (MyPermissionInfo tmpInfo : permSet) { + for(PermissionInfo tmpInfo : permSet) { mPermsList.add(tmpInfo); } - setPermissions(mPermsList); } - - private void loadResources() { - // Pick up from framework resources instead. - mNewPermPrefix = mContext.getText(R.string.perms_new_perm_prefix); - mNormalIcon = mContext.getResources().getDrawable(R.drawable.ic_text_dot); - mDangerousIcon = mContext.getResources().getDrawable(R.drawable.ic_bullet_key_permission); - } - + /** - * Utility to retrieve a view displaying a single permission. This provides - * the old UI layout for permissions; it is only here for the device admin - * settings to continue to use. + * Utility to retrieve a view displaying a single permission. */ public static View getPermissionItemView(Context context, CharSequence grpName, CharSequence description, boolean dangerous) { @@ -329,15 +155,11 @@ public class AppSecurityPermissions { Context.LAYOUT_INFLATER_SERVICE); Drawable icon = context.getResources().getDrawable(dangerous ? R.drawable.ic_bullet_key_permission : R.drawable.ic_text_dot); - return getPermissionItemViewOld(context, inflater, grpName, + return getPermissionItemView(context, inflater, grpName, description, dangerous, icon); } - public PackageInfo getInstalledPackageInfo() { - return mInstalledPackageInfo; - } - - private void getAllUsedPermissions(int sharedUid, Set<MyPermissionInfo> permSet) { + private void getAllUsedPermissions(int sharedUid, Set<PermissionInfo> permSet) { String sharedPkgList[] = mPm.getPackagesForUid(sharedUid); if(sharedPkgList == null || (sharedPkgList.length == 0)) { return; @@ -348,95 +170,29 @@ public class AppSecurityPermissions { } private void getPermissionsForPackage(String packageName, - Set<MyPermissionInfo> permSet) { + Set<PermissionInfo> permSet) { PackageInfo pkgInfo; try { pkgInfo = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); } catch (NameNotFoundException e) { - Log.w(TAG, "Couldn't retrieve permissions for package:"+packageName); + Log.w(TAG, "Could'nt retrieve permissions for package:"+packageName); return; } if ((pkgInfo != null) && (pkgInfo.requestedPermissions != null)) { - extractPerms(pkgInfo, permSet, pkgInfo); + extractPerms(pkgInfo.requestedPermissions, permSet); } } - - private void extractPerms(PackageInfo info, Set<MyPermissionInfo> permSet, - PackageInfo installedPkgInfo) { - String[] strList = info.requestedPermissions; - int[] flagsList = info.requestedPermissionsFlags; - if ((strList == null) || (strList.length == 0)) { + + private void extractPerms(String strList[], Set<PermissionInfo> permSet) { + if((strList == null) || (strList.length == 0)) { return; } - mInstalledPackageInfo = installedPkgInfo; - for (int i=0; i<strList.length; i++) { - String permName = strList[i]; - // If we are only looking at an existing app, then we only - // care about permissions that have actually been granted to it. - if (installedPkgInfo != null && info == installedPkgInfo) { - if ((flagsList[i]&PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) { - continue; - } - } + for(String permName:strList) { try { PermissionInfo tmpPermInfo = mPm.getPermissionInfo(permName, 0); - if (tmpPermInfo == null) { - continue; - } - int existingIndex = -1; - if (installedPkgInfo != null - && installedPkgInfo.requestedPermissions != null) { - for (int j=0; j<installedPkgInfo.requestedPermissions.length; j++) { - if (permName.equals(installedPkgInfo.requestedPermissions[j])) { - existingIndex = j; - break; - } - } - } - final int existingFlags = existingIndex >= 0 ? - installedPkgInfo.requestedPermissionsFlags[existingIndex] : 0; - if (!isDisplayablePermission(tmpPermInfo, flagsList[i], existingFlags)) { - // This is not a permission that is interesting for the user - // to see, so skip it. - continue; - } - final String origGroupName = tmpPermInfo.group; - String groupName = origGroupName; - if (groupName == null) { - groupName = tmpPermInfo.packageName; - tmpPermInfo.group = groupName; - } - MyPermissionGroupInfo group = mPermGroups.get(groupName); - if (group == null) { - PermissionGroupInfo grp = null; - if (origGroupName != null) { - grp = mPm.getPermissionGroupInfo(origGroupName, 0); - } - if (grp != null) { - group = new MyPermissionGroupInfo(grp); - } else { - // We could be here either because the permission - // didn't originally specify a group or the group it - // gave couldn't be found. In either case, we consider - // its group to be the permission's package name. - tmpPermInfo.group = tmpPermInfo.packageName; - group = mPermGroups.get(tmpPermInfo.group); - if (group == null) { - group = new MyPermissionGroupInfo(tmpPermInfo); - } - group = new MyPermissionGroupInfo(tmpPermInfo); - } - mPermGroups.put(tmpPermInfo.group, group); + if(tmpPermInfo != null) { + permSet.add(tmpPermInfo); } - final boolean newPerm = installedPkgInfo != null - && (existingFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0; - MyPermissionInfo myPerm = new MyPermissionInfo(tmpPermInfo); - myPerm.mNewReqFlags = flagsList[i]; - myPerm.mExistingReqFlags = existingFlags; - // This is a new permission if the app is already installed and - // doesn't currently hold this permission. - myPerm.mNew = newPerm; - permSet.add(myPerm); } catch (NameNotFoundException e) { Log.i(TAG, "Ignoring unknown permission:"+permName); } @@ -444,99 +200,131 @@ public class AppSecurityPermissions { } public int getPermissionCount() { - return getPermissionCount(WHICH_ALL); + return mPermsList.size(); } - private List<MyPermissionInfo> getPermissionList(MyPermissionGroupInfo grp, int which) { - if (which == WHICH_NEW) { - return grp.mNewPermissions; - } else if (which == WHICH_PERSONAL) { - return grp.mPersonalPermissions; - } else if (which == WHICH_DEVICE) { - return grp.mDevicePermissions; - } else { - return grp.mAllPermissions; - } + public View getPermissionsView() { + + mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mPermsView = (LinearLayout) mInflater.inflate(R.layout.app_perms_summary, null); + mShowMore = mPermsView.findViewById(R.id.show_more); + mShowMoreIcon = (ImageView) mShowMore.findViewById(R.id.show_more_icon); + mShowMoreText = (TextView) mShowMore.findViewById(R.id.show_more_text); + mDangerousList = (LinearLayout) mPermsView.findViewById(R.id.dangerous_perms_list); + mNonDangerousList = (LinearLayout) mPermsView.findViewById(R.id.non_dangerous_perms_list); + mNoPermsView = mPermsView.findViewById(R.id.no_permissions); + + // Set up the LinearLayout that acts like a list item. + mShowMore.setClickable(true); + mShowMore.setOnClickListener(this); + mShowMore.setFocusable(true); + + // Pick up from framework resources instead. + mDefaultGrpLabel = mContext.getString(R.string.default_permission_group); + mPermFormat = mContext.getString(R.string.permissions_format); + mNormalIcon = mContext.getResources().getDrawable(R.drawable.ic_text_dot); + mDangerousIcon = mContext.getResources().getDrawable(R.drawable.ic_bullet_key_permission); + mShowMaxIcon = mContext.getResources().getDrawable(R.drawable.expander_close_holo_dark); + mShowMinIcon = mContext.getResources().getDrawable(R.drawable.expander_open_holo_dark); + + // Set permissions view + setPermissions(mPermsList); + return mPermsView; } - public int getPermissionCount(int which) { - int N = 0; - for (int i=0; i<mPermGroupsList.size(); i++) { - N += getPermissionList(mPermGroupsList.get(i), which).size(); + /** + * Canonicalizes the group description before it is displayed to the user. + * + * TODO check for internationalization issues remove trailing '.' in str1 + */ + private String canonicalizeGroupDesc(String groupDesc) { + if ((groupDesc == null) || (groupDesc.length() == 0)) { + return null; } - return N; + // Both str1 and str2 are non-null and are non-zero in size. + int len = groupDesc.length(); + if(groupDesc.charAt(len-1) == '.') { + groupDesc = groupDesc.substring(0, len-1); + } + return groupDesc; } - public View getPermissionsView() { - return getPermissionsView(WHICH_ALL); + /** + * Utility method that concatenates two strings defined by mPermFormat. + * a null value is returned if both str1 and str2 are null, if one of the strings + * is null the other non null value is returned without formatting + * this is to placate initial error checks + */ + private String formatPermissions(String groupDesc, CharSequence permDesc) { + if(groupDesc == null) { + if(permDesc == null) { + return null; + } + return permDesc.toString(); + } + groupDesc = canonicalizeGroupDesc(groupDesc); + if(permDesc == null) { + return groupDesc; + } + // groupDesc and permDesc are non null + return String.format(mPermFormat, groupDesc, permDesc.toString()); } - public View getPermissionsView(int which) { - mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - - LinearLayout permsView = (LinearLayout) mInflater.inflate(R.layout.app_perms_summary, null); - LinearLayout displayList = (LinearLayout) permsView.findViewById(R.id.perms_list); - View noPermsView = permsView.findViewById(R.id.no_permissions); - - displayPermissions(mPermGroupsList, displayList, which); - if (displayList.getChildCount() <= 0) { - noPermsView.setVisibility(View.VISIBLE); + private CharSequence getGroupLabel(String grpName) { + if (grpName == null) { + //return default label + return mDefaultGrpLabel; } - - return permsView; + CharSequence cachedLabel = mGroupLabelCache.get(grpName); + if (cachedLabel != null) { + return cachedLabel; + } + PermissionGroupInfo pgi; + try { + pgi = mPm.getPermissionGroupInfo(grpName, 0); + } catch (NameNotFoundException e) { + Log.i(TAG, "Invalid group name:" + grpName); + return null; + } + CharSequence label = pgi.loadLabel(mPm).toString(); + mGroupLabelCache.put(grpName, label); + return label; } /** * Utility method that displays permissions from a map containing group name and * list of permission descriptions. */ - private void displayPermissions(List<MyPermissionGroupInfo> groups, - LinearLayout permListView, int which) { + private void displayPermissions(boolean dangerous) { + Map<String, String> permInfoMap = dangerous ? mDangerousMap : mNormalMap; + LinearLayout permListView = dangerous ? mDangerousList : mNonDangerousList; permListView.removeAllViews(); - int spacing = (int)(8*mContext.getResources().getDisplayMetrics().density); - - for (int i=0; i<groups.size(); i++) { - MyPermissionGroupInfo grp = groups.get(i); - final List<MyPermissionInfo> perms = getPermissionList(grp, which); - for (int j=0; j<perms.size(); j++) { - MyPermissionInfo perm = perms.get(j); - View view = getPermissionItemView(grp, perm, j == 0, - which != WHICH_NEW ? mNewPermPrefix : null); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT); - if (j == 0) { - lp.topMargin = spacing; - } - if (j == grp.mAllPermissions.size()-1) { - lp.bottomMargin = spacing; - } - if (permListView.getChildCount() == 0) { - lp.topMargin *= 2; - } - permListView.addView(view, lp); - } + Set<String> permInfoStrSet = permInfoMap.keySet(); + for (String loopPermGrpInfoStr : permInfoStrSet) { + CharSequence grpLabel = getGroupLabel(loopPermGrpInfoStr); + //guaranteed that grpLabel wont be null since permissions without groups + //will belong to the default group + if(localLOGV) Log.i(TAG, "Adding view group:" + grpLabel + ", desc:" + + permInfoMap.get(loopPermGrpInfoStr)); + permListView.addView(getPermissionItemView(grpLabel, + permInfoMap.get(loopPermGrpInfoStr), dangerous)); } } - private PermissionItemView getPermissionItemView(MyPermissionGroupInfo grp, - MyPermissionInfo perm, boolean first, CharSequence newPermPrefix) { - return getPermissionItemView(mContext, mInflater, grp, perm, first, newPermPrefix); + private void displayNoPermissions() { + mNoPermsView.setVisibility(View.VISIBLE); } - private static PermissionItemView getPermissionItemView(Context context, LayoutInflater inflater, - MyPermissionGroupInfo grp, MyPermissionInfo perm, boolean first, - CharSequence newPermPrefix) { - PermissionItemView permView = (PermissionItemView)inflater.inflate( - R.layout.app_permission_item, null); - permView.setPermission(grp, perm, first, newPermPrefix); - return permView; + private View getPermissionItemView(CharSequence grpName, CharSequence permList, + boolean dangerous) { + return getPermissionItemView(mContext, mInflater, grpName, permList, + dangerous, dangerous ? mDangerousIcon : mNormalIcon); } - private static View getPermissionItemViewOld(Context context, LayoutInflater inflater, + private static View getPermissionItemView(Context context, LayoutInflater inflater, CharSequence grpName, CharSequence permList, boolean dangerous, Drawable icon) { - View permView = inflater.inflate(R.layout.app_permission_item_old, null); + View permView = inflater.inflate(R.layout.app_permission_item, null); TextView permGrpView = (TextView) permView.findViewById(R.id.permission_group); TextView permDescView = (TextView) permView.findViewById(R.id.permission_list); @@ -553,107 +341,159 @@ public class AppSecurityPermissions { return permView; } - private boolean isDisplayablePermission(PermissionInfo pInfo, int newReqFlags, - int existingReqFlags) { - final int base = pInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE; - // Dangerous and normal permissions are always shown to the user. - if (base == PermissionInfo.PROTECTION_DANGEROUS || - base == PermissionInfo.PROTECTION_NORMAL) { - return true; + private void showPermissions() { + + switch(mCurrentState) { + case NO_PERMS: + displayNoPermissions(); + break; + + case DANGEROUS_ONLY: + displayPermissions(true); + break; + + case NORMAL_ONLY: + displayPermissions(false); + break; + + case BOTH: + displayPermissions(true); + if (mExpanded) { + displayPermissions(false); + mShowMoreIcon.setImageDrawable(mShowMaxIcon); + mShowMoreText.setText(R.string.perms_hide); + mNonDangerousList.setVisibility(View.VISIBLE); + } else { + mShowMoreIcon.setImageDrawable(mShowMinIcon); + mShowMoreText.setText(R.string.perms_show_all); + mNonDangerousList.setVisibility(View.GONE); + } + mShowMore.setVisibility(View.VISIBLE); + break; } - // Development permissions are only shown to the user if they are already - // granted to the app -- if we are installing an app and they are not - // already granted, they will not be granted as part of the install. - if ((existingReqFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0 - && (pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) { + } + + private boolean isDisplayablePermission(PermissionInfo pInfo) { + if(pInfo.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS || + pInfo.protectionLevel == PermissionInfo.PROTECTION_NORMAL) { return true; } return false; } - private static class PermissionGroupInfoComparator implements Comparator<MyPermissionGroupInfo> { - private final Collator sCollator = Collator.getInstance(); - PermissionGroupInfoComparator() { + /* + * Utility method that aggregates all permission descriptions categorized by group + * Say group1 has perm11, perm12, perm13, the group description will be + * perm11_Desc, perm12_Desc, perm13_Desc + */ + private void aggregateGroupDescs( + Map<String, List<PermissionInfo> > map, Map<String, String> retMap) { + if(map == null) { + return; } - public final int compare(MyPermissionGroupInfo a, MyPermissionGroupInfo b) { - if (((a.flags^b.flags)&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) { - return ((a.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) ? -1 : 1; + if(retMap == null) { + return; + } + Set<String> grpNames = map.keySet(); + Iterator<String> grpNamesIter = grpNames.iterator(); + while(grpNamesIter.hasNext()) { + String grpDesc = null; + String grpNameKey = grpNamesIter.next(); + List<PermissionInfo> grpPermsList = map.get(grpNameKey); + if(grpPermsList == null) { + continue; + } + for(PermissionInfo permInfo: grpPermsList) { + CharSequence permDesc = permInfo.loadLabel(mPm); + grpDesc = formatPermissions(grpDesc, permDesc); } - if (a.priority != b.priority) { - return a.priority > b.priority ? -1 : 1; + // Insert grpDesc into map + if(grpDesc != null) { + if(localLOGV) Log.i(TAG, "Group:"+grpNameKey+" description:"+grpDesc.toString()); + retMap.put(grpNameKey, grpDesc.toString()); } - return sCollator.compare(a.mLabel, b.mLabel); } } - private static class PermissionInfoComparator implements Comparator<MyPermissionInfo> { + private static class PermissionInfoComparator implements Comparator<PermissionInfo> { + private PackageManager mPm; private final Collator sCollator = Collator.getInstance(); - PermissionInfoComparator() { + PermissionInfoComparator(PackageManager pm) { + mPm = pm; } - public final int compare(MyPermissionInfo a, MyPermissionInfo b) { - return sCollator.compare(a.mLabel, b.mLabel); + public final int compare(PermissionInfo a, PermissionInfo b) { + CharSequence sa = a.loadLabel(mPm); + CharSequence sb = b.loadLabel(mPm); + return sCollator.compare(sa, sb); } } - - private void addPermToList(List<MyPermissionInfo> permList, - MyPermissionInfo pInfo) { - if (pInfo.mLabel == null) { - pInfo.mLabel = pInfo.loadLabel(mPm); - } - int idx = Collections.binarySearch(permList, pInfo, mPermComparator); - if(localLOGV) Log.i(TAG, "idx="+idx+", list.size="+permList.size()); - if (idx < 0) { - idx = -idx-1; - permList.add(idx, pInfo); - } - } - - private void setPermissions(List<MyPermissionInfo> permList) { + + private void setPermissions(List<PermissionInfo> permList) { + mGroupLabelCache = new HashMap<String, CharSequence>(); + //add the default label so that uncategorized permissions can go here + mGroupLabelCache.put(mDefaultGrpName, mDefaultGrpLabel); + + // Map containing group names and a list of permissions under that group + // categorized as dangerous + mDangerousMap = new HashMap<String, String>(); + // Map containing group names and a list of permissions under that group + // categorized as normal + mNormalMap = new HashMap<String, String>(); + + // Additional structures needed to ensure that permissions are unique under + // each group + Map<String, List<PermissionInfo>> dangerousMap = + new HashMap<String, List<PermissionInfo>>(); + Map<String, List<PermissionInfo> > normalMap = + new HashMap<String, List<PermissionInfo>>(); + PermissionInfoComparator permComparator = new PermissionInfoComparator(mPm); + if (permList != null) { // First pass to group permissions - for (MyPermissionInfo pInfo : permList) { + for (PermissionInfo pInfo : permList) { if(localLOGV) Log.i(TAG, "Processing permission:"+pInfo.name); - if(!isDisplayablePermission(pInfo, pInfo.mNewReqFlags, pInfo.mExistingReqFlags)) { + if(!isDisplayablePermission(pInfo)) { if(localLOGV) Log.i(TAG, "Permission:"+pInfo.name+" is not displayable"); continue; } - MyPermissionGroupInfo group = mPermGroups.get(pInfo.group); - if (group != null) { - pInfo.mLabel = pInfo.loadLabel(mPm); - addPermToList(group.mAllPermissions, pInfo); - if (pInfo.mNew) { - addPermToList(group.mNewPermissions, pInfo); - } - if ((group.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) { - addPermToList(group.mPersonalPermissions, pInfo); - } else { - addPermToList(group.mDevicePermissions, pInfo); + Map<String, List<PermissionInfo> > permInfoMap = + (pInfo.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) ? + dangerousMap : normalMap; + String grpName = (pInfo.group == null) ? mDefaultGrpName : pInfo.group; + if(localLOGV) Log.i(TAG, "Permission:"+pInfo.name+" belongs to group:"+grpName); + List<PermissionInfo> grpPermsList = permInfoMap.get(grpName); + if(grpPermsList == null) { + grpPermsList = new ArrayList<PermissionInfo>(); + permInfoMap.put(grpName, grpPermsList); + grpPermsList.add(pInfo); + } else { + int idx = Collections.binarySearch(grpPermsList, pInfo, permComparator); + if(localLOGV) Log.i(TAG, "idx="+idx+", list.size="+grpPermsList.size()); + if (idx < 0) { + idx = -idx-1; + grpPermsList.add(idx, pInfo); } } } + // Second pass to actually form the descriptions + // Look at dangerous permissions first + aggregateGroupDescs(dangerousMap, mDangerousMap); + aggregateGroupDescs(normalMap, mNormalMap); } - for (MyPermissionGroupInfo pgrp : mPermGroups.values()) { - if (pgrp.labelRes != 0 || pgrp.nonLocalizedLabel != null) { - pgrp.mLabel = pgrp.loadLabel(mPm); - } else { - ApplicationInfo app; - try { - app = mPm.getApplicationInfo(pgrp.packageName, 0); - pgrp.mLabel = app.loadLabel(mPm); - } catch (NameNotFoundException e) { - pgrp.mLabel = pgrp.loadLabel(mPm); - } - } - mPermGroupsList.add(pgrp); - } - Collections.sort(mPermGroupsList, mPermGroupComparator); - if (false) { - for (MyPermissionGroupInfo grp : mPermGroupsList) { - Log.i("foo", "Group " + grp.name + " personal=" - + ((grp.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) - + " priority=" + grp.priority); - } + mCurrentState = State.NO_PERMS; + if(mDangerousMap.size() > 0) { + mCurrentState = (mNormalMap.size() > 0) ? State.BOTH : State.DANGEROUS_ONLY; + } else if(mNormalMap.size() > 0) { + mCurrentState = State.NORMAL_ONLY; } + if(localLOGV) Log.i(TAG, "mCurrentState=" + mCurrentState); + showPermissions(); + } + + public void onClick(View v) { + if(localLOGV) Log.i(TAG, "mExpanded="+mExpanded); + mExpanded = !mExpanded; + showPermissions(); } } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 16490e8..c29dd58 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -1416,6 +1416,7 @@ public class Editor { } Layout layout = mTextView.getLayout(); + Layout hintLayout = mTextView.getHintLayout(); final int offset = mTextView.getSelectionStart(); final int line = layout.getLineForOffset(offset); final int top = layout.getLineTop(line); @@ -1429,13 +1430,23 @@ public class Editor { middle = (top + bottom) >> 1; } - updateCursorPosition(0, top, middle, layout.getPrimaryHorizontal(offset)); + updateCursorPosition(0, top, middle, getPrimaryHorizontal(layout, hintLayout, offset)); if (mCursorCount == 2) { updateCursorPosition(1, middle, bottom, layout.getSecondaryHorizontal(offset)); } } + private float getPrimaryHorizontal(Layout layout, Layout hintLayout, int offset) { + if (TextUtils.isEmpty(layout.getText()) && + hintLayout != null && + !TextUtils.isEmpty(hintLayout.getText())) { + return hintLayout.getPrimaryHorizontal(offset); + } else { + return layout.getPrimaryHorizontal(offset); + } + } + /** * @return true if the selection mode was actually started. */ diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 3e2d43a..131b075 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -1312,6 +1312,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** + * @return the Layout that is currently being used to display the hint text. + * This can be null. + */ + final Layout getHintLayout() { + return mHintLayout; + } + + /** * @return the current key listener for this TextView. * This will frequently be null for non-EditText TextViews. * diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java index 234cb71..46478ca 100644 --- a/core/java/com/android/internal/app/ActionBarImpl.java +++ b/core/java/com/android/internal/app/ActionBarImpl.java @@ -673,26 +673,29 @@ public class ActionBarImpl extends ActionBar { if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled || fromSystem)) { - mTopVisibilityView.setAlpha(0); - mTopVisibilityView.setTranslationY(-mTopVisibilityView.getHeight()); + mTopVisibilityView.setTranslationY(0); // because we're about to ask its window loc + float startingY = -mTopVisibilityView.getHeight(); + if (fromSystem) { + int topLeft[] = {0, 0}; + mTopVisibilityView.getLocationInWindow(topLeft); + startingY -= topLeft[1]; + } + mTopVisibilityView.setTranslationY(startingY); AnimatorSet anim = new AnimatorSet(); - AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mTopVisibilityView, "alpha", 1)); - b.with(ObjectAnimator.ofFloat(mTopVisibilityView, "translationY", 0)); + AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mTopVisibilityView, + "translationY", 0)); if (mContentView != null) { b.with(ObjectAnimator.ofFloat(mContentView, "translationY", - -mTopVisibilityView.getHeight(), 0)); + startingY, 0)); } if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) { - mSplitView.setAlpha(0); mSplitView.setTranslationY(mSplitView.getHeight()); mSplitView.setVisibility(View.VISIBLE); - b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 1)); b.with(ObjectAnimator.ofFloat(mSplitView, "translationY", 0)); } anim.setInterpolator(AnimationUtils.loadInterpolator(mContext, - com.android.internal.R.interpolator.decelerate_quad)); - anim.setDuration(mContext.getResources().getInteger( - com.android.internal.R.integer.config_mediumAnimTime)); + com.android.internal.R.interpolator.decelerate_cubic)); + anim.setDuration(250); // If this is being shown from the system, add a small delay. // This is because we will also be animating in the status bar, // and these two elements can't be done in lock-step. So we give @@ -700,9 +703,6 @@ public class ActionBarImpl extends ActionBar { // the action bar animates. (This corresponds to the corresponding // case when hiding, where the status bar has a small delay before // starting.) - if (fromSystem) { - anim.setStartDelay(100); - } anim.addListener(mShowListener); mCurrentShowAnim = anim; anim.start(); @@ -734,23 +734,26 @@ public class ActionBarImpl extends ActionBar { mTopVisibilityView.setAlpha(1); mContainerView.setTransitioning(true); AnimatorSet anim = new AnimatorSet(); - AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mTopVisibilityView, "alpha", 0)); - b.with(ObjectAnimator.ofFloat(mTopVisibilityView, "translationY", - -mTopVisibilityView.getHeight())); + float endingY = -mTopVisibilityView.getHeight(); + if (fromSystem) { + int topLeft[] = {0, 0}; + mTopVisibilityView.getLocationInWindow(topLeft); + endingY -= topLeft[1]; + } + AnimatorSet.Builder b = anim.play(ObjectAnimator.ofFloat(mTopVisibilityView, + "translationY", endingY)); if (mContentView != null) { b.with(ObjectAnimator.ofFloat(mContentView, "translationY", - 0, -mTopVisibilityView.getHeight())); + 0, endingY)); } if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) { mSplitView.setAlpha(1); - b.with(ObjectAnimator.ofFloat(mSplitView, "alpha", 0)); b.with(ObjectAnimator.ofFloat(mSplitView, "translationY", mSplitView.getHeight())); } anim.setInterpolator(AnimationUtils.loadInterpolator(mContext, - com.android.internal.R.interpolator.accelerate_quad)); - anim.setDuration(mContext.getResources().getInteger( - com.android.internal.R.integer.config_mediumAnimTime)); + com.android.internal.R.interpolator.accelerate_cubic)); + anim.setDuration(250); anim.addListener(mHideListener); mCurrentShowAnim = anim; anim.start(); diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index f9ef3c5..b2c3091 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -419,6 +419,7 @@ public class MultiWaveView extends View { "y", 0, "onUpdate", mUpdateListener, "onComplete", finishListener)); + mHandleAnimations.start(); } /** @@ -519,12 +520,15 @@ public class MultiWaveView extends View { // Inform listener of any active targets. Typically only one will be active. deactivateHandle(RETURN_TO_HOME_DURATION, RETURN_TO_HOME_DELAY, 0.0f, mResetListener); dispatchTriggerEvent(activeTarget); + if (!mAlwaysTrackFinger) { + // Force ring and targets to finish animation to final expanded state + mTargetAnimations.stop(); + } } else { // Animate handle back to the center based on current state. deactivateHandle(HIDE_ANIMATION_DURATION, HIDE_ANIMATION_DELAY, 1.0f, mResetListenerWithPing); hideTargets(true, false); - mHandleAnimations.start(); } setGrabbedState(OnTriggerListener.NO_HANDLE); @@ -542,7 +546,6 @@ public class MultiWaveView extends View { mTargetDrawables.get(i).setAlpha(0.0f); } } - mOuterRing.setAlpha(0.0f); } private void hideTargets(boolean animate, boolean expanded) { @@ -809,7 +812,6 @@ public class MultiWaveView extends View { switchToState(STATE_START, eventX, eventY); if (!trySwitchToFirstTouchState(eventX, eventY)) { mDragging = false; - mTargetAnimations.cancel(); ping(); } } diff --git a/core/jni/android_database_SQLiteConnection.cpp b/core/jni/android_database_SQLiteConnection.cpp index 0777ea2..3bbb8bf 100644 --- a/core/jni/android_database_SQLiteConnection.cpp +++ b/core/jni/android_database_SQLiteConnection.cpp @@ -41,6 +41,20 @@ namespace android { +/* Busy timeout in milliseconds. + * If another connection (possibly in another process) has the database locked for + * longer than this amount of time then SQLite will generate a SQLITE_BUSY error. + * The SQLITE_BUSY error is then raised as a SQLiteDatabaseLockedException. + * + * In ordinary usage, busy timeouts are quite rare. Most databases only ever + * have a single open connection at a time unless they are using WAL. When using + * WAL, a timeout could occur if one connection is busy performing an auto-checkpoint + * operation. The busy timeout needs to be long enough to tolerate slow I/O write + * operations but not so long as to cause the application to hang indefinitely if + * there is a problem acquiring a database lock. + */ +static const int BUSY_TIMEOUT_MS = 2500; + static struct { jfieldID name; jfieldID numArgs; @@ -127,8 +141,8 @@ static jint nativeOpen(JNIEnv* env, jclass clazz, jstring pathStr, jint openFlag return 0; } - // Set the default busy handler to retry for 1000ms and then return SQLITE_BUSY - err = sqlite3_busy_timeout(db, 1000 /* ms */); + // Set the default busy handler to retry automatically before returning SQLITE_BUSY. + err = sqlite3_busy_timeout(db, BUSY_TIMEOUT_MS); if (err != SQLITE_OK) { throw_sqlite3_exception(env, db, "Could not set busy timeout"); sqlite3_close(db); diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp index d80bfb3..89058a7 100644 --- a/core/jni/android_view_DisplayEventReceiver.cpp +++ b/core/jni/android_view_DisplayEventReceiver.cpp @@ -42,12 +42,13 @@ static struct { } gDisplayEventReceiverClassInfo; -class NativeDisplayEventReceiver : public RefBase { +class NativeDisplayEventReceiver : public LooperCallback { public: NativeDisplayEventReceiver(JNIEnv* env, jobject receiverObj, const sp<MessageQueue>& messageQueue); status_t initialize(); + void dispose(); status_t scheduleVsync(); protected: @@ -59,7 +60,7 @@ private: DisplayEventReceiver mReceiver; bool mWaitingForVsync; - static int handleReceiveCallback(int receiveFd, int events, void* data); + virtual int handleEvent(int receiveFd, int events, void* data); bool readLastVsyncMessage(nsecs_t* outTimestamp, uint32_t* outCount); }; @@ -72,12 +73,6 @@ NativeDisplayEventReceiver::NativeDisplayEventReceiver(JNIEnv* env, } NativeDisplayEventReceiver::~NativeDisplayEventReceiver() { - ALOGV("receiver %p ~ Disposing display event receiver.", this); - - if (!mReceiver.initCheck()) { - mMessageQueue->getLooper()->removeFd(mReceiver.getFd()); - } - JNIEnv* env = AndroidRuntime::getJNIEnv(); env->DeleteGlobalRef(mReceiverObjGlobal); } @@ -90,13 +85,21 @@ status_t NativeDisplayEventReceiver::initialize() { } int rc = mMessageQueue->getLooper()->addFd(mReceiver.getFd(), 0, ALOOPER_EVENT_INPUT, - handleReceiveCallback, this); + this, NULL); if (rc < 0) { return UNKNOWN_ERROR; } return OK; } +void NativeDisplayEventReceiver::dispose() { + ALOGV("receiver %p ~ Disposing display event receiver.", this); + + if (!mReceiver.initCheck()) { + mMessageQueue->getLooper()->removeFd(mReceiver.getFd()); + } +} + status_t NativeDisplayEventReceiver::scheduleVsync() { if (!mWaitingForVsync) { ALOGV("receiver %p ~ Scheduling vsync.", this); @@ -117,9 +120,7 @@ status_t NativeDisplayEventReceiver::scheduleVsync() { return OK; } -int NativeDisplayEventReceiver::handleReceiveCallback(int receiveFd, int events, void* data) { - sp<NativeDisplayEventReceiver> r = static_cast<NativeDisplayEventReceiver*>(data); - +int NativeDisplayEventReceiver::handleEvent(int receiveFd, int events, void* data) { if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) { ALOGE("Display event receiver pipe was closed or an error occurred. " "events=0x%x", events); @@ -135,23 +136,23 @@ int NativeDisplayEventReceiver::handleReceiveCallback(int receiveFd, int events, // Drain all pending events, keep the last vsync. nsecs_t vsyncTimestamp; uint32_t vsyncCount; - if (!r->readLastVsyncMessage(&vsyncTimestamp, &vsyncCount)) { - ALOGV("receiver %p ~ Woke up but there was no vsync pulse!", data); + if (!readLastVsyncMessage(&vsyncTimestamp, &vsyncCount)) { + ALOGV("receiver %p ~ Woke up but there was no vsync pulse!", this); return 1; // keep the callback, did not obtain a vsync pulse } ALOGV("receiver %p ~ Vsync pulse: timestamp=%lld, count=%d", - data, vsyncTimestamp, vsyncCount); - r->mWaitingForVsync = false; + this, vsyncTimestamp, vsyncCount); + mWaitingForVsync = false; JNIEnv* env = AndroidRuntime::getJNIEnv(); - ALOGV("receiver %p ~ Invoking vsync handler.", data); - env->CallVoidMethod(r->mReceiverObjGlobal, + ALOGV("receiver %p ~ Invoking vsync handler.", this); + env->CallVoidMethod(mReceiverObjGlobal, gDisplayEventReceiverClassInfo.dispatchVsync, vsyncTimestamp, vsyncCount); - ALOGV("receiver %p ~ Returned from vsync handler.", data); + ALOGV("receiver %p ~ Returned from vsync handler.", this); - r->mMessageQueue->raiseAndClearException(env, "dispatchVsync"); + mMessageQueue->raiseAndClearException(env, "dispatchVsync"); return 1; // keep the callback } @@ -201,6 +202,7 @@ static jint nativeInit(JNIEnv* env, jclass clazz, jobject receiverObj, static void nativeDispose(JNIEnv* env, jclass clazz, jint receiverPtr) { sp<NativeDisplayEventReceiver> receiver = reinterpret_cast<NativeDisplayEventReceiver*>(receiverPtr); + receiver->dispose(); receiver->decStrong(gDisplayEventReceiverClassInfo.clazz); // drop reference held by the object } diff --git a/core/jni/android_view_InputEventReceiver.cpp b/core/jni/android_view_InputEventReceiver.cpp index 08e08b9..9501cf2 100644 --- a/core/jni/android_view_InputEventReceiver.cpp +++ b/core/jni/android_view_InputEventReceiver.cpp @@ -44,13 +44,14 @@ static struct { } gInputEventReceiverClassInfo; -class NativeInputEventReceiver : public RefBase { +class NativeInputEventReceiver : public LooperCallback { public: NativeInputEventReceiver(JNIEnv* env, jobject receiverObj, const sp<InputChannel>& inputChannel, const sp<MessageQueue>& messageQueue); status_t initialize(); + void dispose(); status_t finishInputEvent(uint32_t seq, bool handled); status_t consumeEvents(JNIEnv* env, bool consumeBatches, nsecs_t frameTime); @@ -68,7 +69,7 @@ private: return mInputConsumer.getChannel()->getName().string(); } - static int handleReceiveCallback(int receiveFd, int events, void* data); + virtual int handleEvent(int receiveFd, int events, void* data); }; @@ -84,23 +85,24 @@ NativeInputEventReceiver::NativeInputEventReceiver(JNIEnv* env, } NativeInputEventReceiver::~NativeInputEventReceiver() { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Disposing input event receiver.", getInputChannelName()); -#endif - - mMessageQueue->getLooper()->removeFd(mInputConsumer.getChannel()->getFd()); - JNIEnv* env = AndroidRuntime::getJNIEnv(); env->DeleteGlobalRef(mReceiverObjGlobal); } status_t NativeInputEventReceiver::initialize() { int receiveFd = mInputConsumer.getChannel()->getFd(); - mMessageQueue->getLooper()->addFd( - receiveFd, 0, ALOOPER_EVENT_INPUT, handleReceiveCallback, this); + mMessageQueue->getLooper()->addFd(receiveFd, 0, ALOOPER_EVENT_INPUT, this, NULL); return OK; } +void NativeInputEventReceiver::dispose() { +#if DEBUG_DISPATCH_CYCLE + ALOGD("channel '%s' ~ Disposing input event receiver.", getInputChannelName()); +#endif + + mMessageQueue->getLooper()->removeFd(mInputConsumer.getChannel()->getFd()); +} + status_t NativeInputEventReceiver::finishInputEvent(uint32_t seq, bool handled) { #if DEBUG_DISPATCH_CYCLE ALOGD("channel '%s' ~ Finished input event.", getInputChannelName()); @@ -114,24 +116,22 @@ status_t NativeInputEventReceiver::finishInputEvent(uint32_t seq, bool handled) return status; } -int NativeInputEventReceiver::handleReceiveCallback(int receiveFd, int events, void* data) { - sp<NativeInputEventReceiver> r = static_cast<NativeInputEventReceiver*>(data); - +int NativeInputEventReceiver::handleEvent(int receiveFd, int events, void* data) { if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) { ALOGE("channel '%s' ~ Publisher closed input channel or an error occurred. " - "events=0x%x", r->getInputChannelName(), events); + "events=0x%x", getInputChannelName(), events); return 0; // remove the callback } if (!(events & ALOOPER_EVENT_INPUT)) { ALOGW("channel '%s' ~ Received spurious callback for unhandled poll event. " - "events=0x%x", r->getInputChannelName(), events); + "events=0x%x", getInputChannelName(), events); return 1; } JNIEnv* env = AndroidRuntime::getJNIEnv(); - status_t status = r->consumeEvents(env, false /*consumeBatches*/, -1); - r->mMessageQueue->raiseAndClearException(env, "handleReceiveCallback"); + status_t status = consumeEvents(env, false /*consumeBatches*/, -1); + mMessageQueue->raiseAndClearException(env, "handleReceiveCallback"); return status == OK || status == NO_MEMORY ? 1 : 0; } @@ -256,6 +256,7 @@ static jint nativeInit(JNIEnv* env, jclass clazz, jobject receiverObj, static void nativeDispose(JNIEnv* env, jclass clazz, jint receiverPtr) { sp<NativeInputEventReceiver> receiver = reinterpret_cast<NativeInputEventReceiver*>(receiverPtr); + receiver->dispose(); receiver->decStrong(gInputEventReceiverClassInfo.clazz); // drop reference held by the object } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index e3082ea..abd7e92 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -139,30 +139,17 @@ <eat-comment /> <!-- Used for permissions that can be used to make the user spend money - without their direct involvement. --> + without their direct involvement. For example, this is the group + for permissions that allow you to directly place phone calls, + directly send SMS messages, etc. --> <permission-group android:name="android.permission-group.COST_MONEY" android:label="@string/permgrouplab_costMoney" android:description="@string/permgroupdesc_costMoney" /> - <!-- ================================== --> - <!-- Permissions for accessing messages --> - <!-- ================================== --> - <eat-comment /> - - <!-- Used for permissions that allow an application to send messages - on behalf of the user or intercept messages being received by the - user. This is primarily intended for SMS/MMS messaging, such as - receiving or reading an MMS. --> - <permission-group android:name="android.permission-group.MESSAGES" - android:label="@string/permgrouplab_messages" - android:icon="@drawable/perm_group_messages" - android:description="@string/permgroupdesc_messages" - android:permissionGroupFlags="personalInfo" - android:priority="360"/> - <!-- Allows an application to send SMS messages. --> + <!-- Allows an application to send SMS messages. --> <permission android:name="android.permission.SEND_SMS" - android:permissionGroup="android.permission-group.MESSAGES" + android:permissionGroup="android.permission-group.COST_MONEY" android:protectionLevel="dangerous" android:label="@string/permlab_sendSms" android:description="@string/permdesc_sendSms" /> @@ -171,11 +158,33 @@ input or confirmation. @hide --> <permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION" - android:permissionGroup="android.permission-group.MESSAGES" + android:permissionGroup="android.permission-group.COST_MONEY" android:protectionLevel="signature|system" android:label="@string/permlab_sendSmsNoConfirmation" android:description="@string/permdesc_sendSmsNoConfirmation" /> + <!-- Allows an application to initiate a phone call without going through + the Dialer user interface for the user to confirm the call + being placed. --> + <permission android:name="android.permission.CALL_PHONE" + android:permissionGroup="android.permission-group.COST_MONEY" + android:protectionLevel="dangerous" + android:label="@string/permlab_callPhone" + android:description="@string/permdesc_callPhone" /> + + <!-- ================================== --> + <!-- Permissions for accessing messages --> + <!-- ================================== --> + <eat-comment /> + + <!-- Used for permissions that allow an application to send messages + on behalf of the user or intercept messages being received by the + user. This is primarily intended for SMS/MMS messaging, such as + receiving or reading an MMS. --> + <permission-group android:name="android.permission-group.MESSAGES" + android:label="@string/permgrouplab_messages" + android:description="@string/permgroupdesc_messages" /> + <!-- Allows an application to monitor incoming SMS messages, to record or perform processing on them. --> <permission android:name="android.permission.RECEIVE_SMS" @@ -240,25 +249,22 @@ android:description="@string/permdesc_receiveWapPush" /> <!-- =============================================================== --> - <!-- Permissions for accessing social info (contacts and social) --> + <!-- Permissions for accessing personal info (contacts and calendar) --> <!-- =============================================================== --> <eat-comment /> - <!-- Used for permissions that provide access to the user's social connections, - such as contacts, call logs, social stream, etc. This includes + <!-- Used for permissions that provide access to the user's private data, + such as contacts, calendar events, e-mail messages, etc. This includes both reading and writing of this data (which should generally be expressed as two distinct permissions). --> - <permission-group android:name="android.permission-group.SOCIAL_INFO" - android:label="@string/permgrouplab_socialInfo" - android:icon="@drawable/perm_group_social_info" - android:description="@string/permgroupdesc_socialInfo" - android:permissionGroupFlags="personalInfo" - android:priority="320" /> + <permission-group android:name="android.permission-group.PERSONAL_INFO" + android:label="@string/permgrouplab_personalInfo" + android:description="@string/permgroupdesc_personalInfo" /> <!-- Allows an application to read the user's contacts data. --> <permission android:name="android.permission.READ_CONTACTS" - android:permissionGroup="android.permission-group.SOCIAL_INFO" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="dangerous" android:label="@string/permlab_readContacts" android:description="@string/permdesc_readContacts" /> @@ -266,14 +272,14 @@ <!-- Allows an application to write (but not read) the user's contacts data. --> <permission android:name="android.permission.WRITE_CONTACTS" - android:permissionGroup="android.permission-group.SOCIAL_INFO" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="dangerous" android:label="@string/permlab_writeContacts" android:description="@string/permdesc_writeContacts" /> <!-- Allows an application to read the user's call log. --> <permission android:name="android.permission.READ_CALL_LOG" - android:permissionGroup="android.permission-group.SOCIAL_INFO" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="dangerous" android:label="@string/permlab_readCallLog" android:description="@string/permdesc_readCallLog" /> @@ -281,42 +287,11 @@ <!-- Allows an application to write (but not read) the user's contacts data. --> <permission android:name="android.permission.WRITE_CALL_LOG" - android:permissionGroup="android.permission-group.SOCIAL_INFO" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="dangerous" android:label="@string/permlab_writeCallLog" android:description="@string/permdesc_writeCallLog" /> - <!-- Allows an application to read from the user's social stream. --> - <permission android:name="android.permission.READ_SOCIAL_STREAM" - android:permissionGroup="android.permission-group.SOCIAL_INFO" - android:protectionLevel="dangerous" - android:label="@string/permlab_readSocialStream" - android:description="@string/permdesc_readSocialStream" /> - - <!-- Allows an application to write (but not read) the user's - social stream data. --> - <permission android:name="android.permission.WRITE_SOCIAL_STREAM" - android:permissionGroup="android.permission-group.SOCIAL_INFO" - android:protectionLevel="dangerous" - android:label="@string/permlab_writeSocialStream" - android:description="@string/permdesc_writeSocialStream" /> - - <!-- =============================================================== --> - <!-- Permissions for accessing information about the device owner --> - <!-- =============================================================== --> - <eat-comment /> - - <!-- Used for permissions that provide access to information about the device - user such as profile information. This includes both reading and - writing of this data (which should generally be expressed as two - distinct permissions). --> - <permission-group android:name="android.permission-group.PERSONAL_INFO" - android:label="@string/permgrouplab_personalInfo" - android:icon="@drawable/perm_group_personal_info" - android:description="@string/permgroupdesc_personalInfo" - android:permissionGroupFlags="personalInfo" - android:priority="310" /> - <!-- Allows an application to read the user's personal profile data. --> <permission android:name="android.permission.READ_PROFILE" android:permissionGroup="android.permission-group.PERSONAL_INFO" @@ -332,19 +307,20 @@ android:label="@string/permlab_writeProfile" android:description="@string/permdesc_writeProfile" /> - <!-- =============================================================== --> - <!-- Permissions for accessing the device calendar --> - <!-- =============================================================== --> - <eat-comment /> + <!-- Allows an application to read from the user's social stream. --> + <permission android:name="android.permission.READ_SOCIAL_STREAM" + android:permissionGroup="android.permission-group.PERSONAL_INFO" + android:protectionLevel="dangerous" + android:label="@string/permlab_readSocialStream" + android:description="@string/permdesc_readSocialStream" /> - <!-- Used for permissions that provide access to the device - calendar to create / view events.--> - <permission-group android:name="android.permission-group.CALENDAR" - android:label="@string/permgrouplab_calendar" - android:icon="@drawable/perm_group_calendar" - android:description="@string/permgroupdesc_calendar" - android:permissionGroupFlags="personalInfo" - android:priority="290" /> + <!-- Allows an application to write (but not read) the user's + social stream data. --> + <permission android:name="android.permission.WRITE_SOCIAL_STREAM" + android:permissionGroup="android.permission-group.PERSONAL_INFO" + android:protectionLevel="dangerous" + android:label="@string/permlab_writeSocialStream" + android:description="@string/permdesc_writeSocialStream" /> <!-- Allows an application to read the user's calendar data. --> <permission android:name="android.permission.READ_CALENDAR" @@ -361,63 +337,26 @@ android:label="@string/permlab_writeCalendar" android:description="@string/permdesc_writeCalendar" /> - <!-- =============================================================== --> - <!-- Permissions for accessing the user dictionary--> - <!-- =============================================================== --> - <eat-comment /> - - <!-- Used for permissions that provide access to the user - calendar to create / view events.--> - <permission-group android:name="android.permission-group.USER_DICTIONARY" - android:label="@string/permgrouplab_dictionary" - android:icon="@drawable/perm_group_user_dictionary" - android:description="@string/permgroupdesc_dictionary" - android:permissionGroupFlags="personalInfo" - android:priority="170" /> - <!-- Allows an application to read the user dictionary. This should really only be required by an IME, or a dictionary editor like the Settings app. --> <permission android:name="android.permission.READ_USER_DICTIONARY" - android:permissionGroup="android.permission-group.USER_DICTIONARY" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="dangerous" android:label="@string/permlab_readDictionary" android:description="@string/permdesc_readDictionary" /> - <!-- Used for permissions that provide access to the user - calendar to create / view events.--> - <permission-group android:name="android.permission-group.WRITE_USER_DICTIONARY" - android:label="@string/permgrouplab_writeDictionary" - android:icon="@drawable/perm_group_user_dictionary_write" - android:description="@string/permgroupdesc_writeDictionary" - android:permissionGroupFlags="personalInfo" - android:priority="160" /> - <!-- Allows an application to write to the user dictionary. --> <permission android:name="android.permission.WRITE_USER_DICTIONARY" - android:permissionGroup="android.permission-group.WRITE_USER_DICTIONARY" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="normal" android:label="@string/permlab_writeDictionary" android:description="@string/permdesc_writeDictionary" /> - <!-- =============================================================== --> - <!-- Permissions for accessing the user bookmarks --> - <!-- =============================================================== --> - <eat-comment /> - - <!-- Used for permissions that provide access to the user - bookmarks and browser history.--> - <permission-group android:name="android.permission-group.BOOKMARKS" - android:label="@string/permgrouplab_bookmarks" - android:icon="@drawable/perm_group_bookmarks" - android:description="@string/permgroupdesc_bookmarks" - android:permissionGroupFlags="personalInfo" - android:priority="300" /> - <!-- Allows an application to read (but not write) the user's browsing history and bookmarks. --> <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" - android:permissionGroup="android.permission-group.BOOKMARKS" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:label="@string/permlab_readHistoryBookmarks" android:description="@string/permdesc_readHistoryBookmarks" android:protectionLevel="dangerous" /> @@ -425,48 +364,23 @@ <!-- Allows an application to write (but not read) the user's browsing history and bookmarks. --> <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" - android:permissionGroup="android.permission-group.BOOKMARKS" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:label="@string/permlab_writeHistoryBookmarks" android:description="@string/permdesc_writeHistoryBookmarks" android:protectionLevel="dangerous" /> - <!-- =============================================================== --> - <!-- Permissions for setting the device alarm --> - <!-- =============================================================== --> - <eat-comment /> - - <!-- Used for permissions that provide access to the user voicemail box. --> - <permission-group android:name="android.permission-group.DEVICE_ALARMS" - android:label="@string/permgrouplab_deviceAlarms" - android:icon="@drawable/perm_group_device_alarms" - android:description="@string/permgroupdesc_deviceAlarms" - android:permissionGroupFlags="personalInfo" - android:priority="210" /> - <!-- Allows an application to broadcast an Intent to set an alarm for the user. --> <permission android:name="com.android.alarm.permission.SET_ALARM" - android:permissionGroup="android.permission-group.DEVICE_ALARMS" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:label="@string/permlab_setAlarm" android:description="@string/permdesc_setAlarm" android:protectionLevel="normal" /> - <!-- =============================================================== --> - <!-- Permissions for accessing the user voicemail --> - <!-- =============================================================== --> - <eat-comment /> - - <!-- Used for permissions that provide access to the user voicemail box. --> - <permission-group android:name="android.permission-group.VOICEMAIL" - android:label="@string/permgrouplab_voicemail" - android:icon="@drawable/perm_group_voicemail" - android:description="@string/permgroupdesc_voicemail" - android:permissionGroupFlags="personalInfo" - android:priority="280" /> <!-- Allows an application to add voicemails into the system. --> <permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" - android:permissionGroup="android.permission-group.VOICEMAIL" + android:permissionGroup="android.permission-group.PERSONAL_INFO" android:protectionLevel="dangerous" android:label="@string/permlab_addVoicemail" android:description="@string/permdesc_addVoicemail" /> @@ -481,9 +395,7 @@ <permission-group android:name="android.permission-group.LOCATION" android:label="@string/permgrouplab_location" android:icon="@drawable/perm_group_location" - android:description="@string/permgroupdesc_location" - android:permissionGroupFlags="personalInfo" - android:priority="330" /> + android:description="@string/permgroupdesc_location" /> <!-- Allows an application to access fine (e.g., GPS) location --> <permission android:name="android.permission.ACCESS_FINE_LOCATION" @@ -530,9 +442,7 @@ or other related network operations. --> <permission-group android:name="android.permission-group.NETWORK" android:label="@string/permgrouplab_network" - android:icon="@drawable/perm_group_network" - android:description="@string/permgroupdesc_network" - android:priority="270" /> + android:description="@string/permgroupdesc_network" /> <!-- Allows applications to open network sockets. --> <permission android:name="android.permission.INTERNET" @@ -555,13 +465,6 @@ android:description="@string/permdesc_accessWifiState" android:label="@string/permlab_accessWifiState" /> - <!-- Allows applications to change Wi-Fi connectivity state --> - <permission android:name="android.permission.CHANGE_WIFI_STATE" - android:permissionGroup="android.permission-group.NETWORK" - android:protectionLevel="normal" - android:description="@string/permdesc_changeWifiState" - android:label="@string/permlab_changeWifiState" /> - <!-- @hide --> <permission android:name="android.permission.ACCESS_WIMAX_STATE" android:permissionGroup="android.permission-group.NETWORK" @@ -569,55 +472,35 @@ android:description="@string/permdesc_accessWimaxState" android:label="@string/permlab_accessWimaxState" /> - <!-- @hide --> - <permission android:name="android.permission.CHANGE_WIMAX_STATE" - android:permissionGroup="android.permission-group.NETWORK" - android:protectionLevel="dangerous" - android:description="@string/permdesc_changeWimaxState" - android:label="@string/permlab_changeWimaxState" /> - - <!-- ======================================= --> - <!-- Permissions for short range, peripheral networks --> - <!-- ======================================= --> - <eat-comment /> - - <!-- Used for permissions that provide access to other devices through Bluetooth.--> - <permission-group android:name="android.permission-group.BLUETOOTH_NETWORK" - android:label="@string/permgrouplab_bluetoothNetwork" - android:icon="@drawable/perm_group_bluetooth" - android:description="@string/permgroupdesc_bluetoothNetwork" - android:priority="260" /> - - <!-- Allows applications to connect to paired bluetooth devices --> + <!-- Allows applications to connect to paired bluetooth devices --> <permission android:name="android.permission.BLUETOOTH" - android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK" + android:permissionGroup="android.permission-group.NETWORK" android:protectionLevel="dangerous" android:description="@string/permdesc_bluetooth" - android:label="@string/permlab_bluetooth" /> - - <!-- Allows applications to discover and pair bluetooth devices --> - <permission android:name="android.permission.BLUETOOTH_ADMIN" - android:permissionGroup="android.permission-group.BLUETOOTH_NETWORK" - android:protectionLevel="dangerous" - android:description="@string/permdesc_bluetoothAdmin" - android:label="@string/permlab_bluetoothAdmin" /> + android:label="@string/permlab_bluetooth" /> - <!-- Used for permissions that provide access to network services that - are for peripherals and other nearby devices. These networks - generally do not provide IP based networking or internet access.--> - <permission-group android:name="android.permission-group.SHORTRANGE_NETWORK" - android:label="@string/permgrouplab_shortrangeNetwork" - android:icon="@drawable/perm_group_shortrange_network" - android:description="@string/permgroupdesc_shortrangeNetwork" - android:priority="250" /> - <!-- Allows applications to perform I/O operations over NFC --> <permission android:name="android.permission.NFC" - android:permissionGroup="android.permission-group.SHORTRANGE_NETWORK" + android:permissionGroup="android.permission-group.NETWORK" android:protectionLevel="dangerous" android:description="@string/permdesc_nfc" android:label="@string/permlab_nfc" /> + <!-- Allows an application to use SIP service --> + <permission android:name="android.permission.USE_SIP" + android:permissionGroup="android.permission-group.NETWORK" + android:protectionLevel="dangerous" + android:description="@string/permdesc_use_sip" + android:label="@string/permlab_use_sip" /> + + <!-- Allows applications to call into AccountAuthenticators. Only + the system can get this permission. --> + <permission android:name="android.permission.ACCOUNT_MANAGER" + android:permissionGroup="android.permission-group.ACCOUNTS" + android:protectionLevel="signature" + android:description="@string/permdesc_accountManagerService" + android:label="@string/permlab_accountManagerService" /> + <!-- Allows an internal user to use privileged ConnectivityManager APIs. @hide --> @@ -634,10 +517,7 @@ by the Account Manager. --> <permission-group android:name="android.permission-group.ACCOUNTS" android:label="@string/permgrouplab_accounts" - android:icon="@drawable/perm_group_accounts" - android:description="@string/permgroupdesc_accounts" - android:permissionGroupFlags="personalInfo" - android:priority="200" /> + android:description="@string/permgroupdesc_accounts" /> <!-- Allows access to the list of accounts in the Accounts Service --> <permission android:name="android.permission.GET_ACCOUNTS" @@ -668,89 +548,59 @@ android:label="@string/permlab_manageAccounts" android:description="@string/permdesc_manageAccounts" /> - <!-- Allows applications to call into AccountAuthenticators. Only - the system can get this permission. --> - <permission android:name="android.permission.ACCOUNT_MANAGER" - android:permissionGroup="android.permission-group.ACCOUNTS" - android:protectionLevel="signature" - android:description="@string/permdesc_accountManagerService" - android:label="@string/permlab_accountManagerService" /> - <!-- ================================== --> - <!-- Permissions for accessing hardware that may effect battery life--> + <!-- Permissions for accessing hardware --> <!-- ================================== --> <eat-comment /> <!-- Used for permissions that provide direct access to the hardware on - the device that has an effect on battery life. This includes vibrator, - flashlight, etc. --> + the device. This includes audio, the camera, vibrator, etc. --> + <permission-group android:name="android.permission-group.HARDWARE_CONTROLS" + android:label="@string/permgrouplab_hardwareControls" + android:description="@string/permgroupdesc_hardwareControls" /> - <permission-group android:name="android.permission-group.AFFECTS_BATTERY" - android:label="@string/permgrouplab_affectsBattery" - android:icon="@drawable/perm_group_affects_battery" - android:description="@string/permgroupdesc_affectsBattery" - android:priority="180" /> - <!-- Allows applications to enter Wi-Fi Multicast mode --> - <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" - android:permissionGroup="android.permission-group.AFFECTS_BATTERY" - android:protectionLevel="normal" - android:description="@string/permdesc_changeWifiMulticastState" - android:label="@string/permlab_changeWifiMulticastState" /> + <!-- Allows an application to modify global audio settings --> + <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" + android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" + android:protectionLevel="dangerous" + android:label="@string/permlab_modifyAudioSettings" + android:description="@string/permdesc_modifyAudioSettings" /> + + <!-- Allows an application to record audio --> + <permission android:name="android.permission.RECORD_AUDIO" + android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" + android:protectionLevel="dangerous" + android:label="@string/permlab_recordAudio" + android:description="@string/permdesc_recordAudio" /> + + <!-- Required to be able to access the camera device. + <p>This will automatically enforce the <a + href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code + <uses-feature>}</a> manifest element for <em>all</em> camera features. + If you do not require all camera features or can properly operate if a camera + is not available, then you must modify your manifest as appropriate in order to + install on devices that don't support all camera features.</p> --> + <permission android:name="android.permission.CAMERA" + android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" + android:protectionLevel="dangerous" + android:label="@string/permlab_camera" + android:description="@string/permdesc_camera" /> <!-- Allows access to the vibrator --> <permission android:name="android.permission.VIBRATE" - android:permissionGroup="android.permission-group.AFFECTS_BATTERY" + android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" android:protectionLevel="normal" android:label="@string/permlab_vibrate" android:description="@string/permdesc_vibrate" /> <!-- Allows access to the flashlight --> <permission android:name="android.permission.FLASHLIGHT" - android:permissionGroup="android.permission-group.AFFECTS_BATTERY" + android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" android:protectionLevel="normal" android:label="@string/permlab_flashlight" android:description="@string/permdesc_flashlight" /> - <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen - from dimming --> - <permission android:name="android.permission.WAKE_LOCK" - android:permissionGroup="android.permission-group.AFFECTS_BATTERY" - android:protectionLevel="normal" - android:label="@string/permlab_wakeLock" - android:description="@string/permdesc_wakeLock" /> - - <!-- ==================================================== --> - <!-- Permissions related to changing audio settings --> - <!-- ==================================================== --> - - <!-- Used for permissions that provide direct access to speaker settings - the device. --> - <permission-group android:name="android.permission-group.AUDIO_SETTINGS" - android:label="@string/permgrouplab_audioSettings" - android:icon="@drawable/perm_group_audio_settings" - android:description="@string/permgroupdesc_audioSettings" - android:priority="130" /> - - <!-- Allows an application to modify global audio settings --> - <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" - android:permissionGroup="android.permission-group.AUDIO_SETTINGS" - android:protectionLevel="normal" - android:label="@string/permlab_modifyAudioSettings" - android:description="@string/permdesc_modifyAudioSettings" /> - - <!-- ================================== --> - <!-- Permissions for accessing hardware --> - <!-- ================================== --> - <eat-comment /> - - <!-- Used for permissions that provide direct access to the hardware on - the device. This includes audio, the camera, vibrator, etc. --> - <permission-group android:name="android.permission-group.HARDWARE_CONTROLS" - android:label="@string/permgrouplab_hardwareControls" - android:description="@string/permgroupdesc_hardwareControls" - android:priority="260"/> - <!-- Allows an application to manage preferences and permissions for USB devices @hide --> <permission android:name="android.permission.MANAGE_USB" @@ -787,68 +637,18 @@ android:protectionLevel="signature" /> <!-- =========================================== --> - <!-- Permissions associated with audio capture --> - <!-- =========================================== --> - <eat-comment /> - - <!-- Used for permissions that are associated with accessing - microphone audio from the device. Note that phone calls also capture audio - but are in a separate (more visible) permission group. --> - <permission-group android:name="android.permission-group.MICROPHONE" - android:label="@string/permgrouplab_microphone" - android:icon="@drawable/perm_group_microphone" - android:description="@string/permgroupdesc_microphone" - android:permissionGroupFlags="personalInfo" - android:priority="340" /> - - <!-- Allows an application to record audio --> - <permission android:name="android.permission.RECORD_AUDIO" - android:permissionGroup="android.permission-group.MICROPHONE" - android:protectionLevel="dangerous" - android:label="@string/permlab_recordAudio" /> - - - <!-- =========================================== --> - <!-- Permissions associated with camera and image capture --> - <!-- =========================================== --> - <eat-comment /> - - <!-- Used for permissions that are associated with accessing - camera or capturing images/video from the device. --> - <permission-group android:name="android.permission-group.CAMERA" - android:label="@string/permgrouplab_camera" - android:icon="@drawable/perm_group_camera" - android:description="@string/permgroupdesc_camera" - android:permissionGroupFlags="personalInfo" - android:priority="350" /> - - <!-- Required to be able to access the camera device. - <p>This will automatically enforce the <a - href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code - <uses-feature>}</a> manifest element for <em>all</em> camera features. - If you do not require all camera features or can properly operate if a camera - is not available, then you must modify your manifest as appropriate in order to - install on devices that don't support all camera features.</p> --> - <permission android:name="android.permission.CAMERA" - android:permissionGroup="android.permission-group.CAMERA" - android:protectionLevel="dangerous" - android:label="@string/permlab_camera" - android:description="@string/permdesc_camera" /> - - <!-- =========================================== --> <!-- Permissions associated with telephony state --> <!-- =========================================== --> <eat-comment /> <!-- Used for permissions that are associated with accessing and modifyign - telephony state: placing calls, intercepting outgoing calls, reading - and modifying the phone state. --> + telephony state: intercepting outgoing calls, reading + and modifying the phone state. Note that + placing phone calls is not in this group, since that is in the + more important "takin' yer moneys" group. --> <permission-group android:name="android.permission-group.PHONE_CALLS" android:label="@string/permgrouplab_phoneCalls" - android:icon="@drawable/perm_group_phone_calls" - android:description="@string/permgroupdesc_phoneCalls" - android:permissionGroupFlags="personalInfo" - android:priority="370" /> + android:description="@string/permgroupdesc_phoneCalls" /> <!-- Allows an application to monitor, modify, or abort outgoing calls. --> @@ -879,22 +679,6 @@ android:permissionGroup="android.permission-group.PHONE_CALLS" android:protectionLevel="signature|system" /> - <!-- Allows an application to initiate a phone call without going through - the Dialer user interface for the user to confirm the call - being placed. --> - <permission android:name="android.permission.CALL_PHONE" - android:permissionGroup="android.permission-group.PHONE_CALLS" - android:protectionLevel="dangerous" - android:label="@string/permlab_callPhone" - android:description="@string/permdesc_callPhone" /> - - <!-- Allows an application to use SIP service --> - <permission android:name="android.permission.USE_SIP" - android:permissionGroup="android.permission-group.PHONE_CALLS" - android:protectionLevel="dangerous" - android:description="@string/permdesc_use_sip" - android:label="@string/permlab_use_sip" /> - <!-- ================================== --> <!-- Permissions for sdcard interaction --> <!-- ================================== --> @@ -903,10 +687,7 @@ <!-- Group of permissions that are related to SD card access. --> <permission-group android:name="android.permission-group.STORAGE" android:label="@string/permgrouplab_storage" - android:icon="@drawable/perm_group_storage" - android:description="@string/permgroupdesc_storage" - android:permissionGroupFlags="personalInfo" - android:priority="240" /> + android:description="@string/permgroupdesc_storage" /> <!-- Allows an application to read from external storage --> <permission android:name="android.permission.READ_EXTERNAL_STORAGE" @@ -930,44 +711,45 @@ android:description="@string/permdesc_mediaStorageWrite" android:protectionLevel="signature|system" /> - <!-- ================================== --> - <!-- Permissions for screenlock --> - <!-- ================================== --> + <!-- ============================================ --> + <!-- Permissions for low-level system interaction --> + <!-- ============================================ --> <eat-comment /> - <!-- Group of permissions that are related to the screenlock. --> - <permission-group android:name="android.permission-group.SCREENLOCK" - android:label="@string/permgrouplab_storage" - android:icon="@drawable/perm_group_screenlock" - android:permissionGroupFlags="personalInfo" - android:description="@string/permgroupdesc_storage" - android:priority="230" /> + <!-- Group of permissions that are related to system APIs. Many + of these are not permissions the user will be expected to understand, + and such permissions should generally be marked as "normal" protection + level so they don't get displayed. This can also, however, be used + for miscellaneous features that provide access to the operating system, + such as writing the global system settings. --> + <permission-group android:name="android.permission-group.SYSTEM_TOOLS" + android:label="@string/permgrouplab_systemTools" + android:description="@string/permgroupdesc_systemTools" /> - <!-- Allows applications to disable the keyguard --> - <permission android:name="android.permission.DISABLE_KEYGUARD" - android:permissionGroup="android.permission-group.SCREENLOCK" + <!-- Allows an application to read or write the system settings. --> + <permission android:name="android.permission.WRITE_SETTINGS" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="dangerous" - android:description="@string/permdesc_disableKeyguard" - android:label="@string/permlab_disableKeyguard" /> + android:label="@string/permlab_writeSettings" + android:description="@string/permdesc_writeSettings" /> - <!-- ================================== --> - <!-- Permissions to access other installed applications --> - <!-- ================================== --> - <eat-comment /> + <!-- Allows an application to modify the Google service map. --> + <permission android:name="android.permission.WRITE_GSERVICES" + android:protectionLevel="signature|system" + android:label="@string/permlab_writeGservices" + android:description="@string/permdesc_writeGservices" /> - <!-- Group of permissions that are related to the other applications - installed on the system. Examples include such as listing - running apps, or killing background processes. --> - <permission-group android:name="android.permission-group.APP_INFO" - android:label="@string/permgrouplab_appInfo" - android:icon="@drawable/perm_group_app_info" - android:description="@string/permgroupdesc_appInfo" - android:priority="220" /> + <!-- Allows an application to expand or collapse the status bar. --> + <permission android:name="android.permission.EXPAND_STATUS_BAR" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="normal" + android:label="@string/permlab_expandStatusBar" + android:description="@string/permdesc_expandStatusBar" /> <!-- Allows an application to get information about the currently or recently running tasks. --> <permission android:name="android.permission.GET_TASKS" - android:permissionGroup="android.permission-group.APP_INFO" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="dangerous" android:label="@string/permlab_getTasks" android:description="@string/permdesc_getTasks" /> @@ -983,14 +765,14 @@ <!-- Allows an application to change the Z-order of tasks --> <permission android:name="android.permission.REORDER_TASKS" - android:permissionGroup="android.permission-group.APP_INFO" - android:protectionLevel="normal" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" android:label="@string/permlab_reorderTasks" android:description="@string/permdesc_reorderTasks" /> <!-- @hide Allows an application to change to remove/kill tasks --> <permission android:name="android.permission.REMOVE_TASKS" - android:permissionGroup="android.permission-group.APP_INFO" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="signature" android:label="@string/permlab_removeTasks" android:description="@string/permdesc_removeTasks" /> @@ -1003,167 +785,6 @@ android:label="@string/permlab_startAnyActivity" android:description="@string/permdesc_startAnyActivity" /> - <!-- @deprecated The {@link android.app.ActivityManager#restartPackage} - API is no longer supported. --> - <permission android:name="android.permission.RESTART_PACKAGES" - android:permissionGroup="android.permission-group.APP_INFO" - android:protectionLevel="normal" - android:label="@string/permlab_killBackgroundProcesses" - android:description="@string/permdesc_killBackgroundProcesses" /> - - <!-- Allows an application to call - {@link android.app.ActivityManager#killBackgroundProcesses}. --> - <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" - android:permissionGroup="android.permission-group.APP_INFO" - android:protectionLevel="normal" - android:label="@string/permlab_killBackgroundProcesses" - android:description="@string/permdesc_killBackgroundProcesses" /> - - <!-- ================================== --> - <!-- Permissions affecting the display of other applications --> - <!-- ================================== --> - <eat-comment /> - - <!-- Group of permissions that allow manipulation of how - another application displays UI to the user. --> - <permission-group android:name="android.permission-group.DISPLAY" - android:label="@string/permgrouplab_display" - android:icon="@drawable/perm_group_display" - android:description="@string/permgroupdesc_display" - android:priority="190"/> - - <!-- Allows an application to open windows using the type - {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT}, - shown on top of all other applications. Very few applications - should use this permission; these windows are intended for - system-level interaction with the user. --> - <permission android:name="android.permission.SYSTEM_ALERT_WINDOW" - android:permissionGroup="android.permission-group.DISPLAY" - android:protectionLevel="dangerous" - android:label="@string/permlab_systemAlertWindow" - android:description="@string/permdesc_systemAlertWindow" /> - - <!-- ================================== --> - <!-- Permissions affecting the system wallpaper --> - <!-- ================================== --> - <eat-comment /> - - <!-- Group of permissions that allow manipulation of how - another application displays UI to the user. --> - <permission-group android:name="android.permission-group.WALLPAPER" - android:label="@string/permgrouplab_wallpaper" - android:icon="@drawable/perm_group_wallpaper" - android:description="@string/permgroupdesc_wallpaper" - android:priority="150" /> - - <!-- Allows applications to set the wallpaper --> - <permission android:name="android.permission.SET_WALLPAPER" - android:permissionGroup="android.permission-group.WALLPAPER" - android:protectionLevel="normal" - android:label="@string/permlab_setWallpaper" - android:description="@string/permdesc_setWallpaper" /> - - <!-- Allows applications to set the wallpaper hints --> - <permission android:name="android.permission.SET_WALLPAPER_HINTS" - android:permissionGroup="android.permission-group.WALLPAPER" - android:protectionLevel="normal" - android:label="@string/permlab_setWallpaperHints" - android:description="@string/permdesc_setWallpaperHints" /> - - <!-- ============================================ --> - <!-- Permissions for changing the system clock --> - <!-- ============================================ --> - <eat-comment /> - - <!-- Group of permissions that are related to system clock. --> - <permission-group android:name="android.permission-group.SYSTEM_CLOCK" - android:label="@string/permgrouplab_systemClock" - android:icon="@drawable/perm_group_system_clock" - android:description="@string/permgroupdesc_systemClock" - android:priority="140" /> - - <!-- Allows applications to set the system time --> - <permission android:name="android.permission.SET_TIME" - android:protectionLevel="signature|system" - android:label="@string/permlab_setTime" - android:description="@string/permdesc_setTime" /> - - <!-- Allows applications to set the system time zone --> - <permission android:name="android.permission.SET_TIME_ZONE" - android:permissionGroup="android.permission-group.SYSTEM_CLOCK" - android:protectionLevel="normal" - android:label="@string/permlab_setTimeZone" - android:description="@string/permdesc_setTimeZone" /> - - <!-- ==================================================== --> - <!-- Permissions related to changing status bar --> - <!-- ==================================================== --> - - <!-- Used for permissions that change the status bar --> - <permission-group android:name="android.permission-group.STATUS_BAR" - android:label="@string/permgrouplab_statusBar" - android:icon="@drawable/perm_group_status_bar" - android:description="@string/permgroupdesc_statusBar" - android:priority="110" /> - - <!-- Allows an application to expand or collapse the status bar. --> - <permission android:name="android.permission.EXPAND_STATUS_BAR" - android:permissionGroup="android.permission-group.STATUS_BAR" - android:protectionLevel="normal" - android:label="@string/permlab_expandStatusBar" - android:description="@string/permdesc_expandStatusBar" /> - - <!-- ==================================================== --> - <!-- Permissions related to accessing sync settings --> - <!-- ==================================================== --> - - <!-- Used for permissions that access the sync settings or sync - related information. --> - <permission-group android:name="android.permission-group.SYNC_SETTINGS" - android:label="@string/permgrouplab_syncSettings" - android:icon="@drawable/perm_group_sync_settings" - android:description="@string/permgroupdesc_syncSettings" - android:priority="120" /> - - <!-- Allows applications to read the sync settings --> - <permission android:name="android.permission.READ_SYNC_SETTINGS" - android:permissionGroup="android.permission-group.SYNC_SETTINGS" - android:protectionLevel="normal" - android:description="@string/permdesc_readSyncSettings" - android:label="@string/permlab_readSyncSettings" /> - - <!-- Allows applications to write the sync settings --> - <permission android:name="android.permission.WRITE_SYNC_SETTINGS" - android:permissionGroup="android.permission-group.SYNC_SETTINGS" - android:protectionLevel="normal" - android:description="@string/permdesc_writeSyncSettings" - android:label="@string/permlab_writeSyncSettings" /> - - <!-- Allows applications to read the sync stats --> - <permission android:name="android.permission.READ_SYNC_STATS" - android:permissionGroup="android.permission-group.SYNC_SETTINGS" - android:protectionLevel="normal" - android:description="@string/permdesc_readSyncStats" - android:label="@string/permlab_readSyncStats" /> - - - <!-- ============================================ --> - <!-- Permissions for low-level system interaction --> - <!-- ============================================ --> - <eat-comment /> - - <!-- Group of permissions that are related to system APIs. Many - of these are not permissions the user will be expected to understand, - and such permissions should generally be marked as "normal" protection - level so they don't get displayed. This can also, however, be used - for miscellaneous features that provide access to the operating system, - such as writing the global system settings. --> - <permission-group android:name="android.permission-group.SYSTEM_TOOLS" - android:label="@string/permgrouplab_systemTools" - android:icon="@drawable/perm_group_system_tools" - android:description="@string/permgroupdesc_systemTools" - android:priority="100" /> - <!-- @hide Change the screen compatibility mode of applications --> <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" @@ -1175,37 +796,25 @@ as locale. --> <permission android:name="android.permission.CHANGE_CONFIGURATION" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="signature|system|development" + android:protectionLevel="dangerous" android:label="@string/permlab_changeConfiguration" android:description="@string/permdesc_changeConfiguration" /> - <!-- Allows an application to read or write the system settings. --> - <permission android:name="android.permission.WRITE_SETTINGS" + <!-- @deprecated The {@link android.app.ActivityManager#restartPackage} + API is no longer supported. --> + <permission android:name="android.permission.RESTART_PACKAGES" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="normal" - android:label="@string/permlab_writeSettings" - android:description="@string/permdesc_writeSettings" /> - - <!-- Allows an application to modify the Google service map. --> - <permission android:name="android.permission.WRITE_GSERVICES" - android:protectionLevel="signature|system" - android:label="@string/permlab_writeGservices" - android:description="@string/permdesc_writeGservices" /> - - <!-- @hide Change the screen compatibility mode of applications --> - <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY" - android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="signature" - android:label="@string/permlab_setScreenCompatibility" - android:description="@string/permdesc_setScreenCompatibility" /> + android:label="@string/permlab_killBackgroundProcesses" + android:description="@string/permdesc_killBackgroundProcesses" /> - <!-- Allows an application to modify the current configuration, such - as locale. --> - <permission android:name="android.permission.CHANGE_CONFIGURATION" + <!-- Allows an application to call + {@link android.app.ActivityManager#killBackgroundProcesses}. --> + <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="system|signature" - android:label="@string/permlab_changeConfiguration" - android:description="@string/permdesc_changeConfiguration" /> + android:protectionLevel="normal" + android:label="@string/permlab_killBackgroundProcesses" + android:description="@string/permdesc_killBackgroundProcesses" /> <!-- Allows an application to call {@link android.app.ActivityManager#forceStopPackage}. @@ -1224,6 +833,17 @@ android:label="@string/permlab_retrieve_window_content" android:description="@string/permdesc_retrieve_window_content" /> + <!-- Allows an application to open windows using the type + {@link android.view.WindowManager.LayoutParams#TYPE_SYSTEM_ALERT}, + shown on top of all other applications. Very few applications + should use this permission; these windows are intended for + system-level interaction with the user. --> + <permission android:name="android.permission.SYSTEM_ALERT_WINDOW" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:label="@string/permlab_systemAlertWindow" + android:description="@string/permdesc_systemAlertWindow" /> + <!-- Modify the global animation scaling factor. --> <permission android:name="android.permission.SET_ANIMATION_SCALE" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" @@ -1235,7 +855,7 @@ not use. Allow an application to make its activities persistent. --> <permission android:name="android.permission.PERSISTENT_ACTIVITY" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="normal" + android:protectionLevel="dangerous" android:label="@string/permlab_persistentActivity" android:description="@string/permdesc_persistentActivity" /> @@ -1282,17 +902,52 @@ android:label="@string/permlab_broadcastSticky" android:description="@string/permdesc_broadcastSticky" /> + <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen + from dimming --> + <permission android:name="android.permission.WAKE_LOCK" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:label="@string/permlab_wakeLock" + android:description="@string/permdesc_wakeLock" /> + + <!-- Allows applications to set the wallpaper --> + <permission android:name="android.permission.SET_WALLPAPER" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="normal" + android:label="@string/permlab_setWallpaper" + android:description="@string/permdesc_setWallpaper" /> + + <!-- Allows applications to set the wallpaper hints --> + <permission android:name="android.permission.SET_WALLPAPER_HINTS" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="normal" + android:label="@string/permlab_setWallpaperHints" + android:description="@string/permdesc_setWallpaperHints" /> + + <!-- Allows applications to set the system time --> + <permission android:name="android.permission.SET_TIME" + android:protectionLevel="signature|system" + android:label="@string/permlab_setTime" + android:description="@string/permdesc_setTime" /> + + <!-- Allows applications to set the system time zone --> + <permission android:name="android.permission.SET_TIME_ZONE" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:label="@string/permlab_setTimeZone" + android:description="@string/permdesc_setTimeZone" /> + <!-- Allows mounting and unmounting file systems for removable storage. --> <permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="system|signature" + android:protectionLevel="dangerous" android:label="@string/permlab_mount_unmount_filesystems" android:description="@string/permdesc_mount_unmount_filesystems" /> <!-- Allows formatting file systems for removable storage. --> <permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="system|signature" + android:protectionLevel="dangerous" android:label="@string/permlab_mount_format_filesystems" android:description="@string/permdesc_mount_format_filesystems" /> @@ -1336,6 +991,34 @@ android:label="@string/permlab_asec_rename" android:description="@string/permdesc_asec_rename" /> + <!-- Allows applications to disable the keyguard --> + <permission android:name="android.permission.DISABLE_KEYGUARD" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_disableKeyguard" + android:label="@string/permlab_disableKeyguard" /> + + <!-- Allows applications to read the sync settings --> + <permission android:name="android.permission.READ_SYNC_SETTINGS" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="normal" + android:description="@string/permdesc_readSyncSettings" + android:label="@string/permlab_readSyncSettings" /> + + <!-- Allows applications to write the sync settings --> + <permission android:name="android.permission.WRITE_SYNC_SETTINGS" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_writeSyncSettings" + android:label="@string/permlab_writeSyncSettings" /> + + <!-- Allows applications to read the sync stats --> + <permission android:name="android.permission.READ_SYNC_STATS" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="normal" + android:description="@string/permdesc_readSyncStats" + android:label="@string/permlab_readSyncStats" /> + <!-- Allows applications to write the apn settings --> <permission android:name="android.permission.WRITE_APN_SETTINGS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" @@ -1359,10 +1042,41 @@ <!-- Allows applications to change network connectivity state --> <permission android:name="android.permission.CHANGE_NETWORK_STATE" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="normal" + android:protectionLevel="dangerous" android:description="@string/permdesc_changeNetworkState" android:label="@string/permlab_changeNetworkState" /> + <!-- Allows applications to change Wi-Fi connectivity state --> + <permission android:name="android.permission.CHANGE_WIFI_STATE" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_changeWifiState" + android:label="@string/permlab_changeWifiState" /> + + + <!-- @hide --> + <permission android:name="android.permission.CHANGE_WIMAX_STATE" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_changeWimaxState" + android:label="@string/permlab_changeWimaxState" /> + + + + <!-- Allows applications to enter Wi-Fi Multicast mode --> + <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_changeWifiMulticastState" + android:label="@string/permlab_changeWifiMulticastState" /> + + <!-- Allows applications to discover and pair bluetooth devices --> + <permission android:name="android.permission.BLUETOOTH_ADMIN" + android:permissionGroup="android.permission-group.SYSTEM_TOOLS" + android:protectionLevel="dangerous" + android:description="@string/permdesc_bluetoothAdmin" + android:label="@string/permlab_bluetoothAdmin" /> + <!-- Allows an application to clear the caches of all installed applications on the device. --> <permission android:name="android.permission.CLEAR_APP_CACHE" @@ -1389,8 +1103,7 @@ purposes. --> <permission-group android:name="android.permission-group.DEVELOPMENT_TOOLS" android:label="@string/permgrouplab_developmentTools" - android:description="@string/permgroupdesc_developmentTools" - android:priority="310" /> + android:description="@string/permgroupdesc_developmentTools" /> <!-- Allows an application to read or write the secure system settings. --> <permission android:name="android.permission.WRITE_SECURE_SETTINGS" @@ -1983,7 +1696,7 @@ <activity android:name="android.accounts.ChooseTypeAndAccountActivity" android:excludeFromRecents="true" android:exported="true" - android:theme="@android:style/Theme.Holo.DialogWhenLarge.NoActionBar" + android:theme="@android:style/Theme.Holo.Dialog" android:label="@string/choose_account_label" android:process=":ui"> </activity> diff --git a/core/res/res/anim/dock_bottom_enter.xml b/core/res/res/anim/dock_bottom_enter.xml index 74a021b..4f2f753 100644 --- a/core/res/res/anim/dock_bottom_enter.xml +++ b/core/res/res/anim/dock_bottom_enter.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the bottom of the screen is entering. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/decelerate_quad"> + android:interpolator="@android:interpolator/decelerate_cubic"> <translate android:fromYDelta="100%" android:toYDelta="0" - android:duration="@android:integer/config_mediumAnimTime"/> + android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_bottom_exit.xml b/core/res/res/anim/dock_bottom_exit.xml index 213b3d9..afbe24b 100644 --- a/core/res/res/anim/dock_bottom_exit.xml +++ b/core/res/res/anim/dock_bottom_exit.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the bottom of the screen is exiting. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/accelerate_quad"> + android:interpolator="@android:interpolator/accelerate_cubic"> <translate android:fromYDelta="0" android:toYDelta="100%" - android:startOffset="100" android:duration="@android:integer/config_mediumAnimTime"/> + android:startOffset="100" android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_left_enter.xml b/core/res/res/anim/dock_left_enter.xml index 4fce35a..7f5dfd5 100644 --- a/core/res/res/anim/dock_left_enter.xml +++ b/core/res/res/anim/dock_left_enter.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the left of the screen is entering. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/decelerate_quad"> + android:interpolator="@android:interpolator/decelerate_cubic"> <translate android:fromXDelta="-100%" android:toXDelta="0" - android:duration="@android:integer/config_mediumAnimTime"/> + android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_left_exit.xml b/core/res/res/anim/dock_left_exit.xml index bce203d..11cbc0b 100644 --- a/core/res/res/anim/dock_left_exit.xml +++ b/core/res/res/anim/dock_left_exit.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the right of the screen is exiting. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/accelerate_quad"> + android:interpolator="@android:interpolator/accelerate_cubic"> <translate android:fromXDelta="0" android:toXDelta="-100%" - android:startOffset="100" android:duration="@android:integer/config_mediumAnimTime"/> + android:startOffset="100" android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_right_enter.xml b/core/res/res/anim/dock_right_enter.xml index 26b8ad6..a92c7d2 100644 --- a/core/res/res/anim/dock_right_enter.xml +++ b/core/res/res/anim/dock_right_enter.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the right of the screen is entering. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/decelerate_quad"> + android:interpolator="@android:interpolator/decelerate_cubic"> <translate android:fromXDelta="100%" android:toXDelta="0" - android:duration="@android:integer/config_mediumAnimTime"/> + android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_right_exit.xml b/core/res/res/anim/dock_right_exit.xml index 6beda59..80e4dc3 100644 --- a/core/res/res/anim/dock_right_exit.xml +++ b/core/res/res/anim/dock_right_exit.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the right of the screen is exiting. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/accelerate_quad"> + android:interpolator="@android:interpolator/accelerate_cubic"> <translate android:fromXDelta="0" android:toXDelta="100%" - android:startOffset="100" android:duration="@android:integer/config_mediumAnimTime"/> + android:startOffset="100" android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_top_enter.xml b/core/res/res/anim/dock_top_enter.xml index 594b479..1f74e48 100644 --- a/core/res/res/anim/dock_top_enter.xml +++ b/core/res/res/anim/dock_top_enter.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the top of the screen is entering. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/decelerate_quad"> + android:interpolator="@android:interpolator/decelerate_cubic"> <translate android:fromYDelta="-100%" android:toYDelta="0" - android:duration="@android:integer/config_mediumAnimTime"/> + android:duration="250"/> </set> diff --git a/core/res/res/anim/dock_top_exit.xml b/core/res/res/anim/dock_top_exit.xml index b9691f6..4d2fea9 100644 --- a/core/res/res/anim/dock_top_exit.xml +++ b/core/res/res/anim/dock_top_exit.xml @@ -18,7 +18,7 @@ <!-- Animation for when a dock window at the top of the screen is exiting. --> <set xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@android:interpolator/accelerate_quad"> + android:interpolator="@android:interpolator/accelerate_cubic"> <translate android:fromYDelta="0" android:toYDelta="-100%" - android:startOffset="100" android:duration="@android:integer/config_mediumAnimTime"/> + android:startOffset="100" android:duration="250"/> </set> diff --git a/core/res/res/layout/app_permission_item.xml b/core/res/res/layout/app_permission_item.xml index c448bd1..1bd267f 100644 --- a/core/res/res/layout/app_permission_item.xml +++ b/core/res/res/layout/app_permission_item.xml @@ -19,33 +19,37 @@ Contains the group name and a list of permission labels under the group. --> -<view class="android.widget.AppSecurityPermissions$PermissionItemView" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:background="?android:attr/selectableItemBackground"> + android:layout_height="wrap_content"> <ImageView android:id="@+id/perm_icon" - android:layout_width="32dp" - android:layout_height="32dp" - android:layout_marginLeft="16dp" - android:layout_marginRight="8dp" + android:layout_width="30dip" + android:layout_height="30dip" + android:layout_alignParentLeft="true" android:scaleType="fitCenter" /> - <ImageView + + <TextView + android:id="@+id/permission_group" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textStyle="bold" + android:paddingLeft="6dip" + android:layout_toRightOf="@id/perm_icon" android:layout_width="wrap_content" - android:layout_height="match_parent" - android:background="?android:attr/dividerVertical" /> + android:layout_height="wrap_content" /> <TextView - android:id="@+id/perm_name" + android:id="@+id/permission_list" android:textAppearance="?android:attr/textAppearanceSmall" - android:textSize="16sp" - android:layout_marginLeft="8dp" + android:layout_marginTop="-4dip" + android:paddingBottom="8dip" + android:paddingLeft="6dip" + android:layout_below="@id/permission_group" + android:layout_toRightOf="@id/perm_icon" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="top|left" /> + android:layout_height="wrap_content" /> -</view> +</RelativeLayout> diff --git a/core/res/res/layout/app_perms_summary.xml b/core/res/res/layout/app_perms_summary.xml index 509c502..3f99dde 100755 --- a/core/res/res/layout/app_perms_summary.xml +++ b/core/res/res/layout/app_perms_summary.xml @@ -26,17 +26,79 @@ android:id="@+id/no_permissions" android:text="@string/no_permissions" android:textAppearance="?android:attr/textAppearanceMedium" - android:paddingLeft="8dp" - android:paddingRight="8dp" + android:paddingLeft="16dip" + android:paddingRight="12dip" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" /> - <!-- Populated with all permissions. --> + <!-- List view containing list of dangerous permissions categorized by groups. --> <LinearLayout - android:id="@+id/perms_list" + android:id="@+id/dangerous_perms_list" android:orientation="vertical" android:layout_width="match_parent" + android:paddingLeft="16dip" + android:paddingRight="12dip" + android:layout_height="wrap_content" /> + + <!-- Clickable area letting user display additional permissions. --> + <LinearLayout + android:id="@+id/show_more" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:visibility="gone" + android:layout_marginTop="12dip" + android:layout_marginBottom="16dip"> + + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + <LinearLayout + android:orientation="horizontal" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingTop="16dip" + android:paddingBottom="12dip" + android:paddingLeft="16dip" + android:duplicateParentState="true" + android:background="?android:attr/selectableItemBackground"> + + <TextView + android:id="@+id/show_more_text" + android:textAppearance="?android:attr/textAppearanceMedium" + android:duplicateParentState="true" + android:layout_alignTop="@+id/show_more_icon" + android:layout_gravity="center_vertical" + android:paddingLeft="36dip" + android:layout_weight="1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <ImageView + android:id="@id/show_more_icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="12dip" /> + + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1dip" + android:background="?android:attr/listDivider" /> + + </LinearLayout> + + <!-- List view containing list of permissions that aren't dangerous. --> + <LinearLayout + android:id="@+id/non_dangerous_perms_list" + android:orientation="vertical" + android:paddingLeft="16dip" + android:paddingRight="12dip" + android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> diff --git a/core/res/res/layout/choose_selected_account_row.xml b/core/res/res/layout/choose_selected_account_row.xml deleted file mode 100644 index d88750d..0000000 --- a/core/res/res/layout/choose_selected_account_row.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* - * Copyright (C) 2011 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. - */ ---> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:paddingLeft="0dip" - android:paddingRight="0dip" - android:orientation="horizontal" > - - <ImageView android:id="@+id/account_row_icon" - android:layout_width="wrap_content" - android:layout_height="fill_parent" - android:paddingRight="8dip" /> - - <TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/account_row_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceMedium" - android:gravity="center_vertical" - android:minHeight="?android:attr/listPreferredItemHeight" /> - - <ImageView android:id="@+id/account_row_checkmark" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="right" - android:layout_weight="2" - android:paddingRight="8dip" - android:src="@drawable/ic_checkmark_holo_light" /> - -</LinearLayout>
\ No newline at end of file diff --git a/core/res/res/layout/choose_type_and_account.xml b/core/res/res/layout/choose_type_and_account.xml index d7068b7..9d1d284 100644 --- a/core/res/res/layout/choose_type_and_account.xml +++ b/core/res/res/layout/choose_type_and_account.xml @@ -20,53 +20,52 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:paddingLeft="16dip" - android:paddingRight="16dip"> - - <TextView android:id="@+id/title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceMedium" - android:layout_gravity="left" - android:text="@string/choose_account_label" - android:paddingTop="16dip" - android:paddingBottom="16dip" - android:textColor="@android:color/holo_blue_light" - /> - - <View android:layout_height="3dip" - android:layout_width="match_parent" - android:background="#323232"/> + android:orientation="vertical"> + <!-- Customizable description text --> <TextView android:id="@+id/description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|center_vertical" - android:text="@string/choose_account_text" android:paddingTop="16dip" android:paddingBottom="16dip" + android:paddingLeft="16dip" + android:paddingRight="16dip" /> + <!-- List of accounts, with "Add new account" as the last item --> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="false" android:layout_weight="1" - android:scrollbarAlwaysDrawVerticalTrack="true" /> + android:scrollbarAlwaysDrawVerticalTrack="true" + android:choiceMode="singleChoice" /> + <!-- Horizontal divider line --> <View android:layout_height="1dip" android:layout_width="match_parent" android:background="?android:attr/dividerHorizontal" /> - <Button android:id="@+id/addAccount" - style="?android:attr/buttonBarButtonStyle" + <!-- Alert dialog style buttons along the bottom. --> + <LinearLayout android:id="@+id/button_bar" + style="?android:attr/buttonBarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="2dip" - android:layout_marginRight="2dip" - android:textAppearance="?android:attr/textAppearanceMedium" - android:text="@string/add_account_button_label" - /> + android:measureWithLargestChild="true"> + <Button android:id="@android:id/button1" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@android:string/no" + android:onClick="onCancelButtonClicked" /> + <Button android:id="@android:id/button2" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@android:string/yes" + android:onClick="onOkButtonClicked" /> + </LinearLayout> </LinearLayout> diff --git a/core/res/res/layout/notification_action_list.xml b/core/res/res/layout/notification_action_list.xml index fa0a8c8..591c9ea 100644 --- a/core/res/res/layout/notification_action_list.xml +++ b/core/res/res/layout/notification_action_list.xml @@ -23,6 +23,7 @@ android:visibility="gone" android:showDividers="middle" android:divider="?android:attr/listDivider" + android:dividerPadding="12dp" > <!-- actions will be added here --> </LinearLayout> diff --git a/core/res/res/layout/notification_template_base.xml b/core/res/res/layout/notification_template_base.xml index ed680a9..47bbbde 100644 --- a/core/res/res/layout/notification_template_base.xml +++ b/core/res/res/layout/notification_template_base.xml @@ -36,8 +36,7 @@ android:layout_marginLeft="@dimen/notification_large_icon_width" android:minHeight="@dimen/notification_large_icon_height" android:orientation="vertical" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingRight="8dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:gravity="top" @@ -47,6 +46,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="6dp" + android:layout_marginLeft="8dp" android:orientation="horizontal" > <TextView android:id="@+id/title" @@ -81,6 +81,7 @@ android:layout_height="wrap_content" android:layout_marginTop="-2dp" android:layout_marginBottom="-2dp" + android:layout_marginLeft="8dp" android:singleLine="true" android:fadingEdge="horizontal" android:ellipsize="marquee" @@ -90,24 +91,17 @@ android:id="@android:id/progress" android:layout_width="match_parent" android:layout_height="12dp" + android:layout_marginLeft="8dp" android:visibility="gone" style="?android:attr/progressBarStyleHorizontal" /> - <TextView android:id="@+id/overflow_title" - android:textAppearance="@style/TextAppearance.StatusBar.EventContent" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - android:visibility="gone" - android:layout_weight="1" - /> <LinearLayout android:id="@+id/line3" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" + android:gravity="center_vertical" + android:layout_marginLeft="8dp" > <TextView android:id="@+id/text" android:textAppearance="@style/TextAppearance.StatusBar.EventContent" @@ -130,14 +124,14 @@ android:paddingLeft="8dp" /> <ImageView android:id="@+id/right_icon" - android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_width="16dp" + android:layout_height="16dp" android:layout_gravity="center" android:layout_weight="0" + android:layout_marginLeft="8dp" android:scaleType="centerInside" - android:paddingLeft="8dp" android:visibility="gone" - android:drawableAlpha="180" + android:drawableAlpha="153" /> </LinearLayout> </LinearLayout> diff --git a/core/res/res/layout/notification_template_big_base.xml b/core/res/res/layout/notification_template_big_base.xml index f2c204f..69f0a24 100644 --- a/core/res/res/layout/notification_template_big_base.xml +++ b/core/res/res/layout/notification_template_big_base.xml @@ -33,19 +33,16 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="fill_vertical" - android:layout_marginLeft="@dimen/notification_large_icon_width" android:minHeight="@dimen/notification_large_icon_height" android:orientation="vertical" - android:paddingLeft="12dp" - android:paddingRight="12dp" - android:paddingTop="2dp" - android:paddingBottom="2dp" android:gravity="top" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/notification_large_icon_width" android:minHeight="@dimen/notification_large_icon_height" + android:paddingTop="2dp" android:orientation="vertical" > <LinearLayout @@ -53,6 +50,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="6dp" + android:layout_marginRight="8dp" + android:layout_marginLeft="8dp" android:orientation="horizontal" > <TextView android:id="@+id/title" @@ -87,6 +86,8 @@ android:layout_height="wrap_content" android:layout_marginTop="-2dp" android:layout_marginBottom="-2dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:fadingEdge="horizontal" android:ellipsize="marquee" @@ -96,6 +97,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="false" android:visibility="gone" /> @@ -103,7 +106,10 @@ android:id="@+id/line3" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:orientation="horizontal" + android:gravity="center_vertical" > <TextView android:id="@+id/text" android:textAppearance="@style/TextAppearance.StatusBar.EventContent" @@ -126,29 +132,38 @@ android:paddingLeft="8dp" /> <ImageView android:id="@+id/right_icon" - android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_width="16dp" + android:layout_height="16dp" android:layout_gravity="center" android:layout_weight="0" + android:layout_marginLeft="8dp" android:scaleType="centerInside" - android:paddingLeft="8dp" android:visibility="gone" - android:drawableAlpha="180" + android:drawableAlpha="153" /> </LinearLayout> <ProgressBar android:id="@android:id/progress" android:layout_width="match_parent" android:layout_height="12dp" + android:layout_marginBottom="8dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:visibility="gone" style="?android:attr/progressBarStyleHorizontal" /> </LinearLayout> + <ImageView + android:layout_width="match_parent" + android:layout_height="1px" + android:id="@+id/action_divider" + android:visibility="gone" + android:background="?android:attr/dividerHorizontal" /> <include layout="@layout/notification_action_list" - android:id="@+id/actions" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/notification_large_icon_width" /> </LinearLayout> </FrameLayout> diff --git a/core/res/res/layout/notification_template_big_picture.xml b/core/res/res/layout/notification_template_big_picture.xml index 077616e..ecb3616 100644 --- a/core/res/res/layout/notification_template_big_picture.xml +++ b/core/res/res/layout/notification_template_big_picture.xml @@ -53,7 +53,6 @@ <include layout="@layout/notification_action_list" android:id="@+id/actions" - android:layout_marginLeft="8dp" android:layout_gravity="bottom" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/core/res/res/layout/notification_template_big_text.xml b/core/res/res/layout/notification_template_big_text.xml index 304f2b5..b86177e 100644 --- a/core/res/res/layout/notification_template_big_text.xml +++ b/core/res/res/layout/notification_template_big_text.xml @@ -34,8 +34,6 @@ android:layout_gravity="fill_vertical" android:layout_marginLeft="@dimen/notification_large_icon_width" android:orientation="vertical" - android:paddingLeft="12dp" - android:paddingRight="12dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:gravity="top" @@ -44,6 +42,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:layout_weight="1" > <LinearLayout @@ -87,6 +87,7 @@ android:layout_height="wrap_content" android:layout_marginTop="-2dp" android:layout_marginBottom="-2dp" + android:layout_marginRight="8dp" android:singleLine="true" android:fadingEdge="horizontal" android:ellipsize="marquee" @@ -97,6 +98,8 @@ android:id="@android:id/progress" android:layout_width="match_parent" android:layout_height="12dp" + android:layout_marginBottom="8dp" + android:layout_marginRight="8dp" android:visibility="gone" android:layout_weight="0" style="?android:attr/progressBarStyleHorizontal" @@ -105,7 +108,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" - android:layout_marginBottom="2dp" + android:layout_marginBottom="8dp" + android:layout_marginRight="8dp" android:singleLine="false" android:visibility="gone" android:maxLines="8" @@ -113,6 +117,13 @@ android:layout_weight="1" /> </LinearLayout> + <ImageView + android:layout_width="match_parent" + android:layout_height="1dip" + android:layout_marginTop="-1px" + android:id="@+id/action_divider" + android:visibility="gone" + android:background="?android:attr/dividerHorizontal" /> <include layout="@layout/notification_action_list" android:layout_width="match_parent" @@ -120,22 +131,23 @@ android:visibility="gone" android:layout_weight="1" /> - <TextView android:id="@+id/overflow_title" - android:textAppearance="@style/TextAppearance.StatusBar.EventContent" + <ImageView android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - android:visibility="gone" - android:layout_weight="0" - /> + android:layout_height="1px" + android:id="@+id/overflow_divider" + android:layout_marginBottom="8dp" + android:visibility="visible" + android:background="?android:attr/dividerHorizontal" /> <LinearLayout android:id="@+id/line3" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="8dp" + android:layout_marginBottom="8dp" + android:layout_marginRight="8dp" android:orientation="horizontal" android:layout_weight="0" + android:gravity="center_vertical" > <TextView android:id="@+id/text" android:textAppearance="@style/TextAppearance.StatusBar.EventContent" @@ -158,14 +170,14 @@ android:paddingLeft="8dp" /> <ImageView android:id="@+id/right_icon" - android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_width="16dp" + android:layout_height="16dp" android:layout_gravity="center" android:layout_weight="0" + android:layout_marginLeft="8dp" android:scaleType="centerInside" - android:paddingLeft="8dp" android:visibility="gone" - android:drawableAlpha="180" + android:drawableAlpha="153" /> </LinearLayout> </LinearLayout> diff --git a/core/res/res/layout/notification_template_inbox.xml b/core/res/res/layout/notification_template_inbox.xml index 121a81c..e9a3686 100644 --- a/core/res/res/layout/notification_template_inbox.xml +++ b/core/res/res/layout/notification_template_inbox.xml @@ -36,8 +36,6 @@ android:layout_marginLeft="@dimen/notification_large_icon_width" android:minHeight="@dimen/notification_large_icon_height" android:orientation="vertical" - android:paddingLeft="12dp" - android:paddingRight="12dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:gravity="top" @@ -46,6 +44,8 @@ android:id="@+id/line1" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:paddingTop="6dp" android:orientation="horizontal" android:layout_weight="0" @@ -82,6 +82,8 @@ android:layout_height="wrap_content" android:layout_marginTop="-2dp" android:layout_marginBottom="-2dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:fadingEdge="horizontal" android:ellipsize="marquee" @@ -92,6 +94,8 @@ android:id="@android:id/progress" android:layout_width="match_parent" android:layout_height="12dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:visibility="gone" android:layout_weight="0" style="?android:attr/progressBarStyleHorizontal" @@ -100,6 +104,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -109,6 +115,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -118,6 +126,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -127,6 +137,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -136,6 +148,7 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -145,6 +158,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -154,6 +169,8 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" @@ -163,35 +180,44 @@ android:textAppearance="@style/TextAppearance.StatusBar.EventContent" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_marginLeft="8dp" + android:layout_marginRight="8dp" android:singleLine="true" android:ellipsize="end" android:visibility="gone" android:layout_weight="1" android:text="@android:string/ellipsis" /> + <ImageView + android:layout_width="match_parent" + android:layout_height="1px" + android:id="@+id/overflow_divider" + android:layout_marginTop="8dp" + android:visibility="visible" + android:background="?android:attr/dividerHorizontal" /> <include layout="@layout/notification_action_list" - android:id="@+id/actions" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" /> - <TextView android:id="@+id/overflow_title" - android:textAppearance="@style/TextAppearance.StatusBar.EventContent" + <ImageView android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" + android:layout_height="1px" + android:id="@+id/action_divider" android:visibility="gone" - android:layout_weight="0" - /> + android:background="?android:attr/dividerHorizontal" /><!-- note: divider below actions --> <LinearLayout android:id="@+id/line3" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_marginLeft="8dp" + android:layout_marginBottom="8dp" + android:layout_marginRight="8dp" android:orientation="horizontal" android:layout_weight="0" + android:gravity="center_vertical" > <TextView android:id="@+id/text" android:textAppearance="@style/TextAppearance.StatusBar.EventContent" @@ -214,14 +240,14 @@ android:paddingLeft="8dp" /> <ImageView android:id="@+id/right_icon" - android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_width="16dp" + android:layout_height="16dp" android:layout_gravity="center" android:layout_weight="0" + android:layout_marginLeft="8dp" android:scaleType="centerInside" - android:paddingLeft="8dp" android:visibility="gone" - android:drawableAlpha="180" + android:drawableAlpha="153" /> </LinearLayout> </LinearLayout> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index fd32685..7c9351c 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Maak navraag skoon"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Dien navraag in"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Stemsoektog"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Wil jy Ontek-met-raak aktiveer?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wil Ontdek-met-raak aktiveer. Wanneer Ontek-met-raak aangeskakel is, kan jy beskrywings van wat onder jou vinger is hoor of sien, of jy kan gebare uitvoer om interaksie met die tablet te hê."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wil Ontdek-met-raak aktiveer. Wanneer Ontek-met-raak aangeskakel is, kan jy beskrywings van wat onder jou vinger is hoor of sien, of jy kan gebare uitvoer om interaksie met die foon te hê ."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 maand gelede"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Voor 1 maand gelede"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Stel invoermetodes op"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fisiese sleutelbord"</string> <string name="hardware" msgid="7517821086888990278">"Hardeware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Kies sleutelborduitleg"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Raak om \'n sleutelborduitleg te kies."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidate"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Doen vir eers niks nie"</string> <string name="choose_account_label" msgid="5655203089746423927">"Kies \'n rekening"</string> <string name="add_account_label" msgid="2935267344849993553">"Voeg \'n rekening by"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Watter rekening wil jy gebruik?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Voeg rekening by"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Vermeerder"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Verminder"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Begin webblaaier?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aanvaar oproep?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altyd"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Net een keer"</string> </resources> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index fb11af3..18cbf43 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"ለአሁን ምንም አታድርግ"</string> <string name="choose_account_label" msgid="5655203089746423927">"መለያ ምረጥ"</string> <string name="add_account_label" msgid="2935267344849993553">"መለያ አክል"</string> - <string name="choose_account_text" msgid="6303348737197849675">"የትኛውን መለያ መጠቀም ትፈልጋለህ?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"መለያ አክል"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"ጨምር"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"ቀንስ"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 7798b0a..171b5d9 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"محو طلب البحث"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"إرسال طلب البحث"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"البحث الصوتي"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"هل تريد تمكين ميزة Explore by Touch؟"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تمكين ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الجهاز اللوحي."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تمكين ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الهاتف."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"قبل شهر واحد"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل شهر واحد"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"إعداد أسلوب الإدخال"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"لوحة مفاتيح فعلية"</string> <string name="hardware" msgid="7517821086888990278">"أجهزة"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"تحديد تخطيط لوحة مفاتيح"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"المس لتحديد تخطيط لوحة مفاتيح."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789 أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"العناصر المرشحة"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"عدم تنفيذ أي شيء الآن"</string> <string name="choose_account_label" msgid="5655203089746423927">"اختيار حساب"</string> <string name="add_account_label" msgid="2935267344849993553">"إضافة حساب"</string> - <string name="choose_account_text" msgid="6303348737197849675">"ما الحساب الذي تريد استخدامه؟"</string> <string name="add_account_button_label" msgid="3611982894853435874">"إضافة حساب"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"زيادة"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"تقليل"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"تشغيل المتصفح؟"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"هل تريد قبول المكالمة؟"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"دومًا"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"مرة واحدة فقط"</string> </resources> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 4068610..62c1723 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Выдаліць запыт"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Адправіць запыт"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Галасавы пошук"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Уключыць функцыю Explore by Touch?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Служба доступу <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> запытвае ўключэнне функцыі Explore by Touch. Калі функцыя Explore by Touch будзе ўключаная, вы зможаце пачуць або ўбачыць апісанні таго, што знаходзіцца пад вашым пальцам, або выконваць жэсты для ўзаемадзеяння з планшэтам."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Служба доступу <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> запытвае ўключэнне функцыі Explore by Touch. Калі функцыя Explore by Touch будзе ўключаная, вы зможаце пачуць або ўбачыць апісанні таго, што знаходзіцца пад вашым пальцам, або выконваць жэсты для ўзаемадзеяння з тэлефонам."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 месяц таму"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Раней, чым 1 месяц таму"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Наладзіць метады ўводу"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Фізічная клавіятура"</string> <string name="hardware" msgid="7517821086888990278">"Апар. ср."</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Выбраць раскладку клавіятуры"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Націсніце, каб выбраць раскладку клавіятуры."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШ\'ЫЬЭЮЯ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"кандыдат."</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Нічога зараз не рабіць"</string> <string name="choose_account_label" msgid="5655203089746423927">"Выберыце ўліковы запіс"</string> <string name="add_account_label" msgid="2935267344849993553">"Дадаць уліковы запіс"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Які ўліковы запіс вы жадаеце выкарыстоўваць?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Дадаць уліковы запіс"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Павялічыць"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Паменшыць"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Заўсёды"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Толькі адзін раз"</string> </resources> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 086d33a..709cc1b 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1239,7 +1239,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Да не се прави нищо засега"</string> <string name="choose_account_label" msgid="5655203089746423927">"Избор на профил"</string> <string name="add_account_label" msgid="2935267344849993553">"Добавяне на профил"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Кой профил искате да използвате?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Добавяне на профил"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Увеличаване"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Намаляване"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 4190bdb..d02008b 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"No facis res per ara"</string> <string name="choose_account_label" msgid="5655203089746423927">"Tria un compte"</string> <string name="add_account_label" msgid="2935267344849993553">"Addició d\'un compte"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Quin compte vols utilitzar?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Afegeix un compte"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Incrementa"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Redueix"</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index ad25a3e..e33bda8 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Smazat dotaz"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Odeslat dotaz"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Hlasové vyhledávání"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Povolit funkci Prozkoumání dotykem?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Služba <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> požaduje povolení funkce Prozkoumání dotykem. Pokud je funkce Prozkoumání dotykem zapnuta, můžete slyšet nebo vidět popisy objektů pod vaším prstem nebo ovládat tablet gesty."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Služba <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> požaduje povolení funkce Prozkoumání dotykem. Pokud je funkce Prozkoumání dotykem zapnuta, můžete slyšet nebo vidět popisy objektů pod vaším prstem nebo ovládat telefon gesty."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"před 1 měsícem"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Déle než před 1 měsícem"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Nastavit metody zadávání"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fyzická klávesnice"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Výběr rozložení klávesnice"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dotykem vyberte rozložení klávesnice."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AÁBCČDĎEÉĚFGHCHIÍJKLMNŇOÓPQRŘSŠTŤUÚVWXYÝZŽ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidáti"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Zatím nic neprovádět."</string> <string name="choose_account_label" msgid="5655203089746423927">"Vybrat účet"</string> <string name="add_account_label" msgid="2935267344849993553">"Přidat účet"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Který účet chcete použít?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Přidat účet"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Zvýšit"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Snížit"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Spustit prohlížeč?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Přijmout hovor?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Pouze jednou"</string> </resources> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 9dc89a0..1704fe1 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Ryd forespørgslen"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Indsend forespørgslen"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Stemmesøgning"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vil du aktivere Udforsk ved berøring?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er tændt, kan du høre eller se beskrivelser af, hvad der er under din finger eller udføre bevægelser for at interagere med tabletten."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ønsker at aktivere Udforsk ved berøring. Når Udforsk ved berøring er aktiveret, kan du høre eller se beskrivelser af, hvad der er under din finger, eller udføre bevægelser for at interagere med telefonen."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"For 1 måned siden"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Før for 1 måned siden"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Konfigurer inputmetoder"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fysisk tastatur"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Vælg tastaturlayout"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tryk for at vælge et tastaturlayout."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Gør ikke noget lige nu."</string> <string name="choose_account_label" msgid="5655203089746423927">"Vælg en konto"</string> <string name="add_account_label" msgid="2935267344849993553">"Tilføj en konto"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Hvilken konto vil du bruge?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Tilføj konto"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Højere"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Lavere"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte browseren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare opkaldet?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altid"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Kun én gang"</string> </resources> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index ec8ca3e..b76da67 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Anfrage löschen"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Anfrage senden"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Sprachsuche"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"\"Tippen & Entdecken\" aktivieren?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> fordert die Aktivierung von \"Tippen & Entdecken\". Wenn \"Tippen & Entdecken\" aktiviert ist, können Sie Beschreibungen dessen hören oder sehen, was sich unter ihren Fingern befindet, oder Gesten ausführen, um mit dem Tablet zu interagieren."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> fordert die Aktivierung von \"Tippen & Entdecken\". Wenn \"Tippen & Entdecken\" aktiviert ist, können Sie Beschreibungen dessen hören oder sehen, was sich unter ihren Fingern befindet, oder Gesten ausführen, um mit dem Telefon zu interagieren."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Vor 1 Monat"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vor mehr als 1 Monat"</string> <plurals name="num_seconds_ago"> @@ -1009,7 +1006,7 @@ <string name="smv_application" msgid="3307209192155442829">"Die App <xliff:g id="APPLICATION">%1$s</xliff:g> (Prozess <xliff:g id="PROCESS">%2$s</xliff:g>) hat gegen ihre selbsterzwungene StrictMode-Richtlinie verstoßen."</string> <string name="smv_process" msgid="5120397012047462446">"Der Prozess <xliff:g id="PROCESS">%1$s</xliff:g> hat gegen seine selbsterzwungene StrictMode-Richtlinie verstoßen."</string> <string name="android_upgrading_title" msgid="1584192285441405746">"Android wird aktualisiert..."</string> - <string name="android_upgrading_apk" msgid="7904042682111526169">"App <xliff:g id="NUMBER_0">%1$d</xliff:g> von <xliff:g id="NUMBER_1">%2$d</xliff:g> wird optimiert."</string> + <string name="android_upgrading_apk" msgid="7904042682111526169">"App <xliff:g id="NUMBER_0">%1$d</xliff:g> von <xliff:g id="NUMBER_1">%2$d</xliff:g> wird optimiert..."</string> <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Apps werden gestartet."</string> <string name="android_upgrading_complete" msgid="1405954754112999229">"Start wird abgeschlossen..."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> läuft"</string> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Eingabemethoden einrichten"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Physische Tastatur"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Tastaturlayout auswählen"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Zum Auswählen eines Tastaturlayouts berühren"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"Kandidaten"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Im Moment nichts unternehmen"</string> <string name="choose_account_label" msgid="5655203089746423927">"Konto auswählen"</string> <string name="add_account_label" msgid="2935267344849993553">"Konto hinzufügen"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Welches Konto möchten Sie verwenden?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Konto hinzufügen"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Verlängern"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Verringern"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Anruf annehmen?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Immer"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Nur einmal"</string> </resources> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 8cde21f..53a64fc 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Να μην γίνει καμία ενέργεια τώρα."</string> <string name="choose_account_label" msgid="5655203089746423927">"Επιλέξτε λογαριασμό"</string> <string name="add_account_label" msgid="2935267344849993553">"Προσθήκη λογαριασμού"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Ποιον λογαριασμό θέλετε να χρησιμοποιήσετε;"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Προσθήκη λογαριασμού"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Αύξηση"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Μείωση"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 4ad7daf..18a6827 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Do nothing for now"</string> <string name="choose_account_label" msgid="5655203089746423927">"Choose an account"</string> <string name="add_account_label" msgid="2935267344849993553">"Add an account"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Which account do you want to use?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Add account"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Increase"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Decrease"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 64429e9..1015e65 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Eliminar la consulta"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Búsqueda por voz"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"¿Habilitar exploración táctil?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quiere habilitar la exploración táctil. Cuando esta función esté activada, podrás escuchar o ver descripciones del contenido seleccionado o usar gestos para interactuar con la tableta."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quiere habilitar la exploración táctil. Cuando esta función esté activada, podrás escuchar o ver descripciones del contenido seleccionado o usar gestos para interactuar con el teléfono."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"hace 1 mes"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Anterior a 1 mes atrás"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Configurar métodos de introducción"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Teclado físico"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecciona un diseño de teclado"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toca para seleccionar un diseño de teclado."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"No hacer nada por ahora"</string> <string name="choose_account_label" msgid="5655203089746423927">"Seleccionar una cuenta"</string> <string name="add_account_label" msgid="2935267344849993553">"Agregar una cuenta"</string> - <string name="choose_account_text" msgid="6303348737197849675">"¿Qué cuenta quieres usar?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Agregar una cuenta"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Reducir"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"¿Deseas iniciar el navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"¿Aceptar la llamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Siempre"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una vez"</string> </resources> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index f5d8795..043ee30 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -662,7 +662,7 @@ <string name="phoneTypeWorkPager" msgid="649938731231157056">"Busca del trabajo"</string> <string name="phoneTypeAssistant" msgid="5596772636128562884">"Asistente"</string> <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string> - <string name="eventTypeCustom" msgid="7837586198458073404">"Personalizados"</string> + <string name="eventTypeCustom" msgid="7837586198458073404">"Personalizado"</string> <string name="eventTypeBirthday" msgid="2813379844211390740">"Cumpleaños"</string> <string name="eventTypeAnniversary" msgid="3876779744518284000">"Aniversario"</string> <string name="eventTypeOther" msgid="7388178939010143077">"Otros"</string> @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"No hacer nada por ahora"</string> <string name="choose_account_label" msgid="5655203089746423927">"Seleccionar una cuenta"</string> <string name="add_account_label" msgid="2935267344849993553">"Añadir una cuenta"</string> - <string name="choose_account_text" msgid="6303348737197849675">"¿Qué cuenta quieres usar?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Añadir cuenta"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Reducir"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index eaa7c94..89fc8f4 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Tühjenda päring"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Päringu esitamine"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Häälotsing"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Kas lubada puudutusega uurimine?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> soovib lubada puudutusega uurimise. Kui puudutusega uurimine on sisse lülitatud, kuulete või näete kirjeldusi asjade kohta, mis on teie sõrme all, või saate suhelda tahvelarvutiga liigutuste abil."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> soovib lubada puudutusega uurimise. Kui puudutusega uurimine on sisse lülitatud, kuulete või näete kirjeldusi asjade kohta, mis on teie sõrme all, või saate suhelda telefoniga liigutuste abil."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 kuu tagasi"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Varem kui 1 kuu tagasi"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Seadista sisestusmeetodid"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Füüsiline klaviatuur"</string> <string name="hardware" msgid="7517821086888990278">"Riistvara"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klaviatuuri paigutuse valimine"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Puudutage klaviatuuri paigutuse valimiseks."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidaadid"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Ära tee praegu midagi"</string> <string name="choose_account_label" msgid="5655203089746423927">"Konto valimine"</string> <string name="add_account_label" msgid="2935267344849993553">"Konto lisamine"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Millist kontot soovite kasutada?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Lisa konto"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Suurendamine"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Vähendamine"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alati"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Ainult üks kord"</string> </resources> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 393ba0c..eaf7849 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"پاک کردن عبارت جستجو"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"ارسال عبارت جستجو"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"جستجوی صوتی"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"فعال کردن «کاوش با لمس»؟"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> میخواهد «کاوش با لمس» را فعال کند. وقتی «کاوش با لمس» فعال است، میتوانید توضیحاتی را برای آنچه که زیر انگشت شما است مشاهده کرده یا بشنوید یا برای استفاده از رایانه لوحی از حرکات اشاره استفاده کنید."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> میخواهد «کاوش با لمس» را فعال کند. وقتی «کاوش با لمس» فعال است، میتوانید توضیحاتی را برای آنچه که زیر انگشت شما است مشاهده کرده یا بشنوید یا برای استفاده از تلفن خود از حرکات اشاره استفاده کنید."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 ماه قبل"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل از 1 ماه گذشته"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"تنظیم روشهای ورودی"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"صفحه کلید فیزیکی"</string> <string name="hardware" msgid="7517821086888990278">"سختافزار"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"انتخاب طرحبندی صفحه کلید"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"برای انتخاب یک طرحبندی صفحه کلید لمس کنید…"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"داوطلبین"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"اکنون کاری انجام نشود"</string> <string name="choose_account_label" msgid="5655203089746423927">"انتخاب حساب"</string> <string name="add_account_label" msgid="2935267344849993553">"افزودن یک حساب"</string> - <string name="choose_account_text" msgid="6303348737197849675">"کدام حساب را میخواهید استفاده کنید؟"</string> <string name="add_account_button_label" msgid="3611982894853435874">"افزودن حساب"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"افزایش"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"کاهش"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"مرورگر راهاندازی شود؟"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"تماس را میپذیرید؟"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"همیشه"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"فقط یک بار"</string> </resources> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 9e0e8e6..d3d8e4f 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Tyhjennä kysely"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Lähetä kysely"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Puhehaku"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Otetaanko Tutki koskettamalla käyttöön?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> haluaa ottaa Tutki koskettamalla -ominaisuuden käyttöön. Kun Tutki koskettamalla on käytössä, näet tai kuulet kuvauksen sormen alla olevista kohteista ja voit käyttää tablet-laitetta sormieleiden avulla."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> haluaa ottaa Tutustu koskettamalla -ominaisuuden käyttöön. Kun Tutustu koskettamalla on käytössä, näet tai kuulet kuvauksen sormen alla olevista kohteista ja voit käyttää puhelinta sormieleiden avulla."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"kuukausi sitten"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Yli kuukausi sitten"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Määritä syöttötavat"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fyysinen näppäimistö"</string> <string name="hardware" msgid="7517821086888990278">"Laitteisto"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Valitse näppäimistöasettelu"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Kosketa ja valitse näppäimistöasettelu."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidaatit"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Älä tee mitään"</string> <string name="choose_account_label" msgid="5655203089746423927">"Valitse tili"</string> <string name="add_account_label" msgid="2935267344849993553">"Lisää tili"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Mitä tiliä haluat käyttää?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Lisää tili"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Lisää"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Vähennä"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Käynnistetäänkö selain?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vastataanko puheluun?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Aina"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Vain kerran"</string> </resources> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index f757e27..0d96e6d 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Effacer la requête"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Envoyer la requête"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Recherche vocale"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Activer \"Explorer au toucher\" ?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> souhaite activer la fonctionnalité \"Explorer au toucher\". Lorsque celle-ci est activée, vous pouvez entendre ou voir les descriptions des éléments que vous sélectionnez, ou bien interagir avec la tablette en effectuant certains gestes."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> souhaite activer la fonctionnalité \"Explorer au toucher\". Lorsque celle-ci est activée, vous pouvez entendre ou voir les descriptions des éléments que vous sélectionnez, ou bien interagir avec le téléphone en effectuant certains gestes."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Il y a 1 mois"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Il y a plus d\'un mois"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Configurer les modes de saisie"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Clavier physique"</string> <string name="hardware" msgid="7517821086888990278">"Matériel"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Sélectionnez la disposition du clavier"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Appuyez ici pour sélectionner une disposition de clavier."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidats"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Ne rien faire pour l\'instant"</string> <string name="choose_account_label" msgid="5655203089746423927">"Sélectionnez un compte"</string> <string name="add_account_label" msgid="2935267344849993553">"Ajouter un compte"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Quel compte souhaitez-vous utiliser ?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Ajouter un compte"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Augmenter"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Diminuer"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancer le navigateur ?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prendre l\'appel ?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Toujours"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Une seule fois"</string> </resources> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 47656b6..b0fd087 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"क्वेरी साफ़ करें"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"क्वेरी सबमिट करें"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"ध्वनि खोज"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"स्पर्श के द्वारा अन्वेषण करें सक्षम करें?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> स्पर्श के द्वारा अन्वेषण करें सक्षम करना चाहती है. स्पर्श के द्वारा अन्वेष करें चालू होने पर, आप अपनी अंगुली के नीचे क्या है उसका विवरण सुन सकते हैं या देख सकते हैं या टेबलेट से संवाद करने के लिए जेस्चर निष्पादित कर सकते हैं."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> स्पर्श के द्वारा अन्वेषण करें सक्षम करना चाहती है. स्पर्श के द्वारा अन्वेष करें चालू होने पर, आप अपनी अंगुली के नीचे क्या है उसका विवरण सुन सकते हैं या देख सकते हैं या फ़ोन से संवाद करने के लिए जेस्चर निष्पादित कर सकते हैं."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 माह पहले"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 माह से पहले"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"इनपुट पद्धतियां सेट करें"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"भौतिक कीबोर्ड"</string> <string name="hardware" msgid="7517821086888990278">"हार्डवेयर"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"कीबोर्ड लेआउट का चयन करें"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"कीबोर्ड लेआउट का चयन करने के लिए स्पर्श करें."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"उम्मीदवार"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"फिलहाल कुछ न करें"</string> <string name="choose_account_label" msgid="5655203089746423927">"कोई खाता चुनें"</string> <string name="add_account_label" msgid="2935267344849993553">"कोई खाता जोड़ें"</string> - <string name="choose_account_text" msgid="6303348737197849675">"आप कौन-सा खाता उपयोग करना चाहते हैं?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"खाता जोड़ें"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"बढ़ाएं"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"कम करें"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउज़र लॉन्च करें?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"कॉल स्वीकार करें?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"हमेशा"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"केवल एक बार"</string> </resources> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 98f736b..edb0032 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Izbriši upit"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Pošalji upit"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Glasovno pretraživanje"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Omogućiti Istraživanje dodirom?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Usluga <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> želi omogućiti značajku Istraživanje dodirom. Kad je značajka Istraživanje dodirom uključena, možete čuti ili vidjeti opise onoga što je pod vašim prstom ili izvršiti pokrete za interakciju s tabletnim računalom."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Usluga <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> želi omogućiti značajku Istraživanje dodirom. Kad je značajka Istraživanje dodirom uključena, možete čuti ili vidjeti opise onoga što je pod vašim prstom ili izvršiti pokrete za interakciju s telefonom."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Prije 1 mjesec"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Prije 1 mjesec"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Postavljanje načina unosa"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fizička tipkovnica"</string> <string name="hardware" msgid="7517821086888990278">"Hardver"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Odaberite izgled tipkovnice"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dodirnite za odabir izgleda tipkovnice."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidati"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Za sada nemoj ništa učiniti"</string> <string name="choose_account_label" msgid="5655203089746423927">"Odaberite račun"</string> <string name="add_account_label" msgid="2935267344849993553">"Dodajte račun"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Koji račun želite upotrijebiti?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Dodaj račun"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Povećavanje"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Smanjivanje"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Pokrenuti preglednik?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prihvatiti poziv?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Uvijek"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Samo jednom"</string> </resources> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 239bfe4..8334d44 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Lekérdezés törlése"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Lekérdezés küldése"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Hangalapú keresés"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Aktiválja a Felfedezés érintésselt?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> aktiválni szeretné a Felfedezés érintéssel funkciót. Amikor be van kapcsolva a Felfedezés érintéssel, akkor hallhatja vagy láthatja annak leírását, ami az ujja alatt van, illetve végrehajthat kézmozdulatokat a táblagép kezeléséhez."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> aktiválni szeretné a Felfedezés érintéssel funkciót. Amikor be van kapcsolva a Felfedezés érintéssel, akkor hallhatja vagy láthatja annak leírását, ami az ujja alatt van, illetve végrehajthat kézmozdulatokat a telefon kezeléséhez."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 hónapja"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Több mint 1 hónapja"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Beviteli módok beállítása"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fizikai billentyűzet"</string> <string name="hardware" msgid="7517821086888990278">"Hardver"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Válasszon billentyűzetkiosztást"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Érintse meg az egyik billentyűzetkiosztás kiválasztásához."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"jelöltek"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Egyelőre ne legyen semmilyen művelet"</string> <string name="choose_account_label" msgid="5655203089746423927">"Válasszon fiókot"</string> <string name="add_account_label" msgid="2935267344849993553">"Fiók hozzáadása"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Melyik fiókot szeretné használni?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Fiók hozzáadása"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Növelés"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Csökkentés"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Böngésző indítása?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Fogadja a hívást?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Mindig"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Csak egyszer"</string> </resources> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index f0187ec..fda15f2 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Hapus kueri"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Mengirimkan kueri"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Penelusuran suara"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Aktifkan Menjelajah dengan Sentuhan?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ingin mengaktifkan Menjelajah dengan Sentuhan. Saat Menjelajah dengan Sentuhan diaktifkan, Anda dapat melihat atau mendengar deskripsi dari apa yang ada di bawah jari Anda atau melakukan gerakan untuk berinteraksi dengan tablet."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ingin mengaktifkan Menjelajah dengan Sentuhan. Saat Menjelajah dengan Sentuhan diaktifkan, Anda dapat mendengar atau melihat deskripsi dari apa yang ada di bawah jari Anda atau melakukan gerakan untuk berinteraksi dengan ponsel."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 bulan yang lalu"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Sebelum 1 bulan yang lalu"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Menyiapkan metode masukan"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Keyboard fisik"</string> <string name="hardware" msgid="7517821086888990278">"Perangkat Keras"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pilih tata letak keyboard"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Sentuh untuk memilih tata letak keyboard."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"calon"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Jangan lakukan apa pun untuk saat ini"</string> <string name="choose_account_label" msgid="5655203089746423927">"Pilih akun"</string> <string name="add_account_label" msgid="2935267344849993553">"Tambahkan akun"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Akun mana yang ingin Anda gunakan?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Tambahkan akun"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Tambah"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Kurangi"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Luncurkan Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Selalu"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Hanya sekali"</string> </resources> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index ffcf6bb..92f4cef 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Cancella query"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Invia query"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Ricerca vocale"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Attivare Esplora al tocco?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vuole attivare la funzione Esplora al tocco. Quando la funzione Esplora al tocco è attiva, puoi ascoltare o visualizzare le descrizioni di ciò che stai toccando oppure interagire con il tablet tramite gesti."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vuole attivare la funzione Esplora al tocco. Quando la funzione Esplora al tocco è attiva, puoi ascoltare o visualizzare le descrizioni di ciò che stai toccando oppure interagire con il telefono tramite gesti."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 mese fa"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Oltre 1 mese fa"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Configura metodi di immissione"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Tastiera fisica"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Seleziona layout tastiera"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tocca per selezionare un layout di tastiera."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidati"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Non fare nulla per ora"</string> <string name="choose_account_label" msgid="5655203089746423927">"Scegli un account"</string> <string name="add_account_label" msgid="2935267344849993553">"Aggiungi un account"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Quale account vuoi usare?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Aggiungi account"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Aumenta"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Riduci"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Accettare la chiamata?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Solo una volta"</string> </resources> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 265da95..54b7620 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"אל תעשה דבר כרגע"</string> <string name="choose_account_label" msgid="5655203089746423927">"בחר חשבון"</string> <string name="add_account_label" msgid="2935267344849993553">"הוסף חשבון"</string> - <string name="choose_account_text" msgid="6303348737197849675">"באיזה חשבון ברצונך להשתמש?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"הוסף חשבון"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"הוסף"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"הפחת"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 176a6b5..2220454 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"検索キーワードを削除"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"検索キーワードを送信"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"音声検索"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"タッチガイドをONにしますか?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>がタッチガイドをONにしようとしています。タッチガイドをONにすると、指の位置にあるアイテムの説明を読み上げたり表示したりできます。また、タブレットを通常とは違うジェスチャーで操作できます。"</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>がタッチガイドをONにしようとしています。タッチガイドをONにすると、指の位置にあるアイテムの説明を読み上げたり表示したりできます。また、携帯端末を通常とは違うジェスチャーで操作できます。"</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1か月前"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1か月前"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"入力方法をセットアップ"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"物理キーボード"</string> <string name="hardware" msgid="7517821086888990278">"ハードウェア"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"キーボードレイアウトの選択"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"タップしてキーボードレイアウトを選択してください。"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"候補"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"今は何もしない"</string> <string name="choose_account_label" msgid="5655203089746423927">"アカウントの選択"</string> <string name="add_account_label" msgid="2935267344849993553">"アカウントを追加"</string> - <string name="choose_account_text" msgid="6303348737197849675">"どのアカウントを使用しますか?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"アカウントを追加"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"進めます"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"戻します"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"ブラウザを起動しますか?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"通話を受けますか?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"常時"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"1回のみ"</string> </resources> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 03de346..64ef6a3 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"검색어 삭제"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"검색어 보내기"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"음성 검색"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"\'터치하여 탐색\'을 사용하시겠습니까?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>을(를) 사용하려면 \'터치하여 탐색\' 기능을 사용하도록 설정해야 합니다. \'터치하여 탐색\'을 사용하도록 설정하면, 화면을 터치하여 손가락 아래에 표시된 항목에 대한 설명을 듣고 보거나 태블릿으로 상호작용하기 위한 동작을 수행할 수 있습니다."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>을(를) 사용하려면 \'터치하여 탐색\' 기능을 사용하도록 설정해야 합니다. \'터치하여 탐색\'을 사용하도록 설정하면, 화면을 터치하여 손가락 아래에 표시된 항목에 대한 설명을 듣고 보거나 휴대전화로 상호작용하기 위한 동작을 수행할 수 있습니다."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"한 달 전"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"한 달 전"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"입력 방법 설정"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"물리적 키보드"</string> <string name="hardware" msgid="7517821086888990278">"하드웨어"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"키보드 레이아웃 선택"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"터치하여 키보드 레이아웃을 선택합니다."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"가능한 원인"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"나중에 작업"</string> <string name="choose_account_label" msgid="5655203089746423927">"계정 선택"</string> <string name="add_account_label" msgid="2935267344849993553">"계정 추가"</string> - <string name="choose_account_text" msgid="6303348737197849675">"사용할 계정을 선택하세요."</string> <string name="add_account_button_label" msgid="3611982894853435874">"계정 추가"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"늘리기"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"줄이기"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"브라우저를 실행하시겠습니까?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"통화를 수락하시겠습니까?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"항상"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"한 번만"</string> </resources> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 0474391..fe4683d 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Išvalyti užklausą"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Patvirtinti užklausą"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Paieška balsu"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Įgalinti naršymą liečiant?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"„<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>“ nori įgalinti naršymą liečiant. Kai naršymas liečiant bus įjungtas, galėsite išgirsti ar peržiūrėti pirštu liečiamų elementų aprašus arba atlikdami gestus naudoti planšetinį kompiuterį."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"„<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>“ nori įgalinti naršymą liečiant. Kai naršymas liečiant bus įjungtas, galėsite išgirsti ar peržiūrėti pirštu liečiamų elementų aprašus arba atlikdami gestus naudoti telefoną."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Prieš 1 mėn."</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Prieš maždaug 1 mėnesį"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Nustatyti įvesties metodus"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fizinė klaviatūra"</string> <string name="hardware" msgid="7517821086888990278">"Apar. įr."</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pasirinkite klaviatūros išdėstymą"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Palieskite, kad pasirinktumėte klaviatūros išdėstymą."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidatai"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Kol kas nieko nedaryti"</string> <string name="choose_account_label" msgid="5655203089746423927">"Pasirinkti paskyrą"</string> <string name="add_account_label" msgid="2935267344849993553">"Pridėti paskyrą"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Kurią paskyrą norite naudoti?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Pridėti paskyrą"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Padidinti"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Sumažinti"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Paleisti naršyklę?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Priimti skambutį?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Visada"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Tik kartą"</string> </resources> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index aaed6e2..263323c 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Notīrīt vaicājumu"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Iesniedziet vaicājumu."</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Meklēšana ar balsi"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vai iesp. “Pārlūkot pieskaroties”?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vēlas iespējot funkciju “Atklāt pieskaroties”. Kad ir ieslēgta funkcija “Atklāt pieskaroties”, var dzirdēt vai redzēt tā vienuma aprakstu, virs kura atrodas pirksts, vai veikt žestus, lai mijiedarbotos ar planšetdatoru."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vēlas iespējot funkciju “Atklāt pieskaroties”. Kad ir ieslēgta funkcija “Atklāt pieskaroties”, var dzirdēt vai redzēt tā vienuma aprakstu, virs kura atrodas pirksts, vai veikt žestus, lai mijiedarbotos ar tālruni."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Pirms 1 mēneša"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Vairāk nekā pirms 1 mēneša"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Iestatīt ievades metodes"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fiziskā tastatūra"</string> <string name="hardware" msgid="7517821086888990278">"Aparatūra"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Atlasiet tastatūras izkārtojumu"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Pieskarieties, lai atlasītu tastatūras izkārtojumu."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidāti"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Pagaidām neveiciet nekādas darbības."</string> <string name="choose_account_label" msgid="5655203089746423927">"Izvēlēties kontu"</string> <string name="add_account_label" msgid="2935267344849993553">"Pievienot kontu"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Kuru kontu vēlaties izmantot?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Pievienot kontu"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Palielināt"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Samazināt"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vai palaist pārlūkprogrammu?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vai atbildēt uz zvanu?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vienmēr"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Tikai vienreiz"</string> </resources> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index fec15b2..295fae2 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Pertanyaan jelas"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Serah pertanyaan"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Carian suara"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Dayakan Jelajah melalui Sentuhan?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ingin mendayakan Jelajah melalui Sentuhan. Apabila Jelajah melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan tablet."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ingin mendayakan Jelajah melalui Sentuhan. Apabila Jelajah melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan telefon."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 bulan yang lalu"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Sebelum 1 bulan yang lalu"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Sediakan kaedah input"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Papan kekunci fizikal"</string> <string name="hardware" msgid="7517821086888990278">"Perkakasan"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pilih susun atur papan kekunci"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Sentuh untuk memilih susun atur papan kekunci."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"calon"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Jangan lakukan apa-apa sekarang"</string> <string name="choose_account_label" msgid="5655203089746423927">"Pilih akaun"</string> <string name="add_account_label" msgid="2935267344849993553">"Tambah akaun"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Akaun mana yang mahu anda gunakan?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Tambah akaun"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Tingkatkan"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Kurangkan"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sentiasa"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Hanya sekali"</string> </resources> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 47935fd..c7e818d 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -748,7 +748,7 @@ <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pause-knappen"</string> <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Avspillingsknappen"</string> <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Stopp-knappen"</string> - <string name="emergency_calls_only" msgid="6733978304386365407">"Kun nødanrop"</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Bare nødanrop"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Nettverk ikke tillatt"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet er PUK-låst."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Les i brukerhåndboken eller kontakt brukerstøtten."</string> @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Slett søket"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Send inn spørsmål"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Talesøk"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Aktivere Utforsk ved å trykke?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ber om aktivering av Utforsk ved å trykke. Når Utforsk ved å trykke er slått på, kan du høre og se beskrivelser av det som er under fingrene dine. Du kan også utføre handlinger på nettbrettet ved hjelp av bevegelser."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ber om aktivering av Utforsk ved å trykke. Når Utforsk ved å trykke er slått på, kan du høre eller se beskrivelser av det som er under fingrene dine. Du kan også utføre handlinger på nettbrettet ved hjelp av bevegelser."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"For én måned siden"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"For over en måned siden"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Konfigurer inndatametoder"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fysisk tastatur"</string> <string name="hardware" msgid="7517821086888990278">"Maskinvare"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Velg tastaturoppsett"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Trykk for å velge et tastaturoppsett"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"</string> <string name="candidates_style" msgid="4333913089637062257">"TAG_FONT"<u>"kandidater"</u>"CLOSE_FONT"</string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Ikke gjør noe nå"</string> <string name="choose_account_label" msgid="5655203089746423927">"Velg en konto"</string> <string name="add_account_label" msgid="2935267344849993553">"Legg til en konto"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Hvilken konto vil du bruke?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Legg til konto"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Øk"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Reduser"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vil du starte nettleseren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vil du besvare anropet?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bare én gang"</string> </resources> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 4ad7180..857e655 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Zoekopdracht wissen"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Zoekopdracht verzenden"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Spraakgestuurd zoeken"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"\'Verkennen via aanraking\' aan?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wil \'Verkennen via aanraking\' inschakelen. Wanneer \'Verkennen via aanraking\' is ingeschakeld, kunt u beschrijvingen beluisteren of bekijken van wat er onder uw vinger staat of aanraakbewerkingen uitvoeren op de tablet."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> wil \'Verkennen via aanraking\' inschakelen. Wanneer \'Verkennen via aanraking\' is ingeschakeld, kunt u beschrijvingen beluisteren of bekijken van wat er onder uw vinger staat of aanraakbewerkingen uitvoeren op de telefoon."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 maand geleden"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Meer dan 1 maand geleden"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Invoermethoden instellen"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fysiek toetsenbord"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Toetsenbordindeling selecteren"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Tik om een toetsenbordindeling te selecteren."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidaten"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Nu niets doen."</string> <string name="choose_account_label" msgid="5655203089746423927">"Een account selecteren"</string> <string name="add_account_label" msgid="2935267344849993553">"Een account toevoegen"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Welk account wilt u gebruiken?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Account toevoegen"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Verhogen"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Verlagen"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Oproep accepteren?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Altijd"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Eén keer"</string> </resources> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index a634006..ce284d0 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Wyczyść zapytanie"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Wyślij zapytanie"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Wyszukiwanie głosowe"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Włączyć Czytanie dotykiem?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> chce włączyć Czytanie dotykiem. Gdy ta funkcja jest włączona, słyszysz i widzisz opisy elementów, które są pod Twoim palcem, oraz możesz obsługiwać tablet gestami."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> chce włączyć Czytanie dotykiem. Gdy ta funkcja jest włączona, słyszysz i widzisz opisy elementów, które są pod Twoim palcem, oraz możesz obsługiwać telefon gestami."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 miesiąc temu"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ponad 1 miesiąc temu"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Konfiguruj metody wprowadzania"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Klawiatura fizyczna"</string> <string name="hardware" msgid="7517821086888990278">"Sprzęt"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Wybierz układ klawiatury"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Kliknij, by wybrać układ klawiatury."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandydaci"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Nie wykonuj teraz żadnych czynności."</string> <string name="choose_account_label" msgid="5655203089746423927">"Wybierz konto."</string> <string name="add_account_label" msgid="2935267344849993553">"Dodaj konto"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Którego konta chcesz użyć?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Dodaj konto"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Zwiększ"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Zmniejsz"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Uruchomić przeglądarkę?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Odebrać połączenie?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Zawsze"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Tylko raz"</string> </resources> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 38ce3ac..956cadc 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -1239,7 +1239,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Não fazer nada por agora"</string> <string name="choose_account_label" msgid="5655203089746423927">"Selecionar uma conta"</string> <string name="add_account_label" msgid="2935267344849993553">"Adicionar uma conta"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Que conta pretende utilizar?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Adicionar conta"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Diminuir"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 2a4855c..e9cf75b 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Limpar consulta"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Enviar consulta"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Pesquisa por voz"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Ativar exploração pelo toque?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quer ativar a exploração pelo toque. Com ela, você pode ouvir ou ver descrições do que está sob seu dedo e interagir com o tablet através de gestos."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> quer ativar a exploração pelo toque. Com ela, você pode ouvir ou ver descrições do que está sob seu dedo e interagir com o telefone através de gestos."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 mês atrás"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Antes de 1 mês atrás"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Configurar métodos de entrada"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Teclado físico"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Selecione o layout de teclado"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Toque para selecionar um layout de teclado."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"candidatos"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Não fazer nada por enquanto"</string> <string name="choose_account_label" msgid="5655203089746423927">"Escolha uma conta"</string> <string name="add_account_label" msgid="2935267344849993553">"Adicionar uma conta"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Qual conta você deseja usar?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Adicionar conta"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Aumentar"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Diminuir"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Abrir Navegador?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Aceitar chamada?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sempre"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Só uma vez"</string> </resources> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index 397b095..fdf8159 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -1915,8 +1915,6 @@ <skip /> <!-- no translation found for add_account_label (2935267344849993553) --> <skip /> - <!-- no translation found for choose_account_text (6303348737197849675) --> - <skip /> <!-- no translation found for add_account_button_label (3611982894853435874) --> <skip /> <!-- no translation found for number_picker_increment_button (2412072272832284313) --> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 52fd28e..32b6f30 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -1239,7 +1239,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Nu trebuie să luaţi nicio măsură deocamdată"</string> <string name="choose_account_label" msgid="5655203089746423927">"Alegeţi un cont"</string> <string name="add_account_label" msgid="2935267344849993553">"Adăugaţi un cont"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Ce cont doriţi să utilizaţi?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Adăugaţi un cont"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Creşteţi"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Reduceţi"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 75face4..f846198 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Удалить запрос"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Отправить запрос"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Голосовой поиск"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Включить \"Изучение касанием\"?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> хочет включить функцию \"Изучение касанием\". Она позволяет прослушивать или просматривать описание элементов, которых вы касаетесь, и управлять планшетным ПК с помощью жестов."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> хочет включить функцию \"Изучение касанием\". Она позволяет прослушивать или просматривать описание элементов, которых вы касаетесь, и управлять телефоном с помощью жестов."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 месяц назад"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Более месяца назад"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Настройка способов ввода"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Физическая клавиатура"</string> <string name="hardware" msgid="7517821086888990278">"Аппаратура"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Выберите раскладку клавиатуры"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Нажмите, чтобы выбрать раскладку клавиатуры."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"варианты"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Ничего не делать"</string> <string name="choose_account_label" msgid="5655203089746423927">"Выберите аккаунт"</string> <string name="add_account_label" msgid="2935267344849993553">"Добавить аккаунт"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Выберите аккаунт"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Добавить аккаунт"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Увеличить"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Уменьшить"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запустить браузер?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Ответить?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Всегда"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Только один раз"</string> </resources> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 6f1c5e7..fdce9ea 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Jasný dopyt"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Odoslať dopyt"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Hlasové vyhľadávanie"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Povoliť Preskúmanie dotykom?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Služba <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> požaduje povolenie funkcie Preskúmanie dotykom. Ak je funkcia Explore by Touch zapnutá, môžete počuť alebo vidieť popisy objektov pod vaším prstom alebo ovládať tablet gestami."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Služba <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> požaduje povolenie funkcie Preskúmanie dotykom. Ak je funkcia Explore by Touch zapnutá, môžete počuť alebo vidieť popisy objektov pod vaším prstom alebo ovládať telefón gestami."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"pred 1 mesiacom"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Viac ako pred 1 mesiacom"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Nastavenie metód vstupu"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fyzická klávesnica"</string> <string name="hardware" msgid="7517821086888990278">"Hardvér"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Zvoľte rozloženie klávesnice"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dotykom zvoľte rozloženie klávesnice."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" AÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĽMNŇOÓÔPRŔSŠTŤUÚVWXYÝZŽ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidáti"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Teraz nič nerobte"</string> <string name="choose_account_label" msgid="5655203089746423927">"Zvoliť účet"</string> <string name="add_account_label" msgid="2935267344849993553">"Pridať účet"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Ktorý účet chcete použiť?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Pridať účet"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Zvýšiť"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Znížiť"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Spustiť prehliadač?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Prijať hovor?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vždy"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Len raz"</string> </resources> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 2e019d4..b3929e2 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Izbris poizvedbe"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Pošlji poizvedbo"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Glasovno iskanje"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vklop raziskovanja z dotikom?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Storitev <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> želi omogočiti raziskovanje z dotikom. Ko je raziskovanje z dotikom vklopljeno, lahko slišite ali vidite opise tega, kar je pod vašim prstom, ali izvajate poteze za interakcijo s tabličnim računalnikom."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Storitev <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> želi omogočiti raziskovanje z dotikom. Ko je raziskovanje z dotikom vklopljeno, lahko slišite ali vidite opise tega, kar je pod vašim prstom, ali izvajate poteze za interakcijo s telefonom."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Pred 1 mesecem"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Pred več kot 1 mesecem"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Nastavi načine vnosa"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fizična tipkovnica"</string> <string name="hardware" msgid="7517821086888990278">"Strojna oprema"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Izberite razporeditev tipkovnice"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Dotaknite se, da izberete razporeditev tipkovnice"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidati"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Za zdaj ne naredi ničesar"</string> <string name="choose_account_label" msgid="5655203089746423927">"Izberite račun"</string> <string name="add_account_label" msgid="2935267344849993553">"Dodajanje računa"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Kateri račun želite uporabiti?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Dodaj račun"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Več"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Manj"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Ali želite odpreti brskalnik?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Ali želite sprejeti klic?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Vedno"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Samo tokrat"</string> </resources> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 6f067a1..5438262 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Обриши упит"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Пошаљи упит"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Гласовна претрага"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Желите да омог. Истражив. додиром?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> жели да омогући Истраживање додиром. Када је Истраживање додиром укључено, можете да чујете или видите описе ставке на коју сте ставили прст или да комуницирате са таблетом помоћу покрета."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> жели да омогући Истраживање додиром. Када је Истраживање додиром укључено, можете да чујете или видите описе ставке на коју сте ставили прст или да комуницирате са телефоном помоћу покрета."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"Пре месец дана"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Пре месец дана"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Подеси методе уноса"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Физичка тастатура"</string> <string name="hardware" msgid="7517821086888990278">"Хардвер"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Избор распореда тастатуре"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Додирните да бисте изабрали распоред тастатуре."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"кандидати"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Не ради ништа за сада"</string> <string name="choose_account_label" msgid="5655203089746423927">"Избор налога"</string> <string name="add_account_label" msgid="2935267344849993553">"Додај налог"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Који налог желите да користите?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Додај налог"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Повећавање"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Смањивање"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Желите ли да покренете прегледач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Желите ли да прихватите позив?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Увек"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Само једном"</string> </resources> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index c9b7e2b..bf7c6b2 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Ta bort frågan"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Skicka fråga"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Röstsökning"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Aktivera Explore by Touch?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med pekdatorn."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med telefonen."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"för 1 månad sedan"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"För mer än en månad sedan"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Konfigurera inmatningsmetoder"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fysiskt tangentbord"</string> <string name="hardware" msgid="7517821086888990278">"Maskinvara"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Välj en tangentbordslayout"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Välj en tangentbordslayout genom att trycka."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"kandidater"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Gör ingenting just nu"</string> <string name="choose_account_label" msgid="5655203089746423927">"Välj ett konto"</string> <string name="add_account_label" msgid="2935267344849993553">"Lägg till ett konto"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Vilket konto vill du använda?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Lägg till konto"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Öka"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Minska"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Vill du öppna webbläsaren?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Vill du ta emot samtal?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alltid"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Bara en gång"</string> </resources> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 35079c5..405c74f 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Usifanye chochote kwa sasa"</string> <string name="choose_account_label" msgid="5655203089746423927">"Chagua akaunti"</string> <string name="add_account_label" msgid="2935267344849993553">"Ongeza akaunti"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Je, ni akaunti gani unataka kutumia?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Ongeza akaunti"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Ongeza"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Punguza"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 34e4433..a70740d 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -1234,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"ไม่ต้องทำอะไรในขณะนี้"</string> <string name="choose_account_label" msgid="5655203089746423927">"เลือกบัญชี"</string> <string name="add_account_label" msgid="2935267344849993553">"เพิ่มบัญชี"</string> - <string name="choose_account_text" msgid="6303348737197849675">"คุณต้องการใช้บัญชีใด"</string> <string name="add_account_button_label" msgid="3611982894853435874">"เพิ่มบัญชี"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"เพิ่ม"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"ลด"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index a659e9e..c64a4a1 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"I-clear ang query"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Isumite ang query"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Paghahanap gamit ang boses"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Paganahin ang Galugad sa pagpindot?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Nais paganahin ng <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ang Galugarin sa pamamagitan ng pagpindot. Kapag naka-on ang Galugarin sa pamamagitan ng pagpindot, maaari mong marinig o makita ang mga paglalarawan ng nasa ilalim ng iyong daliri o maaari kang magsagawa ng mga galaw upang makipag-ugnayan sa tablet."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Nais paganahin ng <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ang Galugarin sa pamamagitan ng pagpindot. Kapag naka-on ang Galugarin sa pamamagitan ng pagpindot, maaari mong marinig o makita ang mga paglalarawan ng nasa ilalim ng iyong daliri o maaari kang magsagawa ng mga galaw upang makipag-ugnayan sa telepono."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 buwan ang nakalipas"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Bago ang nakalipas na 1 buwan"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"I-set up paraan ng pag-input"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Aktwal na keyboard"</string> <string name="hardware" msgid="7517821086888990278">"Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pumili ng layout ng keyboard"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Pindutin upang pumili ng layout ng keyboard."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"mga kandidato"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Walang gawin sa ngayon"</string> <string name="choose_account_label" msgid="5655203089746423927">"Pumili ng isang account"</string> <string name="add_account_label" msgid="2935267344849993553">"Magdagdag ng account"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Aling account ang nais mong gamitin?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Magdagdag ng account"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Dagdagan"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Bawasan"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Ilunsad ang Browser?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Tanggapin ang tawag?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Palagi"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Isang beses lang"</string> </resources> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index c9ee115..2beeb39 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Sorguyu temizle"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Sorguyu gönder"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Sesli arama"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Dokunarak Keşfet etkinleştirilsin mi?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> Dokunarak Keşfet özelliğini etkinleştirmek istiyor. Dokunarak Keşfet açık olduğunda, parmağınızın altındaki öğelere ait açıklamaları duyabilir veya görebilir ya da tabletle etkileşimde bulunmak için ilgili hareketleri yapabilirsiniz."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>, Dokunarak Keşfet özelliğini etkinleştirmek istiyor. Dokunarak Keşfet açık olduğunda parmağınızın altındaki öğelere ait açıklamaları duyabilir veya görebilir ya da telefonla etkileşimde bulunmak için ilgili hareketleri yapabilirsiniz."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 ay önce"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 ay önce"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Giriş yöntemlerini ayarla"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Fiziksel klavye"</string> <string name="hardware" msgid="7517821086888990278">"Donanım"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Bir klavye düzeni seç"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Bir klavye düzeni seçmek için dokunun."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"adaylar"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Şimdilik bir şey yapma"</string> <string name="choose_account_label" msgid="5655203089746423927">"Bir hesap seçin"</string> <string name="add_account_label" msgid="2935267344849993553">"Hesap ekleyin"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Hangi hesabı kullanmak istiyorsunuz?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Hesap ekle"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Artır"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Azalt"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Tarayıcı Başlatılsın mı?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Çağrı kabul edilsin mi?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Her zaman"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Yalnızca bir defa"</string> </resources> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 5d06934..207ea06 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Очистити запит"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Наіслати запит"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Голосовий пошук"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Увімкнути дослідження дотиком?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> хоче ввімкнути функцію дослідження дотиком. Увімкнувши функцію дослідження дотиком, можна чути або бачити опис елемента, розташованого під вашим пальцем, або виконувати жести для взаємодії з планшетним ПК."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> хоче ввімкнути функцію дослідження дотиком. Увімкнувши функцію дослідження дотиком, можна чути або бачити опис елемента, розташованого під вашим пальцем, або виконувати жести для взаємодії з телефоном."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 міс. тому"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Раніше 1 місяця тому"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Налаштувати методи введення"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Фізична клавіатура"</string> <string name="hardware" msgid="7517821086888990278">"Обладнання"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Виберіть розкладку клавіатури"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Торкніться, щоб вибрати розкладку клавіатури."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"кандидати"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Наразі нічого не робити"</string> <string name="choose_account_label" msgid="5655203089746423927">"Вибрати обліковий запис"</string> <string name="add_account_label" msgid="2935267344849993553">"Додати обліковий запис"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Який обліковий запис використовувати?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Додати облік. запис"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Збільшити"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Зменшити"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Запустити веб-переглядач?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Прийняти виклик?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Завжди"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Лише цього разу"</string> </resources> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index cce563a..c6f2971 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"Xóa truy vấn"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Gửi truy vấn"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Tìm kiếm bằng giọng nói"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Bật Khám phá bằng cách chạm?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> muốn bật Khám phá bằng cách chạm. Khi Khám phá bằng cách chạm được bật, bạn có thể nghe hoặc xem mô tả dưới ngón tay bạn hoặc thực hiện cử chỉ để tương tác với máy tính bảng."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> muốn bật Khám phá bằng cách chạm. Khi Khám phá bằng cách chạm được bật, bạn có thể nghe hoặc xem mô tả dưới ngón tay bạn hoặc thực hiện cử chỉ để tương tác với điện thoại."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 tháng trước"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Trước 1 tháng trước"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Thiết lập phương thức nhập"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Bàn phím thực"</string> <string name="hardware" msgid="7517821086888990278">"Phần cứng"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Chọn bố cục bàn phím"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Chạm để chọn bố cục bàn phím."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"ứng viên"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Không thực hiện tác vụ nào bây giờ"</string> <string name="choose_account_label" msgid="5655203089746423927">"Chọn tài khoản"</string> <string name="add_account_label" msgid="2935267344849993553">"Thêm tài khoản"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Bạn muốn sử dụng tài khoản nào?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Thêm tài khoản"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Tăng"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Giảm"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Khởi chạy trình duyệt?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Chấp nhận cuộc gọi?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Luôn chọn"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Chỉ một lần"</string> </resources> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 865761b..0187159 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"清除查询"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"提交查询"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"语音搜索"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"是否启用“触摸浏览”?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>想要启用“触摸浏览”。“触摸浏览”启用后,您可以听到或看到触摸内容的说明,或通过手指操作与平板电脑互动。"</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>想要启用“触摸浏览”。“触摸浏览”启用后,您可以听到或看到触摸内容的说明,或通过手指操作与手机互动。"</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 个月前"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 个月前"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"设置输入法"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"物理键盘"</string> <string name="hardware" msgid="7517821086888990278">"硬件"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"选择键盘布局"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"触摸以选择键盘布局。"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"候选"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"目前不进行任何操作"</string> <string name="choose_account_label" msgid="5655203089746423927">"选择帐户"</string> <string name="add_account_label" msgid="2935267344849993553">"添加帐户"</string> - <string name="choose_account_text" msgid="6303348737197849675">"您要使用哪个帐户?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"添加帐户"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"增大"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"减小"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"要启动浏览器吗?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"要接听电话吗?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"始终"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"仅一次"</string> </resources> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 95b3fa3..3df0de5 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"清除查詢"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"提交查詢"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"語音搜尋"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"啟用輕觸探索?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 需要啟用「輕觸探索」。開啟這項功能時,系統會在您的手指時顯示或朗讀說明,您也可以執行手勢來與平板電腦互動。"</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> 需要啟用「輕觸探索」。開啟這項功能時,系統會在您的手指輕觸螢幕上的物件時顯示或朗讀說明,您也可以執行手勢來與手機互動。"</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 個月以前"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 個月前"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"設定輸入法"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"實體鍵盤"</string> <string name="hardware" msgid="7517821086888990278">"硬體"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"選取鍵盤配置"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"輕觸即可選取鍵盤配置。"</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"待選項目"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"暫不執行"</string> <string name="choose_account_label" msgid="5655203089746423927">"選擇帳戶"</string> <string name="add_account_label" msgid="2935267344849993553">"新增帳戶"</string> - <string name="choose_account_text" msgid="6303348737197849675">"您要使用哪個帳戶?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"新增帳戶"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"增加"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"減少"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"啟動「瀏覽器」嗎?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"接聽電話嗎?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"一律採用"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"僅限一次"</string> </resources> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 0c7d269..c979aec 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -855,12 +855,9 @@ <string name="searchview_description_clear" msgid="1330281990951833033">"xazulula umbuzo"</string> <string name="searchview_description_submit" msgid="2688450133297983542">"Thumela umbuzo"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Ukusesha ngezwi"</string> - <!-- no translation found for enable_explore_by_touch_warning_title (7460694070309730149) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (8655887539089910577) --> - <skip /> - <!-- no translation found for enable_explore_by_touch_warning_message (2708199672852373195) --> - <skip /> + <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Nika amandla i-Explore by Touch?"</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"I-<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ifuna ukunika amandla i-Explore by Touch. Uma i-Explore by Touch ikhanya, ungezwa noma ubone izincazelo ezingaphansi komunwe wakho noma wenze izenzo zomzimba ukuze uxhumane nethebhulethi."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"I-<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ifuna ukunika amandla i-Explore by Touch. Uma i-Explore by Touch ikhanya, ungezwa noma ubone izincazelo ezingaphansi komunwe wakho noma wenze izenzo zomzimba ukuze uxhumane nefoni."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"inyanga engu-1 edlule"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Ngaphambi kwenyanga engu-1 edlule"</string> <plurals name="num_seconds_ago"> @@ -1127,10 +1124,8 @@ <string name="configure_input_methods" msgid="9091652157722495116">"Izilungiselelo zezindlela zokufakwayo"</string> <string name="use_physical_keyboard" msgid="6203112478095117625">"Ukwakheka kwekhibhodi"</string> <string name="hardware" msgid="7517821086888990278">"I-Hardware"</string> - <!-- no translation found for select_keyboard_layout_notification_title (1407367017263030773) --> - <skip /> - <!-- no translation found for select_keyboard_layout_notification_message (4465907700449257063) --> - <skip /> + <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Khetha isendlalelo sekhibhodi"</string> + <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Thinta ukuze ukhethe isendlalelo sekhibhodi."</string> <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string> <string name="candidates_style" msgid="4333913089637062257"><u>"abahlanganyeli"</u></string> @@ -1239,7 +1234,6 @@ <string name="sync_do_nothing" msgid="3743764740430821845">"Ungenzi lutho okwamanje."</string> <string name="choose_account_label" msgid="5655203089746423927">"Khetha i-akhawunti"</string> <string name="add_account_label" msgid="2935267344849993553">"Yengeza i-akhawunti"</string> - <string name="choose_account_text" msgid="6303348737197849675">"Ingabe iyiphi i-akhawunti ofuna ukuyisebenzisa?"</string> <string name="add_account_button_label" msgid="3611982894853435874">"Engeza i-akhawunti"</string> <string name="number_picker_increment_button" msgid="2412072272832284313">"Khulisa"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Yehlisa"</string> @@ -1324,6 +1318,5 @@ <string name="launchBrowserDefault" msgid="2057951947297614725">"Qala Isiphequluli?"</string> <string name="SetupCallDefault" msgid="5834948469253758575">"Amukela ucingo?"</string> <string name="activity_resolver_use_always" msgid="8017770747801494933">"Njalo"</string> - <!-- no translation found for activity_resolver_use_once (2404644797149173758) --> - <skip /> + <string name="activity_resolver_use_once" msgid="2404644797149173758">"Kanje nje"</string> </resources> diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index f24733c..f971d39 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -199,7 +199,7 @@ <flag name="development" value="0x20" /> </attr> - <!-- Flags indicating more context for a permission group. --> + <!-- Flags indicating more context for a permission group. @hide --> <attr name="permissionGroupFlags"> <!-- Set to indicate that this permission group contains permissions protecting access to some information that is considered @@ -903,7 +903,6 @@ <attr name="icon" /> <attr name="logo" /> <attr name="description" /> - <attr name="permissionGroupFlags" /> <attr name="priority" /> </declare-styleable> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 4cfbff5..51be22d 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -28,7 +28,6 @@ this. --> <java-symbol type="id" name="account_name" /> - <java-symbol type="id" name="account_row_checkmark" /> <java-symbol type="id" name="account_row_icon" /> <java-symbol type="id" name="account_row_text" /> <java-symbol type="id" name="account_type" /> @@ -41,7 +40,6 @@ <java-symbol type="id" name="action_menu_presenter" /> <java-symbol type="id" name="action_mode_close_button" /> <java-symbol type="id" name="activity_chooser_view_content" /> - <java-symbol type="id" name="addAccount" /> <java-symbol type="id" name="albumart" /> <java-symbol type="id" name="alertTitle" /> <java-symbol type="id" name="allow_button" /> @@ -122,13 +120,15 @@ <java-symbol type="id" name="old_app_action" /> <java-symbol type="id" name="old_app_description" /> <java-symbol type="id" name="old_app_icon" /> - <java-symbol type="id" name="overflow_title" /> <java-symbol type="id" name="package_label" /> <java-symbol type="id" name="packages_list" /> <java-symbol type="id" name="pause" /> - <java-symbol type="id" name="perms_list" /> + <java-symbol type="id" name="show_more" /> <java-symbol type="id" name="perm_icon" /> - <java-symbol type="id" name="perm_name" /> + <java-symbol type="id" name="show_more_icon" /> + <java-symbol type="id" name="show_more_text" /> + <java-symbol type="id" name="dangerous_perms_list" /> + <java-symbol type="id" name="non_dangerous_perms_list" /> <java-symbol type="id" name="permission_group" /> <java-symbol type="id" name="permission_list" /> <java-symbol type="id" name="pickers" /> @@ -212,6 +212,8 @@ <java-symbol type="id" name="inbox_text6" /> <java-symbol type="id" name="inbox_more" /> <java-symbol type="id" name="status_bar_latest_event_content" /> + <java-symbol type="id" name="action_divider" /> + <java-symbol type="id" name="overflow_divider" /> <java-symbol type="attr" name="actionModeShareDrawable" /> <java-symbol type="attr" name="alertDialogCenterButtons" /> @@ -301,6 +303,7 @@ <java-symbol type="dimen" name="notification_title_text_size" /> <java-symbol type="dimen" name="notification_subtext_size" /> + <java-symbol type="string" name="add_account_button_label" /> <java-symbol type="string" name="addToDictionary" /> <java-symbol type="string" name="action_bar_home_description" /> <java-symbol type="string" name="action_bar_up_description" /> @@ -660,6 +663,10 @@ <java-symbol type="string" name="passwordIncorrect" /> <java-symbol type="string" name="perms_description_app" /> <java-symbol type="string" name="perms_new_perm_prefix" /> + <java-symbol type="string" name="perms_hide" /> + <java-symbol type="string" name="perms_show_all" /> + <java-symbol type="string" name="default_permission_group" /> + <java-symbol type="string" name="permissions_format" /> <java-symbol type="string" name="petabyteShort" /> <java-symbol type="string" name="phoneTypeAssistant" /> <java-symbol type="string" name="phoneTypeCallback" /> @@ -1027,7 +1034,6 @@ <java-symbol type="layout" name="choose_account" /> <java-symbol type="layout" name="choose_account_row" /> <java-symbol type="layout" name="choose_account_type" /> - <java-symbol type="layout" name="choose_selected_account_row" /> <java-symbol type="layout" name="choose_type_and_account" /> <java-symbol type="layout" name="grant_credentials_permission" /> <java-symbol type="layout" name="number_picker" /> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 5929439..21efe4e 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -390,12 +390,11 @@ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> <string name="permgrouplab_personalInfo">Your personal information</string> <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_personalInfo">Direct access to information about you, stored in on your contact card.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_socialInfo">Your social information</string> + <string name="permgroupdesc_personalInfo" product="tablet">Direct access to your contacts + and calendar stored on the tablet.</string> <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_socialInfo">Direct access to information about your contacts and social connections.</string> + <string name="permgroupdesc_personalInfo" product="default">Direct access to your contacts + and calendar stored on the phone.</string> <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> <string name="permgrouplab_location">Your location</string> @@ -408,91 +407,6 @@ <string name="permgroupdesc_network">Access various network features.</string> <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_bluetoothNetwork">Bluetooth</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_bluetoothNetwork">Access devices and networks through Bluetooth.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_shortrangeNetwork">Short-range Networks</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_shortrangeNetwork">Access devices through short-range networks such as NFC.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_audioSettings">Audio Settings</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_audioSettings">Change audio settings.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_affectsBattery">Affects Battery</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_affectsBattery">Use features that can quickly drain battery.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_calendar">Calendar</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_calendar">Direct access to calendar and events.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_dictionary">Read User Dictionary</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_dictionary">Read words in user dictionary.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_writeDictionary">Write User Dictionary</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_writeDictionary">Add words to the user dictionary.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_bookmarks">Bookmarks and History</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_bookmarks">Direct access to bookmarks and browser history.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_deviceAlarms">Alarm</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_deviceAlarms">Set the alarm clock.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_voicemail">Voicemail</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_voicemail">Direct access to voicemail.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_microphone">Microphone</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_microphone">Direct access to the microphone to record audio.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_camera">Camera</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_camera">Direct access to camera for image or video capture.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_appInfo">Your applications information</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_appInfo">Ability to affect behavior of other applications on your device.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_wallpaper">Wallpaper</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_wallpaper">Change the device wallpaper settings.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_systemClock">Clock</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_systemClock">Change the device time or timezone.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_statusBar">Status Bar</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_statusBar">Change the device status bar settings.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_syncSettings">Sync Settings</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_syncSettings">Access to the sync settings.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> <string name="permgrouplab_accounts">Your accounts</string> <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> <string name="permgroupdesc_accounts">Access the available accounts.</string> @@ -518,11 +432,6 @@ <string name="permgroupdesc_developmentTools">Features only needed for app developers.</string> <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgrouplab_display">Other Application UI</string> - <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permgroupdesc_display">Effect the UI of other applications.</string> - - <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. --> <string name="permgrouplab_storage">Storage</string> <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=30] --> <string name="permgroupdesc_storage" product="nosdcard">Access the USB storage.</string> @@ -630,7 +539,7 @@ <string name="permlab_getTasks">retrieve running apps</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permdesc_getTasks">Allows the app to retrieve - information about currently and recently running tasks. Malicious apps may + information about currently and recently running tasks. Malicious apps may discover private information about other apps.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=50] --> @@ -781,7 +690,7 @@ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permlab_batteryStats">modify battery statistics</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> - <string name="permdesc_batteryStats">Allows the app to modify + <string name="permdesc_batteryStats">Allows the app to modify collected battery statistics. Not for use by normal apps.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> @@ -1142,18 +1051,18 @@ <string name="permlab_readCalendar">read calendar events plus confidential information</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permdesc_readCalendar" product="tablet">Allows the app to read all calendar - events stored on your tablet, including those of friends or coworkers. Malicious apps + events stored on your tablet, including those of friends or coworkers. Malicious apps may extract personal information from these calendars without the owners\' knowledge.</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permdesc_readCalendar" product="default">Allows the app to read all calendar - events stored on your phone, including those of friends or coworkers. Malicious apps + events stored on your phone, including those of friends or coworkers. Malicious apps may extract personal information from these calendars without the owners\' knowledge.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permlab_writeCalendar">add or modify calendar events and send email to guests without owners\' knowledge</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> <string name="permdesc_writeCalendar">Allows the app to send event invitations as the calendar owner and add, remove, - change events that you can modify on your device, including those of friends or co-workers. Malicious apps + change events that you can modify on your device, including those of friends or co-workers. Malicious apps may send spam emails that appear to come from calendar owners, modify events without the owners\' knowledge, or add fake events.</string> <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> @@ -2505,7 +2414,7 @@ <!-- Title for a warning message about the interaction model changes after allowing an accessibility service to put the device into explore by touch mode, displayed as a dialog message when - the user selects to enables the service. (default). [CHAR LIMIT=35] --> + the user selects to enables the service. (default). [CHAR LIMIT=45] --> <string name="enable_explore_by_touch_warning_title">Enable Explore by Touch?</string> <!-- Summary for a warning message about the interaction model changes after allowing an accessibility service to put the device into explore by touch mode, displayed as a dialog message when @@ -3010,13 +2919,23 @@ <!-- Name of the button in the date/time picker to accept the date/time change --> <string name="date_time_done">Done</string> - <!-- Security Permissions strings--> + <!-- Security Permissions strings (old)--> + <!-- The default permission group for any permissions that have not explicitly set a group. --> + <string name="default_permission_group">Default</string> + <!-- Do not translate. --> + <string name="permissions_format"><xliff:g id="perm_line1">%1$s</xliff:g>, <xliff:g id="perm_line2">%2$s</xliff:g></string> + <!-- Shown for an application when it doesn't require any permission grants. --> + <string name="no_permissions">No permissions required</string> + <!-- When installing an application, the less-dangerous permissions are hidden. If the user showed those, this is the text to hide them again. --> + <string name="perms_hide"><b>Hide</b></string> + <!-- When installing an application, the less-dangerous permissions are hidden. This is the text to show those. --> + <string name="perms_show_all"><b>Show all</b></string> + + <!-- Security Permissions strings (new)--> <!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] --> <string name="perms_new_perm_prefix"><font size="12" fgcolor="#ff900000">NEW: </font></string> <!-- Text that is placed at the front of a permission name that is being added to an app [CHAR LIMIT=NONE] --> <string name="perms_description_app">Provided by <xliff:g id="app_name">%1$s</xliff:g>.</string> - <!-- Shown for an application when it doesn't require any permission grants. --> - <string name="no_permissions">No permissions required</string> <!-- USB storage dialog strings --> <!-- This is the title for the activity's window. --> @@ -3382,9 +3301,8 @@ <string name="choose_account_label">Choose an account</string> <string name="add_account_label">"Add an account"</string> - <string name="choose_account_text">"Which account do you want to use?"</string> - <!-- Button label to add an account [CHAR LIMIT=20] --> + <!-- List item to add an account [CHAR LIMIT=20] --> <string name="add_account_button_label">Add account</string> <!-- NumberPicker - accessibility support --> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index a54cdf1..223d17a 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -239,7 +239,7 @@ please see styles_device_defaults.xml. </style> <!-- Notification content styles --> <style name="TextAppearance.StatusBar.EventContent"> - <item name="android:textColor">#808080</item> + <item name="android:textColor">#999999</item> <item name="android:textSize">@dimen/notification_text_size</item> </style> <style name="TextAppearance.StatusBar.EventContent.Title"> @@ -253,11 +253,14 @@ please see styles_device_defaults.xml. </style> <style name="TextAppearance.StatusBar.EventContent.Info"> <item name="android:textSize">@dimen/notification_subtext_size</item> - <item name="android:textColor">#666666</item> + <item name="android:textColor">#999999</item> </style> <style name="TextAppearance.StatusBar.EventContent.Time"> <item name="android:textSize">@dimen/notification_subtext_size</item> - <item name="android:textColor">#666666</item> + <item name="android:textColor">#999999</item> + </style> + <style name="TextAppearance.StatusBar.EventContent.Emphasis"> + <item name="android:textColor">#CCCCCC</item> </style> <style name="TextAppearance.Small.CalendarViewWeekDayView"> |
