diff options
Diffstat (limited to 'core')
88 files changed, 2328 insertions, 801 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 0f2aa46..dc12acd 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -3166,42 +3166,60 @@ public class Activity extends ContextThemeWrapper } /** + * Same as calling {@link #startActivityForResult(Intent, int, Bundle)} + * with no options. + * + * @param intent The intent to start. + * @param requestCode If >= 0, this code will be returned in + * onActivityResult() when the activity exits. + * + * @throws android.content.ActivityNotFoundException + * + * @see #startActivity + */ + public void startActivityForResult(Intent intent, int requestCode) { + startActivityForResult(intent, requestCode, null); + } + + /** * Launch an activity for which you would like a result when it finished. * When this activity exits, your * onActivityResult() method will be called with the given requestCode. * Using a negative requestCode is the same as calling * {@link #startActivity} (the activity is not launched as a sub-activity). - * + * * <p>Note that this method should only be used with Intent protocols * that are defined to return a result. In other protocols (such as * {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may * not get the result when you expect. For example, if the activity you * are launching uses the singleTask launch mode, it will not run in your * task and thus you will immediately receive a cancel result. - * + * * <p>As a special case, if you call startActivityForResult() with a requestCode * >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your * activity, then your window will not be displayed until a result is * returned back from the started activity. This is to avoid visible * flickering when redirecting to another activity. - * + * * <p>This method throws {@link android.content.ActivityNotFoundException} * if there was no Activity found to run the given Intent. - * + * * @param intent The intent to start. * @param requestCode If >= 0, this code will be returned in * onActivityResult() when the activity exits. - * + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. + * * @throws android.content.ActivityNotFoundException - * + * * @see #startActivity */ - public void startActivityForResult(Intent intent, int requestCode) { + public void startActivityForResult(Intent intent, int requestCode, Bundle options) { if (mParent == null) { Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, - intent, requestCode); + intent, requestCode, options); if (ar != null) { mMainThread.sendActivityResult( mToken, mEmbeddedID, requestCode, ar.getResultCode(), @@ -3218,11 +3236,39 @@ public class Activity extends ContextThemeWrapper mStartedActivity = true; } } else { - mParent.startActivityFromChild(this, intent, requestCode); + if (options != null) { + mParent.startActivityFromChild(this, intent, requestCode, options); + } else { + // Note we want to go through this method for compatibility with + // existing applications that may have overridden it. + mParent.startActivityFromChild(this, intent, requestCode); + } } } /** + * Same as calling {@link #startIntentSenderForResult(IntentSender, int, + * Intent, int, int, int, Bundle)} with no options. + * + * @param intent The IntentSender to launch. + * @param requestCode If >= 0, this code will be returned in + * onActivityResult() when the activity exits. + * @param fillInIntent If non-null, this will be provided as the + * intent parameter to {@link IntentSender#sendIntent}. + * @param flagsMask Intent flags in the original IntentSender that you + * would like to change. + * @param flagsValues Desired values for any bits set in + * <var>flagsMask</var> + * @param extraFlags Always set to 0. + */ + public void startIntentSenderForResult(IntentSender intent, int requestCode, + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) + throws IntentSender.SendIntentException { + startIntentSenderForResult(intent, requestCode, fillInIntent, flagsMask, + flagsValues, extraFlags, null); + } + + /** * Like {@link #startActivityForResult(Intent, int)}, but allowing you * to use a IntentSender to describe the activity to be started. If * the IntentSender is for an activity, that activity will be started @@ -3241,21 +3287,29 @@ public class Activity extends ContextThemeWrapper * @param flagsValues Desired values for any bits set in * <var>flagsMask</var> * @param extraFlags Always set to 0. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. */ public void startIntentSenderForResult(IntentSender intent, int requestCode, - Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) - throws IntentSender.SendIntentException { + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, + Bundle options) throws IntentSender.SendIntentException { if (mParent == null) { startIntentSenderForResultInner(intent, requestCode, fillInIntent, - flagsMask, flagsValues, this); + flagsMask, flagsValues, this, options); + } else if (options != null) { + mParent.startIntentSenderFromChild(this, intent, requestCode, + fillInIntent, flagsMask, flagsValues, extraFlags, options); } else { + // Note we want to go through this call for compatibility with + // existing applications that may have overridden the method. mParent.startIntentSenderFromChild(this, intent, requestCode, fillInIntent, flagsMask, flagsValues, extraFlags); } } private void startIntentSenderForResultInner(IntentSender intent, int requestCode, - Intent fillInIntent, int flagsMask, int flagsValues, Activity activity) + Intent fillInIntent, int flagsMask, int flagsValues, Activity activity, + Bundle options) throws IntentSender.SendIntentException { try { String resolvedType = null; @@ -3266,8 +3320,8 @@ public class Activity extends ContextThemeWrapper int result = ActivityManagerNative.getDefault() .startActivityIntentSender(mMainThread.getApplicationThread(), intent, fillInIntent, resolvedType, mToken, activity.mEmbeddedID, - requestCode, flagsMask, flagsValues); - if (result == IActivityManager.START_CANCELED) { + requestCode, flagsMask, flagsValues, options); + if (result == ActivityManager.START_CANCELED) { throw new IntentSender.SendIntentException(); } Instrumentation.checkStartActivityResult(result, null); @@ -3286,6 +3340,22 @@ public class Activity extends ContextThemeWrapper } /** + * Same as {@link #startActivity(Intent, Bundle)} with no options + * specified. + * + * @param intent The intent to start. + * + * @throws android.content.ActivityNotFoundException + * + * @see {@link #startActivity(Intent, Bundle)} + * @see #startActivityForResult + */ + @Override + public void startActivity(Intent intent) { + startActivity(intent, null); + } + + /** * Launch a new activity. You will not receive any information about when * the activity exits. This implementation overrides the base version, * providing information about @@ -3298,14 +3368,39 @@ public class Activity extends ContextThemeWrapper * if there was no Activity found to run the given Intent. * * @param intent The intent to start. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @throws android.content.ActivityNotFoundException - * + * + * @see {@link #startActivity(Intent)} * @see #startActivityForResult */ @Override - public void startActivity(Intent intent) { - startActivityForResult(intent, -1); + public void startActivity(Intent intent, Bundle options) { + if (options != null) { + startActivityForResult(intent, -1, options); + } else { + // Note we want to go through this call for compatibility with + // applications that may have overridden the method. + startActivityForResult(intent, -1); + } + } + + /** + * Same as {@link #startActivities(Intent[], Bundle)} with no options + * specified. + * + * @param intents The intents to start. + * + * @throws android.content.ActivityNotFoundException + * + * @see {@link #startActivities(Intent[], Bundle)} + * @see #startActivityForResult + */ + @Override + public void startActivities(Intent[] intents) { + startActivities(intents, null); } /** @@ -3321,22 +3416,23 @@ public class Activity extends ContextThemeWrapper * if there was no Activity found to run the given Intent. * * @param intents The intents to start. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @throws android.content.ActivityNotFoundException * + * @see {@link #startActivities(Intent[])} * @see #startActivityForResult */ @Override - public void startActivities(Intent[] intents) { + public void startActivities(Intent[] intents, Bundle options) { mInstrumentation.execStartActivities(this, mMainThread.getApplicationThread(), - mToken, this, intents); + mToken, this, intents, options); } /** - * Like {@link #startActivity(Intent)}, but taking a IntentSender - * to start; see - * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} - * for more information. + * Same as calling {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)} + * with no options. * * @param intent The IntentSender to launch. * @param fillInIntent If non-null, this will be provided as the @@ -3350,8 +3446,58 @@ public class Activity extends ContextThemeWrapper public void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) throws IntentSender.SendIntentException { - startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, - flagsValues, extraFlags); + startIntentSender(intent, fillInIntent, flagsMask, flagsValues, + extraFlags, null); + } + + /** + * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender + * to start; see + * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int, Bundle)} + * for more information. + * + * @param intent The IntentSender to launch. + * @param fillInIntent If non-null, this will be provided as the + * intent parameter to {@link IntentSender#sendIntent}. + * @param flagsMask Intent flags in the original IntentSender that you + * would like to change. + * @param flagsValues Desired values for any bits set in + * <var>flagsMask</var> + * @param extraFlags Always set to 0. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. + */ + public void startIntentSender(IntentSender intent, + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, + Bundle options) throws IntentSender.SendIntentException { + if (options != null) { + startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, + flagsValues, extraFlags, options); + } else { + // Note we want to go through this call for compatibility with + // applications that may have overridden the method. + startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, + flagsValues, extraFlags); + } + } + + /** + * Same as calling {@link #startActivityIfNeeded(Intent, int, Bundle)} + * with no options. + * + * @param intent The intent to start. + * @param requestCode If >= 0, this code will be returned in + * onActivityResult() when the activity exits, as described in + * {@link #startActivityForResult}. + * + * @return If a new activity was launched then true is returned; otherwise + * false is returned and you must handle the Intent yourself. + * + * @see #startActivity + * @see #startActivityForResult + */ + public boolean startActivityIfNeeded(Intent intent, int requestCode) { + return startActivityIfNeeded(intent, requestCode, null); } /** @@ -3374,6 +3520,8 @@ public class Activity extends ContextThemeWrapper * @param requestCode If >= 0, this code will be returned in * onActivityResult() when the activity exits, as described in * {@link #startActivityForResult}. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @return If a new activity was launched then true is returned; otherwise * false is returned and you must handle the Intent yourself. @@ -3381,17 +3529,17 @@ public class Activity extends ContextThemeWrapper * @see #startActivity * @see #startActivityForResult */ - public boolean startActivityIfNeeded(Intent intent, int requestCode) { + public boolean startActivityIfNeeded(Intent intent, int requestCode, Bundle options) { if (mParent == null) { - int result = IActivityManager.START_RETURN_INTENT_TO_CALLER; + int result = ActivityManager.START_RETURN_INTENT_TO_CALLER; try { intent.setAllowFds(false); result = ActivityManagerNative.getDefault() .startActivity(mMainThread.getApplicationThread(), intent, intent.resolveTypeIfNeeded(getContentResolver()), - null, 0, - mToken, mEmbeddedID, requestCode, true /* onlyIfNeeded */, - false, false, null, null, false); + mToken, mEmbeddedID, requestCode, + ActivityManager.START_FLAG_ONLY_IF_NEEDED, null, null, + options); } catch (RemoteException e) { // Empty } @@ -3408,7 +3556,7 @@ public class Activity extends ContextThemeWrapper // activity is finished, no matter what happens to it. mStartedActivity = true; } - return result != IActivityManager.START_RETURN_INTENT_TO_CALLER; + return result != ActivityManager.START_RETURN_INTENT_TO_CALLER; } throw new UnsupportedOperationException( @@ -3416,6 +3564,24 @@ public class Activity extends ContextThemeWrapper } /** + * Same as calling {@link #startNextMatchingActivity(Intent, Bundle)} with + * no options. + * + * @param intent The intent to dispatch to the next activity. For + * correct behavior, this must be the same as the Intent that started + * your own activity; the only changes you can make are to the extras + * inside of it. + * + * @return Returns a boolean indicating whether there was another Activity + * to start: true if there was a next activity to start, false if there + * wasn't. In general, if true is returned you will then want to call + * finish() on yourself. + */ + public boolean startNextMatchingActivity(Intent intent) { + return startNextMatchingActivity(intent, null); + } + + /** * Special version of starting an activity, for use when you are replacing * other activity components. You can use this to hand the Intent off * to the next Activity that can handle it. You typically call this in @@ -3425,18 +3591,20 @@ public class Activity extends ContextThemeWrapper * correct behavior, this must be the same as the Intent that started * your own activity; the only changes you can make are to the extras * inside of it. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @return Returns a boolean indicating whether there was another Activity * to start: true if there was a next activity to start, false if there * wasn't. In general, if true is returned you will then want to call * finish() on yourself. */ - public boolean startNextMatchingActivity(Intent intent) { + public boolean startNextMatchingActivity(Intent intent, Bundle options) { if (mParent == null) { try { intent.setAllowFds(false); return ActivityManagerNative.getDefault() - .startNextMatchingActivity(mToken, intent); + .startNextMatchingActivity(mToken, intent, options); } catch (RemoteException e) { // Empty } @@ -3446,7 +3614,25 @@ public class Activity extends ContextThemeWrapper throw new UnsupportedOperationException( "startNextMatchingActivity can only be called from a top-level activity"); } - + + /** + * Same as calling {@link #startActivityFromChild(Activity, Intent, int, Bundle)} + * with no options. + * + * @param child The activity making the call. + * @param intent The intent to start. + * @param requestCode Reply request code. < 0 if reply is not requested. + * + * @throws android.content.ActivityNotFoundException + * + * @see #startActivity + * @see #startActivityForResult + */ + public void startActivityFromChild(Activity child, Intent intent, + int requestCode) { + startActivityFromChild(child, intent, requestCode); + } + /** * This is called when a child activity of this one calls its * {@link #startActivity} or {@link #startActivityForResult} method. @@ -3456,7 +3642,9 @@ public class Activity extends ContextThemeWrapper * * @param child The activity making the call. * @param intent The intent to start. - * @param requestCode Reply request code. < 0 if reply is not requested. + * @param requestCode Reply request code. < 0 if reply is not requested. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @throws android.content.ActivityNotFoundException * @@ -3464,11 +3652,11 @@ public class Activity extends ContextThemeWrapper * @see #startActivityForResult */ public void startActivityFromChild(Activity child, Intent intent, - int requestCode) { + int requestCode, Bundle options) { Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, child, - intent, requestCode); + intent, requestCode, options); if (ar != null) { mMainThread.sendActivityResult( mToken, child.mEmbeddedID, requestCode, @@ -3477,6 +3665,24 @@ public class Activity extends ContextThemeWrapper } /** + * Same as calling {@link #startActivityFromFragment(Fragment, Intent, int, Bundle)} + * with no options. + * + * @param fragment The fragment making the call. + * @param intent The intent to start. + * @param requestCode Reply request code. < 0 if reply is not requested. + * + * @throws android.content.ActivityNotFoundException + * + * @see Fragment#startActivity + * @see Fragment#startActivityForResult + */ + public void startActivityFromFragment(Fragment fragment, Intent intent, + int requestCode) { + startActivityFromFragment(fragment, intent, requestCode, null); + } + + /** * This is called when a Fragment in this activity calls its * {@link Fragment#startActivity} or {@link Fragment#startActivityForResult} * method. @@ -3487,6 +3693,8 @@ public class Activity extends ContextThemeWrapper * @param fragment The fragment making the call. * @param intent The intent to start. * @param requestCode Reply request code. < 0 if reply is not requested. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @throws android.content.ActivityNotFoundException * @@ -3494,11 +3702,11 @@ public class Activity extends ContextThemeWrapper * @see Fragment#startActivityForResult */ public void startActivityFromFragment(Fragment fragment, Intent intent, - int requestCode) { + int requestCode, Bundle options) { Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, fragment, - intent, requestCode); + intent, requestCode, options); if (ar != null) { mMainThread.sendActivityResult( mToken, fragment.mWho, requestCode, @@ -3507,6 +3715,18 @@ public class Activity extends ContextThemeWrapper } /** + * Same as calling {@link #startIntentSenderFromChild(Activity, IntentSender, + * int, Intent, int, int, int, Bundle)} with no options. + */ + public void startIntentSenderFromChild(Activity child, IntentSender intent, + int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, + int extraFlags) + throws IntentSender.SendIntentException { + startIntentSenderFromChild(child, intent, requestCode, fillInIntent, + flagsMask, flagsValues, extraFlags, null); + } + + /** * Like {@link #startActivityFromChild(Activity, Intent, int)}, but * taking a IntentSender; see * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} @@ -3514,10 +3734,10 @@ public class Activity extends ContextThemeWrapper */ public void startIntentSenderFromChild(Activity child, IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, - int extraFlags) + int extraFlags, Bundle options) throws IntentSender.SendIntentException { startIntentSenderForResultInner(intent, requestCode, fillInIntent, - flagsMask, flagsValues, child); + flagsMask, flagsValues, child, options); } /** @@ -3843,7 +4063,7 @@ public class Activity extends ContextThemeWrapper data.setAllowFds(false); IIntentSender target = ActivityManagerNative.getDefault().getIntentSender( - IActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName, + ActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName, mParent == null ? mToken : mParent.mToken, mEmbeddedID, requestCode, new Intent[] { data }, null, flags); return target != null ? new PendingIntent(target) : null; diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 59c803e..d056b17 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -59,6 +59,154 @@ public class ActivityManager { private final Context mContext; private final Handler mHandler; + /** + * Result for IActivityManager.startActivity: an error where the + * start had to be canceled. + * @hide + */ + public static final int START_CANCELED = -6; + + /** + * Result for IActivityManager.startActivity: an error where the + * thing being started is not an activity. + * @hide + */ + public static final int START_NOT_ACTIVITY = -5; + + /** + * Result for IActivityManager.startActivity: an error where the + * caller does not have permission to start the activity. + * @hide + */ + public static final int START_PERMISSION_DENIED = -4; + + /** + * Result for IActivityManager.startActivity: an error where the + * caller has requested both to forward a result and to receive + * a result. + * @hide + */ + public static final int START_FORWARD_AND_REQUEST_CONFLICT = -3; + + /** + * Result for IActivityManager.startActivity: an error where the + * requested class is not found. + * @hide + */ + public static final int START_CLASS_NOT_FOUND = -2; + + /** + * Result for IActivityManager.startActivity: an error where the + * given Intent could not be resolved to an activity. + * @hide + */ + public static final int START_INTENT_NOT_RESOLVED = -1; + + /** + * Result for IActivityManaqer.startActivity: the activity was started + * successfully as normal. + * @hide + */ + public static final int START_SUCCESS = 0; + + /** + * Result for IActivityManaqer.startActivity: the caller asked that the Intent not + * be executed if it is the recipient, and that is indeed the case. + * @hide + */ + public static final int START_RETURN_INTENT_TO_CALLER = 1; + + /** + * Result for IActivityManaqer.startActivity: activity wasn't really started, but + * a task was simply brought to the foreground. + * @hide + */ + public static final int START_TASK_TO_FRONT = 2; + + /** + * Result for IActivityManaqer.startActivity: activity wasn't really started, but + * the given Intent was given to the existing top activity. + * @hide + */ + public static final int START_DELIVERED_TO_TOP = 3; + + /** + * Result for IActivityManaqer.startActivity: request was canceled because + * app switches are temporarily canceled to ensure the user's last request + * (such as pressing home) is performed. + * @hide + */ + public static final int START_SWITCHES_CANCELED = 4; + + /** + * Flag for IActivityManaqer.startActivity: do special start mode where + * a new activity is launched only if it is needed. + * @hide + */ + public static final int START_FLAG_ONLY_IF_NEEDED = 1<<0; + + /** + * Flag for IActivityManaqer.startActivity: launch the app for + * debugging. + * @hide + */ + public static final int START_FLAG_DEBUG = 1<<1; + + /** + * Flag for IActivityManaqer.startActivity: launch the app for + * OpenGL tracing. + * @hide + */ + public static final int START_FLAG_OPENGL_TRACES = 1<<2; + + /** + * Flag for IActivityManaqer.startActivity: if the app is being + * launched for profiling, automatically stop the profiler once done. + * @hide + */ + public static final int START_FLAG_AUTO_STOP_PROFILER = 1<<3; + + /** + * Result for IActivityManaqer.broadcastIntent: success! + * @hide + */ + public static final int BROADCAST_SUCCESS = 0; + + /** + * Result for IActivityManaqer.broadcastIntent: attempt to broadcast + * a sticky intent without appropriate permission. + * @hide + */ + public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1; + + /** + * Type for IActivityManaqer.getIntentSender: this PendingIntent is + * for a sendBroadcast operation. + * @hide + */ + public static final int INTENT_SENDER_BROADCAST = 1; + + /** + * Type for IActivityManaqer.getIntentSender: this PendingIntent is + * for a startActivity operation. + * @hide + */ + public static final int INTENT_SENDER_ACTIVITY = 2; + + /** + * Type for IActivityManaqer.getIntentSender: this PendingIntent is + * for an activity result operation. + * @hide + */ + public static final int INTENT_SENDER_ACTIVITY_RESULT = 3; + + /** + * Type for IActivityManaqer.getIntentSender: this PendingIntent is + * for a startService operation. + * @hide + */ + public static final int INTENT_SENDER_SERVICE = 4; + /*package*/ ActivityManager(Context context, Handler handler) { mContext = context; mHandler = handler; diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 7daaf7d..732d211 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -117,22 +117,18 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IApplicationThread app = ApplicationThreadNative.asInterface(b); Intent intent = Intent.CREATOR.createFromParcel(data); String resolvedType = data.readString(); - Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR); - int grantedMode = data.readInt(); IBinder resultTo = data.readStrongBinder(); String resultWho = data.readString(); int requestCode = data.readInt(); - boolean onlyIfNeeded = data.readInt() != 0; - boolean debug = data.readInt() != 0; - boolean openglTrace = data.readInt() != 0; + int startFlags = data.readInt(); String profileFile = data.readString(); ParcelFileDescriptor profileFd = data.readInt() != 0 ? data.readFileDescriptor() : null; - boolean autoStopProfiler = data.readInt() != 0; + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; int result = startActivity(app, intent, resolvedType, - grantedUriPermissions, grantedMode, resultTo, resultWho, - requestCode, onlyIfNeeded, debug, openglTrace, - profileFile, profileFd, autoStopProfiler); + resultTo, resultWho, requestCode, startFlags, + profileFile, profileFd, options); reply.writeNoException(); reply.writeInt(result); return true; @@ -145,22 +141,18 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IApplicationThread app = ApplicationThreadNative.asInterface(b); Intent intent = Intent.CREATOR.createFromParcel(data); String resolvedType = data.readString(); - Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR); - int grantedMode = data.readInt(); IBinder resultTo = data.readStrongBinder(); String resultWho = data.readString(); int requestCode = data.readInt(); - boolean onlyIfNeeded = data.readInt() != 0; - boolean debug = data.readInt() != 0; - boolean openglTrace = data.readInt() != 0; + int startFlags = data.readInt(); String profileFile = data.readString(); ParcelFileDescriptor profileFd = data.readInt() != 0 ? data.readFileDescriptor() : null; - boolean autoStopProfiler = data.readInt() != 0; + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; WaitResult result = startActivityAndWait(app, intent, resolvedType, - grantedUriPermissions, grantedMode, resultTo, resultWho, - requestCode, onlyIfNeeded, debug, openglTrace, - profileFile, profileFd, autoStopProfiler); + resultTo, resultWho, requestCode, startFlags, + profileFile, profileFd, options); reply.writeNoException(); result.writeToParcel(reply, 0); return true; @@ -173,17 +165,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IApplicationThread app = ApplicationThreadNative.asInterface(b); Intent intent = Intent.CREATOR.createFromParcel(data); String resolvedType = data.readString(); - Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR); - int grantedMode = data.readInt(); IBinder resultTo = data.readStrongBinder(); String resultWho = data.readString(); int requestCode = data.readInt(); - boolean onlyIfNeeded = data.readInt() != 0; - boolean debug = data.readInt() != 0; + int startFlags = data.readInt(); Configuration config = Configuration.CREATOR.createFromParcel(data); + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; int result = startActivityWithConfig(app, intent, resolvedType, - grantedUriPermissions, grantedMode, resultTo, resultWho, - requestCode, onlyIfNeeded, debug, config); + resultTo, resultWho, requestCode, startFlags, config, options); reply.writeNoException(); reply.writeInt(result); return true; @@ -205,9 +195,11 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM int requestCode = data.readInt(); int flagsMask = data.readInt(); int flagsValues = data.readInt(); + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; int result = startActivityIntentSender(app, intent, fillInIntent, resolvedType, resultTo, resultWho, - requestCode, flagsMask, flagsValues); + requestCode, flagsMask, flagsValues, options); reply.writeNoException(); reply.writeInt(result); return true; @@ -218,7 +210,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM data.enforceInterface(IActivityManager.descriptor); IBinder callingActivity = data.readStrongBinder(); Intent intent = Intent.CREATOR.createFromParcel(data); - boolean result = startNextMatchingActivity(callingActivity, intent); + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; + boolean result = startNextMatchingActivity(callingActivity, intent, options); reply.writeNoException(); reply.writeInt(result ? 1 : 0); return true; @@ -1231,9 +1225,11 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM IBinder resultTo = data.readStrongBinder(); String resultWho = data.readString(); int requestCode = data.readInt(); - boolean onlyIfNeeded = data.readInt() != 0; + int startFlags = data.readInt(); + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; int result = startActivityInPackage(uid, intent, resolvedType, - resultTo, resultWho, requestCode, onlyIfNeeded); + resultTo, resultWho, requestCode, startFlags, options); reply.writeNoException(); reply.writeInt(result); return true; @@ -1412,7 +1408,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM Intent[] intents = data.createTypedArray(Intent.CREATOR); String[] resolvedTypes = data.createStringArray(); IBinder resultTo = data.readStrongBinder(); - int result = startActivitiesInPackage(uid, intents, resolvedTypes, resultTo); + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; + int result = startActivitiesInPackage(uid, intents, resolvedTypes, + resultTo, options); reply.writeNoException(); reply.writeInt(result); return true; @@ -1426,7 +1425,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM Intent[] intents = data.createTypedArray(Intent.CREATOR); String[] resolvedTypes = data.createStringArray(); IBinder resultTo = data.readStrongBinder(); - int result = startActivities(app, intents, resolvedTypes, resultTo); + Bundle options = data.readInt() != 0 + ? Bundle.CREATOR.createFromParcel(data) : null; + int result = startActivities(app, intents, resolvedTypes, resultTo, + options); reply.writeNoException(); reply.writeInt(result); return true; @@ -1618,25 +1620,19 @@ class ActivityManagerProxy implements IActivityManager } public int startActivity(IApplicationThread caller, Intent intent, - String resolvedType, Uri[] grantedUriPermissions, int grantedMode, - IBinder resultTo, String resultWho, - int requestCode, boolean onlyIfNeeded, - boolean debug, boolean openglTrace, String profileFile, ParcelFileDescriptor profileFd, - boolean autoStopProfiler) throws RemoteException { + String resolvedType, IBinder resultTo, String resultWho, int requestCode, + int startFlags, String profileFile, + ParcelFileDescriptor profileFd, Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); intent.writeToParcel(data, 0); data.writeString(resolvedType); - data.writeTypedArray(grantedUriPermissions, 0); - data.writeInt(grantedMode); data.writeStrongBinder(resultTo); data.writeString(resultWho); data.writeInt(requestCode); - data.writeInt(onlyIfNeeded ? 1 : 0); - data.writeInt(debug ? 1 : 0); - data.writeInt(openglTrace ? 1 : 0); + data.writeInt(startFlags); data.writeString(profileFile); if (profileFd != null) { data.writeInt(1); @@ -1644,7 +1640,12 @@ class ActivityManagerProxy implements IActivityManager } else { data.writeInt(0); } - data.writeInt(autoStopProfiler ? 1 : 0); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); @@ -1653,25 +1654,19 @@ class ActivityManagerProxy implements IActivityManager return result; } public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent, - String resolvedType, Uri[] grantedUriPermissions, int grantedMode, - IBinder resultTo, String resultWho, - int requestCode, boolean onlyIfNeeded, - boolean debug, boolean openglTrace, String profileFile, ParcelFileDescriptor profileFd, - boolean autoStopProfiler) throws RemoteException { + String resolvedType, IBinder resultTo, String resultWho, + int requestCode, int startFlags, String profileFile, + ParcelFileDescriptor profileFd, Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); intent.writeToParcel(data, 0); data.writeString(resolvedType); - data.writeTypedArray(grantedUriPermissions, 0); - data.writeInt(grantedMode); data.writeStrongBinder(resultTo); data.writeString(resultWho); data.writeInt(requestCode); - data.writeInt(onlyIfNeeded ? 1 : 0); - data.writeInt(debug ? 1 : 0); - data.writeInt(openglTrace ? 1 : 0); + data.writeInt(startFlags); data.writeString(profileFile); if (profileFd != null) { data.writeInt(1); @@ -1679,7 +1674,12 @@ class ActivityManagerProxy implements IActivityManager } else { data.writeInt(0); } - data.writeInt(autoStopProfiler ? 1 : 0); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0); reply.readException(); WaitResult result = WaitResult.CREATOR.createFromParcel(reply); @@ -1688,24 +1688,26 @@ class ActivityManagerProxy implements IActivityManager return result; } public int startActivityWithConfig(IApplicationThread caller, Intent intent, - String resolvedType, Uri[] grantedUriPermissions, int grantedMode, - IBinder resultTo, String resultWho, - int requestCode, boolean onlyIfNeeded, - boolean debug, Configuration config) throws RemoteException { + String resolvedType, IBinder resultTo, String resultWho, + int requestCode, int startFlags, Configuration config, + Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); intent.writeToParcel(data, 0); data.writeString(resolvedType); - data.writeTypedArray(grantedUriPermissions, 0); - data.writeInt(grantedMode); data.writeStrongBinder(resultTo); data.writeString(resultWho); data.writeInt(requestCode); - data.writeInt(onlyIfNeeded ? 1 : 0); - data.writeInt(debug ? 1 : 0); + data.writeInt(startFlags); config.writeToParcel(data, 0); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); @@ -1716,7 +1718,7 @@ class ActivityManagerProxy implements IActivityManager public int startActivityIntentSender(IApplicationThread caller, IntentSender intent, Intent fillInIntent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int flagsMask, int flagsValues) throws RemoteException { + int flagsMask, int flagsValues, Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); @@ -1734,6 +1736,12 @@ class ActivityManagerProxy implements IActivityManager data.writeInt(requestCode); data.writeInt(flagsMask); data.writeInt(flagsValues); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); @@ -1742,12 +1750,18 @@ class ActivityManagerProxy implements IActivityManager return result; } public boolean startNextMatchingActivity(IBinder callingActivity, - Intent intent) throws RemoteException { + Intent intent, Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(callingActivity); intent.writeToParcel(data, 0); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); @@ -3075,7 +3089,7 @@ class ActivityManagerProxy implements IActivityManager public int startActivityInPackage(int uid, Intent intent, String resolvedType, IBinder resultTo, - String resultWho, int requestCode, boolean onlyIfNeeded) + String resultWho, int requestCode, int startFlags, Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -3086,7 +3100,13 @@ class ActivityManagerProxy implements IActivityManager data.writeStrongBinder(resultTo); data.writeString(resultWho); data.writeInt(requestCode); - data.writeInt(onlyIfNeeded ? 1 : 0); + data.writeInt(startFlags); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITY_IN_PACKAGE_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); @@ -3339,7 +3359,8 @@ class ActivityManagerProxy implements IActivityManager } public int startActivities(IApplicationThread caller, - Intent[] intents, String[] resolvedTypes, IBinder resultTo) throws RemoteException { + Intent[] intents, String[] resolvedTypes, IBinder resultTo, + Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); @@ -3347,6 +3368,12 @@ class ActivityManagerProxy implements IActivityManager data.writeTypedArray(intents, 0); data.writeStringArray(resolvedTypes); data.writeStrongBinder(resultTo); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); @@ -3356,7 +3383,8 @@ class ActivityManagerProxy implements IActivityManager } public int startActivitiesInPackage(int uid, - Intent[] intents, String[] resolvedTypes, IBinder resultTo) throws RemoteException { + Intent[] intents, String[] resolvedTypes, IBinder resultTo, + Bundle options) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); @@ -3364,6 +3392,12 @@ class ActivityManagerProxy implements IActivityManager data.writeTypedArray(intents, 0); data.writeStringArray(resolvedTypes); data.writeStrongBinder(resultTo); + if (options != null) { + data.writeInt(1); + options.writeToParcel(data, 0); + } else { + data.writeInt(0); + } mRemote.transact(START_ACTIVITIES_IN_PACKAGE_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 2610d87..2a3e213 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -1802,7 +1802,7 @@ public final class ActivityThread { if (aInfo == null) { // Throw an exception. Instrumentation.checkStartActivityResult( - IActivityManager.START_CLASS_NOT_FOUND, intent); + ActivityManager.START_CLASS_NOT_FOUND, intent); } return aInfo; } diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index e348b87..7043a73 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -852,6 +852,11 @@ class ContextImpl extends Context { @Override public void startActivity(Intent intent) { + startActivity(intent, null); + } + + @Override + public void startActivity(Intent intent, Bundle options) { if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) { throw new AndroidRuntimeException( "Calling startActivity() from outside of an Activity " @@ -860,11 +865,16 @@ class ContextImpl extends Context { } mMainThread.getInstrumentation().execStartActivity( getOuterContext(), mMainThread.getApplicationThread(), null, - (Activity)null, intent, -1); + (Activity)null, intent, -1, options); } @Override public void startActivities(Intent[] intents) { + startActivities(intents, null); + } + + @Override + public void startActivities(Intent[] intents, Bundle options) { if ((intents[0].getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) { throw new AndroidRuntimeException( "Calling startActivities() from outside of an Activity " @@ -873,13 +883,20 @@ class ContextImpl extends Context { } mMainThread.getInstrumentation().execStartActivities( getOuterContext(), mMainThread.getApplicationThread(), null, - (Activity)null, intents); + (Activity)null, intents, options); } @Override public void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) throws IntentSender.SendIntentException { + startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags, null); + } + + @Override + public void startIntentSender(IntentSender intent, Intent fillInIntent, + int flagsMask, int flagsValues, int extraFlags, Bundle options) + throws IntentSender.SendIntentException { try { String resolvedType = null; if (fillInIntent != null) { @@ -889,8 +906,8 @@ class ContextImpl extends Context { int result = ActivityManagerNative.getDefault() .startActivityIntentSender(mMainThread.getApplicationThread(), intent, fillInIntent, resolvedType, null, null, - 0, flagsMask, flagsValues); - if (result == IActivityManager.START_CANCELED) { + 0, flagsMask, flagsValues, options); + if (result == ActivityManager.START_CANCELED) { throw new IntentSender.SendIntentException(); } Instrumentation.checkStartActivityResult(result, null); diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 492fcc7..dadc4e5 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -961,27 +961,55 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene mLoaderManager = mActivity.getLoaderManager(mIndex, mLoadersStarted, true); return mLoaderManager; } - + /** * Call {@link Activity#startActivity(Intent)} on the fragment's * containing Activity. */ public void startActivity(Intent intent) { + startActivity(intent, null); + } + + /** + * Call {@link Activity#startActivity(Intent, Bundle)} on the fragment's + * containing Activity. + */ + public void startActivity(Intent intent, Bundle options) { if (mActivity == null) { throw new IllegalStateException("Fragment " + this + " not attached to Activity"); } - mActivity.startActivityFromFragment(this, intent, -1); + if (options != null) { + mActivity.startActivityFromFragment(this, intent, -1, options); + } else { + // Note we want to go through this call for compatibility with + // applications that may have overridden the method. + mActivity.startActivityFromFragment(this, intent, -1); + } } - + /** * Call {@link Activity#startActivityForResult(Intent, int)} on the fragment's * containing Activity. */ public void startActivityForResult(Intent intent, int requestCode) { + startActivityForResult(intent, requestCode, null); + } + + /** + * Call {@link Activity#startActivityForResult(Intent, int, Bundle)} on the fragment's + * containing Activity. + */ + public void startActivityForResult(Intent intent, int requestCode, Bundle options) { if (mActivity == null) { throw new IllegalStateException("Fragment " + this + " not attached to Activity"); } - mActivity.startActivityFromFragment(this, intent, requestCode); + if (options != null) { + mActivity.startActivityFromFragment(this, intent, requestCode, options); + } else { + // Note we want to go through this call for compatibility with + // applications that may have overridden the method. + mActivity.startActivityFromFragment(this, intent, requestCode, options); + } } /** diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index acebf58..9306bd2 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -50,57 +50,24 @@ import java.util.List; * {@hide} */ public interface IActivityManager extends IInterface { - /** - * Returned by startActivity() if the start request was canceled because - * app switches are temporarily canceled to ensure the user's last request - * (such as pressing home) is performed. - */ - public static final int START_SWITCHES_CANCELED = 4; - /** - * Returned by startActivity() if an activity wasn't really started, but - * the given Intent was given to the existing top activity. - */ - public static final int START_DELIVERED_TO_TOP = 3; - /** - * Returned by startActivity() if an activity wasn't really started, but - * a task was simply brought to the foreground. - */ - public static final int START_TASK_TO_FRONT = 2; - /** - * Returned by startActivity() if the caller asked that the Intent not - * be executed if it is the recipient, and that is indeed the case. - */ - public static final int START_RETURN_INTENT_TO_CALLER = 1; - /** - * Activity was started successfully as normal. - */ - public static final int START_SUCCESS = 0; - public static final int START_INTENT_NOT_RESOLVED = -1; - public static final int START_CLASS_NOT_FOUND = -2; - public static final int START_FORWARD_AND_REQUEST_CONFLICT = -3; - public static final int START_PERMISSION_DENIED = -4; - public static final int START_NOT_ACTIVITY = -5; - public static final int START_CANCELED = -6; public int startActivity(IApplicationThread caller, - Intent intent, String resolvedType, Uri[] grantedUriPermissions, - int grantedMode, IBinder resultTo, String resultWho, int requestCode, - boolean onlyIfNeeded, boolean debug, boolean openglTrace, String profileFile, - ParcelFileDescriptor profileFd, boolean autoStopProfiler) throws RemoteException; + Intent intent, String resolvedType, IBinder resultTo, String resultWho, + int requestCode, int flags, String profileFile, + ParcelFileDescriptor profileFd, Bundle options) throws RemoteException; public WaitResult startActivityAndWait(IApplicationThread caller, - Intent intent, String resolvedType, Uri[] grantedUriPermissions, - int grantedMode, IBinder resultTo, String resultWho, int requestCode, - boolean onlyIfNeeded, boolean debug, boolean openglTrace, String profileFile, - ParcelFileDescriptor profileFd, boolean autoStopProfiler) throws RemoteException; + Intent intent, String resolvedType, IBinder resultTo, String resultWho, + int requestCode, int flags, String profileFile, + ParcelFileDescriptor profileFd, Bundle options) throws RemoteException; public int startActivityWithConfig(IApplicationThread caller, - Intent intent, String resolvedType, Uri[] grantedUriPermissions, - int grantedMode, IBinder resultTo, String resultWho, int requestCode, - boolean onlyIfNeeded, boolean debug, Configuration newConfig) throws RemoteException; + Intent intent, String resolvedType, IBinder resultTo, String resultWho, + int requestCode, int startFlags, Configuration newConfig, + Bundle options) throws RemoteException; public int startActivityIntentSender(IApplicationThread caller, IntentSender intent, Intent fillInIntent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int flagsMask, int flagsValues) throws RemoteException; + int flagsMask, int flagsValues, Bundle options) throws RemoteException; public boolean startNextMatchingActivity(IBinder callingActivity, - Intent intent) throws RemoteException; + Intent intent, Bundle options) throws RemoteException; public boolean finishActivity(IBinder token, int code, Intent data) throws RemoteException; public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException; @@ -109,8 +76,6 @@ public interface IActivityManager extends IInterface { IIntentReceiver receiver, IntentFilter filter, String requiredPermission) throws RemoteException; public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException; - public static final int BROADCAST_SUCCESS = 0; - public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1; public int broadcastIntent(IApplicationThread caller, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, Bundle map, String requiredPermission, @@ -201,10 +166,6 @@ public interface IActivityManager extends IInterface { public ComponentName getActivityClassForToken(IBinder token) throws RemoteException; public String getPackageForToken(IBinder token) throws RemoteException; - public static final int INTENT_SENDER_BROADCAST = 1; - public static final int INTENT_SENDER_ACTIVITY = 2; - public static final int INTENT_SENDER_ACTIVITY_RESULT = 3; - public static final int INTENT_SENDER_SERVICE = 4; public IIntentSender getIntentSender(int type, String packageName, IBinder token, String resultWho, int requestCode, Intent[] intents, String[] resolvedTypes, @@ -302,7 +263,7 @@ public interface IActivityManager extends IInterface { public int startActivityInPackage(int uid, Intent intent, String resolvedType, IBinder resultTo, - String resultWho, int requestCode, boolean onlyIfNeeded) + String resultWho, int requestCode, int startFlags, Bundle options) throws RemoteException; public void killApplicationWithUid(String pkg, int uid) throws RemoteException; @@ -342,9 +303,11 @@ public interface IActivityManager extends IInterface { ParcelFileDescriptor fd) throws RemoteException; public int startActivities(IApplicationThread caller, - Intent[] intents, String[] resolvedTypes, IBinder resultTo) throws RemoteException; + Intent[] intents, String[] resolvedTypes, IBinder resultTo, + Bundle options) throws RemoteException; public int startActivitiesInPackage(int uid, - Intent[] intents, String[] resolvedTypes, IBinder resultTo) throws RemoteException; + Intent[] intents, String[] resolvedTypes, IBinder resultTo, + Bundle options) throws RemoteException; public int getFrontActivityScreenCompatMode() throws RemoteException; public void setFrontActivityScreenCompatMode(int mode) throws RemoteException; diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index a34e1d3..16299de 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -1346,6 +1346,7 @@ public class Instrumentation { * @param intent The actual Intent to start. * @param requestCode Identifier for this request's result; less than zero * if the caller is not expecting a result. + * @param options Addition options. * * @return To force the return of a particular result, return an * ActivityResult object containing the desired data; otherwise @@ -1361,7 +1362,7 @@ public class Instrumentation { */ public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, - Intent intent, int requestCode) { + Intent intent, int requestCode, Bundle options) { IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1383,8 +1384,8 @@ public class Instrumentation { int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), - null, 0, token, target != null ? target.mEmbeddedID : null, - requestCode, false, false, false, null, null, false); + token, target != null ? target.mEmbeddedID : null, + requestCode, 0, null, null, options); checkStartActivityResult(result, intent); } catch (RemoteException e) { } @@ -1400,7 +1401,7 @@ public class Instrumentation { * {@hide} */ public void execStartActivities(Context who, IBinder contextThread, - IBinder token, Activity target, Intent[] intents) { + IBinder token, Activity target, Intent[] intents, Bundle options) { IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1424,7 +1425,7 @@ public class Instrumentation { resolvedTypes[i] = intents[i].resolveTypeIfNeeded(who.getContentResolver()); } int result = ActivityManagerNative.getDefault() - .startActivities(whoThread, intents, resolvedTypes, token); + .startActivities(whoThread, intents, resolvedTypes, token, options); checkStartActivityResult(result, intents[0]); } catch (RemoteException e) { } @@ -1459,7 +1460,7 @@ public class Instrumentation { */ public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Fragment target, - Intent intent, int requestCode) { + Intent intent, int requestCode, Bundle options) { IApplicationThread whoThread = (IApplicationThread) contextThread; if (mActivityMonitors != null) { synchronized (mSync) { @@ -1481,9 +1482,8 @@ public class Instrumentation { int result = ActivityManagerNative.getDefault() .startActivity(whoThread, intent, intent.resolveTypeIfNeeded(who.getContentResolver()), - null, 0, token, target != null ? target.mWho : null, - requestCode, false, false /* debug */, false /* openglTrace */, - null, null, false); + token, target != null ? target.mWho : null, + requestCode, 0, null, null, options); checkStartActivityResult(result, intent); } catch (RemoteException e) { } @@ -1502,13 +1502,13 @@ public class Instrumentation { } /*package*/ static void checkStartActivityResult(int res, Object intent) { - if (res >= IActivityManager.START_SUCCESS) { + if (res >= ActivityManager.START_SUCCESS) { return; } switch (res) { - case IActivityManager.START_INTENT_NOT_RESOLVED: - case IActivityManager.START_CLASS_NOT_FOUND: + case ActivityManager.START_INTENT_NOT_RESOLVED: + case ActivityManager.START_CLASS_NOT_FOUND: if (intent instanceof Intent && ((Intent)intent).getComponent() != null) throw new ActivityNotFoundException( "Unable to find explicit activity class " @@ -1516,13 +1516,13 @@ public class Instrumentation { + "; have you declared this activity in your AndroidManifest.xml?"); throw new ActivityNotFoundException( "No Activity found to handle " + intent); - case IActivityManager.START_PERMISSION_DENIED: + case ActivityManager.START_PERMISSION_DENIED: throw new SecurityException("Not allowed to start activity " + intent); - case IActivityManager.START_FORWARD_AND_REQUEST_CONFLICT: + case ActivityManager.START_FORWARD_AND_REQUEST_CONFLICT: throw new AndroidRuntimeException( "FORWARD_RESULT_FLAG used while also requesting a result"); - case IActivityManager.START_NOT_ACTIVITY: + case ActivityManager.START_NOT_ACTIVITY: throw new IllegalArgumentException( "PendingIntent is not an activity"); default: diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java index c95066c..57192c3 100644 --- a/core/java/android/app/PendingIntent.java +++ b/core/java/android/app/PendingIntent.java @@ -195,7 +195,7 @@ public final class PendingIntent implements Parcelable { intent.setAllowFds(false); IIntentSender target = ActivityManagerNative.getDefault().getIntentSender( - IActivityManager.INTENT_SENDER_ACTIVITY, packageName, + ActivityManager.INTENT_SENDER_ACTIVITY, packageName, null, null, requestCode, new Intent[] { intent }, resolvedType != null ? new String[] { resolvedType } : null, flags); return target != null ? new PendingIntent(target) : null; @@ -256,7 +256,7 @@ public final class PendingIntent implements Parcelable { try { IIntentSender target = ActivityManagerNative.getDefault().getIntentSender( - IActivityManager.INTENT_SENDER_ACTIVITY, packageName, + ActivityManager.INTENT_SENDER_ACTIVITY, packageName, null, null, requestCode, intents, resolvedTypes, flags); return target != null ? new PendingIntent(target) : null; } catch (RemoteException e) { @@ -292,7 +292,7 @@ public final class PendingIntent implements Parcelable { intent.setAllowFds(false); IIntentSender target = ActivityManagerNative.getDefault().getIntentSender( - IActivityManager.INTENT_SENDER_BROADCAST, packageName, + ActivityManager.INTENT_SENDER_BROADCAST, packageName, null, null, requestCode, new Intent[] { intent }, resolvedType != null ? new String[] { resolvedType } : null, flags); return target != null ? new PendingIntent(target) : null; @@ -330,7 +330,7 @@ public final class PendingIntent implements Parcelable { intent.setAllowFds(false); IIntentSender target = ActivityManagerNative.getDefault().getIntentSender( - IActivityManager.INTENT_SENDER_SERVICE, packageName, + ActivityManager.INTENT_SENDER_SERVICE, packageName, null, null, requestCode, new Intent[] { intent }, resolvedType != null ? new String[] { resolvedType } : null, flags); return target != null ? new PendingIntent(target) : null; diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 0e9e256..19a5bc0 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -818,6 +818,19 @@ public abstract class Context { public abstract void clearWallpaper() throws IOException; /** + * Same as {@link #startActivity(Intent, Bundle)} with no options + * specified. + * + * @param intent The description of the activity to start. + * + * @throws ActivityNotFoundException + * + * @see {@link #startActivity(Intent, Bundle)} + * @see PackageManager#resolveActivity + */ + public abstract void startActivity(Intent intent); + + /** * Launch a new activity. You will not receive any information about when * the activity exits. * @@ -832,12 +845,28 @@ public abstract class Context { * if there was no Activity found to run the given Intent. * * @param intent The description of the activity to start. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @throws ActivityNotFoundException * + * @see {@link #startActivity(Intent)} * @see PackageManager#resolveActivity */ - public abstract void startActivity(Intent intent); + public abstract void startActivity(Intent intent, Bundle options); + + /** + * Same as {@link #startActivities(Intent[], Bundle)} with no options + * specified. + * + * @param intents An array of Intents to be started. + * + * @throws ActivityNotFoundException + * + * @see {@link #startActivities(Intent[], Bundle)} + * @see PackageManager#resolveActivity + */ + public abstract void startActivities(Intent[] intents); /** * Launch multiple new activities. This is generally the same as calling @@ -854,15 +883,38 @@ public abstract class Context { * list may be on it, some not), so you probably want to avoid such situations. * * @param intents An array of Intents to be started. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. * * @throws ActivityNotFoundException * + * @see {@link #startActivities(Intent[])} * @see PackageManager#resolveActivity */ - public abstract void startActivities(Intent[] intents); + public abstract void startActivities(Intent[] intents, Bundle options); + + /** + * Same as {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)} + * with no options specified. + * + * @param intent The IntentSender to launch. + * @param fillInIntent If non-null, this will be provided as the + * intent parameter to {@link IntentSender#sendIntent}. + * @param flagsMask Intent flags in the original IntentSender that you + * would like to change. + * @param flagsValues Desired values for any bits set in + * <var>flagsMask</var> + * @param extraFlags Always set to 0. + * + * @see #startActivity(Intent) + * @see #startIntentSender(IntentSender, Intent, int, int, int, Bundle) + */ + public abstract void startIntentSender(IntentSender intent, + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) + throws IntentSender.SendIntentException; /** - * Like {@link #startActivity(Intent)}, but taking a IntentSender + * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender * to start. If the IntentSender is for an activity, that activity will be started * as if you had called the regular {@link #startActivity(Intent)} * here; otherwise, its associated action will be executed (such as @@ -877,10 +929,15 @@ public abstract class Context { * @param flagsValues Desired values for any bits set in * <var>flagsMask</var> * @param extraFlags Always set to 0. + * @param options Additional options for how the Activity should be started. + * May be null if there are no options. + * + * @see #startActivity(Intent, Bundle) + * @see #startIntentSender(IntentSender, Intent, int, int, int) */ public abstract void startIntentSender(IntentSender intent, - Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) - throws IntentSender.SendIntentException; + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, + Bundle options) throws IntentSender.SendIntentException; /** * Broadcast the given intent to all interested BroadcastReceivers. This diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index 5ba9dcc..6b950e0 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -277,17 +277,35 @@ public class ContextWrapper extends Context { } @Override + public void startActivity(Intent intent, Bundle options) { + mBase.startActivity(intent, options); + } + + @Override public void startActivities(Intent[] intents) { mBase.startActivities(intents); } @Override + public void startActivities(Intent[] intents, Bundle options) { + mBase.startActivities(intents, options); + } + + @Override public void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) throws IntentSender.SendIntentException { mBase.startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags); } + + @Override + public void startIntentSender(IntentSender intent, + Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, + Bundle options) throws IntentSender.SendIntentException { + mBase.startIntentSender(intent, fillInIntent, flagsMask, + flagsValues, extraFlags, options); + } @Override public void sendBroadcast(Intent intent) { diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 2775c7b..aa92efb 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -437,6 +437,13 @@ public class Camera { * instances of the same camera, or across multiple runs of the same * program. * + * <p>If you are using the preview data to create video or still images, + * strongly consider using {@link android.media.MediaActionSound} to + * properly indicate image capture or recording start/stop to the user.</p> + * + * @see android.media.MediaActionSound + * @see android.graphics.SurfaceTexture + * @see android.view.TextureView * @param surfaceTexture the {@link SurfaceTexture} to which the preview * images are to be sent or null to remove the current preview surface * texture @@ -512,13 +519,19 @@ public class Camera { public native final boolean previewEnabled(); /** - * Installs a callback to be invoked for every preview frame in addition + * <p>Installs a callback to be invoked for every preview frame in addition * to displaying them on the screen. The callback will be repeatedly called * for as long as preview is active. This method can be called at any time, - * even while preview is live. Any other preview callbacks are overridden. + * even while preview is live. Any other preview callbacks are + * overridden.</p> + * + * <p>If you are using the preview data to create video or still images, + * strongly consider using {@link android.media.MediaActionSound} to + * properly indicate image capture or recording start/stop to the user.</p> * * @param cb a callback object that receives a copy of each preview frame, * or null to stop receiving callbacks. + * @see android.media.MediaActionSound */ public final void setPreviewCallback(PreviewCallback cb) { mPreviewCallback = cb; @@ -530,13 +543,18 @@ public class Camera { } /** - * Installs a callback to be invoked for the next preview frame in addition - * to displaying it on the screen. After one invocation, the callback is - * cleared. This method can be called any time, even when preview is live. - * Any other preview callbacks are overridden. + * <p>Installs a callback to be invoked for the next preview frame in + * addition to displaying it on the screen. After one invocation, the + * callback is cleared. This method can be called any time, even when + * preview is live. Any other preview callbacks are overridden.</p> + * + * <p>If you are using the preview data to create video or still images, + * strongly consider using {@link android.media.MediaActionSound} to + * properly indicate image capture or recording start/stop to the user.</p> * * @param cb a callback object that receives a copy of the next preview frame, * or null to stop receiving callbacks. + * @see android.media.MediaActionSound */ public final void setOneShotPreviewCallback(PreviewCallback cb) { mPreviewCallback = cb; @@ -548,24 +566,30 @@ public class Camera { private native final void setHasPreviewCallback(boolean installed, boolean manualBuffer); /** - * Installs a callback to be invoked for every preview frame, using buffers - * supplied with {@link #addCallbackBuffer(byte[])}, in addition to + * <p>Installs a callback to be invoked for every preview frame, using + * buffers supplied with {@link #addCallbackBuffer(byte[])}, in addition to * displaying them on the screen. The callback will be repeatedly called - * for as long as preview is active and buffers are available. - * Any other preview callbacks are overridden. + * for as long as preview is active and buffers are available. Any other + * preview callbacks are overridden.</p> * * <p>The purpose of this method is to improve preview efficiency and frame * rate by allowing preview frame memory reuse. You must call * {@link #addCallbackBuffer(byte[])} at some point -- before or after - * calling this method -- or no callbacks will received. + * calling this method -- or no callbacks will received.</p> * - * The buffer queue will be cleared if this method is called with a null + * <p>The buffer queue will be cleared if this method is called with a null * callback, {@link #setPreviewCallback(Camera.PreviewCallback)} is called, - * or {@link #setOneShotPreviewCallback(Camera.PreviewCallback)} is called. + * or {@link #setOneShotPreviewCallback(Camera.PreviewCallback)} is + * called.</p> + * + * <p>If you are using the preview data to create video or still images, + * strongly consider using {@link android.media.MediaActionSound} to + * properly indicate image capture or recording start/stop to the user.</p> * * @param cb a callback object that receives a copy of the preview frame, * or null to stop receiving callbacks and clear the buffer queue. * @see #addCallbackBuffer(byte[]) + * @see android.media.MediaActionSound */ public final void setPreviewCallbackWithBuffer(PreviewCallback cb) { mPreviewCallback = cb; @@ -834,10 +858,15 @@ public class Camera { * the focus position. Applications must call cancelAutoFocus to reset the * focus.</p> * + * <p>If autofocus is successful, consider using + * {@link android.media.MediaActionSound} to properly play back an autofocus + * success sound to the user.</p> + * * @param cb the callback to run * @see #cancelAutoFocus() * @see android.hardware.Camera.Parameters#setAutoExposureLock(boolean) * @see android.hardware.Camera.Parameters#setAutoWhiteBalanceLock(boolean) + * @see android.media.MediaActionSound */ public final void autoFocus(AutoFocusCallback cb) { @@ -1907,12 +1936,12 @@ public class Camera { * @param value the String value of the parameter */ public void set(String key, String value) { - if (key.indexOf('=') != -1 || key.indexOf(';') != -1) { - Log.e(TAG, "Key \"" + key + "\" contains invalid character (= or ;)"); + if (key.indexOf('=') != -1 || key.indexOf(';') != -1 || key.indexOf(0) != -1) { + Log.e(TAG, "Key \"" + key + "\" contains invalid character (= or ; or \\0)"); return; } - if (value.indexOf('=') != -1 || value.indexOf(';') != -1) { - Log.e(TAG, "Value \"" + value + "\" contains invalid character (= or ;)"); + if (value.indexOf('=') != -1 || value.indexOf(';') != -1 || value.indexOf(0) != -1) { + Log.e(TAG, "Value \"" + value + "\" contains invalid character (= or ; or \\0)"); return; } diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java index 0e6d07d..9612151 100755 --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -596,8 +596,8 @@ public final class Telephony { * values:</p> * * <ul> - * <li><em>pdus</em> - An Object[] of byte[]s containing the PDUs - * that make up the message.</li> + * <li><em>message</em> - An SmsCbMessage object containing the broadcast message + * data. This is not an emergency alert, so ETWS and CMAS data will be null.</li> * </ul> * * <p>The extra values can be extracted using @@ -616,8 +616,8 @@ public final class Telephony { * values:</p> * * <ul> - * <li><em>pdus</em> - An Object[] of byte[]s containing the PDUs - * that make up the message.</li> + * <li><em>message</em> - An SmsCbMessage object containing the broadcast message + * data, including ETWS or CMAS warning notification info if present.</li> * </ul> * * <p>The extra values can be extracted using @@ -631,6 +631,26 @@ public final class Telephony { "android.provider.Telephony.SMS_EMERGENCY_CB_RECEIVED"; /** + * Broadcast Action: A new CDMA SMS has been received containing Service Category + * Program Data (updates the list of enabled broadcast channels). The intent will + * have the following extra values:</p> + * + * <ul> + * <li><em>operations</em> - An array of CdmaSmsCbProgramData objects containing + * the service category operations (add/delete/clear) to perform.</li> + * </ul> + * + * <p>The extra values can be extracted using + * {@link #getMessagesFromIntent(Intent)}.</p> + * + * <p>If a BroadcastReceiver encounters an error while processing + * this intent it should set the result code appropriately.</p> + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION = + "android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED"; + + /** * Broadcast Action: The SIM storage for SMS messages is full. If * space is not freed, messages targeted for the SIM (class 2) may * not be saved. diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index 516ce2a..2dcea80 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -1,4 +1,4 @@ - /* +/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -363,40 +363,67 @@ public abstract class Layout { // direction of the layout or line. XXX: Should they? // They are evaluated at each line. if (mSpannedText) { - int previousLineBottom = getLineTop(firstLine); - int previousLineEnd = getLineStart(firstLine); - ParagraphStyle[] spans = NO_PARA_SPANS; - TextPaint paint = mPaint; - CharSequence buf = mText; - int spanEnd = 0; - final int width = mWidth; - Spanned sp = (Spanned) buf; - int textLength = buf.length(); - for (int i = firstLine; i <= lastLine; i++) { - int start = previousLineEnd; - int end = getLineStart(i + 1); - previousLineEnd = end; - - int ltop = previousLineBottom; - int lbottom = getLineTop(i + 1); - previousLineBottom = lbottom; - int lbaseline = lbottom - getLineDescent(i); - - if (start >= spanEnd) { - // These should be infrequent, so we'll use this so that - // we don't have to check as often. - spanEnd = sp.nextSpanTransition(start, textLength, LineBackgroundSpan.class); - // All LineBackgroundSpans on a line contribute to its background. - spans = getParagraphSpans(sp, start, end, LineBackgroundSpan.class); - } + if (lineBackgroundSpans == null) { + lineBackgroundSpans = new SpanSet<LineBackgroundSpan>(LineBackgroundSpan.class); + } - for (int n = 0; n < spans.length; n++) { - LineBackgroundSpan back = (LineBackgroundSpan) spans[n]; - back.drawBackground(canvas, paint, 0, width, - ltop, lbaseline, lbottom, - buf, start, end, i); + Spanned buffer = (Spanned) mText; + int textLength = buffer.length(); + lineBackgroundSpans.init(buffer, 0, textLength); + + if (lineBackgroundSpans.numberOfSpans > 0) { + int previousLineBottom = getLineTop(firstLine); + int previousLineEnd = getLineStart(firstLine); + ParagraphStyle[] spans = NO_PARA_SPANS; + int spansLength = 0; + TextPaint paint = mPaint; + int spanEnd = 0; + final int width = mWidth; + for (int i = firstLine; i <= lastLine; i++) { + int start = previousLineEnd; + int end = getLineStart(i + 1); + previousLineEnd = end; + + int ltop = previousLineBottom; + int lbottom = getLineTop(i + 1); + previousLineBottom = lbottom; + int lbaseline = lbottom - getLineDescent(i); + + if (start >= spanEnd) { + // These should be infrequent, so we'll use this so that + // we don't have to check as often. + spanEnd = lineBackgroundSpans.getNextTransition(start, textLength); + // All LineBackgroundSpans on a line contribute to its background. + spansLength = 0; + // Duplication of the logic of getParagraphSpans + if (start != end || start == 0) { + // Equivalent to a getSpans(start, end), but filling the 'spans' local + // array instead to reduce memory allocation + for (int j = 0; j < lineBackgroundSpans.numberOfSpans; j++) { + // equal test is valid since both intervals are not empty by construction + if (lineBackgroundSpans.spanStarts[j] >= end || + lineBackgroundSpans.spanEnds[j] <= start) continue; + if (spansLength == spans.length) { + // The spans array needs to be expanded + int newSize = ArrayUtils.idealObjectArraySize(2 * spansLength); + ParagraphStyle[] newSpans = new ParagraphStyle[newSize]; + System.arraycopy(spans, 0, newSpans, 0, spansLength); + spans = newSpans; + } + spans[spansLength++] = lineBackgroundSpans.spans[j]; + } + } + } + + for (int n = 0; n < spansLength; n++) { + LineBackgroundSpan lineBackgroundSpan = (LineBackgroundSpan) spans[n]; + lineBackgroundSpan.drawBackground(canvas, paint, 0, width, + ltop, lbaseline, lbottom, + buffer, start, end, i); + } } } + lineBackgroundSpans.recycle(); } // There can be a highlight even without spans if we are drawing @@ -1830,6 +1857,7 @@ public abstract class Layout { private static final Rect sTempRect = new Rect(); private boolean mSpannedText; private TextDirectionHeuristic mTextDir; + private SpanSet<LineBackgroundSpan> lineBackgroundSpans; public static final int DIR_LEFT_TO_RIGHT = 1; public static final int DIR_RIGHT_TO_LEFT = -1; diff --git a/core/java/android/text/SpanSet.java b/core/java/android/text/SpanSet.java new file mode 100644 index 0000000..3ca6033 --- /dev/null +++ b/core/java/android/text/SpanSet.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text; + +import java.lang.reflect.Array; + +/** + * A cached set of spans. Caches the result of {@link Spanned#getSpans(int, int, Class)} and then + * provides faster access to {@link Spanned#nextSpanTransition(int, int, Class)}. + * + * Fields are left public for a convenient direct access. + * + * Note that empty spans are ignored by this class. + * @hide + */ +public class SpanSet<E> { + private final Class<? extends E> classType; + + int numberOfSpans; + E[] spans; + int[] spanStarts; + int[] spanEnds; + int[] spanFlags; + + SpanSet(Class<? extends E> type) { + classType = type; + numberOfSpans = 0; + } + + @SuppressWarnings("unchecked") + public void init(Spanned spanned, int start, int limit) { + final E[] allSpans = spanned.getSpans(start, limit, classType); + final int length = allSpans.length; + + if (length > 0 && (spans == null || spans.length < length)) { + // These arrays may end up being too large because of the discarded empty spans + spans = (E[]) Array.newInstance(classType, length); + spanStarts = new int[length]; + spanEnds = new int[length]; + spanFlags = new int[length]; + } + + numberOfSpans = 0; + for (int i = 0; i < length; i++) { + final E span = allSpans[i]; + + final int spanStart = spanned.getSpanStart(span); + final int spanEnd = spanned.getSpanEnd(span); + if (spanStart == spanEnd) continue; + + final int spanFlag = spanned.getSpanFlags(span); + + spans[numberOfSpans] = span; + spanStarts[numberOfSpans] = spanStart; + spanEnds[numberOfSpans] = spanEnd; + spanFlags[numberOfSpans] = spanFlag; + + numberOfSpans++; + } + } + + /** + * Returns true if there are spans intersecting the given interval. + * @param end must be strictly greater than start + */ + public boolean hasSpansIntersecting(int start, int end) { + for (int i = 0; i < numberOfSpans; i++) { + // equal test is valid since both intervals are not empty by construction + if (spanStarts[i] >= end || spanEnds[i] <= start) continue; + return true; + } + return false; + } + + /** + * Similar to {@link Spanned#nextSpanTransition(int, int, Class)} + */ + int getNextTransition(int start, int limit) { + for (int i = 0; i < numberOfSpans; i++) { + final int spanStart = spanStarts[i]; + final int spanEnd = spanEnds[i]; + if (spanStart > start && spanStart < limit) limit = spanStart; + if (spanEnd > start && spanEnd < limit) limit = spanEnd; + } + return limit; + } + + /** + * Removes all internal references to the spans to avoid memory leaks. + */ + public void recycle() { + // The spans array is guaranteed to be not null when numberOfSpans is > 0 + for (int i = 0; i < numberOfSpans; i++) { + spans[i] = null; // prevent a leak: no reference kept when TextLine is recycled + } + } +} diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java index 1e8a2f7..0d2835a 100644 --- a/core/java/android/text/TextLine.java +++ b/core/java/android/text/TextLine.java @@ -30,8 +30,6 @@ import android.util.Log; import com.android.internal.util.ArrayUtils; -import java.lang.reflect.Array; - /** * Represents a line of styled text, for measuring in visual order and * for rendering. @@ -860,78 +858,6 @@ class TextLine { return runIsRtl ? -ret : ret; } - private static class SpanSet<E> { - int numberOfSpans; - E[] spans; - int[] spanStarts; - int[] spanEnds; - int[] spanFlags; - final Class<? extends E> classType; - - SpanSet(Class<? extends E> type) { - classType = type; - numberOfSpans = 0; - } - - @SuppressWarnings("unchecked") - public void init(Spanned spanned, int start, int limit) { - final E[] allSpans = spanned.getSpans(start, limit, classType); - final int length = allSpans.length; - - if (length > 0 && (spans == null || spans.length < length)) { - // These arrays may end up being too large because of empty spans - spans = (E[]) Array.newInstance(classType, length); - spanStarts = new int[length]; - spanEnds = new int[length]; - spanFlags = new int[length]; - } - - numberOfSpans = 0; - for (int i = 0; i < length; i++) { - final E span = allSpans[i]; - - final int spanStart = spanned.getSpanStart(span); - final int spanEnd = spanned.getSpanEnd(span); - if (spanStart == spanEnd) continue; - - final int spanFlag = spanned.getSpanFlags(span); - - spans[numberOfSpans] = span; - spanStarts[numberOfSpans] = spanStart; - spanEnds[numberOfSpans] = spanEnd; - spanFlags[numberOfSpans] = spanFlag; - - numberOfSpans++; - } - } - - public boolean hasSpansIntersecting(int start, int end) { - for (int i = 0; i < numberOfSpans; i++) { - // equal test is valid since both intervals are not empty by construction - if (spanStarts[i] >= end || spanEnds[i] <= start) continue; - return true; - } - return false; - } - - int getNextTransition(int start, int limit) { - for (int i = 0; i < numberOfSpans; i++) { - final int spanStart = spanStarts[i]; - final int spanEnd = spanEnds[i]; - if (spanStart > start && spanStart < limit) limit = spanStart; - if (spanEnd > start && spanEnd < limit) limit = spanEnd; - } - return limit; - } - - public void recycle() { - // The spans array is guaranteed to be not null when numberOfSpans is > 0 - for (int i = 0; i < numberOfSpans; i++) { - spans[i] = null; // prevent a leak: no reference kept when TextLine is recycled - } - } - } - /** * Utility function for handling a unidirectional run. The run must not * contain tabs or emoji but can contain styles. diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index bf48ff2..1edcff6 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -10456,10 +10456,10 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mHardwareLayer == null) { mHardwareLayer = mAttachInfo.mHardwareRenderer.createHardwareLayer( width, height, isOpaque()); - mLocalDirtyRect.setEmpty(); + mLocalDirtyRect.set(0, 0, width, height); } else if (mHardwareLayer.getWidth() != width || mHardwareLayer.getHeight() != height) { mHardwareLayer.resize(width, height); - mLocalDirtyRect.setEmpty(); + mLocalDirtyRect.set(0, 0, width, height); } // The layer is not valid if the underlying GPU resources cannot be allocated diff --git a/core/java/android/webkit/HTML5VideoFullScreen.java b/core/java/android/webkit/HTML5VideoFullScreen.java index fac549d..730ad08 100644 --- a/core/java/android/webkit/HTML5VideoFullScreen.java +++ b/core/java/android/webkit/HTML5VideoFullScreen.java @@ -112,6 +112,18 @@ public class HTML5VideoFullScreen extends HTML5VideoView } }; + MediaPlayer.OnVideoSizeChangedListener mSizeChangedListener = + new MediaPlayer.OnVideoSizeChangedListener() { + @Override + public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { + mVideoWidth = mp.getVideoWidth(); + mVideoHeight = mp.getVideoHeight(); + if (mVideoWidth != 0 && mVideoHeight != 0) { + mVideoSurfaceView.getHolder().setFixedSize(mVideoWidth, mVideoHeight); + } + } + }; + private SurfaceView getSurfaceView() { return mVideoSurfaceView; } @@ -150,6 +162,7 @@ public class HTML5VideoFullScreen extends HTML5VideoView mc.setSystemUiVisibility(mLayout.getSystemUiVisibility()); setMediaController(mc); mPlayer.setScreenOnWhilePlaying(true); + mPlayer.setOnVideoSizeChangedListener(mSizeChangedListener); prepareDataAndDisplayMode(mProxy); } diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index 812d89a..09ce1e2 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -548,9 +548,13 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc if (!initData.mIsSpellCheckEnabled) { inputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; } - if (WebTextView.TEXT_AREA != type - && initData.mIsTextFieldNext) { - imeOptions |= EditorInfo.IME_FLAG_NAVIGATE_NEXT; + if (WebTextView.TEXT_AREA != type) { + if (initData.mIsTextFieldNext) { + imeOptions |= EditorInfo.IME_FLAG_NAVIGATE_NEXT; + } + if (initData.mIsTextFieldPrev) { + imeOptions |= EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; + } } switch (type) { case WebTextView.NORMAL_TEXT_FIELD: diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 8def74b..77d2641 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -954,14 +954,15 @@ public final class WebViewCore { public TextFieldInitData(int fieldPointer, String text, int type, boolean isSpellCheckEnabled, boolean autoComplete, boolean isTextFieldNext, - String name, String label, int maxLength, - Rect nodeBounds, int nodeLayerId) { + boolean isTextFieldPrev, String name, String label, + int maxLength, Rect nodeBounds, int nodeLayerId) { mFieldPointer = fieldPointer; mText = text; mType = type; mIsAutoCompleteEnabled = autoComplete; mIsSpellCheckEnabled = isSpellCheckEnabled; mIsTextFieldNext = isTextFieldNext; + mIsTextFieldPrev = isTextFieldPrev; mName = name; mLabel = label; mMaxLength = maxLength; @@ -973,6 +974,7 @@ public final class WebViewCore { int mType; boolean mIsSpellCheckEnabled; boolean mIsTextFieldNext; + boolean mIsTextFieldPrev; boolean mIsAutoCompleteEnabled; String mName; String mLabel; @@ -2798,7 +2800,7 @@ public final class WebViewCore { // called by JNI private void initEditField(int pointer, String text, int inputType, boolean isSpellCheckEnabled, boolean isAutoCompleteEnabled, - boolean nextFieldIsText, String name, + boolean nextFieldIsText, boolean prevFieldIsText, String name, String label, int start, int end, int selectionPtr, int maxLength, Rect nodeRect, int nodeLayer) { if (mWebView == null) { @@ -2806,7 +2808,8 @@ public final class WebViewCore { } TextFieldInitData initData = new TextFieldInitData(pointer, text, inputType, isSpellCheckEnabled, isAutoCompleteEnabled, - nextFieldIsText, name, label, maxLength, nodeRect, nodeLayer); + nextFieldIsText, prevFieldIsText, name, label, maxLength, + nodeRect, nodeLayer); Message.obtain(mWebView.mPrivateHandler, WebViewClassic.INIT_EDIT_FIELD, initData).sendToTarget(); Message.obtain(mWebView.mPrivateHandler, diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 5774440..9e07151 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -88,6 +88,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te ViewTreeObserver.OnTouchModeChangeListener, RemoteViewsAdapter.RemoteAdapterConnectionCallback { + @SuppressWarnings("UnusedDeclaration") private static final String TAG = "AbsListView"; /** @@ -2429,7 +2430,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final ViewTreeObserver treeObserver = getViewTreeObserver(); treeObserver.removeOnTouchModeChangeListener(this); if (mTextFilterEnabled && mPopup != null) { - treeObserver.removeGlobalOnLayoutListener(this); + treeObserver.removeOnGlobalLayoutListener(this); mGlobalLayoutListenerAddedFilter = false; } @@ -2943,11 +2944,23 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te mDirection = 0; // Reset when entering overscroll. mTouchMode = TOUCH_MODE_OVERSCROLL; if (rawDeltaY > 0) { + if (!mEdgeGlowTop.isIdle()) { + invalidate(mEdgeGlowTop.getBounds()); + } else { + invalidate(); + } + mEdgeGlowTop.onPull((float) overscroll / getHeight()); if (!mEdgeGlowBottom.isFinished()) { mEdgeGlowBottom.onRelease(); } } else if (rawDeltaY < 0) { + if (!mEdgeGlowBottom.isIdle()) { + invalidate(mEdgeGlowBottom.getBounds()); + } else { + invalidate(); + } + mEdgeGlowBottom.onPull((float) overscroll / getHeight()); if (!mEdgeGlowTop.isFinished()) { mEdgeGlowTop.onRelease(); @@ -2956,7 +2969,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } } mMotionY = y; - invalidate(); } mLastY = y; } @@ -2990,26 +3002,26 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te if (!mEdgeGlowBottom.isFinished()) { mEdgeGlowBottom.onRelease(); } + invalidate(mEdgeGlowTop.getBounds()); } else if (rawDeltaY < 0) { mEdgeGlowBottom.onPull((float) overScrollDistance / getHeight()); if (!mEdgeGlowTop.isFinished()) { mEdgeGlowTop.onRelease(); } + invalidate(mEdgeGlowBottom.getBounds()); } - invalidate(); } } if (incrementalDeltaY != 0) { // Coming back to 'real' list scrolling - mScrollY = 0; - invalidateParentIfNeeded(); - - // No need to do all this work if we're not going to move anyway - if (incrementalDeltaY != 0) { - trackMotionScroll(incrementalDeltaY, incrementalDeltaY); + if (mScrollY != 0) { + mScrollY = 0; + invalidateParentIfNeeded(); } + trackMotionScroll(incrementalDeltaY, incrementalDeltaY); + mTouchMode = TOUCH_MODE_SCROLL; // We did not scroll the full amount. Treat this essentially like the @@ -3468,11 +3480,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final int rightPadding = mListPadding.right + mGlowPaddingRight; final int width = getWidth() - leftPadding - rightPadding; - canvas.translate(leftPadding, - Math.min(0, scrollY + mFirstPositionDistanceGuess)); + int edgeY = Math.min(0, scrollY + mFirstPositionDistanceGuess); + canvas.translate(leftPadding, edgeY); mEdgeGlowTop.setSize(width, getHeight()); if (mEdgeGlowTop.draw(canvas)) { - invalidate(); + mEdgeGlowTop.setPosition(leftPadding, edgeY); + invalidate(mEdgeGlowTop.getBounds()); } canvas.restoreToCount(restoreCount); } @@ -3483,12 +3496,15 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te final int width = getWidth() - leftPadding - rightPadding; final int height = getHeight(); - canvas.translate(-width + leftPadding, - Math.max(height, scrollY + mLastPositionDistanceGuess)); + int edgeX = -width + leftPadding; + int edgeY = Math.max(height, scrollY + mLastPositionDistanceGuess); + canvas.translate(edgeX, edgeY); canvas.rotate(180, width, 0); mEdgeGlowBottom.setSize(width, height); if (mEdgeGlowBottom.draw(canvas)) { - invalidate(); + // Account for the rotation + mEdgeGlowBottom.setPosition(edgeX + width, edgeY - mEdgeGlowBottom.getHeight()); + invalidate(mEdgeGlowBottom.getBounds()); } canvas.restoreToCount(restoreCount); } @@ -3874,7 +3890,8 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } // Don't stop just because delta is zero (it could have been rounded) - final boolean atEnd = trackMotionScroll(delta, delta) && (delta != 0); + final boolean atEdge = trackMotionScroll(delta, delta); + final boolean atEnd = atEdge && (delta != 0); if (atEnd) { if (motionView != null) { // Tweak the scroll for how far we overshot @@ -3889,7 +3906,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } if (more && !atEnd) { - invalidate(); + if (atEdge) invalidate(); mLastFlingY = y; post(this); } else { @@ -4431,7 +4448,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } private void createScrollingCache() { - if (mScrollingCacheEnabled && !mCachingStarted) { + if (mScrollingCacheEnabled && !mCachingStarted && !isHardwareAccelerated()) { setChildrenDrawnWithCacheEnabled(true); setChildrenDrawingCacheEnabled(true); mCachingStarted = mCachingActive = true; @@ -4439,23 +4456,25 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te } private void clearScrollingCache() { - if (mClearScrollingCache == null) { - mClearScrollingCache = new Runnable() { - public void run() { - if (mCachingStarted) { - mCachingStarted = mCachingActive = false; - setChildrenDrawnWithCacheEnabled(false); - if ((mPersistentDrawingCache & PERSISTENT_SCROLLING_CACHE) == 0) { - setChildrenDrawingCacheEnabled(false); - } - if (!isAlwaysDrawnWithCacheEnabled()) { - invalidate(); + if (!isHardwareAccelerated()) { + if (mClearScrollingCache == null) { + mClearScrollingCache = new Runnable() { + public void run() { + if (mCachingStarted) { + mCachingStarted = mCachingActive = false; + setChildrenDrawnWithCacheEnabled(false); + if ((mPersistentDrawingCache & PERSISTENT_SCROLLING_CACHE) == 0) { + setChildrenDrawingCacheEnabled(false); + } + if (!isAlwaysDrawnWithCacheEnabled()) { + invalidate(); + } } } - } - }; + }; + } + post(mClearScrollingCache); } - post(mClearScrollingCache); } /** @@ -4599,14 +4618,18 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te mRecycler.removeSkippedScrap(); } + // invalidate before moving the children to avoid unnecessary invalidate + // calls to bubble up from the children all the way to the top + if (!awakenScrollBars()) { + invalidate(); + } + offsetChildrenTopAndBottom(incrementalDeltaY); if (down) { mFirstPosition += count; } - invalidate(); - final int absIncrementalDeltaY = Math.abs(incrementalDeltaY); if (spaceAbove < absIncrementalDeltaY || spaceBelow < absIncrementalDeltaY) { fillGap(down); @@ -4629,7 +4652,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te mBlockLayoutRequests = false; invokeOnItemScrollListener(); - awakenScrollBars(); return false; } diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java index 83aa8ba..c1f31bb 100644 --- a/core/java/android/widget/EdgeEffect.java +++ b/core/java/android/widget/EdgeEffect.java @@ -16,6 +16,7 @@ package android.widget; +import android.graphics.Rect; import com.android.internal.R; import android.content.Context; @@ -45,6 +46,7 @@ import android.view.animation.Interpolator; * {@link #draw(Canvas)} method.</p> */ public class EdgeEffect { + @SuppressWarnings("UnusedDeclaration") private static final String TAG = "EdgeEffect"; // Time it will take the effect to fully recede in ms @@ -57,10 +59,7 @@ public class EdgeEffect { private static final int PULL_DECAY_TIME = 1000; private static final float MAX_ALPHA = 1.f; - private static final float HELD_EDGE_ALPHA = 0.7f; private static final float HELD_EDGE_SCALE_Y = 0.5f; - private static final float HELD_GLOW_ALPHA = 0.5f; - private static final float HELD_GLOW_SCALE_Y = 0.5f; private static final float MAX_GLOW_HEIGHT = 4.f; @@ -76,7 +75,9 @@ public class EdgeEffect { private final Drawable mGlow; private int mWidth; private int mHeight; - private final int MIN_WIDTH = 300; + private int mX; + private int mY; + private static final int MIN_WIDTH = 300; private final int mMinWidth; private float mEdgeAlpha; @@ -119,6 +120,8 @@ public class EdgeEffect { private int mState = STATE_IDLE; private float mPullDistance; + + private final Rect mBounds = new Rect(); /** * Construct a new EdgeEffect with a theme appropriate for the provided context. @@ -145,6 +148,29 @@ public class EdgeEffect { } /** + * Set the position of this edge effect in pixels. This position is + * only used by {@link #getBounds()}. + * + * @param x The position of the edge effect on the X axis + * @param y The position of the edge effect on the Y axis + */ + void setPosition(int x, int y) { + mX = x; + mY = y; + } + + boolean isIdle() { + return mState == STATE_IDLE; + } + + /** + * Returns the height of the effect itself. + */ + int getHeight() { + return Math.max(mGlow.getBounds().height(), mEdge.getBounds().height()); + } + + /** * Reports if this EdgeEffect's animation is finished. If this method returns false * after a call to {@link #draw(Canvas)} the host widget should schedule another * drawing pass to continue the animation. @@ -301,7 +327,6 @@ public class EdgeEffect { update(); final int edgeHeight = mEdge.getIntrinsicHeight(); - final int edgeWidth = mEdge.getIntrinsicWidth(); final int glowHeight = mGlow.getIntrinsicHeight(); final int glowWidth = mGlow.getIntrinsicWidth(); @@ -334,9 +359,23 @@ public class EdgeEffect { } mEdge.draw(canvas); + if (mState == STATE_RECEDE && glowBottom == 0 && edgeBottom == 0) { + mState = STATE_IDLE; + } + return mState != STATE_IDLE; } + /** + * Returns the bounds of the edge effect. + */ + public Rect getBounds() { + mBounds.set(mGlow.getBounds()); + mBounds.union(mEdge.getBounds()); + mBounds.offset(mX, mY); + return mBounds; + } + private void update() { final long time = AnimationUtils.currentAnimationTimeMillis(); final float t = Math.min((time - mStartTime) / mDuration, 1.f); diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java index da98884..d019d8c 100644 --- a/core/java/android/widget/FrameLayout.java +++ b/core/java/android/widget/FrameLayout.java @@ -122,10 +122,25 @@ public class FrameLayout extends ViewGroup { } /** + * Describes how the foreground is positioned. + * + * @return foreground gravity. + * + * @see #setForegroundGravity(int) + * + * @attr ref android.R.styleable#FrameLayout_foregroundGravity + */ + public int getForegroundGravity() { + return mForegroundGravity; + } + + /** * Describes how the foreground is positioned. Defaults to START and TOP. * * @param foregroundGravity See {@link android.view.Gravity} * + * @see #getForegroundGravity() + * * @attr ref android.R.styleable#FrameLayout_foregroundGravity */ @android.view.RemotableViewMethod diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java index a1bea43..5ed005f 100644 --- a/core/java/android/widget/LinearLayout.java +++ b/core/java/android/widget/LinearLayout.java @@ -235,9 +235,24 @@ public class LinearLayout extends ViewGroup { } /** + * @return the divider Drawable that will divide each item. + * + * @see #setDividerDrawable(Drawable) + * + * @attr ref android.R.styleable#LinearLayout_divider + */ + public Drawable getDividerDrawable() { + return mDivider; + } + + /** * Set a drawable to be used as a divider between items. + * * @param divider Drawable that will divide each item. + * * @see #setShowDividers(int) + * + * @attr ref android.R.styleable#LinearLayout_divider */ public void setDividerDrawable(Drawable divider) { if (divider == mDivider) { @@ -398,6 +413,8 @@ public class LinearLayout extends ViewGroup { * * @return True to measure children with a weight using the minimum * size of the largest child, false otherwise. + * + * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild */ public boolean isMeasureWithLargestChildEnabled() { return mUseLargestChild; @@ -412,6 +429,8 @@ public class LinearLayout extends ViewGroup { * * @param enabled True to measure children with a weight using the * minimum size of the largest child, false otherwise. + * + * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild */ @android.view.RemotableViewMethod public void setMeasureWithLargestChildEnabled(boolean enabled) { diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java index e4b8f34..29cf000 100644 --- a/core/java/android/widget/RelativeLayout.java +++ b/core/java/android/widget/RelativeLayout.java @@ -219,6 +219,20 @@ public class RelativeLayout extends ViewGroup { } /** + * Describes how the child views are positioned. + * + * @return the gravity. + * + * @see #setGravity(int) + * @see android.view.Gravity + * + * @attr ref android.R.styleable#RelativeLayout_gravity + */ + public int getGravity() { + return mGravity; + } + + /** * Describes how the child views are positioned. Defaults to * <code>Gravity.LEFT | Gravity.TOP</code>. * diff --git a/core/java/android/widget/TableLayout.java b/core/java/android/widget/TableLayout.java index b870cee..6331b6d 100644 --- a/core/java/android/widget/TableLayout.java +++ b/core/java/android/widget/TableLayout.java @@ -232,6 +232,8 @@ public class TableLayout extends LinearLayout { * <p>Indicates whether all columns are shrinkable or not.</p> * * @return true if all columns are shrinkable, false otherwise + * + * @attr ref android.R.styleable#TableLayout_shrinkColumns */ public boolean isShrinkAllColumns() { return mShrinkAllColumns; @@ -252,6 +254,8 @@ public class TableLayout extends LinearLayout { * <p>Indicates whether all columns are stretchable or not.</p> * * @return true if all columns are stretchable, false otherwise + * + * @attr ref android.R.styleable#TableLayout_stretchColumns */ public boolean isStretchAllColumns() { return mStretchAllColumns; diff --git a/core/java/com/android/internal/util/BitwiseOutputStream.java b/core/java/com/android/internal/util/BitwiseOutputStream.java index 70c0be8..ddecbed 100644 --- a/core/java/com/android/internal/util/BitwiseOutputStream.java +++ b/core/java/com/android/internal/util/BitwiseOutputStream.java @@ -77,6 +77,7 @@ public class BitwiseOutputStream { byte[] newBuf = new byte[(mPos + bits) >>> 2]; System.arraycopy(mBuf, 0, newBuf, 0, mEnd >>> 3); mBuf = newBuf; + mEnd = newBuf.length << 3; } /** diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp index 088062a..655a834 100644 --- a/core/jni/android_app_NativeActivity.cpp +++ b/core/jni/android_app_NativeActivity.cpp @@ -162,12 +162,12 @@ int32_t AInputQueue::hasEvents() { int32_t AInputQueue::getEvent(AInputEvent** outEvent) { *outEvent = NULL; - bool finishNow = false; - char byteread; ssize_t nRead = read(mDispatchKeyRead, &byteread, 1); + + Mutex::Autolock _l(mLock); + if (nRead == 1) { - mLock.lock(); if (mDispatchingKeys.size() > 0) { KeyEvent* kevent = mDispatchingKeys[0]; *outEvent = kevent; @@ -178,6 +178,8 @@ int32_t AInputQueue::getEvent(AInputEvent** outEvent) { inflight.finishSeq = 0; mInFlightEvents.push(inflight); } + + bool finishNow = false; if (mFinishPreDispatches.size() > 0) { finish_pre_dispatch finish(mFinishPreDispatches[0]); mFinishPreDispatches.removeAt(0); @@ -193,7 +195,6 @@ int32_t AInputQueue::getEvent(AInputEvent** outEvent) { ALOGW("getEvent couldn't find inflight for seq %d", finish.seq); } } - mLock.unlock(); if (finishNow) { finishEvent(*outEvent, true, false); @@ -206,7 +207,8 @@ int32_t AInputQueue::getEvent(AInputEvent** outEvent) { uint32_t consumerSeq; InputEvent* myEvent = NULL; - status_t res = mConsumer.consume(this, true /*consumeBatches*/, &consumerSeq, &myEvent); + status_t res = mConsumer.consume(&mPooledInputEventFactory, true /*consumeBatches*/, + &consumerSeq, &myEvent); if (res != android::OK) { if (res != android::WOULD_BLOCK) { ALOGW("channel '%s' ~ Failed to consume input event. status=%d", @@ -215,6 +217,10 @@ int32_t AInputQueue::getEvent(AInputEvent** outEvent) { return -1; } + if (mConsumer.hasDeferredEvent()) { + wakeupDispatchLocked(); + } + in_flight_event inflight; inflight.event = myEvent; inflight.seq = -1; @@ -255,7 +261,8 @@ void AInputQueue::finishEvent(AInputEvent* event, bool handled, bool didDefaultH return; } - mLock.lock(); + Mutex::Autolock _l(mLock); + const size_t N = mInFlightEvents.size(); for (size_t i=0; i<N; i++) { const in_flight_event& inflight(mInFlightEvents[i]); @@ -267,111 +274,82 @@ void AInputQueue::finishEvent(AInputEvent* event, bool handled, bool didDefaultH mConsumer.getChannel()->getName().string(), res); } } - if (static_cast<InputEvent*>(event)->getType() == AINPUT_EVENT_TYPE_KEY) { - mAvailKeyEvents.push(static_cast<KeyEvent*>(event)); - } else { - mAvailMotionEvents.push(static_cast<MotionEvent*>(event)); - } + mPooledInputEventFactory.recycle(static_cast<InputEvent*>(event)); mInFlightEvents.removeAt(i); - mLock.unlock(); return; } } - mLock.unlock(); - + ALOGW("finishEvent called for unknown event: %p", event); } void AInputQueue::dispatchEvent(android::KeyEvent* event) { - mLock.lock(); + Mutex::Autolock _l(mLock); + LOG_TRACE("dispatchEvent: dispatching=%d write=%d\n", mDispatchingKeys.size(), mDispatchKeyWrite); mDispatchingKeys.add(event); - wakeupDispatch(); - mLock.unlock(); + wakeupDispatchLocked(); } void AInputQueue::finishPreDispatch(int seq, bool handled) { - mLock.lock(); + Mutex::Autolock _l(mLock); + LOG_TRACE("finishPreDispatch: seq=%d handled=%d\n", seq, handled ? 1 : 0); finish_pre_dispatch finish; finish.seq = seq; finish.handled = handled; mFinishPreDispatches.add(finish); - wakeupDispatch(); - mLock.unlock(); + wakeupDispatchLocked(); } KeyEvent* AInputQueue::consumeUnhandledEvent() { - KeyEvent* event = NULL; + Mutex::Autolock _l(mLock); - mLock.lock(); + KeyEvent* event = NULL; if (mUnhandledKeys.size() > 0) { event = mUnhandledKeys[0]; mUnhandledKeys.removeAt(0); } - mLock.unlock(); LOG_TRACE("consumeUnhandledEvent: KeyEvent=%p", event); - return event; } KeyEvent* AInputQueue::consumePreDispatchingEvent(int* outSeq) { - KeyEvent* event = NULL; + Mutex::Autolock _l(mLock); - mLock.lock(); + KeyEvent* event = NULL; if (mPreDispatchingKeys.size() > 0) { const in_flight_event& inflight(mPreDispatchingKeys[0]); event = static_cast<KeyEvent*>(inflight.event); *outSeq = inflight.seq; mPreDispatchingKeys.removeAt(0); } - mLock.unlock(); LOG_TRACE("consumePreDispatchingEvent: KeyEvent=%p", event); - return event; } KeyEvent* AInputQueue::createKeyEvent() { - mLock.lock(); - KeyEvent* event; - if (mAvailKeyEvents.size() <= 0) { - event = new KeyEvent(); - } else { - event = mAvailKeyEvents.top(); - mAvailKeyEvents.pop(); - } - mLock.unlock(); - return event; -} + Mutex::Autolock _l(mLock); -MotionEvent* AInputQueue::createMotionEvent() { - mLock.lock(); - MotionEvent* event; - if (mAvailMotionEvents.size() <= 0) { - event = new MotionEvent(); - } else { - event = mAvailMotionEvents.top(); - mAvailMotionEvents.pop(); - } - mLock.unlock(); - return event; + return mPooledInputEventFactory.createKeyEvent(); } void AInputQueue::doUnhandledKey(KeyEvent* keyEvent) { - mLock.lock(); + Mutex::Autolock _l(mLock); + LOG_TRACE("Unhandled key: pending=%d write=%d\n", mUnhandledKeys.size(), mWorkWrite); if (mUnhandledKeys.size() <= 0 && mWorkWrite >= 0) { write_work(mWorkWrite, CMD_DEF_KEY); } mUnhandledKeys.add(keyEvent); - mLock.unlock(); } bool AInputQueue::preDispatchKey(KeyEvent* keyEvent) { - mLock.lock(); + Mutex::Autolock _l(mLock); + LOG_TRACE("preDispatch key: pending=%d write=%d\n", mPreDispatchingKeys.size(), mWorkWrite); const size_t N = mInFlightEvents.size(); for (size_t i=0; i<N; i++) { @@ -380,7 +358,6 @@ bool AInputQueue::preDispatchKey(KeyEvent* keyEvent) { if (inflight.seq >= 0) { // This event has already been pre-dispatched! LOG_TRACE("Event already pre-dispatched!"); - mLock.unlock(); return false; } mSeq++; @@ -391,7 +368,6 @@ bool AInputQueue::preDispatchKey(KeyEvent* keyEvent) { write_work(mWorkWrite, CMD_DEF_KEY); } mPreDispatchingKeys.add(inflight); - mLock.unlock(); return true; } } @@ -400,7 +376,7 @@ bool AInputQueue::preDispatchKey(KeyEvent* keyEvent) { return false; } -void AInputQueue::wakeupDispatch() { +void AInputQueue::wakeupDispatchLocked() { restart: char dummy = 0; int res = write(mDispatchKeyWrite, &dummy, sizeof(dummy)); diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 599211e..0c66b86 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -545,12 +545,22 @@ static void android_hardware_Camera_setPreviewTexture(JNIEnv *env, sp<Camera> camera = get_native_camera(env, thiz, NULL); if (camera == 0) return; - sp<SurfaceTexture> surfaceTexture = NULL; + sp<BufferQueue> bufferQueue = NULL; if (jSurfaceTexture != NULL) { - surfaceTexture = reinterpret_cast<SurfaceTexture*>(env->GetIntField( + sp<SurfaceTexture> surfaceTexture = reinterpret_cast<SurfaceTexture*>(env->GetIntField( jSurfaceTexture, fields.surfaceTexture)); + if (surfaceTexture != NULL) { + bufferQueue = surfaceTexture->getBufferQueue(); + } + else { + jniThrowException(env, "java/lang/IllegalArgumentException", + "SurfaceTexture already released in setPreviewTexture"); + return; + } + } - if (camera->setPreviewTexture(surfaceTexture) != NO_ERROR) { + + if (camera->setPreviewTexture(bufferQueue) != NO_ERROR) { jniThrowException(env, "java/io/IOException", "setPreviewTexture failed"); } diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index b34dbce..480c3a6 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -23,13 +23,13 @@ #include <fcntl.h> #include <math.h> -#include "jni.h" -#include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include <jni.h> +#include <JNIHelp.h> +#include <android_runtime/AndroidRuntime.h> -#include "utils/Log.h" -#include "media/AudioRecord.h" -#include "media/mediarecorder.h" +#include <utils/Log.h> +#include <media/AudioRecord.h> +#include <media/mediarecorder.h> #include <cutils/bitops.h> @@ -72,7 +72,7 @@ Mutex sLock; #define AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED -20 jint android_media_translateRecorderErrorCode(int code) { - switch(code) { + switch (code) { case NO_ERROR: return AUDIORECORD_SUCCESS; case BAD_VALUE: @@ -81,7 +81,7 @@ jint android_media_translateRecorderErrorCode(int code) { return AUDIORECORD_ERROR_INVALID_OPERATION; default: return AUDIORECORD_ERROR; - } + } } @@ -90,14 +90,14 @@ static void recorderCallback(int event, void* user, void *info) { if (event == AudioRecord::EVENT_MORE_DATA) { // set size to 0 to signal we're not using the callback to read more data AudioRecord::Buffer* pBuff = (AudioRecord::Buffer*)info; - pBuff->size = 0; - + pBuff->size = 0; + } else if (event == AudioRecord::EVENT_MARKER) { audiorecord_callback_cookie *callbackInfo = (audiorecord_callback_cookie *)user; JNIEnv *env = AndroidRuntime::getJNIEnv(); if (user && env) { env->CallStaticVoidMethod( - callbackInfo->audioRecord_class, + callbackInfo->audioRecord_class, javaAudioRecordFields.postNativeEventInJava, callbackInfo->audioRecord_ref, event, 0,0, NULL); if (env->ExceptionCheck()) { @@ -111,7 +111,7 @@ static void recorderCallback(int event, void* user, void *info) { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (user && env) { env->CallStaticVoidMethod( - callbackInfo->audioRecord_class, + callbackInfo->audioRecord_class, javaAudioRecordFields.postNativeEventInJava, callbackInfo->audioRecord_ref, event, 0,0, NULL); if (env->ExceptionCheck()) { @@ -140,7 +140,7 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, uint32_t nbChannels = popcount(channels); // compare the format against the Java constants - if ((audioFormat != javaAudioRecordFields.PCM16) + if ((audioFormat != javaAudioRecordFields.PCM16) && (audioFormat != javaAudioRecordFields.PCM8)) { ALOGE("Error creating AudioRecord: unsupported audio format."); return AUDIORECORD_ERROR_SETUP_INVALIDFORMAT; @@ -156,7 +156,7 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, } int frameSize = nbChannels * bytesPerSample; size_t frameCount = buffSizeInBytes / frameSize; - + if (uint32_t(source) >= AUDIO_SOURCE_CNT) { ALOGE("Error creating AudioRecord: unknown source."); return AUDIORECORD_ERROR_SETUP_INVALIDSOURCE; @@ -181,11 +181,11 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, // create an uninitialized AudioRecord object lpRecorder = new AudioRecord(); - if(lpRecorder == NULL) { + if (lpRecorder == NULL) { ALOGE("Error creating AudioRecord instance."); return AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED; } - + // create the callback information: // this data will be passed with every AudioRecord callback jclass clazz = env->GetObjectClass(thiz); @@ -197,7 +197,7 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, lpCallbackData->audioRecord_class = (jclass)env->NewGlobalRef(clazz); // we use a weak reference so the AudioRecord object can be garbage collected. lpCallbackData->audioRecord_ref = env->NewGlobalRef(weak_this); - + lpRecorder->set((audio_source_t) source, sampleRateInHertz, format, // word length, PCM @@ -210,7 +210,7 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, true, // threadCanCallJava) sessionId); - if(lpRecorder->initCheck() != NO_ERROR) { + if (lpRecorder->initCheck() != NO_ERROR) { ALOGE("Error creating AudioRecord instance: initialization check failed."); goto native_init_failure; } @@ -225,16 +225,16 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); nSession = NULL; - // save our newly created C++ AudioRecord in the "nativeRecorderInJavaObj" field + // save our newly created C++ AudioRecord in the "nativeRecorderInJavaObj" field // of the Java object env->SetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj, (int)lpRecorder); - + // save our newly created callback information in the "nativeCallbackCookie" field // of the Java object (in mNativeCallbackCookie) so we can free the memory in finalize() env->SetIntField(thiz, javaAudioRecordFields.nativeCallbackCookie, (int)lpCallbackData); - + return AUDIORECORD_SUCCESS; - + // failure: native_init_failure: env->DeleteGlobalRef(lpCallbackData->audioRecord_class); @@ -246,7 +246,7 @@ native_track_failure: env->SetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj, 0); env->SetIntField(thiz, javaAudioRecordFields.nativeCallbackCookie, 0); - + return AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED; } @@ -256,13 +256,13 @@ native_track_failure: static int android_media_AudioRecord_start(JNIEnv *env, jobject thiz) { - AudioRecord *lpRecorder = + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj); if (lpRecorder == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); return AUDIORECORD_ERROR; } - + return android_media_translateRecorderErrorCode(lpRecorder->start()); } @@ -271,7 +271,7 @@ android_media_AudioRecord_start(JNIEnv *env, jobject thiz) static void android_media_AudioRecord_stop(JNIEnv *env, jobject thiz) { - AudioRecord *lpRecorder = + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj); if (lpRecorder == NULL ) { jniThrowException(env, "java/lang/IllegalStateException", NULL); @@ -288,7 +288,7 @@ static void android_media_AudioRecord_release(JNIEnv *env, jobject thiz) { // serialize access. Ugly, but functional. Mutex::Autolock lock(&sLock); - AudioRecord *lpRecorder = + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj); audiorecord_callback_cookie *lpCookie = (audiorecord_callback_cookie *)env->GetIntField( thiz, javaAudioRecordFields.nativeCallbackCookie); @@ -304,7 +304,7 @@ static void android_media_AudioRecord_release(JNIEnv *env, jobject thiz) { lpRecorder->stop(); delete lpRecorder; } - + // delete the callback information if (lpCookie) { ALOGV("deleting lpCookie: %x\n", (int)lpCookie); @@ -329,7 +329,7 @@ static jint android_media_AudioRecord_readInByteArray(JNIEnv *env, jobject thiz AudioRecord *lpRecorder = NULL; // get the audio recorder from which we'll read new audio samples - lpRecorder = + lpRecorder = (AudioRecord *)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj); if (lpRecorder == NULL) { ALOGE("Unable to retrieve AudioRecord object, can't record"); @@ -355,8 +355,8 @@ static jint android_media_AudioRecord_readInByteArray(JNIEnv *env, jobject thiz // read the new audio data from the native AudioRecord object ssize_t recorderBuffSize = lpRecorder->frameCount()*lpRecorder->frameSize(); - ssize_t readSize = lpRecorder->read(recordBuff + offsetInBytes, - sizeInBytes > (jint)recorderBuffSize ? + ssize_t readSize = lpRecorder->read(recordBuff + offsetInBytes, + sizeInBytes > (jint)recorderBuffSize ? (jint)recorderBuffSize : sizeInBytes ); env->ReleaseByteArrayElements(javaAudioData, recordBuff, 0); @@ -381,41 +381,41 @@ static jint android_media_AudioRecord_readInDirectBuffer(JNIEnv *env, jobject t //ALOGV("Entering android_media_AudioRecord_readInBuffer"); // get the audio recorder from which we'll read new audio samples - lpRecorder = + lpRecorder = (AudioRecord *)env->GetIntField(thiz, javaAudioRecordFields.nativeRecorderInJavaObj); - if(lpRecorder==NULL) + if (lpRecorder==NULL) return 0; // direct buffer and direct access supported? long capacity = env->GetDirectBufferCapacity(jBuffer); - if(capacity == -1) { + if (capacity == -1) { // buffer direct access is not supported ALOGE("Buffer direct access is not supported, can't record"); return 0; } //ALOGV("capacity = %ld", capacity); jbyte* nativeFromJavaBuf = (jbyte*) env->GetDirectBufferAddress(jBuffer); - if(nativeFromJavaBuf==NULL) { + if (nativeFromJavaBuf==NULL) { ALOGE("Buffer direct access is not supported, can't record"); return 0; - } + } // read new data from the recorder - return (jint) lpRecorder->read(nativeFromJavaBuf, + return (jint) lpRecorder->read(nativeFromJavaBuf, capacity < sizeInBytes ? capacity : sizeInBytes); } // ---------------------------------------------------------------------------- -static jint android_media_AudioRecord_set_marker_pos(JNIEnv *env, jobject thiz, +static jint android_media_AudioRecord_set_marker_pos(JNIEnv *env, jobject thiz, jint markerPos) { - + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField( thiz, javaAudioRecordFields.nativeRecorderInJavaObj); - + if (lpRecorder) { - return - android_media_translateRecorderErrorCode( lpRecorder->setMarkerPosition(markerPos) ); + return + android_media_translateRecorderErrorCode( lpRecorder->setMarkerPosition(markerPos) ); } else { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioRecord pointer for setMarkerPosition()"); @@ -426,11 +426,11 @@ static jint android_media_AudioRecord_set_marker_pos(JNIEnv *env, jobject thiz, // ---------------------------------------------------------------------------- static jint android_media_AudioRecord_get_marker_pos(JNIEnv *env, jobject thiz) { - + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField( thiz, javaAudioRecordFields.nativeRecorderInJavaObj); uint32_t markerPos = 0; - + if (lpRecorder) { lpRecorder->getMarkerPosition(&markerPos); return (jint)markerPos; @@ -445,28 +445,28 @@ static jint android_media_AudioRecord_get_marker_pos(JNIEnv *env, jobject thiz) // ---------------------------------------------------------------------------- static jint android_media_AudioRecord_set_pos_update_period(JNIEnv *env, jobject thiz, jint period) { - + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField( thiz, javaAudioRecordFields.nativeRecorderInJavaObj); - + if (lpRecorder) { - return - android_media_translateRecorderErrorCode( lpRecorder->setPositionUpdatePeriod(period) ); + return + android_media_translateRecorderErrorCode( lpRecorder->setPositionUpdatePeriod(period) ); } else { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioRecord pointer for setPositionUpdatePeriod()"); return AUDIORECORD_ERROR; - } + } } // ---------------------------------------------------------------------------- static jint android_media_AudioRecord_get_pos_update_period(JNIEnv *env, jobject thiz) { - + AudioRecord *lpRecorder = (AudioRecord *)env->GetIntField( thiz, javaAudioRecordFields.nativeRecorderInJavaObj); uint32_t period = 0; - + if (lpRecorder) { lpRecorder->getPositionUpdatePeriod(&period); return (jint)period; @@ -514,7 +514,7 @@ static JNINativeMethod gMethods[] = { (void *)android_media_AudioRecord_setup}, {"native_finalize", "()V", (void *)android_media_AudioRecord_finalize}, {"native_release", "()V", (void *)android_media_AudioRecord_release}, - {"native_read_in_byte_array", + {"native_read_in_byte_array", "([BII)I", (void *)android_media_AudioRecord_readInByteArray}, {"native_read_in_short_array", "([SII)I", (void *)android_media_AudioRecord_readInShortArray}, @@ -541,7 +541,7 @@ static JNINativeMethod gMethods[] = { // ---------------------------------------------------------------------------- -extern bool android_media_getIntConstantFromClass(JNIEnv* pEnv, +extern bool android_media_getIntConstantFromClass(JNIEnv* pEnv, jclass theClass, const char* className, const char* constName, int* constVal); // ---------------------------------------------------------------------------- @@ -550,7 +550,7 @@ int register_android_media_AudioRecord(JNIEnv *env) javaAudioRecordFields.postNativeEventInJava = NULL; javaAudioRecordFields.nativeRecorderInJavaObj = NULL; javaAudioRecordFields.nativeCallbackCookie = NULL; - + // Get the AudioRecord class jclass audioRecordClass = env->FindClass(kClassPathName); @@ -569,7 +569,7 @@ int register_android_media_AudioRecord(JNIEnv *env) // Get the variables // mNativeRecorderInJavaObj - javaAudioRecordFields.nativeRecorderInJavaObj = + javaAudioRecordFields.nativeRecorderInJavaObj = env->GetFieldID(audioRecordClass, JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME, "I"); if (javaAudioRecordFields.nativeRecorderInJavaObj == NULL) { @@ -592,13 +592,13 @@ int register_android_media_AudioRecord(JNIEnv *env) ALOGE("Can't find %s", JAVA_AUDIOFORMAT_CLASS_NAME); return -1; } - if ( !android_media_getIntConstantFromClass(env, audioFormatClass, - JAVA_AUDIOFORMAT_CLASS_NAME, + if ( !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, JAVA_CONST_PCM16_NAME, &(javaAudioRecordFields.PCM16)) - || !android_media_getIntConstantFromClass(env, audioFormatClass, - JAVA_AUDIOFORMAT_CLASS_NAME, + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, JAVA_CONST_PCM8_NAME, &(javaAudioRecordFields.PCM8)) ) { - // error log performed in getIntConstantFromClass() + // error log performed in getIntConstantFromClass() return -1; } diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index ee5eb7e..f522a9a 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -16,16 +16,16 @@ */ #define LOG_TAG "AudioSystem" -#include "utils/Log.h" +#include <utils/Log.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <math.h> -#include "jni.h" -#include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include <jni.h> +#include <JNIHelp.h> +#include <android_runtime/AndroidRuntime.h> #include <media/AudioSystem.h> @@ -268,7 +268,7 @@ static JNINativeMethod gMethods[] = { int register_android_media_AudioSystem(JNIEnv *env) { AudioSystem::setErrorCallback(android_media_AudioSystem_error_callback); - + return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index 57f5d3d..9fbc477 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -22,13 +22,13 @@ #include <fcntl.h> #include <math.h> -#include "jni.h" -#include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include <jni.h> +#include <JNIHelp.h> +#include <android_runtime/AndroidRuntime.h> -#include "utils/Log.h" -#include "media/AudioSystem.h" -#include "media/AudioTrack.h" +#include <utils/Log.h> +#include <media/AudioSystem.h> +#include <media/AudioTrack.h> #include <binder/MemoryHeapBase.h> #include <binder/MemoryBase.h> @@ -105,7 +105,7 @@ class AudioTrackJniStorage { jint android_media_translateErrorCode(int code) { - switch(code) { + switch (code) { case NO_ERROR: return AUDIOTRACK_SUCCESS; case BAD_VALUE: @@ -114,7 +114,7 @@ jint android_media_translateErrorCode(int code) { return AUDIOTRACK_ERROR_INVALID_OPERATION; default: return AUDIOTRACK_ERROR; - } + } } @@ -123,14 +123,14 @@ static void audioCallback(int event, void* user, void *info) { if (event == AudioTrack::EVENT_MORE_DATA) { // set size to 0 to signal we're not using the callback to write more data AudioTrack::Buffer* pBuff = (AudioTrack::Buffer*)info; - pBuff->size = 0; - + pBuff->size = 0; + } else if (event == AudioTrack::EVENT_MARKER) { audiotrack_callback_cookie *callbackInfo = (audiotrack_callback_cookie *)user; JNIEnv *env = AndroidRuntime::getJNIEnv(); if (user && env) { env->CallStaticVoidMethod( - callbackInfo->audioTrack_class, + callbackInfo->audioTrack_class, javaAudioTrackFields.postNativeEventInJava, callbackInfo->audioTrack_ref, event, 0,0, NULL); if (env->ExceptionCheck()) { @@ -144,7 +144,7 @@ static void audioCallback(int event, void* user, void *info) { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (user && env) { env->CallStaticVoidMethod( - callbackInfo->audioTrack_class, + callbackInfo->audioTrack_class, javaAudioTrackFields.postNativeEventInJava, callbackInfo->audioTrack_ref, event, 0,0, NULL); if (env->ExceptionCheck()) { @@ -186,7 +186,7 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th } int nbChannels = popcount(nativeChannelMask); - + // check the stream type audio_stream_type_t atStreamType; switch (streamType) { @@ -215,7 +215,7 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th // for the moment 8bitPCM in MODE_STATIC is not supported natively in the AudioTrack C++ class // so we declare everything as 16bitPCM, the 8->16bit conversion for MODE_STATIC will be handled // in android_media_AudioTrack_native_write_byte() - if ((audioFormat == javaAudioTrackFields.PCM8) + if ((audioFormat == javaAudioTrackFields.PCM8) && (memoryMode == javaAudioTrackFields.MODE_STATIC)) { ALOGV("android_media_AudioTrack_native_setup(): requesting MODE_STATIC for 8bit \ buff size of %dbytes, switching to 16bit, buff size of %dbytes", @@ -230,9 +230,9 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th audio_format_t format = audioFormat == javaAudioTrackFields.PCM16 ? AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT; int frameCount = buffSizeInBytes / (nbChannels * bytesPerSample); - + AudioTrackJniStorage* lpJniStorage = new AudioTrackJniStorage(); - + // initialize the callback information: // this data will be passed with every AudioTrack callback jclass clazz = env->GetObjectClass(thiz); @@ -244,7 +244,7 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th lpJniStorage->mCallbackData.audioTrack_class = (jclass)env->NewGlobalRef(clazz); // we use a weak reference so the AudioTrack object can be garbage collected. lpJniStorage->mCallbackData.audioTrack_ref = env->NewGlobalRef(weak_this); - + lpJniStorage->mStreamType = atStreamType; if (jSession == NULL) { @@ -269,7 +269,7 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th ALOGE("Error creating uninitialized AudioTrack"); goto native_track_failure; } - + // initialize the native AudioTrack object if (memoryMode == javaAudioTrackFields.MODE_STREAM) { @@ -285,15 +285,15 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th 0,// shared mem true,// thread can call Java sessionId);// audio session ID - + } else if (memoryMode == javaAudioTrackFields.MODE_STATIC) { // AudioTrack is using shared memory - + if (!lpJniStorage->allocSharedMem(buffSizeInBytes)) { ALOGE("Error creating AudioTrack in static mode: error creating mem heap base"); goto native_init_failure; } - + lpTrack->set( atStreamType,// stream type sampleRateInHertz, @@ -302,7 +302,7 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th frameCount, AUDIO_POLICY_OUTPUT_FLAG_NONE, audioCallback, &(lpJniStorage->mCallbackData),//callback, callback data (user)); - 0,// notificationFrames == 0 since not using EVENT_MORE_DATA to feed the AudioTrack + 0,// notificationFrames == 0 since not using EVENT_MORE_DATA to feed the AudioTrack lpJniStorage->mMemBase,// shared mem true,// thread can call Java sessionId);// audio session ID @@ -323,21 +323,21 @@ android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_th env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); nSession = NULL; - // save our newly created C++ AudioTrack in the "nativeTrackInJavaObj" field + // save our newly created C++ AudioTrack in the "nativeTrackInJavaObj" field // of the Java object (in mNativeTrackInJavaObj) env->SetIntField(thiz, javaAudioTrackFields.nativeTrackInJavaObj, (int)lpTrack); - + // save the JNI resources so we can free them later //ALOGV("storing lpJniStorage: %x\n", (int)lpJniStorage); env->SetIntField(thiz, javaAudioTrackFields.jniData, (int)lpJniStorage); return AUDIOTRACK_SUCCESS; - + // failures: native_init_failure: delete lpTrack; env->SetIntField(thiz, javaAudioTrackFields.nativeTrackInJavaObj, 0); - + native_track_failure: if (nSession != NULL) { env->ReleasePrimitiveArrayCritical(jSession, nSession, 0); @@ -347,7 +347,7 @@ native_track_failure: delete lpJniStorage; env->SetIntField(thiz, javaAudioTrackFields.jniData, 0); return AUDIOTRACK_ERROR_SETUP_NATIVEINITFAILED; - + } @@ -432,7 +432,7 @@ android_media_AudioTrack_set_volume(JNIEnv *env, jobject thiz, jfloat leftVol, j // ---------------------------------------------------------------------------- static void android_media_AudioTrack_native_finalize(JNIEnv *env, jobject thiz) { //ALOGV("android_media_AudioTrack_native_finalize jobject: %x\n", (int)thiz); - + // delete the AudioTrack object AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); @@ -441,7 +441,7 @@ static void android_media_AudioTrack_native_finalize(JNIEnv *env, jobject thiz) lpTrack->stop(); delete lpTrack; } - + // delete the JNI data AudioTrackJniStorage* pJniStorage = (AudioTrackJniStorage *)env->GetIntField( thiz, javaAudioTrackFields.jniData); @@ -456,7 +456,7 @@ static void android_media_AudioTrack_native_finalize(JNIEnv *env, jobject thiz) // ---------------------------------------------------------------------------- static void android_media_AudioTrack_native_release(JNIEnv *env, jobject thiz) { - + // do everything a call to finalize would android_media_AudioTrack_native_finalize(env, thiz); // + reset the native resources in the Java object so any attempt to access @@ -493,7 +493,7 @@ jint writeToTrack(AudioTrack* pTrack, jint audioFormat, jbyte* data, int count = sizeInBytes; int16_t *dst = (int16_t *)pTrack->sharedBuffer()->pointer(); const int8_t *src = (const int8_t *)(data + offsetInBytes); - while(count--) { + while (count--) { *dst++ = (int16_t)(*src++^0x80) << 8; } // even though we wrote 2*sizeInBytes, we only report sizeInBytes as written to hide @@ -514,7 +514,7 @@ static jint android_media_AudioTrack_native_write_byte(JNIEnv *env, jobject thi AudioTrack *lpTrack = NULL; //ALOGV("android_media_AudioTrack_native_write_byte(offset=%d, sizeInBytes=%d) called", // offsetInBytes, sizeInBytes); - + // get the audio track to load with samples lpTrack = (AudioTrack *)env->GetIntField(thiz, javaAudioTrackFields.nativeTrackInJavaObj); if (lpTrack == NULL) { @@ -599,7 +599,7 @@ static jint android_media_AudioTrack_get_playback_rate(JNIEnv *env, jobject thi thiz, javaAudioTrackFields.nativeTrackInJavaObj); if (lpTrack) { - return (jint) lpTrack->getSampleRate(); + return (jint) lpTrack->getSampleRate(); } else { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioTrack pointer for getSampleRate()"); @@ -609,14 +609,14 @@ static jint android_media_AudioTrack_get_playback_rate(JNIEnv *env, jobject thi // ---------------------------------------------------------------------------- -static jint android_media_AudioTrack_set_marker_pos(JNIEnv *env, jobject thiz, +static jint android_media_AudioTrack_set_marker_pos(JNIEnv *env, jobject thiz, jint markerPos) { - + AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); - + if (lpTrack) { - return android_media_translateErrorCode( lpTrack->setMarkerPosition(markerPos) ); + return android_media_translateErrorCode( lpTrack->setMarkerPosition(markerPos) ); } else { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioTrack pointer for setMarkerPosition()"); @@ -627,11 +627,11 @@ static jint android_media_AudioTrack_set_marker_pos(JNIEnv *env, jobject thiz, // ---------------------------------------------------------------------------- static jint android_media_AudioTrack_get_marker_pos(JNIEnv *env, jobject thiz) { - + AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); uint32_t markerPos = 0; - + if (lpTrack) { lpTrack->getMarkerPosition(&markerPos); return (jint)markerPos; @@ -646,27 +646,27 @@ static jint android_media_AudioTrack_get_marker_pos(JNIEnv *env, jobject thiz) // ---------------------------------------------------------------------------- static jint android_media_AudioTrack_set_pos_update_period(JNIEnv *env, jobject thiz, jint period) { - + AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); - + if (lpTrack) { - return android_media_translateErrorCode( lpTrack->setPositionUpdatePeriod(period) ); + return android_media_translateErrorCode( lpTrack->setPositionUpdatePeriod(period) ); } else { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioTrack pointer for setPositionUpdatePeriod()"); return AUDIOTRACK_ERROR; - } + } } // ---------------------------------------------------------------------------- static jint android_media_AudioTrack_get_pos_update_period(JNIEnv *env, jobject thiz) { - + AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); uint32_t period = 0; - + if (lpTrack) { lpTrack->getPositionUpdatePeriod(&period); return (jint)period; @@ -679,12 +679,12 @@ static jint android_media_AudioTrack_get_pos_update_period(JNIEnv *env, jobject // ---------------------------------------------------------------------------- -static jint android_media_AudioTrack_set_position(JNIEnv *env, jobject thiz, +static jint android_media_AudioTrack_set_position(JNIEnv *env, jobject thiz, jint position) { - + AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); - + if (lpTrack) { return android_media_translateErrorCode( lpTrack->setPosition(position) ); } else { @@ -697,11 +697,11 @@ static jint android_media_AudioTrack_set_position(JNIEnv *env, jobject thiz, // ---------------------------------------------------------------------------- static jint android_media_AudioTrack_get_position(JNIEnv *env, jobject thiz) { - + AudioTrack *lpTrack = (AudioTrack *)env->GetIntField( thiz, javaAudioTrackFields.nativeTrackInJavaObj); uint32_t position = 0; - + if (lpTrack) { lpTrack->getPosition(&position); return (jint)position; @@ -944,12 +944,12 @@ int register_android_media_AudioTrack(JNIEnv *env) // Get the memory mode constants if ( !android_media_getIntConstantFromClass(env, audioTrackClass, - kClassPathName, + kClassPathName, JAVA_CONST_MODE_STATIC_NAME, &(javaAudioTrackFields.MODE_STATIC)) || !android_media_getIntConstantFromClass(env, audioTrackClass, - kClassPathName, + kClassPathName, JAVA_CONST_MODE_STREAM_NAME, &(javaAudioTrackFields.MODE_STREAM)) ) { - // error log performed in android_media_getIntConstantFromClass() + // error log performed in android_media_getIntConstantFromClass() return -1; } @@ -960,16 +960,16 @@ int register_android_media_AudioTrack(JNIEnv *env) ALOGE("Can't find %s", JAVA_AUDIOFORMAT_CLASS_NAME); return -1; } - if ( !android_media_getIntConstantFromClass(env, audioFormatClass, - JAVA_AUDIOFORMAT_CLASS_NAME, + if ( !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, JAVA_CONST_PCM16_NAME, &(javaAudioTrackFields.PCM16)) - || !android_media_getIntConstantFromClass(env, audioFormatClass, - JAVA_AUDIOFORMAT_CLASS_NAME, + || !android_media_getIntConstantFromClass(env, audioFormatClass, + JAVA_AUDIOFORMAT_CLASS_NAME, JAVA_CONST_PCM8_NAME, &(javaAudioTrackFields.PCM8)) ) { - // error log performed in android_media_getIntConstantFromClass() + // error log performed in android_media_getIntConstantFromClass() return -1; } - + return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_media_JetPlayer.cpp b/core/jni/android_media_JetPlayer.cpp index 9f9bedb..a785f52 100644 --- a/core/jni/android_media_JetPlayer.cpp +++ b/core/jni/android_media_JetPlayer.cpp @@ -22,12 +22,12 @@ #include <unistd.h> #include <fcntl.h> -#include "jni.h" -#include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include <jni.h> +#include <JNIHelp.h> +#include <android_runtime/AndroidRuntime.h> -#include "utils/Log.h" -#include "media/JetPlayer.h" +#include <utils/Log.h> +#include <media/JetPlayer.h> using namespace android; @@ -56,7 +56,7 @@ static void jetPlayerEventCallback(int what, int arg1=0, int arg2=0, void* javaTarget = NULL) { JNIEnv *env = AndroidRuntime::getJNIEnv(); - if(env) { + if (env) { env->CallStaticVoidMethod( javaJetPlayerFields.jetClass, javaJetPlayerFields.postNativeEventInJava, javaTarget, @@ -84,7 +84,7 @@ android_media_JetPlayer_setup(JNIEnv *env, jobject thiz, jobject weak_this, EAS_RESULT result = lpJet->init(); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { // save our newly created C++ JetPlayer in the "nativePlayerInJavaObj" field // of the Java object (in mNativePlayerInJavaObj) env->SetIntField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, (int)lpJet); @@ -105,7 +105,7 @@ android_media_JetPlayer_finalize(JNIEnv *env, jobject thiz) ALOGV("android_media_JetPlayer_finalize(): entering."); JetPlayer *lpJet = (JetPlayer *)env->GetIntField( thiz, javaJetPlayerFields.nativePlayerInJavaObj); - if(lpJet != NULL) { + if (lpJet != NULL) { lpJet->release(); delete lpJet; } @@ -148,7 +148,7 @@ android_media_JetPlayer_loadFromFile(JNIEnv *env, jobject thiz, jstring path) EAS_RESULT result = lpJet->loadFromFile(pathStr); env->ReleaseStringUTFChars(path, pathStr); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_openFile(): file successfully opened"); return JNI_TRUE; } else { @@ -178,7 +178,7 @@ android_media_JetPlayer_loadFromFileD(JNIEnv *env, jobject thiz, EAS_RESULT result = lpJet->loadFromFD(jniGetFDFromFileDescriptor(env, fileDescriptor), (long long)offset, (long long)length); // cast params to types used by EAS_FILE - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { ALOGV("android_media_JetPlayer_openFileDescr(): file successfully opened"); return JNI_TRUE; } else { @@ -200,7 +200,7 @@ android_media_JetPlayer_closeFile(JNIEnv *env, jobject thiz) "Unable to retrieve JetPlayer pointer for closeFile()"); } - if( lpJet->closeFile()==EAS_SUCCESS) { + if (lpJet->closeFile()==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_closeFile(): file successfully closed"); return JNI_TRUE; } else { @@ -222,7 +222,7 @@ android_media_JetPlayer_play(JNIEnv *env, jobject thiz) } EAS_RESULT result = lpJet->play(); - if( result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_play(): play successful"); return JNI_TRUE; } else { @@ -245,11 +245,11 @@ android_media_JetPlayer_pause(JNIEnv *env, jobject thiz) } EAS_RESULT result = lpJet->pause(); - if( result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_pause(): pause successful"); return JNI_TRUE; } else { - if(result==EAS_ERROR_QUEUE_IS_EMPTY) { + if (result==EAS_ERROR_QUEUE_IS_EMPTY) { ALOGV("android_media_JetPlayer_pause(): paused with an empty queue"); return JNI_TRUE; } else @@ -275,7 +275,7 @@ android_media_JetPlayer_queueSegment(JNIEnv *env, jobject thiz, EAS_RESULT result = lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteFlags, userID); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_queueSegment(): segment successfully queued"); return JNI_TRUE; } else { @@ -311,7 +311,7 @@ android_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz, EAS_U32 muteMask=0; int maxTracks = lpJet->getMaxTracks(); for (jint trackIndex=0; trackIndex<maxTracks; trackIndex++) { - if(muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) + if (muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) muteMask = (muteMask << 1) | 0x00000001; else muteMask = muteMask << 1; @@ -321,7 +321,7 @@ android_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz, result = lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteMask, userID); env->ReleaseBooleanArrayElements(muteArray, muteTracks, 0); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_queueSegmentMuteArray(): segment successfully queued"); return JNI_TRUE; } else { @@ -346,7 +346,7 @@ android_media_JetPlayer_setMuteFlags(JNIEnv *env, jobject thiz, EAS_RESULT result; result = lpJet->setMuteFlags(muteFlags, bSync==JNI_TRUE ? true : false); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_setMuteFlags(): mute flags successfully updated"); return JNI_TRUE; } else { @@ -380,7 +380,7 @@ android_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz, EAS_U32 muteMask=0; int maxTracks = lpJet->getMaxTracks(); for (jint trackIndex=0; trackIndex<maxTracks; trackIndex++) { - if(muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) + if (muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) muteMask = (muteMask << 1) | 0x00000001; else muteMask = muteMask << 1; @@ -390,7 +390,7 @@ android_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz, result = lpJet->setMuteFlags(muteMask, bSync==JNI_TRUE ? true : false); env->ReleaseBooleanArrayElements(muteArray, muteTracks, 0); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_setMuteArray(): mute flags successfully updated"); return JNI_TRUE; } else { @@ -416,7 +416,7 @@ android_media_JetPlayer_setMuteFlag(JNIEnv *env, jobject thiz, EAS_RESULT result; result = lpJet->setMuteFlag(trackId, muteFlag==JNI_TRUE ? true : false, bSync==JNI_TRUE ? true : false); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_setMuteFlag(): mute flag successfully updated for track %d", trackId); return JNI_TRUE; } else { @@ -440,7 +440,7 @@ android_media_JetPlayer_triggerClip(JNIEnv *env, jobject thiz, jint clipId) EAS_RESULT result; result = lpJet->triggerClip(clipId); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_triggerClip(): triggerClip successful for clip %d", clipId); return JNI_TRUE; } else { @@ -463,7 +463,7 @@ android_media_JetPlayer_clearQueue(JNIEnv *env, jobject thiz) } EAS_RESULT result = lpJet->clearQueue(); - if(result==EAS_SUCCESS) { + if (result==EAS_SUCCESS) { //ALOGV("android_media_JetPlayer_clearQueue(): clearQueue successful"); return JNI_TRUE; } else { diff --git a/core/jni/android_media_ToneGenerator.cpp b/core/jni/android_media_ToneGenerator.cpp index 544b4c0..31151a6 100644 --- a/core/jni/android_media_ToneGenerator.cpp +++ b/core/jni/android_media_ToneGenerator.cpp @@ -21,13 +21,13 @@ #include <unistd.h> #include <fcntl.h> -#include "jni.h" -#include "JNIHelp.h" -#include "android_runtime/AndroidRuntime.h" +#include <jni.h> +#include <JNIHelp.h> +#include <android_runtime/AndroidRuntime.h> -#include "utils/Log.h" -#include "media/AudioSystem.h" -#include "media/ToneGenerator.h" +#include <utils/Log.h> +#include <media/AudioSystem.h> +#include <media/ToneGenerator.h> // ---------------------------------------------------------------------------- diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 30d4e20..ce2cdee 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -251,8 +251,16 @@ static void Surface_init( static void Surface_initFromSurfaceTexture( JNIEnv* env, jobject clazz, jobject jst) { - sp<ISurfaceTexture> st(SurfaceTexture_getSurfaceTexture(env, jst)); - sp<Surface> surface(new Surface(st)); + sp<SurfaceTexture> st(SurfaceTexture_getSurfaceTexture(env, jst)); + + if (st == NULL) { + jniThrowException(env, "java/lang/IllegalArgumentException", + "SurfaceTexture has already been released"); + return; + } + sp<ISurfaceTexture> bq = st->getBufferQueue(); + + sp<Surface> surface(new Surface(bq)); if (surface == NULL) { jniThrowException(env, OutOfResourcesException, NULL); return; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 8f03fe0..d1e3642 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -248,6 +248,21 @@ 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.PERSONAL_INFO" + android:protectionLevel="dangerous" + android:label="@string/permlab_readCallLog" + android:description="@string/permdesc_readCallLog" /> + + <!-- 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.PERSONAL_INFO" + android:protectionLevel="dangerous" + android:label="@string/permlab_writeCallLog" + android:description="@string/permdesc_writeCallLog" /> + <!-- Allows an application to read the user's personal profile data. --> <permission android:name="android.permission.READ_PROFILE" diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 48f4606..f558fc7 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"skryf kontakdata"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Laat die program toe om die kontakdata (adresse) wat op jou tablet gestoor is, te verander. Kwaadwillige programme kan dit dalk gebruik om jou kontakdata uit te vee of te verander."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Laat die program toe om die kontakdata (adresse) wat op jou foon gestoor is, te verander. Kwaadwillige programme kan dit dalk gebruik om jou kontakdata uit te vee of te verander."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"lees jou profieldata"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Laat die program toe om persoonlike profielinligting te lees wat op jou toestel gestoor is, soos jou naam en kontakbesonderhede. Dit beteken dat die program jou kan identifiseer en jou profielinligting aan ander mense kan stuur."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"skryf na jou profieldata"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Laat die program toe om enige private woorde, name en frases te lees wat die gebruiker in die gebruikerwoordeboek gestoor het."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"skryf na gebruikergedefinieerde woordeboek"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Laat die program toe om nuwe woorde in die gebruikerwoordeboek te skryf."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"verander/vee uit USB-berging se inhoud"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"wysig/vee uit SD-kaart se inhoud"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Laat die program toe om die USB-geheue te skryf."</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index b055634..59a4a19 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"የእውቂያ ውሂብ ፃፍ"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"በጡባዊ ተኮህ ላይ የተከማቹ የእውቂያ(አድራሻ) ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ፡፡ የእውቅያ ውሂብህን ለመደምሰስ ወይም ለመቀየር ተንኮል አዘል መተግበሪያዎች ሊጠቀሙት ይችላሉ፡፡"</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"በስልክህ ላይ የተከማቹ የእውቂያ(አድራሻ) ውሂብ ለመቀየር ለመተግበሪያው ይፈቅዳሉ፡፡ የእውቅያ ውሂብህን ለመደምሰስ ወይም ለመቀየር ተንኮል አዘል መተግበሪያዎች ሊጠቀሙት ይችላሉ፡፡"</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"የመገለጫ ውሂብዎን ያንብቡ"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"ልክ እንደ አንተ ስም እና የዕውቂያ መረጃ ፣ ባንተ መሳሪያ ወስጥ የተከማቹ የግል መገለጫ መረጃ ለማንበብ ለመተግበሪያው ይፈቅዳሉ፡፡ይሄም ማለት ሌሎች መተግበሪያዎች ሊለዩህ ይችላሉ እና ለሌሎች የመገለጫ መረጃህን ይልካሉ፡፡"</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"የአርስዎ መገለጫ ውሂብ ላይ ይፃፉ"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">" ተጠቃሚው በተጠቃሚ መዝገበ ቃላት ሊያከማች የቻለውን ማንኛውም የግል ቃላት፣ ስሞች፣እና ሀረጎች ለማንበብ ለመተግበሪያው ይፈቅዳሉ፡፡"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"በተጠቃሚ በተወሰነ መዝገበ ቃላት ፃፍ"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"በተጠቃሚ መዝገበ ቃላት ውስጥ አዲስ ቃል እንዲጽፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"የUSB ካርድ ይዘቶችን አንብብ"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"የSD ካርድ ይዘቶችን አንብብ"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"መተግበሪያው ከUSB ካርድ ላይ ያሉ ይዘቶችን እንዲያነብ ይፈቅድለታል፡፡"</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"መተግበሪያው ከSD ካርድ ላይ ያሉ ይዘቶችን እንዲያነብ ይፈቅድለታል፡፡"</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"የUSB ማከማቻ ይዘቶችን ቀይር/ሰርዝ"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"የSD ካርድ ይዘትንቀይር/ሰርዝ"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"ወደ USB ማህደረ ትውስታው ለመፃፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 193157b..38ee729 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"كتابة بيانات جهة الاتصال"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"للسماح للتطبيق بتعديل بيانات (عنوان) جهة الاتصال المخزّنة على الجهاز اللوحي. يمكن أن تستخدم التطبيقات الضارة ذلك لمسح بيانات جهات الاتصال أو تعديلها."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"للسماح للتطبيق بتعديل بيانات (عنوان) جهة الاتصال المخزّنة على هاتفك. يمكن أن تستخدم التطبيقات الضارة ذلك لمسح بيانات جهات الاتصال أو تعديلها."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"قراءة بيانات ملفك الشخصي"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"للسماح للتطبيق بقراءة معلومات الملف الشخصي الشخصية المخزنة على الجهاز، مثل اسمك ومعلومات جهات الاتصال. يعني ذلك أنه يمكن للتطبيق التعرف عليك وإرسال معلومات ملفك الشخصي إلى الآخرين."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"الكتابة إلى بيانات ملفك الشخصي"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"للسماح للتطبيق بقراءة أي كلمات وأسماء وعبارات خاصة ربما خزنها المستخدم في قاموس المستخدم."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"كتابة إلى القاموس المعرّف بواسطة المستخدم"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"للسماح للتطبيق بكتابة كلمات جديدة في قاموس المستخدم."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"تعديل/حذف محتويات وحدة تخزين USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"تعديل/حذف محتويات بطاقة SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"للسماح للتطبيق بالكتابة إلى وحدة تخزين USB."</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index a37e231..4a6054f 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"запісваць кантактныя дадзеныя"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Дазваляе прыкладанням змяняць кантакты (адрасы), якія захоўваюцца на планшэце. Шкоднасныя прыкладанні могуць выкарыстоўваць гэтую магчымасць для выдалення або змены кантактных дадзеных."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Дазваляе прыкладанням змяняць кантакты (адрасы), якія захоўваюцца на вашым тэлефоне. Шкоднасныя прыкладанні могуць выкарыстоўваць гэту магчымасць для выдалення або змены кантактных дадзеных."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"чытаць дадзеныя вашага профілю"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Дазваляе прыкладанням счытваць асабістую інфармацыю ў профілях, якая захоўваецца на вашай прыладзе, напрыклад, ваша імя і кантактную інфармацыю. Гэта азначае, што прыкладанне можа ідэнтыфікаваць вас і адправіць інфармацыю вашага профілю трэцім асобам."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"увядзіце дадзеныя вашага профілю"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Дазваляе прыкладанню счытваць любыя прыватныя словы, імёны і фразы, якія карыстальнік можа захоўваць у карыстальніцкім слоўніку."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"запісаць у карыстальніцкі слоўнік"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дазваляе прыкладанням запісваць новыя словы ў карыстальніцкі слоўнік."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"змяніць/выдаліць змесціва USB-назапашвальнiка"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"змяняць/выдаляць змесціва SD-карты"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дазваляе прыкладаням выконваць запіс ва USB-назапашвальнік."</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index c277ee9..b477d04 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"запис на данни за контактите"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Разрешава на приложението да променя данните за контактите (за адрес), съхранени в таблета ви. Злонамерените приложения могат да използват това, за да изтрият или променят тези данни."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Разрешава на приложението да променя данните за контактите (за адрес), съхранени в телефона ви. Злонамерените приложения могат да използват това, за да изтрият или променят тези данни."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"четене на данните в профила ви"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Разрешава на приложението да чете информацията от личния потребителски профил, съхранена на устройството ви, например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща информацията за потребителския ви профил на други хора."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"запис в потр. ви профил"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Разрешава на приложението да чете частни думи, имена и фрази, които потребителят може да е съхранил в потребителския речник."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"запис в дефинирания от потребителя речник"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Разрешава на приложението да записва нови думи в потребителския речник."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"промяна/изтриване на съдържанието в USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"промяна/изтриване на съдържанието на SD картата"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Разрешава на приложението да записва в USB."</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 189225e..0cb35db 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"escriure dades de contacte"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permet que l\'aplicació modifiqui les dades de contacte (adreça) emmagatzemades a la tauleta. Les aplicacions malicioses poden utilitzar-ho per esborrar o modificar les dades de contacte."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permet que l\'aplicació modifiqui les dades de contacte (adreça) emmagatzemades al telèfon. Les aplicacions malicioses poden utilitzar-ho per esborrar o per modificar les dades de contacte."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"lectura de dades del teu perfil"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permet que l\'aplicació pugui llegir informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que l\'aplicació et pot identificar i enviar la informació del teu perfil a altres persones."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"escriptura a les teves dades del perfil"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permet que l\'aplicació llegeixi les paraules, els noms i les frases privats que l\'usuari pot haver emmagatzemat al seu diccionari."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"escriu al diccionari definit per l\'usuari"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permet que l\'aplicació escrigui paraules noves al diccionari de l\'usuari."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/esborrar contingut USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/esborrar contingut de la targeta SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permet que l\'aplicació escrigui a l\'emmagatzematge USB."</string> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 389a672..d363f0c 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"zapisovat data kontaktů"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Umožňuje aplikaci upravit kontaktní údaje (adresy) uložené v tabletu. Škodlivé aplikace mohou toto oprávnění použít k vymazání nebo úpravě kontaktních údajů."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Umožňuje aplikaci upravit kontaktní údaje uložené v telefonu (adresu). Škodlivé aplikace mohou toto oprávnění použít k vymazání nebo úpravě kontaktních údajů."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"čtení údajů o vašem profilu"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Umožňuje aplikaci číst údaje v osobním profilu uložené v zařízení, například jméno nebo kontaktní údaje. Znamená to, že vás ostatní aplikace mohou identifikovat a odeslat údaje z profilu dalším aplikacím."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovat do údajů o profilu"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Umožní aplikaci číst soukromá slova, jména a fráze, která uživatel mohl uložit do svého slovníku."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"zápis do slovníku definovaného uživatelem"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Umožňuje aplikaci zapisovat nová slova do uživatelského slovníku."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"úprava/mazání obsahu úložiště USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"změna/smazání obsahu karty SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Umožňuje aplikaci zapisovat do úložiště USB."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 3ca0534..ed51692 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"skriv kontaktdata"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Tillader, at appen kan ændre data for kontaktpersoner (adresser), der er gemt på din tablet. Ondsindede apps kan bruge dette til at slette eller ændre dine kontaktoplysninger."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Tillader, at appen kan ændre kontaktdata (adresser), der er gemt på din telefon. Ondsindede apps kan bruge dette til at slette eller ændre kontaktdata."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"læse dine profildata"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Tillader, at appen kan læse personlige profiloplysninger, der er gemt på din enhed, f.eks. dit navn og dine kontaktoplysninger. Det betyder, at appen kan identificere dig og sende dine profiloplysninger til andre."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"skrive til dine profildata"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Tillader, at appen kan læse alle private ord, navne og sætninger, som brugeren kan have gemt i brugerordbogen."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"skrive til brugerordbogen"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Tillader, at appen kan skrive nye ord i brugerordbogen."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"læse USB-lagerets indhold"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"læse indholdet af SD-kortet"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Tillader, at app\'en læser indhold på USB-lager."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Tillader, at app\'en læser indholdet af SD-kortet."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"rette/slette i USB-lager"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ret/slet indholdet på SD-kortet"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Lader appen skrive til USB."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 72ac55f..7d12a27 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"Kontaktdaten schreiben"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Ermöglicht der App, die auf Ihrem Tablet gespeicherten Kontaktdaten (Adressen) zu ändern. Schädliche Apps können so Ihre Kontaktdaten löschen oder ändern."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Ermöglicht der App, die auf Ihrem Telefon gespeicherten Kontaktdaten (Adressen) zu ändern. Schädliche Apps können so Ihre Kontaktdaten löschen oder ändern."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"Ihre Profildaten lesen"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Ermöglicht der App, auf Ihrem Gerät gespeicherte persönliche Profilinformationen zu lesen, darunter Ihren Namen und Ihre Kontaktdaten. Die App kann Sie somit identifizieren und Ihre Profilinformationen an andere senden."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"In Ihre Profildaten schreiben"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Ermöglicht der App, alle privaten Wörter, Namen und Ausdrücke zu lesen, die ein Nutzer in seinem Wörterbuch gespeichert hat"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"In benutzerdefiniertes Wörterbuch schreiben"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Ermöglicht der App, dem Nutzerwörterbuch neue Einträge hinzuzufügen"</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"USB-Speicher-Inhalt lesen"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"SD-Karten-Inhalt lesen"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Ermöglicht der App, den USB-Speicher zu lesen"</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Ermöglicht der App, den Inhalt einer SD-Karte zu lesen"</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB-Speicherinhalt ändern/löschen"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD-Karten-Inhalt ändern/löschen"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ermöglicht der App, in den USB-Speicher zu schreiben"</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 0e5dd10..c3898ab 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"εγγραφή δεδομένων επαφής"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Επιτρέπει στην εφαρμογή να τροποποιεί τα δεδομένα επαφής (διεύθυνσης) που είναι αποθηκευμένα στο tablet σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα επαφών σας."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Επιτρέπει στην εφαρμογή να τροποποιεί τα δεδομένα επαφής (διεύθυνσης) που είναι αποθηκευμένα στο τηλέφωνό σας. Κακόβουλες εφαρμογές μπορούν να το χρησιμοποιήσουν για να διαγράψουν ή να τροποποιήσουν τα δεδομένα επαφών σας."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"ανάγν. δεδ. προφ."</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Επιτρέπει στην εφαρμογή την ανάγνωση προσωπικών πληροφοριών προφίλ οι οποίες είναι αποθηκευμένες στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι η εφαρμογή μπορεί να σας αναγνωρίσει και να στείλει τις πληροφορίες σας προφίλ σε άλλους."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"εγγρ. σε δεδ. προφίλ"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Επιτρέπει στην εφαρμογή την ανάγνωση ιδιωτικών λέξεων, ονομάτων και φράσεων, τα οποία ο χρήστης ενδέχεται να έχει αποθηκεύσει στο λεξικό χρήστη."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"εγγραφή σε λεξικό καθορισμένο από τον χρήστη"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Επιτρέπει στην εφαρμογή την εγγραφή νέων λέξεων στο λεξικό χρήστη."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"τροπ./διαγρ. περ. απ. χώρ. USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"τροποποίηση/διαγραφή περιεχομένων κάρτας SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Επιτρέπει στην εφαρμογή την εγγραφή στον αποθηκευτικό χώρο USB."</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index e7ff973..5ad68fc 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"write contact data"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Allows the app to modify the contact (address) data stored on your tablet. Malicious apps may use this to erase or modify your contact data."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Allows the app to modify the contact (address) data stored on your phone. Malicious apps may use this to erase or modify your contact data."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"read your profile data"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Allows the app to read personal profile information stored on your device, such as your name and contact information. This means the app can identify you and send your profile information to others."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"write to your profile data"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Allows the app to read any private words, names and phrases that the user may have stored in the user dictionary."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"write to user-defined dictionary"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Allows the app to write new words into the user dictionary."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"read USB storage contents"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"read SD card contents"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Allows the app to read contents of USB storage."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Allows the app to read contents of SD card."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modify/delete USB storage contents"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modify/delete SD card contents"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Allows the app to write to the USB storage."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 8e36948..20f18d9 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"escribir datos de contacto"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permite que la aplicación modifique la información de contacto (dirección) almacenada en tu tableta. Las aplicaciones maliciosas pueden utilizar este permiso para borrar o modificar tu información de contacto."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permite que la aplicación modifique la información de contacto (dirección) almacenada en tu dispositivo. Las aplicaciones maliciosas pueden utilizar este permiso para borrar o modificar tu información de contacto."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"Leer tus datos de perfil"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permite que la aplicación lea la información de perfil almacenada en tu dispositivo, como tu nombre e información de contacto. Esto significa que la aplicación puede identificarte y enviar tu información de perfil a otros."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"Escrib. en datos de tu perfil"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permite que la aplicación lea cualquier palabra, nombre o frase de carácter privado que el usuario haya almacenado en su diccionario."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"agregar al diccionario definido por el usuario"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite que la aplicación ingrese palabras nuevas en el diccionario del usuario."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar o eliminar el contenido del almacenamiento USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/eliminar el contenido de la tarjeta SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite que la aplicación escriba en el almacenamiento USB."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index a4638fa..940e58a 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"escribir datos de contacto"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permite que la aplicación lea todos los datos (direcciones) de contactos almacenados en el tablet. Las aplicaciones malintencionadas pueden usar este permiso para borrar o modificar los datos de contactos."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permite que la aplicación consulte todos los datos (direcciones) de contactos almacenados en el teléfono. Las aplicaciones malintencionadas pueden usar este permiso para borrar o modificar los datos de contactos."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"acceder a datos de tu perfil"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permite que la aplicación acceda a información del perfil personal almacenada en el dispositivo (como el nombre o la información de contacto), lo que significa que la aplicación puede identificar al usuario y enviar la información de su perfil a otros usuarios."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"escribir en datos de tu perfil"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permite que la aplicación lea cualquier palabra, nombre o frase de carácter privado que el usuario haya almacenado en su diccionario."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"añadir al diccionario definido por el usuario"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite que la aplicación escriba palabras nuevas en el diccionario de usuario."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/borrar contenido USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/eliminar contenido de la tarjeta SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite escribir en el almacenamiento USB."</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index 697c8f1..7b91d48 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"kirjuta kontaktandmeid"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Võimaldab rakendusel muuta tahvelarvutisse salvestatud kontaktandmeid (aadresse). Pahatahtlikud rakendused võivad seda kasutada teie kontaktandmete kustutamiseks või muutmiseks."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Võimaldab rakendusel muuta telefoni salvestatud kontaktandmeid (aadresse). Pahatahtlikud rakendused võivad seda kasutada teie kontaktandmete kustutamiseks või muutmiseks."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"profiili andmete lugemine"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Võimaldab rakendusel lugeda seadmesse salvestatud isiklikku teavet, näiteks teie nime ja kontaktandmeid. See tähendab, et rakendus saab teid tuvastada ja saata teie profiiliteavet teistele."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"andmete kirjutamine profiili"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Võimaldab rakendusel lugeda kõiki privaatseid sõnu, nimesid ja fraase, mille kasutaja võis salvestada kasutajasõnastikku."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"Kasutaja määratud sõnastikku kirjutamine"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Võimaldab rakendusel kirjutada kasutajasõnastikku uusi sõnu."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB-seadme sisu muutm./kustut."</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"muuda/kustuta SD-kaardi sisu"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Võimaldab rakendusel kirjutada USB-mäluseadmele."</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index a4a9bff..bb4689c 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"نوشتن اطلاعات تماس"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"به برنامه اجازه میدهد دادههای مخاطب ذخیره شده در رایانه لوحی را تغییر دهد. برنامههای مخرب میتوانند از آن استفاده کنند تا دادههای تماس شما را تغییر دهند یا پاک کنند."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"به برنامه اجازه میدهد تا دادههای مخاطب (آدرس) را که در تلفن ذخیره شده تغییر دهد. برنامههای مخرب میتوانند از این استفاده کنند تا دادههای تماس شما را پاک کنند یا تغییر دهند."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"خواندن دادههای نمایه شما"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"به برنامه اجازه میدهد اطلاعات نمایه شخصی ذخیره شده در دستگاه شما را بخواند. یعنی برنامه میتواند شما را شناسایی کند و اطلاعات نمایه شما را به دیگران ارسال کند."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"نوشتن در دادههای نمایه شما"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"به برنامه اجازه میدهد هر گونه کلمه، نام، عبارت خصوصی را که کاربر در فرهنگ لغت خود ذخیره کرده است بخواند."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"نوشتن در فرهنگ لغت تعریف شده از سوی کاربر"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"به برنامه اجازه میدهد تا کلمات جدید را در فهرست کاربر بنویسد."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"اصلاح/حذف محتواهای حافظه USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"اصلاح کردن/حذف محتویات کارت SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"به برنامه اجازه میدهد تا در حافظه USB بنویسد."</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 1b8b18a..553b590 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"kirjoita yhteystietoja"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Antaa sovelluksen muokata tablet-laitteen yhteystietoja (osoitetietoja). Haitalliset sovellukset voivat käyttää tätä yhteystietojen poistamiseen tai muokkaamiseen."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Antaa sovelluksen muokata puhelimen yhteystietoja (osoitetietoja). Haitalliset sovellukset voivat käyttää tätä yhteystietojen poistamiseen tai muokkaamiseen."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"lukea profiilisi tiedot"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Antaa sovelluksen lukea laitteelle tallennettuja henkilökohtaisia tietoja, kuten nimen ja yhteystietoja. Tämä antaa sovelluksen tunnistaa sinut ja lähettää profiilitietojasi muille."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"kirjoittaa profiilin tietoihin"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Antaa sovelluksen lukea yksityisiä sanoja, nimiä tai ilmauksia, joita käyttäjä on voinut tallentaa käyttäjän sanakirjaan."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"käyttäjän määrittelemään sanakirjaan kirjoittaminen"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Antaa sovelluksen kirjoittaa uusia sanoja käyttäjän sanakirjaan."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"muokkaa/poista USB-sisältöä"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"muokkaa/poista SD-kortin sisältöä"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Antaa sovelluksen kirjoittaa USB-tallennustilaan."</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index b19a7de..7e2c4c0 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"Édition des données d\'un contact"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permet à l\'application de modifier les coordonnées (adresses) de vos contacts qui sont stockées sur votre tablette. Des applications malveillantes peuvent exploiter cette fonctionnalité pour effacer ou modifier ces coordonnées."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permet à l\'application de modifier les coordonnées (adresses) de vos contacts qui sont stockées sur votre téléphone. Des applications malveillantes peuvent exploiter cette fonctionnalité pour effacer ou modifier ces coordonnées."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"lire vos données de profil"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permet à l\'application de lire les informations de profil stockées sur votre appareil, telles que votre nom et vos coordonnées, ou d\'en ajouter. D\'autres applications peuvent alors vous identifier et envoyer vos informations de profil à des tiers."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"modifier vos données de profil"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permet à l\'application de lire tous les mots, noms et expressions privés que l\'utilisateur a pu enregistrer dans son dictionnaire personnel."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"enregistrer dans le dictionnaire défini par l\'utilisateur"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permet à l\'application d\'enregistrer de nouveaux mots dans le dictionnaire personnel de l\'utilisateur."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"Modifier/Supprimer contenu mémoire USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modifier/supprimer le contenu de la carte SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permet à l\'application de modifier le contenu de la mémoire de stockage USB."</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index d4b921f..bd56421 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"संपर्क डेटा लिखें"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"एप्लिकेशन को आपके टेबलेट में संग्रहीत संपर्क (पता) डेटा संशोधित करने देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग आपके संपर्क डेटा को मिटाने या संशोधित करने में कर सकते हैं."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"एप्लिकेशन को आपके फ़ोन में संग्रहीत संपर्क (पता) डेटा संशोधित करने देता है. दुर्भावनापूर्ण एप्लिकेशन इसका उपयोग आपके संपर्क डेटा को मिटाने या संशोधित करने में कर सकते हैं."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"अपना प्रोफ़ाइल डेटा पढ़ें"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"एप्लिकेशन को आपके उपकरण में संग्रहीत नाम और संपर्क जानकारी जैसी निजी प्रोफ़ाइल जानकारी पढ़ने देता है. इसका अर्थ है कि एप्लिकेशन आपको पहचान सकता है और आपकी प्रोफ़ाइल की जानकारी अन्य लोगों को भेज सकता है."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"अपने प्रोफ़ाइल डेटा में लिखें"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"एप्लिकेशन को ऐसे निजी शब्दों, नामों और वाक्यांशों को पढ़ने देता है जो संभवत: उपयोगकर्ता द्वारा उपयोगकर्ता डिक्शनरी में संग्रहीत किए गए हों."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"उपयोगकर्ता-निर्धारित डिक्शनरी में लिखें"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"एप्लिकेशन को उपयोगकर्ता डिक्शनरी में नए शब्द लिखने देता है."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB संग्रहण सामग्रियों को संशोधित करें/हटाएं"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD कार्ड सामग्रियां संशोधित करें/हटाएं"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"एप्लि. को USB संग्रहण में लिखने देता है."</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index fbd3a3d..8b2e753 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"pisanje kontaktnih podataka"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Omogućuje aplikaciji da promijeni kontaktne podatke (adrese) pohranjene na tabletnom računalu. Zlonamjerne aplikacije mogu na taj način izbrisati ili promijeniti vaše kontaktne podatke."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Omogućuje aplikaciji da promijeni kontaktne podatke (adrese) pohranjene na telefonu. Zlonamjerne aplikacije mogu na taj način izbrisati ili promijeniti vaše kontaktne podatke."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"čitanje podataka vašeg profila"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Omogućuje aplikaciji čitanje osobnih podataka profila pohranjenih na uređaju, kao što su vaše ime ili kontaktni podaci. To znači da vas aplikacija može identificirati i slati informacije s vašeg profila drugima."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje u podatke profila"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Aplikaciji omogućuje čitanje svih privatnih riječi, imena i izraza koje je korisnik pohranio u korisničkom rječniku."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"pisanje u korisnički definiran rječnik"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Aplikaciji omogućuje pisanje novih riječi u korisnički rječnik."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"izmjeni/briši sadržaje memorije USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"izmjena/brisanje sadržaja SD kartice"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Dopušta pisanje u USB pohranu."</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index c6190fd..d55caee 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"névjegyadatok írása"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Lehetővé teszi az alkalmazás számára, hogy módosítsa a táblagépen tárolt névjegy- (cím-) adatokat. A rosszindulatú alkalmazások felhasználhatják ezt a névjegyadatok törlésére vagy módosítására."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Lehetővé teszi az alkalmazás számára, hogy módosítsa a telefonon tárolt névjegy- (cím-) adatokat. A rosszindulatú alkalmazások felhasználhatják ezt a névjegyadatok törlésére vagy módosítására."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"olvassa el profiladatait"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Lehetővé teszi az alkalmazás számára a készüléken tárolt személyes profiladatok, például a név és elérhetőség olvasását. Ez azt jelenti, hogy más alkalmazások is azonosíthatják Önt, és elküldhetik másoknak a profiladatait."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"írás a profiladatokba"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Lehetővé teszi az alkalmazás számára, hogy olvassa a felhasználói szótárban tárolt saját szavakat, neveket és kifejezéseket."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"a felhasználó által definiált szótár írása"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Lehetővé teszi az alkalmazás számára, hogy új szavakat írjon a felhasználói szótárba."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB-tár tartalmának módosítása és törlése"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"az SD-kártya tartalmának módosítása és törlése"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Az alkalmazás USB-tárra írhat."</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index d2d4ece..2fad7a1 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -63,10 +63,10 @@ <string name="RuacMmi" msgid="7827887459138308886">"Penolakan panggilan yang tidak diinginkan"</string> <string name="CndMmi" msgid="3116446237081575808">"Pengiriman nomor panggilan"</string> <string name="DndMmi" msgid="1265478932418334331">"Jangan ganggu"</string> - <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Nomor penelepon bawaan \"dibatasi\". Panggilan selanjutnya: Dibatasi"</string> - <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Nomor pengguna bawaan \"dibatasi\". Panggilan selanjutnya: Tidak dibatasi."</string> - <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Nomor penelepon bawaan tidak dibatasi. Panggilan selanjutnya: Dibatasi"</string> - <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Nomor penelepon bawaan tidak dibatasi. Panggilan selanjutnya: Tidak dibatasi"</string> + <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Nomor penelepon default \"dibatasi\". Panggilan selanjutnya: Dibatasi"</string> + <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Nomor pengguna default \"dibatasi\". Panggilan selanjutnya: Tidak dibatasi."</string> + <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Nomor penelepon default tidak dibatasi. Panggilan selanjutnya: Dibatasi"</string> + <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Nomor penelepon default tidak dibatasi. Panggilan selanjutnya: Tidak dibatasi"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Layanan tidak diperlengkapi."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Anda tidak dapat mengubah setelan nomor penelepon."</string> <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Akses terbatas berubah"</string> @@ -220,7 +220,7 @@ <string name="permlab_setDebugApp" msgid="3022107198686584052">"mengaktifkan debugging apl"</string> <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Mengizinkan apl mengaktifkan debugging untuk apl lain. Apl berbahaya dapat menggunakan cara ini untuk menutup apl lain."</string> <string name="permlab_changeConfiguration" msgid="8214475779521218295">"ubah setelan UI Anda"</string> - <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Mengizinkan apl mengubah konfigurasi saat ini, misalnya lokal atau ukuran fon keseluruhan."</string> + <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Mengizinkan apl mengubah konfigurasi saat ini, misalnya lokal atau ukuran font keseluruhan."</string> <string name="permlab_enableCarMode" msgid="5684504058192921098">"aktifkan mode mobil"</string> <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Mengizinkan apl mengaktifkan mode mobil."</string> <string name="permlab_killBackgroundProcesses" msgid="8373714752793061963">"hentikan proses latar belakang"</string> @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"tuliskan data kenalan"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Mengizinkan apl mengubah data (alamat) kenalan yang tersimpan di tablet. Apl berbahaya dapat menggunakan ini untuk menghapus atau mengubah data kenalan Anda."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Mengizinkan apl memodifikasi data (alamat) kenalan yang tersimpan di ponsel Anda. Apl berbahaya dapat menggunakan ini untuk menghapus atau memodifikasi data kenalan Anda."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"membaca data profil Anda"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Mengizinkan apl membaca informasi profil pribadi yang tersimpan di perangkat Anda, misalnya nama dan informasi kenalan Anda. Ini artinya apl dapat mengenali dan mengirim informasi profil Anda ke orang lain."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"menulis ke data profil Anda"</string> @@ -434,7 +446,7 @@ <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Mengizinkan apl menyetel wallpaper sistem."</string> <string name="permlab_setWallpaperHints" msgid="3600721069353106851">"atur petunjuk ukuran wallpaper"</string> <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Mengizinkan apl menyetel petunjuk ukuran wallpaper sistem."</string> - <string name="permlab_masterClear" msgid="2315750423139697397">"setel ulang sistem ke setelan bawaan pabrik"</string> + <string name="permlab_masterClear" msgid="2315750423139697397">"setel ulang sistem ke setelan default pabrik"</string> <string name="permdesc_masterClear" msgid="3665380492633910226">"Mengizinkan apl menyetel ulang sistem ke setelan pabrik sepenuhnya, menghapus semua data, konfigurasi, dan apl yang terpasang."</string> <string name="permlab_setTime" msgid="2021614829591775646">"atur waktu"</string> <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Mengizinkan apl mengubah waktu pada jam tablet."</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Mengizinkan apl membaca kata, nama, dan frasa pribadi apa pun yang mungkin disimpan oleh pengguna di kamus pengguna."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"menulis ke kamus yang dibuat pengguna"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Mengizinkan apl menulis kata-kata baru ke dalam kamus pengguna."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"ubah/hapus konten penyimpanan USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ubah/hapus isi kartu SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Mengizinkan apl menulis ke penyimpanan USB."</string> @@ -695,10 +715,10 @@ <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah mengetik PIN. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string> <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci tablet menggunakan info masuk Google."\n\n"Coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string> <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci ponsel menggunakan info masuk Google."\n\n"Coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Anda telah gagal mencoba membuka gembok tablet sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, tablet akan disetel ulang ke setelan bawaan pabrik dan semua data pengguna hilang."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Anda telah gagal mencoba membuka gembok ponsel sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, ponsel akan disetel ulang ke setelan bawaan pabrik dan semua data pengguna hilang."</string> - <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Anda telah gagal mencoba membuka gembok tablet sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Kini tablet akan disetel ulang ke setelan bawaan pabrik."</string> - <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Anda telah gagal mencoba membuka gembok ponsel sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Kini ponsel akan disetel ulang ke setelan bawaan pabrik."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Anda telah gagal mencoba membuka gembok tablet sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, tablet akan disetel ulang ke setelan default pabrik dan semua data pengguna hilang."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Anda telah gagal mencoba membuka gembok ponsel sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> upaya gagal lagi, ponsel akan disetel ulang ke setelan default pabrik dan semua data pengguna hilang."</string> + <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Anda telah gagal mencoba membuka gembok tablet sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Kini tablet akan disetel ulang ke setelan default pabrik."</string> + <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Anda telah gagal mencoba membuka gembok ponsel sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Kini ponsel akan disetel ulang ke setelan default pabrik."</string> <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Coba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> detik."</string> <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Lupa pola?"</string> <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Pembuka kunci akun"</string> @@ -909,8 +929,8 @@ <string name="capital_on" msgid="1544682755514494298">"HIDUP"</string> <string name="capital_off" msgid="6815870386972805832">"MATI"</string> <string name="whichApplication" msgid="4533185947064773386">"Tindakan lengkap menggunakan"</string> - <string name="alwaysUse" msgid="4583018368000610438">"Gunakan secara bawaan untuk tindakan ini."</string> - <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Menghapus bawaan di Setelan sistem > Apl > Terunduh."</string> + <string name="alwaysUse" msgid="4583018368000610438">"Gunakan secara default untuk tindakan ini."</string> + <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Menghapus default di Setelan sistem > Apl > Terunduh."</string> <string name="chooseActivity" msgid="7486876147751803333">"Pilih tindakan"</string> <string name="chooseUsbActivity" msgid="6894748416073583509">"Pilih apl untuk perangkat USB"</string> <string name="noApplications" msgid="2991814273936504689">"Tidak ada apl yang dapat melakukan tindakan ini."</string> @@ -961,8 +981,8 @@ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volume panggilan"</string> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volume media"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volume pemberitahuan"</string> - <string name="ringtone_default" msgid="3789758980357696936">"Nada dering bawaan"</string> - <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nada dering bawaan (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> + <string name="ringtone_default" msgid="3789758980357696936">"Nada dering default"</string> + <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nada dering default (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> <string name="ringtone_silent" msgid="4440324407807468713">"Senyap"</string> <string name="ringtone_picker_title" msgid="3515143939175119094">"Nada dering"</string> <string name="ringtone_unknown" msgid="5477919988701784788">"Nada dering tidak dikenal"</string> @@ -1007,7 +1027,7 @@ <string name="time_picker_dialog_title" msgid="8349362623068819295">"Setel waktu"</string> <string name="date_picker_dialog_title" msgid="5879450659453782278">"Setel tanggal"</string> <string name="date_time_set" msgid="5777075614321087758">"Setel"</string> - <string name="default_permission_group" msgid="2690160991405646128">"Bawaan"</string> + <string name="default_permission_group" msgid="2690160991405646128">"Default"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ffffa3a3">"BARU: "</font></string> <string name="no_permissions" msgid="7283357728219338112">"Tidak perlu izin"</string> <string name="perms_hide" msgid="7283915391320676226"><b>"Sembunyikan"</b></string> @@ -1076,7 +1096,7 @@ <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"perbarui statistik penggunaan komponen"</string> <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Mengizinkan apl memodifikasi statistik penggunaan komponen yang dikumpulkan. Tidak untuk digunakan oleh apl normal."</string> <string name="permlab_copyProtectedData" msgid="4341036311211406692">"menyalin konten"</string> - <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Mengizinkan apl menjalankan layanan kontainer bawaan untuk menyalin konten. Tidak untuk digunakan oleh apl normal."</string> + <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Mengizinkan apl menjalankan layanan kontainer default untuk menyalin konten. Tidak untuk digunakan oleh apl normal."</string> <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Sentuh dua kali untuk mengontrol perbesar/perkecil"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Tidak dapat menambahkan gawit."</string> <string name="ime_action_go" msgid="8320845651737369027">"Buka"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 96c6709..5a4f357 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"scrittura dati di contatto"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Consente all\'applicazione di modificare i dati di contatto (indirizzi) memorizzati sul tablet. Le applicazioni dannose potrebbero farne uso per cancellare o modificare i tuoi dati di contatto."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Consente all\'applicazione di modificare i dati di contatto (indirizzi) memorizzati sul telefono. Le applicazioni dannose potrebbero farne uso per cancellare o modificare i tuoi dati di contatto."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"lettura dei tuoi dati profilo"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Consente all\'applicazione di leggere informazioni del profilo personale memorizzate sul dispositivo, come il tuo nome e le tue informazioni di contatto. Ciò significa che l\'applicazione può identificarti e inviare le tue informazioni di profilo ad altri."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"scrittura dati del profilo"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Consente all\'applicazione di leggere parole, frasi e nomi privati che l\'utente potrebbe aver memorizzato nel dizionario utente."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"scrittura nel dizionario definito dall\'utente"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Consente all\'applicazione di scrivere nuove parole nel dizionario utente."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"lettura contenuti archivio USB"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"lettura dei contenuti della scheda SD"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Consente di leggere l\'archivio USB."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Consente all\'applicazione di leggere contenuti della scheda SD."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modifica/eliminaz. contenuti archivio USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificare/eliminare i contenuti della scheda SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Consente all\'applicazione di scrivere nell\'archivio USB."</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 485e0b0..56a988f 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"כתוב נתונים של אנשי קשר"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"מאפשר ליישום לשנות את פרטי הקשר (כתובת) המאוחסנים בטבלט. יישומים זדוניים עלולים להשתמש בכך כדי למחוק או לשנות את פרטי הקשר שלך."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"מאפשר ליישום לשנות את פרטי הקשר (כתובת) המאוחסנים בטלפון. יישומים זדוניים עלולים להשתמש בכך כדי למחוק או לשנות את פרטי הקשר שלך."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"קרא את נתוני הפרופיל שלך"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"מאפשר ליישום לקרוא נתונים בפרטי הפרופיל האישי המאוחסנים במכשיר, כגון שמך ופרטי הקשר שלך. משמעות הדבר שהיישום יוכל לזהות אותך ולשלוח את מידע הפרופיל שלך לאנשים אחרים."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"כתוב בנתוני הפרופיל שלך"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"מאפשר ליישום לקרוא מילים, שמות וביטויים פרטיים שהמשתמש אחסן במילון המשתמש."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"כתיבה למילון בהגדרת המשתמש"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"מאפשר ליישום לכתוב מילים חדשות במילון המשתמש."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"קריאת תוכן אחסון USB"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"קריאת תוכן כרטיס SD"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"מאפשר ליישום לקרוא את התוכן של אחסון USB."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"מאפשר ליישום לקרוא את התוכן של כרטיס SD."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"שנה/מחק תוכן באמצעי אחסון מסוג USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"שנה/מחק תוכן של כרטיס SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"מאפשר ליישום לכתוב להתקן האחסון מסוג USB."</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index bc9840d..c248040 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"連絡先データの書き込み"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"タブレットに保存されている連絡先(アドレス)データの変更をアプリに許可します。この許可を悪意のあるアプリに利用されると、連絡先データが消去または変更される恐れがあります。"</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"携帯端末に保存されている連絡先(アドレス)データの変更をアプリに許可します。この許可を悪意のあるアプリに利用されると、連絡先データが消去または変更される恐れがあります。"</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"プロフィールデータの読み取り"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"端末に保存されている個人のプロフィール情報(名前、連絡先情報など)を読み取ることをアプリに許可します。許可すると、アプリではユーザーの身元を特定したりプロフィール情報を第三者に転送したりできるようになります。"</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"プロフィールデータに書き込む"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"ユーザーが単語リストに個人情報として登録した可能性のある語句や名前を読み込むことをアプリに許可します。"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"単語リストへの書き込み"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"単語リストに新しい語句を書き込むことをアプリに許可します。"</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USBストレージのコンテンツの変更/削除"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SDカードのコンテンツを修正/削除する"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"USBストレージへの書き込みをアプリに許可します。"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index c9801a3..cbd2e85 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"연락처 데이터 작성"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"앱이 태블릿에 저장된 모든 연락처(주소) 데이터를 읽을 수 있도록 허용합니다. 이 경우 악성 앱이 연락처 데이터를 지우거나 수정할 수 있습니다."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"앱이 휴대전화에 저장된 모든 연락처(주소) 데이터를 읽을 수 있도록 허용합니다. 이 경우 악성 앱이 연락처 데이터를 지우거나 수정할 수 있습니다."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"프로필 데이터 읽기"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"앱이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 읽을 수 있도록 허용합니다. 이는 앱이 사용자를 확인하고 다른 사용자들에게 해당 프로필 정보를 전송할 수 있다는 것을 의미합니다."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"프로필 데이터에 쓰기"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"앱이 사용자 사전에 보관되어 있는 비공개 단어, 이름 및 구문을 읽도록 허용합니다."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"사용자 정의 사전에 작성"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"앱이 사용자 사전에 새 단어를 입력할 수 있도록 허용합니다."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB 저장소 콘텐츠 수정/삭제"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD 카드 콘텐츠 수정/삭제"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"앱이 USB 저장소에 쓸 수 있도록 허용합니다."</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index 4424ad5..b5afdd5 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"rašyti adresatų duomenis"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Leidžiama programai keisti planšetiniame kompiuteryje saugomus kontaktinius (adreso) duomenis. Kenkėjiškos programos gali tai naudoti, kad ištrintų ar pakeistų jūsų kontaktinius duomenis."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Leidžiama programai keisti telefone saugomus kontaktinius (adreso) duomenis. Kenkėjiškos programos gali tai naudoti, kad ištrintų ar pakeistų jūsų kontaktinius duomenis."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"skaityti profilio duomenis"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Leidžiama programai skaityti asmeninę profilio informaciją, saugomą jūsų įrenginyje, pvz., jūsų vardą, pavardę ir kontaktinę informaciją. Tai reiškia, kad programa gali nustatyti jūsų tapatybę ir siųsti profilio informaciją kitiems."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"rašyti kaip profilio duomenis"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Leidžiama programai skaityti privačius žodžius, vardus ir frazes, kuriuos naudotojas išsaugojo naudotojo žodyne."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"rašyti naudotojo nustatytame žodyne"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Leidžiama programai rašyti naujus žodžius į naudotojo žodyną."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"keisti / ištrinti USB atmintinės turinį"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"keisti / ištrinti SD kortelės turinį"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Leidž. progr. raš. į USB atm."</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 89baaaa..65b3d7e 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"rakstīt kontaktpersonu datus"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Ļauj lietotnei modificēt planšetdatorā saglabātos kontaktpersonu (adrešu) datus. Ļaunprātīgas lietotnes to var izmantot, lai dzēstu vai modificētu kontaktpersonu datus."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Ļauj lietotnei modificēt tālrunī saglabātos kontaktpersonu (adrešu) datus. Ļaunprātīgas lietotnes to var izmantot, lai dzēstu vai modificētu kontaktpersonu datus."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"jūsu profila datu lasīšana"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Ļauj lietotnei lasīt ierīcē saglabāto personīgā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju. Tas nozīmē, ka lietotne var jūs identificēt un sūtīt jūsu profila informāciju citām personām."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"rakstīšana jūsu profila datos"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Ļauj lietotnei lasīt jebkurus privātu vārdus, nosaukumus un frāzes, ko lietotājs saglabājis savā lietotāja vārdnīcā."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"rakstīt lietotāja noteiktā vārdnīcā"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Ļauj lietotnei rakstīt jaunus vārdus lietotāja vārdnīcā."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"pārveidot/dzēst USB kr. sat."</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"pārveidot/dzēst SD kartes saturu"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ļauj lietotnei rakstīt USB atmiņā."</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 385bebb..bb2cf62 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"tulis data kenalan"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Membenarkan apl untuk mengubah suai data kenalan (alamat) yang disimpan pada tablet anda. Apl hasad boleh menggunakannya untuk memadam atau mengubah suai data kenalan anda."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Membenarkan apl untuk mengubah suai data kenalan (alamat) yang disimpan pada telefon anda. Apl hasad boleh menggunakannya untuk memadam atau mengubah suai data kenalan anda."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"baca data profil anda"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Membenarkan apl untuk membaca maklumat profil peribadi yang disimpan dalam peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"tulis ke data profil anda"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Membenarkan apl membaca sebarang kata-kata peribadi, nama dan frasa yang mungkin telah disimpan oleh pengguna dalam kamus pengguna."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"tulis ke kamus yang ditakrifkan pengguna"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Membenarkan apl menulis perkataan baharu ke dalam kamus pengguna."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"ubah suai/padam kdgn storn USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ubah suai/padamkan kandungan kad SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Membenarkan apl menulis ke storan USB."</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index e70a664..39c733e 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"skrive kontaktinformasjon"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Lar appen lese alle kontaktdataene (adressene) som er lagret på nettbrettet. Ondsinnede apper kan bruke dette til å slette eller endre kontaktdataene dine."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Lar appen lese alle kontaktdataene (adressene) som er lagret på telefonen. Ondsinnede apper kan bruke dette til å slette eller endre kontaktdataene dine."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"lese profildataene dine"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Lar appen lese personlige profilinformasjon som er lagret på enheten, som for eksempel navn og kontaktinformasjon. Dette betyr at appen kan identifisere deg og sende profilinformasjonen din til andre."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"skriv til profildataene dine"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Lar appen lese eventuelle private ord, navn og uttrykk som brukeren kan ha lagret i brukerordlisten."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"skrive i brukerdefinert ordliste"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Lar appen skrive nye ord i brukerordlisten."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"endre/slette innh. i USB-lagr."</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"redigere/slette innhold på minnekort"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Gir appen tillatelse til å skrive til USB-lagringen."</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 6876c63..7609cc5 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"contactgegevens schrijven"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Hiermee kan de app de op uw tablet opgeslagen contactgegevens (adresgegevens) wijzigen. Schadelijke apps kunnen hiermee uw contactgegevens verwijderen of wijzigen."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Hiermee kan de app de op uw telefoon opgeslagen contactgegevens (adresgegevens) wijzigen. Schadelijke apps kunnen hiermee uw contactgegevens verwijderen of wijzigen."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"uw profielgegevens lezen"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Hiermee kan de app persoonlijke profielgegevens lezen die op uw apparaat zijn opgeslagen, zoals uw naam en contactgegevens. Dit betekent dat de app u kan identificeren en uw profielgegevens naar anderen kan verzenden."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"schrijven naar profielgegevens"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Hiermee kan de app privéwoorden, namen en woordcombinaties lezen die de gebruiker heeft opgeslagen in het gebruikerswoordenboek."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"schrijven naar door gebruiker gedefinieerd woordenboek"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Hiermee kan de app nieuwe woorden schrijven naar het gebruikerswoordenboek."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"inhoud van USB-opslag aanpassen/verwijderen"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"inhoud op de SD-kaart aanpassen/verwijderen"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Hiermee kan de app schrijven naar de USB-opslag."</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 96dcfa0..b4fc77b 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"zapisywanie danych kontaktowych"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Pozwala aplikacji na zmianę danych kontaktowych (adresowych) zapisanych w tablecie. Złośliwe aplikacje mogą to wykorzystać w celu usunięcia lub zmodyfikowania Twoich danych kontaktowych."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Pozwala aplikacji na zmianę danych kontaktowych (adresowych) zapisanych w telefonie. Złośliwe aplikacje mogą to wykorzystać do usunięcia lub zmodyfikowania Twoich danych kontaktowych."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"odczyt danych z Twojego profilu"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Pozwala aplikacji na odczyt informacji, takich jak Twoje nazwisko i informacje kontaktowe, z profilu osobistego przechowywanego na urządzeniu. Oznacza to, że inne aplikacje mogą Cię zidentyfikować i przesłać informacje z Twojego profilu do innych osób."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"zapis danych w Twoim profilu"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Pozwala aplikacji na odczytywanie wszelkich prywatnych słów, nazw i wyrażeń zapisanych w słowniku użytkownika."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"zapisywanie w słowniku zdefiniowanym przez użytkownika"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Pozwala aplikacji na zapisywanie nowych słów do słownika użytkownika."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"Modyfikowanie/usuwanie z nośnika USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modyfikowanie/usuwanie zawartości karty SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Pozwala aplikacji na zapis w pamięci USB."</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 7f031fd..f76be4c 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"escrever dados de contacto"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permite que a aplicação modifique os dados de contacto (endereço) armazenados no tablet. As aplicações maliciosas podem utilizar isto para apagar ou modificar os dados dos seus contactos."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permite que uma aplicação modifique os dados de contacto (endereço) armazenados no telemóvel. As aplicações maliciosas podem utilizar isto para apagar ou modificar os dados dos seus contactos."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"ler os dados do perfil"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permite que a aplicação leia dados de perfil pessoais armazenados no seu aparelho, como o seu nome e dados de contacto. Isto significa que outras aplicações podem identificá-lo e enviar os seus dados de perfil a terceiros."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"escrever nos dados do seu perfil"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permite à aplicação ler quaisquer palavras, nomes e expressões privadas que o utilizador possa ter armazenado no dicionário do utilizador."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"escrever no dicionário definido pelo utilizador"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite à aplicação escrever novas palavras no dicionário do utilizador."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"mod./elim. conteúdo do armaz. USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/eliminar conteúdo do cartão SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite que a aplicação escreva na unidade de armazenamento USB."</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index fbfe88f..46e445e 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"gravar dados de contato"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permite que o aplicativo modifique os dados de contato (endereço) armazenados em seu tablet. Aplicativos maliciosos podem usar esse recurso para apagar ou modificar seus dados de contato."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permite que o aplicativo modifique os dados de contato (endereço) armazenados em seu telefone. Aplicativos maliciosos podem usar esse recurso para apagar ou modificar seus dados de contato."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"ler dados de seu perfil"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permite que o aplicativo leia informações de perfil pessoais armazenadas em seu dispositivo, como seu nome e informações de contato. Isso significa que o aplicativo pode identificá-lo e enviar suas informações de perfil para outros aplicativos."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"escrever nos dados do perfil"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permite que o aplicativo leia palavras, nomes e frases particulares armazenados pelo usuário no dicionário do usuário."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"gravar no dicionário definido pelo usuário"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite que o aplicativo grave novas palavras no dicionário do usuário."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificar/excluir cont. USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificar/excluir conteúdo do cartão SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite gravar no armaz. USB."</string> diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml index ff76f74..fc6a510 100644 --- a/core/res/res/values-rm/strings.xml +++ b/core/res/res/values-rm/strings.xml @@ -489,6 +489,18 @@ <skip /> <!-- no translation found for permdesc_writeContacts (5075164818647934067) --> <skip /> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <!-- no translation found for permlab_readProfile (6824681438529842282) --> <skip /> <!-- no translation found for permdesc_readProfile (94520753797630679) --> @@ -764,6 +776,14 @@ <skip /> <!-- no translation found for permdesc_writeDictionary (8185385716255065291) --> <skip /> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <!-- no translation found for permlab_sdcardWrite (85430876310764752) --> <skip /> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modifitgar/stizzar cuntegns da la carta SD"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index cac586e..057b005 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"scriere date de contact"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Permite aplicaţiei să modifice datele de contact (adresele) stocate pe tabletă. Aplicaţiile rău intenţionate pot să utilizeze această permisiune pentru a şterge sau a modifica datele dvs. de contact."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Permite aplicaţiei să modifice datele de contact (adresele) stocate pe telefon. Aplicaţiile rău intenţionate pot să utilizeze această permisiune pentru a şterge sau pentru a modifica datele dvs. de contact."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"citire date din profilul dvs."</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Permite aplicaţiei să citească informaţii de profil personal stocate pe dispozitiv, cum ar fi numele şi informaţiile de contact, ceea ce înseamnă că aplicaţia vă poate identifica şi poate trimite informaţiile dvs. de profil altor utilizatori."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"scriere date în profilul dvs."</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Permite aplicaţiei să citească cuvinte, nume şi expresii private stocate de utilizator în dicţionarul său."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"scriere în dicţionarul definit de utilizator"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permite aplicaţiei să scrie cuvinte noi în dicţionarul utilizatorului."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"modificare/ştergere a conţinutului stocării USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"modificare/ştergere conţinut card SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite scriere în stoc. USB."</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 3a554d6..4dc24f7 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"перезаписывать данные контакта"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Приложение сможет изменять адреса, сохраненные на планшетном ПК. Вредоносные программы смогут таким образом удалять и изменять данные ваших контактов."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Приложение сможет изменять адреса, сохраненные на телефоне. Вредоносные программы смогут таким образом удалять и изменять данные ваших контактов."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"просматривать данные профиля"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Приложение сможет считывать информацию личного профиля, сохраненную на устройстве, такую как ваше имя и контактные данные. Это означает, что приложение сможет получить ваши личные данные и отправить их другим пользователям."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"изменение данных профиля"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Приложение получит доступ ко всем словам, именам и фразам, которые хранятся в пользовательском словаре."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"запись данных в пользовательский словарь"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Приложение сможет добавлять слова в пользовательский словарь."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"доступ к USB-накопителю"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"изменять/удалять содержимое SD-карты"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Приложение сможет записывать данные на USB-накопитель."</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index daa321d..2be8c1f 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"zápis údajov kontaktov"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Umožňuje aplikácii zmeniť všetky kontaktné údaje (adresy) uložené v tablete. Škodlivé aplikácie to môžu využiť a vymazať alebo zmeniť vaše kontaktné údaje."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Umožňuje aplikácii čítať všetky kontaktné údaje (adresy) uložené v telefóne. Škodlivé aplikácie to môžu využiť na odoslanie vašich údajov iným osobám."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"čítať údaje vášho profilu"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Umožňuje aplikácii čítať informácie v osobnom profile uložené vo vašom zariadení, ako je vaše meno a kontaktné informácie. Znamená to, že ďalšie aplikácie vás môžu identifikovať a poslať ostatným informácie o vašom profile."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"zapisovať do údajov profilu"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Umožňuje aplikácii čítať súkromné slová, názvy a frázy, ktoré mohol používateľ uložiť do slovníka používateľa."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"zapisovať do slovníka definovaného používateľom"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Umožňuje aplikácii zapisovať nové slová do používateľského slovníka."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"upraviť/odstrániť obsah ukl. pr. USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"Zmeniť/odstrániť obsah karty SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Umožňuje aplikácii zápis do ukladacieho priestoru USB."</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 20ad59b..144cbd3 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"pisanje podatkov stika"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Programu omogoča spreminjanje podatkov stikov (naslov), shranjenih v tabličnem računalniku. Zlonamerni programi lahko to uporabijo za brisanje ali spreminjanje podatkov stika."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Programu omogoča spreminjanje podatkov stikov (naslov), shranjenih v telefonu. Zlonamerni programi lahko to uporabijo za brisanje ali spreminjanje podatkov stika."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"branje podatkov v profilu"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Programu omogoča branje osebnih podatkov v profilu, kot so ime in podatki za stik. To pomeni, da vas lahko program prepozna in vaše podatke o profilu pošlje drugim."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"pisanje v podatke v profilu"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Programu omogoča branje morebitnih zasebnih besed, imen in izrazov, ki jih je uporabnik shranil v uporabniški slovar."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"pisanje v uporabniško določen slovar"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Programu omogoča pisanje nove besede v uporabniški slovar."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"spreminjanje vsebine pomnilnika USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"spreminjanje/brisanje vsebine kartice SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Programu omogoča zapisovanje v pomnilnik USB."</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 9fb8abf..3cded5a 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"уписивање података о контактима"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Дозвољава апликацији да измени податке о контакту (адреси) сачуване на таблету. Злонамерне апликације могу то да искористе да би избрисале или измениле податке о контакту."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Дозвољава апликацији да измени податке о контакту (адреси) сачуване на телефону. Злонамерне апликације могу то да искористе да би избрисале или измениле податке о контакту."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"читање података о профилу"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Дозвољава апликацији да чита личне информације са профила сачуване на уређају, као што су име и контакт информације. То значи да друге апликације могу да вас идентификују и да информације о вашем профилу шаљу другима."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"уписивање у податке профила"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Дозвољава апликацији да чита све приватне речи, називе и фразе које је корисник сачувао у корисничком речнику."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"уписивање у речник који је дефинисао корисник"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дозвољава апликацији да уписује нове речи у кориснички речник."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"измена/брисање садржаја USB меморије"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"измена/брисање садржаја SD картице"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дозвољава апликацији да уписује податке на USB меморију."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 2c4189b..5c58d72 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"skriva kontaktuppgifter"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Tillåter att appen ändrar kontaktuppgifter (adresser) som lagras på pekdatorn. Skadliga appar kan använda detta för att radera eller ändra kontaktuppgifter."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Tillåter att appen ändrar kontaktuppgifter (adresser) som lagras på mobilen. Skadliga appar kan använda detta för att radera eller ändra kontaktuppgifter."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"läser din profilinformation"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Tillåter att appen läser personlig profilinformation som lagras på din enhet, t.ex. ditt namn och kontaktuppgifter. Det innebär att appen kan identifiera dig och skicka profilinformation till andra."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"skriver till data för din profil"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Tillåter att appen läser alla privata ord, namn och fraser som användaren har sparat i ordlistan."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"lägga till i användardefinierad ordlista"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Tillåter att appen anger nya ord i användarordlistan."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"läs innehållet på USB-lagringsenheten"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"läs innehållet på SD-kortet"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Appen får läsa innehåll på USB-enhet."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Tillåter appen att läsa innehållet på SD-kort."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"ändra/ta bort från USB-enhet"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"ändra/ta bort innehåll på SD-kortet"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Gör att app skriver till USB."</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 13053ab..e62e1ab 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"andika data ya anwani"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Inaruhusu programu kurekebisha data ya mwasiliani(anwani) iliyohifadhiwa kwenye kompyuta yako ki. programu hasidi zinaweza tumia hii kufuta au kurekebisha data yako ya mwasiliani."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Inaruhusu programu kurekebisha data ya mwasiliani(anwani) iliyohifadhiwa kwenye simu yako. Programu hasidi zinaweza kutumia hii kufuta au kurekebisha data yako ya mwasiliani."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"soma data ya maelezo yako mafupi"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Inaruhusu programu kusoma maelezo mafupi ya kibinafsi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na taarifa ya kuwasiliana. Hii ina maanisha programu inaweza kukutambua na kutuma taarifa yako fupi ya kibinafsi kwa wengine."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"andika kwenye data ya maelezo yako mafupi"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Inaruhusu programu kusoma maneno, majina na vifungu vyovyote vya kibinafsi, ambavyo huenda mtumiaji amehifadhi katika kamusi ya mtumiaji."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"andika kwa kamusi iliyobainishwa na mtumiaji"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Inaruhusu programu kuandika maneno mapya katika kamusi ya mtumiaji."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"rekebisha/futa maudhui ya hifadhi ya USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"rekebisha/futa maudhui ya kadi ya SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Inaruhusu programu kuandikia hifadhi ya USB."</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index a9a196c..ea6f572 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"เขียนข้อมูลที่อยู่ติดต่อ"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"อนุญาตให้แอปพลิเคชันแก้ไขข้อมูลการติดต่อ (ที่อยู่) ที่เก็บไว้ในแท็บเล็ตของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ลบหรือแก้ไขข้อมูลการติดต่อของคุณ"</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"อนุญาตให้แอปพลิเคชันแก้ไขข้อมูลการติดต่อ (ที่อยู่) ที่เก็บไว้ในโทรศัพท์ของคุณ แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ลบหรือแก้ไขข้อมูลการติดต่อของคุณ"</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"อ่านข้อมูลโปรไฟล์ของคุณ"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลโปรไฟล์ส่วนบุคคลที่เก็บไว้บนอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลติดต่อ ซึ่งหมายความว่าแอปพลิเคชันจะสามารถระบุตัวตนของคุณและส่งข้อมูลโปรไฟล์ของคุณแก่ผู้อื่นได้"</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"เขียนลงในข้อมูลโปรไฟล์ของคุณ"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"อนุญาตให้แอปพลิเคชันอ่านคำ ชื่อ และวลีส่วนบุคคลที่ผู้ใช้อาจเก็บไว้ในพจนานุกรมของผู้ใช้"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"เขียนลงในพจนานุกรมที่ผู้ใช้กำหนด"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"อนุญาตให้แอปพลิเคชันเขียนคำใหม่ลงในพจนานุกรมผู้ใช้"</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"แก้ไข/ลบเนื้อหาของที่เก็บข้อมูล USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"แก้ไข/ลบข้อมูลการ์ด SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"อนุญาตให้แอปฯ เขียนลงใน USB"</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 2672083..f143b5f 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"sumulat ng data ng pakikipag-ugnay"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Pinapayagan ang app na baguhin ang data ng contact (address) na nakaimbak sa iyong tablet. Maaari itong gamitin ng nakakahamak na apps upang burahin o baguhin ang iyong data ng contact."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Pinapayagan ang app na baguhin ang data ng contact (address) na nakaimbak sa iyong telepono. Maaari itong gamitin ng nakakahamak na apps upang burahin o baguhin ang iyong data ng contact."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"basahin ang iyong data ng profile"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Pinapayagan ang app na basahin ang personal na impormasyon ng profile na nakaimbak sa iyong device, gaya ng iyong pangalan at impormasyon ng contact. Nangangahulugan ito na makikilala ka ng app at maipapadala nito ang impormasyon ng iyong profile sa iba."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"i-write sa iyong data ng profile"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Pinapayagan ang app na magbasa ng anumang pribadong mga salita, pangalan at parirala na maaaring inimbak ng user sa diksyunaryo ng user."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"magsulat sa diksyunaryong tinukoy ng user"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Pinapayagan ang app na magsulat ng mga bagong salita sa diksyunaryo ng user."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"baguhin/tanggalin laman ng USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"baguhin/tanggalin ang mga nilalaman ng SD card"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Pinapayagan ang app na magsulat sa USB storage."</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 059ccea..9adc8aa 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"kişi verileri yaz"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Uygulamaya, tabletinizde depolanan kişi (adres) verilerini değiştirme izni verir. Kötü amaçlı uygulamalar kişi verilerinizi silmek veya değiştirmek için bunu kullanabilir."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Uygulamaya, telefonunuzda depolanan kişi (adres) verilerini değiştirme izni verir. Kötü amaçlı uygulamalar kişi verilerinizi silmek veya değiştirmek için bunu kullanabilir."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"profil verilerimi oku"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Uygulamaya, adınız ve iletişim bilgileriniz gibi cihazınızda saklanan kişisel profil bilgilerini okuma izni verir. Bu izin, uygulamanın sizi tanımlayabileceği ve profil bilgilerinizi başkalarına gönderebileceği anlamına gelir."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"profil verilerime yaz"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Uygulamaya, kullanıcının kullanıcı sözlüğünde depolamış olabileceği kişisel kelimeleri, adları ve kelime öbeklerini okuma izni verir."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"kullanıcı tanımlı sözlüğe yaz"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Uygulamaya, kullanıcı sözlüğüne yeni kelimeler yazma izni verir."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"USB dep birm içeriğini dğş/sil"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"SD kart içeriklerini değiştir/sil"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Uygulamaya USB depolama birimine yazma izni verir."</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 42929ec..3ff5f79 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"запис. контактні дані"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Дозволяє програмі змінювати контактні дані (адресу), збережені в планшетному ПК. Шкідливі програми можуть використовувати це для видалення чи зміни ваших контактних даних."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Дозволяє програмі змінювати контактні дані (адресу), збережені в телефоні. Шкідливі програми можуть використовувати це для видалення чи зміни ваших контактних даних."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"читати дані вашого профілю"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Дозволяє програмі читати особисту інформацію профілю, збережену на вашому пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що інші програми можуть ідентифікувати вашу особу та надсилати дані вашого профілю іншим."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"записувати в дані профілю"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Дозволяє програмі читати будь-які особисті вислови, назви та фрази, які користувач міг зберегти у своєму словнику."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"писати у вказаний користувачем словник"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дозволяє програмі писати нові слова в словник користувача."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"читати вміст носія USB"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"читати вміст карти SD"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Дозволяє програмі читати вміст носія USB."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Дозволяє програмі читати вміст карти SD."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"змінювати/видаляти вміст носія USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"змінювати/видал. вміст карти SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дозволяє програмі писати на носій USB"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 64469ab..aa4e695 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"ghi dữ liệu liên hệ"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Cho phép ứng dụng sửa đổi dữ liệu (địa chỉ) liên hệ được lưu trữ trên máy tính bảng của bạn. Ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu liên hệ của bạn."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Cho phép ứng dụng sửa đổi dữ liệu (địa chỉ) liên hệ được lưu trữ trên điện thoại của bạn. Ứng dụng độc hại có thể sử dụng quyền này để xóa hoặc sửa đổi dữ liệu liên hệ của bạn."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"đọc d.liệu t.sử của bạn"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Cho phép ứng dụng đọc thông tin tiểu sử cá nhân được lưu trữ trên thiết bị, chẳng hạn như tên và thông tin liên hệ của bạn. Điều này có nghĩa là ứng dụng có thể xác định danh tính của bạn và gửi thông tin tiểu sử của bạn cho người khác."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"ghi dữ liệu t.sử của bạn"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Cho phép ứng dụng đọc bất kỳ từ, tên và cụm từ riêng nào mà người dùng có thể đã lưu trữ trong từ điển của người dùng."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"ghi vào từ điển do người dùng xác định"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Cho phép ứng dụng ghi từ mới vào từ điển của người dùng."</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"sửa đổi/xóa nội dung bộ nhớ USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"sửa đổi/xóa nội dung thẻ SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Cho phép ứng dụng ghi vào bộ lưu trữ USB."</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 2664ad3..f21d7b8 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"写入联系数据"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"允许应用程序读取您平板电脑上存储的联系人(地址)数据。恶意应用程序可能借此清除或修改您的联系人数据。"</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"允许应用程序修改您手机上存储的联系人(地址)数据。恶意应用程序可能借此清除或修改您的联系人数据。"</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"读取您的个人资料数据"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"允许应用程序读取您设备上存储的个人资料信息,例如您的姓名和联系信息。这意味着应用程序可以识别您的身份,并将您的个人资料信息发送给他人。"</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"写入到您的个人资料数据"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"允许应用程序读取用户可能在用户词典中已存储的任意私有字词、名称和短语。"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"写入用户定义的词典"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"允许应用程序向用户词典中写入新词。"</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"修改/删除 USB 存储设备内容"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"修改/删除 SD 卡中的内容"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"允许应用程序写入 USB 存储设备。"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 7c8617e..67a78c6 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"輸入聯絡人資料"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"允許應用程式修改平板電腦上儲存的聯絡人 (地址) 資料。請注意,惡意應用程式可能利用此功能清除或修改您的聯絡人資料。"</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"允許應用程式修改手機上儲存的聯絡人 (地址) 資料。請注意,惡意應用程式可能利用此功能清除或修改您的聯絡人資料。"</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"讀取您的個人資料"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"允許應用程式讀取裝置上儲存的個人資料,例如您的姓名和聯絡資訊。這表示應用程式可以識別您的身分,並將您的個人資料傳送給他人。"</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"寫入您的個人資料"</string> @@ -499,6 +511,14 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"允許應用程式讀取使用者儲存在使用者字典內的任何私人字詞、名稱和詞組。"</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"寫入使用者定義的字典"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"允許應用程式將新字詞寫入使用者的字典。"</string> + <!-- no translation found for permlab_sdcardRead (4086221374639183281) --> + <skip /> + <!-- no translation found for permlab_sdcardRead (8537875151845139539) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (1055302898999352339) --> + <skip /> + <!-- no translation found for permdesc_sdcardRead (7947792373570683542) --> + <skip /> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"修改/刪除 USB 儲存裝置內容"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"修改/刪除 SD 卡的內容"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"允許應用程式寫入 USB 儲存裝置。"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 09777ab..e7e6f6d 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -335,6 +335,18 @@ <string name="permlab_writeContacts" msgid="644616215860933284">"bhala idatha yothintana naye"</string> <string name="permdesc_writeContacts" product="tablet" msgid="988969759110632978">"Ivumela insiza ukuthi iguqule imininingwane yekheli lokuxhumana eligcinwe ekhompyutheni yakho yepeni. Izinsiza ezinobungozi zingasebenzisa lokhu ukususa noma ziguqule ulwazi lwakho lokuxhuana."</string> <string name="permdesc_writeContacts" product="default" msgid="5075164818647934067">"Ivumela insiza ukuthi iguqule imininingwane yekheli lokuxhumana eligcinwe ocingweni lwakho. Izinsiza ezinobungozi zingasebenzisa lokhu ukususa noma ziguqule ulwazi lwakho lokuxhuana."</string> + <!-- no translation found for permlab_readCallLog (3478133184624102739) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3995157599976515002) --> + <skip /> + <!-- no translation found for permdesc_readCallLog (3452017559804750758) --> + <skip /> + <!-- no translation found for permlab_writeCallLog (8552045664743499354) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (6661806062274119245) --> + <skip /> + <!-- no translation found for permdesc_writeCallLog (683941736352787842) --> + <skip /> <string name="permlab_readProfile" msgid="6824681438529842282">"bhala imininingo yemininingwane yakho"</string> <string name="permdesc_readProfile" product="default" msgid="94520753797630679">"Ivumela insiza ukuthi ifunde ulwazi lomuntu lwephrofayli olugcinwe edivayisini yakho njengegama lakho kanye nemininingwane yokuxhumana nawe. Lokhu kuchaza ukuthi izinsa ingakuhlonza bese ithumelela abanye imininingwane yephrofayili yakho."</string> <string name="permlab_writeProfile" msgid="4679878325177177400">"bhala imininingwane yemininingo yakho"</string> @@ -499,6 +511,10 @@ <string name="permdesc_readDictionary" msgid="8977815988329283705">"Ivumela uhlelo lokusebenza ukufunda noma yimaphi amagama ayimfihlo, amagama nemisho leyo umsebenzisi ayigcine kwisichazamazwi somsebenzisi."</string> <string name="permlab_writeDictionary" msgid="2296383164914812772">"bhala kwisichazamazwi esicacisiwe somsebenzisi"</string> <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Ivumela insiza ukuthi ibhale amagama amasha esichazinimazwi."</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="4086221374639183281">"funda okuqukethwe kwesitoreji se-USB"</string> + <string name="permlab_sdcardRead" product="default" msgid="8537875151845139539">"funda okuqukethwe kwekhadi le-SD"</string> + <string name="permdesc_sdcardRead" product="nosdcard" msgid="1055302898999352339">"Ivumela uhlelo lokusebenza ukufunda okuqukethwe kwesitoreji se-USB."</string> + <string name="permdesc_sdcardRead" product="default" msgid="7947792373570683542">"Ivumela uhlelo lokusebenza kufunda okuqukethwe kwekhadi le-SD."</string> <string name="permlab_sdcardWrite" product="nosdcard" msgid="85430876310764752">"guqula/susa okuqukethwe isitoreji se-USB"</string> <string name="permlab_sdcardWrite" product="default" msgid="8079403759001777291">"guqula/susa okuqukethwe kwekhadi le-SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Ivumela insiza ukuthi ibhalele ekulondolozweni kwe-USB."</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 7137b7c..7799f74 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -942,6 +942,26 @@ contact (address) data stored on your phone. Malicious apps may use this to erase or modify your contact data.</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_readCallLog">read call log</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_readCallLog" product="tablet">Allows the app to read your tablet\'s call log, including data about incoming and outgoing calls. + Malicious apps may use this to send your data to other people.</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_readCallLog" product="default">Allows the app to read your phone\'s call log, including data about incoming and outgoing calls. + Malicious apps may use this to send your data to other people.</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_writeCallLog">write call log</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_writeCallLog" product="tablet">Allows the app to modify your tablet\'s call log, including data about incoming and outgoing calls. + Malicious apps may use this to erase or modify your call log.</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_writeCallLog" product="default">Allows the app to modify your phone\'s call log, including data about incoming and outgoing calls. + Malicious apps may use this to erase or modify your call log.</string> + + <!-- Title of the read profile permission, listed so the user can decide whether to allow the application to read the user's personal profile data. [CHAR LIMIT=30] --> <string name="permlab_readProfile">read your profile data</string> <!-- Description of the read profile permission, listed so the user can decide whether to allow the application to read the user's personal profile data. [CHAR LIMIT=NONE] --> diff --git a/core/tests/coretests/src/android/util/LocaleUtilTest.java b/core/tests/coretests/src/android/util/LocaleUtilTest.java deleted file mode 100644 index 0ca6043..0000000 --- a/core/tests/coretests/src/android/util/LocaleUtilTest.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.util; - -import java.util.Locale; - -import android.test.AndroidTestCase; -import dalvik.annotation.TestLevel; -import dalvik.annotation.TestTargetNew; - -import static android.view.View.LAYOUT_DIRECTION_LTR; -import static android.view.View.LAYOUT_DIRECTION_RTL; - -public class LocaleUtilTest extends AndroidTestCase { - - @TestTargetNew( - level = TestLevel.COMPLETE, - method = "getLayoutDirectionFromLocale", - args = {Locale.class} - ) - public void testGetLayoutDirectionFromLocale() { - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(null)); - - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.ENGLISH)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.CANADA)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.CANADA_FRENCH)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.FRANCE)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.FRENCH)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.GERMAN)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.GERMANY)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.ITALIAN)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.ITALY)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.UK)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.US)); - - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.ROOT)); - - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.CHINA)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.CHINESE)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.JAPAN)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.JAPANESE)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.KOREA)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.KOREAN)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.PRC)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.SIMPLIFIED_CHINESE)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.TAIWAN)); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(Locale.TRADITIONAL_CHINESE)); - - Locale locale = new Locale("ar"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "AE"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "BH"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "DZ"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "EG"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "IQ"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "JO"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "KW"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "LB"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "LY"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "MA"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "OM"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "QA"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "SA"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "SD"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "SY"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "TN"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ar", "YE"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - locale = new Locale("fa"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("fa", "AF"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("fa", "IR"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - locale = new Locale("iw"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("iw", "IL"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("he"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("he", "IL"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - locale = new Locale("pa_Arab"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("pa_Arab", "PK"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - locale = new Locale("ps"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ps", "AF"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - locale = new Locale("ur"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ur", "IN"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("ur", "PK"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - locale = new Locale("uz_Arab"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - locale = new Locale("uz_Arab", "AF"); - assertEquals(LAYOUT_DIRECTION_RTL, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - - // Locale without a real language - locale = new Locale("zz"); - assertEquals(LAYOUT_DIRECTION_LTR, - LocaleUtil.getLayoutDirectionFromLocale(locale)); - } -} diff --git a/core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java b/core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java index a304b68..306f58f 100644 --- a/core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java +++ b/core/tests/coretests/src/com/android/internal/util/BitwiseStreamsTest.java @@ -133,4 +133,25 @@ public class BitwiseStreamsTest extends AndroidTestCase { long end = android.os.SystemClock.elapsedRealtime(); Log.d(LOG_TAG, "repeated encode-decode took " + (end - start) + " ms"); } + + @SmallTest + public void testExpandArray() throws Exception { + Random random = new Random(); + int iterations = 10000; + int[] sizeArr = new int[iterations]; + int[] valueArr = new int[iterations]; + BitwiseOutputStream outStream = new BitwiseOutputStream(8); + for (int i = 0; i < iterations; i++) { + int x = random.nextInt(); + int size = (x & 0x07) + 1; + int value = x & (-1 >>> (32 - size)); + sizeArr[i] = size; + valueArr[i] = value; + outStream.write(size, value); + } + BitwiseInputStream inStream = new BitwiseInputStream(outStream.toByteArray()); + for (int i = 0; i < iterations; i++) { + assertEquals(valueArr[i], inStream.read(sizeArr[i])); + } + } } |